<?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>69197</bug_id>
          
          <creation_ts>2011-09-30 17:40:49 -0700</creation_ts>
          <short_desc>First round of unit tests for CCLayerTreeHostCommon</short_desc>
          <delta_ts>2011-10-07 16:19:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>67341</blocked>
    
    <blocked>68942</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Shawn Singh">shawnsingh</reporter>
          <assigned_to name="Shawn Singh">shawnsingh</assigned_to>
          <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>476456</commentid>
    <comment_count>0</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-09-30 17:40:49 -0700</bug_when>
    <thetext>This bug focuses on testing that calculateDrawTransformsAndVisibility computes correct transforms.
The metabug for all unit tests is https://bugs.webkit.org/show_bug.cgi?id=68942

This first patch is only for review.   The tests are complete and working, except for the last set of tests in &quot;verifyTransformsForRenderSurfaceHierarchy&quot;...  But the implementation will have the same pattern.

Vangelis, could you please review this?  Thanks in advance!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476457</commentid>
    <comment_count>1</comment_count>
      <attachid>109383</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-09-30 17:42:01 -0700</bug_when>
    <thetext>Created attachment 109383
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477335</commentid>
    <comment_count>2</comment_count>
      <attachid>109383</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-03 16:38:47 -0700</bug_when>
    <thetext>Comment on attachment 109383
Patch

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

Looks good!  Thanks for getting the ball rolling on this.

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:95
&gt; +void executeCalculateDrawTransformsAndVisibilityWithDummyVariables(LayerChromium * rootLayer)

nit: Shortening the name of this function (e.g. getting rid of the WithDummyVariables part) will make the rest of the code somewhat easier to read.

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:354
&gt; +TEST(CCLayerTreeHostCommonTest, verifyTransformsForRenderSurfaceHierarchy)

Since this test doesn&apos;t test anything, it should be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477339</commentid>
    <comment_count>3</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-03 16:41:27 -0700</bug_when>
    <thetext>&gt; 
&gt; &gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:354
&gt; &gt; +TEST(CCLayerTreeHostCommonTest, verifyTransformsForRenderSurfaceHierarchy)
&gt; 
&gt; Since this test doesn&apos;t test anything, it should be removed.

Thanks for looking at this.  Actually I&apos;ve already implemented this function (it was related to transforms), and will submit another patch for final review by tonight.

~Shawn</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477401</commentid>
    <comment_count>4</comment_count>
      <attachid>109569</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-03 19:02:03 -0700</bug_when>
    <thetext>Created attachment 109569
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477403</commentid>
    <comment_count>5</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-03 19:03:26 -0700</bug_when>
    <thetext>On my part this code is final and ready for commit.  But I&apos;ll be happy to make any changes based on reviews.   Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477409</commentid>
    <comment_count>6</comment_count>
      <attachid>109572</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-03 19:16:45 -0700</bug_when>
    <thetext>Created attachment 109572
fixed a badly misleading comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479505</commentid>
    <comment_count>7</comment_count>
      <attachid>110028</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-06 14:44:28 -0700</bug_when>
    <thetext>Created attachment 110028
fixed a few more incorrect comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479507</commentid>
    <comment_count>8</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-06 14:45:56 -0700</bug_when>
    <thetext>Hi all, still waiting for final review on this.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479657</commentid>
    <comment_count>9</comment_count>
      <attachid>110028</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-06 17:22:11 -0700</bug_when>
    <thetext>Comment on attachment 110028
fixed a few more incorrect comments

Looks good.  Unofficial r+ from me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479670</commentid>
    <comment_count>10</comment_count>
      <attachid>110028</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-06 17:39:25 -0700</bug_when>
    <thetext>Comment on attachment 110028
fixed a few more incorrect comments

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

3 small nits and this is good to go

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:39
&gt; +// NOTE CAREFULLY:
&gt; +//
&gt; +// In these tests, the relationship between anchor point, position, and bounds is not intuitive. The following two points
&gt; +// should help clarify the code:

This comment is very nice but I&apos;m not sure why it&apos;s in this test file in particular. Should this be on LayerChromium.h instead? I think it&apos;s more likely that people trying to understand an interface will look at the header, and not at a comment in a test file.

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:81
&gt; +void setLayerPropertiesForTesting(LayerChromium * layer, const TransformationMatrix&amp; transform, const TransformationMatrix&amp; sublayerTransform, const FloatPoint&amp; anchor, const FloatPoint&amp; position, const IntSize&amp; bounds, bool preserves3D)

WebKit style is to put the * with the typename - so for instance &quot;LayerChromium* layer&quot;.

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:91
&gt; +void executeCalculateDrawTransformsAndVisibility(LayerChromium * rootLayer)

&quot;LayerChromium *&quot; -&gt; &quot;LayerChromium*&quot;

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:161
&gt; +    setLayerPropertiesForTesting(layer.get(), identityMatrix, arbitraryTranslation, FloatPoint(0.0f, 0.0f), FloatPoint(0.0f, 0.0f), IntSize(0, 0), false);

note: for the future, there&apos;s a FloatPoint::zero() convenience function to get a 0,0 FloatPoint, or you can just say FloatPoint()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479678</commentid>
    <comment_count>11</comment_count>
      <attachid>110028</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-06 18:02:46 -0700</bug_when>
    <thetext>Comment on attachment 110028
fixed a few more incorrect comments

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

&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:39
&gt;&gt; +// should help clarify the code:
&gt; 
&gt; This comment is very nice but I&apos;m not sure why it&apos;s in this test file in particular. Should this be on LayerChromium.h instead? I think it&apos;s more likely that people trying to understand an interface will look at the header, and not at a comment in a test file.

OK, putting it in the source rather than tests makes sense.  But I think the appropriate place for this comment is in LayerTreeHostCommon.cpp, merged with the existing large comment there.  How&apos;s that?

&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:81
&gt;&gt; +void setLayerPropertiesForTesting(LayerChromium * layer, const TransformationMatrix&amp; transform, const TransformationMatrix&amp; sublayerTransform, const FloatPoint&amp; anchor, const FloatPoint&amp; position, const IntSize&amp; bounds, bool preserves3D)
&gt; 
&gt; WebKit style is to put the * with the typename - so for instance &quot;LayerChromium* layer&quot;.

oops.  I would have expected the webkit style script to catch this...

&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:161
&gt;&gt; +    setLayerPropertiesForTesting(layer.get(), identityMatrix, arbitraryTranslation, FloatPoint(0.0f, 0.0f), FloatPoint(0.0f, 0.0f), IntSize(0, 0), false);
&gt; 
&gt; note: for the future, there&apos;s a FloatPoint::zero() convenience function to get a 0,0 FloatPoint, or you can just say FloatPoint()

OK I&apos;ll use zero().

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479681</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-06 18:10:44 -0700</bug_when>
    <thetext>Putting it in CCLayerTreeHostCommon sounds great too!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480128</commentid>
    <comment_count>13</comment_count>
      <attachid>110174</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-07 10:49:09 -0700</bug_when>
    <thetext>Created attachment 110174
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480130</commentid>
    <comment_count>14</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-07 10:52:15 -0700</bug_when>
    <thetext>For the most part I did not clobber the existing comments, only restructured and extended.  But I still think vangelis may want to review those comments in CCLayerTreeHostCommon before this lands.

Fixed the other two style issues, and everything else is unchanged since last patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480136</commentid>
    <comment_count>15</comment_count>
      <attachid>110176</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-07 10:58:55 -0700</bug_when>
    <thetext>Created attachment 110176
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480222</commentid>
    <comment_count>16</comment_count>
      <attachid>110176</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-10-07 12:41:27 -0700</bug_when>
    <thetext>Comment on attachment 110176
Patch

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

Thanks for taking the time to untangle this transformation mess!

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:105
&gt; +    //        intuitiveLayerPosition.x =  position.x - (anchorPoint.x * bounds.width)

Since intuitive is somewhat subjective, I think what you need to say here is the top left corner before any transforms are applied.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:110
&gt; +    //    lower left even though the coordinates the browser gives us

I find this somewhat confusing.  The only reason we have to do the flip is because in GL the world is upside-down.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:137
&gt; +    //           Tr[anchor].inverse() translates from the anchor offset back to the layer origin.

Is Tr[anchor] == Tr[c] ?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:140
&gt; +    //    intuitively described as:

The way I think about this is that the child transforms are expressed in terms of the top left corner of their parent (and not the center like the draw transform)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480335</commentid>
    <comment_count>17</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-07 15:04:18 -0700</bug_when>
    <thetext>
I&apos;ll submit the tests as a separate patch (the code is exactly the same as what was reviewed already).

I&apos;ll submit this comment update in CCLayerTreeHostCommon.cpp as a separate patch in a separate bug.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:110
&gt; &gt; +    //    lower left even though the coordinates the browser gives us
&gt; 
&gt; I find this somewhat confusing.  The only reason we have to do the flip is because in GL the world is upside-down.
&gt; 

I hesitated to change existing comments =)  So you&apos;re already certain about the GL flip, or do I need to dig into it and verify?  Then I&apos;ll change this comment accordingly.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:137
&gt; &gt; +    //           Tr[anchor].inverse() translates from the anchor offset back to the layer origin.
&gt; 
&gt; Is Tr[anchor] == Tr[c] ?

Tr[c] = &quot;intuitivePositionTrasnform&quot; * Tr[anchor].

This confusion probably exists because I tried to leave existing comments un-changed.  But if you&apos;re OK with it, I&apos;ll redo the terminology so that its more consistent with the new stuff, too.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:140
&gt; &gt; +    //    intuitively described as:
&gt; 
&gt; The way I think about this is that the child transforms are expressed in terms of the top left corner of their parent (and not the center like the draw transform)

OK, I&apos;ll try to update this, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480339</commentid>
    <comment_count>18</comment_count>
      <attachid>110223</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2011-10-07 15:10:57 -0700</bug_when>
    <thetext>Created attachment 110223
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480343</commentid>
    <comment_count>19</comment_count>
      <attachid>110223</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-07 15:15:26 -0700</bug_when>
    <thetext>Comment on attachment 110223
Patch

R=me on the tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480367</commentid>
    <comment_count>20</comment_count>
      <attachid>110223</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-07 16:19:35 -0700</bug_when>
    <thetext>Comment on attachment 110223
Patch

Clearing flags on attachment: 110223

Committed r96986: &lt;http://trac.webkit.org/changeset/96986&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480368</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-07 16:19:40 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109383</attachid>
            <date>2011-09-30 17:42:01 -0700</date>
            <delta_ts>2011-10-03 19:01:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69197-20110930174200.patch</filename>
            <type>text/plain</type>
            <size>26669</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY0MjAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
NjA1ZjgzMzM0Y2I0NGIyYTI3ODZkNWIwNjkxYjExNzAwYzIxMTQ0Ny4uZjBhMWI0MTViODI2NWI2
MDI5MGFhMjJjOWQzMWIyNjFkYTBlYzE0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMiBAQAorMjAxMS0wOS0zMCAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBGaXJzdCByb3VuZCBvZiB1bml0IHRlc3RzIGZvciBDQ0xheWVy
VHJlZUhvc3RDb21tb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02OTE5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcm91bmQgb2YgdGVzdHMgZm9jdXNlcyBvbiB2ZXJpZnlpbmcgdGhlIGNvbXB1
dGF0aW9uIG9mIG1hdHJpeCB0cmFuc2Zvcm1zCisgICAgICAgIGluIGNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAq
IHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OnNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
ZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eVdpdGhEdW1teVZhcmlh
Ymxlcyk6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmUzRENvbXBvbmVudE9mTWF0cml4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50OjpMYXll
ckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudDo6ZHJhd3NDb250ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlRFU1QpOgorCiAyMDExLTA5LTMwICBFbGxpb3QgUG9nZXIgIDxlcG9nZXJAZ29v
Z2xlLmNvbT4KIAogICAgICAgICB3ZWJraXQtPmNocm9taXVtIERFUFMgcm9sbCAxMDI5MTAtPjEw
MzQ3MQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggNTI1YWZlNjk2Y2UzMDhiMjU4
OTFhYjk3OTJiNDBjMDE0NGY4MTA2Yy4uOTcxZDFiODgxNTBkMzE5ZjU4NmZmZGY4ZjBiYWM0Nzdm
MTM1Yzk1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC01Niw2ICs1Niw3IEBA
CiAgICAgICAgICAgICAndGVzdHMvQXNzb2NpYXRlZFVSTExvYWRlclRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9DQ0xheWVyU29ydGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NUaHJlYWRUYXNrVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL0lEQkJpbmRpbmdVdGlsaXRpZXNUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45Mzk5MDYwMTAxYzg3NTRlMGIwODdkY2M0YmI1YzU2ZWE2M2ZkMGYyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LmNwcApAQCAtMCwwICsxLDM4MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgi
CisKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKKworI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rl
c3QuaD4KKworLy8KKy8vIE5PVEUgQ0FSRUZVTExZOgorLy8KKy8vIEluIHRoZXNlIHRlc3RzLCB0
aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYW5jaG9yIHBvaW50LCBwb3NpdGlvbiwgYW5kIGJvdW5k
cyBpcyBub3QgaW50dWl0aXZlLiBUaGUgZm9sbG93aW5nIHR3byBwb2ludHMKKy8vIHNob3VsZCBo
ZWxwIGNsYXJpZnkgdGhlIGNvZGU6CisvLworLy8gIDEuIEFzIGEgRmxvYXRQb2ludCBvYmplY3Qs
IGFuY2hvciBwb2ludCBpcyBzcGVjaWZpZWQgaW4gInVuaXQgbGF5ZXIgc3BhY2UiLCB3aGVyZSB0
aGUgYm91bmRzIG9mIHRoZSBsYXllciBtYXAgdG8gWzAsMV0uCisvLyAgICAgSG93ZXZlciwgYXMg
YSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBvYmplY3QsIHRoZSB0cmFuc2Zvcm0gdG8gdGhlIGFuY2hv
ciBwb2ludCBpcyBzcGVjaWZpZWQgaW4gInBpeGVsIGxheWVyIHNwYWNlIiwgd2hlcmUKKy8vICAg
ICB0aGUgYm91bmRzIG9mIHRoZSBsYXllciBtYXAgdG8gW2JvdW5kcy53aWR0aCgpLCBib3VuZHMu
aGVpZ2h0KCldLgorLy8KKy8vICAyLiBMYXllckNocm9taXVtOjpwb3NpdGlvbiBpcyBhbHNvIGF3
a3dhcmQgLSBpdCBpcyBhY3R1YWxseSB0aGUgc3VtIG9mIGFuY2hvclBvaW50IChpbiBwaXhlbCBz
cGFjZSkgYW5kIGFjdHVhbCBwb3NpdGlvbi4gQmVjYXVzZQorLy8gICAgIHRoaXMsIHRoZSB2YWx1
ZSBvZiBMYXllckNocm9taXVtOjpwb3NpdGlvbigpIGNoYW5nZXMsIGV2ZW4gdGhvdWdoIHRoZSBs
YXllciBpcyBub3QgYWN0dWFsbHkgbG9jYXRlZCBpbiBhIGRpZmZlcmVudCBwb3NpdGlvbi4KKy8v
ICAgICBXaGVuIHdlIGluaXRpYWxpemUgbGF5ZXJzIGZvciB0ZXN0aW5nIGhlcmUsIHdlIG5lZWQg
dG8gaW5pdGlhbGl6ZSB0aGF0IHVuaW50dXRpdmUgcG9zaXRpb24gdmFsdWUuCisvLworLy8gICAg
IFRvIGNvbXB1dGUgYSBtb3JlIGludHVpdGl2ZSB2ZXJzaW9uIG9mIHBvc2l0aW9uLCB5b3UgY2Fu
IGRvIHNvbWV0aGluZyBsaWtlOgorLy8gICAgICAgIGludHVpdGl2ZUxheWVyUG9zaXRpb24ueCA9
ICBwb3NpdGlvbi54IC0gKGFuY2hvclBvaW50LnggKiBib3VuZHMud2lkdGgpCisvLyAgICAgICAg
aW50dWl0aXZlTGF5ZXJQb3NpdGlvbi55ID0gIHBvc2l0aW9uLnkgLSAoYW5jaG9yUG9pbnQueSAq
IGJvdW5kcy5oZWlnaHQpCisvLworLy8gICAgIFRoaXMgImludHVpdGl2ZSBwb3NpdGlvbiIgaXMg
bW9yZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBleHBlY3RlZCBzZXF1ZW5jZSBvZiB0cmFuc2Zv
cm1zLgorLy8KKy8vIEFsc28gbm90ZSB0aGF0IHBhcnRpY3VsYXIgc2VxdWVuY2VzIG9mIHRyYW5z
Zm9ybXMgY2FuIGJlIGNvbW11dGF0aXZlIC0gZm9yIGV4YW1wbGUsIEEqQiB3aGVyZSBBIGFuZCBC
IGFyZSBib3RoIHRyYW5zbGF0aW9ucywgb3IgYm90aCBzY2FsZXMuCisvLyBUbyBwcm9wZXJseSB0
ZXN0IHRoZSBjb3JyZWN0IG9yZGVyIG9mIHRyYW5zZm9ybXMsIHdlIHRyeSB0byBtaXggc2NhbGVz
IGFuZCB0cmFuc2xhdGlvbnMgdG9nZXRoZXIgc28gdGhhdCB0aGV5IGFyZSBub3QgY29tbXV0YXRp
dmUuCisvLworCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCisv
LyBUaGlzIGlzIGEgbWFjcm8gaW5zdGVhZCBvZiBhIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIGd0ZXN0
IGVycm9ycyBjYW4gZ2l2ZSB1cyB1c2VmdWwgbGluZSBudW1iZXJzIGFzc29jaWF0ZWQgd2l0aCB0
aGUgdGVzdC4KKy8vIEV2ZW4gdGhvdWdoIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZhbHVlcyBhcmUg
ZG91YmxlLCB0aGVyZSBhcmUgbWFueSBvdGhlciBmbG9hdGluZy1wb2ludCB2YWx1ZXMgdXNlZCwg
YW5kIHNvIHdlCisvLyBvbmx5IGV4cGVjdCB0aGVtIHRvIGJlIGFjY3VyYXRlIHVwIHRvIGZsb2F0
aW5nLXBvaW50IHByZWNpc2lvbi4KKyNkZWZpbmUgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
ZXhwZWN0ZWQsIGFjdHVhbCkgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0x
MSgpLCAoYWN0dWFsKS5tMTEoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCku
bTEyKCksIChhY3R1YWwpLm0xMigpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVk
KS5tMTMoKSwgKGFjdHVhbCkubTEzKCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0
ZWQpLm0xNCgpLCAoYWN0dWFsKS5tMTQoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBl
Y3RlZCkubTIxKCksIChhY3R1YWwpLm0yMSgpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4
cGVjdGVkKS5tMjIoKSwgKGFjdHVhbCkubTIyKCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgo
ZXhwZWN0ZWQpLm0yMygpLCAoYWN0dWFsKS5tMjMoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VR
KChleHBlY3RlZCkubTI0KCksIChhY3R1YWwpLm0yNCgpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoKGV4cGVjdGVkKS5tMzEoKSwgKGFjdHVhbCkubTMxKCkpOyAgXAorICAgIEVYUEVDVF9GTE9B
VF9FUSgoZXhwZWN0ZWQpLm0zMigpLCAoYWN0dWFsKS5tMzIoKSk7ICBcCisgICAgRVhQRUNUX0ZM
T0FUX0VRKChleHBlY3RlZCkubTMzKCksIChhY3R1YWwpLm0zMygpKTsgIFwKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoKGV4cGVjdGVkKS5tMzQoKSwgKGFjdHVhbCkubTM0KCkpOyAgXAorICAgIEVYUEVD
VF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm00MSgpLCAoYWN0dWFsKS5tNDEoKSk7ICBcCisgICAgRVhQ
RUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTQyKCksIChhY3R1YWwpLm00MigpKTsgIFwKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tNDMoKSwgKGFjdHVhbCkubTQzKCkpOyAgXAorICAg
IEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm00NCgpLCAoYWN0dWFsKS5tNDQoKSkKKwordm9p
ZCBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKExheWVyQ2hyb21pdW0gKiBsYXllciwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3IsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGJvb2wgcHJlc2Vy
dmVzM0QpCit7CisgICAgbGF5ZXItPnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOworICAgIGxheWVy
LT5zZXRTdWJsYXllclRyYW5zZm9ybShzdWJsYXllclRyYW5zZm9ybSk7CisgICAgbGF5ZXItPnNl
dEFuY2hvclBvaW50KGFuY2hvcik7CisgICAgbGF5ZXItPnNldFBvc2l0aW9uKHBvc2l0aW9uKTsK
KyAgICBsYXllci0+c2V0Qm91bmRzKGJvdW5kcyk7CisgICAgbGF5ZXItPnNldFByZXNlcnZlczNE
KHByZXNlcnZlczNEKTsKK30KKwordm9pZCBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNB
bmRWaXNpYmlsaXR5V2l0aER1bW15VmFyaWFibGVzKExheWVyQ2hyb21pdW0gKiByb290TGF5ZXIp
Cit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50
IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyLCByb290TGF5ZXIs
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7Cit9CisKK1RyYW5zZm9y
bWF0aW9uTWF0cml4IHJlbW92ZTNEQ29tcG9uZW50T2ZNYXRyaXgoY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1hdCkKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZXQgPSBtYXQ7Cisg
ICAgcmV0LnNldE0xMygwKTsKKyAgICByZXQuc2V0TTIzKDApOworICAgIHJldC5zZXRNMzEoMCk7
CisgICAgcmV0LnNldE0zMigwKTsKKyAgICByZXQuc2V0TTMzKDEpOworICAgIHJldC5zZXRNMzQo
MCk7CisgICAgcmV0LnNldE00MygwKTsKKyAgICByZXR1cm4gcmV0OworfQorCitjbGFzcyBMYXll
ckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCA6IHB1YmxpYyBMYXllckNocm9taXVtIHsK
K3B1YmxpYzoKKyAgICBleHBsaWNpdCBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVu
dChDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQorICAgICAgICA6IExheWVyQ2hyb21pdW0oZGVs
ZWdhdGUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9Cit9OworCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JOb09wTGF5ZXIpCit7CisgICAgLy8gU2FuaXR5IGNoZWNr
OiBGb3IgbGF5ZXJzIHBvc2l0aW9uZWQgYXQgemVybywgd2l0aCB6ZXJvIHNpemUsCisgICAgLy8g
YW5kIHdpdGggaWRlbnRpdHkgdHJhbnNmb3JtcywgdGhlbiB0aGUgZHJhd1RyYW5zZm9ybSwKKyAg
ICAvLyBzY3JlZW5TcGFjZVRyYW5zZm9ybSwgYW5kIHRoZSBoaWVyYXJjaHkgcGFzc2VkIG9uIHRv
IGNoaWxkcmVuCisgICAgLy8gbGF5ZXJzIHNob3VsZCBhbHNvIGJlIGlkZW50aXR5IHRyYW5zZm9y
bXMuCisKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2Uo
KTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3Jh
bmRDaGlsZCk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAg
ICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAu
MGYsIDAuMGYpLCBJbnRTaXplKDAsIDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDAs
IDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxk
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwg
MC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMCwgMCksIGZhbHNlKTsKKwor
ICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlXaXRoRHVtbXlW
YXJpYWJsZXMocGFyZW50LmdldCgpKTsKKworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFM
KGlkZW50aXR5TWF0cml4LCBwYXJlbnQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01B
VFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIHBhcmVudC0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgs
IGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFM
KGlkZW50aXR5TWF0cml4LCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgVkVS
SUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGdyYW5kQ2hpbGQtPmRyYXdU
cmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRy
aXgsIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworfQorCitURVNUKENDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVMYXllcikKK3sK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gbGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgbGF5ZXIt
PmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKworICAgIC8vIENhc2UgMTogc2V0dGluZyB0aGUgc3Vi
bGF5ZXIgdHJhbnNmb3JtIHNob3VsZCBub3QgYWZmZWN0IHRoaXMgbGF5ZXIncyBkcmF3IHRyYW5z
Zm9ybSBvciBzY3JlZW4tc3BhY2UgdHJhbnNmb3JtLgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGFyYml0cmFyeVRyYW5zbGF0aW9uOworICAgIGFyYml0cmFyeVRyYW5zbGF0aW9uLnRyYW5zbGF0
ZSgxMC4wLCAyMC4wKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgYXJiaXRyYXJ5VHJhbnNsYXRpb24sIEZsb2F0UG9pbnQoMC4w
ZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMCwgMCksIGZhbHNlKTsK
KyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5V2l0aER1bW15
VmFyaWFibGVzKGxheWVyLmdldCgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChp
ZGVudGl0eU1hdHJpeCwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJ
WF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKKworICAgIC8vIENhc2UgMjogc2V0dGluZyB0aGUgYm91bmRzIG9mIHRoZSBsYXllciBz
aG91bGQgcmVzdWx0IGluIGEgZHJhdyB0cmFuc2Zvcm0gdGhhdCB0cmFuc2xhdGVzIHRvIGhhbGYg
dGhlIHdpZHRoIGFuZCBoZWlnaHQuCisgICAgLy8gICAgICAgICBUaGUgc2NyZWVuLXNwYWNlIHRy
YW5zZm9ybSBzaG91bGQgcmVtYWluIGFzIHRoZSBpZGVudGl0eSwgYmVjYXVzZSBpdCBkb2VzIG5v
dCBkZWFsIHdpdGggdHJhbnNmb3JtaW5nIHRvL2Zyb20gdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIu
CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNsYXRpb25Ub0NlbnRlcjsKKyAgICB0cmFu
c2xhdGlvblRvQ2VudGVyLnRyYW5zbGF0ZSg1LjAsIDYuMCk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXpl
KDEwLCAxMiksIGZhbHNlKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRW
aXNpYmlsaXR5V2l0aER1bW15VmFyaWFibGVzKGxheWVyLmdldCgpKTsKKyAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTCh0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9y
bSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgbGF5
ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisgICAgLy8gQ2FzZSAzOiBUaGUgYW5jaG9y
IHBvaW50IGJ5IGl0c2VsZiAod2l0aG91dCBhIGxheWVyIHRyYW5zZm9ybSkgc2hvdWxkIGhhdmUg
bm8gZWZmZWN0IG9uIHRoZSB0cmFuc2Zvcm1zLgorICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLjI1ZiwgMC4yNWYpLCBGbG9hdFBvaW50KDIuNWYsIDMuMGYpLCBJbnRTaXplKDEwLCAx
MiksIGZhbHNlKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5V2l0aER1bW15VmFyaWFibGVzKGxheWVyLmdldCgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTCh0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsK
KyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgbGF5ZXItPnNj
cmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisgICAgLy8gQ2FzZSA0OiBBIGNoYW5nZSBpbiAiYWN0
dWFsIiBwb3NpdGlvbiBhZmZlY3RzIGJvdGggdGhlIGRyYXcgdHJhbnNmb3JtIGFuZCBzY3JlZW4g
c3BhY2UgdHJhbnNmb3JtLgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBvc2l0aW9uVHJhbnNm
b3JtOworICAgIHBvc2l0aW9uVHJhbnNmb3JtLnRyYW5zbGF0ZSgwLjAsIDEuMik7CisgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMjVmLCAwLjI1ZiksIEZsb2F0UG9pbnQoMi41Ziwg
NC4yZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlXaXRoRHVtbXlWYXJpYWJsZXMobGF5ZXIuZ2V0KCkpOwor
ICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBvc2l0aW9uVHJhbnNmb3JtICogdHJhbnNs
YXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJ
WF9BTE1PU1RfRVFVQUwocG9zaXRpb25UcmFuc2Zvcm0sIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpKTsKKworICAgIC8vIENhc2UgNDogSW4gdGhlIGNvcnJlY3Qgc2VxdWVuY2Ugb2YgdHJh
bnNmb3JtcywgdGhlIGxheWVyIHRyYW5zZm9ybSBzaG91bGQgcHJlLW11bHRpcGx5IHRoZSB0cmFu
c2xhdGlvblRvQ2VudGVyLiBUaGlzIGlzIGVhc2lseSB0ZXN0ZWQgYnkKKyAgICAvLyAgICAgICAg
IHVzaW5nIGEgc2NhbGUgdHJhbnNmb3JtLCBiZWNhdXNlIHNjYWxlIGFuZCB0cmFuc2xhdGlvbiBh
cmUgbm90IGNvbW11dGF0aXZlLgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyVHJhbnNm
b3JtOworICAgIGxheWVyVHJhbnNmb3JtLnNjYWxlM2QoMi4wLCAyLjAsIDEuMCk7CisgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAu
MGYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5V2l0aER1bW15VmFyaWFibGVzKGxheWVyLmdldCgpKTsKKyAg
ICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChsYXllclRyYW5zZm9ybSAqIHRyYW5zbGF0aW9u
VG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxN
T1NUX0VRVUFMKGxheWVyVHJhbnNmb3JtLCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7
CisKKyAgICAvLyBDYXNlIDU6IFRoZSBsYXllciB0cmFuc2Zvcm0gc2hvdWxkIG9jY3VyIHdpdGgg
cmVzcGVjdCB0byB0aGUgYW5jaG9yIHBvaW50LgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRy
YW5zbGF0aW9uVG9BbmNob3I7CisgICAgdHJhbnNsYXRpb25Ub0FuY2hvci50cmFuc2xhdGUoNS4w
LCAwLjApOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkUmVzdWx0ID0gdHJhbnNs
YXRpb25Ub0FuY2hvciAqIGxheWVyVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0FuY2hvci5pbnZl
cnNlKCk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5
ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuNWYsIDAuMGYpLCBGbG9h
dFBvaW50KDUuMGYsIDAuMGYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKKyAgICBleGVjdXRl
Q2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5V2l0aER1bW15VmFyaWFibGVzKGxh
eWVyLmdldCgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChleHBlY3RlZFJlc3Vs
dCAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZF
UklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGV4cGVjdGVkUmVzdWx0LCBsYXllci0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSk7CisKKyAgICAvLyBDYXNlIDY6IFZlcmlmeSB0aGF0IHBvc2l0aW9uIHBy
ZS1tdWx0aXBsaWVzIHRoZSBsYXllciB0cmFuc2Zvcm0uCisgICAgLy8gICAgICAgICBUaGUgY3Vy
cmVudCBpbXBsZW1lbnRhdGlvbiBvZiBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkgZG9lcyB0aGlzIGltcGxpY2l0bHksIGJ1dCBpdCBpcworICAgIC8vICAgICAgICAgc3RpbGwg
d29ydGggdGVzdGluZyB0byBkZXRlY3QgYWNjaWRlbnRhbCByZWdyZXNzaW9ucy4KKyAgICBleHBl
Y3RlZFJlc3VsdCA9IHBvc2l0aW9uVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0FuY2hvciAqIGxh
eWVyVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0FuY2hvci5pbnZlcnNlKCk7CisgICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuNWYsIDAuMGYpLCBGbG9hdFBvaW50KDUuMGYsIDEuMmYp
LCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5V2l0aER1bW15VmFyaWFibGVzKGxheWVyLmdldCgpKTsKKyAgICBW
RVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChleHBlY3RlZFJlc3VsdCAqIHRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NU
X0VRVUFMKGV4cGVjdGVkUmVzdWx0LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Cit9
CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNp
bXBsZUhpZXJhcmNoeSkKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJp
eDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZCA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsK
KyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRD
aGlsZCk7CisKKyAgICAvLyBDYXNlIDE6IHBhcmVudCdzIGFuY2hvclBvaW50IHNob3VsZCBub3Qg
YWZmZWN0IGNoaWxkIG9yIGdyYW5kQ2hpbGQuCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hp
bGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlcjsKKyAg
ICBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIudHJhbnNsYXRlKDguMCwgOS4wKTsKKyAgICBncmFu
ZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlci50cmFuc2xhdGUoMzguMCwgMzkuMCk7CisgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjI1ZiwgMC4yNWYpLCBGbG9hdFBvaW50KDIuNWYs
IDMuMGYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMTYs
IDE4KSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGls
ZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYs
IDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDc2LCA3OCksIGZhbHNlKTsK
KyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5V2l0aER1bW15
VmFyaWFibGVzKHBhcmVudC5nZXQoKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
Y2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBW
RVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgY2hpbGQtPnNjcmVlblNw
YWNlVHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGdyYW5kQ2hp
bGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAg
IFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBncmFuZENoaWxkLT5z
Y3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKworICAgIC8vIENhc2UgMjogcGFyZW50J3MgcG9zaXRp
b24gYWZmZWN0cyBjaGlsZCBhbmQgZ3JhbmRDaGlsZC4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBwYXJlbnRQb3NpdGlvblRyYW5zZm9ybTsKKyAgICBwYXJlbnRQb3NpdGlvblRyYW5zZm9ybS50
cmFuc2xhdGUoMC4wLCAxLjIpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFy
ZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4y
NWYsIDAuMjVmKSwgRmxvYXRQb2ludCgyLjVmLCA0LjJmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxz
ZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBv
aW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2LCAxOCksIGZhbHNlKTsKKyAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBm
KSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eVdpdGhEdW1teVZhcmlhYmxlcyhwYXJlbnQuZ2V0KCkpOworICAg
IFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtICogY2hp
bGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJ
RllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRQb3NpdGlvblRyYW5zZm9ybSwgY2hpbGQtPnNj
cmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBh
cmVudFBvc2l0aW9uVHJhbnNmb3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdy
YW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFV
QUwocGFyZW50UG9zaXRpb25UcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOworCisgICAgLy8gQ2FzZSAzOiBwYXJlbnQncyBsb2NhbCB0cmFuc2Zvcm0gYWZmZWN0
cyBjaGlsZCBhbmQgZ3JhbmRjaGlsZAorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudExh
eWVyVHJhbnNmb3JtOworICAgIHBhcmVudExheWVyVHJhbnNmb3JtLnNjYWxlM2QoMi4wLCAyLjAs
IDEuMCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hv
cjsKKyAgICBwYXJlbnRUcmFuc2xhdGlvblRvQW5jaG9yLnRyYW5zbGF0ZSgyLjUsIDMuMCk7Cisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtID0gcGFyZW50
VHJhbnNsYXRpb25Ub0FuY2hvciAqIHBhcmVudExheWVyVHJhbnNmb3JtICogcGFyZW50VHJhbnNs
YXRpb25Ub0FuY2hvci5pbnZlcnNlKCk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhwYXJlbnQuZ2V0KCksIHBhcmVudExheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLjI1ZiwgMC4yNWYpLCBGbG9hdFBvaW50KDIuNWYsIDMuMGYpLCBJbnRTaXplKDEw
LCAxMiksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4w
ZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMTYsIDE4KSwgZmFsc2UpOworICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50
KDAuMGYsIDAuMGYpLCBJbnRTaXplKDc2LCA3OCksIGZhbHNlKTsKKyAgICBleGVjdXRlQ2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5V2l0aER1bW15VmFyaWFibGVzKHBhcmVudC5n
ZXQoKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJh
bnNmb3JtICogY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgp
KTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zv
cm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRp
b25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNj
cmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisgICAgLy8gQ2FzZSA0OiBwYXJlbnQncyBzdWJsYXll
ck1hdHJpeCBhZmZlY3RzIGNoaWxkIGFuZCBncmFuZGNoaWxkCisgICAgLy8gICAgICAgICBzY2Fs
aW5nIGlzIHVzZWQgaGVyZSBhZ2FpbiBzbyB0aGF0IHRoZSBjb3JyZWN0IHNlcXVlbmNlIG9mIHRy
YW5zZm9ybXMgaXMgcHJvcGVybHkgdGVzdGVkLgorICAgIC8vICAgICAgICAgTm90ZSB0aGF0IHBy
ZXNlcnZlczNEIGlzIGZhbHNlLCBidXQgdGhlIHN1YmxheWVyIG1hdHJpeCBzaG91bGQgcmV0YWlu
IGl0cyAzRCBwcm9wZXJ0aWVzIHdoZW4gZ2l2ZW4gdG8gY2hpbGQuCisgICAgLy8gICAgICAgICBC
dXQgdGhlbiwgdGhlIGNoaWxkIGFsc28gZG9lcyBub3QgcHJlc2VydmUzRC4gV2hlbiBpdCBnaXZl
cyBpdHMgaGllcmFyY2h5IHRvIHRoZSBncmFuZENoaWxkLCBpdCBzaG91bGQgYmUgZmxhdHRlbmVk
IHRvIDJELgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFN1YmxheWVyTWF0cml4Owor
ICAgIHBhcmVudFN1YmxheWVyTWF0cml4LnNjYWxlM2QoMTAuMCwgMTAuMCwgMy4zKTsKKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRUcmFuc2xhdGlvblRvQ2VudGVyOworICAgIHBhcmVu
dFRyYW5zbGF0aW9uVG9DZW50ZXIudHJhbnNsYXRlKDUuMCwgNi4wKTsKKyAgICAvLyBzdWJsYXll
ciBtYXRyaXggaXMgYXBwbGllZCB0byB0aGUgY2VudGVyIG9mIHRoZSBwYXJlbnQgbGF5ZXIuCisg
ICAgcGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtID0gcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hvciAq
IHBhcmVudExheWVyVHJhbnNmb3JtICogcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hvci5pbnZlcnNl
KCkKKyAgICAgICAgICAgICogcGFyZW50VHJhbnNsYXRpb25Ub0NlbnRlciAqIHBhcmVudFN1Ymxh
eWVyTWF0cml4ICogcGFyZW50VHJhbnNsYXRpb25Ub0NlbnRlci5pbnZlcnNlKCk7CisgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggZmxhdHRlbmVkQ29tcG9zaXRlVHJhbnNmb3JtID0gcmVtb3ZlM0RD
b21wb25lbnRPZk1hdHJpeChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0pOworICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBwYXJlbnRMYXllclRyYW5zZm9ybSwg
cGFyZW50U3VibGF5ZXJNYXRyaXgsIEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQb2lu
dCgyLjVmLCAzLjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRT
aXplKDE2LCAxOCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdy
YW5kQ2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2lu
dCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBm
YWxzZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eVdp
dGhEdW1teVZhcmlhYmxlcyhwYXJlbnQuZ2V0KCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NU
X0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRl
ciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFV
QUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZmxhdHRlbmVkQ29tcG9zaXRlVHJh
bnNmb3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdU
cmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZmxhdHRlbmVkQ29t
cG9zaXRlVHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKwor
ICAgIC8vIENhc2UgNTogc2FtZSBhcyBDYXNlIDQsIGV4Y2VwdCB0aGF0IGNoaWxkIGRvZXMgcHJl
c2VydmUgM0QsIHNvIHRoZSBncmFuZENoaWxkIHNob3VsZCByZWNlaXZlIHRoZSBub24tZmxhdHRl
bmVkIGNvbXBvc2l0ZSB0cmFuc2Zvcm0uCisgICAgLy8KKyAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgcGFyZW50TGF5ZXJUcmFuc2Zvcm0sIHBhcmVudFN1Ymxh
eWVyTWF0cml4LCBGbG9hdFBvaW50KDAuMjVmLCAwLjI1ZiksIEZsb2F0UG9pbnQoMi41ZiwgMy4w
ZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxNiwgMTgp
LCB0cnVlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBm
KSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7CisgICAg
ZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eVdpdGhEdW1teVZhcmlh
YmxlcyhwYXJlbnQuZ2V0KCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVu
dENvbXBvc2l0ZVRyYW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRy
YXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29t
cG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgVkVS
SUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtICogZ3JhbmRD
aGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cisg
ICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBn
cmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlUmVuZGVyU3VyZmFjZSkK
K3sKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQ+IGdyYW5kQ2hpbGQgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3
c0NvbnRlbnQoMCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBh
cmVudC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkKTsK
KworICAgIC8vIGNoaWxkIGlzIHNldCB1cCBzbyB0aGF0IGEgbmV3IHJlbmRlciBzdXJmYWNlIHNo
b3VsZCBiZSBjcmVhdGVkLgorICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNWYpOworCisgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggcGFyZW50TGF5ZXJUcmFuc2Zvcm07CisgICAgcGFyZW50TGF5ZXJUcmFuc2Zvcm0uc2NhbGUz
ZCgyLjAsIDIuMCwgMS4wKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRUcmFuc2xh
dGlvblRvQW5jaG9yOworICAgIHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3IudHJhbnNsYXRlKDIu
NSwgMy4wKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRTdWJsYXllck1hdHJpeDsK
KyAgICBwYXJlbnRTdWJsYXllck1hdHJpeC5zY2FsZTNkKDEwLjAsIDEwLjAsIDMuMyk7CisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50VHJhbnNsYXRpb25Ub0NlbnRlcjsKKyAgICBwYXJl
bnRUcmFuc2xhdGlvblRvQ2VudGVyLnRyYW5zbGF0ZSg1LjAsIDYuMCk7CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggcGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtID0gcGFyZW50VHJhbnNsYXRpb25U
b0FuY2hvciAqIHBhcmVudExheWVyVHJhbnNmb3JtICogcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hv
ci5pbnZlcnNlKCkKKyAgICAgICAgICAgICogcGFyZW50VHJhbnNsYXRpb25Ub0NlbnRlciAqIHBh
cmVudFN1YmxheWVyTWF0cml4ICogcGFyZW50VHJhbnNsYXRpb25Ub0NlbnRlci5pbnZlcnNlKCk7
CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyOworICAg
IGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlci50cmFuc2xhdGUoOC4wLCA5LjApOworCisgICAgLy8g
Q2hpbGQncyByZW5kZXIgc3VyZmFjZSBzaG91bGQgbm90IGV4aXN0IHlldC4KKyAgICBBU1NFUlRf
RkFMU0UoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgcGFyZW50TGF5ZXJUcmFuc2Zvcm0sIHBhcmVudFN1Ymxh
eWVyTWF0cml4LCBGbG9hdFBvaW50KDAuMjVmLCAwLjI1ZiksIEZsb2F0UG9pbnQoMi41ZiwgMy4w
ZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxNiwgMTgp
LCBmYWxzZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eVdpdGhEdW1teVZhcmlhYmxlcyhwYXJlbnQuZ2V0KCkpOworCisgICAgLy8gUmVuZGVyIHN1cmZh
Y2Ugc2hvdWxkIGhhdmUgYmVlbiBjcmVhdGVkIG5vdy4KKyAgICBBU1NFUlRfVFJVRShjaGlsZC0+
cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfRVEoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSwg
Y2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CisKKyAgICAvLyBUaGUgY2hpbGQgbGF5ZXIn
cyBkcmF3IHRyYW5zZm9ybSBzaG91bGQgcmVmZXIgdG8gaXRzIG5ldyByZW5kZXIgc3VyZmFjZTsg
dGhleSBvbmx5IGRpZmZlciBieSBhIHRyYW5zbGF0aW9uIHRvIGNlbnRlci4KKyAgICAvLyBUaGUg
c2NyZWVuLXNwYWNlIHRyYW5zZm9ybSwgaG93ZXZlciwgc2hvdWxkIHN0aWxsIHJlZmVyIHRvIHRo
ZSByb290LgorICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGNoaWxkVHJhbnNsYXRpb25U
b0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKSk7CisKKyAgICAvLyBXaXRob3V0IGNsaXBwaW5nIGFuZCBzY2lzc29yaW5nLCB0aGUg
b3JpZ2luIHRyYW5zZm9ybSBhbmQgZHJhdyB0cmFuc2Zvcm0gc2hvdWxkIGJlIHRoZSBzYW1lLgor
ICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwg
Y2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOworICAgIFZF
UklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQt
PnRhcmdldFJlbmRlclN1cmZhY2UoKS0+ZHJhd1RyYW5zZm9ybSgpKTsKKworICAgIC8vIEZJWE1F
OiBuZWVkIHRvIGFsc28gYWRkIGEgY2FzZSB0aGF0IGNoZWNrcyBpZiBhIHJlbmRlciBzdXJmYWNl
J3MgZHJhd1RyYW5zZm9ybSBpcyBjb21wdXRlZCBjb3JyZWN0bHkgd2hlbiBjbGlwcGluZy9zY2lz
c29yaW5nLgorICAgIC8vIEZJWE1FOiBuZWVkIHRvIGFsc28gYWRkIGEgY2FzZSB0aGF0IGNoZWNr
cyBpZiBhIHJlbmRlciBzdXJmYWNlJ3MgcmVwbGljYVRyYW5zZm9ybSBpcyBjb21wdXRlZCBjb3Jy
ZWN0bHkuCit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNm
b3Jtc0ZvclJlbmRlclN1cmZhY2VIaWVyYXJjaHkpCit7CisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gbGF5ZXJXaXRoUmVuZGVyU3VyZmFjZTEgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
MCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkT2ZSUzEgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGRPZlJTMSA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZh
Y2UoKTsKKworICAgIC8vIFNldmVyYWwgY2FzZXMgbW9yZTogY3JlYXRlIGEgbW9yZSBjb21wbGV4
IHRyZWUgYW5kIHZlcmlmeSBpdCBhbGwgYXQgb25jZS4gVGhpcyBjb3ZlcnMgdGhlIGZvbGxvd2lu
ZyBjYXNlczoKKyAgICAvLyAgICBsYXllcnMgdGhhdCBhcmUgZGVzY3JpYmVkIHcuci50LiBhIHJl
bmRlciBzdXJmYWNlOiBzaG91bGQgaGF2ZSBkcmF3IHRyYW5zZm9ybXMgZGVzY3JpYmVkIHcuci50
LiB0aGF0IHN1cmZhY2UKKyAgICAvLyAgICBBIHJlbmRlciBzdXJmYWNlIGRlc2NyaWJlZCB3LnIu
dC4gYW4gYW5jZXN0b3IgcmVuZGVyIHN1cmZhY2U6IHNob3VsZCBoYXZlIGEgZHJhdyB0cmFuc2Zv
cm0gZGVzY3JpYmVkIHcuci50LiB0aGF0IGFuY2VzdG9yIHN1cmZhY2UKKyAgICAvLyAgICBTYW5p
dHkgY2hlY2sgb24gcmVjdXJzaW9uOiBsYXllcnMgZGVzY3JpYmVkIHcuci50LiBhIHJlbmRlciBz
dXJmYWNlIHRoYXQgaXMgZGVzY3JpYmVkIHcuci50LiBhbiBhbmNlc3RvciByZW5kZXIgc3VyZmFj
ZS4KKworICAgIC8vIEZJWE1FOiBhZGQgYSB0ZXN0IHRvIHZlcmlmeSBjbGlwcGluZyB0aGF0IGNo
YW5nZXMgdGhlICJjZW50ZXIgcG9pbnQiCisgICAgLy8gQW55IG90aGVyIHNwZWNpYWwgY2FzZXM/
Cit9CisKKy8vIEZJWE1FOgorLy8gY29udGludWUgd29ya2luZyBvbiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg5NDIKKy8vICAtIGFkZCBhIGNhc2UgdGhhdCBjaGVj
a3MgaWYgYSByZW5kZXIgc3VyZmFjZSdzIGRyYXdUcmFuc2Zvcm0gaXMgY29tcHV0ZWQgY29ycmVj
dGx5IHdoZW4gY2xpcHBpbmcvc2Npc3NvcmluZy4KKy8vICAtIGFkZCBhIGNhc2UgdGhhdCBjaGVj
a3MgaWYgYSByZW5kZXIgc3VyZmFjZSdzIHJlcGxpY2FUcmFuc2Zvcm0gaXMgY29tcHV0ZWQgY29y
cmVjdGx5LgorLy8gIC0gdGVzdCBhbGwgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggcmVuZGVy
IHN1cmZhY2VzIGFyZSBjcmVhdGVkCisvLyAgLSBpZiBwb3NzaWJsZSwgdGVzdCBhbGwgY29uZGl0
aW9ucyB1bmRlciB3aGljaCByZW5kZXIgc3VyZmFjZXMgYXJlIG5vdCBjcmVhdGVkCisvLyAgLSB2
ZXJpZnkgdGhhdCB0aGUgbGF5ZXIgbGlzdHMgb2YgcmVuZGVyIHN1cmZhY2VzIGFyZSBjb3JyZWN0
LCB2ZXJpZnkgdGhhdCAidGFyZ2V0UmVuZGVyU3VyZmFjZSIgdmFsdWVzIGZvciBlYWNoIGxheWVy
IGFyZSBjb3JyZWN0LgorLy8gIC0gdGVzdCB0aGUgY29tcHV0YXRpb24gb2Ygc2Npc3NvciByZWN0
cyBhbmQgY29udGVudCByZWN0cworLy8gIC0gdGVzdCB0aGUgc3BlY2lhbCBjYXNlcyBmb3IgbWFz
ayBsYXllcnMgYW5kIHJlcGxpY2EgbGF5ZXJzCisvLyAgLSB0ZXN0IHRoZSBvdGhlciBmdW5jdGlv
bnMgaW4gQ0NMYXllclRyZWVIb3N0Q29tbW9uCisvLworCit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109569</attachid>
            <date>2011-10-03 19:02:03 -0700</date>
            <delta_ts>2011-10-03 19:16:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69197-20111003190202.patch</filename>
            <type>text/plain</type>
            <size>34598</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY0OTAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
MjE2OWE3NzQ4YWNlMWI5MWQ4ZTM4ZTNlOTQyNTFlNjhkN2Y0Y2VjMi4uNDZkMDA5NGMxYTQ0MzUx
NTIzNTEyMDQxYTBkYWQ5MjQ4NGFlNDRmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMiBAQAorMjAxMS0xMC0wMyAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBGaXJzdCByb3VuZCBvZiB1bml0IHRlc3RzIGZvciBDQ0xheWVy
VHJlZUhvc3RDb21tb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02OTE5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcm91bmQgb2YgdGVzdHMgZm9jdXNlcyBvbiB2ZXJpZnlpbmcgdGhlIGNvbXB1
dGF0aW9uIG9mIG1hdHJpeCB0cmFuc2Zvcm1zCisgICAgICAgIGluIGNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAq
IHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OnNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
ZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpyZW1vdmUzRENvbXBvbmVudE9mTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50OjpMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudDo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgor
CiAyMDExLTEwLTAzICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTY0ODEuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQppbmRleCAxNDdlNDI4NWVhNWQxZjNiYjM1OTU0MWNkMDhjYTIzZTk2OTNh
MjBmLi5kYjE4NTMyYjhkMmZjZTkwM2E2YzEyNTY0NGU5MDIwZWFjYjU5YzA0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTU1LDYgKzU1LDcgQEAKICAgICAgICAgICAgICd0ZXN0
cy9BcmVuYVRlc3RIZWxwZXJzLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0Fzc29jaWF0ZWRVUkxM
b2FkZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclNvcnRlclRlc3QuY3Bw
JywKKyAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NUaHJlYWRUYXNrVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Mx
ZGNlZTUwYzM1NThhNWI3OTA4OGY2OGFjN2E3YTczMDVkOTQwZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5j
cHAKQEAgLTAsMCArMSw1MDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgorCisjaW5jbHVkZSAiTGF5
ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisKKyNpbmNs
dWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKy8vCisvLyBO
T1RFIENBUkVGVUxMWToKKy8vCisvLyBJbiB0aGVzZSB0ZXN0cywgdGhlIHJlbGF0aW9uc2hpcCBi
ZXR3ZWVuIGFuY2hvciBwb2ludCwgcG9zaXRpb24sIGFuZCBib3VuZHMgaXMgbm90IGludHVpdGl2
ZS4gVGhlIGZvbGxvd2luZyB0d28gcG9pbnRzCisvLyBzaG91bGQgaGVscCBjbGFyaWZ5IHRoZSBj
b2RlOgorLy8KKy8vICAxLiBBcyBhIEZsb2F0UG9pbnQgb2JqZWN0LCBhbmNob3IgcG9pbnQgaXMg
c3BlY2lmaWVkIGluICJ1bml0IGxheWVyIHNwYWNlIiwgd2hlcmUgdGhlIGJvdW5kcyBvZiB0aGUg
bGF5ZXIgbWFwIHRvIFswLDFdLgorLy8gICAgIEhvd2V2ZXIsIGFzIGEgVHJhbnNmb3JtYXRpb25N
YXRyaXggb2JqZWN0LCB0aGUgdHJhbnNmb3JtIHRvIHRoZSBhbmNob3IgcG9pbnQgaXMgc3BlY2lm
aWVkIGluICJwaXhlbCBsYXllciBzcGFjZSIsIHdoZXJlCisvLyAgICAgdGhlIGJvdW5kcyBvZiB0
aGUgbGF5ZXIgbWFwIHRvIFtib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpXS4KKy8vCisv
LyAgMi4gTGF5ZXJDaHJvbWl1bTo6cG9zaXRpb24gaXMgYWxzbyBhd2t3YXJkIC0gaXQgaXMgYWN0
dWFsbHkgdGhlIHN1bSBvZiBhbmNob3JQb2ludCAoaW4gcGl4ZWwgc3BhY2UpIGFuZCBhY3R1YWwg
cG9zaXRpb24uIEJlY2F1c2UKKy8vICAgICB0aGlzLCB0aGUgdmFsdWUgb2YgTGF5ZXJDaHJvbWl1
bTo6cG9zaXRpb24oKSBjaGFuZ2VzLCBldmVuIHRob3VnaCB0aGUgbGF5ZXIgaXMgbm90IGFjdHVh
bGx5IGxvY2F0ZWQgaW4gYSBkaWZmZXJlbnQgcG9zaXRpb24uCisvLyAgICAgV2hlbiB3ZSBpbml0
aWFsaXplIGxheWVycyBmb3IgdGVzdGluZyBoZXJlLCB3ZSBuZWVkIHRvIGluaXRpYWxpemUgdGhh
dCB1bmludHV0aXZlIHBvc2l0aW9uIHZhbHVlLgorLy8KKy8vICAgICBUbyBjb21wdXRlIGEgbW9y
ZSBpbnR1aXRpdmUgdmVyc2lvbiBvZiBwb3NpdGlvbiwgeW91IGNhbiBkbyBzb21ldGhpbmcgbGlr
ZToKKy8vICAgICAgICBpbnR1aXRpdmVMYXllclBvc2l0aW9uLnggPSAgcG9zaXRpb24ueCAtIChh
bmNob3JQb2ludC54ICogYm91bmRzLndpZHRoKQorLy8gICAgICAgIGludHVpdGl2ZUxheWVyUG9z
aXRpb24ueSA9ICBwb3NpdGlvbi55IC0gKGFuY2hvclBvaW50LnkgKiBib3VuZHMuaGVpZ2h0KQor
Ly8KKy8vICAgICBUaGlzICJpbnR1aXRpdmUgcG9zaXRpb24iIGlzIG1vcmUgZGlyZWN0bHkgcmVs
YXRlZCB0byB0aGUgZXhwZWN0ZWQgc2VxdWVuY2Ugb2YgdHJhbnNmb3Jtcy4KKy8vCisvLyBBbHNv
IG5vdGUgdGhhdCBwYXJ0aWN1bGFyIHNlcXVlbmNlcyBvZiB0cmFuc2Zvcm1zIGNhbiBiZSBjb21t
dXRhdGl2ZSAtIGZvciBleGFtcGxlLCBBKkIgd2hlcmUgQSBhbmQgQiBhcmUgYm90aCB0cmFuc2xh
dGlvbnMsIG9yIGJvdGggc2NhbGVzLgorLy8gVG8gcHJvcGVybHkgdGVzdCB0aGUgY29ycmVjdCBv
cmRlciBvZiB0cmFuc2Zvcm1zLCB3ZSB0cnkgdG8gbWl4IHNjYWxlcyBhbmQgdHJhbnNsYXRpb25z
IHRvZ2V0aGVyIHNvIHRoYXQgdGhleSBhcmUgbm90IGNvbW11dGF0aXZlLgorLy8KKworCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworLy8gVGhpcyBpcyBhIG1hY3Jv
IGluc3RlYWQgb2YgYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBndGVzdCBlcnJvcnMgY2FuIGdpdmUg
dXMgdXNlZnVsIGxpbmUgbnVtYmVycyBhc3NvY2lhdGVkIHdpdGggdGhlIHRlc3QuCisvLyBFdmVu
IHRob3VnaCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2YWx1ZXMgYXJlIGRvdWJsZSwgdGhlcmUgYXJl
IG1hbnkgb3RoZXIgZmxvYXRpbmctcG9pbnQgdmFsdWVzIHVzZWQsIGFuZCBzbyB3ZQorLy8gb25s
eSBleHBlY3QgdGhlbSB0byBiZSBhY2N1cmF0ZSB1cCB0byBmbG9hdGluZy1wb2ludCBwcmVjaXNp
b24uCisjZGVmaW5lIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGV4cGVjdGVkLCBhY3R1YWwp
ICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTEoKSwgKGFjdHVhbCkubTEx
KCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0xMigpLCAoYWN0dWFsKS5t
MTIoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTEzKCksIChhY3R1YWwp
Lm0xMygpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTQoKSwgKGFjdHVh
bCkubTE0KCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yMSgpLCAoYWN0
dWFsKS5tMjEoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTIyKCksIChh
Y3R1YWwpLm0yMigpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMjMoKSwg
KGFjdHVhbCkubTIzKCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yNCgp
LCAoYWN0dWFsKS5tMjQoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTMx
KCksIChhY3R1YWwpLm0zMSgpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5t
MzIoKSwgKGFjdHVhbCkubTMyKCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQp
Lm0zMygpLCAoYWN0dWFsKS5tMzMoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3Rl
ZCkubTM0KCksIChhY3R1YWwpLm0zNCgpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVj
dGVkKS5tNDEoKSwgKGFjdHVhbCkubTQxKCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhw
ZWN0ZWQpLm00MigpLCAoYWN0dWFsKS5tNDIoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChl
eHBlY3RlZCkubTQzKCksIChhY3R1YWwpLm00MygpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
KGV4cGVjdGVkKS5tNDQoKSwgKGFjdHVhbCkubTQ0KCkpCisKK3ZvaWQgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhMYXllckNocm9taXVtICogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRy
YW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3Np
dGlvbiwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBib29sIHByZXNlcnZlczNEKQoreworICAgIGxh
eWVyLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKyAgICBsYXllci0+c2V0U3VibGF5ZXJUcmFu
c2Zvcm0oc3VibGF5ZXJUcmFuc2Zvcm0pOworICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChhbmNo
b3IpOworICAgIGxheWVyLT5zZXRQb3NpdGlvbihwb3NpdGlvbik7CisgICAgbGF5ZXItPnNldEJv
dW5kcyhib3VuZHMpOworICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCk7Cit9
CisKK3ZvaWQgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXll
ckNocm9taXVtICogcm9vdExheWVyKQoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50
aXR5TWF0cml4OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teVJlbmRl
clN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1
bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5
KHJvb3RMYXllciwgcm9vdExheWVyLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGR1
bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVy
ZVNpemUpOworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW1vdmUzRENvbXBvbmVudE9mTWF0
cml4KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXQpCit7CisgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggcmV0ID0gbWF0OworICAgIHJldC5zZXRNMTMoMCk7CisgICAgcmV0LnNldE0yMygw
KTsKKyAgICByZXQuc2V0TTMxKDApOworICAgIHJldC5zZXRNMzIoMCk7CisgICAgcmV0LnNldE0z
MygxKTsKKyAgICByZXQuc2V0TTM0KDApOworICAgIHJldC5zZXRNNDMoMCk7CisgICAgcmV0dXJu
IHJldDsKK30KKworY2xhc3MgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQgOiBw
dWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgTGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKKyAgICAg
ICAgOiBMYXllckNocm9taXVtKGRlbGVnYXRlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorfTsKKworVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yTm9PcExheWVyKQor
eworICAgIC8vIFNhbml0eSBjaGVjazogRm9yIGxheWVycyBwb3NpdGlvbmVkIGF0IHplcm8sIHdp
dGggemVybyBzaXplLAorICAgIC8vIGFuZCB3aXRoIGlkZW50aXR5IHRyYW5zZm9ybXMsIHRoZW4g
dGhlIGRyYXdUcmFuc2Zvcm0sCisgICAgLy8gc2NyZWVuU3BhY2VUcmFuc2Zvcm0sIGFuZCB0aGUg
aGllcmFyY2h5IHBhc3NlZCBvbiB0byBjaGlsZHJlbgorICAgIC8vIGxheWVycyBzaG91bGQgYWxz
byBiZSBpZGVudGl0eSB0cmFuc2Zvcm1zLgorCisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBh
cmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IGdyYW5kQ2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgcGFyZW50
LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZCk7Cisg
ICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggaWRlbnRpdHlNYXRyaXg7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJl
bnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBm
LCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgwLCAwKSwgZmFsc2UpOwor
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgw
LjBmLCAwLjBmKSwgSW50U2l6ZSgwLCAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRT
aXplKDAsIDApLCBmYWxzZSk7CisKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNB
bmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSk7CisKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9F
UVVBTChpZGVudGl0eU1hdHJpeCwgcGFyZW50LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklG
WV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBwYXJlbnQtPnNjcmVlblNwYWNl
VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0
cml4LCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9F
UVVBTChpZGVudGl0eU1hdHJpeCwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAg
IFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBncmFuZENoaWxkLT5k
cmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5
TWF0cml4LCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKK30KKworVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlTGF5ZXIp
Cit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IGxheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIGxh
eWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisKKyAgICAvLyBDYXNlIDE6IHNldHRpbmcgdGhl
IHN1YmxheWVyIHRyYW5zZm9ybSBzaG91bGQgbm90IGFmZmVjdCB0aGlzIGxheWVyJ3MgZHJhdyB0
cmFuc2Zvcm0gb3Igc2NyZWVuLXNwYWNlIHRyYW5zZm9ybS4KKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBhcmJpdHJhcnlUcmFuc2xhdGlvbjsKKyAgICBhcmJpdHJhcnlUcmFuc2xhdGlvbi50cmFu
c2xhdGUoMTAuMCwgMjAuMCk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXll
ci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGFyYml0cmFyeVRyYW5zbGF0aW9uLCBGbG9hdFBvaW50
KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDAsIDApLCBmYWxz
ZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXll
ci5nZXQoKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgs
IGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFM
KGlkZW50aXR5TWF0cml4LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisKKyAgICAv
LyBDYXNlIDI6IHNldHRpbmcgdGhlIGJvdW5kcyBvZiB0aGUgbGF5ZXIgc2hvdWxkIHJlc3VsdCBp
biBhIGRyYXcgdHJhbnNmb3JtIHRoYXQgdHJhbnNsYXRlcyB0byBoYWxmIHRoZSB3aWR0aCBhbmQg
aGVpZ2h0LgorICAgIC8vICAgICAgICAgVGhlIHNjcmVlbi1zcGFjZSB0cmFuc2Zvcm0gc2hvdWxk
IHJlbWFpbiBhcyB0aGUgaWRlbnRpdHksIGJlY2F1c2UgaXQgZG9lcyBub3QgZGVhbCB3aXRoIHRy
YW5zZm9ybWluZyB0by9mcm9tIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyLgorICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHRyYW5zbGF0aW9uVG9DZW50ZXI7CisgICAgdHJhbnNsYXRpb25Ub0NlbnRl
ci50cmFuc2xhdGUoNS4wLCA2LjApOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
bGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxz
ZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXll
ci5nZXQoKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwodHJhbnNsYXRpb25Ub0Nl
bnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1Rf
RVFVQUwoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKwor
ICAgIC8vIENhc2UgMzogVGhlIGFuY2hvciBwb2ludCBieSBpdHNlbGYgKHdpdGhvdXQgYSBsYXll
ciB0cmFuc2Zvcm0pIHNob3VsZCBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgdHJhbnNmb3Jtcy4KKyAg
ICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQb2ludCgy
LjVmLCAzLjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXllci5nZXQoKSk7CisgICAgVkVSSUZZX01B
VFJJWF9BTE1PU1RfRVFVQUwodHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zv
cm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGxh
eWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKworICAgIC8vIENhc2UgNDogQSBjaGFuZ2Ug
aW4gImFjdHVhbCIgcG9zaXRpb24gYWZmZWN0cyBib3RoIHRoZSBkcmF3IHRyYW5zZm9ybSBhbmQg
c2NyZWVuIHNwYWNlIHRyYW5zZm9ybS4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwb3NpdGlv
blRyYW5zZm9ybTsKKyAgICBwb3NpdGlvblRyYW5zZm9ybS50cmFuc2xhdGUoMC4wLCAxLjIpOwor
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjI1ZiwgMC4yNWYpLCBGbG9hdFBvaW50
KDIuNWYsIDQuMmYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKKyAgICBleGVjdXRlQ2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKKyAgICBWRVJJRllf
TUFUUklYX0FMTU9TVF9FUVVBTChwb3NpdGlvblRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9DZW50
ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VR
VUFMKHBvc2l0aW9uVHJhbnNmb3JtLCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisK
KyAgICAvLyBDYXNlIDU6IEluIHRoZSBjb3JyZWN0IHNlcXVlbmNlIG9mIHRyYW5zZm9ybXMsIHRo
ZSBsYXllciB0cmFuc2Zvcm0gc2hvdWxkIHByZS1tdWx0aXBseSB0aGUgdHJhbnNsYXRpb25Ub0Nl
bnRlci4gVGhpcyBpcyBlYXNpbHkgdGVzdGVkIGJ5CisgICAgLy8gICAgICAgICB1c2luZyBhIHNj
YWxlIHRyYW5zZm9ybSwgYmVjYXVzZSBzY2FsZSBhbmQgdHJhbnNsYXRpb24gYXJlIG5vdCBjb21t
dXRhdGl2ZS4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllclRyYW5zZm9ybTsKKyAgICBs
YXllclRyYW5zZm9ybS5zY2FsZTNkKDIuMCwgMi4wLCAxLjApOworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6
ZSgxMCwgMTIpLCBmYWxzZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5k
VmlzaWJpbGl0eShsYXllci5nZXQoKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
bGF5ZXJUcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9y
bSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChsYXllclRyYW5zZm9ybSwgbGF5
ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisgICAgLy8gQ2FzZSA2OiBUaGUgbGF5ZXIg
dHJhbnNmb3JtIHNob3VsZCBvY2N1ciB3aXRoIHJlc3BlY3QgdG8gdGhlIGFuY2hvciBwb2ludC4K
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2xhdGlvblRvQW5jaG9yOworICAgIHRyYW5z
bGF0aW9uVG9BbmNob3IudHJhbnNsYXRlKDUuMCwgMC4wKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBleHBlY3RlZFJlc3VsdCA9IHRyYW5zbGF0aW9uVG9BbmNob3IgKiBsYXllclRyYW5zZm9y
bSAqIHRyYW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLjVmLCAwLjBmKSwgRmxvYXRQb2ludCg1LjBmLCAwLjBmKSwgSW50U2l6ZSgx
MCwgMTIpLCBmYWxzZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShsYXllci5nZXQoKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZXhw
ZWN0ZWRSZXN1bHQgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgp
KTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChleHBlY3RlZFJlc3VsdCwgbGF5ZXIt
PnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisgICAgLy8gQ2FzZSA3OiBWZXJpZnkgdGhhdCBw
b3NpdGlvbiBwcmUtbXVsdGlwbGllcyB0aGUgbGF5ZXIgdHJhbnNmb3JtLgorICAgIC8vICAgICAg
ICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNB
bmRWaXNpYmlsaXR5IGRvZXMgdGhpcyBpbXBsaWNpdGx5LCBidXQgaXQgaXMKKyAgICAvLyAgICAg
ICAgIHN0aWxsIHdvcnRoIHRlc3RpbmcgdG8gZGV0ZWN0IGFjY2lkZW50YWwgcmVncmVzc2lvbnMu
CisgICAgZXhwZWN0ZWRSZXN1bHQgPSBwb3NpdGlvblRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9B
bmNob3IgKiBsYXllclRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpOwor
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNm
b3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjVmLCAwLjBmKSwgRmxvYXRQb2ludCg1
LjBmLCAxLjJmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXllci5nZXQoKSk7CisgICAgVkVSSUZZX01B
VFJJWF9BTE1PU1RfRVFVQUwoZXhwZWN0ZWRSZXN1bHQgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBs
YXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChl
eHBlY3RlZFJlc3VsdCwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworfQorCitURVNU
KENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW1wbGVIaWVy
YXJjaHkpCit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsK
KyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
MCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoMCk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFy
ZW50LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQpOwor
CisgICAgLy8gQ2FzZSAxOiBwYXJlbnQncyBhbmNob3JQb2ludCBzaG91bGQgbm90IGFmZmVjdCBj
aGlsZCBvciBncmFuZENoaWxkLgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNs
YXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXI7CisgICAgY2hpbGRU
cmFuc2xhdGlvblRvQ2VudGVyLnRyYW5zbGF0ZSg4LjAsIDkuMCk7CisgICAgZ3JhbmRDaGlsZFRy
YW5zbGF0aW9uVG9DZW50ZXIudHJhbnNsYXRlKDM4LjAsIDM5LjApOworICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQb2ludCgyLjVmLCAzLjBmKSwg
SW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50
KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2LCAxOCksIGZh
bHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwg
RmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7CisgICAgZXhl
Y3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkpOwor
ICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwg
Y2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
aWRlbnRpdHlNYXRyaXgsIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBWRVJJ
RllfTUFUUklYX0FMTU9TVF9FUVVBTChncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3Jh
bmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVB
TChpZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisK
KyAgICAvLyBDYXNlIDI6IHBhcmVudCdzIHBvc2l0aW9uIGFmZmVjdHMgY2hpbGQgYW5kIGdyYW5k
Q2hpbGQuCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50UG9zaXRpb25UcmFuc2Zvcm07
CisgICAgcGFyZW50UG9zaXRpb25UcmFuc2Zvcm0udHJhbnNsYXRlKDAuMCwgMS4yKTsKKyAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMjVmLCAwLjI1ZiksIEZsb2F0UG9pbnQoMi41
ZiwgNC4yZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgx
NiwgMTgpLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENo
aWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4w
ZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoNzYsIDc4KSwgZmFsc2Up
OworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50
LmdldCgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRQb3NpdGlvblRy
YW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0o
KSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50UG9zaXRpb25UcmFuc2Zv
cm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChwYXJlbnRQb3NpdGlvblRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xhdGlv
blRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRS
SVhfQUxNT1NUX0VRVUFMKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3Jl
ZW5TcGFjZVRyYW5zZm9ybSgpKTsKKworICAgIC8vIENhc2UgMzogcGFyZW50J3MgbG9jYWwgdHJh
bnNmb3JtIGFmZmVjdHMgY2hpbGQgYW5kIGdyYW5kY2hpbGQKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBwYXJlbnRMYXllclRyYW5zZm9ybTsKKyAgICBwYXJlbnRMYXllclRyYW5zZm9ybS5zY2Fs
ZTNkKDIuMCwgMi4wLCAxLjApOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFRyYW5z
bGF0aW9uVG9BbmNob3I7CisgICAgcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hvci50cmFuc2xhdGUo
Mi41LCAzLjApOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudENvbXBvc2l0ZVRyYW5z
Zm9ybSA9IHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3IgKiBwYXJlbnRMYXllclRyYW5zZm9ybSAq
IHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpOworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBwYXJlbnRMYXllclRyYW5zZm9ybSwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQb2ludCgyLjVmLCAzLjBm
KSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBv
aW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2LCAxOCks
IGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBm
KSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7CisgICAg
ZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkp
OworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9y
bSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cisg
ICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBj
aGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1Rf
RVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9B
TE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3JlZW5T
cGFjZVRyYW5zZm9ybSgpKTsKKworICAgIC8vIENhc2UgNDogcGFyZW50J3Mgc3VibGF5ZXJNYXRy
aXggYWZmZWN0cyBjaGlsZCBhbmQgZ3JhbmRjaGlsZAorICAgIC8vICAgICAgICAgc2NhbGluZyBp
cyB1c2VkIGhlcmUgYWdhaW4gc28gdGhhdCB0aGUgY29ycmVjdCBzZXF1ZW5jZSBvZiB0cmFuc2Zv
cm1zIGlzIHByb3Blcmx5IHRlc3RlZC4KKyAgICAvLyAgICAgICAgIE5vdGUgdGhhdCBwcmVzZXJ2
ZXMzRCBpcyBmYWxzZSwgYnV0IHRoZSBzdWJsYXllciBtYXRyaXggc2hvdWxkIHJldGFpbiBpdHMg
M0QgcHJvcGVydGllcyB3aGVuIGdpdmVuIHRvIGNoaWxkLgorICAgIC8vICAgICAgICAgQnV0IHRo
ZW4sIHRoZSBjaGlsZCBhbHNvIGRvZXMgbm90IHByZXNlcnZlM0QuIFdoZW4gaXQgZ2l2ZXMgaXRz
IGhpZXJhcmNoeSB0byB0aGUgZ3JhbmRDaGlsZCwgaXQgc2hvdWxkIGJlIGZsYXR0ZW5lZCB0byAy
RC4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRTdWJsYXllck1hdHJpeDsKKyAgICBw
YXJlbnRTdWJsYXllck1hdHJpeC5zY2FsZTNkKDEwLjAsIDEwLjAsIDMuMyk7CisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggcGFyZW50VHJhbnNsYXRpb25Ub0NlbnRlcjsKKyAgICBwYXJlbnRUcmFu
c2xhdGlvblRvQ2VudGVyLnRyYW5zbGF0ZSg1LjAsIDYuMCk7CisgICAgLy8gc3VibGF5ZXIgbWF0
cml4IGlzIGFwcGxpZWQgdG8gdGhlIGNlbnRlciBvZiB0aGUgcGFyZW50IGxheWVyLgorICAgIHBh
cmVudENvbXBvc2l0ZVRyYW5zZm9ybSA9IHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3IgKiBwYXJl
bnRMYXllclRyYW5zZm9ybSAqIHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpCisg
ICAgICAgICAgICAqIHBhcmVudFRyYW5zbGF0aW9uVG9DZW50ZXIgKiBwYXJlbnRTdWJsYXllck1h
dHJpeCAqIHBhcmVudFRyYW5zbGF0aW9uVG9DZW50ZXIuaW52ZXJzZSgpOworICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5zZm9ybSA9IHJlbW92ZTNEQ29tcG9u
ZW50T2ZNYXRyaXgocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtKTsKKyAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgcGFyZW50TGF5ZXJUcmFuc2Zvcm0sIHBhcmVu
dFN1YmxheWVyTWF0cml4LCBGbG9hdFBvaW50KDAuMjVmLCAwLjI1ZiksIEZsb2F0UG9pbnQoMi41
ZiwgMy4wZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgx
NiwgMTgpLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENo
aWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4w
ZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoNzYsIDc4KSwgZmFsc2Up
OworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50
LmdldCgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVU
cmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3Jt
KCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5z
Zm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhf
QUxNT1NUX0VRVUFMKGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFu
c2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklG
WV9NQVRSSVhfQUxNT1NUX0VRVUFMKGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5zZm9ybSwgZ3JhbmRD
aGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisKKyAgICAvLyBDYXNlIDU6IHNhbWUgYXMg
Q2FzZSA0LCBleGNlcHQgdGhhdCBjaGlsZCBkb2VzIHByZXNlcnZlIDNELCBzbyB0aGUgZ3JhbmRD
aGlsZCBzaG91bGQgcmVjZWl2ZSB0aGUgbm9uLWZsYXR0ZW5lZCBjb21wb3NpdGUgdHJhbnNmb3Jt
LgorICAgIC8vCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCks
IHBhcmVudExheWVyVHJhbnNmb3JtLCBwYXJlbnRTdWJsYXllck1hdHJpeCwgRmxvYXRQb2ludCgw
LjI1ZiwgMC4yNWYpLCBGbG9hdFBvaW50KDIuNWYsIDMuMGYpLCBJbnRTaXplKDEwLCAxMiksIGZh
bHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0
UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMTYsIDE4KSwgdHJ1ZSk7CisgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4w
ZiksIEludFNpemUoNzYsIDc4KSwgZmFsc2UpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NU
X0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRy
YW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3
VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBv
c2l0ZVRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Cit9CisK
K1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmds
ZVJlbmRlclN1cmZhY2UpCit7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRo
Rm9yY2VkRHJhd3NDb250ZW50PiBncmFuZENoaWxkID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21p
dW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KDApKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1
cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBjaGlsZC0+YWRkQ2hp
bGQoZ3JhbmRDaGlsZCk7CisKKyAgICAvLyBjaGlsZCBpcyBzZXQgdXAgc28gdGhhdCBhIG5ldyBy
ZW5kZXIgc3VyZmFjZSBzaG91bGQgYmUgY3JlYXRlZC4KKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgw
LjVmKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudExheWVyVHJhbnNmb3JtOworICAgIHBhcmVudExheWVy
VHJhbnNmb3JtLnNjYWxlM2QoMi4wLCAyLjAsIDEuMCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hvcjsKKyAgICBwYXJlbnRUcmFuc2xhdGlvblRvQW5j
aG9yLnRyYW5zbGF0ZSgyLjUsIDMuMCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50
U3VibGF5ZXJNYXRyaXg7CisgICAgcGFyZW50U3VibGF5ZXJNYXRyaXguc2NhbGUzZCgxMC4wLCAx
MC4wLCAzLjMpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFRyYW5zbGF0aW9uVG9D
ZW50ZXI7CisgICAgcGFyZW50VHJhbnNsYXRpb25Ub0NlbnRlci50cmFuc2xhdGUoNS4wLCA2LjAp
OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSA9IHBh
cmVudFRyYW5zbGF0aW9uVG9BbmNob3IgKiBwYXJlbnRMYXllclRyYW5zZm9ybSAqIHBhcmVudFRy
YW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpCisgICAgICAgICAgICAqIHBhcmVudFRyYW5zbGF0
aW9uVG9DZW50ZXIgKiBwYXJlbnRTdWJsYXllck1hdHJpeCAqIHBhcmVudFRyYW5zbGF0aW9uVG9D
ZW50ZXIuaW52ZXJzZSgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNsYXRp
b25Ub0NlbnRlcjsKKyAgICBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIudHJhbnNsYXRlKDguMCwg
OS4wKTsKKworICAgIC8vIENoaWxkJ3MgcmVuZGVyIHN1cmZhY2Ugc2hvdWxkIG5vdCBleGlzdCB5
ZXQuCisgICAgQVNTRVJUX0ZBTFNFKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIHBhcmVudExheWVyVHJhbnNm
b3JtLCBwYXJlbnRTdWJsYXllck1hdHJpeCwgRmxvYXRQb2ludCgwLjI1ZiwgMC4yNWYpLCBGbG9h
dFBvaW50KDIuNWYsIDMuMGYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKKyAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiks
IEludFNpemUoMTYsIDE4KSwgZmFsc2UpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpKTsKKworICAgIC8vIFJlbmRlciBzdXJmYWNl
IHNob3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBub3cuCisgICAgQVNTRVJUX1RSVUUoY2hpbGQtPnJl
bmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX0VRKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCksIGNo
aWxkLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkpOworCisgICAgLy8gVGhlIGNoaWxkIGxheWVyJ3Mg
ZHJhdyB0cmFuc2Zvcm0gc2hvdWxkIHJlZmVyIHRvIGl0cyBuZXcgcmVuZGVyIHN1cmZhY2U7IHRo
ZXkgb25seSBkaWZmZXIgYnkgYSB0cmFuc2xhdGlvbiB0byBjZW50ZXIuCisgICAgLy8gVGhlIHNj
cmVlbi1zcGFjZSB0cmFuc2Zvcm0sIGhvd2V2ZXIsIHNob3VsZCBzdGlsbCByZWZlciB0byB0aGUg
cm9vdC4KKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChjaGlsZFRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NU
X0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOworCisgICAgLy8gV2l0aG91dCBjbGlwcGluZyBhbmQgc2Npc3NvcmluZywgdGhlIG9y
aWdpbiB0cmFuc2Zvcm0gYW5kIGRyYXcgdHJhbnNmb3JtIHNob3VsZCBiZSB0aGUgc2FtZS4KKyAg
ICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNo
aWxkLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpKTsKKyAgICBWRVJJ
RllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT50
YXJnZXRSZW5kZXJTdXJmYWNlKCktPmRyYXdUcmFuc2Zvcm0oKSk7CisKK30KKworVEVTVChDQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yUmVuZGVyU3VyZmFjZUhp
ZXJhcmNoeSkKK3sKKyAgICAvLyBUaGlzIHRlc3QgY3JlYXRlcyBhIG1vcmUgY29tcGxleCB0cmVl
IGFuZCB2ZXJpZmllcyBpdCBhbGwgYXQgb25jZS4gVGhpcyBjb3ZlcnMgdGhlIGZvbGxvd2luZyBj
YXNlczoKKyAgICAvLyAgIC0gbGF5ZXJzIHRoYXQgYXJlIGRlc2NyaWJlZCB3LnIudC4gYSByZW5k
ZXIgc3VyZmFjZTogc2hvdWxkIGhhdmUgZHJhdyB0cmFuc2Zvcm1zIGRlc2NyaWJlZCB3LnIudC4g
dGhhdCBzdXJmYWNlCisgICAgLy8gICAtIEEgcmVuZGVyIHN1cmZhY2UgZGVzY3JpYmVkIHcuci50
LiBhbiBhbmNlc3RvciByZW5kZXIgc3VyZmFjZTogc2hvdWxkIGhhdmUgYSBkcmF3IHRyYW5zZm9y
bSBkZXNjcmliZWQgdy5yLnQuIHRoYXQgYW5jZXN0b3Igc3VyZmFjZQorICAgIC8vICAgLSBTYW5p
dHkgY2hlY2sgb24gcmVjdXJzaW9uOiB2ZXJpZnkgdHJhbnNmb3JtcyBvZiBsYXllcnMgZGVzY3Jp
YmVkIHcuci50LiBhIHJlbmRlciBzdXJmYWNlIHRoYXQgaXMgZGVzY3JpYmVkIHcuci50LiBhbiBh
bmNlc3RvciByZW5kZXIgc3VyZmFjZS4KKyAgICAvLyAgIC0gdmVyaWZ5aW5nIHRoYXQgZWFjaCBs
YXllciBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIGNvcnJlY3QgcmVuZGVyU3VyZmFjZSBhbmQgdGFy
Z2V0UmVuZGVyU3VyZmFjZSB2YWx1ZXMuCisKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFy
ZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVt
PiByZW5kZXJTdXJmYWNlMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gcmVuZGVyU3VyZmFjZTIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkT2ZSb290ID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZE9mUlMxID0gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZE9mUlMy
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBn
cmFuZENoaWxkT2ZSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gZ3JhbmRDaGlsZE9mUlMxID0gYWRv
cHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KDApKTsKKyAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGdyYW5kQ2hpbGRPZlJT
MiA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgwKSk7
CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGls
ZChyZW5kZXJTdXJmYWNlMSk7CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZE9mUm9vdCk7Cisg
ICAgcmVuZGVyU3VyZmFjZTEtPmFkZENoaWxkKGNoaWxkT2ZSUzEpOworICAgIHJlbmRlclN1cmZh
Y2UxLT5hZGRDaGlsZChyZW5kZXJTdXJmYWNlMik7CisgICAgcmVuZGVyU3VyZmFjZTItPmFkZENo
aWxkKGNoaWxkT2ZSUzIpOworICAgIGNoaWxkT2ZSb290LT5hZGRDaGlsZChncmFuZENoaWxkT2ZS
b290KTsKKyAgICBjaGlsZE9mUlMxLT5hZGRDaGlsZChncmFuZENoaWxkT2ZSUzEpOworICAgIGNo
aWxkT2ZSUzItPmFkZENoaWxkKGdyYW5kQ2hpbGRPZlJTMik7CisKKyAgICAvLyBJbiBjb21iaW5h
dGlvbiB3aXRoIGRlc2NlbmRhbnREcmF3c0NvbnRlbnQsIG9wYWNpdHkgIT0gMSBmb3JjZXMgdGhl
IGxheWVyIHRvIGhhdmUgYSBuZXcgcmVuZGVyU3VyZmFjZS4KKyAgICByZW5kZXJTdXJmYWNlMS0+
c2V0T3BhY2l0eSgwLjVmKTsKKyAgICByZW5kZXJTdXJmYWNlMi0+c2V0T3BhY2l0eSgwLjMzZik7
CisKKyAgICAvLyBBbGwgbGF5ZXJzIGluIHRoZSB0cmVlIGFyZSBpbml0aWFsaXplZCB3aXRoIGFu
Y2hvciBhbmQgcG9zaXRpb24gbG9jYXRlZCBhdCB6ZXJvLCBhbmQgYSBzaXplIG9mICgxMCwxMCku
CisgICAgLy8gbWF0cml4ICJBIiBpcyB0aGUgY29tcG9zaXRlIGxheWVyIHRyYW5zZm9ybSB1c2Vk
IGluIGFsbCBsYXllcnMsIGNlbnRlcmVkIGFib3V0IHRoZSBhbmNob3IgcG9pbnQKKyAgICAvLyBt
YXRyaXggIkIiIGlzIHRoZSBzdWJsYXllciB0cmFuc2Zvcm0gdXNlZCBpbiBhbGwgbGF5ZXJzLCBj
ZW50ZXJlZCBhYm91dCB0aGUgY2VudGVyIHBvc2l0aW9uIG9mIHRoZSBsYXllci4KKyAgICAvLwor
ICAgIC8vIHggY29tcG9uZW50IHRlc3RzIHRoYXQgbGF5ZXJUcmFuc2Zvcm0gYW5kIHN1YmxheWVy
VHJhbnNmb3JtIGFyZSBkb25lIGluIHRoZSByaWdodCBvcmRlciAodHJhbnNsYXRpb24gYW5kIHNj
YWxlIGFyZSBub25jb21tdXRhdGl2ZSkuCisgICAgLy8geSBjb21wb25lbnQgaGFzIGEgdHJhbnNs
YXRpb24gYnkgMS4wIGZvciBldmVyeSBhbmNlc3Rvciwgd2hpY2ggaW5kaWNhdGVzIHRoZSAiZGVw
dGgiIG9mIHRoZSBsYXllciBpbiB0aGUgaGllcmFyY2h5LgorICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHRyYW5zbGF0aW9uVG9BbmNob3I7CisgICAgdHJhbnNsYXRpb25Ub0FuY2hvci50cmFuc2xh
dGUoMi41LCAwLjApOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zbGF0aW9uVG9DZW50
ZXI7CisgICAgdHJhbnNsYXRpb25Ub0NlbnRlci50cmFuc2xhdGUoNS4wLCA1LjApOworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGxheWVyVHJhbnNmb3JtOworICAgIGxheWVyVHJhbnNmb3JtLnRy
YW5zbGF0ZSgxLjAsIDEuMCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VibGF5ZXJUcmFu
c2Zvcm07CisgICAgc3VibGF5ZXJUcmFuc2Zvcm0uc2NhbGUzZCgxMC4wLCAxLjAsIDEuMCk7CisK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBBID0gdHJhbnNsYXRpb25Ub0FuY2hvciAqIGxheWVy
VHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0FuY2hvci5pbnZlcnNlKCk7CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggQiA9IHRyYW5zbGF0aW9uVG9DZW50ZXIgKiBzdWJsYXllclRyYW5zZm9ybSAq
IHRyYW5zbGF0aW9uVG9DZW50ZXIuaW52ZXJzZSgpOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBzdWJsYXllclRyYW5zZm9y
bSwgRmxvYXRQb2ludCgwLjI1ZiwgMC4wZiksIEZsb2F0UG9pbnQoMi41ZiwgMC4wZiksIEludFNp
emUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocmVu
ZGVyU3VyZmFjZTEuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBzdWJsYXllclRyYW5zZm9ybSwgRmxv
YXRQb2ludCgwLjI1ZiwgMC4wZiksIEZsb2F0UG9pbnQoMi41ZiwgMC4wZiksIEludFNpemUoMTAs
IDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocmVuZGVyU3Vy
ZmFjZTIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBzdWJsYXllclRyYW5zZm9ybSwgRmxvYXRQb2lu
dCgwLjI1ZiwgMC4wZiksIEZsb2F0UG9pbnQoMi41ZiwgMC4wZiksIEludFNpemUoMTAsIDEwKSwg
ZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGRPZlJvb3QuZ2V0
KCksIGxheWVyVHJhbnNmb3JtLCBzdWJsYXllclRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLjI1Ziwg
MC4wZiksIEZsb2F0UG9pbnQoMi41ZiwgMC4wZiksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOwor
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGRPZlJTMS5nZXQoKSwgbGF5ZXJU
cmFuc2Zvcm0sIHN1YmxheWVyVHJhbnNmb3JtLCBGbG9hdFBvaW50KDAuMjVmLCAwLjBmKSwgRmxv
YXRQb2ludCgyLjVmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZE9mUlMyLmdldCgpLCBsYXllclRyYW5zZm9ybSwg
c3VibGF5ZXJUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMC4yNWYsIDAuMGYpLCBGbG9hdFBvaW50KDIu
NWYsIDAuMGYpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGRPZlJvb3QuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBzdWJs
YXllclRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLjI1ZiwgMC4wZiksIEZsb2F0UG9pbnQoMi41Ziwg
MC4wZiksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0Zv
clRlc3RpbmcoZ3JhbmRDaGlsZE9mUlMxLmdldCgpLCBsYXllclRyYW5zZm9ybSwgc3VibGF5ZXJU
cmFuc2Zvcm0sIEZsb2F0UG9pbnQoMC4yNWYsIDAuMGYpLCBGbG9hdFBvaW50KDIuNWYsIDAuMGYp
LCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKGdyYW5kQ2hpbGRPZlJTMi5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIHN1YmxheWVyVHJhbnNm
b3JtLCBGbG9hdFBvaW50KDAuMjVmLCAwLjBmKSwgRmxvYXRQb2ludCgyLjVmLCAwLjBmKSwgSW50
U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSk7CisKKyAgICAvLyBPbmx5IGxheWVycyB0aGF0
IGFyZSBhc3NvY2lhdGVkIHdpdGggcmVuZGVyIHN1cmZhY2VzIHNob3VsZCBoYXZlIGFuIGFjdHVh
bCByZW5kZXJTdXJmYWNlKCkgdmFsdWUuCisgICAgLy8KKyAgICBBU1NFUlRfVFJVRShwYXJlbnQt
PnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGNoaWxkT2ZSb290LT5yZW5kZXJT
dXJmYWNlKCkpOworICAgIEFTU0VSVF9GQUxTRShncmFuZENoaWxkT2ZSb290LT5yZW5kZXJTdXJm
YWNlKCkpOworCisgICAgQVNTRVJUX1RSVUUocmVuZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZhY2Uo
KSk7CisgICAgQVNTRVJUX0ZBTFNFKGNoaWxkT2ZSUzEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAg
QVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGRPZlJTMS0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEFT
U0VSVF9UUlVFKHJlbmRlclN1cmZhY2UyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9G
QUxTRShjaGlsZE9mUlMyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9GQUxTRShncmFu
ZENoaWxkT2ZSUzItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICAvLyBWZXJpZnkgYWxsIHRhcmdl
dFJlbmRlclN1cmZhY2UgYWNjZXNzb3JzCisgICAgLy8KKyAgICBFWFBFQ1RfRVEocGFyZW50LT5y
ZW5kZXJTdXJmYWNlKCksIHBhcmVudC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBF
Q1RfRVEocGFyZW50LT5yZW5kZXJTdXJmYWNlKCksIGNoaWxkT2ZSb290LT50YXJnZXRSZW5kZXJT
dXJmYWNlKCkpOworICAgIEVYUEVDVF9FUShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSwgZ3JhbmRD
aGlsZE9mUm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9FUShyZW5k
ZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpLCByZW5kZXJTdXJmYWNlMS0+dGFyZ2V0UmVuZGVy
U3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZhY2Uo
KSwgY2hpbGRPZlJTMS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfRVEocmVu
ZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZhY2UoKSwgZ3JhbmRDaGlsZE9mUlMxLT50YXJnZXRSZW5k
ZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2UyLT5yZW5kZXJTdXJm
YWNlKCksIHJlbmRlclN1cmZhY2UyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVD
VF9FUShyZW5kZXJTdXJmYWNlMi0+cmVuZGVyU3VyZmFjZSgpLCBjaGlsZE9mUlMyLT50YXJnZXRS
ZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9FUShyZW5kZXJTdXJmYWNlMi0+cmVuZGVyU3Vy
ZmFjZSgpLCBncmFuZENoaWxkT2ZSUzItPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CisgICAgCisg
ICAgLy8gVmVyaWZ5IGxheWVyIGRyYXcgdHJhbnNmb3JtcworICAgIC8vICBub3RlIHRoYXQgZHJh
dyB0cmFuc2Zvcm1zIGFyZSBkZXNjcmliZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBuZWFyZXN0IGFu
Y2VzdG9yIHJlbmRlciBzdXJmYWNlCisgICAgLy8gIGJ1dCBzY3JlZW4gc3BhY2UgdHJhbnNmb3Jt
cyBhcmUgZGVzY3JpYmVkIHdpdGggcmVzcGVjdCB0byB0aGUgcm9vdC4KKyAgICAvLworICAgIFZF
UklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBwYXJlbnQt
PmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIg
KiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGRPZlJvb3QtPmRyYXdUcmFuc2Zvcm0oKSk7
CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICogQiAqIEEgKiB0cmFu
c2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkT2ZSb290LT5kcmF3VHJhbnNmb3JtKCkpOworCisg
ICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwodHJhbnNsYXRpb25Ub0NlbnRlciwgcmVuZGVy
U3VyZmFjZTEtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFV
QUwoQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZE9mUlMxLT5kcmF3VHJhbnNmb3Jt
KCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEIgKiBBICogQiAqIEEgKiB0cmFu
c2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkT2ZSUzEtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAg
CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwodHJhbnNsYXRpb25Ub0NlbnRlciwgcmVu
ZGVyU3VyZmFjZTItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1Rf
RVFVQUwoQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZE9mUlMyLT5kcmF3VHJhbnNm
b3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEIgKiBBICogQiAqIEEgKiB0
cmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkT2ZSUzItPmRyYXdUcmFuc2Zvcm0oKSk7CisK
KyAgICAvLyBWZXJpZnkgbGF5ZXIgc2NyZWVuLXNwYWNlIHRyYW5zZm9ybXMKKyAgICBWRVJJRllf
TUFUUklYX0FMTU9TVF9FUVVBTChBLCBwYXJlbnQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwor
ICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSwgY2hpbGRPZlJvb3QtPnNj
cmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEg
KiBCICogQSAqIEIgKiBBLCBncmFuZENoaWxkT2ZSb290LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgp
KTsKKworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSwgcmVuZGVyU3Vy
ZmFjZTEtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NU
X0VRVUFMKEEgKiBCICogQSAqIEIgKiBBLCBjaGlsZE9mUlMxLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBCICogQSAq
IEIgKiBBLCBncmFuZENoaWxkT2ZSUzEtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisgICAg
VkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICogQiAqIEEsIHJlbmRlclN1cmZh
Y2UyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9F
UVVBTChBICogQiAqIEEgKiBCICogQSAqIEIgKiBBLCBjaGlsZE9mUlMyLT5zY3JlZW5TcGFjZVRy
YW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBC
ICogQSAqIEIgKiBBICogQiAqIEEsIGdyYW5kQ2hpbGRPZlJTMi0+c2NyZWVuU3BhY2VUcmFuc2Zv
cm0oKSk7CisKKyAgICAvLyBWZXJpZnkgcmVuZGVyIHN1cmZhY2UgdHJhbnNmb3Jtcy4KKyAgICAv
LworICAgIC8vIE9yaWdpbiB0cmFuc2Zvcm0gb2YgcmVuZGVyIHN1cmZhY2UgMSBpcyBkZXNjcmli
ZWQgd2l0aCByZXNwZWN0IHRvIHJvb3QuCisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
QSAqIEIgKiBBLCByZW5kZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zv
cm0oKSk7CisgICAgLy8gT3JpZ2luIHRyYW5zZm9ybSBvZiByZW5kZXIgc3VyZmFjZSAyIGlzIGRl
c2NyaWJlZCB3aXRoIHJlc3BlY3QgdG8gcmVuZGVyIHN1cmZhY2UgMi4KKyAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTChCICogQSwgcmVuZGVyU3VyZmFjZTItPnJlbmRlclN1cmZhY2UoKS0+
b3JpZ2luVHJhbnNmb3JtKCkpOworCisgICAgLy8gU2FuaXR5IGNoZWNrLiBJZiB0aGVzZSBmYWls
IHRoZXJlIGlzIHByb2JhYmx5IGEgYnVnIGluIHRoZSB0ZXN0IGl0c2VsZi4KKyAgICAvLyBJdCBp
cyBleHBlY3RlZCB0aGF0IHdlIGNvcnJlY3RseSBzZXQgdXAgdHJhbnNmb3JtcyBzbyB0aGF0IHRo
ZSB5LWNvbXBvbmVudCBvZiB0aGUgc2NyZWVuLXNwYWNlIHRyYW5zZm9ybQorICAgIC8vIGVuY29k
ZXMgdGhlICJkZXB0aCIgb2YgdGhlIGxheWVyIGluIHRoZSB0cmVlLgorICAgIEVYUEVDVF9GTE9B
VF9FUSgxLjAsIHBhcmVudC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tNDIoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDIuMCwgY2hpbGRPZlJvb3QtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkubTQy
KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzLjAsIGdyYW5kQ2hpbGRPZlJvb3QtPnNjcmVlblNw
YWNlVHJhbnNmb3JtKCkubTQyKCkpOworICAgIAorICAgIEVYUEVDVF9GTE9BVF9FUSgyLjAsIHJl
bmRlclN1cmZhY2UxLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLm00MigpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMy4wLCBjaGlsZE9mUlMxLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLm00MigpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoNC4wLCBncmFuZENoaWxkT2ZSUzEtPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkubTQyKCkpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDMuMCwgcmVuZGVyU3VyZmFj
ZTItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkubTQyKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0
LjAsIGNoaWxkT2ZSUzItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkubTQyKCkpOworICAgIEVYUEVD
VF9GTE9BVF9FUSg1LjAsIGdyYW5kQ2hpbGRPZlJTMi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5t
NDIoKSk7Cit9CisKKy8vIEZJWE1FOgorLy8gY29udGludWUgd29ya2luZyBvbiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg5NDIKKy8vICAtIGFkZCBhIHRlc3QgdG8g
dmVyaWZ5IGNsaXBwaW5nIHRoYXQgY2hhbmdlcyB0aGUgImNlbnRlciBwb2ludCIKKy8vICAtIGFk
ZCBhIGNhc2UgdGhhdCBjaGVja3MgaWYgYSByZW5kZXIgc3VyZmFjZSdzIGRyYXdUcmFuc2Zvcm0g
aXMgY29tcHV0ZWQgY29ycmVjdGx5LiBGb3IgdGhlIGdlbmVyYWwgY2FzZSwgYW5kIGZvciBzcGVj
aWFsIGNhc2VzIHdoZW4gY2xpcHBpbmcvc2Npc3NvcmluZy4KKy8vICAtIGFkZCBhIGNhc2UgdGhh
dCBjaGVja3MgaWYgYSByZW5kZXIgc3VyZmFjZSdzIHJlcGxpY2FUcmFuc2Zvcm0gaXMgY29tcHV0
ZWQgY29ycmVjdGx5LgorLy8gIC0gdGVzdCBhbGwgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2gg
cmVuZGVyIHN1cmZhY2VzIGFyZSBjcmVhdGVkCisvLyAgLSBpZiBwb3NzaWJsZSwgdGVzdCBhbGwg
Y29uZGl0aW9ucyB1bmRlciB3aGljaCByZW5kZXIgc3VyZmFjZXMgYXJlIG5vdCBjcmVhdGVkCisv
LyAgLSB2ZXJpZnkgdGhhdCB0aGUgbGF5ZXIgbGlzdHMgb2YgcmVuZGVyIHN1cmZhY2VzIGFyZSBj
b3JyZWN0LCB2ZXJpZnkgdGhhdCAidGFyZ2V0UmVuZGVyU3VyZmFjZSIgdmFsdWVzIGZvciBlYWNo
IGxheWVyIGFyZSBjb3JyZWN0LgorLy8gIC0gdGVzdCB0aGUgY29tcHV0YXRpb24gb2Ygc2Npc3Nv
ciByZWN0cyBhbmQgY29udGVudCByZWN0cworLy8gIC0gdGVzdCB0aGUgc3BlY2lhbCBjYXNlcyBm
b3IgbWFzayBsYXllcnMgYW5kIHJlcGxpY2EgbGF5ZXJzCisvLyAgLSB0ZXN0IHRoZSBvdGhlciBm
dW5jdGlvbnMgaW4gQ0NMYXllclRyZWVIb3N0Q29tbW9uCisvLworCit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109572</attachid>
            <date>2011-10-03 19:16:45 -0700</date>
            <delta_ts>2011-10-06 14:44:24 -0700</delta_ts>
            <desc>fixed a badly misleading comment</desc>
            <filename>bug-69197-20111003191644.patch</filename>
            <type>text/plain</type>
            <size>34624</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY0OTAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
MjE2OWE3NzQ4YWNlMWI5MWQ4ZTM4ZTNlOTQyNTFlNjhkN2Y0Y2VjMi4uNDZkMDA5NGMxYTQ0MzUx
NTIzNTEyMDQxYTBkYWQ5MjQ4NGFlNDRmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMiBAQAorMjAxMS0xMC0wMyAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBGaXJzdCByb3VuZCBvZiB1bml0IHRlc3RzIGZvciBDQ0xheWVy
VHJlZUhvc3RDb21tb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02OTE5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcm91bmQgb2YgdGVzdHMgZm9jdXNlcyBvbiB2ZXJpZnlpbmcgdGhlIGNvbXB1
dGF0aW9uIG9mIG1hdHJpeCB0cmFuc2Zvcm1zCisgICAgICAgIGluIGNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAq
IHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OnNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
ZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpyZW1vdmUzRENvbXBvbmVudE9mTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50OjpMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudDo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgor
CiAyMDExLTEwLTAzICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTY0ODEuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQppbmRleCAxNDdlNDI4NWVhNWQxZjNiYjM1OTU0MWNkMDhjYTIzZTk2OTNh
MjBmLi5kYjE4NTMyYjhkMmZjZTkwM2E2YzEyNTY0NGU5MDIwZWFjYjU5YzA0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTU1LDYgKzU1LDcgQEAKICAgICAgICAgICAgICd0ZXN0
cy9BcmVuYVRlc3RIZWxwZXJzLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0Fzc29jaWF0ZWRVUkxM
b2FkZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclNvcnRlclRlc3QuY3Bw
JywKKyAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NUaHJlYWRUYXNrVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjIw
NjgzYjg4YzVjYzk2ZmRkOTU2MzZjM2IzYmU0MGFjYzlkMDZiMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5j
cHAKQEAgLTAsMCArMSw1MDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgorCisjaW5jbHVkZSAiTGF5
ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisKKyNpbmNs
dWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKy8vCisvLyBO
T1RFIENBUkVGVUxMWToKKy8vCisvLyBJbiB0aGVzZSB0ZXN0cywgdGhlIHJlbGF0aW9uc2hpcCBi
ZXR3ZWVuIGFuY2hvciBwb2ludCwgcG9zaXRpb24sIGFuZCBib3VuZHMgaXMgbm90IGludHVpdGl2
ZS4gVGhlIGZvbGxvd2luZyB0d28gcG9pbnRzCisvLyBzaG91bGQgaGVscCBjbGFyaWZ5IHRoZSBj
b2RlOgorLy8KKy8vICAxLiBBcyBhIEZsb2F0UG9pbnQgb2JqZWN0LCBhbmNob3IgcG9pbnQgaXMg
c3BlY2lmaWVkIGluICJ1bml0IGxheWVyIHNwYWNlIiwgd2hlcmUgdGhlIGJvdW5kcyBvZiB0aGUg
bGF5ZXIgbWFwIHRvIFswLDFdLgorLy8gICAgIEhvd2V2ZXIsIGFzIGEgVHJhbnNmb3JtYXRpb25N
YXRyaXggb2JqZWN0LCB0aGUgdHJhbnNmb3JtIHRvIHRoZSBhbmNob3IgcG9pbnQgaXMgc3BlY2lm
aWVkIGluICJwaXhlbCBsYXllciBzcGFjZSIsIHdoZXJlCisvLyAgICAgdGhlIGJvdW5kcyBvZiB0
aGUgbGF5ZXIgbWFwIHRvIFtib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpXS4KKy8vCisv
LyAgMi4gTGF5ZXJDaHJvbWl1bTo6cG9zaXRpb24gaXMgYWxzbyBhd2t3YXJkIC0gaXQgaXMgYWN0
dWFsbHkgdGhlIHN1bSBvZiBhbmNob3JQb2ludCAoaW4gcGl4ZWwgc3BhY2UpIGFuZCBhY3R1YWwg
cG9zaXRpb24uIEJlY2F1c2UKKy8vICAgICB0aGlzLCB0aGUgdmFsdWUgb2YgTGF5ZXJDaHJvbWl1
bTo6cG9zaXRpb24oKSBjaGFuZ2VzLCBldmVuIHRob3VnaCB0aGUgbGF5ZXIgaXMgbm90IGFjdHVh
bGx5IGxvY2F0ZWQgaW4gYSBkaWZmZXJlbnQgcG9zaXRpb24uCisvLyAgICAgV2hlbiB3ZSBpbml0
aWFsaXplIGxheWVycyBmb3IgdGVzdGluZyBoZXJlLCB3ZSBuZWVkIHRvIGluaXRpYWxpemUgdGhh
dCB1bmludHV0aXZlIHBvc2l0aW9uIHZhbHVlLgorLy8KKy8vICAgICBUbyBjb21wdXRlIGEgbW9y
ZSBpbnR1aXRpdmUgdmVyc2lvbiBvZiBwb3NpdGlvbiwgeW91IGNhbiBkbyBzb21ldGhpbmcgbGlr
ZToKKy8vICAgICAgICBpbnR1aXRpdmVMYXllclBvc2l0aW9uLnggPSAgcG9zaXRpb24ueCAtIChh
bmNob3JQb2ludC54ICogYm91bmRzLndpZHRoKQorLy8gICAgICAgIGludHVpdGl2ZUxheWVyUG9z
aXRpb24ueSA9ICBwb3NpdGlvbi55IC0gKGFuY2hvclBvaW50LnkgKiBib3VuZHMuaGVpZ2h0KQor
Ly8KKy8vICAgICBUaGlzICJpbnR1aXRpdmUgcG9zaXRpb24iIGlzIG1vcmUgZGlyZWN0bHkgcmVs
YXRlZCB0byB0aGUgZXhwZWN0ZWQgc2VxdWVuY2Ugb2YgdHJhbnNmb3Jtcy4KKy8vCisvLyBBbHNv
IG5vdGUgdGhhdCBwYXJ0aWN1bGFyIHNlcXVlbmNlcyBvZiB0cmFuc2Zvcm1zIGNhbiBiZSBjb21t
dXRhdGl2ZSAtIGZvciBleGFtcGxlLCBBKkIgd2hlcmUgQSBhbmQgQiBhcmUgYm90aCB0cmFuc2xh
dGlvbnMsIG9yIGJvdGggc2NhbGVzLgorLy8gVG8gcHJvcGVybHkgdGVzdCB0aGUgY29ycmVjdCBv
cmRlciBvZiB0cmFuc2Zvcm1zLCB3ZSB0cnkgdG8gbWl4IHNjYWxlcyBhbmQgdHJhbnNsYXRpb25z
IHRvZ2V0aGVyIHNvIHRoYXQgdGhleSBhcmUgbm90IGNvbW11dGF0aXZlLgorLy8KKworCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworLy8gVGhpcyBpcyBhIG1hY3Jv
IGluc3RlYWQgb2YgYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBndGVzdCBlcnJvcnMgY2FuIGdpdmUg
dXMgdXNlZnVsIGxpbmUgbnVtYmVycyBhc3NvY2lhdGVkIHdpdGggdGhlIHRlc3QuCisvLyBFdmVu
IHRob3VnaCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2YWx1ZXMgYXJlIGRvdWJsZSwgdGhlcmUgYXJl
IG1hbnkgb3RoZXIgZmxvYXRpbmctcG9pbnQgdmFsdWVzIHVzZWQsIGFuZCBzbyB3ZQorLy8gb25s
eSBleHBlY3QgdGhlbSB0byBiZSBhY2N1cmF0ZSB1cCB0byBmbG9hdGluZy1wb2ludCBwcmVjaXNp
b24uCisjZGVmaW5lIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGV4cGVjdGVkLCBhY3R1YWwp
ICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTEoKSwgKGFjdHVhbCkubTEx
KCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0xMigpLCAoYWN0dWFsKS5t
MTIoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTEzKCksIChhY3R1YWwp
Lm0xMygpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTQoKSwgKGFjdHVh
bCkubTE0KCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yMSgpLCAoYWN0
dWFsKS5tMjEoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTIyKCksIChh
Y3R1YWwpLm0yMigpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMjMoKSwg
KGFjdHVhbCkubTIzKCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yNCgp
LCAoYWN0dWFsKS5tMjQoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTMx
KCksIChhY3R1YWwpLm0zMSgpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5t
MzIoKSwgKGFjdHVhbCkubTMyKCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQp
Lm0zMygpLCAoYWN0dWFsKS5tMzMoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3Rl
ZCkubTM0KCksIChhY3R1YWwpLm0zNCgpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVj
dGVkKS5tNDEoKSwgKGFjdHVhbCkubTQxKCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhw
ZWN0ZWQpLm00MigpLCAoYWN0dWFsKS5tNDIoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChl
eHBlY3RlZCkubTQzKCksIChhY3R1YWwpLm00MygpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
KGV4cGVjdGVkKS5tNDQoKSwgKGFjdHVhbCkubTQ0KCkpCisKK3ZvaWQgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhMYXllckNocm9taXVtICogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRy
YW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3Np
dGlvbiwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBib29sIHByZXNlcnZlczNEKQoreworICAgIGxh
eWVyLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKyAgICBsYXllci0+c2V0U3VibGF5ZXJUcmFu
c2Zvcm0oc3VibGF5ZXJUcmFuc2Zvcm0pOworICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChhbmNo
b3IpOworICAgIGxheWVyLT5zZXRQb3NpdGlvbihwb3NpdGlvbik7CisgICAgbGF5ZXItPnNldEJv
dW5kcyhib3VuZHMpOworICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCk7Cit9
CisKK3ZvaWQgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXll
ckNocm9taXVtICogcm9vdExheWVyKQoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50
aXR5TWF0cml4OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teVJlbmRl
clN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1
bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5
KHJvb3RMYXllciwgcm9vdExheWVyLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGR1
bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVy
ZVNpemUpOworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW1vdmUzRENvbXBvbmVudE9mTWF0
cml4KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXQpCit7CisgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggcmV0ID0gbWF0OworICAgIHJldC5zZXRNMTMoMCk7CisgICAgcmV0LnNldE0yMygw
KTsKKyAgICByZXQuc2V0TTMxKDApOworICAgIHJldC5zZXRNMzIoMCk7CisgICAgcmV0LnNldE0z
MygxKTsKKyAgICByZXQuc2V0TTM0KDApOworICAgIHJldC5zZXRNNDMoMCk7CisgICAgcmV0dXJu
IHJldDsKK30KKworY2xhc3MgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQgOiBw
dWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgTGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoQ0NMYXllckRlbGVnYXRlKiBkZWxlZ2F0ZSkKKyAgICAg
ICAgOiBMYXllckNocm9taXVtKGRlbGVnYXRlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorfTsKKworVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yTm9PcExheWVyKQor
eworICAgIC8vIFNhbml0eSBjaGVjazogRm9yIGxheWVycyBwb3NpdGlvbmVkIGF0IHplcm8sIHdp
dGggemVybyBzaXplLAorICAgIC8vIGFuZCB3aXRoIGlkZW50aXR5IHRyYW5zZm9ybXMsIHRoZW4g
dGhlIGRyYXdUcmFuc2Zvcm0sCisgICAgLy8gc2NyZWVuU3BhY2VUcmFuc2Zvcm0sIGFuZCB0aGUg
aGllcmFyY2h5IHBhc3NlZCBvbiB0byBjaGlsZHJlbgorICAgIC8vIGxheWVycyBzaG91bGQgYWxz
byBiZSBpZGVudGl0eSB0cmFuc2Zvcm1zLgorCisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBh
cmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IGdyYW5kQ2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgcGFyZW50
LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZCk7Cisg
ICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggaWRlbnRpdHlNYXRyaXg7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJl
bnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBm
LCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgwLCAwKSwgZmFsc2UpOwor
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgw
LjBmLCAwLjBmKSwgSW50U2l6ZSgwLCAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRT
aXplKDAsIDApLCBmYWxzZSk7CisKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNB
bmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSk7CisKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9F
UVVBTChpZGVudGl0eU1hdHJpeCwgcGFyZW50LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklG
WV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBwYXJlbnQtPnNjcmVlblNwYWNl
VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0
cml4LCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9F
UVVBTChpZGVudGl0eU1hdHJpeCwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAg
IFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBncmFuZENoaWxkLT5k
cmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5
TWF0cml4LCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKK30KKworVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlTGF5ZXIp
Cit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IGxheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIGxh
eWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisKKyAgICAvLyBDYXNlIDE6IHNldHRpbmcgdGhl
IHN1YmxheWVyIHRyYW5zZm9ybSBzaG91bGQgbm90IGFmZmVjdCB0aGlzIGxheWVyJ3MgZHJhdyB0
cmFuc2Zvcm0gb3Igc2NyZWVuLXNwYWNlIHRyYW5zZm9ybS4KKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBhcmJpdHJhcnlUcmFuc2xhdGlvbjsKKyAgICBhcmJpdHJhcnlUcmFuc2xhdGlvbi50cmFu
c2xhdGUoMTAuMCwgMjAuMCk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXll
ci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGFyYml0cmFyeVRyYW5zbGF0aW9uLCBGbG9hdFBvaW50
KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDAsIDApLCBmYWxz
ZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXll
ci5nZXQoKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgs
IGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFM
KGlkZW50aXR5TWF0cml4LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisKKyAgICAv
LyBDYXNlIDI6IHNldHRpbmcgdGhlIGJvdW5kcyBvZiB0aGUgbGF5ZXIgc2hvdWxkIHJlc3VsdCBp
biBhIGRyYXcgdHJhbnNmb3JtIHRoYXQgdHJhbnNsYXRlcyB0byBoYWxmIHRoZSB3aWR0aCBhbmQg
aGVpZ2h0LgorICAgIC8vICAgICAgICAgVGhlIHNjcmVlbi1zcGFjZSB0cmFuc2Zvcm0gc2hvdWxk
IHJlbWFpbiBhcyB0aGUgaWRlbnRpdHksIGJlY2F1c2UgaXQgZG9lcyBub3QgZGVhbCB3aXRoIHRy
YW5zZm9ybWluZyB0by9mcm9tIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyLgorICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHRyYW5zbGF0aW9uVG9DZW50ZXI7CisgICAgdHJhbnNsYXRpb25Ub0NlbnRl
ci50cmFuc2xhdGUoNS4wLCA2LjApOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
bGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxz
ZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXll
ci5nZXQoKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwodHJhbnNsYXRpb25Ub0Nl
bnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1Rf
RVFVQUwoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKwor
ICAgIC8vIENhc2UgMzogVGhlIGFuY2hvciBwb2ludCBieSBpdHNlbGYgKHdpdGhvdXQgYSBsYXll
ciB0cmFuc2Zvcm0pIHNob3VsZCBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgdHJhbnNmb3Jtcy4KKyAg
ICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQb2ludCgy
LjVmLCAzLjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXllci5nZXQoKSk7CisgICAgVkVSSUZZX01B
VFJJWF9BTE1PU1RfRVFVQUwodHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zv
cm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGxh
eWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKworICAgIC8vIENhc2UgNDogQSBjaGFuZ2Ug
aW4gImFjdHVhbCIgcG9zaXRpb24gYWZmZWN0cyBib3RoIHRoZSBkcmF3IHRyYW5zZm9ybSBhbmQg
c2NyZWVuIHNwYWNlIHRyYW5zZm9ybS4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwb3NpdGlv
blRyYW5zZm9ybTsKKyAgICBwb3NpdGlvblRyYW5zZm9ybS50cmFuc2xhdGUoMC4wLCAxLjIpOwor
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjI1ZiwgMC4yNWYpLCBGbG9hdFBvaW50
KDIuNWYsIDQuMmYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKKyAgICBleGVjdXRlQ2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKKyAgICBWRVJJRllf
TUFUUklYX0FMTU9TVF9FUVVBTChwb3NpdGlvblRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9DZW50
ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VR
VUFMKHBvc2l0aW9uVHJhbnNmb3JtLCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisK
KyAgICAvLyBDYXNlIDU6IEluIHRoZSBjb3JyZWN0IHNlcXVlbmNlIG9mIHRyYW5zZm9ybXMsIHRo
ZSBsYXllciB0cmFuc2Zvcm0gc2hvdWxkIHByZS1tdWx0aXBseSB0aGUgdHJhbnNsYXRpb25Ub0Nl
bnRlci4gVGhpcyBpcyBlYXNpbHkgdGVzdGVkIGJ5CisgICAgLy8gICAgICAgICB1c2luZyBhIHNj
YWxlIHRyYW5zZm9ybSwgYmVjYXVzZSBzY2FsZSBhbmQgdHJhbnNsYXRpb24gYXJlIG5vdCBjb21t
dXRhdGl2ZS4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllclRyYW5zZm9ybTsKKyAgICBs
YXllclRyYW5zZm9ybS5zY2FsZTNkKDIuMCwgMi4wLCAxLjApOworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6
ZSgxMCwgMTIpLCBmYWxzZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5k
VmlzaWJpbGl0eShsYXllci5nZXQoKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
bGF5ZXJUcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9y
bSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChsYXllclRyYW5zZm9ybSwgbGF5
ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisgICAgLy8gQ2FzZSA2OiBUaGUgbGF5ZXIg
dHJhbnNmb3JtIHNob3VsZCBvY2N1ciB3aXRoIHJlc3BlY3QgdG8gdGhlIGFuY2hvciBwb2ludC4K
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2xhdGlvblRvQW5jaG9yOworICAgIHRyYW5z
bGF0aW9uVG9BbmNob3IudHJhbnNsYXRlKDUuMCwgMC4wKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBleHBlY3RlZFJlc3VsdCA9IHRyYW5zbGF0aW9uVG9BbmNob3IgKiBsYXllclRyYW5zZm9y
bSAqIHRyYW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLjVmLCAwLjBmKSwgRmxvYXRQb2ludCg1LjBmLCAwLjBmKSwgSW50U2l6ZSgx
MCwgMTIpLCBmYWxzZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShsYXllci5nZXQoKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZXhw
ZWN0ZWRSZXN1bHQgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgp
KTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChleHBlY3RlZFJlc3VsdCwgbGF5ZXIt
PnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisgICAgLy8gQ2FzZSA3OiBWZXJpZnkgdGhhdCBw
b3NpdGlvbiBwcmUtbXVsdGlwbGllcyB0aGUgbGF5ZXIgdHJhbnNmb3JtLgorICAgIC8vICAgICAg
ICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNB
bmRWaXNpYmlsaXR5IGRvZXMgdGhpcyBpbXBsaWNpdGx5LCBidXQgaXQgaXMKKyAgICAvLyAgICAg
ICAgIHN0aWxsIHdvcnRoIHRlc3RpbmcgdG8gZGV0ZWN0IGFjY2lkZW50YWwgcmVncmVzc2lvbnMu
CisgICAgZXhwZWN0ZWRSZXN1bHQgPSBwb3NpdGlvblRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9B
bmNob3IgKiBsYXllclRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpOwor
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNm
b3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjVmLCAwLjBmKSwgRmxvYXRQb2ludCg1
LjBmLCAxLjJmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXllci5nZXQoKSk7CisgICAgVkVSSUZZX01B
VFJJWF9BTE1PU1RfRVFVQUwoZXhwZWN0ZWRSZXN1bHQgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBs
YXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChl
eHBlY3RlZFJlc3VsdCwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworfQorCitURVNU
KENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW1wbGVIaWVy
YXJjaHkpCit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsK
KyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
MCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoMCk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFy
ZW50LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQpOwor
CisgICAgLy8gQ2FzZSAxOiBwYXJlbnQncyBhbmNob3JQb2ludCBzaG91bGQgbm90IGFmZmVjdCBj
aGlsZCBvciBncmFuZENoaWxkLgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNs
YXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXI7CisgICAgY2hpbGRU
cmFuc2xhdGlvblRvQ2VudGVyLnRyYW5zbGF0ZSg4LjAsIDkuMCk7CisgICAgZ3JhbmRDaGlsZFRy
YW5zbGF0aW9uVG9DZW50ZXIudHJhbnNsYXRlKDM4LjAsIDM5LjApOworICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQb2ludCgyLjVmLCAzLjBmKSwg
SW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50
KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2LCAxOCksIGZh
bHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwg
RmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7CisgICAgZXhl
Y3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkpOwor
ICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwg
Y2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
aWRlbnRpdHlNYXRyaXgsIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBWRVJJ
RllfTUFUUklYX0FMTU9TVF9FUVVBTChncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3Jh
bmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVB
TChpZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisK
KyAgICAvLyBDYXNlIDI6IHBhcmVudCdzIHBvc2l0aW9uIGFmZmVjdHMgY2hpbGQgYW5kIGdyYW5k
Q2hpbGQuCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50UG9zaXRpb25UcmFuc2Zvcm07
CisgICAgcGFyZW50UG9zaXRpb25UcmFuc2Zvcm0udHJhbnNsYXRlKDAuMCwgMS4yKTsKKyAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMjVmLCAwLjI1ZiksIEZsb2F0UG9pbnQoMi41
ZiwgNC4yZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgx
NiwgMTgpLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENo
aWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4w
ZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoNzYsIDc4KSwgZmFsc2Up
OworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50
LmdldCgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRQb3NpdGlvblRy
YW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0o
KSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50UG9zaXRpb25UcmFuc2Zv
cm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChwYXJlbnRQb3NpdGlvblRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xhdGlv
blRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRS
SVhfQUxNT1NUX0VRVUFMKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3Jl
ZW5TcGFjZVRyYW5zZm9ybSgpKTsKKworICAgIC8vIENhc2UgMzogcGFyZW50J3MgbG9jYWwgdHJh
bnNmb3JtIGFmZmVjdHMgY2hpbGQgYW5kIGdyYW5kY2hpbGQKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBwYXJlbnRMYXllclRyYW5zZm9ybTsKKyAgICBwYXJlbnRMYXllclRyYW5zZm9ybS5zY2Fs
ZTNkKDIuMCwgMi4wLCAxLjApOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFRyYW5z
bGF0aW9uVG9BbmNob3I7CisgICAgcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hvci50cmFuc2xhdGUo
Mi41LCAzLjApOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudENvbXBvc2l0ZVRyYW5z
Zm9ybSA9IHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3IgKiBwYXJlbnRMYXllclRyYW5zZm9ybSAq
IHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpOworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBwYXJlbnRMYXllclRyYW5zZm9ybSwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQb2ludCgyLjVmLCAzLjBm
KSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBv
aW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2LCAxOCks
IGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBm
KSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7CisgICAg
ZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkp
OworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9y
bSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7Cisg
ICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBj
aGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1Rf
RVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9B
TE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3JlZW5T
cGFjZVRyYW5zZm9ybSgpKTsKKworICAgIC8vIENhc2UgNDogcGFyZW50J3Mgc3VibGF5ZXJNYXRy
aXggYWZmZWN0cyBjaGlsZCBhbmQgZ3JhbmRjaGlsZAorICAgIC8vICAgICAgICAgc2NhbGluZyBp
cyB1c2VkIGhlcmUgYWdhaW4gc28gdGhhdCB0aGUgY29ycmVjdCBzZXF1ZW5jZSBvZiB0cmFuc2Zv
cm1zIGlzIHByb3Blcmx5IHRlc3RlZC4KKyAgICAvLyAgICAgICAgIE5vdGUgdGhhdCBwcmVzZXJ2
ZXMzRCBpcyBmYWxzZSwgYnV0IHRoZSBzdWJsYXllciBtYXRyaXggc2hvdWxkIHJldGFpbiBpdHMg
M0QgcHJvcGVydGllcyB3aGVuIGdpdmVuIHRvIGNoaWxkLgorICAgIC8vICAgICAgICAgQnV0IHRo
ZW4sIHRoZSBjaGlsZCBhbHNvIGRvZXMgbm90IHByZXNlcnZlM0QuIFdoZW4gaXQgZ2l2ZXMgaXRz
IGhpZXJhcmNoeSB0byB0aGUgZ3JhbmRDaGlsZCwgaXQgc2hvdWxkIGJlIGZsYXR0ZW5lZCB0byAy
RC4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRTdWJsYXllck1hdHJpeDsKKyAgICBw
YXJlbnRTdWJsYXllck1hdHJpeC5zY2FsZTNkKDEwLjAsIDEwLjAsIDMuMyk7CisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggcGFyZW50VHJhbnNsYXRpb25Ub0NlbnRlcjsKKyAgICBwYXJlbnRUcmFu
c2xhdGlvblRvQ2VudGVyLnRyYW5zbGF0ZSg1LjAsIDYuMCk7CisgICAgLy8gc3VibGF5ZXIgbWF0
cml4IGlzIGFwcGxpZWQgdG8gdGhlIGNlbnRlciBvZiB0aGUgcGFyZW50IGxheWVyLgorICAgIHBh
cmVudENvbXBvc2l0ZVRyYW5zZm9ybSA9IHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3IgKiBwYXJl
bnRMYXllclRyYW5zZm9ybSAqIHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpCisg
ICAgICAgICAgICAqIHBhcmVudFRyYW5zbGF0aW9uVG9DZW50ZXIgKiBwYXJlbnRTdWJsYXllck1h
dHJpeCAqIHBhcmVudFRyYW5zbGF0aW9uVG9DZW50ZXIuaW52ZXJzZSgpOworICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5zZm9ybSA9IHJlbW92ZTNEQ29tcG9u
ZW50T2ZNYXRyaXgocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtKTsKKyAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgcGFyZW50TGF5ZXJUcmFuc2Zvcm0sIHBhcmVu
dFN1YmxheWVyTWF0cml4LCBGbG9hdFBvaW50KDAuMjVmLCAwLjI1ZiksIEZsb2F0UG9pbnQoMi41
ZiwgMy4wZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgx
NiwgMTgpLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENo
aWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4w
ZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoNzYsIDc4KSwgZmFsc2Up
OworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50
LmdldCgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVU
cmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3Jt
KCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5z
Zm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhf
QUxNT1NUX0VRVUFMKGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFu
c2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklG
WV9NQVRSSVhfQUxNT1NUX0VRVUFMKGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5zZm9ybSwgZ3JhbmRD
aGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisKKyAgICAvLyBDYXNlIDU6IHNhbWUgYXMg
Q2FzZSA0LCBleGNlcHQgdGhhdCBjaGlsZCBkb2VzIHByZXNlcnZlIDNELCBzbyB0aGUgZ3JhbmRD
aGlsZCBzaG91bGQgcmVjZWl2ZSB0aGUgbm9uLWZsYXR0ZW5lZCBjb21wb3NpdGUgdHJhbnNmb3Jt
LgorICAgIC8vCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCks
IHBhcmVudExheWVyVHJhbnNmb3JtLCBwYXJlbnRTdWJsYXllck1hdHJpeCwgRmxvYXRQb2ludCgw
LjI1ZiwgMC4yNWYpLCBGbG9hdFBvaW50KDIuNWYsIDMuMGYpLCBJbnRTaXplKDEwLCAxMiksIGZh
bHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0
UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMTYsIDE4KSwgdHJ1ZSk7CisgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4w
ZiksIEludFNpemUoNzYsIDc4KSwgZmFsc2UpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NU
X0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRy
YW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3
VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBv
c2l0ZVRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Cit9CisK
K1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmds
ZVJlbmRlclN1cmZhY2UpCit7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRo
Rm9yY2VkRHJhd3NDb250ZW50PiBncmFuZENoaWxkID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21p
dW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KDApKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1
cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBjaGlsZC0+YWRkQ2hp
bGQoZ3JhbmRDaGlsZCk7CisKKyAgICAvLyBjaGlsZCBpcyBzZXQgdXAgc28gdGhhdCBhIG5ldyBy
ZW5kZXIgc3VyZmFjZSBzaG91bGQgYmUgY3JlYXRlZC4KKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgw
LjVmKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudExheWVyVHJhbnNmb3JtOworICAgIHBhcmVudExheWVy
VHJhbnNmb3JtLnNjYWxlM2QoMi4wLCAyLjAsIDEuMCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hvcjsKKyAgICBwYXJlbnRUcmFuc2xhdGlvblRvQW5j
aG9yLnRyYW5zbGF0ZSgyLjUsIDMuMCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50
U3VibGF5ZXJNYXRyaXg7CisgICAgcGFyZW50U3VibGF5ZXJNYXRyaXguc2NhbGUzZCgxMC4wLCAx
MC4wLCAzLjMpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFRyYW5zbGF0aW9uVG9D
ZW50ZXI7CisgICAgcGFyZW50VHJhbnNsYXRpb25Ub0NlbnRlci50cmFuc2xhdGUoNS4wLCA2LjAp
OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSA9IHBh
cmVudFRyYW5zbGF0aW9uVG9BbmNob3IgKiBwYXJlbnRMYXllclRyYW5zZm9ybSAqIHBhcmVudFRy
YW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpCisgICAgICAgICAgICAqIHBhcmVudFRyYW5zbGF0
aW9uVG9DZW50ZXIgKiBwYXJlbnRTdWJsYXllck1hdHJpeCAqIHBhcmVudFRyYW5zbGF0aW9uVG9D
ZW50ZXIuaW52ZXJzZSgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNsYXRp
b25Ub0NlbnRlcjsKKyAgICBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIudHJhbnNsYXRlKDguMCwg
OS4wKTsKKworICAgIC8vIENoaWxkJ3MgcmVuZGVyIHN1cmZhY2Ugc2hvdWxkIG5vdCBleGlzdCB5
ZXQuCisgICAgQVNTRVJUX0ZBTFNFKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIHBhcmVudExheWVyVHJhbnNm
b3JtLCBwYXJlbnRTdWJsYXllck1hdHJpeCwgRmxvYXRQb2ludCgwLjI1ZiwgMC4yNWYpLCBGbG9h
dFBvaW50KDIuNWYsIDMuMGYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKKyAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiks
IEludFNpemUoMTYsIDE4KSwgZmFsc2UpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpKTsKKworICAgIC8vIFJlbmRlciBzdXJmYWNl
IHNob3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBub3cuCisgICAgQVNTRVJUX1RSVUUoY2hpbGQtPnJl
bmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX0VRKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCksIGNo
aWxkLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkpOworCisgICAgLy8gVGhlIGNoaWxkIGxheWVyJ3Mg
ZHJhdyB0cmFuc2Zvcm0gc2hvdWxkIHJlZmVyIHRvIGl0cyBuZXcgcmVuZGVyIHN1cmZhY2U7IHRo
ZXkgb25seSBkaWZmZXIgYnkgYSB0cmFuc2xhdGlvbiB0byBjZW50ZXIuCisgICAgLy8gVGhlIHNj
cmVlbi1zcGFjZSB0cmFuc2Zvcm0sIGhvd2V2ZXIsIHNob3VsZCBzdGlsbCByZWZlciB0byB0aGUg
cm9vdC4KKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChjaGlsZFRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NU
X0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkpOworCisgICAgLy8gV2l0aG91dCBjbGlwcGluZyBhbmQgc2Npc3NvcmluZywgdGhlIG9y
aWdpbiB0cmFuc2Zvcm0gYW5kIGRyYXcgdHJhbnNmb3JtIChpbiB0aGlzIHBhcnRpY3VsYXIgY2Fz
ZSkgc2hvdWxkIGJlIHRoZSBzYW1lLgorICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBh
cmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+b3Jp
Z2luVHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENv
bXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+ZHJhd1RyYW5z
Zm9ybSgpKTsKKworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRy
YW5zZm9ybXNGb3JSZW5kZXJTdXJmYWNlSGllcmFyY2h5KQoreworICAgIC8vIFRoaXMgdGVzdCBj
cmVhdGVzIGEgbW9yZSBjb21wbGV4IHRyZWUgYW5kIHZlcmlmaWVzIGl0IGFsbCBhdCBvbmNlLiBU
aGlzIGNvdmVycyB0aGUgZm9sbG93aW5nIGNhc2VzOgorICAgIC8vICAgLSBsYXllcnMgdGhhdCBh
cmUgZGVzY3JpYmVkIHcuci50LiBhIHJlbmRlciBzdXJmYWNlOiBzaG91bGQgaGF2ZSBkcmF3IHRy
YW5zZm9ybXMgZGVzY3JpYmVkIHcuci50LiB0aGF0IHN1cmZhY2UKKyAgICAvLyAgIC0gQSByZW5k
ZXIgc3VyZmFjZSBkZXNjcmliZWQgdy5yLnQuIGFuIGFuY2VzdG9yIHJlbmRlciBzdXJmYWNlOiBz
aG91bGQgaGF2ZSBhIGRyYXcgdHJhbnNmb3JtIGRlc2NyaWJlZCB3LnIudC4gdGhhdCBhbmNlc3Rv
ciBzdXJmYWNlCisgICAgLy8gICAtIFNhbml0eSBjaGVjayBvbiByZWN1cnNpb246IHZlcmlmeSB0
cmFuc2Zvcm1zIG9mIGxheWVycyBkZXNjcmliZWQgdy5yLnQuIGEgcmVuZGVyIHN1cmZhY2UgdGhh
dCBpcyBkZXNjcmliZWQgdy5yLnQuIGFuIGFuY2VzdG9yIHJlbmRlciBzdXJmYWNlLgorICAgIC8v
ICAgLSB2ZXJpZnlpbmcgdGhhdCBlYWNoIGxheWVyIGhhcyBhIHJlZmVyZW5jZSB0byB0aGUgY29y
cmVjdCByZW5kZXJTdXJmYWNlIGFuZCB0YXJnZXRSZW5kZXJTdXJmYWNlIHZhbHVlcy4KKworICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHJlbmRlclN1cmZhY2UxID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiByZW5kZXJTdXJmYWNlMiA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hp
bGRPZlJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IGNoaWxkT2ZSUzEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IGNoaWxkT2ZSUzIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGRPZlJvb3QgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250
ZW50PiBncmFuZENoaWxkT2ZSUzEgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQoMCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERy
YXdzQ29udGVudD4gZ3JhbmRDaGlsZE9mUlMyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1X
aXRoRm9yY2VkRHJhd3NDb250ZW50KDApKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZh
Y2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKHJlbmRlclN1cmZhY2UxKTsKKyAgICBwYXJlbnQt
PmFkZENoaWxkKGNoaWxkT2ZSb290KTsKKyAgICByZW5kZXJTdXJmYWNlMS0+YWRkQ2hpbGQoY2hp
bGRPZlJTMSk7CisgICAgcmVuZGVyU3VyZmFjZTEtPmFkZENoaWxkKHJlbmRlclN1cmZhY2UyKTsK
KyAgICByZW5kZXJTdXJmYWNlMi0+YWRkQ2hpbGQoY2hpbGRPZlJTMik7CisgICAgY2hpbGRPZlJv
b3QtPmFkZENoaWxkKGdyYW5kQ2hpbGRPZlJvb3QpOworICAgIGNoaWxkT2ZSUzEtPmFkZENoaWxk
KGdyYW5kQ2hpbGRPZlJTMSk7CisgICAgY2hpbGRPZlJTMi0+YWRkQ2hpbGQoZ3JhbmRDaGlsZE9m
UlMyKTsKKworICAgIC8vIEluIGNvbWJpbmF0aW9uIHdpdGggZGVzY2VuZGFudERyYXdzQ29udGVu
dCwgb3BhY2l0eSAhPSAxIGZvcmNlcyB0aGUgbGF5ZXIgdG8gaGF2ZSBhIG5ldyByZW5kZXJTdXJm
YWNlLgorICAgIHJlbmRlclN1cmZhY2UxLT5zZXRPcGFjaXR5KDAuNWYpOworICAgIHJlbmRlclN1
cmZhY2UyLT5zZXRPcGFjaXR5KDAuMzNmKTsKKworICAgIC8vIEFsbCBsYXllcnMgaW4gdGhlIHRy
ZWUgYXJlIGluaXRpYWxpemVkIHdpdGggYW5jaG9yIGFuZCBwb3NpdGlvbiBsb2NhdGVkIGF0IHpl
cm8sIGFuZCBhIHNpemUgb2YgKDEwLDEwKS4KKyAgICAvLyBtYXRyaXggIkEiIGlzIHRoZSBjb21w
b3NpdGUgbGF5ZXIgdHJhbnNmb3JtIHVzZWQgaW4gYWxsIGxheWVycywgY2VudGVyZWQgYWJvdXQg
dGhlIGFuY2hvciBwb2ludAorICAgIC8vIG1hdHJpeCAiQiIgaXMgdGhlIHN1YmxheWVyIHRyYW5z
Zm9ybSB1c2VkIGluIGFsbCBsYXllcnMsIGNlbnRlcmVkIGFib3V0IHRoZSBjZW50ZXIgcG9zaXRp
b24gb2YgdGhlIGxheWVyLgorICAgIC8vCisgICAgLy8geCBjb21wb25lbnQgdGVzdHMgdGhhdCBs
YXllclRyYW5zZm9ybSBhbmQgc3VibGF5ZXJUcmFuc2Zvcm0gYXJlIGRvbmUgaW4gdGhlIHJpZ2h0
IG9yZGVyICh0cmFuc2xhdGlvbiBhbmQgc2NhbGUgYXJlIG5vbmNvbW11dGF0aXZlKS4KKyAgICAv
LyB5IGNvbXBvbmVudCBoYXMgYSB0cmFuc2xhdGlvbiBieSAxLjAgZm9yIGV2ZXJ5IGFuY2VzdG9y
LCB3aGljaCBpbmRpY2F0ZXMgdGhlICJkZXB0aCIgb2YgdGhlIGxheWVyIGluIHRoZSBoaWVyYXJj
aHkuCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNsYXRpb25Ub0FuY2hvcjsKKyAgICB0
cmFuc2xhdGlvblRvQW5jaG9yLnRyYW5zbGF0ZSgyLjUsIDAuMCk7CisgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggdHJhbnNsYXRpb25Ub0NlbnRlcjsKKyAgICB0cmFuc2xhdGlvblRvQ2VudGVyLnRy
YW5zbGF0ZSg1LjAsIDUuMCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zv
cm07CisgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDEuMCwgMS4wKTsKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBzdWJsYXllclRyYW5zZm9ybTsKKyAgICBzdWJsYXllclRyYW5zZm9ybS5z
Y2FsZTNkKDEwLjAsIDEuMCwgMS4wKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IEEgPSB0
cmFuc2xhdGlvblRvQW5jaG9yICogbGF5ZXJUcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQW5jaG9y
LmludmVyc2UoKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBCID0gdHJhbnNsYXRpb25Ub0Nl
bnRlciAqIHN1YmxheWVyVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0NlbnRlci5pbnZlcnNlKCk7
CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgbGF5ZXJU
cmFuc2Zvcm0sIHN1YmxheWVyVHJhbnNmb3JtLCBGbG9hdFBvaW50KDAuMjVmLCAwLjBmKSwgRmxv
YXRQb2ludCgyLjVmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyZW5kZXJTdXJmYWNlMS5nZXQoKSwgbGF5ZXJUcmFuc2Zv
cm0sIHN1YmxheWVyVHJhbnNmb3JtLCBGbG9hdFBvaW50KDAuMjVmLCAwLjBmKSwgRmxvYXRQb2lu
dCgyLjVmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhyZW5kZXJTdXJmYWNlMi5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIHN1
YmxheWVyVHJhbnNmb3JtLCBGbG9hdFBvaW50KDAuMjVmLCAwLjBmKSwgRmxvYXRQb2ludCgyLjVm
LCAwLjBmKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhjaGlsZE9mUm9vdC5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIHN1YmxheWVyVHJh
bnNmb3JtLCBGbG9hdFBvaW50KDAuMjVmLCAwLjBmKSwgRmxvYXRQb2ludCgyLjVmLCAwLjBmKSwg
SW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhjaGlsZE9mUlMxLmdldCgpLCBsYXllclRyYW5zZm9ybSwgc3VibGF5ZXJUcmFuc2Zvcm0sIEZs
b2F0UG9pbnQoMC4yNWYsIDAuMGYpLCBGbG9hdFBvaW50KDIuNWYsIDAuMGYpLCBJbnRTaXplKDEw
LCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkT2ZS
UzIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBzdWJsYXllclRyYW5zZm9ybSwgRmxvYXRQb2ludCgw
LjI1ZiwgMC4wZiksIEZsb2F0UG9pbnQoMi41ZiwgMC4wZiksIEludFNpemUoMTAsIDEwKSwgZmFs
c2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZE9mUm9vdC5n
ZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIHN1YmxheWVyVHJhbnNmb3JtLCBGbG9hdFBvaW50KDAuMjVm
LCAwLjBmKSwgRmxvYXRQb2ludCgyLjVmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7
CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkT2ZSUzEuZ2V0KCks
IGxheWVyVHJhbnNmb3JtLCBzdWJsYXllclRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLjI1ZiwgMC4w
ZiksIEZsb2F0UG9pbnQoMi41ZiwgMC4wZiksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOworICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZE9mUlMyLmdldCgpLCBsYXll
clRyYW5zZm9ybSwgc3VibGF5ZXJUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMC4yNWYsIDAuMGYpLCBG
bG9hdFBvaW50KDIuNWYsIDAuMGYpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKworICAgIGV4
ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpKTsK
KworICAgIC8vIE9ubHkgbGF5ZXJzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCByZW5kZXIgc3Vy
ZmFjZXMgc2hvdWxkIGhhdmUgYW4gYWN0dWFsIHJlbmRlclN1cmZhY2UoKSB2YWx1ZS4KKyAgICAv
LworICAgIEFTU0VSVF9UUlVFKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRf
RkFMU0UoY2hpbGRPZlJvb3QtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGdy
YW5kQ2hpbGRPZlJvb3QtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBBU1NFUlRfVFJVRShyZW5k
ZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfRkFMU0UoY2hpbGRPZlJT
MS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfRkFMU0UoZ3JhbmRDaGlsZE9mUlMxLT5y
ZW5kZXJTdXJmYWNlKCkpOworCisgICAgQVNTRVJUX1RSVUUocmVuZGVyU3VyZmFjZTItPnJlbmRl
clN1cmZhY2UoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGNoaWxkT2ZSUzItPnJlbmRlclN1cmZhY2Uo
KSk7CisgICAgQVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGRPZlJTMi0+cmVuZGVyU3VyZmFjZSgpKTsK
KworICAgIC8vIFZlcmlmeSBhbGwgdGFyZ2V0UmVuZGVyU3VyZmFjZSBhY2Nlc3NvcnMKKyAgICAv
LworICAgIEVYUEVDVF9FUShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSwgcGFyZW50LT50YXJnZXRS
ZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9FUShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSwg
Y2hpbGRPZlJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CisgICAgRVhQRUNUX0VRKHBhcmVu
dC0+cmVuZGVyU3VyZmFjZSgpLCBncmFuZENoaWxkT2ZSb290LT50YXJnZXRSZW5kZXJTdXJmYWNl
KCkpOworCisgICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2UxLT5yZW5kZXJTdXJmYWNlKCksIHJl
bmRlclN1cmZhY2UxLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9FUShyZW5k
ZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpLCBjaGlsZE9mUlMxLT50YXJnZXRSZW5kZXJTdXJm
YWNlKCkpOworICAgIEVYUEVDVF9FUShyZW5kZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpLCBn
cmFuZENoaWxkT2ZSUzEtPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfRVEo
cmVuZGVyU3VyZmFjZTItPnJlbmRlclN1cmZhY2UoKSwgcmVuZGVyU3VyZmFjZTItPnRhcmdldFJl
bmRlclN1cmZhY2UoKSk7CisgICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2UyLT5yZW5kZXJTdXJm
YWNlKCksIGNoaWxkT2ZSUzItPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CisgICAgRVhQRUNUX0VR
KHJlbmRlclN1cmZhY2UyLT5yZW5kZXJTdXJmYWNlKCksIGdyYW5kQ2hpbGRPZlJTMi0+dGFyZ2V0
UmVuZGVyU3VyZmFjZSgpKTsKKyAgICAKKyAgICAvLyBWZXJpZnkgbGF5ZXIgZHJhdyB0cmFuc2Zv
cm1zCisgICAgLy8gIG5vdGUgdGhhdCBkcmF3IHRyYW5zZm9ybXMgYXJlIGRlc2NyaWJlZCB3aXRo
IHJlc3BlY3QgdG8gdGhlIG5lYXJlc3QgYW5jZXN0b3IgcmVuZGVyIHN1cmZhY2UKKyAgICAvLyAg
YnV0IHNjcmVlbiBzcGFjZSB0cmFuc2Zvcm1zIGFyZSBkZXNjcmliZWQgd2l0aCByZXNwZWN0IHRv
IHRoZSByb290LgorICAgIC8vCisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIHRy
YW5zbGF0aW9uVG9DZW50ZXIsIHBhcmVudC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllf
TUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBjaGls
ZE9mUm9vdC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVB
TChBICogQiAqIEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRPZlJv
b3QtPmRyYXdUcmFuc2Zvcm0oKSk7CisKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTCh0
cmFuc2xhdGlvblRvQ2VudGVyLCByZW5kZXJTdXJmYWNlMS0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAg
ICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIs
IGNoaWxkT2ZSUzEtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1Rf
RVFVQUwoQiAqIEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRPZlJT
MS0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICAKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVB
TCh0cmFuc2xhdGlvblRvQ2VudGVyLCByZW5kZXJTdXJmYWNlMi0+ZHJhd1RyYW5zZm9ybSgpKTsK
KyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50
ZXIsIGNoaWxkT2ZSUzItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwoQiAqIEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRP
ZlJTMi0+ZHJhd1RyYW5zZm9ybSgpKTsKKworICAgIC8vIFZlcmlmeSBsYXllciBzY3JlZW4tc3Bh
Y2UgdHJhbnNmb3JtcworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEsIHBhcmVudC0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
QSAqIEIgKiBBLCBjaGlsZE9mUm9vdC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgVkVS
SUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICogQiAqIEEsIGdyYW5kQ2hpbGRPZlJv
b3QtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1Rf
RVFVQUwoQSAqIEIgKiBBLCByZW5kZXJTdXJmYWNlMS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7
CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICogQiAqIEEsIGNoaWxk
T2ZSUzEtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NU
X0VRVUFMKEEgKiBCICogQSAqIEIgKiBBICogQiAqIEEsIGdyYW5kQ2hpbGRPZlJTMS0+c2NyZWVu
U3BhY2VUcmFuc2Zvcm0oKSk7CisKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICog
QiAqIEEgKiBCICogQSwgcmVuZGVyU3VyZmFjZTItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwor
ICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIEIgKiBBICogQiAqIEEs
IGNoaWxkT2ZSUzItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhf
QUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIEIgKiBBICogQiAqIEEgKiBCICogQSwgZ3JhbmRDaGls
ZE9mUlMyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKworICAgIC8vIFZlcmlmeSByZW5kZXIg
c3VyZmFjZSB0cmFuc2Zvcm1zLgorICAgIC8vCisgICAgLy8gT3JpZ2luIHRyYW5zZm9ybSBvZiBy
ZW5kZXIgc3VyZmFjZSAxIGlzIGRlc2NyaWJlZCB3aXRoIHJlc3BlY3QgdG8gcm9vdC4KKyAgICBW
RVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEsIHJlbmRlclN1cmZhY2UxLT5yZW5k
ZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpKTsKKyAgICAvLyBPcmlnaW4gdHJhbnNmb3Jt
IG9mIHJlbmRlciBzdXJmYWNlIDIgaXMgZGVzY3JpYmVkIHdpdGggcmVzcGVjdCB0byByZW5kZXIg
c3VyZmFjZSAyLgorICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEIgKiBBLCByZW5kZXJT
dXJmYWNlMi0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKSk7CisKKyAgICAvLyBT
YW5pdHkgY2hlY2suIElmIHRoZXNlIGZhaWwgdGhlcmUgaXMgcHJvYmFibHkgYSBidWcgaW4gdGhl
IHRlc3QgaXRzZWxmLgorICAgIC8vIEl0IGlzIGV4cGVjdGVkIHRoYXQgd2UgY29ycmVjdGx5IHNl
dCB1cCB0cmFuc2Zvcm1zIHNvIHRoYXQgdGhlIHktY29tcG9uZW50IG9mIHRoZSBzY3JlZW4tc3Bh
Y2UgdHJhbnNmb3JtCisgICAgLy8gZW5jb2RlcyB0aGUgImRlcHRoIiBvZiB0aGUgbGF5ZXIgaW4g
dGhlIHRyZWUuCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgcGFyZW50LT5zY3JlZW5TcGFjZVRy
YW5zZm9ybSgpLm00MigpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMi4wLCBjaGlsZE9mUm9vdC0+
c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tNDIoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMuMCwg
Z3JhbmRDaGlsZE9mUm9vdC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tNDIoKSk7CisgICAgCisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDIuMCwgcmVuZGVyU3VyZmFjZTEtPnNjcmVlblNwYWNlVHJhbnNm
b3JtKCkubTQyKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzLjAsIGNoaWxkT2ZSUzEtPnNjcmVl
blNwYWNlVHJhbnNmb3JtKCkubTQyKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LjAsIGdyYW5k
Q2hpbGRPZlJTMS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tNDIoKSk7CisKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMy4wLCByZW5kZXJTdXJmYWNlMi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tNDIo
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQuMCwgY2hpbGRPZlJTMi0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKS5tNDIoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDUuMCwgZ3JhbmRDaGlsZE9mUlMy
LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLm00MigpKTsKK30KKworLy8gRklYTUU6CisvLyBjb250
aW51ZSB3b3JraW5nIG9uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
ODk0MgorLy8gIC0gYWRkIGEgdGVzdCB0byB2ZXJpZnkgY2xpcHBpbmcgdGhhdCBjaGFuZ2VzIHRo
ZSAiY2VudGVyIHBvaW50IgorLy8gIC0gYWRkIGEgY2FzZSB0aGF0IGNoZWNrcyBpZiBhIHJlbmRl
ciBzdXJmYWNlJ3MgZHJhd1RyYW5zZm9ybSBpcyBjb21wdXRlZCBjb3JyZWN0bHkuIEZvciB0aGUg
Z2VuZXJhbCBjYXNlLCBhbmQgZm9yIHNwZWNpYWwgY2FzZXMgd2hlbiBjbGlwcGluZy9zY2lzc29y
aW5nLgorLy8gIC0gYWRkIGEgY2FzZSB0aGF0IGNoZWNrcyBpZiBhIHJlbmRlciBzdXJmYWNlJ3Mg
cmVwbGljYVRyYW5zZm9ybSBpcyBjb21wdXRlZCBjb3JyZWN0bHkuCisvLyAgLSB0ZXN0IGFsbCB0
aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCByZW5kZXIgc3VyZmFjZXMgYXJlIGNyZWF0ZWQKKy8v
ICAtIGlmIHBvc3NpYmxlLCB0ZXN0IGFsbCBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHJlbmRlciBz
dXJmYWNlcyBhcmUgbm90IGNyZWF0ZWQKKy8vICAtIHZlcmlmeSB0aGF0IHRoZSBsYXllciBsaXN0
cyBvZiByZW5kZXIgc3VyZmFjZXMgYXJlIGNvcnJlY3QsIHZlcmlmeSB0aGF0ICJ0YXJnZXRSZW5k
ZXJTdXJmYWNlIiB2YWx1ZXMgZm9yIGVhY2ggbGF5ZXIgYXJlIGNvcnJlY3QuCisvLyAgLSB0ZXN0
IHRoZSBjb21wdXRhdGlvbiBvZiBzY2lzc29yIHJlY3RzIGFuZCBjb250ZW50IHJlY3RzCisvLyAg
LSB0ZXN0IHRoZSBzcGVjaWFsIGNhc2VzIGZvciBtYXNrIGxheWVycyBhbmQgcmVwbGljYSBsYXll
cnMKKy8vICAtIHRlc3QgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiBDQ0xheWVyVHJlZUhvc3RDb21t
b24KKy8vCisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110028</attachid>
            <date>2011-10-06 14:44:28 -0700</date>
            <delta_ts>2011-10-07 10:49:04 -0700</delta_ts>
            <desc>fixed a few more incorrect comments</desc>
            <filename>bug-69197-20111006144427.patch</filename>
            <type>text/plain</type>
            <size>34317</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY4MTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
ZWZhMzFlYzdmNGI5OTVhNjdhZWNiY2ZjMzdjMjg3OWY5NjdkN2E0YS4uOTJiYzc5MTAwZmMxNmY0
YmViNGRhMWM0OGYwYzNlNjYwMDFjYjBiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMiBAQAorMjAxMS0xMC0wMyAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBGaXJzdCByb3VuZCBvZiB1bml0IHRlc3RzIGZvciBDQ0xheWVy
VHJlZUhvc3RDb21tb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02OTE5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcm91bmQgb2YgdGVzdHMgZm9jdXNlcyBvbiB2ZXJpZnlpbmcgdGhlIGNvbXB1
dGF0aW9uIG9mIG1hdHJpeCB0cmFuc2Zvcm1zCisgICAgICAgIGluIGNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAq
IHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OnNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
ZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpyZW1vdmUzRENvbXBvbmVudE9mTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50OjpMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudDo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgor
CiAyMDExLTEwLTA2ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTY3OTEuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQppbmRleCA3ZDVhZjZjMDMwYjQ0ZTM4ZDUzMTE5MWE2MTdiYzkzMjdkMDA1
NGIwLi40YjNhODVjY2ZkOWQ5MzZiMzU1ZTY4MWMzMzY2Y2NjZGNkYjE4MjliIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTU1LDYgKzU1LDcgQEAKICAgICAgICAgICAgICd0ZXN0
cy9BcmVuYVRlc3RIZWxwZXJzLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0Fzc29jaWF0ZWRVUkxM
b2FkZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclNvcnRlclRlc3QuY3Bw
JywKKyAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NTY2hlZHVsZXJUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NDE3
ZjFlZjdhMDcyN2M2OTI2NTk3ZjM0ZjQyNjI4ZDJhY2Y0ZTE0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNw
cApAQCAtMCwwICsxLDUwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCisKKyNpbmNsdWRlICJMYXll
ckNocm9taXVtLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKworI2luY2x1
ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworLy8KKy8vIE5P
VEUgQ0FSRUZVTExZOgorLy8KKy8vIEluIHRoZXNlIHRlc3RzLCB0aGUgcmVsYXRpb25zaGlwIGJl
dHdlZW4gYW5jaG9yIHBvaW50LCBwb3NpdGlvbiwgYW5kIGJvdW5kcyBpcyBub3QgaW50dWl0aXZl
LiBUaGUgZm9sbG93aW5nIHR3byBwb2ludHMKKy8vIHNob3VsZCBoZWxwIGNsYXJpZnkgdGhlIGNv
ZGU6CisvLworLy8gIDEuIEFzIGEgRmxvYXRQb2ludCBvYmplY3QsIGFuY2hvciBwb2ludCBpcyBz
cGVjaWZpZWQgaW4gInVuaXQgbGF5ZXIgc3BhY2UiLCB3aGVyZSB0aGUgYm91bmRzIG9mIHRoZSBs
YXllciBtYXAgdG8gWzAsMV0uCisvLyAgICAgSG93ZXZlciwgYXMgYSBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBvYmplY3QsIHRoZSB0cmFuc2Zvcm0gdG8gdGhlIGFuY2hvciBwb2ludCBpcyBzcGVjaWZp
ZWQgaW4gInBpeGVsIGxheWVyIHNwYWNlIiwgd2hlcmUKKy8vICAgICB0aGUgYm91bmRzIG9mIHRo
ZSBsYXllciBtYXAgdG8gW2JvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCldLgorLy8KKy8v
ICAyLiBMYXllckNocm9taXVtOjpwb3NpdGlvbiBpcyBhbHNvIGF3a3dhcmQgLSBpdCBpcyBhY3R1
YWxseSB0aGUgc3VtIG9mIGFuY2hvclBvaW50IChpbiBwaXhlbCBzcGFjZSkgYW5kIGFjdHVhbCBw
b3NpdGlvbi4gQmVjYXVzZQorLy8gICAgIHRoaXMsIHRoZSB2YWx1ZSBvZiBMYXllckNocm9taXVt
Ojpwb3NpdGlvbigpIGNoYW5nZXMsIGV2ZW4gdGhvdWdoIHRoZSBsYXllciBpcyBub3QgYWN0dWFs
bHkgbG9jYXRlZCBpbiBhIGRpZmZlcmVudCBwb3NpdGlvbi4KKy8vICAgICBXaGVuIHdlIGluaXRp
YWxpemUgbGF5ZXJzIGZvciB0ZXN0aW5nIGhlcmUsIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGF0
IHVuaW50dXRpdmUgcG9zaXRpb24gdmFsdWUuCisvLworLy8gICAgIFRvIGNvbXB1dGUgYSBtb3Jl
IGludHVpdGl2ZSB2ZXJzaW9uIG9mIHBvc2l0aW9uLCB5b3UgY2FuIGRvIHNvbWV0aGluZyBsaWtl
OgorLy8gICAgICAgIGludHVpdGl2ZUxheWVyUG9zaXRpb24ueCA9ICBwb3NpdGlvbi54IC0gKGFu
Y2hvclBvaW50LnggKiBib3VuZHMud2lkdGgpCisvLyAgICAgICAgaW50dWl0aXZlTGF5ZXJQb3Np
dGlvbi55ID0gIHBvc2l0aW9uLnkgLSAoYW5jaG9yUG9pbnQueSAqIGJvdW5kcy5oZWlnaHQpCisv
LworLy8gICAgIFRoaXMgImludHVpdGl2ZSBwb3NpdGlvbiIgaXMgbW9yZSBkaXJlY3RseSByZWxh
dGVkIHRvIHRoZSBleHBlY3RlZCBzZXF1ZW5jZSBvZiB0cmFuc2Zvcm1zLgorLy8KKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKKy8vIFRoaXMgaXMgYSBtYWNybyBp
bnN0ZWFkIG9mIGEgZnVuY3Rpb24gc28gdGhhdCB0aGUgZ3Rlc3QgZXJyb3JzIGNhbiBnaXZlIHVz
IHVzZWZ1bCBsaW5lIG51bWJlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0ZXN0LgorLy8gRXZlbiB0
aG91Z2ggVHJhbnNmb3JtYXRpb25NYXRyaXggdmFsdWVzIGFyZSBkb3VibGUsIHRoZXJlIGFyZSBt
YW55IG90aGVyIGZsb2F0aW5nLXBvaW50IHZhbHVlcyB1c2VkLCBhbmQgc28gd2UKKy8vIG9ubHkg
ZXhwZWN0IHRoZW0gdG8gYmUgYWNjdXJhdGUgdXAgdG8gZmxvYXRpbmctcG9pbnQgcHJlY2lzaW9u
LgorI2RlZmluZSBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChleHBlY3RlZCwgYWN0dWFsKSAg
ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTExKCksIChhY3R1YWwpLm0xMSgp
KTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTIoKSwgKGFjdHVhbCkubTEy
KCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0xMygpLCAoYWN0dWFsKS5t
MTMoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTE0KCksIChhY3R1YWwp
Lm0xNCgpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMjEoKSwgKGFjdHVh
bCkubTIxKCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yMigpLCAoYWN0
dWFsKS5tMjIoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTIzKCksIChh
Y3R1YWwpLm0yMygpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMjQoKSwg
KGFjdHVhbCkubTI0KCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0zMSgp
LCAoYWN0dWFsKS5tMzEoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTMy
KCksIChhY3R1YWwpLm0zMigpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5t
MzMoKSwgKGFjdHVhbCkubTMzKCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQp
Lm0zNCgpLCAoYWN0dWFsKS5tMzQoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3Rl
ZCkubTQxKCksIChhY3R1YWwpLm00MSgpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVj
dGVkKS5tNDIoKSwgKGFjdHVhbCkubTQyKCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhw
ZWN0ZWQpLm00MygpLCAoYWN0dWFsKS5tNDMoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChl
eHBlY3RlZCkubTQ0KCksIChhY3R1YWwpLm00NCgpKQorCit2b2lkIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcoTGF5ZXJDaHJvbWl1bSAqIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc3VibGF5ZXJUcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRp
b24sIGNvbnN0IEludFNpemUmIGJvdW5kcywgYm9vbCBwcmVzZXJ2ZXMzRCkKK3sKKyAgICBsYXll
ci0+c2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7CisgICAgbGF5ZXItPnNldFN1YmxheWVyVHJhbnNm
b3JtKHN1YmxheWVyVHJhbnNmb3JtKTsKKyAgICBsYXllci0+c2V0QW5jaG9yUG9pbnQoYW5jaG9y
KTsKKyAgICBsYXllci0+c2V0UG9zaXRpb24ocG9zaXRpb24pOworICAgIGxheWVyLT5zZXRCb3Vu
ZHMoYm91bmRzKTsKKyAgICBsYXllci0+c2V0UHJlc2VydmVzM0QocHJlc2VydmVzM0QpOworfQor
Cit2b2lkIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5ZXJD
aHJvbWl1bSAqIHJvb3RMYXllcikKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0
eU1hdHJpeDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlSZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1t
eUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShy
b290TGF5ZXIsIHJvb3RMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBkdW1t
eVJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVT
aXplKTsKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXggcmVtb3ZlM0RDb21wb25lbnRPZk1hdHJp
eChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0KQoreworICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHJldCA9IG1hdDsKKyAgICByZXQuc2V0TTEzKDApOworICAgIHJldC5zZXRNMjMoMCk7
CisgICAgcmV0LnNldE0zMSgwKTsKKyAgICByZXQuc2V0TTMyKDApOworICAgIHJldC5zZXRNMzMo
MSk7CisgICAgcmV0LnNldE0zNCgwKTsKKyAgICByZXQuc2V0TTQzKDApOworICAgIHJldHVybiBy
ZXQ7Cit9CisKK2NsYXNzIExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50IDogcHVi
bGljIExheWVyQ2hyb21pdW0geworcHVibGljOgorICAgIGV4cGxpY2l0IExheWVyQ2hyb21pdW1X
aXRoRm9yY2VkRHJhd3NDb250ZW50KENDTGF5ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpCisgICAgICAg
IDogTGF5ZXJDaHJvbWl1bShkZWxlZ2F0ZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBi
b29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KK307CisKK1RFU1QoQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0Zvck5vT3BMYXllcikKK3sK
KyAgICAvLyBTYW5pdHkgY2hlY2s6IEZvciBsYXllcnMgcG9zaXRpb25lZCBhdCB6ZXJvLCB3aXRo
IHplcm8gc2l6ZSwKKyAgICAvLyBhbmQgd2l0aCBpZGVudGl0eSB0cmFuc2Zvcm1zLCB0aGVuIHRo
ZSBkcmF3VHJhbnNmb3JtLAorICAgIC8vIHNjcmVlblNwYWNlVHJhbnNmb3JtLCBhbmQgdGhlIGhp
ZXJhcmNoeSBwYXNzZWQgb24gdG8gY2hpbGRyZW4KKyAgICAvLyBsYXllcnMgc2hvdWxkIGFsc28g
YmUgaWRlbnRpdHkgdHJhbnNmb3Jtcy4KKworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJl
bnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBncmFuZENoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIHBhcmVudC0+
Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpOworICAg
IGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGlkZW50aXR5TWF0cml4OworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwg
MC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMCwgMCksIGZhbHNlKTsKKyAg
ICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4w
ZiwgMC4wZiksIEludFNpemUoMCwgMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6
ZSgwLCAwKSwgZmFsc2UpOworCisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5k
VmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkpOworCisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFV
QUwoaWRlbnRpdHlNYXRyaXgsIHBhcmVudC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllf
TUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgcGFyZW50LT5zY3JlZW5TcGFjZVRy
YW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJp
eCwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFV
QUwoaWRlbnRpdHlNYXRyaXgsIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBW
RVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGlsZC0+ZHJh
d1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1h
dHJpeCwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Cit9CisKK1RFU1QoQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVyKQor
eworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBsYXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBsYXll
ci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworCisgICAgLy8gQ2FzZSAxOiBzZXR0aW5nIHRoZSBz
dWJsYXllciB0cmFuc2Zvcm0gc2hvdWxkIG5vdCBhZmZlY3QgdGhpcyBsYXllcidzIGRyYXcgdHJh
bnNmb3JtIG9yIHNjcmVlbi1zcGFjZSB0cmFuc2Zvcm0uCisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggYXJiaXRyYXJ5VHJhbnNsYXRpb247CisgICAgYXJiaXRyYXJ5VHJhbnNsYXRpb24udHJhbnNs
YXRlKDEwLjAsIDIwLjApOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBhcmJpdHJhcnlUcmFuc2xhdGlvbiwgRmxvYXRQb2ludCgw
LjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgwLCAwKSwgZmFsc2Up
OworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5ZXIu
Z2V0KCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBs
YXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChp
ZGVudGl0eU1hdHJpeCwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisgICAgLy8g
Q2FzZSAyOiBzZXR0aW5nIHRoZSBib3VuZHMgb2YgdGhlIGxheWVyIHNob3VsZCByZXN1bHQgaW4g
YSBkcmF3IHRyYW5zZm9ybSB0aGF0IHRyYW5zbGF0ZXMgdG8gaGFsZiB0aGUgd2lkdGggYW5kIGhl
aWdodC4KKyAgICAvLyAgICAgICAgIFRoZSBzY3JlZW4tc3BhY2UgdHJhbnNmb3JtIHNob3VsZCBy
ZW1haW4gYXMgdGhlIGlkZW50aXR5LCBiZWNhdXNlIGl0IGRvZXMgbm90IGRlYWwgd2l0aCB0cmFu
c2Zvcm1pbmcgdG8vZnJvbSB0aGUgY2VudGVyIG9mIHRoZSBsYXllci4KKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCB0cmFuc2xhdGlvblRvQ2VudGVyOworICAgIHRyYW5zbGF0aW9uVG9DZW50ZXIu
dHJhbnNsYXRlKDUuMCwgNi4wKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxh
eWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4w
ZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2Up
OworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5ZXIu
Z2V0KCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHRyYW5zbGF0aW9uVG9DZW50
ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VR
VUFMKGlkZW50aXR5TWF0cml4LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisKKyAg
ICAvLyBDYXNlIDM6IFRoZSBhbmNob3IgcG9pbnQgYnkgaXRzZWxmICh3aXRob3V0IGEgbGF5ZXIg
dHJhbnNmb3JtKSBzaG91bGQgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIHRyYW5zZm9ybXMuCisgICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMjVmLCAwLjI1ZiksIEZsb2F0UG9pbnQoMi41
ZiwgMy4wZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5ZXIuZ2V0KCkpOworICAgIFZFUklGWV9NQVRS
SVhfQUxNT1NUX0VRVUFMKHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3Jt
KCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBsYXll
ci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisKKyAgICAvLyBDYXNlIDQ6IEEgY2hhbmdlIGlu
ICJhY3R1YWwiIHBvc2l0aW9uIGFmZmVjdHMgYm90aCB0aGUgZHJhdyB0cmFuc2Zvcm0gYW5kIHNj
cmVlbiBzcGFjZSB0cmFuc2Zvcm0uCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcG9zaXRpb25U
cmFuc2Zvcm07CisgICAgcG9zaXRpb25UcmFuc2Zvcm0udHJhbnNsYXRlKDAuMCwgMS4yKTsKKyAg
ICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQb2ludCgy
LjVmLCA0LjJmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXllci5nZXQoKSk7CisgICAgVkVSSUZZX01B
VFJJWF9BTE1PU1RfRVFVQUwocG9zaXRpb25UcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQ2VudGVy
LCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVB
TChwb3NpdGlvblRyYW5zZm9ybSwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisg
ICAgLy8gQ2FzZSA1OiBJbiB0aGUgY29ycmVjdCBzZXF1ZW5jZSBvZiB0cmFuc2Zvcm1zLCB0aGUg
bGF5ZXIgdHJhbnNmb3JtIHNob3VsZCBwcmUtbXVsdGlwbHkgdGhlIHRyYW5zbGF0aW9uVG9DZW50
ZXIuIFRoaXMgaXMgZWFzaWx5IHRlc3RlZCBieQorICAgIC8vICAgICAgICAgdXNpbmcgYSBzY2Fs
ZSB0cmFuc2Zvcm0sIGJlY2F1c2Ugc2NhbGUgYW5kIHRyYW5zbGF0aW9uIGFyZSBub3QgY29tbXV0
YXRpdmUuCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5
ZXJUcmFuc2Zvcm0uc2NhbGUzZCgyLjAsIDIuMCwgMS4wKTsKKyAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBsYXllclRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgs
IEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUo
MTAsIDEyKSwgZmFsc2UpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkobGF5ZXIuZ2V0KCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGxh
eWVyVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0o
KSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwobGF5ZXJUcmFuc2Zvcm0sIGxheWVy
LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKworICAgIC8vIENhc2UgNjogVGhlIGxheWVyIHRy
YW5zZm9ybSBzaG91bGQgb2NjdXIgd2l0aCByZXNwZWN0IHRvIHRoZSBhbmNob3IgcG9pbnQuCisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNsYXRpb25Ub0FuY2hvcjsKKyAgICB0cmFuc2xh
dGlvblRvQW5jaG9yLnRyYW5zbGF0ZSg1LjAsIDAuMCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggZXhwZWN0ZWRSZXN1bHQgPSB0cmFuc2xhdGlvblRvQW5jaG9yICogbGF5ZXJUcmFuc2Zvcm0g
KiB0cmFuc2xhdGlvblRvQW5jaG9yLmludmVyc2UoKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKGxheWVyLmdldCgpLCBsYXllclRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMC41ZiwgMC4wZiksIEZsb2F0UG9pbnQoNS4wZiwgMC4wZiksIEludFNpemUoMTAs
IDEyKSwgZmFsc2UpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2li
aWxpdHkobGF5ZXIuZ2V0KCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGV4cGVj
dGVkUmVzdWx0ICogdHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7
CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZXhwZWN0ZWRSZXN1bHQsIGxheWVyLT5z
Y3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKworICAgIC8vIENhc2UgNzogVmVyaWZ5IHRoYXQgcG9z
aXRpb24gcHJlLW11bHRpcGxpZXMgdGhlIGxheWVyIHRyYW5zZm9ybS4KKyAgICAvLyAgICAgICAg
IFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5k
VmlzaWJpbGl0eSBkb2VzIHRoaXMgaW1wbGljaXRseSwgYnV0IGl0IGlzCisgICAgLy8gICAgICAg
ICBzdGlsbCB3b3J0aCB0ZXN0aW5nIHRvIGRldGVjdCBhY2NpZGVudGFsIHJlZ3Jlc3Npb25zLgor
ICAgIGV4cGVjdGVkUmVzdWx0ID0gcG9zaXRpb25UcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQW5j
aG9yICogbGF5ZXJUcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQW5jaG9yLmludmVyc2UoKTsKKyAg
ICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBsYXllclRyYW5zZm9y
bSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC41ZiwgMC4wZiksIEZsb2F0UG9pbnQoNS4w
ZiwgMS4yZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5ZXIuZ2V0KCkpOworICAgIFZFUklGWV9NQVRS
SVhfQUxNT1NUX0VRVUFMKGV4cGVjdGVkUmVzdWx0ICogdHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5
ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZXhw
ZWN0ZWRSZXN1bHQsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKK30KKworVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGllcmFy
Y2h5KQoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDAp
OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKDApOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVu
dC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkKTsKKwor
ICAgIC8vIENhc2UgMTogcGFyZW50J3MgYW5jaG9yUG9pbnQgc2hvdWxkIG5vdCBhZmZlY3QgY2hp
bGQgb3IgZ3JhbmRDaGlsZC4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zbGF0
aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyOworICAgIGNoaWxkVHJh
bnNsYXRpb25Ub0NlbnRlci50cmFuc2xhdGUoOC4wLCA5LjApOworICAgIGdyYW5kQ2hpbGRUcmFu
c2xhdGlvblRvQ2VudGVyLnRyYW5zbGF0ZSgzOC4wLCAzOS4wKTsKKyAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAuMjVmLCAwLjI1ZiksIEZsb2F0UG9pbnQoMi41ZiwgMy4wZiksIElu
dFNpemUoMTAsIDEyKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
Y2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxNiwgMTgpLCBmYWxz
ZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZs
b2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoNzYsIDc4KSwgZmFsc2UpOworICAgIGV4ZWN1
dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpKTsKKyAg
ICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNo
aWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlk
ZW50aXR5TWF0cml4LCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZ
X01BVFJJWF9BTE1PU1RfRVFVQUwoZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5k
Q2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
aWRlbnRpdHlNYXRyaXgsIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisg
ICAgLy8gQ2FzZSAyOiBwYXJlbnQncyBwb3NpdGlvbiBhZmZlY3RzIGNoaWxkIGFuZCBncmFuZENo
aWxkLgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtOwor
ICAgIHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtLnRyYW5zbGF0ZSgwLjAsIDEuMik7CisgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjI1ZiwgMC4yNWYpLCBGbG9hdFBvaW50KDIuNWYs
IDQuMmYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMTYs
IDE4KSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGls
ZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYs
IDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDc2LCA3OCksIGZhbHNlKTsK
KyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5n
ZXQoKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50UG9zaXRpb25UcmFu
c2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkp
OworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudFBvc2l0aW9uVHJhbnNmb3Jt
LCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwocGFyZW50UG9zaXRpb25UcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25U
b0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklY
X0FMTU9TVF9FUVVBTChwYXJlbnRQb3NpdGlvblRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVu
U3BhY2VUcmFuc2Zvcm0oKSk7CisKKyAgICAvLyBDYXNlIDM6IHBhcmVudCdzIGxvY2FsIHRyYW5z
Zm9ybSBhZmZlY3RzIGNoaWxkIGFuZCBncmFuZGNoaWxkCisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggcGFyZW50TGF5ZXJUcmFuc2Zvcm07CisgICAgcGFyZW50TGF5ZXJUcmFuc2Zvcm0uc2NhbGUz
ZCgyLjAsIDIuMCwgMS4wKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRUcmFuc2xh
dGlvblRvQW5jaG9yOworICAgIHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3IudHJhbnNsYXRlKDIu
NSwgMy4wKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRDb21wb3NpdGVUcmFuc2Zv
cm0gPSBwYXJlbnRUcmFuc2xhdGlvblRvQW5jaG9yICogcGFyZW50TGF5ZXJUcmFuc2Zvcm0gKiBw
YXJlbnRUcmFuc2xhdGlvblRvQW5jaG9yLmludmVyc2UoKTsKKyAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgcGFyZW50TGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAuMjVmLCAwLjI1ZiksIEZsb2F0UG9pbnQoMi41ZiwgMy4wZiks
IEludFNpemUoMTAsIDEyKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2lu
dCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxNiwgMTgpLCBm
YWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgp
LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiks
IEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoNzYsIDc4KSwgZmFsc2UpOworICAgIGV4
ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpKTsK
KyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0g
KiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAg
IFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hp
bGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VR
VUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2Vu
dGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxN
T1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSk7CisKKyAgICAvLyBDYXNlIDQ6IHBhcmVudCdzIHN1YmxheWVyTWF0cml4
IGFmZmVjdHMgY2hpbGQgYW5kIGdyYW5kY2hpbGQKKyAgICAvLyAgICAgICAgIHNjYWxpbmcgaXMg
dXNlZCBoZXJlIGFnYWluIHNvIHRoYXQgdGhlIGNvcnJlY3Qgc2VxdWVuY2Ugb2YgdHJhbnNmb3Jt
cyBpcyBwcm9wZXJseSB0ZXN0ZWQuCisgICAgLy8gICAgICAgICBOb3RlIHRoYXQgcHJlc2VydmVz
M0QgaXMgZmFsc2UsIGJ1dCB0aGUgc3VibGF5ZXIgbWF0cml4IHNob3VsZCByZXRhaW4gaXRzIDNE
IHByb3BlcnRpZXMgd2hlbiBnaXZlbiB0byBjaGlsZC4KKyAgICAvLyAgICAgICAgIEJ1dCB0aGVu
LCB0aGUgY2hpbGQgYWxzbyBkb2VzIG5vdCBwcmVzZXJ2ZTNELiBXaGVuIGl0IGdpdmVzIGl0cyBo
aWVyYXJjaHkgdG8gdGhlIGdyYW5kQ2hpbGQsIGl0IHNob3VsZCBiZSBmbGF0dGVuZWQgdG8gMkQu
CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50U3VibGF5ZXJNYXRyaXg7CisgICAgcGFy
ZW50U3VibGF5ZXJNYXRyaXguc2NhbGUzZCgxMC4wLCAxMC4wLCAzLjMpOworICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHBhcmVudFRyYW5zbGF0aW9uVG9DZW50ZXI7CisgICAgcGFyZW50VHJhbnNs
YXRpb25Ub0NlbnRlci50cmFuc2xhdGUoNS4wLCA2LjApOworICAgIC8vIHN1YmxheWVyIG1hdHJp
eCBpcyBhcHBsaWVkIHRvIHRoZSBjZW50ZXIgb2YgdGhlIHBhcmVudCBsYXllci4KKyAgICBwYXJl
bnRDb21wb3NpdGVUcmFuc2Zvcm0gPSBwYXJlbnRUcmFuc2xhdGlvblRvQW5jaG9yICogcGFyZW50
TGF5ZXJUcmFuc2Zvcm0gKiBwYXJlbnRUcmFuc2xhdGlvblRvQW5jaG9yLmludmVyc2UoKQorICAg
ICAgICAgICAgKiBwYXJlbnRUcmFuc2xhdGlvblRvQ2VudGVyICogcGFyZW50U3VibGF5ZXJNYXRy
aXggKiBwYXJlbnRUcmFuc2xhdGlvblRvQ2VudGVyLmludmVyc2UoKTsKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBmbGF0dGVuZWRDb21wb3NpdGVUcmFuc2Zvcm0gPSByZW1vdmUzRENvbXBvbmVu
dE9mTWF0cml4KHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIHBhcmVudExheWVyVHJhbnNmb3JtLCBwYXJlbnRT
dWJsYXllck1hdHJpeCwgRmxvYXRQb2ludCgwLjI1ZiwgMC4yNWYpLCBGbG9hdFBvaW50KDIuNWYs
IDMuMGYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMTYs
IDE4KSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGls
ZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYs
IDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDc2LCA3OCksIGZhbHNlKTsK
KyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5n
ZXQoKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJh
bnNmb3JtICogY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgp
KTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zv
cm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChmbGF0dGVuZWRDb21wb3NpdGVUcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNs
YXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllf
TUFUUklYX0FMTU9TVF9FUVVBTChmbGF0dGVuZWRDb21wb3NpdGVUcmFuc2Zvcm0sIGdyYW5kQ2hp
bGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisgICAgLy8gQ2FzZSA1OiBzYW1lIGFzIENh
c2UgNCwgZXhjZXB0IHRoYXQgY2hpbGQgZG9lcyBwcmVzZXJ2ZSAzRCwgc28gdGhlIGdyYW5kQ2hp
bGQgc2hvdWxkIHJlY2VpdmUgdGhlIG5vbi1mbGF0dGVuZWQgY29tcG9zaXRlIHRyYW5zZm9ybS4K
KyAgICAvLworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBw
YXJlbnRMYXllclRyYW5zZm9ybSwgcGFyZW50U3VibGF5ZXJNYXRyaXgsIEZsb2F0UG9pbnQoMC4y
NWYsIDAuMjVmKSwgRmxvYXRQb2ludCgyLjVmLCAzLjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxz
ZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBv
aW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2LCAxOCksIHRydWUpOworICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYp
LCBJbnRTaXplKDc2LCA3OCksIGZhbHNlKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtICogY2hpbGRUcmFuc2xhdGlvblRvQ2Vu
dGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9F
UVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFu
c2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1Ry
YW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3Np
dGVUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworfQorCitU
RVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVS
ZW5kZXJTdXJmYWNlKQoreworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0g
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudD4gZ3JhbmRDaGlsZCA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVt
V2l0aEZvcmNlZERyYXdzQ29udGVudCgwKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJm
YWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQtPmFkZENoaWxk
KGdyYW5kQ2hpbGQpOworCisgICAgLy8gY2hpbGQgaXMgc2V0IHVwIHNvIHRoYXQgYSBuZXcgcmVu
ZGVyIHN1cmZhY2Ugc2hvdWxkIGJlIGNyZWF0ZWQuCisgICAgY2hpbGQtPnNldE9wYWNpdHkoMC41
Zik7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRMYXllclRyYW5zZm9ybTsKKyAgICBwYXJlbnRMYXllclRy
YW5zZm9ybS5zY2FsZTNkKDIuMCwgMi4wLCAxLjApOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3I7CisgICAgcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hv
ci50cmFuc2xhdGUoMi41LCAzLjApOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFN1
YmxheWVyTWF0cml4OworICAgIHBhcmVudFN1YmxheWVyTWF0cml4LnNjYWxlM2QoMTAuMCwgMTAu
MCwgMy4zKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRUcmFuc2xhdGlvblRvQ2Vu
dGVyOworICAgIHBhcmVudFRyYW5zbGF0aW9uVG9DZW50ZXIudHJhbnNsYXRlKDUuMCwgNi4wKTsK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gPSBwYXJl
bnRUcmFuc2xhdGlvblRvQW5jaG9yICogcGFyZW50TGF5ZXJUcmFuc2Zvcm0gKiBwYXJlbnRUcmFu
c2xhdGlvblRvQW5jaG9yLmludmVyc2UoKQorICAgICAgICAgICAgKiBwYXJlbnRUcmFuc2xhdGlv
blRvQ2VudGVyICogcGFyZW50U3VibGF5ZXJNYXRyaXggKiBwYXJlbnRUcmFuc2xhdGlvblRvQ2Vu
dGVyLmludmVyc2UoKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zbGF0aW9u
VG9DZW50ZXI7CisgICAgY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLnRyYW5zbGF0ZSg4LjAsIDku
MCk7CisKKyAgICAvLyBDaGlsZCdzIHJlbmRlciBzdXJmYWNlIHNob3VsZCBub3QgZXhpc3QgeWV0
LgorICAgIEFTU0VSVF9GQUxTRShjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBwYXJlbnRMYXllclRyYW5zZm9y
bSwgcGFyZW50U3VibGF5ZXJNYXRyaXgsIEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQ
b2ludCgyLjVmLCAzLjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJ
bnRTaXplKDE2LCAxOCksIGZhbHNlKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSk7CisKKyAgICAvLyBSZW5kZXIgc3VyZmFjZSBz
aG91bGQgaGF2ZSBiZWVuIGNyZWF0ZWQgbm93LgorICAgIEFTU0VSVF9UUlVFKGNoaWxkLT5yZW5k
ZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9FUShjaGlsZC0+cmVuZGVyU3VyZmFjZSgpLCBjaGls
ZC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKKworICAgIC8vIFRoZSBjaGlsZCBsYXllcidzIGRy
YXcgdHJhbnNmb3JtIHNob3VsZCByZWZlciB0byBpdHMgbmV3IHJlbmRlciBzdXJmYWNlOyB0aGV5
IG9ubHkgZGlmZmVyIGJ5IGEgdHJhbnNsYXRpb24gdG8gY2VudGVyLgorICAgIC8vIFRoZSBzY3Jl
ZW4tc3BhY2UgdHJhbnNmb3JtLCBob3dldmVyLCBzaG91bGQgc3RpbGwgcmVmZXIgdG8gdGhlIHJv
b3QuCisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoY2hpbGRUcmFuc2xhdGlvblRvQ2Vu
dGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9F
UVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKKworICAgIC8vIFdpdGhvdXQgY2xpcHBpbmcgYW5kIHNjaXNzb3JpbmcsIHRoZSBvcmln
aW4gdHJhbnNmb3JtIGFuZCBkcmF3IHRyYW5zZm9ybSAoaW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2Up
IHNob3VsZCBiZSB0aGUgc2FtZS4KKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJl
bnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPm9yaWdp
blRyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21w
b3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT50YXJnZXRSZW5kZXJTdXJmYWNlKCktPmRyYXdUcmFuc2Zv
cm0oKSk7CisKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFu
c2Zvcm1zRm9yUmVuZGVyU3VyZmFjZUhpZXJhcmNoeSkKK3sKKyAgICAvLyBUaGlzIHRlc3QgY3Jl
YXRlcyBhIG1vcmUgY29tcGxleCB0cmVlIGFuZCB2ZXJpZmllcyBpdCBhbGwgYXQgb25jZS4gVGhp
cyBjb3ZlcnMgdGhlIGZvbGxvd2luZyBjYXNlczoKKyAgICAvLyAgIC0gbGF5ZXJzIHRoYXQgYXJl
IGRlc2NyaWJlZCB3LnIudC4gYSByZW5kZXIgc3VyZmFjZTogc2hvdWxkIGhhdmUgZHJhdyB0cmFu
c2Zvcm1zIGRlc2NyaWJlZCB3LnIudC4gdGhhdCBzdXJmYWNlCisgICAgLy8gICAtIEEgcmVuZGVy
IHN1cmZhY2UgZGVzY3JpYmVkIHcuci50LiBhbiBhbmNlc3RvciByZW5kZXIgc3VyZmFjZTogc2hv
dWxkIGhhdmUgYSBkcmF3IHRyYW5zZm9ybSBkZXNjcmliZWQgdy5yLnQuIHRoYXQgYW5jZXN0b3Ig
c3VyZmFjZQorICAgIC8vICAgLSBTYW5pdHkgY2hlY2sgb24gcmVjdXJzaW9uOiB2ZXJpZnkgdHJh
bnNmb3JtcyBvZiBsYXllcnMgZGVzY3JpYmVkIHcuci50LiBhIHJlbmRlciBzdXJmYWNlIHRoYXQg
aXMgZGVzY3JpYmVkIHcuci50LiBhbiBhbmNlc3RvciByZW5kZXIgc3VyZmFjZS4KKyAgICAvLyAg
IC0gdmVyaWZ5aW5nIHRoYXQgZWFjaCBsYXllciBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIGNvcnJl
Y3QgcmVuZGVyU3VyZmFjZSBhbmQgdGFyZ2V0UmVuZGVyU3VyZmFjZSB2YWx1ZXMuCisKKyAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiByZW5kZXJTdXJmYWNlMSA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcmVuZGVyU3VyZmFjZTIgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxk
T2ZSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBjaGlsZE9mUlMxID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBjaGlsZE9mUlMyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAg
IFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkT2ZSb290ID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVu
dD4gZ3JhbmRDaGlsZE9mUlMxID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2Vk
RHJhd3NDb250ZW50KDApKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3
c0NvbnRlbnQ+IGdyYW5kQ2hpbGRPZlJTMiA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0
aEZvcmNlZERyYXdzQ29udGVudCgwKSk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNl
KCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChyZW5kZXJTdXJmYWNlMSk7CisgICAgcGFyZW50LT5h
ZGRDaGlsZChjaGlsZE9mUm9vdCk7CisgICAgcmVuZGVyU3VyZmFjZTEtPmFkZENoaWxkKGNoaWxk
T2ZSUzEpOworICAgIHJlbmRlclN1cmZhY2UxLT5hZGRDaGlsZChyZW5kZXJTdXJmYWNlMik7Cisg
ICAgcmVuZGVyU3VyZmFjZTItPmFkZENoaWxkKGNoaWxkT2ZSUzIpOworICAgIGNoaWxkT2ZSb290
LT5hZGRDaGlsZChncmFuZENoaWxkT2ZSb290KTsKKyAgICBjaGlsZE9mUlMxLT5hZGRDaGlsZChn
cmFuZENoaWxkT2ZSUzEpOworICAgIGNoaWxkT2ZSUzItPmFkZENoaWxkKGdyYW5kQ2hpbGRPZlJT
Mik7CisKKyAgICAvLyBJbiBjb21iaW5hdGlvbiB3aXRoIGRlc2NlbmRhbnREcmF3c0NvbnRlbnQs
IG9wYWNpdHkgIT0gMSBmb3JjZXMgdGhlIGxheWVyIHRvIGhhdmUgYSBuZXcgcmVuZGVyU3VyZmFj
ZS4KKyAgICByZW5kZXJTdXJmYWNlMS0+c2V0T3BhY2l0eSgwLjVmKTsKKyAgICByZW5kZXJTdXJm
YWNlMi0+c2V0T3BhY2l0eSgwLjMzZik7CisKKyAgICAvLyBBbGwgbGF5ZXJzIGluIHRoZSB0cmVl
IGFyZSBpbml0aWFsaXplZCB3aXRoIGFuIGFuY2hvciBhdCAyLjUgYW5kIGEgc2l6ZSBvZiAoMTAs
MTApLgorICAgIC8vIG1hdHJpeCAiQSIgaXMgdGhlIGNvbXBvc2l0ZSBsYXllciB0cmFuc2Zvcm0g
dXNlZCBpbiBhbGwgbGF5ZXJzLCBjZW50ZXJlZCBhYm91dCB0aGUgYW5jaG9yIHBvaW50CisgICAg
Ly8gbWF0cml4ICJCIiBpcyB0aGUgc3VibGF5ZXIgdHJhbnNmb3JtIHVzZWQgaW4gYWxsIGxheWVy
cywgY2VudGVyZWQgYWJvdXQgdGhlIGNlbnRlciBwb3NpdGlvbiBvZiB0aGUgbGF5ZXIuCisgICAg
Ly8KKyAgICAvLyB4IGNvbXBvbmVudCB0ZXN0cyB0aGF0IGxheWVyVHJhbnNmb3JtIGFuZCBzdWJs
YXllclRyYW5zZm9ybSBhcmUgZG9uZSBpbiB0aGUgcmlnaHQgb3JkZXIgKHRyYW5zbGF0aW9uIGFu
ZCBzY2FsZSBhcmUgbm9uY29tbXV0YXRpdmUpLgorICAgIC8vIHkgY29tcG9uZW50IGhhcyBhIHRy
YW5zbGF0aW9uIGJ5IDEuMCBmb3IgZXZlcnkgYW5jZXN0b3IsIHdoaWNoIGluZGljYXRlcyB0aGUg
ImRlcHRoIiBvZiB0aGUgbGF5ZXIgaW4gdGhlIGhpZXJhcmNoeS4KKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCB0cmFuc2xhdGlvblRvQW5jaG9yOworICAgIHRyYW5zbGF0aW9uVG9BbmNob3IudHJh
bnNsYXRlKDIuNSwgMC4wKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2xhdGlvblRv
Q2VudGVyOworICAgIHRyYW5zbGF0aW9uVG9DZW50ZXIudHJhbnNsYXRlKDUuMCwgNS4wKTsKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllclRyYW5zZm9ybTsKKyAgICBsYXllclRyYW5zZm9y
bS50cmFuc2xhdGUoMS4wLCAxLjApOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVy
VHJhbnNmb3JtOworICAgIHN1YmxheWVyVHJhbnNmb3JtLnNjYWxlM2QoMTAuMCwgMS4wLCAxLjAp
OworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggQSA9IHRyYW5zbGF0aW9uVG9BbmNob3IgKiBs
YXllclRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpOworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IEIgPSB0cmFuc2xhdGlvblRvQ2VudGVyICogc3VibGF5ZXJUcmFuc2Zv
cm0gKiB0cmFuc2xhdGlvblRvQ2VudGVyLmludmVyc2UoKTsKKworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBsYXllclRyYW5zZm9ybSwgc3VibGF5ZXJUcmFu
c2Zvcm0sIEZsb2F0UG9pbnQoMC4yNWYsIDAuMGYpLCBGbG9hdFBvaW50KDIuNWYsIDAuMGYpLCBJ
bnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KHJlbmRlclN1cmZhY2UxLmdldCgpLCBsYXllclRyYW5zZm9ybSwgc3VibGF5ZXJUcmFuc2Zvcm0s
IEZsb2F0UG9pbnQoMC4yNWYsIDAuMGYpLCBGbG9hdFBvaW50KDIuNWYsIDAuMGYpLCBJbnRTaXpl
KDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJlbmRl
clN1cmZhY2UyLmdldCgpLCBsYXllclRyYW5zZm9ybSwgc3VibGF5ZXJUcmFuc2Zvcm0sIEZsb2F0
UG9pbnQoMC4yNWYsIDAuMGYpLCBGbG9hdFBvaW50KDIuNWYsIDAuMGYpLCBJbnRTaXplKDEwLCAx
MCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkT2ZSb290
LmdldCgpLCBsYXllclRyYW5zZm9ybSwgc3VibGF5ZXJUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMC4y
NWYsIDAuMGYpLCBGbG9hdFBvaW50KDIuNWYsIDAuMGYpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNl
KTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkT2ZSUzEuZ2V0KCksIGxh
eWVyVHJhbnNmb3JtLCBzdWJsYXllclRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLjI1ZiwgMC4wZiks
IEZsb2F0UG9pbnQoMi41ZiwgMC4wZiksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGRPZlJTMi5nZXQoKSwgbGF5ZXJUcmFuc2Zv
cm0sIHN1YmxheWVyVHJhbnNmb3JtLCBGbG9hdFBvaW50KDAuMjVmLCAwLjBmKSwgRmxvYXRQb2lu
dCgyLjVmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkT2ZSb290LmdldCgpLCBsYXllclRyYW5zZm9ybSwg
c3VibGF5ZXJUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMC4yNWYsIDAuMGYpLCBGbG9hdFBvaW50KDIu
NWYsIDAuMGYpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGRPZlJTMS5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIHN1Ymxh
eWVyVHJhbnNmb3JtLCBGbG9hdFBvaW50KDAuMjVmLCAwLjBmKSwgRmxvYXRQb2ludCgyLjVmLCAw
LjBmKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhncmFuZENoaWxkT2ZSUzIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBzdWJsYXllclRy
YW5zZm9ybSwgRmxvYXRQb2ludCgwLjI1ZiwgMC4wZiksIEZsb2F0UG9pbnQoMi41ZiwgMC4wZiks
IEludFNpemUoMTAsIDEwKSwgZmFsc2UpOworCisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkpOworCisgICAgLy8gT25seSBsYXllcnMg
dGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHJlbmRlciBzdXJmYWNlcyBzaG91bGQgaGF2ZSBhbiBh
Y3R1YWwgcmVuZGVyU3VyZmFjZSgpIHZhbHVlLgorICAgIC8vCisgICAgQVNTRVJUX1RSVUUocGFy
ZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9GQUxTRShjaGlsZE9mUm9vdC0+cmVu
ZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfRkFMU0UoZ3JhbmRDaGlsZE9mUm9vdC0+cmVuZGVy
U3VyZmFjZSgpKTsKKworICAgIEFTU0VSVF9UUlVFKHJlbmRlclN1cmZhY2UxLT5yZW5kZXJTdXJm
YWNlKCkpOworICAgIEFTU0VSVF9GQUxTRShjaGlsZE9mUlMxLT5yZW5kZXJTdXJmYWNlKCkpOwor
ICAgIEFTU0VSVF9GQUxTRShncmFuZENoaWxkT2ZSUzEtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAg
ICBBU1NFUlRfVFJVRShyZW5kZXJTdXJmYWNlMi0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NF
UlRfRkFMU0UoY2hpbGRPZlJTMi0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfRkFMU0Uo
Z3JhbmRDaGlsZE9mUlMyLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgLy8gVmVyaWZ5IGFsbCB0
YXJnZXRSZW5kZXJTdXJmYWNlIGFjY2Vzc29ycworICAgIC8vCisgICAgRVhQRUNUX0VRKHBhcmVu
dC0+cmVuZGVyU3VyZmFjZSgpLCBwYXJlbnQtPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CisgICAg
RVhQRUNUX0VRKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLCBjaGlsZE9mUm9vdC0+dGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfRVEocGFyZW50LT5yZW5kZXJTdXJmYWNlKCksIGdy
YW5kQ2hpbGRPZlJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfRVEo
cmVuZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZhY2UoKSwgcmVuZGVyU3VyZmFjZTEtPnRhcmdldFJl
bmRlclN1cmZhY2UoKSk7CisgICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2UxLT5yZW5kZXJTdXJm
YWNlKCksIGNoaWxkT2ZSUzEtPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CisgICAgRVhQRUNUX0VR
KHJlbmRlclN1cmZhY2UxLT5yZW5kZXJTdXJmYWNlKCksIGdyYW5kQ2hpbGRPZlJTMS0+dGFyZ2V0
UmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9FUShyZW5kZXJTdXJmYWNlMi0+cmVuZGVy
U3VyZmFjZSgpLCByZW5kZXJTdXJmYWNlMi0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKKyAgICBF
WFBFQ1RfRVEocmVuZGVyU3VyZmFjZTItPnJlbmRlclN1cmZhY2UoKSwgY2hpbGRPZlJTMi0+dGFy
Z2V0UmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZTItPnJlbmRl
clN1cmZhY2UoKSwgZ3JhbmRDaGlsZE9mUlMyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkpOworICAg
IAorICAgIC8vIFZlcmlmeSBsYXllciBkcmF3IHRyYW5zZm9ybXMKKyAgICAvLyAgbm90ZSB0aGF0
IGRyYXcgdHJhbnNmb3JtcyBhcmUgZGVzY3JpYmVkIHdpdGggcmVzcGVjdCB0byB0aGUgbmVhcmVz
dCBhbmNlc3RvciByZW5kZXIgc3VyZmFjZQorICAgIC8vICBidXQgc2NyZWVuIHNwYWNlIHRyYW5z
Zm9ybXMgYXJlIGRlc2NyaWJlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIHJvb3QuCisgICAgLy8KKyAg
ICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgcGFy
ZW50LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEg
KiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkT2ZSb290LT5kcmF3VHJhbnNmb3Jt
KCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIEIgKiBBICog
dHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZE9mUm9vdC0+ZHJhd1RyYW5zZm9ybSgpKTsK
KworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHRyYW5zbGF0aW9uVG9DZW50ZXIsIHJl
bmRlclN1cmZhY2UxLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NU
X0VRVUFMKEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGRPZlJTMS0+ZHJhd1RyYW5z
Zm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChCICogQSAqIEIgKiBBICog
dHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZE9mUlMxLT5kcmF3VHJhbnNmb3JtKCkpOwor
ICAgIAorICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHRyYW5zbGF0aW9uVG9DZW50ZXIs
IHJlbmRlclN1cmZhY2UyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxN
T1NUX0VRVUFMKEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGRPZlJTMi0+ZHJhd1Ry
YW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChCICogQSAqIEIgKiBB
ICogdHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZE9mUlMyLT5kcmF3VHJhbnNmb3JtKCkp
OworCisgICAgLy8gVmVyaWZ5IGxheWVyIHNjcmVlbi1zcGFjZSB0cmFuc2Zvcm1zCisgICAgVkVS
SUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSwgcGFyZW50LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgp
KTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEsIGNoaWxkT2ZSb290
LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVB
TChBICogQiAqIEEgKiBCICogQSwgZ3JhbmRDaGlsZE9mUm9vdC0+c2NyZWVuU3BhY2VUcmFuc2Zv
cm0oKSk7CisKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEsIHJlbmRl
clN1cmZhY2UxLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChBICogQiAqIEEgKiBCICogQSwgY2hpbGRPZlJTMS0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICogQiAq
IEEgKiBCICogQSwgZ3JhbmRDaGlsZE9mUlMxLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKwor
ICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIEIgKiBBLCByZW5kZXJT
dXJmYWNlMi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwoQSAqIEIgKiBBICogQiAqIEEgKiBCICogQSwgY2hpbGRPZlJTMi0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBB
ICogQiAqIEEgKiBCICogQSAqIEIgKiBBLCBncmFuZENoaWxkT2ZSUzItPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOworCisgICAgLy8gVmVyaWZ5IHJlbmRlciBzdXJmYWNlIHRyYW5zZm9ybXMuCisg
ICAgLy8KKyAgICAvLyBPcmlnaW4gdHJhbnNmb3JtIG9mIHJlbmRlciBzdXJmYWNlIDEgaXMgZGVz
Y3JpYmVkIHdpdGggcmVzcGVjdCB0byByb290LgorICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VR
VUFMKEEgKiBCICogQSwgcmVuZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJh
bnNmb3JtKCkpOworICAgIC8vIE9yaWdpbiB0cmFuc2Zvcm0gb2YgcmVuZGVyIHN1cmZhY2UgMiBp
cyBkZXNjcmliZWQgd2l0aCByZXNwZWN0IHRvIHJlbmRlciBzdXJmYWNlIDIuCisgICAgVkVSSUZZ
X01BVFJJWF9BTE1PU1RfRVFVQUwoQiAqIEEsIHJlbmRlclN1cmZhY2UyLT5yZW5kZXJTdXJmYWNl
KCktPm9yaWdpblRyYW5zZm9ybSgpKTsKKworICAgIC8vIFNhbml0eSBjaGVjay4gSWYgdGhlc2Ug
ZmFpbCB0aGVyZSBpcyBwcm9iYWJseSBhIGJ1ZyBpbiB0aGUgdGVzdCBpdHNlbGYuCisgICAgLy8g
SXQgaXMgZXhwZWN0ZWQgdGhhdCB3ZSBjb3JyZWN0bHkgc2V0IHVwIHRyYW5zZm9ybXMgc28gdGhh
dCB0aGUgeS1jb21wb25lbnQgb2YgdGhlIHNjcmVlbi1zcGFjZSB0cmFuc2Zvcm0KKyAgICAvLyBl
bmNvZGVzIHRoZSAiZGVwdGgiIG9mIHRoZSBsYXllciBpbiB0aGUgdHJlZS4KKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMS4wLCBwYXJlbnQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkubTQyKCkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSgyLjAsIGNoaWxkT2ZSb290LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgp
Lm00MigpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMy4wLCBncmFuZENoaWxkT2ZSb290LT5zY3Jl
ZW5TcGFjZVRyYW5zZm9ybSgpLm00MigpKTsKKyAgICAKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMi4w
LCByZW5kZXJTdXJmYWNlMS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tNDIoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDMuMCwgY2hpbGRPZlJTMS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tNDIo
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQuMCwgZ3JhbmRDaGlsZE9mUlMxLT5zY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpLm00MigpKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgzLjAsIHJlbmRlclN1
cmZhY2UyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLm00MigpKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoNC4wLCBjaGlsZE9mUlMyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLm00MigpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoNS4wLCBncmFuZENoaWxkT2ZSUzItPnNjcmVlblNwYWNlVHJhbnNmb3Jt
KCkubTQyKCkpOworfQorCisvLyBGSVhNRToKKy8vIGNvbnRpbnVlIHdvcmtpbmcgb24gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4OTQyCisvLyAgLSBhZGQgYSB0ZXN0
IHRvIHZlcmlmeSBjbGlwcGluZyB0aGF0IGNoYW5nZXMgdGhlICJjZW50ZXIgcG9pbnQiCisvLyAg
LSBhZGQgYSBjYXNlIHRoYXQgY2hlY2tzIGlmIGEgcmVuZGVyIHN1cmZhY2UncyBkcmF3VHJhbnNm
b3JtIGlzIGNvbXB1dGVkIGNvcnJlY3RseS4gRm9yIHRoZSBnZW5lcmFsIGNhc2UsIGFuZCBmb3Ig
c3BlY2lhbCBjYXNlcyB3aGVuIGNsaXBwaW5nL3NjaXNzb3JpbmcuCisvLyAgLSBhZGQgYSBjYXNl
IHRoYXQgY2hlY2tzIGlmIGEgcmVuZGVyIHN1cmZhY2UncyByZXBsaWNhVHJhbnNmb3JtIGlzIGNv
bXB1dGVkIGNvcnJlY3RseS4KKy8vICAtIHRlc3QgYWxsIHRoZSBjb25kaXRpb25zIHVuZGVyIHdo
aWNoIHJlbmRlciBzdXJmYWNlcyBhcmUgY3JlYXRlZAorLy8gIC0gaWYgcG9zc2libGUsIHRlc3Qg
YWxsIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggcmVuZGVyIHN1cmZhY2VzIGFyZSBub3QgY3JlYXRl
ZAorLy8gIC0gdmVyaWZ5IHRoYXQgdGhlIGxheWVyIGxpc3RzIG9mIHJlbmRlciBzdXJmYWNlcyBh
cmUgY29ycmVjdCwgdmVyaWZ5IHRoYXQgInRhcmdldFJlbmRlclN1cmZhY2UiIHZhbHVlcyBmb3Ig
ZWFjaCBsYXllciBhcmUgY29ycmVjdC4KKy8vICAtIHRlc3QgdGhlIGNvbXB1dGF0aW9uIG9mIHNj
aXNzb3IgcmVjdHMgYW5kIGNvbnRlbnQgcmVjdHMKKy8vICAtIHRlc3QgdGhlIHNwZWNpYWwgY2Fz
ZXMgZm9yIG1hc2sgbGF5ZXJzIGFuZCByZXBsaWNhIGxheWVycworLy8gIC0gdGVzdCB0aGUgb3Ro
ZXIgZnVuY3Rpb25zIGluIENDTGF5ZXJUcmVlSG9zdENvbW1vbgorLy8KKworfSAvLyBuYW1lc3Bh
Y2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110174</attachid>
            <date>2011-10-07 10:49:09 -0700</date>
            <delta_ts>2011-10-07 10:58:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69197-20111007104907.patch</filename>
            <type>text/plain</type>
            <size>40104</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY4MTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxZDczOTA0ZjEyNTU3NDMx
NzkyNmM0YmRmZmIwZTc4NGFmM2M4NTc1Li5iZWQxMjlmZGEwZjIzZDhhNmY0MGU1ODM4Njg0NmUy
OGRkMjAyZmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMTAtMDcgIFNoYXdu
IFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRmlyc3Qgcm91bmQg
b2YgdW5pdCB0ZXN0cyBmb3IgQ0NMYXllclRyZWVIb3N0Q29tbW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTE5NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFzIHBhcnQgb2YgdGVzdGluZyBpdCB3YXMg
YXBwcm9wcmlhdGUgdG8gZXh0ZW5kIHRoZSBjb21tZW50cworICAgICAgICB0aGF0IGRvY3VtZW50
IGhvdyB0aGUgdHJhbnNmb3JtIGhpZXJhcmNoeSB3b3Jrcy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbCk6
CisKIDIwMTEtMTAtMDYgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI5Njc5MS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCmluZGV4IGJjZDVhYzczNWVlYmExOTFhYWNi
Y2Y4ZDhjMWYyZmZkZjMzM2ZhMDkuLjMzMTE4YTE0NjQ1M2FlM2Q0MTczMjQzZmMwMGI0MGI0MWUw
YzI5MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApAQCAt
OTIsMjMgKzkyLDY1IEBAIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiB7CiAgICAgdHlwZWRlZiBW
ZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiBMYXllckxpc3Q7CiAgICAgLy8gQ29tcHV0ZSB0aGUg
bmV3IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGlzIGxh
eWVyIGFuZAotICAgIC8vIGFsbCBpdHMgY2hpbGRyZW4uIEl0J3MgaW1wb3J0YW50IHRvIHJlbWVt
YmVyIHRoYXQgdGhlIGxheWVyJ3MgcG9zaXRpb24KLSAgICAvLyBpcyB0aGUgcG9zaXRpb24gb2Yg
dGhlIGxheWVyJ3MgYW5jaG9yIHBvaW50LiBBbHNvLCB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gdXNl
ZAotICAgIC8vIGFzc3VtZXMgdGhhdCB0aGUgb3JpZ2luIGlzIGF0IHRoZSBsb3dlciBsZWZ0IGV2
ZW4gdGhvdWdoIHRoZSBjb29yZGluYXRlcyB0aGUgYnJvd3NlcgotICAgIC8vIGdpdmVzIHVzIGZv
ciB0aGUgbGF5ZXJzIGFyZSBmb3IgdGhlIHVwcGVyIGxlZnQgY29ybmVyLiBUaGUgWSBmbGlwIGhh
cHBlbnMgdmlhCi0gICAgLy8gdGhlIG9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uIGFwcGxpZWQgYXQg
cmVuZGVyIHRpbWUuCi0gICAgLy8gVGhlIHRyYW5zZm9ybWF0aW9uIGNoYWluIGZvciB0aGUgbGF5
ZXIgaXMgKHVzaW5nIHRoZSBNYXRyaXggeCBWZWN0b3Igb3JkZXIpOgotICAgIC8vIE0gPSBNW3Bd
ICogVHJbbF0gKiBNW2xdICogVHJbY10KLSAgICAvLyBXaGVyZSBNW3BdIGlzIHRoZSBwYXJlbnQg
bWF0cml4IHBhc3NlZCBkb3duIHRvIHRoZSBmdW5jdGlvbgotICAgIC8vICAgICAgIFRyW2xdIGlz
IHRoZSB0cmFuc2xhdGlvbiBtYXRyaXggbG9jYXRpbmcgdGhlIGxheWVyJ3MgYW5jaG9yIHBvaW50
Ci0gICAgLy8gICAgICAgVHJbY10gaXMgdGhlIHRyYW5zbGF0aW9uIG9mZnNldCBiZXR3ZWVuIHRo
ZSBhbmNob3IgcG9pbnQgYW5kIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyCi0gICAgLy8gICAgICAg
TVtsXSBpcyB0aGUgbGF5ZXIncyBtYXRyaXggKGFwcGxpZWQgYXQgdGhlIGFuY2hvciBwb2ludCkK
LSAgICAvLyBUaGlzIHRyYW5zZm9ybSBjcmVhdGVzIGEgY29vcmRpbmF0ZSBzeXN0ZW0gd2hvc2Ug
b3JpZ2luIGlzIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyLgotICAgIC8vIE5vdGUgdGhhdCB0aGUg
ZmluYWwgbWF0cml4IHVzZWQgYnkgdGhlIHNoYWRlciBmb3IgdGhlIGxheWVyIGlzIFAgKiBNICog
UyAuIFRoaXMgZmluYWwgcHJvZHVjdAotICAgIC8vIGlzIGNvbXB1dGVkIGluIGRyYXdUZXh0dXJl
ZFF1YWQoKS4KLSAgICAvLyBXaGVyZTogUCBpcyB0aGUgcHJvamVjdGlvbiBtYXRyaXgKLSAgICAv
LyAgICAgICAgTSBpcyB0aGUgbGF5ZXIncyBtYXRyaXggY29tcHV0ZWQgYWJvdmUKLSAgICAvLyAg
ICAgICAgUyBpcyB0aGUgc2NhbGUgYWRqdXN0bWVudCAodG8gc2NhbGUgdXAgdG8gdGhlIGxheWVy
IHNpemUpCisgICAgLy8gYWxsIGl0cyBjaGlsZHJlbi4gU29tZSBpbXBvcnRhbnQgcG9pbnRzIHRv
IHJlbWVtYmVyOgorICAgIC8vCisgICAgLy8gMS4gVGhlIGFuY2hvciBwb2ludCwgd2hlbiBnaXZl
biBhcyBhIEZsb2F0UG9pbnQgb2JqZWN0LCBpcyBzcGVjaWZpZWQgaW4gInVuaXQgbGF5ZXIgc3Bh
Y2UiLAorICAgIC8vICAgIHdoZXJlIHRoZSBib3VuZHMgb2YgdGhlIGxheWVyIG1hcCB0byBbMCwg
MV0uIEhvd2V2ZXIsIGFzIGEgVHJhbnNmb3JtYXRpb25NYXRyaXggb2JqZWN0LAorICAgIC8vICAg
IHRoZSB0cmFuc2Zvcm0gdG8gdGhlIGFuY2hvciBwb2ludCBpcyBzcGVjaWZpZWQgaW4gInBpeGVs
IGxheWVyIHNwYWNlIiwgd2hlcmUgdGhlIGJvdW5kcworICAgIC8vICAgIG9mIHRoZSBsYXllciBt
YXAgdG8gW2JvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCldLgorICAgIC8vCisgICAgLy8g
Mi4gVGhlIGxheWVyJ3MgcG9zaXRpb24gaW5jbHVkZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXll
cidzIGFuY2hvciBwb2ludC4gVGhlIHZhbHVlIG9mCisgICAgLy8gICAgbGF5ZXItPnBvc2l0aW9u
KCkgaXMgbm90IGludHVpdGl2ZSB3aGVuIGNvbnNpZGVyaW5nIHRyYW5zZm9ybWF0aW9ucy4gV2hl
biB0cnlpbmcgdG8KKyAgICAvLyAgICB1bmRlcnN0YW5kIHRyYW5zZm9ybWF0aW9ucywgaXQgaXMg
ZWFzaWVyIHRvIHJlbWVtYmVyIHRoZSBmb2xsb3dpbmc6CisgICAgLy8gICAgICAgICJpbnR1aXRp
dmUgbGF5ZXIgcG9zaXRpb24geCIgPSBsYXllci0+cG9zaXRpb24oKS54ICsgbGF5ZXItPmFuY2hv
clBvaW50KCkueAorICAgIC8vICAgICAgICAiaW50dWl0aXZlIGxheWVyIHBvc2l0aW9uIHkiID0g
bGF5ZXItPnBvc2l0aW9uKCkueSArIGxheWVyLT5hbmNob3JQb2ludCgpLnkKKyAgICAvLyAgICBU
aGlzICJpbnR1aXRpdmUgcG9zaXRpb24iIG1ha2VzIHRoZSB0cmFuc2Zvcm1zIGVhc2llciB0byB1
bmRlcnN0YW5kLgorICAgIC8vCisgICAgLy8gMy4gVGhlIGNvb3JkaW5hdGUgc3lzdGVtIHVzZWQg
YXNzdW1lcyB0aGF0IHRoZSBvcmlnaW4gaXMgYXQgdGhlCisgICAgLy8gICAgbG93ZXIgbGVmdCBl
dmVuIHRob3VnaCB0aGUgY29vcmRpbmF0ZXMgdGhlIGJyb3dzZXIgZ2l2ZXMgdXMKKyAgICAvLyAg
ICBmb3IgdGhlIGxheWVycyBhcmUgZm9yIHRoZSB1cHBlciBsZWZ0IGNvcm5lci4gVGhlIFkgZmxp
cAorICAgIC8vICAgIGhhcHBlbnMgdmlhIHRoZSBvcnRob2dyYXBoaWMgcHJvamVjdGlvbiBhcHBs
aWVkIGF0IHJlbmRlcgorICAgIC8vICAgIHRpbWUuCisgICAgLy8KKyAgICAvLyA0LiBUaGUgZHJh
dyB0cmFuc2Zvcm0gZm9yIHRoZSBsYXllciBpcyAodXNpbmcgdGhlIE1hdHJpeCB4IFZlY3RvciBv
cmRlcik6CisgICAgLy8gICAgICAgICAgIE0gPSBNW3BdICogVHJbbF0gKiBNW2xdICogVHJbY10K
KyAgICAvLworICAgIC8vICAgIFdoZXJlOiBNW3BdIGlzIHRoZSBwYXJlbnQgbWF0cml4IHBhc3Nl
ZCBkb3duIHRvIHRoZSBmdW5jdGlvbgorICAgIC8vICAgICAgICAgICBUcltsXSBpcyB0aGUgdHJh
bnNsYXRpb24gbWF0cml4IGxvY2F0aW5nIHRoZSBsYXllcidzIGFuY2hvciBwb2ludAorICAgIC8v
ICAgICAgICAgICBUcltjXSBpcyB0aGUgdHJhbnNsYXRpb24gb2Zmc2V0IGJldHdlZW4gdGhlIGFu
Y2hvciBwb2ludCBhbmQgdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIKKyAgICAvLyAgICAgICAgICAg
TVtsXSBpcyB0aGUgbGF5ZXIncyBtYXRyaXggKGFwcGxpZWQgYXQgdGhlIGFuY2hvciBwb2ludCkK
KyAgICAvLworICAgIC8vICAgIFRoaXMgdHJhbnNmb3JtIGNyZWF0ZXMgYSBjb29yZGluYXRlIHN5
c3RlbSB3aG9zZSBvcmlnaW4gaXMgdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIuCisgICAgLy8gICAg
Tm90ZSB0aGF0IHRoZSBmaW5hbCBtYXRyaXggdXNlZCBieSB0aGUgc2hhZGVyIGZvciB0aGUgbGF5
ZXIgaXMgUCAqIE0gKiBTIC4gVGhpcyBmaW5hbCBwcm9kdWN0CisgICAgLy8gICAgaXMgY29tcHV0
ZWQgaW4gZHJhd1RleHR1cmVkUXVhZCgpLAorICAgIC8vICAgIFdoZXJlOiBQIGlzIHRoZSBwcm9q
ZWN0aW9uIG1hdHJpeAorICAgIC8vICAgICAgICAgICBNIGlzIHRoZSBsYXllcidzIG1hdHJpeCBj
b21wdXRlZCBhYm92ZQorICAgIC8vICAgICAgICAgICBTIGlzIHRoZSBzY2FsZSBhZGp1c3RtZW50
ICh0byBzY2FsZSB1cCB0byB0aGUgbGF5ZXIgc2l6ZSkKKyAgICAvLworICAgIC8vICAgIEFsc28g
bm90ZSB0aGF0IE0gcmVwcmVzZW50cyB0aGUgdHJhbnNmb3JtIGNoYWluIHdpdGggcmVzcGVjdCB0
byB0aGUgbmVhcmVzdCBhbmNlc3RvciByZW5kZXIKKyAgICAvLyAgICBzdXJmYWNlLCBub3QgdGhl
IHJvb3QuCisgICAgLy8KKyAgICAvLyA1LiBUaGUgc2NyZWVuIHNwYWNlIHRyYW5zZm9ybSBpczoK
KyAgICAvLyAgICAgICAgICAgTVtzY3JlZW5zcGFjZV0gPSBNW3Jvb3RdICogVHJbbF0gKiBNW2xd
ICogVHJbYW5jaG9yXS5pbnZlcnNlKCkKKyAgICAvLworICAgIC8vICAgIFdoZXJlOiBNW3Jvb3Rd
IGlzIHRoZSB0cmFuc2Zvcm0gY2hhaW4gd2l0aCByZXNwZWN0IHRvIHRoZSByb290IChpbnN0ZWFk
IG9mIHRoZSBuZWFyZXN0IHJlbmRlciBzdXJmYWNlIGxpa2UgTVtwXSkKKyAgICAvLyAgICAgICAg
ICAgVHJbYW5jaG9yXS5pbnZlcnNlKCkgdHJhbnNsYXRlcyBmcm9tIHRoZSBhbmNob3Igb2Zmc2V0
IGJhY2sgdG8gdGhlIGxheWVyIG9yaWdpbi4KKyAgICAvLworICAgIC8vIDYuIFRoZSB0cmFuc2Zv
cm0gaGllcmFyY2h5IHRoYXQgaXMgcGFzc2VkIG9uIHRvIGNoaWxkcmVuIChpLmUuIHRoZSBjaGls
ZCdzIHBhcmVudE1hdHJpeCkgY2FuIGJlCisgICAgLy8gICAgaW50dWl0aXZlbHkgZGVzY3JpYmVk
IGFzOgorICAgIC8vICAgICAgICAgICBNW3BdX2Zvcl9jaGlsZCA9IE1bcF0gKiBwb3NpdGlvblRy
YW5zZm9ybSAqIGNvbXBvc2l0ZUxheWVyVHJhbnNmb3JtICogY29tcG9zaXRlU3VibGF5ZXJUcmFu
c2Zvcm0KKyAgICAvLworICAgIC8vICAgIFdoZXJlOiBwb3NpdGlvblRyYW5zZm9ybSBpcyBhIHRy
YW5zbGF0aW9uIHRvIHRoZSAiaW50dWl0aXZlIHBvc2l0aW9uIgorICAgIC8vICAgICAgICAgICBj
b21wb3NpdGVMYXllclRyYW5zZm9ybSBpcyB0aGUgbGF5ZXIgdHJhbnNmb3JtIGFwcGxpZWQgYXQg
dGhlIGFuY2hvcjoKKyAgICAvLyAgICAgICAgICAgICAgICBUclthbmNob3JdICogTVtsXSAqIFRy
W2FuY2hvcl0uaW52ZXJzZSgpCisgICAgLy8gICAgICAgICAgIGNvbXBvc2l0ZVN1YmxheWVyVHJh
bnNmb3JtIGlzIHRoZSBzdWJsYXllciB0cmFuc2Zvcm0sIGFwcGxpZWQgYXQgdGhlIGxheWVyJ3Mg
Y2VudGVyOgorICAgIC8vICAgICAgICAgICAgICAgIFRyW28yY10gKiBNW3N1Yl0gKiBUcltvMmNd
LmludmVyc2UoKQorICAgIC8vICAgICAgICAgICBUclthbmNob3JdIGlzIHRoZSB0cmFuc2xhdGlv
biBiZXR3ZWVuIHRoZSBsYXllciBvcmlnaW4gYW5kIHRoZSBhbmNob3IgcG9pbnQuCisgICAgLy8g
ICAgICAgICAgIFRyW28yY10gaXMgdGhlIHRyYW5zbGF0aW9uIG9mZnNldCBiZXR3ZWVuIHRoZSBs
YXllciBvcmlnaW4gYW5kIGNlbnRlciBvZiB0aGUgbGF5ZXIuCisgICAgLy8KKyAgICAvLyAgICBO
b3RlIHRoYXQgaW4gIzQsIHRoZSAicG9zaXRpb25UcmFuc2Zvcm0iIGV4aXN0cyBpbXBsaWNpdGx5
IGluIFRyW2xdLiBUaGF0IGlzLCBUcltsXSA9IHBvc2l0aW9uVHJhbnNmb3JtICogVHJbYW5jaG9y
XS4KKyAgICAvLyAgICBTaW1pbGFybHksIFRyW2NdID0gVHJbYW5jaG9yXS5pbnZlcnNlKCkgKiBU
cltvMmNdLgorICAgIC8vCiAgICAgSW50U2l6ZSBib3VuZHMgPSBsYXllci0+Ym91bmRzKCk7CiAg
ICAgRmxvYXRQb2ludCBhbmNob3JQb2ludCA9IGxheWVyLT5hbmNob3JQb2ludCgpOwogICAgIEZs
b2F0UG9pbnQgcG9zaXRpb24gPSBsYXllci0+cG9zaXRpb24oKSAtIGxheWVyLT5zY3JvbGxEZWx0
YSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBlZmEzMWVjN2Y0Yjk5NWE2N2FlY2Jj
ZmMzN2MyODc5Zjk2N2Q3YTRhLi5iNmM5MTI3NmQwMTU5OGI0YWJjMGIyZDJmNzIzZmRmM2I2ZTg4
NmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDExLTEw
LTA3ICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZp
cnN0IHJvdW5kIG9mIHVuaXQgdGVzdHMgZm9yIENDTGF5ZXJUcmVlSG9zdENvbW1vbi4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5MTk3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyByb3VuZCBvZiB0
ZXN0cyBmb2N1c2VzIG9uIHZlcmlmeWluZyB0aGUgY29tcHV0YXRpb24gb2YgbWF0cml4IHRyYW5z
Zm9ybXMKKyAgICAgICAgaW4gY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5Lgor
CisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlQ2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZTNEQ29tcG9u
ZW50T2ZNYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQ6OkxheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50OjpkcmF3c0Nv
bnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTEtMTAtMDYgIFNoZXJpZmYg
Qm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHI5Njc5MS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDdk
NWFmNmMwMzBiNDRlMzhkNTMxMTkxYTYxN2JjOTMyN2QwMDU0YjAuLjRiM2E4NWNjZmQ5ZDkzNmIz
NTVlNjgxYzMzNjZjY2NkY2RiMTgyOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpA
QCAtNTUsNiArNTUsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0FyZW5hVGVzdEhlbHBlcnMuaCcs
CiAgICAgICAgICAgICAndGVzdHMvQXNzb2NpYXRlZFVSTExvYWRlclRlc3QuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9DQ0xheWVyU29ydGVyVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclRlc3QuY3BwJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAzNjQ2OTYyYmE5NzEyYTQxYmI4MTM2OWE1
OWQ5OTM5NTMyYjAzZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCkBAIC0wLDAgKzEsNDg3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0xheWVy
VHJlZUhvc3RDb21tb24uaCIKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorCisjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4KKyNp
bmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIHsKKworLy8gVGhpcyBpcyBhIG1hY3JvIGluc3RlYWQgb2YgYSBmdW5jdGlvbiBzbyB0
aGF0IHRoZSBndGVzdCBlcnJvcnMgY2FuIGdpdmUgdXMgdXNlZnVsIGxpbmUgbnVtYmVycyBhc3Nv
Y2lhdGVkIHdpdGggdGhlIHRlc3QuCisvLyBFdmVuIHRob3VnaCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB2YWx1ZXMgYXJlIGRvdWJsZSwgdGhlcmUgYXJlIG1hbnkgb3RoZXIgZmxvYXRpbmctcG9pbnQg
dmFsdWVzIHVzZWQsIGFuZCBzbyB3ZQorLy8gb25seSBleHBlY3QgdGhlbSB0byBiZSBhY2N1cmF0
ZSB1cCB0byBmbG9hdGluZy1wb2ludCBwcmVjaXNpb24uCisjZGVmaW5lIFZFUklGWV9NQVRSSVhf
QUxNT1NUX0VRVUFMKGV4cGVjdGVkLCBhY3R1YWwpICAgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
KGV4cGVjdGVkKS5tMTEoKSwgKGFjdHVhbCkubTExKCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9F
USgoZXhwZWN0ZWQpLm0xMigpLCAoYWN0dWFsKS5tMTIoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FU
X0VRKChleHBlY3RlZCkubTEzKCksIChhY3R1YWwpLm0xMygpKTsgIFwKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoKGV4cGVjdGVkKS5tMTQoKSwgKGFjdHVhbCkubTE0KCkpOyAgXAorICAgIEVYUEVDVF9G
TE9BVF9FUSgoZXhwZWN0ZWQpLm0yMSgpLCAoYWN0dWFsKS5tMjEoKSk7ICBcCisgICAgRVhQRUNU
X0ZMT0FUX0VRKChleHBlY3RlZCkubTIyKCksIChhY3R1YWwpLm0yMigpKTsgIFwKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMjMoKSwgKGFjdHVhbCkubTIzKCkpOyAgXAorICAgIEVY
UEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yNCgpLCAoYWN0dWFsKS5tMjQoKSk7ICBcCisgICAg
RVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTMxKCksIChhY3R1YWwpLm0zMSgpKTsgIFwKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMzIoKSwgKGFjdHVhbCkubTMyKCkpOyAgXAor
ICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0zMygpLCAoYWN0dWFsKS5tMzMoKSk7ICBc
CisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTM0KCksIChhY3R1YWwpLm0zNCgpKTsg
IFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tNDEoKSwgKGFjdHVhbCkubTQxKCkp
OyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm00MigpLCAoYWN0dWFsKS5tNDIo
KSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTQzKCksIChhY3R1YWwpLm00
MygpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tNDQoKSwgKGFjdHVhbCku
bTQ0KCkpCisKK3ZvaWQgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhMYXllckNocm9taXVt
KiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBh
bmNob3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBib3VuZHMs
IGJvb2wgcHJlc2VydmVzM0QpCit7CisgICAgbGF5ZXItPnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0p
OworICAgIGxheWVyLT5zZXRTdWJsYXllclRyYW5zZm9ybShzdWJsYXllclRyYW5zZm9ybSk7Cisg
ICAgbGF5ZXItPnNldEFuY2hvclBvaW50KGFuY2hvcik7CisgICAgbGF5ZXItPnNldFBvc2l0aW9u
KHBvc2l0aW9uKTsKKyAgICBsYXllci0+c2V0Qm91bmRzKGJvdW5kcyk7CisgICAgbGF5ZXItPnNl
dFByZXNlcnZlczNEKHByZXNlcnZlczNEKTsKK30KKwordm9pZCBleGVjdXRlQ2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKK3sKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBWZWN0b3I8UmVmUHRy
PExheWVyQ2hyb21pdW0+ID4gZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlN
YXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIsIHJvb3RMYXllciwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBkdW1teVJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1
bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKK30KKworVHJhbnNmb3JtYXRpb25N
YXRyaXggcmVtb3ZlM0RDb21wb25lbnRPZk1hdHJpeChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbWF0KQoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJldCA9IG1hdDsKKyAgICByZXQu
c2V0TTEzKDApOworICAgIHJldC5zZXRNMjMoMCk7CisgICAgcmV0LnNldE0zMSgwKTsKKyAgICBy
ZXQuc2V0TTMyKDApOworICAgIHJldC5zZXRNMzMoMSk7CisgICAgcmV0LnNldE0zNCgwKTsKKyAg
ICByZXQuc2V0TTQzKDApOworICAgIHJldHVybiByZXQ7Cit9CisKK2NsYXNzIExheWVyQ2hyb21p
dW1XaXRoRm9yY2VkRHJhd3NDb250ZW50IDogcHVibGljIExheWVyQ2hyb21pdW0geworcHVibGlj
OgorICAgIGV4cGxpY2l0IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KENDTGF5
ZXJEZWxlZ2F0ZSogZGVsZWdhdGUpCisgICAgICAgIDogTGF5ZXJDaHJvbWl1bShkZWxlZ2F0ZSkK
KyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KK307CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVy
aWZ5VHJhbnNmb3Jtc0Zvck5vT3BMYXllcikKK3sKKyAgICAvLyBTYW5pdHkgY2hlY2s6IEZvciBs
YXllcnMgcG9zaXRpb25lZCBhdCB6ZXJvLCB3aXRoIHplcm8gc2l6ZSwKKyAgICAvLyBhbmQgd2l0
aCBpZGVudGl0eSB0cmFuc2Zvcm1zLCB0aGVuIHRoZSBkcmF3VHJhbnNmb3JtLAorICAgIC8vIHNj
cmVlblNwYWNlVHJhbnNmb3JtLCBhbmQgdGhlIGhpZXJhcmNoeSBwYXNzZWQgb24gdG8gY2hpbGRy
ZW4KKyAgICAvLyBsYXllcnMgc2hvdWxkIGFsc28gYmUgaWRlbnRpdHkgdHJhbnNmb3Jtcy4KKwor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
MCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKDApOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAg
IHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxk
KTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4w
ZiksIEludFNpemUoMCwgMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9p
bnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMCwgMCksIGZh
bHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwg
RmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgwLCAwKSwgZmFsc2UpOworCisgICAgZXhl
Y3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkpOwor
CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIHBhcmVudC0+
ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0
eU1hdHJpeCwgcGFyZW50LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7
CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGNoaWxkLT5z
Y3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChp
ZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllf
TUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGlsZC0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSk7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVy
aWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVyKQoreworICAgIC8vIE5PVEUgQ0FSRUZVTExZOgor
ICAgIC8vIExheWVyQ2hyb21pdW06OnBvc2l0aW9uIGlzIGFjdHVhbGx5IHRoZSBzdW0gb2YgYW5j
aG9yUG9pbnQgKGluIHBpeGVsIHNwYWNlKSBhbmQgYWN0dWFsIHBvc2l0aW9uLiBCZWNhdXNlIG9m
IHRoaXMsIHRoZQorICAgIC8vIHZhbHVlIG9mIExheWVyQ2hyb21pdW06OnBvc2l0aW9uKCkgY2hh
bmdlcyBpZiB0aGUgYW5jaG9yIGNoYW5nZXMsIGV2ZW4gdGhvdWdoIHRoZSBsYXllciBpcyBub3Qg
YWN0dWFsbHkgbG9jYXRlZCBpbiBhCisgICAgLy8gZGlmZmVyZW50IHBvc2l0aW9uLiBXaGVuIHdl
IGluaXRpYWxpemUgbGF5ZXJzIGZvciB0ZXN0aW5nIGhlcmUsIHdlIG5lZWQgdG8gaW5pdGlhbGl6
ZSB0aGF0IHVuaW50dXRpdmUgcG9zaXRpb24gdmFsdWUuCisKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgbGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2Uo
KTsKKworICAgIC8vIENhc2UgMTogc2V0dGluZyB0aGUgc3VibGF5ZXIgdHJhbnNmb3JtIHNob3Vs
ZCBub3QgYWZmZWN0IHRoaXMgbGF5ZXIncyBkcmF3IHRyYW5zZm9ybSBvciBzY3JlZW4tc3BhY2Ug
dHJhbnNmb3JtLgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFyYml0cmFyeVRyYW5zbGF0aW9u
OworICAgIGFyYml0cmFyeVRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgxMC4wLCAyMC4wKTsKKyAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
YXJiaXRyYXJ5VHJhbnNsYXRpb24sIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQo
MC4wZiwgMC4wZiksIEludFNpemUoMCwgMCksIGZhbHNlKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKKyAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7
CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5z
Y3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKworICAgIC8vIENhc2UgMjogc2V0dGluZyB0aGUgYm91
bmRzIG9mIHRoZSBsYXllciBzaG91bGQgcmVzdWx0IGluIGEgZHJhdyB0cmFuc2Zvcm0gdGhhdCB0
cmFuc2xhdGVzIHRvIGhhbGYgdGhlIHdpZHRoIGFuZCBoZWlnaHQuCisgICAgLy8gICAgICAgICBU
aGUgc2NyZWVuLXNwYWNlIHRyYW5zZm9ybSBzaG91bGQgcmVtYWluIGFzIHRoZSBpZGVudGl0eSwg
YmVjYXVzZSBpdCBkb2VzIG5vdCBkZWFsIHdpdGggdHJhbnNmb3JtaW5nIHRvL2Zyb20gdGhlIGNl
bnRlciBvZiB0aGUgbGF5ZXIuCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNsYXRpb25U
b0NlbnRlcjsKKyAgICB0cmFuc2xhdGlvblRvQ2VudGVyLnRyYW5zbGF0ZSg1LjAsIDYuMCk7Cisg
ICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAu
MGYsIDAuMGYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKKyAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTCh0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9y
bSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgbGF5
ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisgICAgLy8gQ2FzZSAzOiBUaGUgYW5jaG9y
IHBvaW50IGJ5IGl0c2VsZiAod2l0aG91dCBhIGxheWVyIHRyYW5zZm9ybSkgc2hvdWxkIGhhdmUg
bm8gZWZmZWN0IG9uIHRoZSB0cmFuc2Zvcm1zLgorICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLjI1ZiwgMC4yNWYpLCBGbG9hdFBvaW50KDIuNWYsIDMuMGYpLCBJbnRTaXplKDEwLCAx
MiksIGZhbHNlKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KGxheWVyLmdldCgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTCh0cmFuc2xh
dGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklY
X0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3Jt
KCkpOworCisgICAgLy8gQ2FzZSA0OiBBIGNoYW5nZSBpbiAiYWN0dWFsIiBwb3NpdGlvbiBhZmZl
Y3RzIGJvdGggdGhlIGRyYXcgdHJhbnNmb3JtIGFuZCBzY3JlZW4gc3BhY2UgdHJhbnNmb3JtLgor
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBvc2l0aW9uVHJhbnNmb3JtOworICAgIHBvc2l0aW9u
VHJhbnNmb3JtLnRyYW5zbGF0ZSgwLjAsIDEuMik7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhsYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAuMjVmLCAwLjI1ZiksIEZsb2F0UG9pbnQoMi41ZiwgNC4yZiksIEludFNpemUoMTAs
IDEyKSwgZmFsc2UpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2li
aWxpdHkobGF5ZXIuZ2V0KCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBvc2l0
aW9uVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0o
KSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocG9zaXRpb25UcmFuc2Zvcm0sIGxh
eWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKworICAgIC8vIENhc2UgNTogSW4gdGhlIGNv
cnJlY3Qgc2VxdWVuY2Ugb2YgdHJhbnNmb3JtcywgdGhlIGxheWVyIHRyYW5zZm9ybSBzaG91bGQg
cHJlLW11bHRpcGx5IHRoZSB0cmFuc2xhdGlvblRvQ2VudGVyLiBUaGlzIGlzIGVhc2lseSB0ZXN0
ZWQgYnkKKyAgICAvLyAgICAgICAgIHVzaW5nIGEgc2NhbGUgdHJhbnNmb3JtLCBiZWNhdXNlIHNj
YWxlIGFuZCB0cmFuc2xhdGlvbiBhcmUgbm90IGNvbW11dGF0aXZlLgorICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGxheWVyVHJhbnNmb3JtOworICAgIGxheWVyVHJhbnNmb3JtLnNjYWxlM2QoMi4w
LCAyLjAsIDEuMCk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQo
KSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYp
LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKKyAgICBl
eGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsK
KyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChsYXllclRyYW5zZm9ybSAqIHRyYW5zbGF0
aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhf
QUxNT1NUX0VRVUFMKGxheWVyVHJhbnNmb3JtLCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KSk7CisKKyAgICAvLyBDYXNlIDY6IFRoZSBsYXllciB0cmFuc2Zvcm0gc2hvdWxkIG9jY3VyIHdp
dGggcmVzcGVjdCB0byB0aGUgYW5jaG9yIHBvaW50LgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHRyYW5zbGF0aW9uVG9BbmNob3I7CisgICAgdHJhbnNsYXRpb25Ub0FuY2hvci50cmFuc2xhdGUo
NS4wLCAwLjApOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkUmVzdWx0ID0gdHJh
bnNsYXRpb25Ub0FuY2hvciAqIGxheWVyVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0FuY2hvci5p
bnZlcnNlKCk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5nZXQoKSwg
bGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuNWYsIDAuMGYpLCBG
bG9hdFBvaW50KDUuMGYsIDAuMGYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKKyAgICBleGVj
dXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKKyAg
ICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChleHBlY3RlZFJlc3VsdCAqIHRyYW5zbGF0aW9u
VG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxN
T1NUX0VRVUFMKGV4cGVjdGVkUmVzdWx0LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7
CisKKyAgICAvLyBDYXNlIDc6IFZlcmlmeSB0aGF0IHBvc2l0aW9uIHByZS1tdWx0aXBsaWVzIHRo
ZSBsYXllciB0cmFuc2Zvcm0uCisgICAgLy8gICAgICAgICBUaGUgY3VycmVudCBpbXBsZW1lbnRh
dGlvbiBvZiBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkgZG9lcyB0aGlzIGlt
cGxpY2l0bHksIGJ1dCBpdCBpcworICAgIC8vICAgICAgICAgc3RpbGwgd29ydGggdGVzdGluZyB0
byBkZXRlY3QgYWNjaWRlbnRhbCByZWdyZXNzaW9ucy4KKyAgICBleHBlY3RlZFJlc3VsdCA9IHBv
c2l0aW9uVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0FuY2hvciAqIGxheWVyVHJhbnNmb3JtICog
dHJhbnNsYXRpb25Ub0FuY2hvci5pbnZlcnNlKCk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhsYXllci5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAuNWYsIDAuMGYpLCBGbG9hdFBvaW50KDUuMGYsIDEuMmYpLCBJbnRTaXplKDEwLCAx
MiksIGZhbHNlKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmls
aXR5KGxheWVyLmdldCgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChleHBlY3Rl
ZFJlc3VsdCAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOwor
ICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGV4cGVjdGVkUmVzdWx0LCBsYXllci0+c2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbXBsZUhpZXJhcmNoeSkKK3sKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFy
ZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVt
PiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gZ3JhbmRDaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBwYXJlbnQt
PmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKKyAg
ICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZCk7CisKKyAgICAvLyBDYXNlIDE6IHBhcmVudCdz
IGFuY2hvclBvaW50IHNob3VsZCBub3QgYWZmZWN0IGNoaWxkIG9yIGdyYW5kQ2hpbGQuCisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxk
VHJhbnNsYXRpb25Ub0NlbnRlcjsKKyAgICBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIudHJhbnNs
YXRlKDguMCwgOS4wKTsKKyAgICBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlci50cmFuc2xh
dGUoMzguMCwgMzkuMCk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjI1Ziwg
MC4yNWYpLCBGbG9hdFBvaW50KDIuNWYsIDMuMGYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsK
KyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQo
MC4wZiwgMC4wZiksIEludFNpemUoMTYsIDE4KSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJ
bnRTaXplKDc2LCA3OCksIGZhbHNlKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1Rf
RVFVQUwoY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsK
KyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgY2hpbGQtPnNj
cmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGdy
YW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkp
OworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBncmFuZENo
aWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKworICAgIC8vIENhc2UgMjogcGFyZW50J3Mg
cG9zaXRpb24gYWZmZWN0cyBjaGlsZCBhbmQgZ3JhbmRDaGlsZC4KKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBwYXJlbnRQb3NpdGlvblRyYW5zZm9ybTsKKyAgICBwYXJlbnRQb3NpdGlvblRyYW5z
Zm9ybS50cmFuc2xhdGUoMC4wLCAxLjIpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9p
bnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQb2ludCgyLjVmLCA0LjJmKSwgSW50U2l6ZSgxMCwgMTIp
LCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBG
bG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2LCAxOCksIGZhbHNlKTsKKyAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBm
LCAwLjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkpOworICAgIFZFUklGWV9NQVRS
SVhfQUxNT1NUX0VRVUFMKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtICogY2hpbGRUcmFuc2xhdGlv
blRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChwYXJlbnRQb3NpdGlvblRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudFBvc2l0aW9u
VHJhbnNmb3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRy
YXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50UG9z
aXRpb25UcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisg
ICAgLy8gQ2FzZSAzOiBwYXJlbnQncyBsb2NhbCB0cmFuc2Zvcm0gYWZmZWN0cyBjaGlsZCBhbmQg
Z3JhbmRjaGlsZAorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudExheWVyVHJhbnNmb3Jt
OworICAgIHBhcmVudExheWVyVHJhbnNmb3JtLnNjYWxlM2QoMi4wLCAyLjAsIDEuMCk7CisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hvcjsKKyAgICBwYXJl
bnRUcmFuc2xhdGlvblRvQW5jaG9yLnRyYW5zbGF0ZSgyLjUsIDMuMCk7CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggcGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtID0gcGFyZW50VHJhbnNsYXRpb25U
b0FuY2hvciAqIHBhcmVudExheWVyVHJhbnNmb3JtICogcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hv
ci5pbnZlcnNlKCk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0
KCksIHBhcmVudExheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjI1
ZiwgMC4yNWYpLCBGbG9hdFBvaW50KDIuNWYsIDMuMGYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNl
KTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9p
bnQoMC4wZiwgMC4wZiksIEludFNpemUoMTYsIDE4KSwgZmFsc2UpOworICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYp
LCBJbnRTaXplKDc2LCA3OCksIGZhbHNlKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtICogY2hpbGRUcmFuc2xhdGlvblRvQ2Vu
dGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9F
UVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFu
c2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1Ry
YW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3Np
dGVUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisgICAg
Ly8gQ2FzZSA0OiBwYXJlbnQncyBzdWJsYXllck1hdHJpeCBhZmZlY3RzIGNoaWxkIGFuZCBncmFu
ZGNoaWxkCisgICAgLy8gICAgICAgICBzY2FsaW5nIGlzIHVzZWQgaGVyZSBhZ2FpbiBzbyB0aGF0
IHRoZSBjb3JyZWN0IHNlcXVlbmNlIG9mIHRyYW5zZm9ybXMgaXMgcHJvcGVybHkgdGVzdGVkLgor
ICAgIC8vICAgICAgICAgTm90ZSB0aGF0IHByZXNlcnZlczNEIGlzIGZhbHNlLCBidXQgdGhlIHN1
YmxheWVyIG1hdHJpeCBzaG91bGQgcmV0YWluIGl0cyAzRCBwcm9wZXJ0aWVzIHdoZW4gZ2l2ZW4g
dG8gY2hpbGQuCisgICAgLy8gICAgICAgICBCdXQgdGhlbiwgdGhlIGNoaWxkIGFsc28gZG9lcyBu
b3QgcHJlc2VydmUzRC4gV2hlbiBpdCBnaXZlcyBpdHMgaGllcmFyY2h5IHRvIHRoZSBncmFuZENo
aWxkLCBpdCBzaG91bGQgYmUgZmxhdHRlbmVkIHRvIDJELgorICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHBhcmVudFN1YmxheWVyTWF0cml4OworICAgIHBhcmVudFN1YmxheWVyTWF0cml4LnNjYWxl
M2QoMTAuMCwgMTAuMCwgMy4zKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRUcmFu
c2xhdGlvblRvQ2VudGVyOworICAgIHBhcmVudFRyYW5zbGF0aW9uVG9DZW50ZXIudHJhbnNsYXRl
KDUuMCwgNi4wKTsKKyAgICAvLyBTdWJsYXllciBtYXRyaXggaXMgYXBwbGllZCB0byB0aGUgY2Vu
dGVyIG9mIHRoZSBwYXJlbnQgbGF5ZXIuCisgICAgcGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtID0g
cGFyZW50VHJhbnNsYXRpb25Ub0FuY2hvciAqIHBhcmVudExheWVyVHJhbnNmb3JtICogcGFyZW50
VHJhbnNsYXRpb25Ub0FuY2hvci5pbnZlcnNlKCkKKyAgICAgICAgICAgICogcGFyZW50VHJhbnNs
YXRpb25Ub0NlbnRlciAqIHBhcmVudFN1YmxheWVyTWF0cml4ICogcGFyZW50VHJhbnNsYXRpb25U
b0NlbnRlci5pbnZlcnNlKCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZmxhdHRlbmVkQ29t
cG9zaXRlVHJhbnNmb3JtID0gcmVtb3ZlM0RDb21wb25lbnRPZk1hdHJpeChwYXJlbnRDb21wb3Np
dGVUcmFuc2Zvcm0pOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50Lmdl
dCgpLCBwYXJlbnRMYXllclRyYW5zZm9ybSwgcGFyZW50U3VibGF5ZXJNYXRyaXgsIEZsb2F0UG9p
bnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQb2ludCgyLjVmLCAzLjBmKSwgSW50U2l6ZSgxMCwgMTIp
LCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBG
bG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2LCAxOCksIGZhbHNlKTsKKyAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBm
LCAwLjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkpOworICAgIFZFUklGWV9NQVRS
SVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRp
b25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9B
TE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZmxhdHRlbmVkQ29t
cG9zaXRlVHJhbnNmb3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hp
bGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZmxh
dHRlbmVkQ29tcG9zaXRlVHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKKworICAgIC8vIENhc2UgNTogc2FtZSBhcyBDYXNlIDQsIGV4Y2VwdCB0aGF0IGNoaWxk
IGRvZXMgcHJlc2VydmUgM0QsIHNvIHRoZSBncmFuZENoaWxkIHNob3VsZCByZWNlaXZlIHRoZSBu
b24tZmxhdHRlbmVkIGNvbXBvc2l0ZSB0cmFuc2Zvcm0uCisgICAgLy8KKyAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgcGFyZW50TGF5ZXJUcmFuc2Zvcm0sIHBh
cmVudFN1YmxheWVyTWF0cml4LCBGbG9hdFBvaW50KDAuMjVmLCAwLjI1ZiksIEZsb2F0UG9pbnQo
Mi41ZiwgMy4wZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6
ZSgxNiwgMTgpLCB0cnVlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5k
Q2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxz
ZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJl
bnQuZ2V0KCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0
ZVRyYW5zZm9ybSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zv
cm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJh
bnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJ
WF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtICogZ3JhbmRDaGlsZFRyYW5z
bGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZ
X01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBncmFuZENoaWxk
LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlUmVuZGVyU3VyZmFjZSkKK3sKKyAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgw
KTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGdyYW5k
Q2hpbGQgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQo
MCkpOworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRk
Q2hpbGQoY2hpbGQpOworICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkKTsKKworICAgIC8v
IENoaWxkIGlzIHNldCB1cCBzbyB0aGF0IGEgbmV3IHJlbmRlciBzdXJmYWNlIHNob3VsZCBiZSBj
cmVhdGVkLgorICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNWYpOworCisgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50
TGF5ZXJUcmFuc2Zvcm07CisgICAgcGFyZW50TGF5ZXJUcmFuc2Zvcm0uc2NhbGUzZCgyLjAsIDIu
MCwgMS4wKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRUcmFuc2xhdGlvblRvQW5j
aG9yOworICAgIHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3IudHJhbnNsYXRlKDIuNSwgMy4wKTsK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRTdWJsYXllck1hdHJpeDsKKyAgICBwYXJl
bnRTdWJsYXllck1hdHJpeC5zY2FsZTNkKDEwLjAsIDEwLjAsIDMuMyk7CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggcGFyZW50VHJhbnNsYXRpb25Ub0NlbnRlcjsKKyAgICBwYXJlbnRUcmFuc2xh
dGlvblRvQ2VudGVyLnRyYW5zbGF0ZSg1LjAsIDYuMCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggcGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtID0gcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hvciAq
IHBhcmVudExheWVyVHJhbnNmb3JtICogcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hvci5pbnZlcnNl
KCkKKyAgICAgICAgICAgICogcGFyZW50VHJhbnNsYXRpb25Ub0NlbnRlciAqIHBhcmVudFN1Ymxh
eWVyTWF0cml4ICogcGFyZW50VHJhbnNsYXRpb25Ub0NlbnRlci5pbnZlcnNlKCk7CisgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyOworICAgIGNoaWxkVHJh
bnNsYXRpb25Ub0NlbnRlci50cmFuc2xhdGUoOC4wLCA5LjApOworCisgICAgLy8gQ2hpbGQncyBy
ZW5kZXIgc3VyZmFjZSBzaG91bGQgbm90IGV4aXN0IHlldC4KKyAgICBBU1NFUlRfRkFMU0UoY2hp
bGQtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KHBhcmVudC5nZXQoKSwgcGFyZW50TGF5ZXJUcmFuc2Zvcm0sIHBhcmVudFN1YmxheWVyTWF0cml4
LCBGbG9hdFBvaW50KDAuMjVmLCAwLjI1ZiksIEZsb2F0UG9pbnQoMi41ZiwgMy4wZiksIEludFNp
emUoMTAsIDEyKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hp
bGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBm
LCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxNiwgMTgpLCBmYWxzZSk7
CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQu
Z2V0KCkpOworCisgICAgLy8gUmVuZGVyIHN1cmZhY2Ugc2hvdWxkIGhhdmUgYmVlbiBjcmVhdGVk
IG5vdy4KKyAgICBBU1NFUlRfVFJVRShjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NF
UlRfRVEoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2Uo
KSk7CisKKyAgICAvLyBUaGUgY2hpbGQgbGF5ZXIncyBkcmF3IHRyYW5zZm9ybSBzaG91bGQgcmVm
ZXIgdG8gaXRzIG5ldyByZW5kZXIgc3VyZmFjZTsgdGhleSBvbmx5IGRpZmZlciBieSBhIHRyYW5z
bGF0aW9uIHRvIGNlbnRlci4KKyAgICAvLyBUaGUgc2NyZWVuLXNwYWNlIHRyYW5zZm9ybSwgaG93
ZXZlciwgc2hvdWxkIHN0aWxsIHJlZmVyIHRvIHRoZSByb290LgorICAgIFZFUklGWV9NQVRSSVhf
QUxNT1NUX0VRVUFMKGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zv
cm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJh
bnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisKKyAgICAvLyBXaXRob3V0
IGNsaXBwaW5nIGFuZCBzY2lzc29yaW5nLCB0aGUgb3JpZ2luIHRyYW5zZm9ybSBhbmQgZHJhdyB0
cmFuc2Zvcm0gKGluIHRoaXMgcGFydGljdWxhciBjYXNlKSBzaG91bGQgYmUgdGhlIHNhbWUuCisg
ICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBj
aGlsZC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKSk7CisgICAgVkVS
SUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGlsZC0+
dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5kcmF3VHJhbnNmb3JtKCkpOworCit9CisKK1RFU1QoQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclJlbmRlclN1cmZhY2VI
aWVyYXJjaHkpCit7CisgICAgLy8gVGhpcyB0ZXN0IGNyZWF0ZXMgYSBtb3JlIGNvbXBsZXggdHJl
ZSBhbmQgdmVyaWZpZXMgaXQgYWxsIGF0IG9uY2UuIFRoaXMgY292ZXJzIHRoZSBmb2xsb3dpbmcg
Y2FzZXM6CisgICAgLy8gICAtIGxheWVycyB0aGF0IGFyZSBkZXNjcmliZWQgdy5yLnQuIGEgcmVu
ZGVyIHN1cmZhY2U6IHNob3VsZCBoYXZlIGRyYXcgdHJhbnNmb3JtcyBkZXNjcmliZWQgdy5yLnQu
IHRoYXQgc3VyZmFjZQorICAgIC8vICAgLSBBIHJlbmRlciBzdXJmYWNlIGRlc2NyaWJlZCB3LnIu
dC4gYW4gYW5jZXN0b3IgcmVuZGVyIHN1cmZhY2U6IHNob3VsZCBoYXZlIGEgZHJhdyB0cmFuc2Zv
cm0gZGVzY3JpYmVkIHcuci50LiB0aGF0IGFuY2VzdG9yIHN1cmZhY2UKKyAgICAvLyAgIC0gU2Fu
aXR5IGNoZWNrIG9uIHJlY3Vyc2lvbjogdmVyaWZ5IHRyYW5zZm9ybXMgb2YgbGF5ZXJzIGRlc2Ny
aWJlZCB3LnIudC4gYSByZW5kZXIgc3VyZmFjZSB0aGF0IGlzIGRlc2NyaWJlZCB3LnIudC4gYW4g
YW5jZXN0b3IgcmVuZGVyIHN1cmZhY2UuCisgICAgLy8gICAtIHZlcmlmeWluZyB0aGF0IGVhY2gg
bGF5ZXIgaGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBjb3JyZWN0IHJlbmRlclN1cmZhY2UgYW5kIHRh
cmdldFJlbmRlclN1cmZhY2UgdmFsdWVzLgorCisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBh
cmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gcmVuZGVyU3VyZmFjZTEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRy
PExheWVyQ2hyb21pdW0+IHJlbmRlclN1cmZhY2UyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDAp
OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZE9mUm9vdCA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGRPZlJTMSA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGRPZlJT
MiA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
Z3JhbmRDaGlsZE9mUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGdyYW5kQ2hpbGRPZlJTMSA9IGFk
b3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgwKSk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBncmFuZENoaWxkT2ZS
UzIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoMCkp
OworICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hp
bGQocmVuZGVyU3VyZmFjZTEpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGRPZlJvb3QpOwor
ICAgIHJlbmRlclN1cmZhY2UxLT5hZGRDaGlsZChjaGlsZE9mUlMxKTsKKyAgICByZW5kZXJTdXJm
YWNlMS0+YWRkQ2hpbGQocmVuZGVyU3VyZmFjZTIpOworICAgIHJlbmRlclN1cmZhY2UyLT5hZGRD
aGlsZChjaGlsZE9mUlMyKTsKKyAgICBjaGlsZE9mUm9vdC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZE9m
Um9vdCk7CisgICAgY2hpbGRPZlJTMS0+YWRkQ2hpbGQoZ3JhbmRDaGlsZE9mUlMxKTsKKyAgICBj
aGlsZE9mUlMyLT5hZGRDaGlsZChncmFuZENoaWxkT2ZSUzIpOworCisgICAgLy8gSW4gY29tYmlu
YXRpb24gd2l0aCBkZXNjZW5kYW50RHJhd3NDb250ZW50LCBvcGFjaXR5ICE9IDEgZm9yY2VzIHRo
ZSBsYXllciB0byBoYXZlIGEgbmV3IHJlbmRlclN1cmZhY2UuCisgICAgcmVuZGVyU3VyZmFjZTEt
PnNldE9wYWNpdHkoMC41Zik7CisgICAgcmVuZGVyU3VyZmFjZTItPnNldE9wYWNpdHkoMC4zM2Yp
OworCisgICAgLy8gQWxsIGxheWVycyBpbiB0aGUgdHJlZSBhcmUgaW5pdGlhbGl6ZWQgd2l0aCBh
biBhbmNob3IgYXQgMi41IGFuZCBhIHNpemUgb2YgKDEwLDEwKS4KKyAgICAvLyBtYXRyaXggIkEi
IGlzIHRoZSBjb21wb3NpdGUgbGF5ZXIgdHJhbnNmb3JtIHVzZWQgaW4gYWxsIGxheWVycywgY2Vu
dGVyZWQgYWJvdXQgdGhlIGFuY2hvciBwb2ludAorICAgIC8vIG1hdHJpeCAiQiIgaXMgdGhlIHN1
YmxheWVyIHRyYW5zZm9ybSB1c2VkIGluIGFsbCBsYXllcnMsIGNlbnRlcmVkIGFib3V0IHRoZSBj
ZW50ZXIgcG9zaXRpb24gb2YgdGhlIGxheWVyLgorICAgIC8vCisgICAgLy8geCBjb21wb25lbnQg
dGVzdHMgdGhhdCBsYXllclRyYW5zZm9ybSBhbmQgc3VibGF5ZXJUcmFuc2Zvcm0gYXJlIGRvbmUg
aW4gdGhlIHJpZ2h0IG9yZGVyICh0cmFuc2xhdGlvbiBhbmQgc2NhbGUgYXJlIG5vbmNvbW11dGF0
aXZlKS4KKyAgICAvLyB5IGNvbXBvbmVudCBoYXMgYSB0cmFuc2xhdGlvbiBieSAxLjAgZm9yIGV2
ZXJ5IGFuY2VzdG9yLCB3aGljaCBpbmRpY2F0ZXMgdGhlICJkZXB0aCIgb2YgdGhlIGxheWVyIGlu
IHRoZSBoaWVyYXJjaHkuCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNsYXRpb25Ub0Fu
Y2hvcjsKKyAgICB0cmFuc2xhdGlvblRvQW5jaG9yLnRyYW5zbGF0ZSgyLjUsIDAuMCk7CisgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNsYXRpb25Ub0NlbnRlcjsKKyAgICB0cmFuc2xhdGlv
blRvQ2VudGVyLnRyYW5zbGF0ZSg1LjAsIDUuMCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDEuMCwgMS4wKTsK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdWJsYXllclRyYW5zZm9ybTsKKyAgICBzdWJsYXll
clRyYW5zZm9ybS5zY2FsZTNkKDEwLjAsIDEuMCwgMS4wKTsKKworICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IEEgPSB0cmFuc2xhdGlvblRvQW5jaG9yICogbGF5ZXJUcmFuc2Zvcm0gKiB0cmFuc2xh
dGlvblRvQW5jaG9yLmludmVyc2UoKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBCID0gdHJh
bnNsYXRpb25Ub0NlbnRlciAqIHN1YmxheWVyVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0NlbnRl
ci5pbnZlcnNlKCk7CisKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5n
ZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIHN1YmxheWVyVHJhbnNmb3JtLCBGbG9hdFBvaW50KDAuMjVm
LCAwLjBmKSwgRmxvYXRQb2ludCgyLjVmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7
CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyZW5kZXJTdXJmYWNlMS5nZXQoKSwg
bGF5ZXJUcmFuc2Zvcm0sIHN1YmxheWVyVHJhbnNmb3JtLCBGbG9hdFBvaW50KDAuMjVmLCAwLjBm
KSwgRmxvYXRQb2ludCgyLjVmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyZW5kZXJTdXJmYWNlMi5nZXQoKSwgbGF5ZXJU
cmFuc2Zvcm0sIHN1YmxheWVyVHJhbnNmb3JtLCBGbG9hdFBvaW50KDAuMjVmLCAwLjBmKSwgRmxv
YXRQb2ludCgyLjVmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZE9mUm9vdC5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0s
IHN1YmxheWVyVHJhbnNmb3JtLCBGbG9hdFBvaW50KDAuMjVmLCAwLjBmKSwgRmxvYXRQb2ludCgy
LjVmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhjaGlsZE9mUlMxLmdldCgpLCBsYXllclRyYW5zZm9ybSwgc3VibGF5ZXJU
cmFuc2Zvcm0sIEZsb2F0UG9pbnQoMC4yNWYsIDAuMGYpLCBGbG9hdFBvaW50KDIuNWYsIDAuMGYp
LCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKGNoaWxkT2ZSUzIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBzdWJsYXllclRyYW5zZm9ybSwg
RmxvYXRQb2ludCgwLjI1ZiwgMC4wZiksIEZsb2F0UG9pbnQoMi41ZiwgMC4wZiksIEludFNpemUo
MTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRD
aGlsZE9mUm9vdC5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIHN1YmxheWVyVHJhbnNmb3JtLCBGbG9h
dFBvaW50KDAuMjVmLCAwLjBmKSwgRmxvYXRQb2ludCgyLjVmLCAwLjBmKSwgSW50U2l6ZSgxMCwg
MTApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxk
T2ZSUzEuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBzdWJsYXllclRyYW5zZm9ybSwgRmxvYXRQb2lu
dCgwLjI1ZiwgMC4wZiksIEZsb2F0UG9pbnQoMi41ZiwgMC4wZiksIEludFNpemUoMTAsIDEwKSwg
ZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZE9mUlMy
LmdldCgpLCBsYXllclRyYW5zZm9ybSwgc3VibGF5ZXJUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMC4y
NWYsIDAuMGYpLCBGbG9hdFBvaW50KDIuNWYsIDAuMGYpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNl
KTsKKworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFy
ZW50LmdldCgpKTsKKworICAgIC8vIE9ubHkgbGF5ZXJzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0
aCByZW5kZXIgc3VyZmFjZXMgc2hvdWxkIGhhdmUgYW4gYWN0dWFsIHJlbmRlclN1cmZhY2UoKSB2
YWx1ZS4KKyAgICAvLworICAgIEFTU0VSVF9UUlVFKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsK
KyAgICBBU1NFUlRfRkFMU0UoY2hpbGRPZlJvb3QtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNT
RVJUX0ZBTFNFKGdyYW5kQ2hpbGRPZlJvb3QtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBBU1NF
UlRfVFJVRShyZW5kZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfRkFM
U0UoY2hpbGRPZlJTMS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfRkFMU0UoZ3JhbmRD
aGlsZE9mUlMxLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgQVNTRVJUX1RSVUUocmVuZGVyU3Vy
ZmFjZTItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGNoaWxkT2ZSUzItPnJl
bmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGRPZlJTMi0+cmVuZGVy
U3VyZmFjZSgpKTsKKworICAgIC8vIFZlcmlmeSBhbGwgdGFyZ2V0UmVuZGVyU3VyZmFjZSBhY2Nl
c3NvcnMKKyAgICAvLworICAgIEVYUEVDVF9FUShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSwgcGFy
ZW50LT50YXJnZXRSZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9FUShwYXJlbnQtPnJlbmRl
clN1cmZhY2UoKSwgY2hpbGRPZlJvb3QtPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CisgICAgRVhQ
RUNUX0VRKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLCBncmFuZENoaWxkT2ZSb290LT50YXJnZXRS
ZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2UxLT5yZW5kZXJT
dXJmYWNlKCksIHJlbmRlclN1cmZhY2UxLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkpOworICAgIEVY
UEVDVF9FUShyZW5kZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpLCBjaGlsZE9mUlMxLT50YXJn
ZXRSZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9FUShyZW5kZXJTdXJmYWNlMS0+cmVuZGVy
U3VyZmFjZSgpLCBncmFuZENoaWxkT2ZSUzEtPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CisKKyAg
ICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZTItPnJlbmRlclN1cmZhY2UoKSwgcmVuZGVyU3VyZmFj
ZTItPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CisgICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2Uy
LT5yZW5kZXJTdXJmYWNlKCksIGNoaWxkT2ZSUzItPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7Cisg
ICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2UyLT5yZW5kZXJTdXJmYWNlKCksIGdyYW5kQ2hpbGRP
ZlJTMi0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKKworICAgIC8vIFZlcmlmeSBsYXllciBkcmF3
IHRyYW5zZm9ybXMKKyAgICAvLyAgbm90ZSB0aGF0IGRyYXcgdHJhbnNmb3JtcyBhcmUgZGVzY3Jp
YmVkIHdpdGggcmVzcGVjdCB0byB0aGUgbmVhcmVzdCBhbmNlc3RvciByZW5kZXIgc3VyZmFjZQor
ICAgIC8vICBidXQgc2NyZWVuIHNwYWNlIHRyYW5zZm9ybXMgYXJlIGRlc2NyaWJlZCB3aXRoIHJl
c3BlY3QgdG8gdGhlIHJvb3QuCisgICAgLy8KKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVB
TChBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgcGFyZW50LT5kcmF3VHJhbnNmb3JtKCkpOworICAg
IFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50
ZXIsIGNoaWxkT2ZSb290LT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxN
T1NUX0VRVUFMKEEgKiBCICogQSAqIEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRD
aGlsZE9mUm9vdC0+ZHJhd1RyYW5zZm9ybSgpKTsKKworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NU
X0VRVUFMKHRyYW5zbGF0aW9uVG9DZW50ZXIsIHJlbmRlclN1cmZhY2UxLT5kcmF3VHJhbnNmb3Jt
KCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEIgKiBBICogdHJhbnNsYXRpb25U
b0NlbnRlciwgY2hpbGRPZlJTMS0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklY
X0FMTU9TVF9FUVVBTChCICogQSAqIEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRD
aGlsZE9mUlMxLT5kcmF3VHJhbnNmb3JtKCkpOworCisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1Rf
RVFVQUwodHJhbnNsYXRpb25Ub0NlbnRlciwgcmVuZGVyU3VyZmFjZTItPmRyYXdUcmFuc2Zvcm0o
KSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQiAqIEEgKiB0cmFuc2xhdGlvblRv
Q2VudGVyLCBjaGlsZE9mUlMyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhf
QUxNT1NUX0VRVUFMKEIgKiBBICogQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENo
aWxkT2ZSUzItPmRyYXdUcmFuc2Zvcm0oKSk7CisKKyAgICAvLyBWZXJpZnkgbGF5ZXIgc2NyZWVu
LXNwYWNlIHRyYW5zZm9ybXMKKyAgICAvLworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFM
KEEsIHBhcmVudC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9B
TE1PU1RfRVFVQUwoQSAqIEIgKiBBLCBjaGlsZE9mUm9vdC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICogQiAqIEEsIGdy
YW5kQ2hpbGRPZlJvb3QtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisgICAgVkVSSUZZX01B
VFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBLCByZW5kZXJTdXJmYWNlMS0+c2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICog
QiAqIEEsIGNoaWxkT2ZSUzEtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9N
QVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIEIgKiBBICogQiAqIEEsIGdyYW5kQ2hpbGRP
ZlJTMS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisKKyAgICBWRVJJRllfTUFUUklYX0FMTU9T
VF9FUVVBTChBICogQiAqIEEgKiBCICogQSwgcmVuZGVyU3VyZmFjZTItPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIEIg
KiBBICogQiAqIEEsIGNoaWxkT2ZSUzItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIFZF
UklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSAqIEIgKiBBICogQiAqIEEgKiBCICog
QSwgZ3JhbmRDaGlsZE9mUlMyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKworICAgIC8vIFZl
cmlmeSByZW5kZXIgc3VyZmFjZSB0cmFuc2Zvcm1zLgorICAgIC8vCisgICAgLy8gT3JpZ2luIHRy
YW5zZm9ybSBvZiByZW5kZXIgc3VyZmFjZSAxIGlzIGRlc2NyaWJlZCB3aXRoIHJlc3BlY3QgdG8g
cm9vdC4KKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEsIHJlbmRlclN1
cmZhY2UxLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpKTsKKyAgICAvLyBPcmln
aW4gdHJhbnNmb3JtIG9mIHJlbmRlciBzdXJmYWNlIDIgaXMgZGVzY3JpYmVkIHdpdGggcmVzcGVj
dCB0byByZW5kZXIgc3VyZmFjZSAyLgorICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEIg
KiBBLCByZW5kZXJTdXJmYWNlMi0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFuc2Zvcm0oKSk7
CisKKyAgICAvLyBTYW5pdHkgY2hlY2suIElmIHRoZXNlIGZhaWwgdGhlcmUgaXMgcHJvYmFibHkg
YSBidWcgaW4gdGhlIHRlc3QgaXRzZWxmLgorICAgIC8vIEl0IGlzIGV4cGVjdGVkIHRoYXQgd2Ug
Y29ycmVjdGx5IHNldCB1cCB0cmFuc2Zvcm1zIHNvIHRoYXQgdGhlIHktY29tcG9uZW50IG9mIHRo
ZSBzY3JlZW4tc3BhY2UgdHJhbnNmb3JtCisgICAgLy8gZW5jb2RlcyB0aGUgImRlcHRoIiBvZiB0
aGUgbGF5ZXIgaW4gdGhlIHRyZWUuCisgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgcGFyZW50LT5z
Y3JlZW5TcGFjZVRyYW5zZm9ybSgpLm00MigpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMi4wLCBj
aGlsZE9mUm9vdC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tNDIoKSk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDMuMCwgZ3JhbmRDaGlsZE9mUm9vdC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tNDIo
KSk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMi4wLCByZW5kZXJTdXJmYWNlMS0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKS5tNDIoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMuMCwgY2hpbGRPZlJT
MS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tNDIoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQu
MCwgZ3JhbmRDaGlsZE9mUlMxLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLm00MigpKTsKKworICAg
IEVYUEVDVF9GTE9BVF9FUSgzLjAsIHJlbmRlclN1cmZhY2UyLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpLm00MigpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNC4wLCBjaGlsZE9mUlMyLT5zY3JlZW5T
cGFjZVRyYW5zZm9ybSgpLm00MigpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNS4wLCBncmFuZENo
aWxkT2ZSUzItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkubTQyKCkpOworfQorCisvLyBGSVhNRToK
Ky8vIGNvbnRpbnVlIHdvcmtpbmcgb24gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY4OTQyCisvLyAgLSBhZGQgYSB0ZXN0IHRvIHZlcmlmeSBjbGlwcGluZyB0aGF0IGNo
YW5nZXMgdGhlICJjZW50ZXIgcG9pbnQiCisvLyAgLSBhZGQgYSBjYXNlIHRoYXQgY2hlY2tzIGlm
IGEgcmVuZGVyIHN1cmZhY2UncyBkcmF3VHJhbnNmb3JtIGlzIGNvbXB1dGVkIGNvcnJlY3RseS4g
Rm9yIHRoZSBnZW5lcmFsIGNhc2UsIGFuZCBmb3Igc3BlY2lhbCBjYXNlcyB3aGVuIGNsaXBwaW5n
L3NjaXNzb3JpbmcuCisvLyAgLSBhZGQgYSBjYXNlIHRoYXQgY2hlY2tzIGlmIGEgcmVuZGVyIHN1
cmZhY2UncyByZXBsaWNhVHJhbnNmb3JtIGlzIGNvbXB1dGVkIGNvcnJlY3RseS4KKy8vICAtIHRl
c3QgYWxsIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHJlbmRlciBzdXJmYWNlcyBhcmUgY3Jl
YXRlZAorLy8gIC0gaWYgcG9zc2libGUsIHRlc3QgYWxsIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2gg
cmVuZGVyIHN1cmZhY2VzIGFyZSBub3QgY3JlYXRlZAorLy8gIC0gdmVyaWZ5IHRoYXQgdGhlIGxh
eWVyIGxpc3RzIG9mIHJlbmRlciBzdXJmYWNlcyBhcmUgY29ycmVjdCwgdmVyaWZ5IHRoYXQgInRh
cmdldFJlbmRlclN1cmZhY2UiIHZhbHVlcyBmb3IgZWFjaCBsYXllciBhcmUgY29ycmVjdC4KKy8v
ICAtIHRlc3QgdGhlIGNvbXB1dGF0aW9uIG9mIHNjaXNzb3IgcmVjdHMgYW5kIGNvbnRlbnQgcmVj
dHMKKy8vICAtIHRlc3QgdGhlIHNwZWNpYWwgY2FzZXMgZm9yIG1hc2sgbGF5ZXJzIGFuZCByZXBs
aWNhIGxheWVycworLy8gIC0gdGVzdCB0aGUgb3RoZXIgZnVuY3Rpb25zIGluIENDTGF5ZXJUcmVl
SG9zdENvbW1vbgorLy8KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110176</attachid>
            <date>2011-10-07 10:58:55 -0700</date>
            <delta_ts>2011-10-07 15:10:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69197-20111007105854.patch</filename>
            <type>text/plain</type>
            <size>40097</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY4MTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxZDczOTA0ZjEyNTU3NDMx
NzkyNmM0YmRmZmIwZTc4NGFmM2M4NTc1Li5iZWQxMjlmZGEwZjIzZDhhNmY0MGU1ODM4Njg0NmUy
OGRkMjAyZmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMTAtMDcgIFNoYXdu
IFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRmlyc3Qgcm91bmQg
b2YgdW5pdCB0ZXN0cyBmb3IgQ0NMYXllclRyZWVIb3N0Q29tbW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTE5NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFzIHBhcnQgb2YgdGVzdGluZyBpdCB3YXMg
YXBwcm9wcmlhdGUgdG8gZXh0ZW5kIHRoZSBjb21tZW50cworICAgICAgICB0aGF0IGRvY3VtZW50
IGhvdyB0aGUgdHJhbnNmb3JtIGhpZXJhcmNoeSB3b3Jrcy4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbCk6
CisKIDIwMTEtMTAtMDYgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI5Njc5MS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCmluZGV4IGJjZDVhYzczNWVlYmExOTFhYWNi
Y2Y4ZDhjMWYyZmZkZjMzM2ZhMDkuLmJiN2E3ZmM0MDk5YmUwYTgyODMzMmQ3NTg2ZjkzYjZjZGQy
MDM2MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApAQCAt
OTIsMjMgKzkyLDY1IEBAIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiB7CiAgICAgdHlwZWRlZiBW
ZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiBMYXllckxpc3Q7CiAgICAgLy8gQ29tcHV0ZSB0aGUg
bmV3IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGlzIGxh
eWVyIGFuZAotICAgIC8vIGFsbCBpdHMgY2hpbGRyZW4uIEl0J3MgaW1wb3J0YW50IHRvIHJlbWVt
YmVyIHRoYXQgdGhlIGxheWVyJ3MgcG9zaXRpb24KLSAgICAvLyBpcyB0aGUgcG9zaXRpb24gb2Yg
dGhlIGxheWVyJ3MgYW5jaG9yIHBvaW50LiBBbHNvLCB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gdXNl
ZAotICAgIC8vIGFzc3VtZXMgdGhhdCB0aGUgb3JpZ2luIGlzIGF0IHRoZSBsb3dlciBsZWZ0IGV2
ZW4gdGhvdWdoIHRoZSBjb29yZGluYXRlcyB0aGUgYnJvd3NlcgotICAgIC8vIGdpdmVzIHVzIGZv
ciB0aGUgbGF5ZXJzIGFyZSBmb3IgdGhlIHVwcGVyIGxlZnQgY29ybmVyLiBUaGUgWSBmbGlwIGhh
cHBlbnMgdmlhCi0gICAgLy8gdGhlIG9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uIGFwcGxpZWQgYXQg
cmVuZGVyIHRpbWUuCi0gICAgLy8gVGhlIHRyYW5zZm9ybWF0aW9uIGNoYWluIGZvciB0aGUgbGF5
ZXIgaXMgKHVzaW5nIHRoZSBNYXRyaXggeCBWZWN0b3Igb3JkZXIpOgotICAgIC8vIE0gPSBNW3Bd
ICogVHJbbF0gKiBNW2xdICogVHJbY10KLSAgICAvLyBXaGVyZSBNW3BdIGlzIHRoZSBwYXJlbnQg
bWF0cml4IHBhc3NlZCBkb3duIHRvIHRoZSBmdW5jdGlvbgotICAgIC8vICAgICAgIFRyW2xdIGlz
IHRoZSB0cmFuc2xhdGlvbiBtYXRyaXggbG9jYXRpbmcgdGhlIGxheWVyJ3MgYW5jaG9yIHBvaW50
Ci0gICAgLy8gICAgICAgVHJbY10gaXMgdGhlIHRyYW5zbGF0aW9uIG9mZnNldCBiZXR3ZWVuIHRo
ZSBhbmNob3IgcG9pbnQgYW5kIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyCi0gICAgLy8gICAgICAg
TVtsXSBpcyB0aGUgbGF5ZXIncyBtYXRyaXggKGFwcGxpZWQgYXQgdGhlIGFuY2hvciBwb2ludCkK
LSAgICAvLyBUaGlzIHRyYW5zZm9ybSBjcmVhdGVzIGEgY29vcmRpbmF0ZSBzeXN0ZW0gd2hvc2Ug
b3JpZ2luIGlzIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyLgotICAgIC8vIE5vdGUgdGhhdCB0aGUg
ZmluYWwgbWF0cml4IHVzZWQgYnkgdGhlIHNoYWRlciBmb3IgdGhlIGxheWVyIGlzIFAgKiBNICog
UyAuIFRoaXMgZmluYWwgcHJvZHVjdAotICAgIC8vIGlzIGNvbXB1dGVkIGluIGRyYXdUZXh0dXJl
ZFF1YWQoKS4KLSAgICAvLyBXaGVyZTogUCBpcyB0aGUgcHJvamVjdGlvbiBtYXRyaXgKLSAgICAv
LyAgICAgICAgTSBpcyB0aGUgbGF5ZXIncyBtYXRyaXggY29tcHV0ZWQgYWJvdmUKLSAgICAvLyAg
ICAgICAgUyBpcyB0aGUgc2NhbGUgYWRqdXN0bWVudCAodG8gc2NhbGUgdXAgdG8gdGhlIGxheWVy
IHNpemUpCisgICAgLy8gYWxsIGl0cyBjaGlsZHJlbi4gU29tZSBpbXBvcnRhbnQgcG9pbnRzIHRv
IHJlbWVtYmVyOgorICAgIC8vCisgICAgLy8gMS4gVGhlIGFuY2hvciBwb2ludCwgd2hlbiBnaXZl
biBhcyBhIEZsb2F0UG9pbnQgb2JqZWN0LCBpcyBzcGVjaWZpZWQgaW4gInVuaXQgbGF5ZXIgc3Bh
Y2UiLAorICAgIC8vICAgIHdoZXJlIHRoZSBib3VuZHMgb2YgdGhlIGxheWVyIG1hcCB0byBbMCwg
MV0uIEhvd2V2ZXIsIGFzIGEgVHJhbnNmb3JtYXRpb25NYXRyaXggb2JqZWN0LAorICAgIC8vICAg
IHRoZSB0cmFuc2Zvcm0gdG8gdGhlIGFuY2hvciBwb2ludCBpcyBzcGVjaWZpZWQgaW4gInBpeGVs
IGxheWVyIHNwYWNlIiwgd2hlcmUgdGhlIGJvdW5kcworICAgIC8vICAgIG9mIHRoZSBsYXllciBt
YXAgdG8gW2JvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCldLgorICAgIC8vCisgICAgLy8g
Mi4gVGhlIGxheWVyJ3MgcG9zaXRpb24gaW5jbHVkZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXll
cidzIGFuY2hvciBwb2ludC4gVGhlIHZhbHVlIG9mCisgICAgLy8gICAgbGF5ZXItPnBvc2l0aW9u
KCkgaXMgbm90IGludHVpdGl2ZSB3aGVuIGNvbnNpZGVyaW5nIHRyYW5zZm9ybWF0aW9ucy4gV2hl
biB0cnlpbmcgdG8KKyAgICAvLyAgICB1bmRlcnN0YW5kIHRyYW5zZm9ybWF0aW9ucywgaXQgaXMg
ZWFzaWVyIHRvIHJlbWVtYmVyIHRoZSBmb2xsb3dpbmc6CisgICAgLy8gICAgICAgIGludHVpdGl2
ZUxheWVyUG9zaXRpb24ueCA9ICBwb3NpdGlvbi54IC0gKGFuY2hvclBvaW50LnggKiBib3VuZHMu
d2lkdGgpCisgICAgLy8gICAgICAgIGludHVpdGl2ZUxheWVyUG9zaXRpb24ueSA9ICBwb3NpdGlv
bi55IC0gKGFuY2hvclBvaW50LnkgKiBib3VuZHMuaGVpZ2h0KQorICAgIC8vICAgIFRoaXMgImlu
dHVpdGl2ZSBwb3NpdGlvbiIgbWFrZXMgdGhlIHRyYW5zZm9ybXMgZWFzaWVyIHRvIHVuZGVyc3Rh
bmQuCisgICAgLy8KKyAgICAvLyAzLiBUaGUgY29vcmRpbmF0ZSBzeXN0ZW0gdXNlZCBhc3N1bWVz
IHRoYXQgdGhlIG9yaWdpbiBpcyBhdCB0aGUKKyAgICAvLyAgICBsb3dlciBsZWZ0IGV2ZW4gdGhv
dWdoIHRoZSBjb29yZGluYXRlcyB0aGUgYnJvd3NlciBnaXZlcyB1cworICAgIC8vICAgIGZvciB0
aGUgbGF5ZXJzIGFyZSBmb3IgdGhlIHVwcGVyIGxlZnQgY29ybmVyLiBUaGUgWSBmbGlwCisgICAg
Ly8gICAgaGFwcGVucyB2aWEgdGhlIG9ydGhvZ3JhcGhpYyBwcm9qZWN0aW9uIGFwcGxpZWQgYXQg
cmVuZGVyCisgICAgLy8gICAgdGltZS4KKyAgICAvLworICAgIC8vIDQuIFRoZSBkcmF3IHRyYW5z
Zm9ybSBmb3IgdGhlIGxheWVyIGlzICh1c2luZyB0aGUgTWF0cml4IHggVmVjdG9yIG9yZGVyKToK
KyAgICAvLyAgICAgICAgICAgTSA9IE1bcF0gKiBUcltsXSAqIE1bbF0gKiBUcltjXQorICAgIC8v
CisgICAgLy8gICAgV2hlcmU6IE1bcF0gaXMgdGhlIHBhcmVudCBtYXRyaXggcGFzc2VkIGRvd24g
dG8gdGhlIGZ1bmN0aW9uCisgICAgLy8gICAgICAgICAgIFRyW2xdIGlzIHRoZSB0cmFuc2xhdGlv
biBtYXRyaXggbG9jYXRpbmcgdGhlIGxheWVyJ3MgYW5jaG9yIHBvaW50CisgICAgLy8gICAgICAg
ICAgIFRyW2NdIGlzIHRoZSB0cmFuc2xhdGlvbiBvZmZzZXQgYmV0d2VlbiB0aGUgYW5jaG9yIHBv
aW50IGFuZCB0aGUgY2VudGVyIG9mIHRoZSBsYXllcgorICAgIC8vICAgICAgICAgICBNW2xdIGlz
IHRoZSBsYXllcidzIG1hdHJpeCAoYXBwbGllZCBhdCB0aGUgYW5jaG9yIHBvaW50KQorICAgIC8v
CisgICAgLy8gICAgVGhpcyB0cmFuc2Zvcm0gY3JlYXRlcyBhIGNvb3JkaW5hdGUgc3lzdGVtIHdo
b3NlIG9yaWdpbiBpcyB0aGUgY2VudGVyIG9mIHRoZSBsYXllci4KKyAgICAvLyAgICBOb3RlIHRo
YXQgdGhlIGZpbmFsIG1hdHJpeCB1c2VkIGJ5IHRoZSBzaGFkZXIgZm9yIHRoZSBsYXllciBpcyBQ
ICogTSAqIFMgLiBUaGlzIGZpbmFsIHByb2R1Y3QKKyAgICAvLyAgICBpcyBjb21wdXRlZCBpbiBk
cmF3VGV4dHVyZWRRdWFkKCksCisgICAgLy8gICAgV2hlcmU6IFAgaXMgdGhlIHByb2plY3Rpb24g
bWF0cml4CisgICAgLy8gICAgICAgICAgIE0gaXMgdGhlIGxheWVyJ3MgbWF0cml4IGNvbXB1dGVk
IGFib3ZlCisgICAgLy8gICAgICAgICAgIFMgaXMgdGhlIHNjYWxlIGFkanVzdG1lbnQgKHRvIHNj
YWxlIHVwIHRvIHRoZSBsYXllciBzaXplKQorICAgIC8vCisgICAgLy8gICAgQWxzbyBub3RlIHRo
YXQgTSByZXByZXNlbnRzIHRoZSB0cmFuc2Zvcm0gY2hhaW4gd2l0aCByZXNwZWN0IHRvIHRoZSBu
ZWFyZXN0IGFuY2VzdG9yIHJlbmRlcgorICAgIC8vICAgIHN1cmZhY2UsIG5vdCB0aGUgcm9vdC4K
KyAgICAvLworICAgIC8vIDUuIFRoZSBzY3JlZW4gc3BhY2UgdHJhbnNmb3JtIGlzOgorICAgIC8v
ICAgICAgICAgICBNW3NjcmVlbnNwYWNlXSA9IE1bcm9vdF0gKiBUcltsXSAqIE1bbF0gKiBUclth
bmNob3JdLmludmVyc2UoKQorICAgIC8vCisgICAgLy8gICAgV2hlcmU6IE1bcm9vdF0gaXMgdGhl
IHRyYW5zZm9ybSBjaGFpbiB3aXRoIHJlc3BlY3QgdG8gdGhlIHJvb3QgKGluc3RlYWQgb2YgdGhl
IG5lYXJlc3QgcmVuZGVyIHN1cmZhY2UgbGlrZSBNW3BdKQorICAgIC8vICAgICAgICAgICBUclth
bmNob3JdLmludmVyc2UoKSB0cmFuc2xhdGVzIGZyb20gdGhlIGFuY2hvciBvZmZzZXQgYmFjayB0
byB0aGUgbGF5ZXIgb3JpZ2luLgorICAgIC8vCisgICAgLy8gNi4gVGhlIHRyYW5zZm9ybSBoaWVy
YXJjaHkgdGhhdCBpcyBwYXNzZWQgb24gdG8gY2hpbGRyZW4gKGkuZS4gdGhlIGNoaWxkJ3MgcGFy
ZW50TWF0cml4KSBjYW4gYmUKKyAgICAvLyAgICBpbnR1aXRpdmVseSBkZXNjcmliZWQgYXM6Cisg
ICAgLy8gICAgICAgICAgIE1bcF1fZm9yX2NoaWxkID0gTVtwXSAqIHBvc2l0aW9uVHJhbnNmb3Jt
ICogY29tcG9zaXRlTGF5ZXJUcmFuc2Zvcm0gKiBjb21wb3NpdGVTdWJsYXllclRyYW5zZm9ybQor
ICAgIC8vCisgICAgLy8gICAgV2hlcmU6IHBvc2l0aW9uVHJhbnNmb3JtIGlzIGEgdHJhbnNsYXRp
b24gdG8gdGhlICJpbnR1aXRpdmUgcG9zaXRpb24iCisgICAgLy8gICAgICAgICAgIGNvbXBvc2l0
ZUxheWVyVHJhbnNmb3JtIGlzIHRoZSBsYXllciB0cmFuc2Zvcm0gYXBwbGllZCBhdCB0aGUgYW5j
aG9yOgorICAgIC8vICAgICAgICAgICAgICAgIFRyW2FuY2hvcl0gKiBNW2xdICogVHJbYW5jaG9y
XS5pbnZlcnNlKCkKKyAgICAvLyAgICAgICAgICAgY29tcG9zaXRlU3VibGF5ZXJUcmFuc2Zvcm0g
aXMgdGhlIHN1YmxheWVyIHRyYW5zZm9ybSwgYXBwbGllZCBhdCB0aGUgbGF5ZXIncyBjZW50ZXI6
CisgICAgLy8gICAgICAgICAgICAgICAgVHJbbzJjXSAqIE1bc3ViXSAqIFRyW28yY10uaW52ZXJz
ZSgpCisgICAgLy8gICAgICAgICAgIFRyW2FuY2hvcl0gaXMgdGhlIHRyYW5zbGF0aW9uIGJldHdl
ZW4gdGhlIGxheWVyIG9yaWdpbiBhbmQgdGhlIGFuY2hvciBwb2ludC4KKyAgICAvLyAgICAgICAg
ICAgVHJbbzJjXSBpcyB0aGUgdHJhbnNsYXRpb24gb2Zmc2V0IGJldHdlZW4gdGhlIGxheWVyIG9y
aWdpbiBhbmQgY2VudGVyIG9mIHRoZSBsYXllci4KKyAgICAvLworICAgIC8vICAgIE5vdGUgdGhh
dCBpbiAjNCwgdGhlICJwb3NpdGlvblRyYW5zZm9ybSIgZXhpc3RzIGltcGxpY2l0bHkgaW4gVHJb
bF0uIFRoYXQgaXMsIFRyW2xdID0gcG9zaXRpb25UcmFuc2Zvcm0gKiBUclthbmNob3JdLgorICAg
IC8vICAgIFNpbWlsYXJseSwgVHJbY10gPSBUclthbmNob3JdLmludmVyc2UoKSAqIFRyW28yY10u
CisgICAgLy8KICAgICBJbnRTaXplIGJvdW5kcyA9IGxheWVyLT5ib3VuZHMoKTsKICAgICBGbG9h
dFBvaW50IGFuY2hvclBvaW50ID0gbGF5ZXItPmFuY2hvclBvaW50KCk7CiAgICAgRmxvYXRQb2lu
dCBwb3NpdGlvbiA9IGxheWVyLT5wb3NpdGlvbigpIC0gbGF5ZXItPnNjcm9sbERlbHRhKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGVmYTMxZWM3ZjRiOTk1YTY3YWVjYmNmYzM3YzI4
NzlmOTY3ZDdhNGEuLmI2YzkxMjc2ZDAxNTk4YjRhYmMwYjJkMmY3MjNmZGYzYjZlODg2YjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMTAtMDcgIFNo
YXduIFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRmlyc3Qgcm91
bmQgb2YgdW5pdCB0ZXN0cyBmb3IgQ0NMYXllclRyZWVIb3N0Q29tbW9uLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkxOTcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHJvdW5kIG9mIHRlc3RzIGZv
Y3VzZXMgb24gdmVyaWZ5aW5nIHRoZSBjb21wdXRhdGlvbiBvZiBtYXRyaXggdHJhbnNmb3Jtcwor
ICAgICAgICBpbiBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkuCisKKyAgICAg
ICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlM0RDb21wb25lbnRPZk1h
dHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29u
dGVudDo6TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ6OmRyYXdzQ29udGVudCk6
CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMS0xMC0wNiAgU2hlcmlmZiBCb3QgIDx3
ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGlu
ZyBvdXQgcjk2NzkxLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggN2Q1YWY2YzAz
MGI0NGUzOGQ1MzExOTFhNjE3YmM5MzI3ZDAwNTRiMC4uNGIzYTg1Y2NmZDlkOTM2YjM1NWU2ODFj
MzM2NmNjY2RjZGIxODI5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC01NSw2
ICs1NSw3IEBACiAgICAgICAgICAgICAndGVzdHMvQXJlbmFUZXN0SGVscGVycy5oJywKICAgICAg
ICAgICAgICd0ZXN0cy9Bc3NvY2lhdGVkVVJMTG9hZGVyVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0NDTGF5ZXJTb3J0ZXJUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMvQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0VGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1bGVyVGVzdC5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDM2NDY5NjJiYTk3MTJhNDFiYjgxMzY5YTU5ZDk5Mzk1
MzJiMDNlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKQEAgLTAsMCArMSw0ODcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dENvbW1vbi5oIgorCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlRyYW5z
Zm9ybWF0aW9uTWF0cml4LmgiCisKKyNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgorI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ug
eworCisvLyBUaGlzIGlzIGEgbWFjcm8gaW5zdGVhZCBvZiBhIGZ1bmN0aW9uIHNvIHRoYXQgdGhl
IGd0ZXN0IGVycm9ycyBjYW4gZ2l2ZSB1cyB1c2VmdWwgbGluZSBudW1iZXJzIGFzc29jaWF0ZWQg
d2l0aCB0aGUgdGVzdC4KKy8vIEV2ZW4gdGhvdWdoIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZhbHVl
cyBhcmUgZG91YmxlLCB0aGVyZSBhcmUgbWFueSBvdGhlciBmbG9hdGluZy1wb2ludCB2YWx1ZXMg
dXNlZCwgYW5kIHNvIHdlCisvLyBvbmx5IGV4cGVjdCB0aGVtIHRvIGJlIGFjY3VyYXRlIHVwIHRv
IGZsb2F0aW5nLXBvaW50IHByZWNpc2lvbi4KKyNkZWZpbmUgVkVSSUZZX01BVFJJWF9BTE1PU1Rf
RVFVQUwoZXhwZWN0ZWQsIGFjdHVhbCkgICAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0
ZWQpLm0xMSgpLCAoYWN0dWFsKS5tMTEoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBl
Y3RlZCkubTEyKCksIChhY3R1YWwpLm0xMigpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4
cGVjdGVkKS5tMTMoKSwgKGFjdHVhbCkubTEzKCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgo
ZXhwZWN0ZWQpLm0xNCgpLCAoYWN0dWFsKS5tMTQoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VR
KChleHBlY3RlZCkubTIxKCksIChhY3R1YWwpLm0yMSgpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoKGV4cGVjdGVkKS5tMjIoKSwgKGFjdHVhbCkubTIyKCkpOyAgXAorICAgIEVYUEVDVF9GTE9B
VF9FUSgoZXhwZWN0ZWQpLm0yMygpLCAoYWN0dWFsKS5tMjMoKSk7ICBcCisgICAgRVhQRUNUX0ZM
T0FUX0VRKChleHBlY3RlZCkubTI0KCksIChhY3R1YWwpLm0yNCgpKTsgIFwKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoKGV4cGVjdGVkKS5tMzEoKSwgKGFjdHVhbCkubTMxKCkpOyAgXAorICAgIEVYUEVD
VF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0zMigpLCAoYWN0dWFsKS5tMzIoKSk7ICBcCisgICAgRVhQ
RUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTMzKCksIChhY3R1YWwpLm0zMygpKTsgIFwKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMzQoKSwgKGFjdHVhbCkubTM0KCkpOyAgXAorICAg
IEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm00MSgpLCAoYWN0dWFsKS5tNDEoKSk7ICBcCisg
ICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTQyKCksIChhY3R1YWwpLm00MigpKTsgIFwK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tNDMoKSwgKGFjdHVhbCkubTQzKCkpOyAg
XAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm00NCgpLCAoYWN0dWFsKS5tNDQoKSkK
Kwordm9pZCBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKExheWVyQ2hyb21pdW0qIGxheWVy
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgc3VibGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvciwg
Y29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFNpemUmIGJvdW5kcywgYm9vbCBw
cmVzZXJ2ZXMzRCkKK3sKKyAgICBsYXllci0+c2V0VHJhbnNmb3JtKHRyYW5zZm9ybSk7CisgICAg
bGF5ZXItPnNldFN1YmxheWVyVHJhbnNmb3JtKHN1YmxheWVyVHJhbnNmb3JtKTsKKyAgICBsYXll
ci0+c2V0QW5jaG9yUG9pbnQoYW5jaG9yKTsKKyAgICBsYXllci0+c2V0UG9zaXRpb24ocG9zaXRp
b24pOworICAgIGxheWVyLT5zZXRCb3VuZHMoYm91bmRzKTsKKyAgICBsYXllci0+c2V0UHJlc2Vy
dmVzM0QocHJlc2VydmVzM0QpOworfQorCit2b2lkIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKQoreworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiBkdW1teVJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1
cmVTaXplID0gNTEyOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1Ry
YW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllciwgcm9vdExheWVyLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXll
ckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBy
ZW1vdmUzRENvbXBvbmVudE9mTWF0cml4KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXQp
Cit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmV0ID0gbWF0OworICAgIHJldC5zZXRNMTMo
MCk7CisgICAgcmV0LnNldE0yMygwKTsKKyAgICByZXQuc2V0TTMxKDApOworICAgIHJldC5zZXRN
MzIoMCk7CisgICAgcmV0LnNldE0zMygxKTsKKyAgICByZXQuc2V0TTM0KDApOworICAgIHJldC5z
ZXRNNDMoMCk7CisgICAgcmV0dXJuIHJldDsKK30KKworY2xhc3MgTGF5ZXJDaHJvbWl1bVdpdGhG
b3JjZWREcmF3c0NvbnRlbnQgOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoQ0NMYXllckRlbGVn
YXRlKiBkZWxlZ2F0ZSkKKyAgICAgICAgOiBMYXllckNocm9taXVtKGRlbGVnYXRlKQorICAgIHsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQorfTsKKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFu
c2Zvcm1zRm9yTm9PcExheWVyKQoreworICAgIC8vIFNhbml0eSBjaGVjazogRm9yIGxheWVycyBw
b3NpdGlvbmVkIGF0IHplcm8sIHdpdGggemVybyBzaXplLAorICAgIC8vIGFuZCB3aXRoIGlkZW50
aXR5IHRyYW5zZm9ybXMsIHRoZW4gdGhlIGRyYXdUcmFuc2Zvcm0sCisgICAgLy8gc2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0sIGFuZCB0aGUgaGllcmFyY2h5IHBhc3NlZCBvbiB0byBjaGlsZHJlbgorICAg
IC8vIGxheWVycyBzaG91bGQgYWxzbyBiZSBpZGVudGl0eSB0cmFuc2Zvcm1zLgorCisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGQgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoMCk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50
LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQpOworCisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50
U2l6ZSgwLCAwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hp
bGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBm
LCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgwLCAwKSwgZmFsc2UpOwor
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBv
aW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDAsIDApLCBmYWxzZSk7CisKKyAgICBleGVjdXRlQ2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSk7CisKKyAgICBW
RVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgcGFyZW50LT5kcmF3VHJh
bnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4
LCBwYXJlbnQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxN
T1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBW
RVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgY2hpbGQtPnNjcmVlblNw
YWNlVHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5
TWF0cml4LCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhf
QUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFu
c2Zvcm1zRm9yU2luZ2xlTGF5ZXIpCit7CisgICAgLy8gTk9URSBDQVJFRlVMTFk6CisgICAgLy8g
TGF5ZXJDaHJvbWl1bTo6cG9zaXRpb24gaXMgYWN0dWFsbHkgdGhlIHN1bSBvZiBhbmNob3JQb2lu
dCAoaW4gcGl4ZWwgc3BhY2UpIGFuZCBhY3R1YWwgcG9zaXRpb24uIEJlY2F1c2Ugb2YgdGhpcywg
dGhlCisgICAgLy8gdmFsdWUgb2YgTGF5ZXJDaHJvbWl1bTo6cG9zaXRpb24oKSBjaGFuZ2VzIGlm
IHRoZSBhbmNob3IgY2hhbmdlcywgZXZlbiB0aG91Z2ggdGhlIGxheWVyIGlzIG5vdCBhY3R1YWxs
eSBsb2NhdGVkIGluIGEKKyAgICAvLyBkaWZmZXJlbnQgcG9zaXRpb24uIFdoZW4gd2UgaW5pdGlh
bGl6ZSBsYXllcnMgZm9yIHRlc3RpbmcgaGVyZSwgd2UgbmVlZCB0byBpbml0aWFsaXplIHRoYXQg
dW5pbnR1dGl2ZSBwb3NpdGlvbiB2YWx1ZS4KKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlk
ZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllciA9IExheWVyQ2hy
b21pdW06OmNyZWF0ZSgwKTsKKyAgICBsYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworCisg
ICAgLy8gQ2FzZSAxOiBzZXR0aW5nIHRoZSBzdWJsYXllciB0cmFuc2Zvcm0gc2hvdWxkIG5vdCBh
ZmZlY3QgdGhpcyBsYXllcidzIGRyYXcgdHJhbnNmb3JtIG9yIHNjcmVlbi1zcGFjZSB0cmFuc2Zv
cm0uCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYXJiaXRyYXJ5VHJhbnNsYXRpb247CisgICAg
YXJiaXRyYXJ5VHJhbnNsYXRpb24udHJhbnNsYXRlKDEwLjAsIDIwLjApOworICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBhcmJpdHJh
cnlUcmFuc2xhdGlvbiwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAw
LjBmKSwgSW50U2l6ZSgwLCAwKSwgZmFsc2UpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5ZXIuZ2V0KCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxN
T1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBW
RVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChpZGVudGl0eU1hdHJpeCwgbGF5ZXItPnNjcmVlblNw
YWNlVHJhbnNmb3JtKCkpOworCisgICAgLy8gQ2FzZSAyOiBzZXR0aW5nIHRoZSBib3VuZHMgb2Yg
dGhlIGxheWVyIHNob3VsZCByZXN1bHQgaW4gYSBkcmF3IHRyYW5zZm9ybSB0aGF0IHRyYW5zbGF0
ZXMgdG8gaGFsZiB0aGUgd2lkdGggYW5kIGhlaWdodC4KKyAgICAvLyAgICAgICAgIFRoZSBzY3Jl
ZW4tc3BhY2UgdHJhbnNmb3JtIHNob3VsZCByZW1haW4gYXMgdGhlIGlkZW50aXR5LCBiZWNhdXNl
IGl0IGRvZXMgbm90IGRlYWwgd2l0aCB0cmFuc2Zvcm1pbmcgdG8vZnJvbSB0aGUgY2VudGVyIG9m
IHRoZSBsYXllci4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2xhdGlvblRvQ2VudGVy
OworICAgIHRyYW5zbGF0aW9uVG9DZW50ZXIudHJhbnNsYXRlKDUuMCwgNi4wKTsKKyAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4w
ZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5ZXIuZ2V0KCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxN
T1NUX0VRVUFMKHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOwor
ICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBsYXllci0+c2Ny
ZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisKKyAgICAvLyBDYXNlIDM6IFRoZSBhbmNob3IgcG9pbnQg
YnkgaXRzZWxmICh3aXRob3V0IGEgbGF5ZXIgdHJhbnNmb3JtKSBzaG91bGQgaGF2ZSBubyBlZmZl
Y3Qgb24gdGhlIHRyYW5zZm9ybXMuCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhs
YXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAu
MjVmLCAwLjI1ZiksIEZsb2F0UG9pbnQoMi41ZiwgMy4wZiksIEludFNpemUoMTAsIDEyKSwgZmFs
c2UpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5
ZXIuZ2V0KCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHRyYW5zbGF0aW9uVG9D
ZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NU
X0VRVUFMKGlkZW50aXR5TWF0cml4LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisK
KyAgICAvLyBDYXNlIDQ6IEEgY2hhbmdlIGluICJhY3R1YWwiIHBvc2l0aW9uIGFmZmVjdHMgYm90
aCB0aGUgZHJhdyB0cmFuc2Zvcm0gYW5kIHNjcmVlbiBzcGFjZSB0cmFuc2Zvcm0uCisgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggcG9zaXRpb25UcmFuc2Zvcm07CisgICAgcG9zaXRpb25UcmFuc2Zv
cm0udHJhbnNsYXRlKDAuMCwgMS4yKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQo
MC4yNWYsIDAuMjVmKSwgRmxvYXRQb2ludCgyLjVmLCA0LjJmKSwgSW50U2l6ZSgxMCwgMTIpLCBm
YWxzZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShs
YXllci5nZXQoKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocG9zaXRpb25UcmFu
c2Zvcm0gKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAg
ICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwb3NpdGlvblRyYW5zZm9ybSwgbGF5ZXItPnNj
cmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisgICAgLy8gQ2FzZSA1OiBJbiB0aGUgY29ycmVjdCBz
ZXF1ZW5jZSBvZiB0cmFuc2Zvcm1zLCB0aGUgbGF5ZXIgdHJhbnNmb3JtIHNob3VsZCBwcmUtbXVs
dGlwbHkgdGhlIHRyYW5zbGF0aW9uVG9DZW50ZXIuIFRoaXMgaXMgZWFzaWx5IHRlc3RlZCBieQor
ICAgIC8vICAgICAgICAgdXNpbmcgYSBzY2FsZSB0cmFuc2Zvcm0sIGJlY2F1c2Ugc2NhbGUgYW5k
IHRyYW5zbGF0aW9uIGFyZSBub3QgY29tbXV0YXRpdmUuCisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbGF5ZXJUcmFuc2Zvcm07CisgICAgbGF5ZXJUcmFuc2Zvcm0uc2NhbGUzZCgyLjAsIDIuMCwg
MS4wKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBsYXll
clRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0
UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOworICAgIGV4ZWN1dGVD
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5ZXIuZ2V0KCkpOworICAgIFZF
UklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGxheWVyVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0Nl
bnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1Rf
RVFVQUwobGF5ZXJUcmFuc2Zvcm0sIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKwor
ICAgIC8vIENhc2UgNjogVGhlIGxheWVyIHRyYW5zZm9ybSBzaG91bGQgb2NjdXIgd2l0aCByZXNw
ZWN0IHRvIHRoZSBhbmNob3IgcG9pbnQuCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNs
YXRpb25Ub0FuY2hvcjsKKyAgICB0cmFuc2xhdGlvblRvQW5jaG9yLnRyYW5zbGF0ZSg1LjAsIDAu
MCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZXhwZWN0ZWRSZXN1bHQgPSB0cmFuc2xhdGlv
blRvQW5jaG9yICogbGF5ZXJUcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQW5jaG9yLmludmVyc2Uo
KTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBsYXllclRy
YW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC41ZiwgMC4wZiksIEZsb2F0UG9p
bnQoNS4wZiwgMC4wZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOworICAgIGV4ZWN1dGVDYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5ZXIuZ2V0KCkpOworICAgIFZFUklG
WV9NQVRSSVhfQUxNT1NUX0VRVUFMKGV4cGVjdGVkUmVzdWx0ICogdHJhbnNsYXRpb25Ub0NlbnRl
ciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFV
QUwoZXhwZWN0ZWRSZXN1bHQsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKworICAg
IC8vIENhc2UgNzogVmVyaWZ5IHRoYXQgcG9zaXRpb24gcHJlLW11bHRpcGxpZXMgdGhlIGxheWVy
IHRyYW5zZm9ybS4KKyAgICAvLyAgICAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9m
IGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSBkb2VzIHRoaXMgaW1wbGljaXRs
eSwgYnV0IGl0IGlzCisgICAgLy8gICAgICAgICBzdGlsbCB3b3J0aCB0ZXN0aW5nIHRvIGRldGVj
dCBhY2NpZGVudGFsIHJlZ3Jlc3Npb25zLgorICAgIGV4cGVjdGVkUmVzdWx0ID0gcG9zaXRpb25U
cmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQW5jaG9yICogbGF5ZXJUcmFuc2Zvcm0gKiB0cmFuc2xh
dGlvblRvQW5jaG9yLmludmVyc2UoKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KGxheWVyLmdldCgpLCBsYXllclRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQo
MC41ZiwgMC4wZiksIEZsb2F0UG9pbnQoNS4wZiwgMS4yZiksIEludFNpemUoMTAsIDEyKSwgZmFs
c2UpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5
ZXIuZ2V0KCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGV4cGVjdGVkUmVzdWx0
ICogdHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVS
SUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZXhwZWN0ZWRSZXN1bHQsIGxheWVyLT5zY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJp
ZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGllcmFyY2h5KQoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGlkZW50aXR5TWF0cml4OworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxk
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBn
cmFuZENoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIHBhcmVudC0+Y3JlYXRl
UmVuZGVyU3VyZmFjZSgpOworICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGNoaWxk
LT5hZGRDaGlsZChncmFuZENoaWxkKTsKKworICAgIC8vIENhc2UgMTogcGFyZW50J3MgYW5jaG9y
UG9pbnQgc2hvdWxkIG5vdCBhZmZlY3QgY2hpbGQgb3IgZ3JhbmRDaGlsZC4KKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRUcmFuc2xh
dGlvblRvQ2VudGVyOworICAgIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlci50cmFuc2xhdGUoOC4w
LCA5LjApOworICAgIGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLnRyYW5zbGF0ZSgzOC4w
LCAzOS4wKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMjVmLCAwLjI1Ziks
IEZsb2F0UG9pbnQoMi41ZiwgMy4wZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOworICAgIHNl
dExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAw
LjBmKSwgSW50U2l6ZSgxNiwgMTgpLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUo
NzYsIDc4KSwgZmFsc2UpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHkocGFyZW50LmdldCgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChj
aGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZF
UklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlkZW50aXR5TWF0cml4LCBjaGlsZC0+c2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZ3JhbmRDaGls
ZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAg
VkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGdyYW5kQ2hpbGQtPnNj
cmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisgICAgLy8gQ2FzZSAyOiBwYXJlbnQncyBwb3NpdGlv
biBhZmZlY3RzIGNoaWxkIGFuZCBncmFuZENoaWxkLgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtOworICAgIHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtLnRy
YW5zbGF0ZSgwLjAsIDEuMik7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJl
bnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjI1
ZiwgMC4yNWYpLCBGbG9hdFBvaW50KDIuNWYsIDQuMmYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNl
KTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9p
bnQoMC4wZiwgMC4wZiksIEludFNpemUoMTYsIDE4KSwgZmFsc2UpOworICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYp
LCBJbnRTaXplKDc2LCA3OCksIGZhbHNlKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwocGFyZW50UG9zaXRpb25UcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50
ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VR
VUFMKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtLCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50UG9zaXRpb25UcmFuc2Zv
cm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5z
Zm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRQb3NpdGlvblRy
YW5zZm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisKKyAgICAvLyBD
YXNlIDM6IHBhcmVudCdzIGxvY2FsIHRyYW5zZm9ybSBhZmZlY3RzIGNoaWxkIGFuZCBncmFuZGNo
aWxkCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50TGF5ZXJUcmFuc2Zvcm07CisgICAg
cGFyZW50TGF5ZXJUcmFuc2Zvcm0uc2NhbGUzZCgyLjAsIDIuMCwgMS4wKTsKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBwYXJlbnRUcmFuc2xhdGlvblRvQW5jaG9yOworICAgIHBhcmVudFRyYW5z
bGF0aW9uVG9BbmNob3IudHJhbnNsYXRlKDIuNSwgMy4wKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gPSBwYXJlbnRUcmFuc2xhdGlvblRvQW5jaG9y
ICogcGFyZW50TGF5ZXJUcmFuc2Zvcm0gKiBwYXJlbnRUcmFuc2xhdGlvblRvQW5jaG9yLmludmVy
c2UoKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgcGFy
ZW50TGF5ZXJUcmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMjVmLCAwLjI1
ZiksIEZsb2F0UG9pbnQoMi41ZiwgMy4wZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOworICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBm
LCAwLjBmKSwgSW50U2l6ZSgxNiwgMTgpLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNp
emUoNzYsIDc4KSwgZmFsc2UpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0Fu
ZFZpc2liaWxpdHkocGFyZW50LmdldCgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVB
TChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNo
aWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBh
cmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwor
ICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAq
IGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3Jt
KCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5z
Zm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisKKyAgICAvLyBDYXNl
IDQ6IHBhcmVudCdzIHN1YmxheWVyTWF0cml4IGFmZmVjdHMgY2hpbGQgYW5kIGdyYW5kY2hpbGQK
KyAgICAvLyAgICAgICAgIHNjYWxpbmcgaXMgdXNlZCBoZXJlIGFnYWluIHNvIHRoYXQgdGhlIGNv
cnJlY3Qgc2VxdWVuY2Ugb2YgdHJhbnNmb3JtcyBpcyBwcm9wZXJseSB0ZXN0ZWQuCisgICAgLy8g
ICAgICAgICBOb3RlIHRoYXQgcHJlc2VydmVzM0QgaXMgZmFsc2UsIGJ1dCB0aGUgc3VibGF5ZXIg
bWF0cml4IHNob3VsZCByZXRhaW4gaXRzIDNEIHByb3BlcnRpZXMgd2hlbiBnaXZlbiB0byBjaGls
ZC4KKyAgICAvLyAgICAgICAgIEJ1dCB0aGVuLCB0aGUgY2hpbGQgYWxzbyBkb2VzIG5vdCBwcmVz
ZXJ2ZTNELiBXaGVuIGl0IGdpdmVzIGl0cyBoaWVyYXJjaHkgdG8gdGhlIGdyYW5kQ2hpbGQsIGl0
IHNob3VsZCBiZSBmbGF0dGVuZWQgdG8gMkQuCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFy
ZW50U3VibGF5ZXJNYXRyaXg7CisgICAgcGFyZW50U3VibGF5ZXJNYXRyaXguc2NhbGUzZCgxMC4w
LCAxMC4wLCAzLjMpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFRyYW5zbGF0aW9u
VG9DZW50ZXI7CisgICAgcGFyZW50VHJhbnNsYXRpb25Ub0NlbnRlci50cmFuc2xhdGUoNS4wLCA2
LjApOworICAgIC8vIFN1YmxheWVyIG1hdHJpeCBpcyBhcHBsaWVkIHRvIHRoZSBjZW50ZXIgb2Yg
dGhlIHBhcmVudCBsYXllci4KKyAgICBwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gPSBwYXJlbnRU
cmFuc2xhdGlvblRvQW5jaG9yICogcGFyZW50TGF5ZXJUcmFuc2Zvcm0gKiBwYXJlbnRUcmFuc2xh
dGlvblRvQW5jaG9yLmludmVyc2UoKQorICAgICAgICAgICAgKiBwYXJlbnRUcmFuc2xhdGlvblRv
Q2VudGVyICogcGFyZW50U3VibGF5ZXJNYXRyaXggKiBwYXJlbnRUcmFuc2xhdGlvblRvQ2VudGVy
LmludmVyc2UoKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmbGF0dGVuZWRDb21wb3NpdGVU
cmFuc2Zvcm0gPSByZW1vdmUzRENvbXBvbmVudE9mTWF0cml4KHBhcmVudENvbXBvc2l0ZVRyYW5z
Zm9ybSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIHBh
cmVudExheWVyVHJhbnNmb3JtLCBwYXJlbnRTdWJsYXllck1hdHJpeCwgRmxvYXRQb2ludCgwLjI1
ZiwgMC4yNWYpLCBGbG9hdFBvaW50KDIuNWYsIDMuMGYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNl
KTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9p
bnQoMC4wZiwgMC4wZiksIEludFNpemUoMTYsIDE4KSwgZmFsc2UpOworICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYp
LCBJbnRTaXplKDc2LCA3OCksIGZhbHNlKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtICogY2hpbGRUcmFuc2xhdGlvblRvQ2Vu
dGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9F
UVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChmbGF0dGVuZWRDb21wb3NpdGVU
cmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJh
d1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChmbGF0dGVuZWRD
b21wb3NpdGVUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwor
CisgICAgLy8gQ2FzZSA1OiBzYW1lIGFzIENhc2UgNCwgZXhjZXB0IHRoYXQgY2hpbGQgZG9lcyBw
cmVzZXJ2ZSAzRCwgc28gdGhlIGdyYW5kQ2hpbGQgc2hvdWxkIHJlY2VpdmUgdGhlIG5vbi1mbGF0
dGVuZWQgY29tcG9zaXRlIHRyYW5zZm9ybS4KKyAgICAvLworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBwYXJlbnRMYXllclRyYW5zZm9ybSwgcGFyZW50U3Vi
bGF5ZXJNYXRyaXgsIEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQb2ludCgyLjVmLCAz
LjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9h
dFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2LCAx
OCksIHRydWUpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAu
MGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDc2LCA3OCksIGZhbHNlKTsKKyAg
ICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQo
KSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNm
b3JtICogY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsK
KyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0s
IGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9T
VF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBncmFuZENoaWxkVHJhbnNsYXRpb25U
b0NlbnRlciwgZ3JhbmRDaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklY
X0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGdyYW5kQ2hpbGQtPnNjcmVl
blNwYWNlVHJhbnNmb3JtKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qs
IHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVSZW5kZXJTdXJmYWNlKQoreworICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAg
IFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gZ3JhbmRDaGlsZCA9
IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgwKSk7Cisg
ICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChj
aGlsZCk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQpOworCisgICAgLy8gQ2hpbGQg
aXMgc2V0IHVwIHNvIHRoYXQgYSBuZXcgcmVuZGVyIHN1cmZhY2Ugc2hvdWxkIGJlIGNyZWF0ZWQu
CisgICAgY2hpbGQtPnNldE9wYWNpdHkoMC41Zik7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBpZGVudGl0eU1hdHJpeDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRMYXllclRy
YW5zZm9ybTsKKyAgICBwYXJlbnRMYXllclRyYW5zZm9ybS5zY2FsZTNkKDIuMCwgMi4wLCAxLjAp
OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3I7Cisg
ICAgcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hvci50cmFuc2xhdGUoMi41LCAzLjApOworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFN1YmxheWVyTWF0cml4OworICAgIHBhcmVudFN1Ymxh
eWVyTWF0cml4LnNjYWxlM2QoMTAuMCwgMTAuMCwgMy4zKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBwYXJlbnRUcmFuc2xhdGlvblRvQ2VudGVyOworICAgIHBhcmVudFRyYW5zbGF0aW9uVG9D
ZW50ZXIudHJhbnNsYXRlKDUuMCwgNi4wKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJl
bnRDb21wb3NpdGVUcmFuc2Zvcm0gPSBwYXJlbnRUcmFuc2xhdGlvblRvQW5jaG9yICogcGFyZW50
TGF5ZXJUcmFuc2Zvcm0gKiBwYXJlbnRUcmFuc2xhdGlvblRvQW5jaG9yLmludmVyc2UoKQorICAg
ICAgICAgICAgKiBwYXJlbnRUcmFuc2xhdGlvblRvQ2VudGVyICogcGFyZW50U3VibGF5ZXJNYXRy
aXggKiBwYXJlbnRUcmFuc2xhdGlvblRvQ2VudGVyLmludmVyc2UoKTsKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXI7CisgICAgY2hpbGRUcmFuc2xhdGlv
blRvQ2VudGVyLnRyYW5zbGF0ZSg4LjAsIDkuMCk7CisKKyAgICAvLyBDaGlsZCdzIHJlbmRlciBz
dXJmYWNlIHNob3VsZCBub3QgZXhpc3QgeWV0LgorICAgIEFTU0VSVF9GQUxTRShjaGlsZC0+cmVu
ZGVyU3VyZmFjZSgpKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50
LmdldCgpLCBwYXJlbnRMYXllclRyYW5zZm9ybSwgcGFyZW50U3VibGF5ZXJNYXRyaXgsIEZsb2F0
UG9pbnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQb2ludCgyLjVmLCAzLjBmKSwgSW50U2l6ZSgxMCwg
MTIpLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYp
LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2LCAxOCksIGZhbHNlKTsKKyAgICBl
eGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSk7
CisKKyAgICAvLyBSZW5kZXIgc3VyZmFjZSBzaG91bGQgaGF2ZSBiZWVuIGNyZWF0ZWQgbm93Lgor
ICAgIEFTU0VSVF9UUlVFKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9FUShj
aGlsZC0+cmVuZGVyU3VyZmFjZSgpLCBjaGlsZC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKKwor
ICAgIC8vIFRoZSBjaGlsZCBsYXllcidzIGRyYXcgdHJhbnNmb3JtIHNob3VsZCByZWZlciB0byBp
dHMgbmV3IHJlbmRlciBzdXJmYWNlOyB0aGV5IG9ubHkgZGlmZmVyIGJ5IGEgdHJhbnNsYXRpb24g
dG8gY2VudGVyLgorICAgIC8vIFRoZSBzY3JlZW4tc3BhY2UgdHJhbnNmb3JtLCBob3dldmVyLCBz
aG91bGQgc3RpbGwgcmVmZXIgdG8gdGhlIHJvb3QuCisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1Rf
RVFVQUwoY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsK
KyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0s
IGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKworICAgIC8vIFdpdGhvdXQgY2xpcHBp
bmcgYW5kIHNjaXNzb3JpbmcsIHRoZSBvcmlnaW4gdHJhbnNmb3JtIGFuZCBkcmF3IHRyYW5zZm9y
bSAoaW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UpIHNob3VsZCBiZSB0aGUgc2FtZS4KKyAgICBWRVJJ
RllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT50
YXJnZXRSZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0sIGNoaWxkLT50YXJnZXRS
ZW5kZXJTdXJmYWNlKCktPmRyYXdUcmFuc2Zvcm0oKSk7CisKK30KKworVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yUmVuZGVyU3VyZmFjZUhpZXJhcmNo
eSkKK3sKKyAgICAvLyBUaGlzIHRlc3QgY3JlYXRlcyBhIG1vcmUgY29tcGxleCB0cmVlIGFuZCB2
ZXJpZmllcyBpdCBhbGwgYXQgb25jZS4gVGhpcyBjb3ZlcnMgdGhlIGZvbGxvd2luZyBjYXNlczoK
KyAgICAvLyAgIC0gbGF5ZXJzIHRoYXQgYXJlIGRlc2NyaWJlZCB3LnIudC4gYSByZW5kZXIgc3Vy
ZmFjZTogc2hvdWxkIGhhdmUgZHJhdyB0cmFuc2Zvcm1zIGRlc2NyaWJlZCB3LnIudC4gdGhhdCBz
dXJmYWNlCisgICAgLy8gICAtIEEgcmVuZGVyIHN1cmZhY2UgZGVzY3JpYmVkIHcuci50LiBhbiBh
bmNlc3RvciByZW5kZXIgc3VyZmFjZTogc2hvdWxkIGhhdmUgYSBkcmF3IHRyYW5zZm9ybSBkZXNj
cmliZWQgdy5yLnQuIHRoYXQgYW5jZXN0b3Igc3VyZmFjZQorICAgIC8vICAgLSBTYW5pdHkgY2hl
Y2sgb24gcmVjdXJzaW9uOiB2ZXJpZnkgdHJhbnNmb3JtcyBvZiBsYXllcnMgZGVzY3JpYmVkIHcu
ci50LiBhIHJlbmRlciBzdXJmYWNlIHRoYXQgaXMgZGVzY3JpYmVkIHcuci50LiBhbiBhbmNlc3Rv
ciByZW5kZXIgc3VyZmFjZS4KKyAgICAvLyAgIC0gdmVyaWZ5aW5nIHRoYXQgZWFjaCBsYXllciBo
YXMgYSByZWZlcmVuY2UgdG8gdGhlIGNvcnJlY3QgcmVuZGVyU3VyZmFjZSBhbmQgdGFyZ2V0UmVu
ZGVyU3VyZmFjZSB2YWx1ZXMuCisKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0g
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiByZW5k
ZXJTdXJmYWNlMSA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gcmVuZGVyU3VyZmFjZTIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkT2ZSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZE9mUlMxID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZE9mUlMyID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENo
aWxkT2ZSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gZ3JhbmRDaGlsZE9mUlMxID0gYWRvcHRSZWYo
bmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KDApKTsKKyAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGdyYW5kQ2hpbGRPZlJTMiA9IGFk
b3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgwKSk7CisgICAg
cGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50LT5hZGRDaGlsZChyZW5k
ZXJTdXJmYWNlMSk7CisgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZE9mUm9vdCk7CisgICAgcmVu
ZGVyU3VyZmFjZTEtPmFkZENoaWxkKGNoaWxkT2ZSUzEpOworICAgIHJlbmRlclN1cmZhY2UxLT5h
ZGRDaGlsZChyZW5kZXJTdXJmYWNlMik7CisgICAgcmVuZGVyU3VyZmFjZTItPmFkZENoaWxkKGNo
aWxkT2ZSUzIpOworICAgIGNoaWxkT2ZSb290LT5hZGRDaGlsZChncmFuZENoaWxkT2ZSb290KTsK
KyAgICBjaGlsZE9mUlMxLT5hZGRDaGlsZChncmFuZENoaWxkT2ZSUzEpOworICAgIGNoaWxkT2ZS
UzItPmFkZENoaWxkKGdyYW5kQ2hpbGRPZlJTMik7CisKKyAgICAvLyBJbiBjb21iaW5hdGlvbiB3
aXRoIGRlc2NlbmRhbnREcmF3c0NvbnRlbnQsIG9wYWNpdHkgIT0gMSBmb3JjZXMgdGhlIGxheWVy
IHRvIGhhdmUgYSBuZXcgcmVuZGVyU3VyZmFjZS4KKyAgICByZW5kZXJTdXJmYWNlMS0+c2V0T3Bh
Y2l0eSgwLjVmKTsKKyAgICByZW5kZXJTdXJmYWNlMi0+c2V0T3BhY2l0eSgwLjMzZik7CisKKyAg
ICAvLyBBbGwgbGF5ZXJzIGluIHRoZSB0cmVlIGFyZSBpbml0aWFsaXplZCB3aXRoIGFuIGFuY2hv
ciBhdCAyLjUgYW5kIGEgc2l6ZSBvZiAoMTAsMTApLgorICAgIC8vIG1hdHJpeCAiQSIgaXMgdGhl
IGNvbXBvc2l0ZSBsYXllciB0cmFuc2Zvcm0gdXNlZCBpbiBhbGwgbGF5ZXJzLCBjZW50ZXJlZCBh
Ym91dCB0aGUgYW5jaG9yIHBvaW50CisgICAgLy8gbWF0cml4ICJCIiBpcyB0aGUgc3VibGF5ZXIg
dHJhbnNmb3JtIHVzZWQgaW4gYWxsIGxheWVycywgY2VudGVyZWQgYWJvdXQgdGhlIGNlbnRlciBw
b3NpdGlvbiBvZiB0aGUgbGF5ZXIuCisgICAgLy8KKyAgICAvLyB4IGNvbXBvbmVudCB0ZXN0cyB0
aGF0IGxheWVyVHJhbnNmb3JtIGFuZCBzdWJsYXllclRyYW5zZm9ybSBhcmUgZG9uZSBpbiB0aGUg
cmlnaHQgb3JkZXIgKHRyYW5zbGF0aW9uIGFuZCBzY2FsZSBhcmUgbm9uY29tbXV0YXRpdmUpLgor
ICAgIC8vIHkgY29tcG9uZW50IGhhcyBhIHRyYW5zbGF0aW9uIGJ5IDEuMCBmb3IgZXZlcnkgYW5j
ZXN0b3IsIHdoaWNoIGluZGljYXRlcyB0aGUgImRlcHRoIiBvZiB0aGUgbGF5ZXIgaW4gdGhlIGhp
ZXJhcmNoeS4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2xhdGlvblRvQW5jaG9yOwor
ICAgIHRyYW5zbGF0aW9uVG9BbmNob3IudHJhbnNsYXRlKDIuNSwgMC4wKTsKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0cmFuc2xhdGlvblRvQ2VudGVyOworICAgIHRyYW5zbGF0aW9uVG9DZW50
ZXIudHJhbnNsYXRlKDUuMCwgNS4wKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllclRy
YW5zZm9ybTsKKyAgICBsYXllclRyYW5zZm9ybS50cmFuc2xhdGUoMS4wLCAxLjApOworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVyVHJhbnNmb3JtOworICAgIHN1YmxheWVyVHJhbnNm
b3JtLnNjYWxlM2QoMTAuMCwgMS4wLCAxLjApOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
QSA9IHRyYW5zbGF0aW9uVG9BbmNob3IgKiBsYXllclRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9B
bmNob3IuaW52ZXJzZSgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IEIgPSB0cmFuc2xhdGlv
blRvQ2VudGVyICogc3VibGF5ZXJUcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQ2VudGVyLmludmVy
c2UoKTsKKworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBs
YXllclRyYW5zZm9ybSwgc3VibGF5ZXJUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMC4yNWYsIDAuMGYp
LCBGbG9hdFBvaW50KDIuNWYsIDAuMGYpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJlbmRlclN1cmZhY2UxLmdldCgpLCBsYXllclRy
YW5zZm9ybSwgc3VibGF5ZXJUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMC4yNWYsIDAuMGYpLCBGbG9h
dFBvaW50KDIuNWYsIDAuMGYpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKHJlbmRlclN1cmZhY2UyLmdldCgpLCBsYXllclRyYW5zZm9y
bSwgc3VibGF5ZXJUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMC4yNWYsIDAuMGYpLCBGbG9hdFBvaW50
KDIuNWYsIDAuMGYpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGNoaWxkT2ZSb290LmdldCgpLCBsYXllclRyYW5zZm9ybSwgc3VibGF5
ZXJUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMC4yNWYsIDAuMGYpLCBGbG9hdFBvaW50KDIuNWYsIDAu
MGYpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKGNoaWxkT2ZSUzEuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBzdWJsYXllclRyYW5zZm9y
bSwgRmxvYXRQb2ludCgwLjI1ZiwgMC4wZiksIEZsb2F0UG9pbnQoMi41ZiwgMC4wZiksIEludFNp
emUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hp
bGRPZlJTMi5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIHN1YmxheWVyVHJhbnNmb3JtLCBGbG9hdFBv
aW50KDAuMjVmLCAwLjBmKSwgRmxvYXRQb2ludCgyLjVmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTAp
LCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkT2ZS
b290LmdldCgpLCBsYXllclRyYW5zZm9ybSwgc3VibGF5ZXJUcmFuc2Zvcm0sIEZsb2F0UG9pbnQo
MC4yNWYsIDAuMGYpLCBGbG9hdFBvaW50KDIuNWYsIDAuMGYpLCBJbnRTaXplKDEwLCAxMCksIGZh
bHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGRPZlJTMS5n
ZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIHN1YmxheWVyVHJhbnNmb3JtLCBGbG9hdFBvaW50KDAuMjVm
LCAwLjBmKSwgRmxvYXRQb2ludCgyLjVmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7
CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkT2ZSUzIuZ2V0KCks
IGxheWVyVHJhbnNmb3JtLCBzdWJsYXllclRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLjI1ZiwgMC4w
ZiksIEZsb2F0UG9pbnQoMi41ZiwgMC4wZiksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOworCisg
ICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0
KCkpOworCisgICAgLy8gT25seSBsYXllcnMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHJlbmRl
ciBzdXJmYWNlcyBzaG91bGQgaGF2ZSBhbiBhY3R1YWwgcmVuZGVyU3VyZmFjZSgpIHZhbHVlLgor
ICAgIC8vCisgICAgQVNTRVJUX1RSVUUocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFT
U0VSVF9GQUxTRShjaGlsZE9mUm9vdC0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfRkFM
U0UoZ3JhbmRDaGlsZE9mUm9vdC0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEFTU0VSVF9UUlVF
KHJlbmRlclN1cmZhY2UxLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9GQUxTRShjaGls
ZE9mUlMxLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9GQUxTRShncmFuZENoaWxkT2ZS
UzEtPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICBBU1NFUlRfVFJVRShyZW5kZXJTdXJmYWNlMi0+
cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NFUlRfRkFMU0UoY2hpbGRPZlJTMi0+cmVuZGVyU3Vy
ZmFjZSgpKTsKKyAgICBBU1NFUlRfRkFMU0UoZ3JhbmRDaGlsZE9mUlMyLT5yZW5kZXJTdXJmYWNl
KCkpOworCisgICAgLy8gVmVyaWZ5IGFsbCB0YXJnZXRSZW5kZXJTdXJmYWNlIGFjY2Vzc29ycwor
ICAgIC8vCisgICAgRVhQRUNUX0VRKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLCBwYXJlbnQtPnRh
cmdldFJlbmRlclN1cmZhY2UoKSk7CisgICAgRVhQRUNUX0VRKHBhcmVudC0+cmVuZGVyU3VyZmFj
ZSgpLCBjaGlsZE9mUm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfRVEo
cGFyZW50LT5yZW5kZXJTdXJmYWNlKCksIGdyYW5kQ2hpbGRPZlJvb3QtPnRhcmdldFJlbmRlclN1
cmZhY2UoKSk7CisKKyAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZhY2Uo
KSwgcmVuZGVyU3VyZmFjZTEtPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CisgICAgRVhQRUNUX0VR
KHJlbmRlclN1cmZhY2UxLT5yZW5kZXJTdXJmYWNlKCksIGNoaWxkT2ZSUzEtPnRhcmdldFJlbmRl
clN1cmZhY2UoKSk7CisgICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2UxLT5yZW5kZXJTdXJmYWNl
KCksIGdyYW5kQ2hpbGRPZlJTMS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVD
VF9FUShyZW5kZXJTdXJmYWNlMi0+cmVuZGVyU3VyZmFjZSgpLCByZW5kZXJTdXJmYWNlMi0+dGFy
Z2V0UmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZTItPnJlbmRl
clN1cmZhY2UoKSwgY2hpbGRPZlJTMi0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBF
Q1RfRVEocmVuZGVyU3VyZmFjZTItPnJlbmRlclN1cmZhY2UoKSwgZ3JhbmRDaGlsZE9mUlMyLT50
YXJnZXRSZW5kZXJTdXJmYWNlKCkpOworCisgICAgLy8gVmVyaWZ5IGxheWVyIGRyYXcgdHJhbnNm
b3JtcworICAgIC8vICBub3RlIHRoYXQgZHJhdyB0cmFuc2Zvcm1zIGFyZSBkZXNjcmliZWQgd2l0
aCByZXNwZWN0IHRvIHRoZSBuZWFyZXN0IGFuY2VzdG9yIHJlbmRlciBzdXJmYWNlCisgICAgLy8g
IGJ1dCBzY3JlZW4gc3BhY2UgdHJhbnNmb3JtcyBhcmUgZGVzY3JpYmVkIHdpdGggcmVzcGVjdCB0
byB0aGUgcm9vdC4KKyAgICAvLworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiB0
cmFuc2xhdGlvblRvQ2VudGVyLCBwYXJlbnQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZ
X01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgY2hp
bGRPZlJvb3QtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFV
QUwoQSAqIEIgKiBBICogQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkT2ZS
b290LT5kcmF3VHJhbnNmb3JtKCkpOworCisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwo
dHJhbnNsYXRpb25Ub0NlbnRlciwgcmVuZGVyU3VyZmFjZTEtPmRyYXdUcmFuc2Zvcm0oKSk7Cisg
ICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVy
LCBjaGlsZE9mUlMxLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NU
X0VRVUFMKEIgKiBBICogQiAqIEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkT2ZS
UzEtPmRyYXdUcmFuc2Zvcm0oKSk7CisKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTCh0
cmFuc2xhdGlvblRvQ2VudGVyLCByZW5kZXJTdXJmYWNlMi0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAg
ICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIs
IGNoaWxkT2ZSUzItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1Rf
RVFVQUwoQiAqIEEgKiBCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRPZlJT
Mi0+ZHJhd1RyYW5zZm9ybSgpKTsKKworICAgIC8vIFZlcmlmeSBsYXllciBzY3JlZW4tc3BhY2Ug
dHJhbnNmb3JtcworICAgIC8vCisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSwgcGFy
ZW50LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9F
UVVBTChBICogQiAqIEEsIGNoaWxkT2ZSb290LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAg
ICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBCICogQSwgZ3JhbmRDaGls
ZE9mUm9vdC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisKKyAgICBWRVJJRllfTUFUUklYX0FM
TU9TVF9FUVVBTChBICogQiAqIEEsIHJlbmRlclN1cmZhY2UxLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBCICogQSwg
Y2hpbGRPZlJTMS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9B
TE1PU1RfRVFVQUwoQSAqIEIgKiBBICogQiAqIEEgKiBCICogQSwgZ3JhbmRDaGlsZE9mUlMxLT5z
Y3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFM
KEEgKiBCICogQSAqIEIgKiBBLCByZW5kZXJTdXJmYWNlMi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICogQiAqIEEgKiBC
ICogQSwgY2hpbGRPZlJTMi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01B
VFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICogQiAqIEEgKiBCICogQSAqIEIgKiBBLCBncmFu
ZENoaWxkT2ZSUzItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisgICAgLy8gVmVyaWZ5IHJl
bmRlciBzdXJmYWNlIHRyYW5zZm9ybXMuCisgICAgLy8KKyAgICAvLyBPcmlnaW4gdHJhbnNmb3Jt
IG9mIHJlbmRlciBzdXJmYWNlIDEgaXMgZGVzY3JpYmVkIHdpdGggcmVzcGVjdCB0byByb290Lgor
ICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSwgcmVuZGVyU3VyZmFjZTEt
PnJlbmRlclN1cmZhY2UoKS0+b3JpZ2luVHJhbnNmb3JtKCkpOworICAgIC8vIE9yaWdpbiB0cmFu
c2Zvcm0gb2YgcmVuZGVyIHN1cmZhY2UgMiBpcyBkZXNjcmliZWQgd2l0aCByZXNwZWN0IHRvIHJl
bmRlciBzdXJmYWNlIDIuCisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQiAqIEEsIHJl
bmRlclN1cmZhY2UyLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpKTsKKworICAg
IC8vIFNhbml0eSBjaGVjay4gSWYgdGhlc2UgZmFpbCB0aGVyZSBpcyBwcm9iYWJseSBhIGJ1ZyBp
biB0aGUgdGVzdCBpdHNlbGYuCisgICAgLy8gSXQgaXMgZXhwZWN0ZWQgdGhhdCB3ZSBjb3JyZWN0
bHkgc2V0IHVwIHRyYW5zZm9ybXMgc28gdGhhdCB0aGUgeS1jb21wb25lbnQgb2YgdGhlIHNjcmVl
bi1zcGFjZSB0cmFuc2Zvcm0KKyAgICAvLyBlbmNvZGVzIHRoZSAiZGVwdGgiIG9mIHRoZSBsYXll
ciBpbiB0aGUgdHJlZS4KKyAgICBFWFBFQ1RfRkxPQVRfRVEoMS4wLCBwYXJlbnQtPnNjcmVlblNw
YWNlVHJhbnNmb3JtKCkubTQyKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLjAsIGNoaWxkT2ZS
b290LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLm00MigpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
My4wLCBncmFuZENoaWxkT2ZSb290LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLm00MigpKTsKKwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgyLjAsIHJlbmRlclN1cmZhY2UxLT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpLm00MigpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMy4wLCBjaGlsZE9mUlMxLT5zY3Jl
ZW5TcGFjZVRyYW5zZm9ybSgpLm00MigpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNC4wLCBncmFu
ZENoaWxkT2ZSUzEtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkubTQyKCkpOworCisgICAgRVhQRUNU
X0ZMT0FUX0VRKDMuMCwgcmVuZGVyU3VyZmFjZTItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkubTQy
KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LjAsIGNoaWxkT2ZSUzItPnNjcmVlblNwYWNlVHJh
bnNmb3JtKCkubTQyKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg1LjAsIGdyYW5kQ2hpbGRPZlJT
Mi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tNDIoKSk7Cit9CisKKy8vIEZJWE1FOgorLy8gY29u
dGludWUgd29ya2luZyBvbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Njg5NDIKKy8vICAtIGFkZCBhIHRlc3QgdG8gdmVyaWZ5IGNsaXBwaW5nIHRoYXQgY2hhbmdlcyB0
aGUgImNlbnRlciBwb2ludCIKKy8vICAtIGFkZCBhIGNhc2UgdGhhdCBjaGVja3MgaWYgYSByZW5k
ZXIgc3VyZmFjZSdzIGRyYXdUcmFuc2Zvcm0gaXMgY29tcHV0ZWQgY29ycmVjdGx5LiBGb3IgdGhl
IGdlbmVyYWwgY2FzZSwgYW5kIGZvciBzcGVjaWFsIGNhc2VzIHdoZW4gY2xpcHBpbmcvc2Npc3Nv
cmluZy4KKy8vICAtIGFkZCBhIGNhc2UgdGhhdCBjaGVja3MgaWYgYSByZW5kZXIgc3VyZmFjZSdz
IHJlcGxpY2FUcmFuc2Zvcm0gaXMgY29tcHV0ZWQgY29ycmVjdGx5LgorLy8gIC0gdGVzdCBhbGwg
dGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggcmVuZGVyIHN1cmZhY2VzIGFyZSBjcmVhdGVkCisv
LyAgLSBpZiBwb3NzaWJsZSwgdGVzdCBhbGwgY29uZGl0aW9ucyB1bmRlciB3aGljaCByZW5kZXIg
c3VyZmFjZXMgYXJlIG5vdCBjcmVhdGVkCisvLyAgLSB2ZXJpZnkgdGhhdCB0aGUgbGF5ZXIgbGlz
dHMgb2YgcmVuZGVyIHN1cmZhY2VzIGFyZSBjb3JyZWN0LCB2ZXJpZnkgdGhhdCAidGFyZ2V0UmVu
ZGVyU3VyZmFjZSIgdmFsdWVzIGZvciBlYWNoIGxheWVyIGFyZSBjb3JyZWN0LgorLy8gIC0gdGVz
dCB0aGUgY29tcHV0YXRpb24gb2Ygc2Npc3NvciByZWN0cyBhbmQgY29udGVudCByZWN0cworLy8g
IC0gdGVzdCB0aGUgc3BlY2lhbCBjYXNlcyBmb3IgbWFzayBsYXllcnMgYW5kIHJlcGxpY2EgbGF5
ZXJzCisvLyAgLSB0ZXN0IHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gQ0NMYXllclRyZWVIb3N0Q29t
bW9uCisvLworCit9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110223</attachid>
            <date>2011-10-07 15:10:57 -0700</date>
            <delta_ts>2011-10-07 16:19:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69197-20111007151056.patch</filename>
            <type>text/plain</type>
            <size>33457</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY4MTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
ZWZhMzFlYzdmNGI5OTVhNjdhZWNiY2ZjMzdjMjg3OWY5NjdkN2E0YS4uYjZjOTEyNzZkMDE1OThi
NGFiYzBiMmQyZjcyM2ZkZjNiNmU4ODZiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMiBAQAorMjAxMS0xMC0wNyAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBGaXJzdCByb3VuZCBvZiB1bml0IHRlc3RzIGZvciBDQ0xheWVy
VHJlZUhvc3RDb21tb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02OTE5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcm91bmQgb2YgdGVzdHMgZm9jdXNlcyBvbiB2ZXJpZnlpbmcgdGhlIGNvbXB1
dGF0aW9uIG9mIG1hdHJpeCB0cmFuc2Zvcm1zCisgICAgICAgIGluIGNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eS4KKworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAq
IHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OnNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
ZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpyZW1vdmUzRENvbXBvbmVudE9mTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50OjpMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtV2l0aEZvcmNl
ZERyYXdzQ29udGVudDo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgor
CiAyMDExLTEwLTA2ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByOTY3OTEuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQppbmRleCA3ZDVhZjZjMDMwYjQ0ZTM4ZDUzMTE5MWE2MTdiYzkzMjdkMDA1
NGIwLi40YjNhODVjY2ZkOWQ5MzZiMzU1ZTY4MWMzMzY2Y2NjZGNkYjE4MjliIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTU1LDYgKzU1LDcgQEAKICAgICAgICAgICAgICd0ZXN0
cy9BcmVuYVRlc3RIZWxwZXJzLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0Fzc29jaWF0ZWRVUkxM
b2FkZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclNvcnRlclRlc3QuY3Bw
JywKKyAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
Q0NTY2hlZHVsZXJUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMzY0
Njk2MmJhOTcxMmE0MWJiODEzNjlhNTlkOTkzOTUzMmIwM2UxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNw
cApAQCAtMCwwICsxLDQ4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCisKKyNpbmNsdWRlICJMYXll
ckNocm9taXVtLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKworI2luY2x1
ZGUgPGdtb2NrL2dtb2NrLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKKy8vIFRoaXMgaXMgYSBtYWNybyBpbnN0
ZWFkIG9mIGEgZnVuY3Rpb24gc28gdGhhdCB0aGUgZ3Rlc3QgZXJyb3JzIGNhbiBnaXZlIHVzIHVz
ZWZ1bCBsaW5lIG51bWJlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0ZXN0LgorLy8gRXZlbiB0aG91
Z2ggVHJhbnNmb3JtYXRpb25NYXRyaXggdmFsdWVzIGFyZSBkb3VibGUsIHRoZXJlIGFyZSBtYW55
IG90aGVyIGZsb2F0aW5nLXBvaW50IHZhbHVlcyB1c2VkLCBhbmQgc28gd2UKKy8vIG9ubHkgZXhw
ZWN0IHRoZW0gdG8gYmUgYWNjdXJhdGUgdXAgdG8gZmxvYXRpbmctcG9pbnQgcHJlY2lzaW9uLgor
I2RlZmluZSBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChleHBlY3RlZCwgYWN0dWFsKSAgICBc
CisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTExKCksIChhY3R1YWwpLm0xMSgpKTsg
IFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMTIoKSwgKGFjdHVhbCkubTEyKCkp
OyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0xMygpLCAoYWN0dWFsKS5tMTMo
KSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTE0KCksIChhY3R1YWwpLm0x
NCgpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMjEoKSwgKGFjdHVhbCku
bTIxKCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0yMigpLCAoYWN0dWFs
KS5tMjIoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTIzKCksIChhY3R1
YWwpLm0yMygpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMjQoKSwgKGFj
dHVhbCkubTI0KCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0zMSgpLCAo
YWN0dWFsKS5tMzEoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCkubTMyKCks
IChhY3R1YWwpLm0zMigpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVkKS5tMzMo
KSwgKGFjdHVhbCkubTMzKCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0ZWQpLm0z
NCgpLCAoYWN0dWFsKS5tMzQoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3RlZCku
bTQxKCksIChhY3R1YWwpLm00MSgpKTsgIFwKKyAgICBFWFBFQ1RfRkxPQVRfRVEoKGV4cGVjdGVk
KS5tNDIoKSwgKGFjdHVhbCkubTQyKCkpOyAgXAorICAgIEVYUEVDVF9GTE9BVF9FUSgoZXhwZWN0
ZWQpLm00MygpLCAoYWN0dWFsKS5tNDMoKSk7ICBcCisgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBl
Y3RlZCkubTQ0KCksIChhY3R1YWwpLm00NCgpKQorCit2b2lkIHNldExheWVyUHJvcGVydGllc0Zv
clRlc3RpbmcoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0cmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwg
Y29uc3QgSW50U2l6ZSYgYm91bmRzLCBib29sIHByZXNlcnZlczNEKQoreworICAgIGxheWVyLT5z
ZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKyAgICBsYXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0o
c3VibGF5ZXJUcmFuc2Zvcm0pOworICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChhbmNob3IpOwor
ICAgIGxheWVyLT5zZXRQb3NpdGlvbihwb3NpdGlvbik7CisgICAgbGF5ZXItPnNldEJvdW5kcyhi
b3VuZHMpOworICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCk7Cit9CisKK3Zv
aWQgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXllckNocm9t
aXVtKiByb290TGF5ZXIpCit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRy
aXg7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15UmVuZGVyU3VyZmFj
ZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXll
ckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExh
eWVyLCByb290TGF5ZXIsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgZHVtbXlSZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7
Cit9CisKK1RyYW5zZm9ybWF0aW9uTWF0cml4IHJlbW92ZTNEQ29tcG9uZW50T2ZNYXRyaXgoY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdCkKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCByZXQgPSBtYXQ7CisgICAgcmV0LnNldE0xMygwKTsKKyAgICByZXQuc2V0TTIzKDApOworICAg
IHJldC5zZXRNMzEoMCk7CisgICAgcmV0LnNldE0zMigwKTsKKyAgICByZXQuc2V0TTMzKDEpOwor
ICAgIHJldC5zZXRNMzQoMCk7CisgICAgcmV0LnNldE00MygwKTsKKyAgICByZXR1cm4gcmV0Owor
fQorCitjbGFzcyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCA6IHB1YmxpYyBM
YXllckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudChDQ0xheWVyRGVsZWdhdGUqIGRlbGVnYXRlKQorICAgICAgICA6IExh
eWVyQ2hyb21pdW0oZGVsZWdhdGUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBk
cmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Cit9OworCitURVNUKENDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JOb09wTGF5ZXIpCit7CisgICAg
Ly8gU2FuaXR5IGNoZWNrOiBGb3IgbGF5ZXJzIHBvc2l0aW9uZWQgYXQgemVybywgd2l0aCB6ZXJv
IHNpemUsCisgICAgLy8gYW5kIHdpdGggaWRlbnRpdHkgdHJhbnNmb3JtcywgdGhlbiB0aGUgZHJh
d1RyYW5zZm9ybSwKKyAgICAvLyBzY3JlZW5TcGFjZVRyYW5zZm9ybSwgYW5kIHRoZSBoaWVyYXJj
aHkgcGFzc2VkIG9uIHRvIGNoaWxkcmVuCisgICAgLy8gbGF5ZXJzIHNob3VsZCBhbHNvIGJlIGlk
ZW50aXR5IHRyYW5zZm9ybXMuCisKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0g
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGls
ZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
Z3JhbmRDaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBwYXJlbnQtPmNyZWF0
ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBjaGls
ZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZCk7CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVu
dGl0eU1hdHJpeDsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYp
LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDAsIDApLCBmYWxzZSk7CisgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAu
MGYpLCBJbnRTaXplKDAsIDApLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZs
b2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMCwg
MCksIGZhbHNlKTsKKworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2li
aWxpdHkocGFyZW50LmdldCgpKTsKKworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlk
ZW50aXR5TWF0cml4LCBwYXJlbnQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJ
WF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIHBhcmVudC0+c2NyZWVuU3BhY2VUcmFuc2Zv
cm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGNo
aWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlk
ZW50aXR5TWF0cml4LCBjaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZ
X01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGdyYW5kQ2hpbGQtPmRyYXdUcmFu
c2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgs
IGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworfQorCitURVNUKENDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVMYXllcikKK3sKKyAg
ICAvLyBOT1RFIENBUkVGVUxMWToKKyAgICAvLyBMYXllckNocm9taXVtOjpwb3NpdGlvbiBpcyBh
Y3R1YWxseSB0aGUgc3VtIG9mIGFuY2hvclBvaW50IChpbiBwaXhlbCBzcGFjZSkgYW5kIGFjdHVh
bCBwb3NpdGlvbi4gQmVjYXVzZSBvZiB0aGlzLCB0aGUKKyAgICAvLyB2YWx1ZSBvZiBMYXllckNo
cm9taXVtOjpwb3NpdGlvbigpIGNoYW5nZXMgaWYgdGhlIGFuY2hvciBjaGFuZ2VzLCBldmVuIHRo
b3VnaCB0aGUgbGF5ZXIgaXMgbm90IGFjdHVhbGx5IGxvY2F0ZWQgaW4gYQorICAgIC8vIGRpZmZl
cmVudCBwb3NpdGlvbi4gV2hlbiB3ZSBpbml0aWFsaXplIGxheWVycyBmb3IgdGVzdGluZyBoZXJl
LCB3ZSBuZWVkIHRvIGluaXRpYWxpemUgdGhhdCB1bmludHV0aXZlIHBvc2l0aW9uIHZhbHVlLgor
CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IGxheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAgIGxheWVy
LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisKKyAgICAvLyBDYXNlIDE6IHNldHRpbmcgdGhlIHN1
YmxheWVyIHRyYW5zZm9ybSBzaG91bGQgbm90IGFmZmVjdCB0aGlzIGxheWVyJ3MgZHJhdyB0cmFu
c2Zvcm0gb3Igc2NyZWVuLXNwYWNlIHRyYW5zZm9ybS4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBhcmJpdHJhcnlUcmFuc2xhdGlvbjsKKyAgICBhcmJpdHJhcnlUcmFuc2xhdGlvbi50cmFuc2xh
dGUoMTAuMCwgMjAuMCk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGFyYml0cmFyeVRyYW5zbGF0aW9uLCBGbG9hdFBvaW50KDAu
MGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDAsIDApLCBmYWxzZSk7
CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXllci5n
ZXQoKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGxh
eWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGlk
ZW50aXR5TWF0cml4LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisKKyAgICAvLyBD
YXNlIDI6IHNldHRpbmcgdGhlIGJvdW5kcyBvZiB0aGUgbGF5ZXIgc2hvdWxkIHJlc3VsdCBpbiBh
IGRyYXcgdHJhbnNmb3JtIHRoYXQgdHJhbnNsYXRlcyB0byBoYWxmIHRoZSB3aWR0aCBhbmQgaGVp
Z2h0LgorICAgIC8vICAgICAgICAgVGhlIHNjcmVlbi1zcGFjZSB0cmFuc2Zvcm0gc2hvdWxkIHJl
bWFpbiBhcyB0aGUgaWRlbnRpdHksIGJlY2F1c2UgaXQgZG9lcyBub3QgZGVhbCB3aXRoIHRyYW5z
Zm9ybWluZyB0by9mcm9tIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyLgorICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHRyYW5zbGF0aW9uVG9DZW50ZXI7CisgICAgdHJhbnNsYXRpb25Ub0NlbnRlci50
cmFuc2xhdGUoNS4wLCA2LjApOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5
ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBm
LCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7
CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXllci5n
ZXQoKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwodHJhbnNsYXRpb25Ub0NlbnRl
ciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFV
QUwoaWRlbnRpdHlNYXRyaXgsIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKworICAg
IC8vIENhc2UgMzogVGhlIGFuY2hvciBwb2ludCBieSBpdHNlbGYgKHdpdGhvdXQgYSBsYXllciB0
cmFuc2Zvcm0pIHNob3VsZCBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgdHJhbnNmb3Jtcy4KKyAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxheWVyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQb2ludCgyLjVm
LCAzLjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXllci5nZXQoKSk7CisgICAgVkVSSUZZX01BVFJJ
WF9BTE1PU1RfRVFVQUwodHJhbnNsYXRpb25Ub0NlbnRlciwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0o
KSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRlbnRpdHlNYXRyaXgsIGxheWVy
LT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKworICAgIC8vIENhc2UgNDogQSBjaGFuZ2UgaW4g
ImFjdHVhbCIgcG9zaXRpb24gYWZmZWN0cyBib3RoIHRoZSBkcmF3IHRyYW5zZm9ybSBhbmQgc2Ny
ZWVuIHNwYWNlIHRyYW5zZm9ybS4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwb3NpdGlvblRy
YW5zZm9ybTsKKyAgICBwb3NpdGlvblRyYW5zZm9ybS50cmFuc2xhdGUoMC4wLCAxLjIpOworICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjI1ZiwgMC4yNWYpLCBGbG9hdFBvaW50KDIu
NWYsIDQuMmYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKKyAgICBleGVjdXRlQ2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgpKTsKKyAgICBWRVJJRllfTUFU
UklYX0FMTU9TVF9FUVVBTChwb3NpdGlvblRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIs
IGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFM
KHBvc2l0aW9uVHJhbnNmb3JtLCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisKKyAg
ICAvLyBDYXNlIDU6IEluIHRoZSBjb3JyZWN0IHNlcXVlbmNlIG9mIHRyYW5zZm9ybXMsIHRoZSBs
YXllciB0cmFuc2Zvcm0gc2hvdWxkIHByZS1tdWx0aXBseSB0aGUgdHJhbnNsYXRpb25Ub0NlbnRl
ci4gVGhpcyBpcyBlYXNpbHkgdGVzdGVkIGJ5CisgICAgLy8gICAgICAgICB1c2luZyBhIHNjYWxl
IHRyYW5zZm9ybSwgYmVjYXVzZSBzY2FsZSBhbmQgdHJhbnNsYXRpb24gYXJlIG5vdCBjb21tdXRh
dGl2ZS4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllclRyYW5zZm9ybTsKKyAgICBsYXll
clRyYW5zZm9ybS5zY2FsZTNkKDIuMCwgMi4wLCAxLjApOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgx
MCwgMTIpLCBmYWxzZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShsYXllci5nZXQoKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwobGF5
ZXJUcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgp
KTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChsYXllclRyYW5zZm9ybSwgbGF5ZXIt
PnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisgICAgLy8gQ2FzZSA2OiBUaGUgbGF5ZXIgdHJh
bnNmb3JtIHNob3VsZCBvY2N1ciB3aXRoIHJlc3BlY3QgdG8gdGhlIGFuY2hvciBwb2ludC4KKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2xhdGlvblRvQW5jaG9yOworICAgIHRyYW5zbGF0
aW9uVG9BbmNob3IudHJhbnNsYXRlKDUuMCwgMC4wKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBleHBlY3RlZFJlc3VsdCA9IHRyYW5zbGF0aW9uVG9BbmNob3IgKiBsYXllclRyYW5zZm9ybSAq
IHRyYW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpOworICAgIHNldExheWVyUHJvcGVydGllc0Zv
clRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLjVmLCAwLjBmKSwgRmxvYXRQb2ludCg1LjBmLCAwLjBmKSwgSW50U2l6ZSgxMCwg
MTIpLCBmYWxzZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJp
bGl0eShsYXllci5nZXQoKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoZXhwZWN0
ZWRSZXN1bHQgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsK
KyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChleHBlY3RlZFJlc3VsdCwgbGF5ZXItPnNj
cmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisgICAgLy8gQ2FzZSA3OiBWZXJpZnkgdGhhdCBwb3Np
dGlvbiBwcmUtbXVsdGlwbGllcyB0aGUgbGF5ZXIgdHJhbnNmb3JtLgorICAgIC8vICAgICAgICAg
VGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRW
aXNpYmlsaXR5IGRvZXMgdGhpcyBpbXBsaWNpdGx5LCBidXQgaXQgaXMKKyAgICAvLyAgICAgICAg
IHN0aWxsIHdvcnRoIHRlc3RpbmcgdG8gZGV0ZWN0IGFjY2lkZW50YWwgcmVncmVzc2lvbnMuCisg
ICAgZXhwZWN0ZWRSZXN1bHQgPSBwb3NpdGlvblRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9BbmNo
b3IgKiBsYXllclRyYW5zZm9ybSAqIHRyYW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpOworICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcobGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3Jt
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjVmLCAwLjBmKSwgRmxvYXRQb2ludCg1LjBm
LCAxLjJmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CisgICAgZXhlY3V0ZUNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXllci5nZXQoKSk7CisgICAgVkVSSUZZX01BVFJJ
WF9BTE1PU1RfRVFVQUwoZXhwZWN0ZWRSZXN1bHQgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBsYXll
ci0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChleHBl
Y3RlZFJlc3VsdCwgbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworfQorCitURVNUKEND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW1wbGVIaWVyYXJj
aHkpCit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGQgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoMCk7CisgICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcGFyZW50
LT5hZGRDaGlsZChjaGlsZCk7CisgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQpOworCisg
ICAgLy8gQ2FzZSAxOiBwYXJlbnQncyBhbmNob3JQb2ludCBzaG91bGQgbm90IGFmZmVjdCBjaGls
ZCBvciBncmFuZENoaWxkLgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNsYXRp
b25Ub0NlbnRlciwgZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXI7CisgICAgY2hpbGRUcmFu
c2xhdGlvblRvQ2VudGVyLnRyYW5zbGF0ZSg4LjAsIDkuMCk7CisgICAgZ3JhbmRDaGlsZFRyYW5z
bGF0aW9uVG9DZW50ZXIudHJhbnNsYXRlKDM4LjAsIDM5LjApOworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQb2ludCgyLjVmLCAzLjBmKSwgSW50
U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhj
aGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAu
MGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2LCAxOCksIGZhbHNl
KTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxv
YXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7CisgICAgZXhlY3V0
ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkpOworICAg
IFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hp
bGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoaWRl
bnRpdHlNYXRyaXgsIGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllf
TUFUUklYX0FMTU9TVF9FUVVBTChncmFuZENoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgZ3JhbmRD
aGlsZC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChp
ZGVudGl0eU1hdHJpeCwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisKKyAg
ICAvLyBDYXNlIDI6IHBhcmVudCdzIHBvc2l0aW9uIGFmZmVjdHMgY2hpbGQgYW5kIGdyYW5kQ2hp
bGQuCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50UG9zaXRpb25UcmFuc2Zvcm07Cisg
ICAgcGFyZW50UG9zaXRpb25UcmFuc2Zvcm0udHJhbnNsYXRlKDAuMCwgMS4yKTsKKyAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMjVmLCAwLjI1ZiksIEZsb2F0UG9pbnQoMi41Ziwg
NC4yZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0Zv
clRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxNiwg
MTgpLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxk
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwg
MC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoNzYsIDc4KSwgZmFsc2UpOwor
ICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50Lmdl
dCgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRQb3NpdGlvblRyYW5z
Zm9ybSAqIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7
CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50UG9zaXRpb25UcmFuc2Zvcm0s
IGNoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9T
VF9FUVVBTChwYXJlbnRQb3NpdGlvblRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRv
Q2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhf
QUxNT1NUX0VRVUFMKHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3JlZW5T
cGFjZVRyYW5zZm9ybSgpKTsKKworICAgIC8vIENhc2UgMzogcGFyZW50J3MgbG9jYWwgdHJhbnNm
b3JtIGFmZmVjdHMgY2hpbGQgYW5kIGdyYW5kY2hpbGQKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBwYXJlbnRMYXllclRyYW5zZm9ybTsKKyAgICBwYXJlbnRMYXllclRyYW5zZm9ybS5zY2FsZTNk
KDIuMCwgMi4wLCAxLjApOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFRyYW5zbGF0
aW9uVG9BbmNob3I7CisgICAgcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hvci50cmFuc2xhdGUoMi41
LCAzLjApOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudENvbXBvc2l0ZVRyYW5zZm9y
bSA9IHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3IgKiBwYXJlbnRMYXllclRyYW5zZm9ybSAqIHBh
cmVudFRyYW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBwYXJlbnRMYXllclRyYW5zZm9ybSwgaWRlbnRpdHlN
YXRyaXgsIEZsb2F0UG9pbnQoMC4yNWYsIDAuMjVmKSwgRmxvYXRQb2ludCgyLjVmLCAzLjBmKSwg
SW50U2l6ZSgxMCwgMTIpLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50
KDAuMGYsIDAuMGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDE2LCAxOCksIGZh
bHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwg
RmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSg3NiwgNzgpLCBmYWxzZSk7CisgICAgZXhl
Y3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShwYXJlbnQuZ2V0KCkpOwor
ICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSAq
IGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAg
VkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBjaGls
ZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFV
QUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtICogZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50
ZXIsIGdyYW5kQ2hpbGQtPmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1P
U1RfRVFVQUwocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtLCBncmFuZENoaWxkLT5zY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpKTsKKworICAgIC8vIENhc2UgNDogcGFyZW50J3Mgc3VibGF5ZXJNYXRyaXgg
YWZmZWN0cyBjaGlsZCBhbmQgZ3JhbmRjaGlsZAorICAgIC8vICAgICAgICAgc2NhbGluZyBpcyB1
c2VkIGhlcmUgYWdhaW4gc28gdGhhdCB0aGUgY29ycmVjdCBzZXF1ZW5jZSBvZiB0cmFuc2Zvcm1z
IGlzIHByb3Blcmx5IHRlc3RlZC4KKyAgICAvLyAgICAgICAgIE5vdGUgdGhhdCBwcmVzZXJ2ZXMz
RCBpcyBmYWxzZSwgYnV0IHRoZSBzdWJsYXllciBtYXRyaXggc2hvdWxkIHJldGFpbiBpdHMgM0Qg
cHJvcGVydGllcyB3aGVuIGdpdmVuIHRvIGNoaWxkLgorICAgIC8vICAgICAgICAgQnV0IHRoZW4s
IHRoZSBjaGlsZCBhbHNvIGRvZXMgbm90IHByZXNlcnZlM0QuIFdoZW4gaXQgZ2l2ZXMgaXRzIGhp
ZXJhcmNoeSB0byB0aGUgZ3JhbmRDaGlsZCwgaXQgc2hvdWxkIGJlIGZsYXR0ZW5lZCB0byAyRC4K
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRTdWJsYXllck1hdHJpeDsKKyAgICBwYXJl
bnRTdWJsYXllck1hdHJpeC5zY2FsZTNkKDEwLjAsIDEwLjAsIDMuMyk7CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggcGFyZW50VHJhbnNsYXRpb25Ub0NlbnRlcjsKKyAgICBwYXJlbnRUcmFuc2xh
dGlvblRvQ2VudGVyLnRyYW5zbGF0ZSg1LjAsIDYuMCk7CisgICAgLy8gU3VibGF5ZXIgbWF0cml4
IGlzIGFwcGxpZWQgdG8gdGhlIGNlbnRlciBvZiB0aGUgcGFyZW50IGxheWVyLgorICAgIHBhcmVu
dENvbXBvc2l0ZVRyYW5zZm9ybSA9IHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3IgKiBwYXJlbnRM
YXllclRyYW5zZm9ybSAqIHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpCisgICAg
ICAgICAgICAqIHBhcmVudFRyYW5zbGF0aW9uVG9DZW50ZXIgKiBwYXJlbnRTdWJsYXllck1hdHJp
eCAqIHBhcmVudFRyYW5zbGF0aW9uVG9DZW50ZXIuaW52ZXJzZSgpOworICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5zZm9ybSA9IHJlbW92ZTNEQ29tcG9uZW50
T2ZNYXRyaXgocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtKTsKKyAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgcGFyZW50TGF5ZXJUcmFuc2Zvcm0sIHBhcmVudFN1
YmxheWVyTWF0cml4LCBGbG9hdFBvaW50KDAuMjVmLCAwLjI1ZiksIEZsb2F0UG9pbnQoMi41Ziwg
My4wZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0Zv
clRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgxNiwg
MTgpLCBmYWxzZSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxk
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwg
MC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoNzYsIDc4KSwgZmFsc2UpOwor
ICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocGFyZW50Lmdl
dCgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFu
c2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkp
OworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9y
bSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxN
T1NUX0VRVUFMKGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5zZm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xh
dGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9N
QVRSSVhfQUxNT1NUX0VRVUFMKGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5zZm9ybSwgZ3JhbmRDaGls
ZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7CisKKyAgICAvLyBDYXNlIDU6IHNhbWUgYXMgQ2Fz
ZSA0LCBleGNlcHQgdGhhdCBjaGlsZCBkb2VzIHByZXNlcnZlIDNELCBzbyB0aGUgZ3JhbmRDaGls
ZCBzaG91bGQgcmVjZWl2ZSB0aGUgbm9uLWZsYXR0ZW5lZCBjb21wb3NpdGUgdHJhbnNmb3JtLgor
ICAgIC8vCisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIHBh
cmVudExheWVyVHJhbnNmb3JtLCBwYXJlbnRTdWJsYXllck1hdHJpeCwgRmxvYXRQb2ludCgwLjI1
ZiwgMC4yNWYpLCBGbG9hdFBvaW50KDIuNWYsIDMuMGYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNl
KTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9p
bnQoMC4wZiwgMC4wZiksIEludFNpemUoMTYsIDE4KSwgdHJ1ZSk7CisgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiks
IEludFNpemUoNzYsIDc4KSwgZmFsc2UpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9T
VF9FUVVBTChwYXJlbnRDb21wb3NpdGVUcmFuc2Zvcm0gKiBjaGlsZFRyYW5zbGF0aW9uVG9DZW50
ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VR
VUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3Jt
KCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0ZVRyYW5z
Zm9ybSAqIGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLCBncmFuZENoaWxkLT5kcmF3VHJh
bnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBvc2l0
ZVRyYW5zZm9ybSwgZ3JhbmRDaGlsZC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7Cit9CisKK1RF
U1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZVJl
bmRlclN1cmZhY2UpCit7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVy
Q2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9y
Y2VkRHJhd3NDb250ZW50PiBncmFuZENoaWxkID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1X
aXRoRm9yY2VkRHJhd3NDb250ZW50KDApKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZh
Y2UoKTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKKyAgICBjaGlsZC0+YWRkQ2hpbGQo
Z3JhbmRDaGlsZCk7CisKKyAgICAvLyBDaGlsZCBpcyBzZXQgdXAgc28gdGhhdCBhIG5ldyByZW5k
ZXIgc3VyZmFjZSBzaG91bGQgYmUgY3JlYXRlZC4KKyAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjVm
KTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHBhcmVudExheWVyVHJhbnNmb3JtOworICAgIHBhcmVudExheWVyVHJh
bnNmb3JtLnNjYWxlM2QoMi4wLCAyLjAsIDEuMCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
cGFyZW50VHJhbnNsYXRpb25Ub0FuY2hvcjsKKyAgICBwYXJlbnRUcmFuc2xhdGlvblRvQW5jaG9y
LnRyYW5zbGF0ZSgyLjUsIDMuMCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50U3Vi
bGF5ZXJNYXRyaXg7CisgICAgcGFyZW50U3VibGF5ZXJNYXRyaXguc2NhbGUzZCgxMC4wLCAxMC4w
LCAzLjMpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFRyYW5zbGF0aW9uVG9DZW50
ZXI7CisgICAgcGFyZW50VHJhbnNsYXRpb25Ub0NlbnRlci50cmFuc2xhdGUoNS4wLCA2LjApOwor
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSA9IHBhcmVu
dFRyYW5zbGF0aW9uVG9BbmNob3IgKiBwYXJlbnRMYXllclRyYW5zZm9ybSAqIHBhcmVudFRyYW5z
bGF0aW9uVG9BbmNob3IuaW52ZXJzZSgpCisgICAgICAgICAgICAqIHBhcmVudFRyYW5zbGF0aW9u
VG9DZW50ZXIgKiBwYXJlbnRTdWJsYXllck1hdHJpeCAqIHBhcmVudFRyYW5zbGF0aW9uVG9DZW50
ZXIuaW52ZXJzZSgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNsYXRpb25U
b0NlbnRlcjsKKyAgICBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIudHJhbnNsYXRlKDguMCwgOS4w
KTsKKworICAgIC8vIENoaWxkJ3MgcmVuZGVyIHN1cmZhY2Ugc2hvdWxkIG5vdCBleGlzdCB5ZXQu
CisgICAgQVNTRVJUX0ZBTFNFKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpOworCisgICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIHBhcmVudExheWVyVHJhbnNmb3Jt
LCBwYXJlbnRTdWJsYXllck1hdHJpeCwgRmxvYXRQb2ludCgwLjI1ZiwgMC4yNWYpLCBGbG9hdFBv
aW50KDIuNWYsIDMuMGYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKKyAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIElu
dFNpemUoMTYsIDE4KSwgZmFsc2UpOworICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
c0FuZFZpc2liaWxpdHkocGFyZW50LmdldCgpKTsKKworICAgIC8vIFJlbmRlciBzdXJmYWNlIHNo
b3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBub3cuCisgICAgQVNTRVJUX1RSVUUoY2hpbGQtPnJlbmRl
clN1cmZhY2UoKSk7CisgICAgQVNTRVJUX0VRKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCksIGNoaWxk
LT50YXJnZXRSZW5kZXJTdXJmYWNlKCkpOworCisgICAgLy8gVGhlIGNoaWxkIGxheWVyJ3MgZHJh
dyB0cmFuc2Zvcm0gc2hvdWxkIHJlZmVyIHRvIGl0cyBuZXcgcmVuZGVyIHN1cmZhY2U7IHRoZXkg
b25seSBkaWZmZXIgYnkgYSB0cmFuc2xhdGlvbiB0byBjZW50ZXIuCisgICAgLy8gVGhlIHNjcmVl
bi1zcGFjZSB0cmFuc2Zvcm0sIGhvd2V2ZXIsIHNob3VsZCBzdGlsbCByZWZlciB0byB0aGUgcm9v
dC4KKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChjaGlsZFRyYW5zbGF0aW9uVG9DZW50
ZXIsIGNoaWxkLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VR
VUFMKHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3Jt
KCkpOworCisgICAgLy8gV2l0aG91dCBjbGlwcGluZyBhbmQgc2Npc3NvcmluZywgdGhlIG9yaWdp
biB0cmFuc2Zvcm0gYW5kIGRyYXcgdHJhbnNmb3JtIChpbiB0aGlzIHBhcnRpY3VsYXIgY2FzZSkg
c2hvdWxkIGJlIHRoZSBzYW1lLgorICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVu
dENvbXBvc2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+b3JpZ2lu
VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHBhcmVudENvbXBv
c2l0ZVRyYW5zZm9ybSwgY2hpbGQtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+ZHJhd1RyYW5zZm9y
bSgpKTsKKworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5z
Zm9ybXNGb3JSZW5kZXJTdXJmYWNlSGllcmFyY2h5KQoreworICAgIC8vIFRoaXMgdGVzdCBjcmVh
dGVzIGEgbW9yZSBjb21wbGV4IHRyZWUgYW5kIHZlcmlmaWVzIGl0IGFsbCBhdCBvbmNlLiBUaGlz
IGNvdmVycyB0aGUgZm9sbG93aW5nIGNhc2VzOgorICAgIC8vICAgLSBsYXllcnMgdGhhdCBhcmUg
ZGVzY3JpYmVkIHcuci50LiBhIHJlbmRlciBzdXJmYWNlOiBzaG91bGQgaGF2ZSBkcmF3IHRyYW5z
Zm9ybXMgZGVzY3JpYmVkIHcuci50LiB0aGF0IHN1cmZhY2UKKyAgICAvLyAgIC0gQSByZW5kZXIg
c3VyZmFjZSBkZXNjcmliZWQgdy5yLnQuIGFuIGFuY2VzdG9yIHJlbmRlciBzdXJmYWNlOiBzaG91
bGQgaGF2ZSBhIGRyYXcgdHJhbnNmb3JtIGRlc2NyaWJlZCB3LnIudC4gdGhhdCBhbmNlc3RvciBz
dXJmYWNlCisgICAgLy8gICAtIFNhbml0eSBjaGVjayBvbiByZWN1cnNpb246IHZlcmlmeSB0cmFu
c2Zvcm1zIG9mIGxheWVycyBkZXNjcmliZWQgdy5yLnQuIGEgcmVuZGVyIHN1cmZhY2UgdGhhdCBp
cyBkZXNjcmliZWQgdy5yLnQuIGFuIGFuY2VzdG9yIHJlbmRlciBzdXJmYWNlLgorICAgIC8vICAg
LSB2ZXJpZnlpbmcgdGhhdCBlYWNoIGxheWVyIGhhcyBhIHJlZmVyZW5jZSB0byB0aGUgY29ycmVj
dCByZW5kZXJTdXJmYWNlIGFuZCB0YXJnZXRSZW5kZXJTdXJmYWNlIHZhbHVlcy4KKworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHJlbmRlclN1cmZhY2UxID0gTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKDApOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiByZW5kZXJTdXJmYWNlMiA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGRP
ZlJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IGNoaWxkT2ZSUzEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IGNoaWxkT2ZSUzIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGRPZlJvb3QgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50
PiBncmFuZENoaWxkT2ZSUzEgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQoMCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdz
Q29udGVudD4gZ3JhbmRDaGlsZE9mUlMyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRo
Rm9yY2VkRHJhd3NDb250ZW50KDApKTsKKyAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2Uo
KTsKKyAgICBwYXJlbnQtPmFkZENoaWxkKHJlbmRlclN1cmZhY2UxKTsKKyAgICBwYXJlbnQtPmFk
ZENoaWxkKGNoaWxkT2ZSb290KTsKKyAgICByZW5kZXJTdXJmYWNlMS0+YWRkQ2hpbGQoY2hpbGRP
ZlJTMSk7CisgICAgcmVuZGVyU3VyZmFjZTEtPmFkZENoaWxkKHJlbmRlclN1cmZhY2UyKTsKKyAg
ICByZW5kZXJTdXJmYWNlMi0+YWRkQ2hpbGQoY2hpbGRPZlJTMik7CisgICAgY2hpbGRPZlJvb3Qt
PmFkZENoaWxkKGdyYW5kQ2hpbGRPZlJvb3QpOworICAgIGNoaWxkT2ZSUzEtPmFkZENoaWxkKGdy
YW5kQ2hpbGRPZlJTMSk7CisgICAgY2hpbGRPZlJTMi0+YWRkQ2hpbGQoZ3JhbmRDaGlsZE9mUlMy
KTsKKworICAgIC8vIEluIGNvbWJpbmF0aW9uIHdpdGggZGVzY2VuZGFudERyYXdzQ29udGVudCwg
b3BhY2l0eSAhPSAxIGZvcmNlcyB0aGUgbGF5ZXIgdG8gaGF2ZSBhIG5ldyByZW5kZXJTdXJmYWNl
LgorICAgIHJlbmRlclN1cmZhY2UxLT5zZXRPcGFjaXR5KDAuNWYpOworICAgIHJlbmRlclN1cmZh
Y2UyLT5zZXRPcGFjaXR5KDAuMzNmKTsKKworICAgIC8vIEFsbCBsYXllcnMgaW4gdGhlIHRyZWUg
YXJlIGluaXRpYWxpemVkIHdpdGggYW4gYW5jaG9yIGF0IDIuNSBhbmQgYSBzaXplIG9mICgxMCwx
MCkuCisgICAgLy8gbWF0cml4ICJBIiBpcyB0aGUgY29tcG9zaXRlIGxheWVyIHRyYW5zZm9ybSB1
c2VkIGluIGFsbCBsYXllcnMsIGNlbnRlcmVkIGFib3V0IHRoZSBhbmNob3IgcG9pbnQKKyAgICAv
LyBtYXRyaXggIkIiIGlzIHRoZSBzdWJsYXllciB0cmFuc2Zvcm0gdXNlZCBpbiBhbGwgbGF5ZXJz
LCBjZW50ZXJlZCBhYm91dCB0aGUgY2VudGVyIHBvc2l0aW9uIG9mIHRoZSBsYXllci4KKyAgICAv
LworICAgIC8vIHggY29tcG9uZW50IHRlc3RzIHRoYXQgbGF5ZXJUcmFuc2Zvcm0gYW5kIHN1Ymxh
eWVyVHJhbnNmb3JtIGFyZSBkb25lIGluIHRoZSByaWdodCBvcmRlciAodHJhbnNsYXRpb24gYW5k
IHNjYWxlIGFyZSBub25jb21tdXRhdGl2ZSkuCisgICAgLy8geSBjb21wb25lbnQgaGFzIGEgdHJh
bnNsYXRpb24gYnkgMS4wIGZvciBldmVyeSBhbmNlc3Rvciwgd2hpY2ggaW5kaWNhdGVzIHRoZSAi
ZGVwdGgiIG9mIHRoZSBsYXllciBpbiB0aGUgaGllcmFyY2h5LgorICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHRyYW5zbGF0aW9uVG9BbmNob3I7CisgICAgdHJhbnNsYXRpb25Ub0FuY2hvci50cmFu
c2xhdGUoMi41LCAwLjApOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zbGF0aW9uVG9D
ZW50ZXI7CisgICAgdHJhbnNsYXRpb25Ub0NlbnRlci50cmFuc2xhdGUoNS4wLCA1LjApOworICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyVHJhbnNmb3JtOworICAgIGxheWVyVHJhbnNmb3Jt
LnRyYW5zbGF0ZSgxLjAsIDEuMCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VibGF5ZXJU
cmFuc2Zvcm07CisgICAgc3VibGF5ZXJUcmFuc2Zvcm0uc2NhbGUzZCgxMC4wLCAxLjAsIDEuMCk7
CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBBID0gdHJhbnNsYXRpb25Ub0FuY2hvciAqIGxh
eWVyVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0FuY2hvci5pbnZlcnNlKCk7CisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggQiA9IHRyYW5zbGF0aW9uVG9DZW50ZXIgKiBzdWJsYXllclRyYW5zZm9y
bSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIuaW52ZXJzZSgpOworCisgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBzdWJsYXllclRyYW5z
Zm9ybSwgRmxvYXRQb2ludCgwLjI1ZiwgMC4wZiksIEZsb2F0UG9pbnQoMi41ZiwgMC4wZiksIElu
dFNpemUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
cmVuZGVyU3VyZmFjZTEuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBzdWJsYXllclRyYW5zZm9ybSwg
RmxvYXRQb2ludCgwLjI1ZiwgMC4wZiksIEZsb2F0UG9pbnQoMi41ZiwgMC4wZiksIEludFNpemUo
MTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocmVuZGVy
U3VyZmFjZTIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBzdWJsYXllclRyYW5zZm9ybSwgRmxvYXRQ
b2ludCgwLjI1ZiwgMC4wZiksIEZsb2F0UG9pbnQoMi41ZiwgMC4wZiksIEludFNpemUoMTAsIDEw
KSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGRPZlJvb3Qu
Z2V0KCksIGxheWVyVHJhbnNmb3JtLCBzdWJsYXllclRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLjI1
ZiwgMC4wZiksIEZsb2F0UG9pbnQoMi41ZiwgMC4wZiksIEludFNpemUoMTAsIDEwKSwgZmFsc2Up
OworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGRPZlJTMS5nZXQoKSwgbGF5
ZXJUcmFuc2Zvcm0sIHN1YmxheWVyVHJhbnNmb3JtLCBGbG9hdFBvaW50KDAuMjVmLCAwLjBmKSwg
RmxvYXRQb2ludCgyLjVmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZE9mUlMyLmdldCgpLCBsYXllclRyYW5zZm9y
bSwgc3VibGF5ZXJUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMC4yNWYsIDAuMGYpLCBGbG9hdFBvaW50
KDIuNWYsIDAuMGYpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGRPZlJvb3QuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBz
dWJsYXllclRyYW5zZm9ybSwgRmxvYXRQb2ludCgwLjI1ZiwgMC4wZiksIEZsb2F0UG9pbnQoMi41
ZiwgMC4wZiksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcoZ3JhbmRDaGlsZE9mUlMxLmdldCgpLCBsYXllclRyYW5zZm9ybSwgc3VibGF5
ZXJUcmFuc2Zvcm0sIEZsb2F0UG9pbnQoMC4yNWYsIDAuMGYpLCBGbG9hdFBvaW50KDIuNWYsIDAu
MGYpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKGdyYW5kQ2hpbGRPZlJTMi5nZXQoKSwgbGF5ZXJUcmFuc2Zvcm0sIHN1YmxheWVyVHJh
bnNmb3JtLCBGbG9hdFBvaW50KDAuMjVmLCAwLjBmKSwgRmxvYXRQb2ludCgyLjVmLCAwLjBmKSwg
SW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CisKKyAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5KHBhcmVudC5nZXQoKSk7CisKKyAgICAvLyBPbmx5IGxheWVycyB0
aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggcmVuZGVyIHN1cmZhY2VzIHNob3VsZCBoYXZlIGFuIGFj
dHVhbCByZW5kZXJTdXJmYWNlKCkgdmFsdWUuCisgICAgLy8KKyAgICBBU1NFUlRfVFJVRShwYXJl
bnQtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGNoaWxkT2ZSb290LT5yZW5k
ZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9GQUxTRShncmFuZENoaWxkT2ZSb290LT5yZW5kZXJT
dXJmYWNlKCkpOworCisgICAgQVNTRVJUX1RSVUUocmVuZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZh
Y2UoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGNoaWxkT2ZSUzEtPnJlbmRlclN1cmZhY2UoKSk7Cisg
ICAgQVNTRVJUX0ZBTFNFKGdyYW5kQ2hpbGRPZlJTMS0+cmVuZGVyU3VyZmFjZSgpKTsKKworICAg
IEFTU0VSVF9UUlVFKHJlbmRlclN1cmZhY2UyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VS
VF9GQUxTRShjaGlsZE9mUlMyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9GQUxTRShn
cmFuZENoaWxkT2ZSUzItPnJlbmRlclN1cmZhY2UoKSk7CisKKyAgICAvLyBWZXJpZnkgYWxsIHRh
cmdldFJlbmRlclN1cmZhY2UgYWNjZXNzb3JzCisgICAgLy8KKyAgICBFWFBFQ1RfRVEocGFyZW50
LT5yZW5kZXJTdXJmYWNlKCksIHBhcmVudC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKKyAgICBF
WFBFQ1RfRVEocGFyZW50LT5yZW5kZXJTdXJmYWNlKCksIGNoaWxkT2ZSb290LT50YXJnZXRSZW5k
ZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9FUShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSwgZ3Jh
bmRDaGlsZE9mUm9vdC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKKworICAgIEVYUEVDVF9FUShy
ZW5kZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpLCByZW5kZXJTdXJmYWNlMS0+dGFyZ2V0UmVu
ZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfRVEocmVuZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZh
Y2UoKSwgY2hpbGRPZlJTMS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKKyAgICBFWFBFQ1RfRVEo
cmVuZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZhY2UoKSwgZ3JhbmRDaGlsZE9mUlMxLT50YXJnZXRS
ZW5kZXJTdXJmYWNlKCkpOworCisgICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2UyLT5yZW5kZXJT
dXJmYWNlKCksIHJlbmRlclN1cmZhY2UyLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkpOworICAgIEVY
UEVDVF9FUShyZW5kZXJTdXJmYWNlMi0+cmVuZGVyU3VyZmFjZSgpLCBjaGlsZE9mUlMyLT50YXJn
ZXRSZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9FUShyZW5kZXJTdXJmYWNlMi0+cmVuZGVy
U3VyZmFjZSgpLCBncmFuZENoaWxkT2ZSUzItPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CisKKyAg
ICAvLyBWZXJpZnkgbGF5ZXIgZHJhdyB0cmFuc2Zvcm1zCisgICAgLy8gIG5vdGUgdGhhdCBkcmF3
IHRyYW5zZm9ybXMgYXJlIGRlc2NyaWJlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIG5lYXJlc3QgYW5j
ZXN0b3IgcmVuZGVyIHN1cmZhY2UKKyAgICAvLyAgYnV0IHNjcmVlbiBzcGFjZSB0cmFuc2Zvcm1z
IGFyZSBkZXNjcmliZWQgd2l0aCByZXNwZWN0IHRvIHRoZSByb290LgorICAgIC8vCisgICAgVkVS
SUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIHBhcmVudC0+
ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAq
IEEgKiB0cmFuc2xhdGlvblRvQ2VudGVyLCBjaGlsZE9mUm9vdC0+ZHJhd1RyYW5zZm9ybSgpKTsK
KyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBCICogQSAqIHRyYW5z
bGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRPZlJvb3QtPmRyYXdUcmFuc2Zvcm0oKSk7CisKKyAg
ICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTCh0cmFuc2xhdGlvblRvQ2VudGVyLCByZW5kZXJT
dXJmYWNlMS0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVB
TChCICogQSAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGNoaWxkT2ZSUzEtPmRyYXdUcmFuc2Zvcm0o
KSk7CisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQiAqIEEgKiBCICogQSAqIHRyYW5z
bGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRPZlJTMS0+ZHJhd1RyYW5zZm9ybSgpKTsKKworICAg
IFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKHRyYW5zbGF0aW9uVG9DZW50ZXIsIHJlbmRlclN1
cmZhY2UyLT5kcmF3VHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFM
KEIgKiBBICogdHJhbnNsYXRpb25Ub0NlbnRlciwgY2hpbGRPZlJTMi0+ZHJhd1RyYW5zZm9ybSgp
KTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChCICogQSAqIEIgKiBBICogdHJhbnNs
YXRpb25Ub0NlbnRlciwgZ3JhbmRDaGlsZE9mUlMyLT5kcmF3VHJhbnNmb3JtKCkpOworCisgICAg
Ly8gVmVyaWZ5IGxheWVyIHNjcmVlbi1zcGFjZSB0cmFuc2Zvcm1zCisgICAgLy8KKyAgICBWRVJJ
RllfTUFUUklYX0FMTU9TVF9FUVVBTChBLCBwYXJlbnQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkp
OworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSwgY2hpbGRPZlJvb3Qt
PnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFM
KEEgKiBCICogQSAqIEIgKiBBLCBncmFuZENoaWxkT2ZSb290LT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKKworICAgIFZFUklGWV9NQVRSSVhfQUxNT1NUX0VRVUFMKEEgKiBCICogQSwgcmVuZGVy
U3VyZmFjZTEtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworICAgIFZFUklGWV9NQVRSSVhfQUxN
T1NUX0VRVUFMKEEgKiBCICogQSAqIEIgKiBBLCBjaGlsZE9mUlMxLT5zY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEgKiBCICog
QSAqIEIgKiBBLCBncmFuZENoaWxkT2ZSUzEtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOworCisg
ICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFVQUwoQSAqIEIgKiBBICogQiAqIEEsIHJlbmRlclN1
cmZhY2UyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9T
VF9FUVVBTChBICogQiAqIEEgKiBCICogQSAqIEIgKiBBLCBjaGlsZE9mUlMyLT5zY3JlZW5TcGFj
ZVRyYW5zZm9ybSgpKTsKKyAgICBWRVJJRllfTUFUUklYX0FMTU9TVF9FUVVBTChBICogQiAqIEEg
KiBCICogQSAqIEIgKiBBICogQiAqIEEsIGdyYW5kQ2hpbGRPZlJTMi0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKSk7CisKKyAgICAvLyBWZXJpZnkgcmVuZGVyIHN1cmZhY2UgdHJhbnNmb3Jtcy4KKyAg
ICAvLworICAgIC8vIE9yaWdpbiB0cmFuc2Zvcm0gb2YgcmVuZGVyIHN1cmZhY2UgMSBpcyBkZXNj
cmliZWQgd2l0aCByZXNwZWN0IHRvIHJvb3QuCisgICAgVkVSSUZZX01BVFJJWF9BTE1PU1RfRVFV
QUwoQSAqIEIgKiBBLCByZW5kZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpLT5vcmlnaW5UcmFu
c2Zvcm0oKSk7CisgICAgLy8gT3JpZ2luIHRyYW5zZm9ybSBvZiByZW5kZXIgc3VyZmFjZSAyIGlz
IGRlc2NyaWJlZCB3aXRoIHJlc3BlY3QgdG8gcmVuZGVyIHN1cmZhY2UgMi4KKyAgICBWRVJJRllf
TUFUUklYX0FMTU9TVF9FUVVBTChCICogQSwgcmVuZGVyU3VyZmFjZTItPnJlbmRlclN1cmZhY2Uo
KS0+b3JpZ2luVHJhbnNmb3JtKCkpOworCisgICAgLy8gU2FuaXR5IGNoZWNrLiBJZiB0aGVzZSBm
YWlsIHRoZXJlIGlzIHByb2JhYmx5IGEgYnVnIGluIHRoZSB0ZXN0IGl0c2VsZi4KKyAgICAvLyBJ
dCBpcyBleHBlY3RlZCB0aGF0IHdlIGNvcnJlY3RseSBzZXQgdXAgdHJhbnNmb3JtcyBzbyB0aGF0
IHRoZSB5LWNvbXBvbmVudCBvZiB0aGUgc2NyZWVuLXNwYWNlIHRyYW5zZm9ybQorICAgIC8vIGVu
Y29kZXMgdGhlICJkZXB0aCIgb2YgdGhlIGxheWVyIGluIHRoZSB0cmVlLgorICAgIEVYUEVDVF9G
TE9BVF9FUSgxLjAsIHBhcmVudC0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tNDIoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDIuMCwgY2hpbGRPZlJvb3QtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCku
bTQyKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzLjAsIGdyYW5kQ2hpbGRPZlJvb3QtPnNjcmVl
blNwYWNlVHJhbnNmb3JtKCkubTQyKCkpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIuMCwgcmVu
ZGVyU3VyZmFjZTEtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkubTQyKCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgzLjAsIGNoaWxkT2ZSUzEtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkubTQyKCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSg0LjAsIGdyYW5kQ2hpbGRPZlJTMS0+c2NyZWVuU3BhY2VUcmFu
c2Zvcm0oKS5tNDIoKSk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMy4wLCByZW5kZXJTdXJmYWNl
Mi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tNDIoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQu
MCwgY2hpbGRPZlJTMi0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5tNDIoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDUuMCwgZ3JhbmRDaGlsZE9mUlMyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLm00
MigpKTsKK30KKworLy8gRklYTUU6CisvLyBjb250aW51ZSB3b3JraW5nIG9uIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODk0MgorLy8gIC0gYWRkIGEgdGVzdCB0byB2
ZXJpZnkgY2xpcHBpbmcgdGhhdCBjaGFuZ2VzIHRoZSAiY2VudGVyIHBvaW50IgorLy8gIC0gYWRk
IGEgY2FzZSB0aGF0IGNoZWNrcyBpZiBhIHJlbmRlciBzdXJmYWNlJ3MgZHJhd1RyYW5zZm9ybSBp
cyBjb21wdXRlZCBjb3JyZWN0bHkuIEZvciB0aGUgZ2VuZXJhbCBjYXNlLCBhbmQgZm9yIHNwZWNp
YWwgY2FzZXMgd2hlbiBjbGlwcGluZy9zY2lzc29yaW5nLgorLy8gIC0gYWRkIGEgY2FzZSB0aGF0
IGNoZWNrcyBpZiBhIHJlbmRlciBzdXJmYWNlJ3MgcmVwbGljYVRyYW5zZm9ybSBpcyBjb21wdXRl
ZCBjb3JyZWN0bHkuCisvLyAgLSB0ZXN0IGFsbCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBy
ZW5kZXIgc3VyZmFjZXMgYXJlIGNyZWF0ZWQKKy8vICAtIGlmIHBvc3NpYmxlLCB0ZXN0IGFsbCBj
b25kaXRpb25zIHVuZGVyIHdoaWNoIHJlbmRlciBzdXJmYWNlcyBhcmUgbm90IGNyZWF0ZWQKKy8v
ICAtIHZlcmlmeSB0aGF0IHRoZSBsYXllciBsaXN0cyBvZiByZW5kZXIgc3VyZmFjZXMgYXJlIGNv
cnJlY3QsIHZlcmlmeSB0aGF0ICJ0YXJnZXRSZW5kZXJTdXJmYWNlIiB2YWx1ZXMgZm9yIGVhY2gg
bGF5ZXIgYXJlIGNvcnJlY3QuCisvLyAgLSB0ZXN0IHRoZSBjb21wdXRhdGlvbiBvZiBzY2lzc29y
IHJlY3RzIGFuZCBjb250ZW50IHJlY3RzCisvLyAgLSB0ZXN0IHRoZSBzcGVjaWFsIGNhc2VzIGZv
ciBtYXNrIGxheWVycyBhbmQgcmVwbGljYSBsYXllcnMKKy8vICAtIHRlc3QgdGhlIG90aGVyIGZ1
bmN0aW9ucyBpbiBDQ0xheWVyVHJlZUhvc3RDb21tb24KKy8vCisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>