<?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>84410</bug_id>
          
          <creation_ts>2012-04-19 18:13:33 -0700</creation_ts>
          <short_desc>Terrible performance on http://alliances.commandandconquer.com/ and http://www.lordofultima.com/</short_desc>
          <delta_ts>2012-05-25 17:07:30 -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>http://alliances.commandandconquer.com/en/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>84393</dependson>
    
    <dependson>87080</dependson>
    
    <dependson>87212</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>dino</cc>
    
    <cc>enne</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>606259</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-04-19 18:13:33 -0700</bug_when>
    <thetext>From &lt;http://code.google.com/p/chromium/issues/detail?id=120871&gt;

URLs (if applicable):
http://alliances.commandandconquer.com/en/
http://www.lordofultima.com/en/

Other browsers tested:
Add OK or FAIL after other browsers where you have tested this issue:
Safari 5:
     Firefox 4.x: OKAY (far better)
     IE 7/8/9: OKAY (far better)

What steps will reproduce the problem?
1. go to a page mentioned above
2. start a game
3. ingame performance is really bad while IE and FF have solid 40 to 60 fps

What is the expected result?

Good performance with at least 30 fps. With the behaviour at this moment the games mentioned above cannot be played with Chrome,


What happens instead?

Laggy/choppy performance</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606260</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2012-04-19 18:14:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/11286123&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606267</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-04-19 18:27:22 -0700</bug_when>
    <thetext>Adding a single 3D transform to the page (to turn off overlap testing) takes the CPU usage from 100% to 30% on my machine, using the CC reduction in the chromium bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626989</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-17 14:31:41 -0700</bug_when>
    <thetext>My plans here are to avoid O(N^2) behavior when computing absolute layer bounds to add to the overlap map by storing some data as we walk the layer tree that allows us to map to absolute coords more efficiently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>626992</commentid>
    <comment_count>4</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-05-17 14:34:36 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; My plans here are to avoid O(N^2) behavior when computing absolute layer bounds to add to the overlap map by storing some data as we walk the layer tree that allows us to map to absolute coords more efficiently.

That sounds great.  I&apos;ve been having similar thoughts.

As you modify what&apos;s going into the overlap map, can you see if this fixes the issue in bug 64201?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628354</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-18 22:13:14 -0700</bug_when>
    <thetext>Ugh, layer-&gt;backgroundClipRect(rootRenderLayer(), 0, true) is also super-expensive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628414</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-19 07:56:33 -0700</bug_when>
    <thetext>That was added in http://trac.webkit.org/changeset/91114</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628490</commentid>
    <comment_count>7</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-05-19 14:25:56 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; That was added in http://trac.webkit.org/changeset/91114

In retrospect, I&apos;m pretty sure that we don&apos;t need to use temp clip bounds there, which would help immensely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628762</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-20 21:56:44 -0700</bug_when>
    <thetext>We do, because the cache rects are cached for painting (relative to repaint containers), and this rect is root-relative.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629265</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-21 10:56:39 -0700</bug_when>
    <thetext>I think the best option here will be to cache both clipRects for painting, and absolute clip rects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629277</commentid>
    <comment_count>10</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-05-21 11:04:50 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; We do, because the cache rects are cached for painting (relative to repaint containers), and this rect is root-relative.

You said you were planning to store some transform data as you walked the tree; would be possible to reuse some of that data to transform cached clip rects into the right space?

Alternatively, RenderLayer::localClipRect gets reused when calculating composited bounds, so maybe that&apos;s the extra one to cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631073</commentid>
    <comment_count>11</comment_count>
      <attachid>143434</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-22 19:02:47 -0700</bug_when>
    <thetext>Created attachment 143434
Part 1: use a geometry map to optimize absolute layer bounds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631788</commentid>
    <comment_count>12</comment_count>
      <attachid>143434</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2012-05-23 10:48:36 -0700</bug_when>
    <thetext>Comment on attachment 143434
Part 1: use a geometry map to optimize absolute layer bounds

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

Overall looks nice. I&apos;d like a bit of an explanation regarding why flipped blocks writing modes can&apos;t be dealt with. I&apos;m a bit confused about that part. I thought offsetFromContainer did the right thing for those.

&gt; Source/WebCore/rendering/RenderGeometryMap.cpp:157
&gt; +            // The root get special treatment for fixed position

Should be &quot;The root gets&quot;

&gt; Source/WebCore/rendering/RenderInline.cpp:1148
&gt; +    if (container-&gt;isBox() &amp;&amp; container-&gt;style()-&gt;isFlippedBlocksWritingMode())
&gt; +        offsetDependsOnPoint = true;

Confused regarding why you can&apos;t just flip (somewhere) to handle this.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:725
&gt; +//        absBounds = layer-&gt;renderer()-&gt;localToAbsoluteQuad(FloatRect(layer-&gt;localBoundingBox())).enclosingBoundingBox();

Probably shouldn&apos;t leave commented out code in.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:734
&gt; -    
&gt; +

Whitespace.

&gt; Source/WebCore/rendering/RenderObject.cpp:2060
&gt; +    LayoutSize offset;
&gt; +    if (container-&gt;hasOverflowClip())
&gt; +        offset = -toRenderBox(container)-&gt;scrolledContentOffset();

I&apos;m a little confused about why this has to be special cased.

&gt; Source/WebCore/rendering/RenderObject.cpp:2062
&gt; +    bool isNonUniform = hasColumns() || (container-&gt;isBox() &amp;&amp; container-&gt;style()-&gt;isFlippedBlocksWritingMode());

Is it really that hard to deal with flipped blocks? Don&apos;t you just have to flipForWritingMode along the correct axis?

&gt; Source/WebCore/rendering/RenderObject.h:885
&gt; +    // Pushes state onto RenderGeometryMap about how to map coordinates from this renderer to its condtainer, or ancestorToStopAt (whichever is encountered first).

Typo. &quot;condtainer&quot; should be &quot;container&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632013</commentid>
    <comment_count>13</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-23 13:53:09 -0700</bug_when>
    <thetext>(In reply to comment #12)

&gt; &gt; Source/WebCore/rendering/RenderObject.cpp:2060
&gt; &gt; +    LayoutSize offset;
&gt; &gt; +    if (container-&gt;hasOverflowClip())
&gt; &gt; +        offset = -toRenderBox(container)-&gt;scrolledContentOffset();
&gt; 
&gt; I&apos;m a little confused about why this has to be special cased.

I was following the code in RenderObject::mapLocalToContainer(). However, now I see that RenderObject::offsetFromContainer() takes the scroll offset into account, so perhaps we&apos;re doing it twice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633379</commentid>
    <comment_count>14</comment_count>
      <attachid>143929</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-24 16:53:14 -0700</bug_when>
    <thetext>Created attachment 143929
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633381</commentid>
    <comment_count>15</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-24 16:54:20 -0700</bug_when>
    <thetext>Fixed the patch in response to comments.

The RenderObject mapping methods appear to never be called (because they are always overidden. Maybe they should ASSERT_NOT_REACHED?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634088</commentid>
    <comment_count>16</comment_count>
      <attachid>143929</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2012-05-25 11:14:36 -0700</bug_when>
    <thetext>Comment on attachment 143929
Patch

r=me. Should follow up with ASSERT_NOT_REACHED and clean those methods up in RenderObject in a future patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634094</commentid>
    <comment_count>17</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-25 11:18:50 -0700</bug_when>
    <thetext>Followups: bug 87516, bug 87517.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634297</commentid>
    <comment_count>18</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-25 14:43:01 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/118567</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634382</commentid>
    <comment_count>19</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-25 15:56:32 -0700</bug_when>
    <thetext>The reduced testcase in the cr bug takes 25% CPU after fixes for this and bug 87212. It used to be 100%.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634419</commentid>
    <comment_count>20</comment_count>
      <attachid>143929</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-05-25 16:27:48 -0700</bug_when>
    <thetext>Comment on attachment 143929
Patch

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

&gt; Source/WebCore/rendering/RenderGeometryMap.cpp:149
&gt; +        if (currStep-&gt;m_hasTransform) {
&gt; +            // If this box has a transform, it acts as a fixed position container for fixed descendants,
&gt; +            // and may itself also be fixed position. So propagate &apos;fixed&apos; up only if this box is fixed position.
&gt; +            inFixed &amp;= currStep-&gt;m_isFixedPosition;

How does this assignment work if inFixed starts false (which it&apos;s initialized to), but this layer has both a transform and is fixed position? Shouldn&apos;t inFixed be true in that case? I wonder if this should be &quot;=&quot; instead of &quot;&amp;=&quot;.

This causes the test in the patch on bug 64201 to break.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634439</commentid>
    <comment_count>21</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-25 16:45:00 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 143929 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=143929&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderGeometryMap.cpp:149
&gt; &gt; +        if (currStep-&gt;m_hasTransform) {
&gt; &gt; +            // If this box has a transform, it acts as a fixed position container for fixed descendants,
&gt; &gt; +            // and may itself also be fixed position. So propagate &apos;fixed&apos; up only if this box is fixed position.
&gt; &gt; +            inFixed &amp;= currStep-&gt;m_isFixedPosition;
&gt; 
&gt; How does this assignment work if inFixed starts false (which it&apos;s initialized to), but this layer has both a transform and is fixed position? Shouldn&apos;t inFixed be true in that case? I wonder if this should be &quot;=&quot; instead of &quot;&amp;=&quot;.

That does look wrong. Please file a new bug.

&gt; This causes the test in the patch on bug 64201 to break.

Yay, a testcase!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634455</commentid>
    <comment_count>22</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-05-25 17:07:30 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; (From update of attachment 143929 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=143929&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/rendering/RenderGeometryMap.cpp:149
&gt; &gt; &gt; +        if (currStep-&gt;m_hasTransform) {
&gt; &gt; &gt; +            // If this box has a transform, it acts as a fixed position container for fixed descendants,
&gt; &gt; &gt; +            // and may itself also be fixed position. So propagate &apos;fixed&apos; up only if this box is fixed position.
&gt; &gt; &gt; +            inFixed &amp;= currStep-&gt;m_isFixedPosition;
&gt; &gt; 
&gt; &gt; How does this assignment work if inFixed starts false (which it&apos;s initialized to), but this layer has both a transform and is fixed position? Shouldn&apos;t inFixed be true in that case? I wonder if this should be &quot;=&quot; instead of &quot;&amp;=&quot;.
&gt; 
&gt; That does look wrong. Please file a new bug.

Bug 64201 covers this.  See the updated patch there.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143434</attachid>
            <date>2012-05-22 19:02:47 -0700</date>
            <delta_ts>2012-05-24 16:53:01 -0700</delta_ts>
            <desc>Part 1: use a geometry map to optimize absolute layer bounds</desc>
            <filename>bug-84410-20120522190258.patch</filename>
            <type>text/plain</type>
            <size>69694</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4MDUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTBkMzQ5NjRlMDdiOWRi
ZjQ3YTU0ODM0YWY4N2RmMGRkNGZhNWFmMy4uNDVhZTA4NjNiZjFjOTMwNGEwOTZkZWNlZDRkODNj
ZWMxMDc1ZGIwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEyOSBAQAogMjAxMi0wNS0yMiAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAorICAgICAgICBUZXJyaWJsZSBw
ZXJmb3JtYW5jZSBvbiBodHRwOi8vYWxsaWFuY2VzLmNvbW1hbmRhbmRjb25xdWVyLmNvbS8gYW5k
IGh0dHA6Ly93d3cubG9yZG9mdWx0aW1hLmNvbS8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg0NDEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBGaXJzdCBwYXJ0IG9mIGZpeGluZyBPKE5eMikg
aXNzdWVzIHdoZW4gd2Fsa2luZyB0aGUgUmVuZGVyTGF5ZXIgdHJlZQorICAgICAgICBmb3IgY29t
cHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKCkuCisgICAgICAgIAorICAgICAgICBGb3IgZWFj
aCBsYXllciB0aGF0IGdvZXMgaW50byB0aGUgT3ZlcmxhcE1hcCwgd2Ugd2VyZSBjb21wdXRpbmcg
YW4gYWJzb2x1dGUKKyAgICAgICAgbGF5ZXIgYm91bmRzLCB3aGljaCByZXF1aXJlcyB3YWxraW5n
IGJhY2sgdG8gdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCisgICAgICAgIE9wdGltaXplIHRoaXMgd2hl
biBwb3NzaWJsZSBieSBzdG9yaW5nIGEgc3RhY2sgb2Ygb2Zmc2V0cyBhcyB3ZSB3YWxrCisgICAg
ICAgIHRoZSB0cmVlLCBhbmQgdXNpbmcgdGhpcyBzdGFjayB0byBkbyB0aGUgbWFwcGluZy4KKyAg
ICAgICAgCisgICAgICAgIFRoZSBzdGFjayBvZiBvZmZzZXRzIGFuZCB0cmFuc2Zvcm1zIGlzIG1h
bmFnZWQgYnkgUmVuZGVyR2VvbWV0cnlNYXAuCisgICAgICAgIFdoZW4gdmlzaXRpbmcgYSBSZW5k
ZXJMYXllciwgUmVuZGVyTGF5ZXJDb21wb3NpdG9yIHB1c2hlcyBvbnRvCisgICAgICAgIHRoZSBn
ZW9tZXRyeSBtYXAgc3RhY2sgZGF0YSBhYm91dCBvZmZzZXRzIGFuZCB0cmFuc2Zvcm1zIGJldHdl
ZW4KKyAgICAgICAgdGhlIGN1cnJlbnQgbGF5ZXIgYW5kIGl0cyBzdGFja2luZy1wYXJlbnQuIFJl
bmRlckdlb21ldHJ5TWFwIGhhbmRsZXMKKyAgICAgICAgdGhlIGNhc2Ugd2hlcmUgdGhlIHByZXZp
b3VzIHJlbmRlcmVyIHB1c2hlZCBpcyBiZXR3ZWVuIHRoZSBjdXJyZW50CisgICAgICAgIHJlbmRl
cmVyIGFuZCBpdHMgY29udGFpbmVyLiBSZW5kZXJHZW9tZXRyeU1hcCBjYW4gYWxzbyBoYW5kbGUg
Y2FsbGVycworICAgICAgICBwdXNoaW5nIHJlbmRlcmVycyB3aXRoIG11bHRpcGxlIGNvbnRhaW5l
cnMgYmV0d2VlbiB0aGVtLgorICAgICAgICAKKyAgICAgICAgUmVuZGVyR2VvbWV0cnlNYXAgc3Rv
cmVzIHNvbWUgZmxhZ3MgYWJvdXQgd2hldGhlciB0aGUgc2V0IG9mIG1hcHBpbmcKKyAgICAgICAg
c3RlcHMgaW4gdGhlIHN0YWNrIGludm9sdmUgdHJhbnNmb3JtcywgZml4ZWQgcG9zaXRpb24sIG9y
IHNwZWNpYWwgbm9uLXVuaWZvcm0KKyAgICAgICAgbWFwcGluZ3MgbGlrZSBDU1MgY29sdW1ucy4g
SW4gc29tZSBjYXNlcywgaXQgZmFsbHMgYmFjayB0byBtYXBwaW5nIHZpYQorICAgICAgICByZW5k
ZXJlcnMuCisKKyAgICAgICAgT25jZSBjb25zdHJ1Y3RlZCwgdGhlIFJlbmRlckdlb21ldHJ5TWFw
IHN0YWNrIGNhbiBiZSB1c2VkIHRvIG1hcCBtdWx0aXBsZQorICAgICAgICByZWN0cyBvciBwb2lu
dHMgZWZmaWNpZW50bHkuIFN0YWNrcyBjb25zaXN0aW5nIG9mIHNpbXBsZSBvZmZzZXRzIGFyZQor
ICAgICAgICBjb2xsYXBzZWQgdG8gYSBzaW5nbGUgb2Zmc2V0LgorICAgICAgICAKKyAgICAgICAg
TWFwcGluZ3MgYmV0d2VlbiByZW5kZXJlcnMgYW5kIHRoZWlyIGNvbnRhaW5lcnMgYXJlIHB1c2hl
ZCBieSBwdXNoTWFwcGluZ1RvQ29udGFpbmVyKCkKKyAgICAgICAgbWV0aG9kcywgd2hpY2ggYXJl
IHNpbWlsYXIgdG8gbWFwTG9jYWxUb0NvbnRhaW5lcigpIG1ldGhvZHMuIEhhdmluZyB0aGlzIGNv
ZGUKKyAgICAgICAgaW4gUmVuZGVyT2JqZWN0cyB3YXMgZGVlbWVkIHByZWZlcmFibGUgdG8gaGFu
ZGxpbmcgY29sdW1ucywgdHJhbnNmb3JtcyBldGMuIGFsbCBpbgorICAgICAgICBSZW5kZXJMYXll
ciBjb2RlLgorCisgICAgICAgIFRlc3RlZCBieSBhc3NlcnRpb25zIGluIFJlbmRlckdlb21ldHJ5
TWFwIGNvZGUgdGhhdCBpdHMgbWFwcGluZyBtYXRjaGVzCisgICAgICAgIG1hcHBpbmcgdmlhIGxv
Y2FsVG9BYnNvbHV0ZSgpIGNhbGxzLgorICAgICAgICAKKyAgICAgICAgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjp1cGRhdGVDb21wb3NpdGluZ0xheWVycygpIGNyZWF0ZXMgYSBSZW5kZXJHZW9tZXRy
eU1hcCwKKyAgICAgICAgYW5kIHB1c2hlcyBhbmQgcG9wcyBsYXllciByZW5kZXJlcnMgYXMgaXQg
dmlzaXRzIHRoZW0uIFRoZSBnZW9tZXRyeSBtYXAgaXMgdXNlZAorICAgICAgICBieSBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmFkZFRvT3ZlcmxhcE1hcCgpIHdoZW4gY29tcHV0aW5nIGFic29sdXRl
IGxheWVyIGJvdW5kcy4KKyAgICAgICAgCisgICAgICAgIEZ1dGhlciBvcHRpbWl6YXRpb25zIGlu
IFJlbmRlckdlb21ldHJ5TWFwIGFyZSBwb3NzaWJsZSwgZXNwZWNpYWxseSB3aXRoIHN0YWNrcyB0
aGF0CisgICAgICAgIGhhdmUgbWFueSBvZmZzZXRzIGFuZCBhIGZldyB0cmFuc2Zvcm1zLgorCisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwdXNo
TWFwcGluZ1RvQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b2Zmc2V0
RnJvbUNvbnRhaW5lcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAg
ICAoUmVuZGVyQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFJlbmRlckdlb21ldHJ5TWFwU3RlcCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJHZW9tZXRyeU1hcFN0ZXA6OlJlbmRlckdlb21ldHJ5TWFwU3RlcCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJHZW9tZXRyeU1hcFN0ZXA6Om1hcFBvaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckdlb21ldHJ5TWFwU3RlcDo6bWFwUXVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJHZW9tZXRyeU1hcDo6UmVuZGVyR2VvbWV0cnlNYXApOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyR2VvbWV0cnlNYXA6On5SZW5kZXJHZW9tZXRyeU1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJHZW9tZXRyeU1hcDo6YWJzb2x1dGVQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJHZW9tZXRyeU1hcDo6YWJzb2x1dGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckdlb21ldHJ5TWFwOjptYXBUb0Fic29sdXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckdlb21ldHJ5TWFwOjpwdXNoTWFwcGluZ3NUb0FuY2VzdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckdlb21ldHJ5TWFwOjpwdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdl
b21ldHJ5TWFwOjpwdXNoVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHZW9tZXRyeU1h
cDo6cG9wTWFwcGluZ3NUb0FuY2VzdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdlb21l
dHJ5TWFwOjpzdGVwSW5zZXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR2VvbWV0cnlN
YXA6OnN0ZXBSZW1vdmVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAu
aDogQWRkZWQuCisgICAgICAgIChSZW5kZXJHZW9tZXRyeU1hcCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJHZW9tZXRyeU1hcDo6aGFzTm9uVW5pZm9ybVN0ZXApOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyR2VvbWV0cnlNYXA6Omhhc1RyYW5zZm9ybVN0ZXApOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyR2VvbWV0cnlNYXA6Omhhc0ZpeGVkUG9zaXRpb25TdGVwKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGlu
ZTo6b2Zmc2V0RnJvbUNvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6
OnB1c2hNYXBwaW5nVG9Db250YWluZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxp
bmUuaDoKKyAgICAgICAgKFJlbmRlcklubGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6YWRkVG9PdmVybGFwTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVG9PdmVybGFwTWFwUmVjdXJzaXZlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWly
ZW1lbnRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6Cisg
ICAgICAgIChSZW5kZXJMYXllckNvbXBvc2l0b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpwdXNoTWFwcGlu
Z1RvQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6b2Zmc2V0RnJv
bUNvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNvbnRhaW5lcik6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoUmVuZGVyT2Jq
ZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6b2Zmc2V0RnJvbUNvbnRhaW5lcik6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oOgorICAgICAgICAoUmVuZGVyVGFibGVDZWxs
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJWaWV3OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVmlldy5oOgorICAgICAgICAoUmVuZGVyVmlldyk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR0ZvcmVpZ25PYmplY3Q6OnB1c2hNYXBwaW5nVG9Db250YWluZXIpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oOgorICAgICAgICAoUmVuZGVy
U1ZHRm9yZWlnbk9iamVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxp
bmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW5saW5lOjpwdXNoTWFwcGluZ1Rv
Q29udGFpbmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5oOgor
ICAgICAgICAoUmVuZGVyU1ZHSW5saW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR01vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR01vZGVsT2Jq
ZWN0OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR01vZGVsT2JqZWN0Lmg6CisgICAgICAgIChSZW5kZXJTVkdNb2RlbE9iamVjdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1Jvb3Q6OnB1c2hNYXBwaW5nVG9Db250YWluZXIpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oOgorICAgICAgICAoUmVuZGVyU1ZHUm9vdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1RleHQ6OnB1c2hNYXBwaW5nVG9Db250YWluZXIpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oOgorICAgICAgICAoUmVuZGVyU1ZHVGV4dCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1JlbmRlclN1cHBvcnQ6OnB1c2hNYXBwaW5nVG9Db250YWluZXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5oOgorCisyMDEyLTA1LTIyICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCiAgICAgICAgIFVzZSB0aGUgc2Ft
ZSBhbmltYXRpb24gYmVnaW4gdGltZSB3aGlsZSB1cGRhdGluZyBjb21wb3NpdGluZyBsYXllcnMK
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3MDgwCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA0MTJiNTcxMmUyYTIwYWViMDFjMGViYzg5ZTgwZWRiYTJlZGE0Y2ZhLi5mZDhiMDQwYmU0
MjMzOWViZDZjMjY3MTExNTUzZTE4ZWE3NjdhNmFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzksNiArMjM5LDggQEAKIAkJ
MEYxMUE1NEYwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTFBNTRFMEYzOTIzMzEw
MEMzNzg4NCAvKiBSZW5kZXJTZWxlY3Rpb25JbmZvLmggKi87IH07CiAJCTBGMTVEQThBMEYzQUFF
RTcwMDAwQ0U0NyAvKiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNURBODkwRjNBQUVFNzAwMDBDRTQ3
IC8qIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggKi87IH07CiAJCTBGMjlDMTZFMTMwMEMy
RTIwMDJENzk0RSAvKiBBY2Nlc3NpYmlsaXR5QWxsSW5PbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyOUMxNkQxMzAwQzJFMjAwMkQ3OTRFIC8q
IEFjY2Vzc2liaWxpdHlBbGxJbk9uZS5jcHAgKi87IH07CisJCTBGMkNEMzYwMTU2QzNFQTAwMDRE
ODdCQiAvKiBSZW5kZXJHZW9tZXRyeU1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDRDM1RTE1NkMzRUEwMDA0RDg3QkIgLyogUmVuZGVyR2Vv
bWV0cnlNYXAuY3BwICovOyB9OworCQkwRjJDRDM2MTE1NkMzRUEwMDA0RDg3QkIgLyogUmVuZGVy
R2VvbWV0cnlNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkNEMzVGMTU2QzNFQTAwMDREODdCQiAvKiBSZW5kZXJHZW9tZXRyeU1hcC5oICovOyB9
OwogCQkwRjNERDQ0RjEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNERDQ0RDEyRjVFQTFCMDAw
RDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi87IH07CiAJCTBGM0RENDUwMTJGNUVBMUIwMDBEOTE5
MCAvKiBTaGFkb3dCbHVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjNERDQ0RTEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5oICovOyB9Owog
CQkwRjRFNTcxNzEzMTMyNzYyMDBDRjg1QUYgLyogUmVuZGVyU1ZHQWxsSW5PbmUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTU3MTYxMzEzMjc2
MjAwQ0Y4NUFGIC8qIFJlbmRlclNWR0FsbEluT25lLmNwcCAqLzsgfTsKQEAgLTcxMTgsNiArNzEy
MCw4IEBACiAJCTBGMTFBNTRFMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5kZXJTZWxlY3Rpb25JbmZv
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNlbGVjdGlvbkluZm8u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNURBODkwRjNBQUVFNzAwMDBDRTQ3
IC8qIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmg7IHBhdGggPSBhbmltYXRpb24v
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyOUMxNkQxMzAwQzJFMjAwMkQ3OTRFIC8qIEFjY2Vzc2liaWxpdHlBbGxJbk9uZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5QWxsSW5P
bmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJDRDM1RTE1NkMzRUEwMDA0
RDg3QkIgLyogUmVuZGVyR2VvbWV0cnlNYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVuZGVyR2VvbWV0cnlNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjJDRDM1RjE1NkMzRUEwMDA0RDg3QkIgLyogUmVuZGVyR2VvbWV0cnlNYXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyR2VvbWV0cnlNYXAuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNo
YWRvd0JsdXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhZG93
Qmx1ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0RENDRFMTJGNUVBMUIw
MDBEOTE5MCAvKiBTaGFkb3dCbHVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNoYWRvd0JsdXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RTU3MTYxMzEz
Mjc2MjAwQ0Y4NUFGIC8qIFJlbmRlclNWR0FsbEluT25lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNWR0FsbEluT25lLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTIwODk4LDYgKzIwOTAyLDggQEAKIAkJCQlBODcxREVDOTBBMTUzMEM3
MDBCMTJBNjggLyogUmVuZGVyRnJhbWVTZXQuaCAqLywKIAkJCQlDREVBN0M4MzEyNzYyMzA0MDBC
ODQ2REQgLyogUmVuZGVyRnVsbFNjcmVlbi5jcHAgKi8sCiAJCQkJQ0RFQTdDODIxMjc2MjMwNDAw
Qjg0NkREIC8qIFJlbmRlckZ1bGxTY3JlZW4uaCAqLywKKwkJCQkwRjJDRDM1RTE1NkMzRUEwMDA0
RDg3QkIgLyogUmVuZGVyR2VvbWV0cnlNYXAuY3BwICovLAorCQkJCTBGMkNEMzVGMTU2QzNFQTAw
MDREODdCQiAvKiBSZW5kZXJHZW9tZXRyeU1hcC5oICovLAogCQkJCUJDRUE0ODJBMDk3RDkzMDIw
MDk0QzlFNCAvKiBSZW5kZXJIVE1MQ2FudmFzLmNwcCAqLywKIAkJCQlCQ0VBNDgyQjA5N0Q5MzAy
MDA5NEM5RTQgLyogUmVuZGVySFRNTENhbnZhcy5oICovLAogCQkJCTBGRDMwOEQzMTE3RDE2ODQw
MEE3OTFGNyAvKiBSZW5kZXJJRnJhbWUuY3BwICovLApAQCAtMjQ5MTcsNiArMjQ5MjMsNyBAQAog
CQkJCTI5QTMwOUIxMTU2MUNBQzQwMEJCRDhFNSAvKiBWaXNpdGVkTGlua3MuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZEQjA1MkUwMTU2MUE0MkMwMEI1MDBENiAvKiBBdWRpb1N1bW1pbmdKdW5jdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzcxOTQxOTcxNTY2QjM3MjAwQTI3NkQ4IC8qIFdlYkNv
cmVOU0NlbGxFeHRyYXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkNEMzYxMTU2QzNFQTAwMDRE
ODdCQiAvKiBSZW5kZXJHZW9tZXRyeU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNzk0Myw2ICsy
Nzk1MCw3IEBACiAJCQkJRkRCMDUyREYxNTYxQTQyQzAwQjUwMEQ2IC8qIEF1ZGlvU3VtbWluZ0p1
bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3MTk0MTk2MTU2NkIzNzIwMEEyNzZEOCAv
KiBXZWJDb3JlTlNDZWxsRXh0cmFzLm0gaW4gU291cmNlcyAqLywKIAkJCQkxNDZDQzExNTE1Njk4
OEU0MDAxMDlFMzcgLyogTGVuZ3RoQm94LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkNEMzYw
MTU2QzNFQTAwMDREODdCQiAvKiBSZW5kZXJHZW9tZXRyeU1hcC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggMmJhNTBhYzAxOGY0YTcy
MzBjMDI2MTExYmEyNDU1MjdkODQ5NWE5Zi4uZjNjYzVhZWE1OTE4ZjUwZGFmMzQ0YzE5ODY1NDYx
OWUzNTE1Nzg4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTQ0
LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJSZW5kZXJCb3hSZWdpb25JbmZvLmgiCiAjaW5jbHVkZSAi
UmVuZGVyRmxleGlibGVCb3guaCIKICNpbmNsdWRlICJSZW5kZXJGbG93VGhyZWFkLmgiCisjaW5j
bHVkZSAiUmVuZGVyR2VvbWV0cnlNYXAuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclBhcnQuaCIKQEAgLTE0MzUs
NiArMTQzNiw0NiBAQCB2b2lkIFJlbmRlckJveDo6bWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJC
b3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbAogICAgIG8tPm1hcExvY2FsVG9D
b250YWluZXIocmVwYWludENvbnRhaW5lciwgZml4ZWQsIHVzZVRyYW5zZm9ybXMsIHRyYW5zZm9y
bVN0YXRlLCBEb05vdEFwcGx5Q29udGFpbmVyRmxpcCwgd2FzRml4ZWQpOwogfQogCitjb25zdCBS
ZW5kZXJPYmplY3QqIFJlbmRlckJveDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lcihjb25zdCBSZW5k
ZXJCb3hNb2RlbE9iamVjdCogYW5jZXN0b3JUb1N0b3BBdCwgUmVuZGVyR2VvbWV0cnlNYXAmIGdl
b21ldHJ5TWFwKSBjb25zdAoreworICAgIEFTU0VSVChhbmNlc3RvclRvU3RvcEF0ICE9IHRoaXMp
OworCisgICAgYm9vbCBhbmNlc3RvclNraXBwZWQ7CisgICAgUmVuZGVyT2JqZWN0KiBjb250YWlu
ZXIgPSB0aGlzLT5jb250YWluZXIoYW5jZXN0b3JUb1N0b3BBdCwgJmFuY2VzdG9yU2tpcHBlZCk7
CisgICAgaWYgKCFjb250YWluZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgYm9vbCBpc0Zp
eGVkUG9zID0gc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uOworICAgIGJvb2wg
aGFzVHJhbnNmb3JtID0gaGFzTGF5ZXIoKSAmJiBsYXllcigpLT50cmFuc2Zvcm0oKTsKKworICAg
IExheW91dFNpemUgYWRqdXN0bWVudEZvclNraXBwZWRBbmNlc3RvcjsKKyAgICBpZiAoYW5jZXN0
b3JTa2lwcGVkKSB7CisgICAgICAgIC8vIFRoZXJlIGNhbid0IGJlIGEgdHJhbnNmb3JtIGJldHdl
ZW4gcmVwYWludENvbnRhaW5lciBhbmQgbywgYmVjYXVzZSB0cmFuc2Zvcm1zIGNyZWF0ZSBjb250
YWluZXJzLCBzbyBpdCBzaG91bGQgYmUgc2FmZQorICAgICAgICAvLyB0byBqdXN0IHN1YnRyYWN0
IHRoZSBkZWx0YSBiZXR3ZWVuIHRoZSBhbmNlc3RvciBhbmQgby4KKyAgICAgICAgYWRqdXN0bWVu
dEZvclNraXBwZWRBbmNlc3RvciA9IC1hbmNlc3RvclRvU3RvcEF0LT5vZmZzZXRGcm9tQW5jZXN0
b3JDb250YWluZXIoY29udGFpbmVyKTsKKyAgICB9CisKKyAgICBib29sIG9mZnNldERlcGVuZHNP
blBvaW50ID0gZmFsc2U7CisgICAgTGF5b3V0U2l6ZSBjb250YWluZXJPZmZzZXQgPSBvZmZzZXRG
cm9tQ29udGFpbmVyKGNvbnRhaW5lciwgTGF5b3V0UG9pbnQoKSwgJm9mZnNldERlcGVuZHNPblBv
aW50KTsKKworICAgIGlmIChjb250YWluZXItPmlzUmVuZGVyRmxvd1RocmVhZCgpKQorICAgICAg
ICBvZmZzZXREZXBlbmRzT25Qb2ludCA9IHRydWU7CisgICAgCisgICAgYm9vbCBwcmVzZXJ2ZTNE
ID0gY29udGFpbmVyLT5zdHlsZSgpLT5wcmVzZXJ2ZXMzRCgpIHx8IHN0eWxlKCktPnByZXNlcnZl
czNEKCk7CisgICAgaWYgKHNob3VsZFVzZVRyYW5zZm9ybUZyb21Db250YWluZXIoY29udGFpbmVy
KSkgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0OworICAgICAgICBnZXRUcmFuc2Zv
cm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgY29udGFpbmVyT2Zmc2V0LCB0KTsKKyAgICAgICAg
dC50cmFuc2xhdGVSaWdodChhZGp1c3RtZW50Rm9yU2tpcHBlZEFuY2VzdG9yLndpZHRoKCksIGFk
anVzdG1lbnRGb3JTa2lwcGVkQW5jZXN0b3IuaGVpZ2h0KCkpOworICAgICAgICAKKyAgICAgICAg
Z2VvbWV0cnlNYXAucHVzaCh0aGlzLCB0LCBwcmVzZXJ2ZTNELCBvZmZzZXREZXBlbmRzT25Qb2lu
dCwgaXNGaXhlZFBvcywgaGFzVHJhbnNmb3JtKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb250
YWluZXJPZmZzZXQgKz0gYWRqdXN0bWVudEZvclNraXBwZWRBbmNlc3RvcjsKKyAgICAgICAgZ2Vv
bWV0cnlNYXAucHVzaCh0aGlzLCBjb250YWluZXJPZmZzZXQsIHByZXNlcnZlM0QsIG9mZnNldERl
cGVuZHNPblBvaW50LCBpc0ZpeGVkUG9zLCBoYXNUcmFuc2Zvcm0pOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gYW5jZXN0b3JTa2lwcGVkID8gYW5jZXN0b3JUb1N0b3BBdCA6IGNvbnRhaW5lcjsK
K30KKwogdm9pZCBSZW5kZXJCb3g6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50KGJvb2wgZml4ZWQs
IGJvb2wgdXNlVHJhbnNmb3JtcywgVHJhbnNmb3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlKSBjb25z
dAogewogICAgIC8vIFdlIGRvbid0IGV4cGVjdCBhYnNvbHV0ZVRvTG9jYWwoKSB0byBiZSBjYWxs
ZWQgZHVyaW5nIGxheW91dCAoeWV0KQpAQCAtMTQ1Miw3ICsxNDkzLDcgQEAgdm9pZCBSZW5kZXJC
b3g6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50KGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3Jt
cywgVHJhbnNmb3IKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdDo6bWFwQWJzb2x1dGVUb0xvY2Fs
UG9pbnQoZml4ZWQsIHVzZVRyYW5zZm9ybXMsIHRyYW5zZm9ybVN0YXRlKTsKIH0KIAotTGF5b3V0
U2l6ZSBSZW5kZXJCb3g6Om9mZnNldEZyb21Db250YWluZXIoUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBMYXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0CitMYXlvdXRTaXplIFJlbmRlckJveDo6b2Zmc2V0
RnJvbUNvbnRhaW5lcihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IExheW91dFBvaW50JiBwb2ludCwg
Ym9vbCogb2Zmc2V0RGVwZW5kc09uUG9pbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG8gPT0gY29u
dGFpbmVyKCkpOwogCkBAIC0xNDcwLDYgKzE1MTEsOSBAQCBMYXlvdXRTaXplIFJlbmRlckJveDo6
b2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IExheW91dFBvaW50JiBw
bwogICAgICAgICAgICAgb2Zmc2V0ID0gdG9MYXlvdXRTaXplKGJsb2NrLT5mbGlwRm9yV3JpdGlu
Z01vZGVJbmNsdWRpbmdDb2x1bW5zKHRvTGF5b3V0UG9pbnQob2Zmc2V0KSkpOwogICAgICAgICAg
ICAgby0+YWRqdXN0Rm9yQ29sdW1ucyhvZmZzZXQsIGNvbHVtblBvaW50KTsKICAgICAgICAgICAg
IG9mZnNldCA9IGJsb2NrLT5mbGlwRm9yV3JpdGluZ01vZGUob2Zmc2V0KTsKKworICAgICAgICAg
ICAgaWYgKG9mZnNldERlcGVuZHNPblBvaW50KQorICAgICAgICAgICAgICAgICpvZmZzZXREZXBl
bmRzT25Qb2ludCA9IHRydWU7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgb2Zmc2V0ICs9
IHRvcExlZnRMb2NhdGlvbk9mZnNldCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guaAppbmRleCAwYjU2ZjNlNDg3NTNmYzk0MGQ2MjZiYzY3MzI3OTE5NGU0NjY0ZmYxLi41
ZTM1ZmY0NDY5ZjViZTI1ZDNiNTAwM2IzMjU0YjdkMjdkMDc4NzBlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5oCkBAIC0yNzIsNyArMjcyLDcgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0T3ZlcnJpZGVXaWR0aChMYXlvdXRVbml0KTsKICAgICB2b2lkIGNsZWFyT3ZlcnJpZGVTaXpl
KCk7CiAKLSAgICB2aXJ0dWFsIExheW91dFNpemUgb2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5kZXJP
YmplY3QqLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0U2l6
ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCosIGNvbnN0IExheW91dFBvaW50Jiwg
Ym9vbCogb2Zmc2V0RGVwZW5kc09uUG9pbnQgPSAwKSBjb25zdDsKICAgICAKICAgICBMYXlvdXRV
bml0IGNvbXB1dGVCb3JkZXJCb3hMb2dpY2FsV2lkdGgoTGF5b3V0VW5pdCB3aWR0aCkgY29uc3Q7
CiAgICAgTGF5b3V0VW5pdCBjb21wdXRlQm9yZGVyQm94TG9naWNhbEhlaWdodChMYXlvdXRVbml0
IGhlaWdodCkgY29uc3Q7CkBAIC01MTUsNiArNTE1LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRDb21wdXRlU2l6ZUFzUmVwbGFjZWQoKSBjb25zdCB7IHJldHVybiBpc1Jl
cGxhY2VkKCkgJiYgIWlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCk7IH0KIAogICAgIHZpcnR1
YWwgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyLCBib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRl
JiwgQXBwbHlDb250YWluZXJGbGlwT3JOb3QgPSBBcHBseUNvbnRhaW5lckZsaXAsIGJvb2wqIHdh
c0ZpeGVkID0gMCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBSZW5kZXJPYmplY3QqIHB1c2hN
YXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqLCBSZW5kZXJHZW9t
ZXRyeU1hcCYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBtYXBBYnNvbHV0ZVRvTG9jYWxQb2lu
dChib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJikgY29uc3Q7
CiAKICAgICB2b2lkIHBhaW50Um9vdEJveEZpbGxMYXllcnMoY29uc3QgUGFpbnRJbmZvJik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR2VvbWV0cnlNYXAuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdlb21ldHJ5TWFwLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xYWExMWM1NmRhM2U3YzQwODY4MGE2NWIyY2YwMTY4OGNkYjEzNzNiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdlb21ldHJ5TWFwLmNwcApA
QCAtMCwwICsxLDI3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJSZW5kZXJHZW9tZXRyeU1hcC5oIgorCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1
ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworCisvLyBTdG9y
ZXMgZGF0YSBhYm91dCBob3cgdG8gbWFwIGZyb20gb25lIHJlbmRlcmVyIHRvIGl0cyBjb250YWlu
ZXIuCitjbGFzcyBSZW5kZXJHZW9tZXRyeU1hcFN0ZXAgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFJlbmRlckdlb21ldHJ5TWFwU3RlcCk7CitwdWJsaWM6CisgICAgUmVuZGVyR2VvbWV0cnlN
YXBTdGVwKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGJvb2wgYWNjdW11bGF0aW5nVHJh
bnNmb3JtLCBib29sIGlzTm9uVW5pZm9ybSwgYm9vbCBpc0ZpeGVkUG9zaXRpb24sIGJvb2wgaGFz
VHJhbnNmb3JtKQorICAgICAgICA6IG1fcmVuZGVyZXIocmVuZGVyZXIpCisgICAgICAgICwgbV9h
Y2N1bXVsYXRpbmdUcmFuc2Zvcm0oYWNjdW11bGF0aW5nVHJhbnNmb3JtKQorICAgICAgICAsIG1f
aXNOb25Vbmlmb3JtKGlzTm9uVW5pZm9ybSkKKyAgICAgICAgLCBtX2lzRml4ZWRQb3NpdGlvbihp
c0ZpeGVkUG9zaXRpb24pCisgICAgICAgICwgbV9oYXNUcmFuc2Zvcm0oaGFzVHJhbnNmb3JtKQor
ICAgIHsKKyAgICB9CisgICAgICAgIAorICAgIEZsb2F0UG9pbnQgbWFwUG9pbnQoY29uc3QgRmxv
YXRQb2ludCYgcCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV90cmFuc2Zvcm0pCisgICAg
ICAgICAgICByZXR1cm4gcCArIG1fb2Zmc2V0OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1f
dHJhbnNmb3JtLT5tYXBQb2ludChwKTsKKyAgICB9CisgICAgCisgICAgRmxvYXRRdWFkIG1hcFF1
YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX3Ry
YW5zZm9ybSkgeworICAgICAgICAgICAgRmxvYXRRdWFkIHEgPSBxdWFkOworICAgICAgICAgICAg
cS5tb3ZlKG1fb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBxOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gbV90cmFuc2Zvcm0tPm1hcFF1YWQocXVhZCk7CisgICAgfQor
ICAgIAorICAgIGNvbnN0IFJlbmRlck9iamVjdCogbV9yZW5kZXJlcjsKKyAgICBMYXlvdXRTaXpl
IG1fb2Zmc2V0OworICAgIE93blB0cjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD4gbV90cmFuc2Zvcm07
IC8vIEluY2x1ZGVzIG9mZnNldCBpZiBub24tbnVsbC4KKyAgICBib29sIG1fYWNjdW11bGF0aW5n
VHJhbnNmb3JtOworICAgIGJvb2wgbV9pc05vblVuaWZvcm07IC8vIE1hcHBpbmcgZGVwZW5kcyBv
biB0aGUgaW5wdXQgcG9pbnQsIGUuZy4gYmVjYXVzZSBvZiBDU1MgY29sdW1ucy4KKyAgICBib29s
IG1faXNGaXhlZFBvc2l0aW9uOworICAgIGJvb2wgbV9oYXNUcmFuc2Zvcm07Cit9OworCisKK1Jl
bmRlckdlb21ldHJ5TWFwOjpSZW5kZXJHZW9tZXRyeU1hcCgpCisgICAgOiBtX2luc2VydGlvblBv
c2l0aW9uKG5vdEZvdW5kKQorICAgICwgbV9ub25Vbmlmb3JtU3RlcHNDb3VudCgwKQorICAgICwg
bV90cmFuc2Zvcm1lZFN0ZXBzQ291bnQoMCkKKyAgICAsIG1fZml4ZWRTdGVwc0NvdW50KDApCit7
Cit9CisKK1JlbmRlckdlb21ldHJ5TWFwOjp+UmVuZGVyR2VvbWV0cnlNYXAoKQoreworfQorCitG
bG9hdFBvaW50IFJlbmRlckdlb21ldHJ5TWFwOjphYnNvbHV0ZVBvaW50KGNvbnN0IEZsb2F0UG9p
bnQmIHApIGNvbnN0Cit7CisgICAgRmxvYXRQb2ludCByZXN1bHQ7CisgICAgCisgICAgaWYgKCFo
YXNGaXhlZFBvc2l0aW9uU3RlcCgpICYmICFoYXNUcmFuc2Zvcm1TdGVwKCkgJiYgIWhhc05vblVu
aWZvcm1TdGVwKCkpCisgICAgICAgIHJlc3VsdCA9IHAgKyBtX2FjY3VtdWxhdGVkT2Zmc2V0Owor
ICAgIGVsc2UgeworICAgICAgICBUcmFuc2Zvcm1TdGF0ZSB0cmFuc2Zvcm1TdGF0ZShUcmFuc2Zv
cm1TdGF0ZTo6QXBwbHlUcmFuc2Zvcm1EaXJlY3Rpb24sIHApOworICAgICAgICBtYXBUb0Fic29s
dXRlKHRyYW5zZm9ybVN0YXRlKTsKKyAgICAgICAgcmVzdWx0ID0gdHJhbnNmb3JtU3RhdGUubGFz
dFBsYW5hclBvaW50KCk7CisgICAgfQorCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEZsb2F0
UG9pbnQgcmVuZGVyZXJNYXBwZWRSZXN1bHQgPSBtX21hcHBpbmcubGFzdCgpLT5tX3JlbmRlcmVy
LT5sb2NhbFRvQWJzb2x1dGUocCwgZmFsc2UsIHRydWUpOworICAgIEFTU0VSVChyZW5kZXJlck1h
cHBlZFJlc3VsdCA9PSByZXN1bHQpOworI2VuZGlmCisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitGbG9hdFJlY3QgUmVuZGVyR2VvbWV0cnlNYXA6OmFic29sdXRlUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAgICAKKyAgICBpZiAo
IWhhc0ZpeGVkUG9zaXRpb25TdGVwKCkgJiYgIWhhc1RyYW5zZm9ybVN0ZXAoKSAmJiAhaGFzTm9u
VW5pZm9ybVN0ZXAoKSkgeworICAgICAgICByZXN1bHQgPSByZWN0OworICAgICAgICByZXN1bHQu
bW92ZShtX2FjY3VtdWxhdGVkT2Zmc2V0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBUcmFuc2Zv
cm1TdGF0ZSB0cmFuc2Zvcm1TdGF0ZShUcmFuc2Zvcm1TdGF0ZTo6QXBwbHlUcmFuc2Zvcm1EaXJl
Y3Rpb24sIHJlY3QpOworICAgICAgICBtYXBUb0Fic29sdXRlKHRyYW5zZm9ybVN0YXRlKTsKKyAg
ICAgICAgcmVzdWx0ID0gdHJhbnNmb3JtU3RhdGUubGFzdFBsYW5hclF1YWQoKS5ib3VuZGluZ0Jv
eCgpOworICAgIH0KKworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBGbG9hdFJlY3QgcmVuZGVy
ZXJNYXBwZWRSZXN1bHQgPSBtX21hcHBpbmcubGFzdCgpLT5tX3JlbmRlcmVyLT5sb2NhbFRvQWJz
b2x1dGVRdWFkKHJlY3QpLmJvdW5kaW5nQm94KCk7CisgICAgLy8gSW5zcGVjdG9yIGNyZWF0ZXMg
cmVuZGVyZXJzIHdpdGggbmVnYXRpdmUgd2lkdGggPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04NzE5ND4uCisgICAgLy8gVGFraW5nIEZsb2F0UXVhZCBib3VuZHMgYXZv
aWRzIHNwdXJpb3VzIGFzc2VydGlvbnMgYmVjYXVzZSBvZiB0aGF0LgorICAgIEFTU0VSVChyZW5k
ZXJlck1hcHBlZFJlc3VsdCA9PSBGbG9hdFF1YWQocmVzdWx0KS5ib3VuZGluZ0JveCgpKTsKKyNl
bmRpZgorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBSZW5kZXJHZW9tZXRyeU1hcDo6
bWFwVG9BYnNvbHV0ZShUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUpIGNvbnN0Cit7Cisg
ICAgLy8gSWYgdGhlIG1hcHBpbmcgaW5jbHVkZXMgc29tZXRoaW5nIGxpa2UgY29sdW1ucywgd2Ug
aGF2ZSB0byBnbyB2aWEgcmVuZGVyZXJzLgorICAgIGlmIChoYXNOb25Vbmlmb3JtU3RlcCgpKSB7
CisgICAgICAgIGJvb2wgZml4ZWQgPSBmYWxzZTsKKyAgICAgICAgbV9tYXBwaW5nLmxhc3QoKS0+
bV9yZW5kZXJlci0+bWFwTG9jYWxUb0NvbnRhaW5lcigwLCBmaXhlZCwgdHJ1ZSwgdHJhbnNmb3Jt
U3RhdGUsIFJlbmRlck9iamVjdDo6QXBwbHlDb250YWluZXJGbGlwKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBib29sIGluRml4ZWQgPSBmYWxzZTsKKworICAgIGZvciAoaW50
IGkgPSBtX21hcHBpbmcuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgY29uc3Qg
UmVuZGVyR2VvbWV0cnlNYXBTdGVwKiBjdXJyU3RlcCA9IG1fbWFwcGluZ1tpXS5nZXQoKTsKKwor
ICAgICAgICBpZiAoY3VyclN0ZXAtPm1faGFzVHJhbnNmb3JtKSB7CisgICAgICAgICAgICAvLyBJ
ZiB0aGlzIGJveCBoYXMgYSB0cmFuc2Zvcm0sIGl0IGFjdHMgYXMgYSBmaXhlZCBwb3NpdGlvbiBj
b250YWluZXIgZm9yIGZpeGVkIGRlc2NlbmRhbnRzLAorICAgICAgICAgICAgLy8gYW5kIG1heSBp
dHNlbGYgYWxzbyBiZSBmaXhlZCBwb3NpdGlvbi4gU28gcHJvcGFnYXRlICdmaXhlZCcgdXAgb25s
eSBpZiB0aGlzIGJveCBpcyBmaXhlZCBwb3NpdGlvbi4KKyAgICAgICAgICAgIGluRml4ZWQgJj0g
Y3VyclN0ZXAtPm1faXNGaXhlZFBvc2l0aW9uOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IGluRml4ZWQgfD0gY3VyclN0ZXAtPm1faXNGaXhlZFBvc2l0aW9uOworCisgICAgICAgIGlmICgh
aSkgeworICAgICAgICAgICAgaWYgKGN1cnJTdGVwLT5tX3RyYW5zZm9ybSkKKyAgICAgICAgICAg
ICAgICB0cmFuc2Zvcm1TdGF0ZS5hcHBseVRyYW5zZm9ybSgqY3VyclN0ZXAtPm1fdHJhbnNmb3Jt
LmdldCgpKTsKKworICAgICAgICAgICAgLy8gVGhlIHJvb3QgZ2V0IHNwZWNpYWwgdHJlYXRtZW50
IGZvciBmaXhlZCBwb3NpdGlvbgorICAgICAgICAgICAgaWYgKGluRml4ZWQpCisgICAgICAgICAg
ICAgICAgdHJhbnNmb3JtU3RhdGUubW92ZShjdXJyU3RlcC0+bV9vZmZzZXQud2lkdGgoKSwgY3Vy
clN0ZXAtPm1fb2Zmc2V0LmhlaWdodCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IFRyYW5zZm9ybVN0YXRlOjpUcmFuc2Zvcm1BY2N1bXVsYXRpb24gYWNjdW11bGF0ZSA9IGN1cnJT
dGVwLT5tX2FjY3VtdWxhdGluZ1RyYW5zZm9ybSA/IFRyYW5zZm9ybVN0YXRlOjpBY2N1bXVsYXRl
VHJhbnNmb3JtIDogVHJhbnNmb3JtU3RhdGU6OkZsYXR0ZW5UcmFuc2Zvcm07CisgICAgICAgICAg
ICBpZiAoY3VyclN0ZXAtPm1fdHJhbnNmb3JtKQorICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0
YXRlLmFwcGx5VHJhbnNmb3JtKCpjdXJyU3RlcC0+bV90cmFuc2Zvcm0uZ2V0KCksIGFjY3VtdWxh
dGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0YXRlLm1v
dmUoY3VyclN0ZXAtPm1fb2Zmc2V0LndpZHRoKCksIGN1cnJTdGVwLT5tX29mZnNldC5oZWlnaHQo
KSwgYWNjdW11bGF0ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0cmFuc2Zvcm1TdGF0ZS5m
bGF0dGVuKCk7ICAgIAorfQorCit2b2lkIFJlbmRlckdlb21ldHJ5TWFwOjpwdXNoTWFwcGluZ3NU
b0FuY2VzdG9yKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlckJveE1v
ZGVsT2JqZWN0KiBhbmNlc3RvcikKK3sKKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIGN1cnJSZW5k
ZXJlciA9IHJlbmRlcmVyOworICAgIAorICAgIC8vIFdlIG5lZWQgdG8gcHVzaCBtYXBwaW5ncyBp
biByZXZlcnNlIG9yZGVyIGhlcmUsIHNvIGRvIGluc2VydGlvbnMgcmF0aGVyIHRoYW4gYXBwZW5k
cy4KKyAgICBtX2luc2VydGlvblBvc2l0aW9uID0gbV9tYXBwaW5nLnNpemUoKTsKKyAgICAKKyAg
ICBkbyB7CisgICAgICAgIGN1cnJSZW5kZXJlciA9IGN1cnJSZW5kZXJlci0+cHVzaE1hcHBpbmdU
b0NvbnRhaW5lcihhbmNlc3RvciwgKnRoaXMpOworICAgIH0gd2hpbGUgKGN1cnJSZW5kZXJlciAm
JiBjdXJyUmVuZGVyZXIgIT0gYW5jZXN0b3IpOworICAgIAorICAgIG1faW5zZXJ0aW9uUG9zaXRp
b24gPSBub3RGb3VuZDsKK30KKwordm9pZCBSZW5kZXJHZW9tZXRyeU1hcDo6cHVzaChjb25zdCBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tQ29udGFp
bmVyLCBib29sIGFjY3VtdWxhdGluZ1RyYW5zZm9ybSwgYm9vbCBpc05vblVuaWZvcm0sIGJvb2wg
aXNGaXhlZFBvc2l0aW9uLCBib29sIGhhc1RyYW5zZm9ybSkKK3sKKyAgICBBU1NFUlQobV9pbnNl
cnRpb25Qb3NpdGlvbiAhPSBub3RGb3VuZCk7CisgICAgCisgICAgT3duUHRyPFJlbmRlckdlb21l
dHJ5TWFwU3RlcD4gc3RlcCA9IGFkb3B0UHRyKG5ldyBSZW5kZXJHZW9tZXRyeU1hcFN0ZXAocmVu
ZGVyZXIsIGFjY3VtdWxhdGluZ1RyYW5zZm9ybSwgaXNOb25Vbmlmb3JtLCBpc0ZpeGVkUG9zaXRp
b24sIGhhc1RyYW5zZm9ybSkpOworICAgIHN0ZXAtPm1fb2Zmc2V0ID0gb2Zmc2V0RnJvbUNvbnRh
aW5lcjsKKyAgICAKKyAgICBzdGVwSW5zZXJ0ZWQoKnN0ZXAuZ2V0KCkpOworICAgIG1fbWFwcGlu
Zy5pbnNlcnQobV9pbnNlcnRpb25Qb3NpdGlvbiwgc3RlcC5yZWxlYXNlKCkpOworfQorCit2b2lk
IFJlbmRlckdlb21ldHJ5TWFwOjpwdXNoKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0LCBib29sIGFjY3VtdWxhdGluZ1RyYW5zZm9ybSwg
Ym9vbCBpc05vblVuaWZvcm0sIGJvb2wgaXNGaXhlZFBvc2l0aW9uLCBib29sIGhhc1RyYW5zZm9y
bSkKK3sKKyAgICBBU1NFUlQobV9pbnNlcnRpb25Qb3NpdGlvbiAhPSBub3RGb3VuZCk7CisKKyAg
ICBPd25QdHI8UmVuZGVyR2VvbWV0cnlNYXBTdGVwPiBzdGVwID0gYWRvcHRQdHIobmV3IFJlbmRl
ckdlb21ldHJ5TWFwU3RlcChyZW5kZXJlciwgYWNjdW11bGF0aW5nVHJhbnNmb3JtLCBpc05vblVu
aWZvcm0sIGlzRml4ZWRQb3NpdGlvbiwgaGFzVHJhbnNmb3JtKSk7CisgICAgc3RlcC0+bV90cmFu
c2Zvcm0gPSBhZG9wdFB0cihuZXcgVHJhbnNmb3JtYXRpb25NYXRyaXgodCkpOworCisgICAgc3Rl
cEluc2VydGVkKCpzdGVwLmdldCgpKTsKKyAgICBtX21hcHBpbmcuaW5zZXJ0KG1faW5zZXJ0aW9u
UG9zaXRpb24sIHN0ZXAucmVsZWFzZSgpKTsKK30KKwordm9pZCBSZW5kZXJHZW9tZXRyeU1hcDo6
cHVzaFZpZXcoY29uc3QgUmVuZGVyVmlldyogdmlldywgY29uc3QgTGF5b3V0U2l6ZSYgc2Nyb2xs
T2Zmc2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCogdCkKK3sKKyAgICBBU1NFUlQobV9p
bnNlcnRpb25Qb3NpdGlvbiAhPSBub3RGb3VuZCk7CisKKyAgICBPd25QdHI8UmVuZGVyR2VvbWV0
cnlNYXBTdGVwPiBzdGVwID0gYWRvcHRQdHIobmV3IFJlbmRlckdlb21ldHJ5TWFwU3RlcCh2aWV3
LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0KSk7CisgICAgc3RlcC0+bV9vZmZzZXQgPSBzY3JvbGxP
ZmZzZXQ7CisgICAgaWYgKHQpCisgICAgICAgIHN0ZXAtPm1fdHJhbnNmb3JtID0gYWRvcHRQdHIo
bmV3IFRyYW5zZm9ybWF0aW9uTWF0cml4KCp0KSk7CisgICAgICAgIAorICAgIEFTU0VSVCghbV9t
YXBwaW5nLnNpemUoKSk7IC8vIFRoZSB2aWV3IHNob3VsZCBhbHdheXMgYmUgdGhlIGZpcnN0IHRo
aW5nIHB1c2hlZC4KKyAgICBzdGVwSW5zZXJ0ZWQoKnN0ZXAuZ2V0KCkpOworICAgIG1fbWFwcGlu
Zy5pbnNlcnQobV9pbnNlcnRpb25Qb3NpdGlvbiwgc3RlcC5yZWxlYXNlKCkpOworfQorCit2b2lk
IFJlbmRlckdlb21ldHJ5TWFwOjpwb3BNYXBwaW5nc1RvQW5jZXN0b3IoY29uc3QgUmVuZGVyQm94
TW9kZWxPYmplY3QqIGFuY2VzdG9yKQoreworICAgIEFTU0VSVChtX21hcHBpbmcuc2l6ZSgpKTsK
KworICAgIHdoaWxlIChtX21hcHBpbmcuc2l6ZSgpICYmIG1fbWFwcGluZy5sYXN0KCktPm1fcmVu
ZGVyZXIgIT0gYW5jZXN0b3IpIHsKKyAgICAgICAgc3RlcFJlbW92ZWQoKm1fbWFwcGluZy5sYXN0
KCkuZ2V0KCkpOworICAgICAgICBtX21hcHBpbmcucmVtb3ZlTGFzdCgpOworICAgIH0KK30KKwor
dm9pZCBSZW5kZXJHZW9tZXRyeU1hcDo6c3RlcEluc2VydGVkKGNvbnN0IFJlbmRlckdlb21ldHJ5
TWFwU3RlcCYgc3RlcCkKK3sKKyAgICAvLyBPZmZzZXQgb24gdGhlIGZpcnN0IHN0ZXAgaXMgdGhl
IFJlbmRlclZpZXcncyBvZmZzZXQsIHdoaWNoIGlzIG9ubHkgYXBwbGllZCB3aGVuIHdlIGhhdmUg
Zml4ZWQtcG9zaXRpb24ucworICAgIGlmIChtX21hcHBpbmcuc2l6ZSgpKQorICAgICAgICBtX2Fj
Y3VtdWxhdGVkT2Zmc2V0ICs9IHN0ZXAubV9vZmZzZXQ7CisKKyAgICBpZiAoc3RlcC5tX2lzTm9u
VW5pZm9ybSkKKyAgICAgICAgKyttX25vblVuaWZvcm1TdGVwc0NvdW50OworCisgICAgaWYgKHN0
ZXAubV90cmFuc2Zvcm0pCisgICAgICAgICsrbV90cmFuc2Zvcm1lZFN0ZXBzQ291bnQ7CisgICAg
CisgICAgaWYgKHN0ZXAubV9pc0ZpeGVkUG9zaXRpb24pCisgICAgICAgICsrbV9maXhlZFN0ZXBz
Q291bnQ7Cit9CisKK3ZvaWQgUmVuZGVyR2VvbWV0cnlNYXA6OnN0ZXBSZW1vdmVkKGNvbnN0IFJl
bmRlckdlb21ldHJ5TWFwU3RlcCYgc3RlcCkKK3sKKyAgICAvLyBPZmZzZXQgb24gdGhlIGZpcnN0
IHN0ZXAgaXMgdGhlIFJlbmRlclZpZXcncyBvZmZzZXQsIHdoaWNoIGlzIG9ubHkgYXBwbGllZCB3
aGVuIHdlIGhhdmUgZml4ZWQtcG9zaXRpb24ucworICAgIGlmIChtX21hcHBpbmcuc2l6ZSgpID4g
MSkKKyAgICAgICAgbV9hY2N1bXVsYXRlZE9mZnNldCAtPSBzdGVwLm1fb2Zmc2V0OworCisgICAg
aWYgKHN0ZXAubV9pc05vblVuaWZvcm0pIHsKKyAgICAgICAgQVNTRVJUKG1fbm9uVW5pZm9ybVN0
ZXBzQ291bnQpOworICAgICAgICAtLW1fbm9uVW5pZm9ybVN0ZXBzQ291bnQ7CisgICAgfQorCisg
ICAgaWYgKHN0ZXAubV90cmFuc2Zvcm0pIHsKKyAgICAgICAgQVNTRVJUKG1fdHJhbnNmb3JtZWRT
dGVwc0NvdW50KTsKKyAgICAgICAgLS1tX3RyYW5zZm9ybWVkU3RlcHNDb3VudDsKKyAgICB9CisK
KyAgICBpZiAoc3RlcC5tX2lzRml4ZWRQb3NpdGlvbikgeworICAgICAgICBBU1NFUlQobV9maXhl
ZFN0ZXBzQ291bnQpOworICAgICAgICAtLW1fZml4ZWRTdGVwc0NvdW50OworICAgIH0KK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckdlb21ldHJ5TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
R2VvbWV0cnlNYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTYxMjAzMzM0ZWY4NzA3ODQ4M2RiNWFkMjliOWM5
ODA1NjI2ZTk1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckdlb21ldHJ5TWFwLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUmVu
ZGVyR2VvbWV0cnlNYXBfaAorI2RlZmluZSBSZW5kZXJHZW9tZXRyeU1hcF9oCisKKyNpbmNsdWRl
ICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiSW50U2l6
ZS5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFJlbmRlckdlb21ldHJ5TWFwU3RlcDsKKworLy8gQ2FuIGJlIHVzZWQgd2hpbGUg
d2Fsa2luZyB0aGUgUmVuZGVyZXIgdHJlZSB0byBjYWNoZSBkYXRhIGFib3V0IG9mZnNldHMgYW5k
IHRyYW5zZm9ybXMuCitjbGFzcyBSZW5kZXJHZW9tZXRyeU1hcCB7CitwdWJsaWM6CisgICAgUmVu
ZGVyR2VvbWV0cnlNYXAoKTsKKyAgICB+UmVuZGVyR2VvbWV0cnlNYXAoKTsKKworICAgIEZsb2F0
UG9pbnQgYWJzb2x1dGVQb2ludChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgRmxvYXRS
ZWN0IGFic29sdXRlUmVjdChjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICAKKyAgICAvLyBD
YWxsZWQgYnkgY29kZSB3YWxraW5nIHRoZSByZW5kZXJlciBvciBsYXllciB0cmVlcy4KKyAgICB2
b2lkIHB1c2hNYXBwaW5nc1RvQW5jZXN0b3IoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVu
ZGVyQm94TW9kZWxPYmplY3QqIGFuY2VzdG9yKTsKKyAgICB2b2lkIHBvcE1hcHBpbmdzVG9BbmNl
c3Rvcihjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCopOworICAgIAorICAgIC8vIFRoZSBmb2xs
b3dpbmcgbWV0aG9kcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgcmVuZGVyZXJzIGluc2lkZSBh
IGNhbGwgdG8gcHVzaE1hcHBpbmdzVG9BbmNlc3RvcigpLgorCisgICAgLy8gUHVzaCBnZW9tZXRy
eSBpbmZvIGJldHdlZW4gdGhpcyByZW5kZXJlciBhbmQgc29tZSBhbmNlc3Rvci4gVGhlIGFuY2Vz
dG9yIG11c3QgYmUgaXRzIGNvbnRhaW5lcigpIG9yIHNvbWUKKyAgICAvLyBzdGFja2luZyBjb250
ZXh0IGJldHdlZW4gdGhlIHJlbmRlcmVyIGFuZCBpdHMgY29udGFpbmVyLgorICAgIHZvaWQgcHVz
aChjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBMYXlvdXRTaXplJiwgYm9vbCBhY2N1bXVsYXRp
bmdUcmFuc2Zvcm0gPSBmYWxzZSwgYm9vbCBpc05vblVuaWZvcm0gPSBmYWxzZSwgYm9vbCBpc0Zp
eGVkUG9zaXRpb24gPSBmYWxzZSwgYm9vbCBoYXNUcmFuc2Zvcm0gPSBmYWxzZSk7CisgICAgdm9p
ZCBwdXNoKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jiwg
Ym9vbCBhY2N1bXVsYXRpbmdUcmFuc2Zvcm0gPSBmYWxzZSwgYm9vbCBpc05vblVuaWZvcm0gPSBm
YWxzZSwgYm9vbCBpc0ZpeGVkUG9zaXRpb24gPSBmYWxzZSwgYm9vbCBoYXNUcmFuc2Zvcm0gPSBm
YWxzZSk7CisKKyAgICAvLyBSZW5kZXJWaWV3IGdldHMgc3BlY2lhbCB0cmVhdG1lbnQsIGJlY2F1
c2UgaXQgYXBwbGllcyB0aGUgc2Nyb2xsIG9mZnNldCBvbmx5IGZvciBlbGVtZW50cyBpbnNpZGUg
aW4gZml4ZWQgcG9zaXRpb24uCisgICAgdm9pZCBwdXNoVmlldyhjb25zdCBSZW5kZXJWaWV3Kiwg
Y29uc3QgTGF5b3V0U2l6ZSYgc2Nyb2xsT2Zmc2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCogPSAwKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIG1hcFRvQWJzb2x1dGUoVHJhbnNmb3JtU3Rh
dGUmKSBjb25zdDsKKworICAgIHZvaWQgc3RlcEluc2VydGVkKGNvbnN0IFJlbmRlckdlb21ldHJ5
TWFwU3RlcCYpOworICAgIHZvaWQgc3RlcFJlbW92ZWQoY29uc3QgUmVuZGVyR2VvbWV0cnlNYXBT
dGVwJik7CisgICAgCisgICAgYm9vbCBoYXNOb25Vbmlmb3JtU3RlcCgpIGNvbnN0IHsgcmV0dXJu
IG1fbm9uVW5pZm9ybVN0ZXBzQ291bnQ7IH0KKyAgICBib29sIGhhc1RyYW5zZm9ybVN0ZXAoKSBj
b25zdCB7IHJldHVybiBtX3RyYW5zZm9ybWVkU3RlcHNDb3VudDsgfQorICAgIGJvb2wgaGFzRml4
ZWRQb3NpdGlvblN0ZXAoKSBjb25zdCB7IHJldHVybiBtX2ZpeGVkU3RlcHNDb3VudDsgfQorICAg
IAorICAgIHR5cGVkZWYgVmVjdG9yPE93blB0cjxSZW5kZXJHZW9tZXRyeU1hcFN0ZXA+ID4gUmVu
ZGVyR2VvbWV0cnlNYXBTdGVwczsgLy8gRklYTUU6IGlubGluZSBjYXBhY2l0eT8KKyAgICAKKyAg
ICBzaXplX3QgbV9pbnNlcnRpb25Qb3NpdGlvbjsKKyAgICBpbnQgbV9ub25Vbmlmb3JtU3RlcHND
b3VudDsKKyAgICBpbnQgbV90cmFuc2Zvcm1lZFN0ZXBzQ291bnQ7CisgICAgaW50IG1fZml4ZWRT
dGVwc0NvdW50OworICAgIFJlbmRlckdlb21ldHJ5TWFwU3RlcHMgbV9tYXBwaW5nOworICAgIExh
eW91dFNpemUgbV9hY2N1bXVsYXRlZE9mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFJlbmRlckdlb21ldHJ5TWFwX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcklubGluZS5jcHAKaW5kZXggZjc0NTJhNGI5NWU2NjBkZDBiOWVhNWY0MGZhYTdl
YjZkYjQwYmM4NC4uMzY1ZDdjNjllZjFmMjYyNzM1MTJkNDBhZDYyNjc5OTg0NjcwNmUyYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKQEAgLTMyLDYgKzMyLDcg
QEAKICNpbmNsdWRlICJSZW5kZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAj
aW5jbHVkZSAiUmVuZGVyRmxvd1RocmVhZC5oIgorI2luY2x1ZGUgIlJlbmRlckdlb21ldHJ5TWFw
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgog
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTEwNjUsNyArMTA2Niw3IEBAIHZvaWQgUmVuZGVy
SW5saW5lOjpjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIsCiAgICAgby0+Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWlu
ZXIsIHJlY3QsIGZpeGVkKTsKIH0KIAotTGF5b3V0U2l6ZSBSZW5kZXJJbmxpbmU6Om9mZnNldEZy
b21Db250YWluZXIoUmVuZGVyT2JqZWN0KiBjb250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBw
b2ludCkgY29uc3QKK0xheW91dFNpemUgUmVuZGVySW5saW5lOjpvZmZzZXRGcm9tQ29udGFpbmVy
KFJlbmRlck9iamVjdCogY29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIGJvb2wq
IG9mZnNldERlcGVuZHNPblBvaW50KSBjb25zdAogewogICAgIEFTU0VSVChjb250YWluZXIgPT0g
dGhpcy0+Y29udGFpbmVyKCkpOwogICAgIApAQCAtMTA3OCw2ICsxMDc5LDkgQEAgTGF5b3V0U2l6
ZSBSZW5kZXJJbmxpbmU6Om9mZnNldEZyb21Db250YWluZXIoUmVuZGVyT2JqZWN0KiBjb250YWlu
ZXIsIGNvbnN0IExheW8KICAgICBpZiAoY29udGFpbmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkKICAg
ICAgICAgb2Zmc2V0IC09IHRvUmVuZGVyQm94KGNvbnRhaW5lciktPnNjcm9sbGVkQ29udGVudE9m
ZnNldCgpOwogCisgICAgaWYgKG9mZnNldERlcGVuZHNPblBvaW50KQorICAgICAgICAqb2Zmc2V0
RGVwZW5kc09uUG9pbnQgPSBjb250YWluZXItPmhhc0NvbHVtbnMoKTsKKwogICAgIHJldHVybiBv
ZmZzZXQ7CiB9CiAKQEAgLTExMjksNiArMTEzMyw0MyBAQCB2b2lkIFJlbmRlcklubGluZTo6bWFw
TG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwg
YgogICAgIG8tPm1hcExvY2FsVG9Db250YWluZXIocmVwYWludENvbnRhaW5lciwgZml4ZWQsIHVz
ZVRyYW5zZm9ybXMsIHRyYW5zZm9ybVN0YXRlLCBhcHBseUNvbnRhaW5lckZsaXAsIHdhc0ZpeGVk
KTsKIH0KIAorY29uc3QgUmVuZGVyT2JqZWN0KiBSZW5kZXJJbmxpbmU6OnB1c2hNYXBwaW5nVG9D
b250YWluZXIoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJl
bmRlckdlb21ldHJ5TWFwJiBnZW9tZXRyeU1hcCkgY29uc3QKK3sKKyAgICBBU1NFUlQoYW5jZXN0
b3JUb1N0b3BBdCAhPSB0aGlzKTsKKworICAgIGJvb2wgYW5jZXN0b3JTa2lwcGVkOworICAgIFJl
bmRlck9iamVjdCogY29udGFpbmVyID0gdGhpcy0+Y29udGFpbmVyKGFuY2VzdG9yVG9TdG9wQXQs
ICZhbmNlc3RvclNraXBwZWQpOworICAgIGlmICghY29udGFpbmVyKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGJvb2wgb2Zmc2V0RGVwZW5kc09uUG9pbnQgPSBmYWxzZTsKKworICAgIGlmIChj
b250YWluZXItPmlzQm94KCkgJiYgY29udGFpbmVyLT5zdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NX
cml0aW5nTW9kZSgpKQorICAgICAgICBvZmZzZXREZXBlbmRzT25Qb2ludCA9IHRydWU7CisKKyAg
ICBMYXlvdXRTaXplIGFkanVzdG1lbnRGb3JTa2lwcGVkQW5jZXN0b3I7CisgICAgaWYgKGFuY2Vz
dG9yU2tpcHBlZCkgeworICAgICAgICAvLyBUaGVyZSBjYW4ndCBiZSBhIHRyYW5zZm9ybSBiZXR3
ZWVuIHJlcGFpbnRDb250YWluZXIgYW5kIG8sIGJlY2F1c2UgdHJhbnNmb3JtcyBjcmVhdGUgY29u
dGFpbmVycywgc28gaXQgc2hvdWxkIGJlIHNhZmUKKyAgICAgICAgLy8gdG8ganVzdCBzdWJ0cmFj
dCB0aGUgZGVsdGEgYmV0d2VlbiB0aGUgYW5jZXN0b3IgYW5kIG8uCisgICAgICAgIGFkanVzdG1l
bnRGb3JTa2lwcGVkQW5jZXN0b3IgPSAtYW5jZXN0b3JUb1N0b3BBdC0+b2Zmc2V0RnJvbUFuY2Vz
dG9yQ29udGFpbmVyKGNvbnRhaW5lcik7CisgICAgfQorCisgICAgTGF5b3V0U2l6ZSBjb250YWlu
ZXJPZmZzZXQgPSBvZmZzZXRGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgTGF5b3V0UG9pbnQoKSwg
Jm9mZnNldERlcGVuZHNPblBvaW50KTsKKworICAgIGJvb2wgcHJlc2VydmUzRCA9IGNvbnRhaW5l
ci0+c3R5bGUoKS0+cHJlc2VydmVzM0QoKSB8fCBzdHlsZSgpLT5wcmVzZXJ2ZXMzRCgpOworICAg
IGlmIChzaG91bGRVc2VUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lcikpIHsKKyAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdDsKKyAgICAgICAgZ2V0VHJhbnNmb3JtRnJvbUNvbnRh
aW5lcihjb250YWluZXIsIGNvbnRhaW5lck9mZnNldCwgdCk7CisgICAgICAgIHQudHJhbnNsYXRl
UmlnaHQoYWRqdXN0bWVudEZvclNraXBwZWRBbmNlc3Rvci53aWR0aCgpLCBhZGp1c3RtZW50Rm9y
U2tpcHBlZEFuY2VzdG9yLmhlaWdodCgpKTsgLy8gRklYTUU6IHJpZ2h0PworICAgICAgICBnZW9t
ZXRyeU1hcC5wdXNoKHRoaXMsIHQsIHByZXNlcnZlM0QsIG9mZnNldERlcGVuZHNPblBvaW50KTsK
KyAgICB9IGVsc2UgeworICAgICAgICBjb250YWluZXJPZmZzZXQgKz0gYWRqdXN0bWVudEZvclNr
aXBwZWRBbmNlc3RvcjsKKyAgICAgICAgZ2VvbWV0cnlNYXAucHVzaCh0aGlzLCBjb250YWluZXJP
ZmZzZXQsIHByZXNlcnZlM0QsIG9mZnNldERlcGVuZHNPblBvaW50KTsKKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIGFuY2VzdG9yU2tpcHBlZCA/IGFuY2VzdG9yVG9TdG9wQXQgOiBjb250YWluZXI7
Cit9CisKIHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVEcmFnU3RhdGUoYm9vbCBkcmFnT24pCiB7
CiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnVwZGF0ZURyYWdTdGF0ZShkcmFnT24pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCmluZGV4IDIzNjNmMGIwYTU3YzJiNjFm
YjU4NzM3YjI3OTdjNmMxNmU0ZWEyZDEuLjQxODdmMzE4NzFlODdmYzEwMTgxYjM5YzA0NGY3OGQy
NTU4NTQzOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKQEAgLTQ5
LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3Rv
cjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29s
KiB3YXNGaXhlZCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIExheW91dFNpemUgb2Zmc2V0RnJvbUNv
bnRhaW5lcihSZW5kZXJPYmplY3QqLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OworICAgIHZp
cnR1YWwgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCosIGNvbnN0
IExheW91dFBvaW50JiwgYm9vbCogb2Zmc2V0RGVwZW5kc09uUG9pbnQgPSAwKSBjb25zdDsKIAog
ICAgIEludFJlY3QgbGluZXNCb3VuZGluZ0JveCgpIGNvbnN0OwogICAgIExheW91dFJlY3QgbGlu
ZXNWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KCkgY29uc3Q7CkBAIC0xMzQsNiArMTM0LDcgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJv
eE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBMYXlvdXRSZWN0JiwgYm9vbCBmaXhlZCkg
Y29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBmaXhlZCwgYm9vbCB1c2VUcmFuc2Zv
cm1zLCBUcmFuc2Zvcm1TdGF0ZSYsIEFwcGx5Q29udGFpbmVyRmxpcE9yTm90ID0gQXBwbHlDb250
YWluZXJGbGlwLCBib29sKiB3YXNGaXhlZCA9IDApIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3Qg
UmVuZGVyT2JqZWN0KiBwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckJveE1vZGVs
T2JqZWN0KiBhbmNlc3RvclRvU3RvcEF0LCBSZW5kZXJHZW9tZXRyeU1hcCYpIGNvbnN0OwogCiAg
ICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQ
b2ludCYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNv
bXBvc2l0b3IuY3BwCmluZGV4IGM0MDJiNTkzZDBkZjAzMWVhZmViNWU2YjU4NDZhNTU4NTE0NWEx
YTYuLmQxYWFlZGNlYmJmMmI2YjVhZTAyNzAxZGRiN2VhMmVlODg5MDliZWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC00
NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyQXBwbGV0LmgiCiAjaW5jbHVkZSAiUmVuZGVy
RW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJGdWxsU2NyZWVuLmgiCisjaW5jbHVk
ZSAiUmVuZGVyR2VvbWV0cnlNYXAuaCIKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNs
dWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJSZXBsaWNhLmgiCkBA
IC01NCw2ICs1NSw3IEBACiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRpbGVkQmFja2luZy5oIgorI2luY2x1ZGUgIlRy
YW5zZm9ybVN0YXRlLmgiCiAKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKICNp
bmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCkBAIC0zOTgsOSArNDAwLDEwIEBAIHZvaWQgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1Vw
ZGF0ZVR5cGUgdXBkYXRlCiAgICAgICAgIGJvb2wgbGF5ZXJzQ2hhbmdlZCA9IGZhbHNlOwogICAg
ICAgICBpZiAobV9jb21wb3NpdGluZ0NvbnN1bHRzT3ZlcmxhcCkgewogICAgICAgICAgICAgT3Zl
cmxhcE1hcCBvdmVybGFwVGVzdFJlcXVlc3RNYXA7Ci0gICAgICAgICAgICBjb21wdXRlQ29tcG9z
aXRpbmdSZXF1aXJlbWVudHModXBkYXRlUm9vdCwgJm92ZXJsYXBUZXN0UmVxdWVzdE1hcCwgY29t
cFN0YXRlLCBsYXllcnNDaGFuZ2VkKTsKKyAgICAgICAgICAgIFJlbmRlckdlb21ldHJ5TWFwIGdl
b21ldHJ5TWFwOworICAgICAgICAgICAgY29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKDAs
IHVwZGF0ZVJvb3QsICZnZW9tZXRyeU1hcCwgJm92ZXJsYXBUZXN0UmVxdWVzdE1hcCwgY29tcFN0
YXRlLCBsYXllcnNDaGFuZ2VkKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjb21wdXRl
Q29tcG9zaXRpbmdSZXF1aXJlbWVudHModXBkYXRlUm9vdCwgMCwgY29tcFN0YXRlLCBsYXllcnND
aGFuZ2VkKTsKKyAgICAgICAgICAgIGNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cygwLCB1
cGRhdGVSb290LCAwLCAwLCBjb21wU3RhdGUsIGxheWVyc0NoYW5nZWQpOwogICAgICAgICAKICAg
ICAgICAgbmVlZEhpZXJhcmNoeVVwZGF0ZSB8PSBsYXllcnNDaGFuZ2VkOwogICAgIH0KQEAgLTYy
NCwxMyArNjI3LDEzIEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmVuY2xv
c2luZ05vblN0YWNraW5nQ2xpcHBpbmdMYXllcihjb25zdCBSZW5kCiAgICAgcmV0dXJuIDA7CiB9
CiAKLXZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphZGRUb092ZXJsYXBNYXAoT3ZlcmxhcE1h
cCYgb3ZlcmxhcE1hcCwgUmVuZGVyTGF5ZXIqIGxheWVyLCBJbnRSZWN0JiBsYXllckJvdW5kcywg
Ym9vbCYgYm91bmRzQ29tcHV0ZWQpCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVG9P
dmVybGFwTWFwKFJlbmRlckdlb21ldHJ5TWFwJiBnZW9tZXRyeU1hcCwgT3ZlcmxhcE1hcCYgb3Zl
cmxhcE1hcCwgUmVuZGVyTGF5ZXIqIGxheWVyLCBJbnRSZWN0JiBsYXllckJvdW5kcywgYm9vbCYg
Ym91bmRzQ29tcHV0ZWQpCiB7CiAgICAgaWYgKGxheWVyLT5pc1Jvb3RMYXllcigpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoIWJvdW5kc0NvbXB1dGVkKSB7Ci0gICAgICAgIGxheWVyQm91
bmRzID0gbGF5ZXItPnJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGxh
eWVyLT5sb2NhbEJvdW5kaW5nQm94KCkpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgICAg
ICBsYXllckJvdW5kcyA9IGVuY2xvc2luZ0ludFJlY3QoZ2VvbWV0cnlNYXAuYWJzb2x1dGVSZWN0
KGxheWVyLT5sb2NhbEJvdW5kaW5nQm94KCkpKTsKICAgICAgICAgLy8gRW1wdHkgcmVjdHMgbmV2
ZXIgaW50ZXJzZWN0LCBidXQgd2UgbmVlZCB0aGVtIHRvIGZvciB0aGUgcHVycG9zZXMgb2Ygb3Zl
cmxhcCB0ZXN0aW5nLgogICAgICAgICBpZiAobGF5ZXJCb3VuZHMuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgbGF5ZXJCb3VuZHMuc2V0U2l6ZShJbnRTaXplKDEsIDEpKTsKQEAgLTY0MywxNCArNjQ2
LDE4IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphZGRUb092ZXJsYXBNYXAoT3Zlcmxh
cE1hcCYgb3ZlcmxhcE1hcCwgUmVuZGVyTGF5ZXIqCiAgICAgb3ZlcmxhcE1hcC5hZGQobGF5ZXIs
IGNsaXBSZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkZFRvT3Zlcmxh
cE1hcFJlY3Vyc2l2ZShPdmVybGFwTWFwJiBvdmVybGFwTWFwLCBSZW5kZXJMYXllciogbGF5ZXIp
Cit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVG9PdmVybGFwTWFwUmVjdXJzaXZlKFJl
bmRlckdlb21ldHJ5TWFwJiBnZW9tZXRyeU1hcCwgT3ZlcmxhcE1hcCYgb3ZlcmxhcE1hcCwgUmVu
ZGVyTGF5ZXIqIGxheWVyLCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllcikKIHsKICAgICBpZiAo
IWNhbkJlQ29tcG9zaXRlZChsYXllcikgfHwgb3ZlcmxhcE1hcC5jb250YWlucyhsYXllcikpCiAg
ICAgICAgIHJldHVybjsKIAorICAgIC8vIEEgbnVsbCBhbmNlc3RvckxheWVyIGlzIGFuIGluZGlj
YXRpb24gdGhhdCAnbGF5ZXInIGhhcyBhbHJlYWR5IGJlZW4gcHVzaGVkLgorICAgIGlmIChhbmNl
c3RvckxheWVyKQorICAgICAgICBnZW9tZXRyeU1hcC5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKGxh
eWVyLT5yZW5kZXJlcigpLCBhbmNlc3RvckxheWVyLT5yZW5kZXJlcigpKTsKKyAgICAKICAgICBJ
bnRSZWN0IGJvdW5kczsKICAgICBib29sIGhhdmVDb21wdXRlZEJvdW5kcyA9IGZhbHNlOwotICAg
IGFkZFRvT3ZlcmxhcE1hcChvdmVybGFwTWFwLCBsYXllciwgYm91bmRzLCBoYXZlQ29tcHV0ZWRC
b3VuZHMpOworICAgIGFkZFRvT3ZlcmxhcE1hcChnZW9tZXRyeU1hcCwgb3ZlcmxhcE1hcCwgbGF5
ZXIsIGJvdW5kcywgaGF2ZUNvbXB1dGVkQm91bmRzKTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQK
ICAgICBMYXllckxpc3RNdXRhdGlvbkRldGVjdG9yIG11dGF0aW9uQ2hlY2tlcihsYXllcik7CkBA
IC02NjEsNyArNjY4LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkZFRvT3Zlcmxh
cE1hcFJlY3Vyc2l2ZShPdmVybGFwTWFwJiBvdmVybGFwTWFwLCBSZW4KICAgICAgICAgICAgIHNp
emVfdCBsaXN0U2l6ZSA9IG5lZ1pPcmRlckxpc3QtPnNpemUoKTsKICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkgewogICAgICAgICAgICAgICAgIFJlbmRl
ckxheWVyKiBjdXJMYXllciA9IG5lZ1pPcmRlckxpc3QtPmF0KGkpOwotICAgICAgICAgICAgICAg
IGFkZFRvT3ZlcmxhcE1hcFJlY3Vyc2l2ZShvdmVybGFwTWFwLCBjdXJMYXllcik7CisgICAgICAg
ICAgICAgICAgYWRkVG9PdmVybGFwTWFwUmVjdXJzaXZlKGdlb21ldHJ5TWFwLCBvdmVybGFwTWFw
LCBjdXJMYXllciwgbGF5ZXIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAt
NjcwLDcgKzY3Nyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphZGRUb092ZXJsYXBN
YXBSZWN1cnNpdmUoT3ZlcmxhcE1hcCYgb3ZlcmxhcE1hcCwgUmVuCiAgICAgICAgIHNpemVfdCBs
aXN0U2l6ZSA9IG5vcm1hbEZsb3dMaXN0LT5zaXplKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGlzdFNpemU7ICsraSkgewogICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGN1ckxh
eWVyID0gbm9ybWFsRmxvd0xpc3QtPmF0KGkpOwotICAgICAgICAgICAgYWRkVG9PdmVybGFwTWFw
UmVjdXJzaXZlKG92ZXJsYXBNYXAsIGN1ckxheWVyKTsKKyAgICAgICAgICAgIGFkZFRvT3Zlcmxh
cE1hcFJlY3Vyc2l2ZShnZW9tZXRyeU1hcCwgb3ZlcmxhcE1hcCwgY3VyTGF5ZXIsIGxheWVyKTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtNjc5LDEwICs2ODYsMTMgQEAgdm9pZCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OmFkZFRvT3ZlcmxhcE1hcFJlY3Vyc2l2ZShPdmVybGFwTWFwJiBvdmVybGFw
TWFwLCBSZW4KICAgICAgICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9IHBvc1pPcmRlckxpc3QtPnNp
emUoKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkg
ewogICAgICAgICAgICAgICAgIFJlbmRlckxheWVyKiBjdXJMYXllciA9IHBvc1pPcmRlckxpc3Qt
PmF0KGkpOwotICAgICAgICAgICAgICAgIGFkZFRvT3ZlcmxhcE1hcFJlY3Vyc2l2ZShvdmVybGFw
TWFwLCBjdXJMYXllcik7CisgICAgICAgICAgICAgICAgYWRkVG9PdmVybGFwTWFwUmVjdXJzaXZl
KGdlb21ldHJ5TWFwLCBvdmVybGFwTWFwLCBjdXJMYXllciwgbGF5ZXIpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIGlmIChhbmNlc3RvckxheWVyKQorICAgICAg
ICBnZW9tZXRyeU1hcC5wb3BNYXBwaW5nc1RvQW5jZXN0b3IoYW5jZXN0b3JMYXllci0+cmVuZGVy
ZXIoKSk7CiB9CiAKIC8vICBSZWN1cnNlIHRocm91Z2ggdGhlIGxheWVycyBpbiB6LWluZGV4IGFu
ZCBvdmVyZmxvdyBvcmRlciAod2hpY2ggaXMgZXF1aXZhbGVudCB0byBwYWludGluZyBvcmRlcikK
QEAgLTY5NCwxMSArNzA0LDE1IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphZGRUb092
ZXJsYXBNYXBSZWN1cnNpdmUoT3ZlcmxhcE1hcCYgb3ZlcmxhcE1hcCwgUmVuCiAvLyAgICAgIG11
c3QgYmUgY29tcG9zaXRpbmcgc28gdGhhdCBpdHMgY29udGVudHMgcmVuZGVyIG92ZXIgdGhhdCBj
aGlsZC4KIC8vICAgICAgVGhpcyBpbXBsaWVzIHRoYXQgaXRzIHBvc2l0aXZlIHotaW5kZXggY2hp
bGRyZW4gbXVzdCBhbHNvIGJlIGNvbXBvc2l0aW5nLgogLy8KLXZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMoUmVuZGVyTGF5ZXIqIGxheWVy
LCBPdmVybGFwTWFwKiBvdmVybGFwTWFwLCBDb21wb3NpdGluZ1N0YXRlJiBjb21wb3NpdGluZ1N0
YXRlLCBib29sJiBsYXllcnNDaGFuZ2VkKQordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNv
bXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwg
UmVuZGVyTGF5ZXIqIGxheWVyLCBSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE92ZXJs
YXBNYXAqIG92ZXJsYXBNYXAsIENvbXBvc2l0aW5nU3RhdGUmIGNvbXBvc2l0aW5nU3RhdGUsIGJv
b2wmIGxheWVyc0NoYW5nZWQpCiB7CiAgICAgbGF5ZXItPnVwZGF0ZUxheWVyUG9zaXRpb24oKTsK
ICAgICBsYXllci0+dXBkYXRlTGF5ZXJMaXN0c0lmTmVlZGVkKCk7Ci0KKyAgICAKKyAgICAvLyBT
aG91bGQgZ2VvbWV0cnlNYXAgYmUgcGFydCBvZiB0aGUgb3ZlcmxhcCBtYXA/CisgICAgaWYgKGdl
b21ldHJ5TWFwKQorICAgICAgICBnZW9tZXRyeU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcihs
YXllci0+cmVuZGVyZXIoKSwgYW5jZXN0b3JMYXllciA/IGFuY2VzdG9yTGF5ZXItPnJlbmRlcmVy
KCkgOiAwKTsKKyAgICAKICAgICAvLyBDbGVhciB0aGUgZmxhZwogICAgIGxheWVyLT5zZXRIYXND
b21wb3NpdGluZ0Rlc2NlbmRhbnQoZmFsc2UpOwogICAgIApAQCAtNzA4LDE0ICs3MjIsMTYgQEAg
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50
cyhSZW5kZXJMYXllciogbGF5ZXIsIE8KICAgICBJbnRSZWN0IGFic0JvdW5kczsKICAgICBpZiAo
b3ZlcmxhcE1hcCAmJiAhb3ZlcmxhcE1hcC0+aXNFbXB0eSgpICYmIGNvbXBvc2l0aW5nU3RhdGUu
bV90ZXN0aW5nT3ZlcmxhcCkgewogICAgICAgICAvLyBJZiB3ZSdyZSB0ZXN0aW5nIGZvciBvdmVy
bGFwLCB3ZSBvbmx5IG5lZWQgdG8gY29tcG9zaXRlIGlmIHdlIG92ZXJsYXAgc29tZXRoaW5nIHRo
YXQgaXMgYWxyZWFkeSBjb21wb3NpdGVkLgotICAgICAgICBhYnNCb3VuZHMgPSBsYXllci0+cmVu
ZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QobGF5ZXItPmxvY2FsQm91bmRp
bmdCb3goKSkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisvLyAgICAgICAgYWJzQm91bmRzID0g
bGF5ZXItPnJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGxheWVyLT5s
b2NhbEJvdW5kaW5nQm94KCkpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgICAgICBhYnNC
b3VuZHMgPSBlbmNsb3NpbmdJbnRSZWN0KGdlb21ldHJ5TWFwLT5hYnNvbHV0ZVJlY3QobGF5ZXIt
PmxvY2FsQm91bmRpbmdCb3goKSkpOworCiAgICAgICAgIC8vIEVtcHR5IHJlY3RzIG5ldmVyIGlu
dGVyc2VjdCwgYnV0IHdlIG5lZWQgdGhlbSB0byBmb3IgdGhlIHB1cnBvc2VzIG9mIG92ZXJsYXAg
dGVzdGluZy4KICAgICAgICAgaWYgKGFic0JvdW5kcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBh
YnNCb3VuZHMuc2V0U2l6ZShJbnRTaXplKDEsIDEpKTsKICAgICAgICAgaGF2ZUNvbXB1dGVkQm91
bmRzID0gdHJ1ZTsKICAgICAgICAgbXVzdE92ZXJsYXBDb21wb3NpdGVkTGF5ZXJzID0gb3Zlcmxh
cE1hcC0+b3ZlcmxhcHNMYXllcnMoYWJzQm91bmRzKTsKICAgICB9Ci0gICAgCisKICAgICBsYXll
ci0+c2V0TXVzdE92ZXJsYXBDb21wb3NpdGVkTGF5ZXJzKG11c3RPdmVybGFwQ29tcG9zaXRlZExh
eWVycyk7CiAgICAgCiAgICAgLy8gVGhlIGNoaWxkcmVuIG9mIHRoaXMgbGF5ZXIgZG9uJ3QgbmVl
ZCB0byBjb21wb3NpdGUsIHVubGVzcyB0aGVyZSBpcwpAQCAtNzU3LDcgKzc3Myw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMoUmVu
ZGVyTGF5ZXIqIGxheWVyLCBPCiAgICAgICAgICAgICBzaXplX3QgbGlzdFNpemUgPSBuZWdaT3Jk
ZXJMaXN0LT5zaXplKCk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RT
aXplOyArK2kpIHsKICAgICAgICAgICAgICAgICBSZW5kZXJMYXllciogY3VyTGF5ZXIgPSBuZWda
T3JkZXJMaXN0LT5hdChpKTsKLSAgICAgICAgICAgICAgICBjb21wdXRlQ29tcG9zaXRpbmdSZXF1
aXJlbWVudHMoY3VyTGF5ZXIsIG92ZXJsYXBNYXAsIGNoaWxkU3RhdGUsIGxheWVyc0NoYW5nZWQp
OworICAgICAgICAgICAgICAgIGNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhsYXllciwg
Y3VyTGF5ZXIsIGdlb21ldHJ5TWFwLCBvdmVybGFwTWFwLCBjaGlsZFN0YXRlLCBsYXllcnNDaGFu
Z2VkKTsKIAogICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgdG8gbWFrZSBhIGxheWVyIGZv
ciB0aGlzIGNoaWxkLCBtYWtlIG9uZSBub3cgc28gd2UgY2FuIGhhdmUgYSBjb250ZW50cyBsYXll
cgogICAgICAgICAgICAgICAgIC8vIChzaW5jZSB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSAt
dmUgei1vcmRlciBjaGlsZCByZW5kZXJzIHVuZGVybmVhdGggb3VyIGNvbnRlbnRzKS4KQEAgLTc3
Nyw3ICs3OTMsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBvc2l0
aW5nUmVxdWlyZW1lbnRzKFJlbmRlckxheWVyKiBsYXllciwgTwogICAgICAgICBzaXplX3QgbGlz
dFNpemUgPSBub3JtYWxGbG93TGlzdC0+c2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxpc3RTaXplOyArK2kpIHsKICAgICAgICAgICAgIFJlbmRlckxheWVyKiBjdXJMYXll
ciA9IG5vcm1hbEZsb3dMaXN0LT5hdChpKTsKLSAgICAgICAgICAgIGNvbXB1dGVDb21wb3NpdGlu
Z1JlcXVpcmVtZW50cyhjdXJMYXllciwgb3ZlcmxhcE1hcCwgY2hpbGRTdGF0ZSwgbGF5ZXJzQ2hh
bmdlZCk7CisgICAgICAgICAgICBjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMobGF5ZXIs
IGN1ckxheWVyLCBnZW9tZXRyeU1hcCwgb3ZlcmxhcE1hcCwgY2hpbGRTdGF0ZSwgbGF5ZXJzQ2hh
bmdlZCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTc4Niw3ICs4MDIsNyBAQCB2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKFJlbmRlckxh
eWVyKiBsYXllciwgTwogICAgICAgICAgICAgc2l6ZV90IGxpc3RTaXplID0gcG9zWk9yZGVyTGlz
dC0+c2l6ZSgpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0U2l6ZTsg
KytpKSB7CiAgICAgICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGN1ckxheWVyID0gcG9zWk9yZGVy
TGlzdC0+YXQoaSk7Ci0gICAgICAgICAgICAgICAgY29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1l
bnRzKGN1ckxheWVyLCBvdmVybGFwTWFwLCBjaGlsZFN0YXRlLCBsYXllcnNDaGFuZ2VkKTsKKyAg
ICAgICAgICAgICAgICBjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMobGF5ZXIsIGN1ckxh
eWVyLCBnZW9tZXRyeU1hcCwgb3ZlcmxhcE1hcCwgY2hpbGRTdGF0ZSwgbGF5ZXJzQ2hhbmdlZCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC04MDMsNyArODE5LDcgQEAgdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhS
ZW5kZXJMYXllciogbGF5ZXIsIE8KICAgICAvLyB0aGUgb3ZlcmxhcCBtYXAuIExheWVycyB0aGF0
IGRvIG5vdCBjb21wb3NpdGUgd2lsbCBkcmF3IGludG8gdGhlaXIKICAgICAvLyBjb21wb3NpdGlu
ZyBhbmNlc3RvcidzIGJhY2tpbmcsIGFuZCBzbyBhcmUgc3RpbGwgY29uc2lkZXJlZCBmb3Igb3Zl
cmxhcC4KICAgICBpZiAob3ZlcmxhcE1hcCAmJiBjaGlsZFN0YXRlLm1fY29tcG9zaXRpbmdBbmNl
c3RvciAmJiAhY2hpbGRTdGF0ZS5tX2NvbXBvc2l0aW5nQW5jZXN0b3ItPmlzUm9vdExheWVyKCkp
Ci0gICAgICAgIGFkZFRvT3ZlcmxhcE1hcCgqb3ZlcmxhcE1hcCwgbGF5ZXIsIGFic0JvdW5kcywg
aGF2ZUNvbXB1dGVkQm91bmRzKTsKKyAgICAgICAgYWRkVG9PdmVybGFwTWFwKCpnZW9tZXRyeU1h
cCwgKm92ZXJsYXBNYXAsIGxheWVyLCBhYnNCb3VuZHMsIGhhdmVDb21wdXRlZEJvdW5kcyk7CiAK
ICAgICAvLyBJZiB3ZSBoYXZlIGEgc29mdHdhcmUgdHJhbnNmb3JtLCBhbmQgd2UgaGF2ZSBsYXll
cnMgdW5kZXIgdXMsIHdlIG5lZWQgdG8gYWxzbwogICAgIC8vIGJlIGNvbXBvc2l0ZWQuIEFsc28s
IGlmIHdlIGhhdmUgb3BhY2l0eSA8IDEsIHRoZW4gd2UgbmVlZCB0byBiZSBhIGxheWVyIHNvIHRo
YXQKQEAgLTgxMyw3ICs4MjksNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0
ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKFJlbmRlckxheWVyKiBsYXllciwgTwogICAgICAgICBj
aGlsZFN0YXRlLm1fY29tcG9zaXRpbmdBbmNlc3RvciA9IGxheWVyOwogICAgICAgICBpZiAob3Zl
cmxhcE1hcCkgewogICAgICAgICAgICAgb3ZlcmxhcE1hcC0+cHVzaENvbXBvc2l0aW5nQ29udGFp
bmVyKCk7Ci0gICAgICAgICAgICBhZGRUb092ZXJsYXBNYXBSZWN1cnNpdmUoKm92ZXJsYXBNYXAs
IGxheWVyKTsKKyAgICAgICAgICAgIGFkZFRvT3ZlcmxhcE1hcFJlY3Vyc2l2ZSgqZ2VvbWV0cnlN
YXAsICpvdmVybGFwTWFwLCBsYXllcik7CiAgICAgICAgIH0KICAgICAgICAgd2lsbEJlQ29tcG9z
aXRlZCA9IHRydWU7CiAgICAgfQpAQCAtODQyLDcgKzg1OCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMoUmVuZGVyTGF5ZXIqIGxh
eWVyLCBPCiAgICAgICAgICAgICBjaGlsZFN0YXRlLm1fY29tcG9zaXRpbmdBbmNlc3RvciA9IGxh
eWVyOwogICAgICAgICAgICAgaWYgKG92ZXJsYXBNYXApIHsKICAgICAgICAgICAgICAgICBvdmVy
bGFwTWFwLT5wdXNoQ29tcG9zaXRpbmdDb250YWluZXIoKTsKLSAgICAgICAgICAgICAgICBhZGRU
b092ZXJsYXBNYXBSZWN1cnNpdmUoKm92ZXJsYXBNYXAsIGxheWVyKTsKKyAgICAgICAgICAgICAg
ICBhZGRUb092ZXJsYXBNYXBSZWN1cnNpdmUoKmdlb21ldHJ5TWFwLCAqb3ZlcmxhcE1hcCwgbGF5
ZXIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgd2lsbEJlQ29tcG9zaXRlZCA9IHRydWU7
CiAgICAgICAgICB9CkBAIC04NzMsNiArODg5LDkgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhSZW5kZXJMYXllciogbGF5ZXIsIE8K
IAogICAgIGlmIChsYXllci0+cmVmbGVjdGlvbkxheWVyKCkgJiYgdXBkYXRlTGF5ZXJDb21wb3Np
dGluZ1N0YXRlKGxheWVyLT5yZWZsZWN0aW9uTGF5ZXIoKSwgQ29tcG9zaXRpbmdDaGFuZ2VSZXBh
aW50Tm93KSkKICAgICAgICAgbGF5ZXJzQ2hhbmdlZCA9IHRydWU7CisKKyAgICBpZiAoZ2VvbWV0
cnlNYXApCisgICAgICAgIGdlb21ldHJ5TWFwLT5wb3BNYXBwaW5nc1RvQW5jZXN0b3IoYW5jZXN0
b3JMYXllciA/IGFuY2VzdG9yTGF5ZXItPnJlbmRlcmVyKCkgOiAwKTsKIH0KIAogdm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnNldENvbXBvc2l0aW5nUGFyZW50KFJlbmRlckxheWVyKiBjaGls
ZExheWVyLCBSZW5kZXJMYXllciogcGFyZW50TGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKaW5kZXggZTI5NGI1ODY2YWVhODA2ZThj
MDY0N2YwNTA4NTYwODQ2ZDc1OWRmYS4uMjczODQ5MzUyMWIwMjUyZmIwZmQ1YWQ0YjQ3MTdlZmFh
Y2RiNjk5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNv
bXBvc2l0b3IuaApAQCAtMzQsNiArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBSZW5kZXJFbWJlZGRlZE9iamVjdDsKK2NsYXNzIFJlbmRl
ckdlb21ldHJ5TWFwOwogY2xhc3MgUmVuZGVyUGFydDsKIGNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOwogI2lmIEVOQUJMRShWSURFTykKQEAgLTIzOCwxMyArMjM5LDEzIEBAIHByaXZhdGU6CiAg
ICAgLy8gUmVwYWludCB0aGUgZ2l2ZW4gcmVjdCAod2hpY2ggaXMgbGF5ZXIncyBjb29yZHMpLCBh
bmQgcmVnaW9ucyBvZiBjaGlsZCBsYXllcnMgdGhhdCBpbnRlcnNlY3QgdGhhdCByZWN0LgogICAg
IHZvaWQgcmVjdXJzaXZlUmVwYWludExheWVyUmVjdChSZW5kZXJMYXllciosIGNvbnN0IEludFJl
Y3QmKTsKIAotICAgIHZvaWQgYWRkVG9PdmVybGFwTWFwKE92ZXJsYXBNYXAmLCBSZW5kZXJMYXll
ciosIEludFJlY3QmIGxheWVyQm91bmRzLCBib29sJiBib3VuZHNDb21wdXRlZCk7Ci0gICAgdm9p
ZCBhZGRUb092ZXJsYXBNYXBSZWN1cnNpdmUoT3ZlcmxhcE1hcCYsIFJlbmRlckxheWVyKik7Cisg
ICAgdm9pZCBhZGRUb092ZXJsYXBNYXAoUmVuZGVyR2VvbWV0cnlNYXAmLCBPdmVybGFwTWFwJiwg
UmVuZGVyTGF5ZXIqLCBJbnRSZWN0JiBsYXllckJvdW5kcywgYm9vbCYgYm91bmRzQ29tcHV0ZWQp
OworICAgIHZvaWQgYWRkVG9PdmVybGFwTWFwUmVjdXJzaXZlKFJlbmRlckdlb21ldHJ5TWFwJiwg
T3ZlcmxhcE1hcCYsIFJlbmRlckxheWVyKiwgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIgPSAw
KTsKIAogICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNUaW1lckZpcmVkKFRpbWVyPFJl
bmRlckxheWVyQ29tcG9zaXRvcj4qKTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgbGF5
ZXIncyBjb21wb3NpdGluZyBjaGFuZ2VkCi0gICAgdm9pZCBjb21wdXRlQ29tcG9zaXRpbmdSZXF1
aXJlbWVudHMoUmVuZGVyTGF5ZXIqLCBPdmVybGFwTWFwKiwgc3RydWN0IENvbXBvc2l0aW5nU3Rh
dGUmLCBib29sJiBsYXllcnNDaGFuZ2VkKTsKKyAgICB2b2lkIGNvbXB1dGVDb21wb3NpdGluZ1Jl
cXVpcmVtZW50cyhSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgUmVuZGVyTGF5ZXIqLCBSZW5k
ZXJHZW9tZXRyeU1hcCosIE92ZXJsYXBNYXAqLCBzdHJ1Y3QgQ29tcG9zaXRpbmdTdGF0ZSYsIGJv
b2wmIGxheWVyc0NoYW5nZWQpOwogICAgIAogICAgIC8vIFJlY3Vyc2VzIGRvd24gdGhlIHRyZWUs
IHBhcmVudGluZyBkZXNjZW5kYW50IGNvbXBvc2l0aW5nIGxheWVycyBhbmQgY29sbGVjdGluZyBh
biBhcnJheSBvZiBjaGlsZCBsYXllcnMgZm9yIHRoZSBjdXJyZW50IGNvbXBvc2l0aW5nIGxheWVy
LgogICAgIHZvaWQgcmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlKFJlbmRlckxheWVyKiwgVmVj
dG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRHcmFwaGljc0xheWVyc09mRW5jbG9zaW5nTGF5ZXIs
IGludCBkZXB0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmlu
ZGV4IDRlYjE2YjgzNTE5NmI5OTAwYjQ2Y2I2ZWNiOGYxNmQ3MmViMDg5YTIuLmQ3N2YyZDM1ZGU2
Mjg0M2M5NzQ4NTExMzFmMDg1YWNhNmMwMmUxNDggMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiUmVuZGVyQ291
bnRlci5oIgogI2luY2x1ZGUgIlJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5oIgogI2luY2x1
ZGUgIlJlbmRlckZsZXhpYmxlQm94LmgiCisjaW5jbHVkZSAiUmVuZGVyR2VvbWV0cnlNYXAuaCIK
ICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlUmVzb3VyY2VT
dHlsZUltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCkBAIC0yMDQ2LDYgKzIwNDcs
MjQgQEAgdm9pZCBSZW5kZXJPYmplY3Q6Om1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9k
ZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGIKICAgICBvLT5tYXBMb2NhbFRvQ29udGFpbmVy
KHJlcGFpbnRDb250YWluZXIsIGZpeGVkLCB1c2VUcmFuc2Zvcm1zLCB0cmFuc2Zvcm1TdGF0ZSwg
RG9Ob3RBcHBseUNvbnRhaW5lckZsaXAsIHdhc0ZpeGVkKTsKIH0KIAorY29uc3QgUmVuZGVyT2Jq
ZWN0KiBSZW5kZXJPYmplY3Q6OnB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyQm94
TW9kZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJiBnZW9tZXRy
eU1hcCkgY29uc3QKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGFuY2VzdG9yVG9TdG9wQXQsIGFuY2Vz
dG9yVG9TdG9wQXQgIT0gdGhpcyk7CisKKyAgICBSZW5kZXJPYmplY3QqIGNvbnRhaW5lciA9IHBh
cmVudCgpOworICAgIGlmICghY29udGFpbmVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIExh
eW91dFNpemUgb2Zmc2V0OworICAgIGlmIChjb250YWluZXItPmhhc092ZXJmbG93Q2xpcCgpKQor
ICAgICAgICBvZmZzZXQgPSAtdG9SZW5kZXJCb3goY29udGFpbmVyKS0+c2Nyb2xsZWRDb250ZW50
T2Zmc2V0KCk7CisKKyAgICBib29sIGlzTm9uVW5pZm9ybSA9IGhhc0NvbHVtbnMoKSB8fCAoY29u
dGFpbmVyLT5pc0JveCgpICYmIGNvbnRhaW5lci0+c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3Jp
dGluZ01vZGUoKSk7CisgICAgZ2VvbWV0cnlNYXAucHVzaCh0aGlzLCBvZmZzZXQsIGlzTm9uVW5p
Zm9ybSk7CisgICAgCisgICAgcmV0dXJuIGNvbnRhaW5lcjsKK30KKwogdm9pZCBSZW5kZXJPYmpl
Y3Q6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50KGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3Jt
cywgVHJhbnNmb3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlKSBjb25zdAogewogICAgIFJlbmRlck9i
amVjdCogbyA9IHBhcmVudCgpOwpAQCAtMjExNCw3ICsyMTMzLDcgQEAgRmxvYXRQb2ludCBSZW5k
ZXJPYmplY3Q6OmxvY2FsVG9Db250YWluZXJQb2ludChjb25zdCBGbG9hdFBvaW50JiBsb2NhbFBv
aW50LCBSZW4KICAgICByZXR1cm4gdHJhbnNmb3JtU3RhdGUubGFzdFBsYW5hclBvaW50KCk7CiB9
CiAKLUxheW91dFNpemUgUmVuZGVyT2JqZWN0OjpvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9i
amVjdCogbywgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KSBjb25zdAorTGF5b3V0U2l6ZSBSZW5k
ZXJPYmplY3Q6Om9mZnNldEZyb21Db250YWluZXIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBMYXlv
dXRQb2ludCYgcG9pbnQsIGJvb2wqIG9mZnNldERlcGVuZHNPblBvaW50KSBjb25zdAogewogICAg
IEFTU0VSVChvID09IGNvbnRhaW5lcigpKTsKIApAQCAtMjEyNSw2ICsyMTQ0LDkgQEAgTGF5b3V0
U2l6ZSBSZW5kZXJPYmplY3Q6Om9mZnNldEZyb21Db250YWluZXIoUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBMYXlvdXRQb2ludCYKICAgICBpZiAoby0+aGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAg
IG9mZnNldCAtPSB0b1JlbmRlckJveChvKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAKKyAg
ICBpZiAob2Zmc2V0RGVwZW5kc09uUG9pbnQpCisgICAgICAgICpvZmZzZXREZXBlbmRzT25Qb2lu
dCA9IGhhc0NvbHVtbnMoKTsKKwogICAgIHJldHVybiBvZmZzZXQ7CiB9CiAKQEAgLTIyMDAsNyAr
MjIyMiw3IEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpoYXNPdXRsaW5lQW5ub3RhdGlvbigpIGNvbnN0
CiAgICAgcmV0dXJuIG5vZGUoKSAmJiBub2RlKCktPmlzTGluaygpICYmIGRvY3VtZW50KCktPnBy
aW50aW5nKCk7CiB9CiAKLVJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0Ojpjb250YWluZXIoUmVu
ZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wqIHJlcGFpbnRDb250YWlu
ZXJTa2lwcGVkKSBjb25zdAorUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6OmNvbnRhaW5lcihj
b25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCogcmVwYWlu
dENvbnRhaW5lclNraXBwZWQpIGNvbnN0CiB7CiAgICAgaWYgKHJlcGFpbnRDb250YWluZXJTa2lw
cGVkKQogICAgICAgICAqcmVwYWludENvbnRhaW5lclNraXBwZWQgPSBmYWxzZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBmMTAzMmE1MzRiMzFkNjhhY2YwYmU1
ZjI2NzEwZmVmMTRhYzkxMTVmLi40NDAxZDMyZjJmZWNiZWYyODljMjNkZDlmOThmNjdhZGI2ZTNl
YmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC02MCw2ICs2
MCw3IEBAIGNsYXNzIFJlbmRlckJveE1vZGVsT2JqZWN0OwogY2xhc3MgUmVuZGVySW5saW5lOwog
Y2xhc3MgUmVuZGVyQmxvY2s7CiBjbGFzcyBSZW5kZXJGbG93VGhyZWFkOworY2xhc3MgUmVuZGVy
R2VvbWV0cnlNYXA7CiBjbGFzcyBSZW5kZXJMYXllcjsKIGNsYXNzIFJlbmRlclRhYmxlOwogY2xh
c3MgUmVuZGVyVGhlbWU7CkBAIC01ODMsNyArNTg0LDcgQEAgcHVibGljOgogICAgIC8vIFJldHVy
bnMgdGhlIG9iamVjdCBjb250YWluaW5nIHRoaXMgb25lLiBDYW4gYmUgZGlmZmVyZW50IGZyb20g
cGFyZW50IGZvciBwb3NpdGlvbmVkIGVsZW1lbnRzLgogICAgIC8vIElmIHJlcGFpbnRDb250YWlu
ZXIgYW5kIHJlcGFpbnRDb250YWluZXJTa2lwcGVkIGFyZSBub3QgbnVsbCwgb24gcmV0dXJuICpy
ZXBhaW50Q29udGFpbmVyU2tpcHBlZAogICAgIC8vIGlzIHRydWUgaWYgdGhlIHJlbmRlcmVyIHJl
dHVybmVkIGlzIGFuIGFuY2VzdG9yIG9mIHJlcGFpbnRDb250YWluZXIuCi0gICAgUmVuZGVyT2Jq
ZWN0KiBjb250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSAw
LCBib29sKiByZXBhaW50Q29udGFpbmVyU2tpcHBlZCA9IDApIGNvbnN0OworICAgIFJlbmRlck9i
amVjdCogY29udGFpbmVyKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyID0gMCwgYm9vbCogcmVwYWludENvbnRhaW5lclNraXBwZWQgPSAwKSBjb25zdDsKIAogICAg
IHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBob3ZlckFuY2VzdG9yKCkgY29uc3QgeyByZXR1cm4gcGFy
ZW50KCk7IH0KIApAQCAtNjg0LDcgKzY4NSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFJldHVybiB0
aGUgb2Zmc2V0IGZyb20gdGhlIGNvbnRhaW5lcigpIHJlbmRlcmVyIChleGNsdWRpbmcgdHJhbnNm
b3JtcykuIEluIG11bHRpLWNvbHVtbiBsYXlvdXQsCiAgICAgLy8gZGlmZmVyZW50IG9mZnNldHMg
YXBwbHkgYXQgZGlmZmVyZW50IHBvaW50cywgc28gcmV0dXJuIHRoZSBvZmZzZXQgdGhhdCBhcHBs
aWVzIHRvIHRoZSBnaXZlbiBwb2ludC4KLSAgICB2aXJ0dWFsIExheW91dFNpemUgb2Zmc2V0RnJv
bUNvbnRhaW5lcihSZW5kZXJPYmplY3QqLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OworICAg
IHZpcnR1YWwgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCosIGNv
bnN0IExheW91dFBvaW50JiwgYm9vbCogb2Zmc2V0RGVwZW5kc09uUG9pbnQgPSAwKSBjb25zdDsK
ICAgICAvLyBSZXR1cm4gdGhlIG9mZnNldCBmcm9tIGFuIG9iamVjdCB1cCB0aGUgY29udGFpbmVy
KCkgY2hhaW4uIEFzc2VydHMgdGhhdCBub25lIG9mIHRoZSBpbnRlcm1lZGlhdGUgb2JqZWN0cyBo
YXZlIHRyYW5zZm9ybXMuCiAgICAgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tQW5jZXN0b3JDb250YWlu
ZXIoUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAgICAgCkBAIC04ODEsNiArODgyLDEwIEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBib29sIGZpeGVkLCBU
cmFuc2Zvcm1TdGF0ZSYsIEFwcGx5Q29udGFpbmVyRmxpcE9yTm90ID0gQXBwbHlDb250YWluZXJG
bGlwLCBib29sKiB3YXNGaXhlZCA9IDApIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBtYXBBYnNv
bHV0ZVRvTG9jYWxQb2ludChib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9y
bVN0YXRlJikgY29uc3Q7CiAKKyAgICAvLyBQdXNoZXMgc3RhdGUgb250byBSZW5kZXJHZW9tZXRy
eU1hcCBhYm91dCBob3cgdG8gbWFwIGNvb3JkaW5hdGVzIGZyb20gdGhpcyByZW5kZXJlciB0byBp
dHMgY29uZHRhaW5lciwgb3IgYW5jZXN0b3JUb1N0b3BBdCAod2hpY2hldmVyIGlzIGVuY291bnRl
cmVkIGZpcnN0KS4KKyAgICAvLyBSZXR1cm5zIHRoZSByZW5kZXJlciB3aGljaCB3YXMgbWFwcGVk
IHRvIChjb250YWluZXIgb3IgYW5jZXN0b3JUb1N0b3BBdCkuCisgICAgdmlydHVhbCBjb25zdCBS
ZW5kZXJPYmplY3QqIHB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyQm94TW9kZWxP
YmplY3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJikgY29uc3Q7CisgICAg
CiAgICAgYm9vbCBzaG91bGRVc2VUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnN0IFJlbmRlck9i
amVjdCogY29udGFpbmVyKSBjb25zdDsKICAgICB2b2lkIGdldFRyYW5zZm9ybUZyb21Db250YWlu
ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIsIGNvbnN0IExheW91dFNpemUmIG9mZnNl
dEluQ29udGFpbmVyLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIGNvbnN0OwogICAgIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAppbmRleCAxMDcyMGMyYjhm
NzE4MTZmOWEwZTNhOWJlNmZlNDQwMThkMDA3MzBlLi45OWVjOTJkN2QzOWM2ZTJmMTUzMGNhODQ2
N2IwN2Q0MzA4ZTk0ZTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVDZWxsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVDZWxsLmNwcApAQCAtMjQwLDExICsyNDAsMTEgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnNl
dE92ZXJyaWRlSGVpZ2h0RnJvbVJvd0hlaWdodChMYXlvdXRVbml0IHJvd0hlaWdodCkKICAgICBS
ZW5kZXJCbG9jazo6c2V0T3ZlcnJpZGVIZWlnaHQobWF4PExheW91dFVuaXQ+KDAsIHJvd0hlaWdo
dCAtIGJvcmRlckJlZm9yZSgpIC0gcGFkZGluZ0JlZm9yZSgpIC0gYm9yZGVyQWZ0ZXIoKSAtIHBh
ZGRpbmdBZnRlcigpKSk7CiB9CiAKLUxheW91dFNpemUgUmVuZGVyVGFibGVDZWxsOjpvZmZzZXRG
cm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCogbywgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KSBj
b25zdAorTGF5b3V0U2l6ZSBSZW5kZXJUYWJsZUNlbGw6Om9mZnNldEZyb21Db250YWluZXIoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIGJvb2wqIG9mZnNldERlcGVu
ZHNPblBvaW50KSBjb25zdAogewogICAgIEFTU0VSVChvID09IGNvbnRhaW5lcigpKTsKIAotICAg
IExheW91dFNpemUgb2Zmc2V0ID0gUmVuZGVyQmxvY2s6Om9mZnNldEZyb21Db250YWluZXIobywg
cG9pbnQpOworICAgIExheW91dFNpemUgb2Zmc2V0ID0gUmVuZGVyQmxvY2s6Om9mZnNldEZyb21D
b250YWluZXIobywgcG9pbnQsIG9mZnNldERlcGVuZHNPblBvaW50KTsKICAgICBpZiAocGFyZW50
KCkpCiAgICAgICAgIG9mZnNldC5leHBhbmQoLXBhcmVudEJveCgpLT54KCksIC1wYXJlbnRCb3go
KS0+eSgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2VsbC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCmlu
ZGV4IGRhYzhhNzYwNmE3ODcxMDViYzVlZDNjODM1OWU1ZmI2NjliYjQxMGYuLjJhNTgyMGU5ZWUy
OWNmN2NmNTI1NzI3MTA2OTdmMzkwZGVmMzhmMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVDZWxsLmgKQEAgLTE1Miw3ICsxNTIsNyBAQCBwcml2YXRlOgogCiAgICAg
dmlydHVhbCBib29sIGJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFja2dyb3VuZChCYWNrZ3Jv
dW5kQmxlZWRBdm9pZGFuY2UsIElubGluZUZsb3dCb3gqKSBjb25zdCBPVkVSUklERTsKIAotICAg
IHZpcnR1YWwgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCosIGNv
bnN0IExheW91dFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRTaXplIG9mZnNldEZy
b21Db250YWluZXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgTGF5b3V0UG9pbnQmLCBib29sKiBvZmZz
ZXREZXBlbmRzT25Qb2ludCA9IDApIGNvbnN0OwogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjbGlw
cGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENv
bnRhaW5lcikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChS
ZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgTGF5b3V0UmVjdCYsIGJvb2wg
Zml4ZWQgPSBmYWxzZSkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3
LmNwcAppbmRleCA4NjMzMTA0ZTNmMTE2YjRiYzU1OGI0NDc3MzA0ZjI2M2UxNTNlNWYwLi5kYTk4
NmQzN2Q3ZDY5NjA1MjY2NWJlOTQ1MGE2YzMwNDA3ZmZlZTBkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZXcuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSFRNTEZy
YW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJHZW9tZXRyeU1hcC5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93VGhyZWFkLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU2VsZWN0aW9uSW5mby5oIgpAQCAtMTY3LDYgKzE2OCwyNyBAQCB2b2lkIFJlbmRlclZp
ZXc6Om1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250
YWluZXIsIGJvbwogICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKG1fZnJhbWVWaWV3LT5zY3Jv
bGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKCkpOwogfQogCitjb25zdCBSZW5kZXJPYmplY3QqIFJl
bmRlclZpZXc6OnB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJiBnZW9tZXRyeU1hcCkgY29u
c3QKK3sKKyAgICAvLyBJZiBhIGNvbnRhaW5lciB3YXMgc3BlY2lmaWVkLCBhbmQgd2FzIG5vdCAw
IG9yIHRoZSBSZW5kZXJWaWV3LAorICAgIC8vIHRoZW4gd2Ugc2hvdWxkIGhhdmUgZm91bmQgaXQg
Ynkgbm93LgorICAgIEFTU0VSVF9BUkcoYW5jZXN0b3JUb1N0b3BBdCwgIWFuY2VzdG9yVG9TdG9w
QXQgfHwgYW5jZXN0b3JUb1N0b3BBdCA9PSB0aGlzKTsKKworICAgIExheW91dFNpemUgc2Nyb2xs
T2Zmc2V0OworCisgICAgaWYgKG1fZnJhbWVWaWV3KQorICAgICAgICBzY3JvbGxPZmZzZXQgPSBt
X2ZyYW1lVmlldy0+c2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQb3NpdGlvbigpOworCisgICAgaWYgKCFh
bmNlc3RvclRvU3RvcEF0ICYmIHNob3VsZFVzZVRyYW5zZm9ybUZyb21Db250YWluZXIoMCkpIHsK
KyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdDsKKyAgICAgICAgZ2V0VHJhbnNmb3JtRnJv
bUNvbnRhaW5lcigwLCBMYXlvdXRTaXplKCksIHQpOworICAgICAgICBnZW9tZXRyeU1hcC5wdXNo
Vmlldyh0aGlzLCBzY3JvbGxPZmZzZXQsICZ0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZ2VvbWV0
cnlNYXAucHVzaFZpZXcodGhpcywgc2Nyb2xsT2Zmc2V0KTsKKworICAgIHJldHVybiAwOworfQor
CiB2b2lkIFJlbmRlclZpZXc6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50KGJvb2wgZml4ZWQsIGJv
b2wgdXNlVHJhbnNmb3JtcywgVHJhbnNmb3JtU3RhdGUmIHRyYW5zZm9ybVN0YXRlKSBjb25zdAog
ewogICAgIGlmIChmaXhlZCAmJiBtX2ZyYW1lVmlldykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlldy5oCmluZGV4IDRhYzA2MWY3MmUyZDE3YzRlNDk2YWU0MDFiZDM2OTE5YzQwNWE2MjYu
LmU2YTU3MjJkODU4MGRhNGE3NzE1MjIwNzRmNzgyNGZlNjJjYmMwN2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclZpZXcuaApAQCAtMTg4LDYgKzE4OCw3IEBAIHB1YmxpYzoKIAogcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1v
ZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIHVzZVRyYW5zZm9ybXMsIGJvb2wgZml4
ZWQsIFRyYW5zZm9ybVN0YXRlJiwgQXBwbHlDb250YWluZXJGbGlwT3JOb3QgPSBBcHBseUNvbnRh
aW5lckZsaXAsIGJvb2wqIHdhc0ZpeGVkID0gMCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBS
ZW5kZXJPYmplY3QqIHB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyQm94TW9kZWxP
YmplY3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJikgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIG1hcEFic29sdXRlVG9Mb2NhbFBvaW50KGJvb2wgZml4ZWQsIGJvb2wgdXNl
VHJhbnNmb3JtcywgVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcmVx
dWlyZXNDb2x1bW5zKGludCBkZXNpcmVkQ29sdW1uQ291bnQpIGNvbnN0IE9WRVJSSURFOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25P
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWdu
T2JqZWN0LmNwcAppbmRleCAyOTE4ZmUzYTk3ZTg0N2ZjZjUzMjA2ZGNhZTVjYzYyNDQ5M2ZiZjA2
Li4wNzQ5NDQwNjYyNGU1NTA0NDU1OWQ3MjlhNTFmMjQ0M2RhYmQ2MjhmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5j
cHAKQEAgLTE5Myw2ICsxOTMsMTEgQEAgdm9pZCBSZW5kZXJTVkdGb3JlaWduT2JqZWN0OjptYXBM
b2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q28KICAgICBTVkdS
ZW5kZXJTdXBwb3J0OjptYXBMb2NhbFRvQ29udGFpbmVyKHRoaXMsIHJlcGFpbnRDb250YWluZXIs
IHRyYW5zZm9ybVN0YXRlLCB3YXNGaXhlZCk7CiB9CiAKK2NvbnN0IFJlbmRlck9iamVjdCogUmVu
ZGVyU1ZHRm9yZWlnbk9iamVjdDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJC
b3hNb2RlbE9iamVjdCogYW5jZXN0b3JUb1N0b3BBdCwgUmVuZGVyR2VvbWV0cnlNYXAmIGdlb21l
dHJ5TWFwKSBjb25zdAoreworICAgIHJldHVybiBTVkdSZW5kZXJTdXBwb3J0OjpwdXNoTWFwcGlu
Z1RvQ29udGFpbmVyKHRoaXMsIGFuY2VzdG9yVG9TdG9wQXQsIGdlb21ldHJ5TWFwKTsKK30KKwog
fQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHRm9yZWlnbk9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdGb3JlaWduT2JqZWN0LmgKaW5kZXggNGExYThhYzI1ODZlZjM3MzY4MWZiNjJjYWZhZjJm
NTM4NDlkYzk1ZC4uOGZlMDg2NGMxOTljNGMxYjFmMDdiNmI3Yzk3OGExZTdlNjFjYzU3YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2Jq
ZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWdu
T2JqZWN0LmgKQEAgLTU1LDYgKzU1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1NW
R0ZvcmVpZ25PYmplY3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgbWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRh
aW5lciwgYm9vbCBmaXhlZCwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0ZSYsIEFw
cGx5Q29udGFpbmVyRmxpcE9yTm90ID0gQXBwbHlDb250YWluZXJGbGlwLCBib29sKiB3YXNGaXhl
ZCA9IDApIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0KiBwdXNoTWFwcGlu
Z1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBhbmNlc3RvclRvU3RvcEF0
LCBSZW5kZXJHZW9tZXRyeU1hcCYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1Ry
YW5zZm9ybVVwZGF0ZSgpIHsgbV9uZWVkc1RyYW5zZm9ybVVwZGF0ZSA9IHRydWU7IH0KIAogcHJp
dmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
SW5saW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5l
LmNwcAppbmRleCBiYjFhMzY3YWM1ZDVlNzliMTg1ODFmMzdhNDBlMjA1NGRhMDdlZTQzLi5iZjA5
OWFkMDNjNzAyY2NmMDk0NjIxOGU4N2Q2ZWYyZTNhYWMzMTEyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCkBAIC04NCw2ICs4NCwxMSBA
QCB2b2lkIFJlbmRlclNWR0lubGluZTo6bWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hNb2Rl
bE9iamVjdCogcmVwYWludENvbnRhaW5lcgogICAgIFNWR1JlbmRlclN1cHBvcnQ6Om1hcExvY2Fs
VG9Db250YWluZXIodGhpcywgcmVwYWludENvbnRhaW5lciwgdHJhbnNmb3JtU3RhdGUsIHdhc0Zp
eGVkKTsKIH0KIAorY29uc3QgUmVuZGVyT2JqZWN0KiBSZW5kZXJTVkdJbmxpbmU6OnB1c2hNYXBw
aW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9w
QXQsIFJlbmRlckdlb21ldHJ5TWFwJiBnZW9tZXRyeU1hcCkgY29uc3QKK3sKKyAgICByZXR1cm4g
U1ZHUmVuZGVyU3VwcG9ydDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lcih0aGlzLCBhbmNlc3RvclRv
U3RvcEF0LCBnZW9tZXRyeU1hcCk7Cit9CisKIHZvaWQgUmVuZGVyU1ZHSW5saW5lOjphYnNvbHV0
ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCogd2FzRml4ZWQpIGNvbnN0CiB7
CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSBSZW5kZXJTVkdUZXh0Ojpsb2NhdGVS
ZW5kZXJTVkdUZXh0QW5jZXN0b3IodGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdJbmxpbmUuaAppbmRleCAxNzIwNjIxOTZkOWM5ZDBiNmZlZGVhN2ZjNjc1
ODU4ZmVlOTEyNDdlLi4xZGM1YTJlZGFiMTk4YTlkN2IwNzk1NjVmNmFkZDBiMGQ3ZDBkMGU2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmgKQEAg
LTQ4LDYgKzQ4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjbGlwcGVkT3Zl
cmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
cikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVGbG9hdFJlY3RGb3JSZXBhaW50KFJl
bmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBGbG9hdFJlY3QmLCBib29sIGZp
eGVkID0gZmFsc2UpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVy
KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIHVzZVRyYW5zZm9y
bXMsIGJvb2wgZml4ZWQsIFRyYW5zZm9ybVN0YXRlJiwgQXBwbHlDb250YWluZXJGbGlwT3JOb3Qg
PSBBcHBseUNvbnRhaW5lckZsaXAsIGJvb2wqIHdhc0ZpeGVkID0gMCkgY29uc3Q7CisgICAgdmly
dHVhbCBjb25zdCBSZW5kZXJPYmplY3QqIHB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVu
ZGVyQm94TW9kZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJikg
Y29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4m
LCBib29sKiB3YXNGaXhlZCkgY29uc3Q7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCmluZGV4IDQ4ZmQ3
ZDg3OTI3NmJmNDM0ZWY0MDk1YjRiMGI2ZTVkMTEyMzI5M2IuLjI5MTI1OTFlNzk1MmViNTRhZjI0
NzUzMTllYjRjZDRlZGYwZmQyMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCkBAIC02MCw2ICs2MCwxMSBAQCB2b2lk
IFJlbmRlclNWR01vZGVsT2JqZWN0OjptYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVs
T2JqZWN0KiByZXBhaW50Q29udAogICAgIFNWR1JlbmRlclN1cHBvcnQ6Om1hcExvY2FsVG9Db250
YWluZXIodGhpcywgcmVwYWludENvbnRhaW5lciwgdHJhbnNmb3JtU3RhdGUsIHdhc0ZpeGVkKTsK
IH0KIAorY29uc3QgUmVuZGVyT2JqZWN0KiBSZW5kZXJTVkdNb2RlbE9iamVjdDo6cHVzaE1hcHBp
bmdUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogYW5jZXN0b3JUb1N0b3BB
dCwgUmVuZGVyR2VvbWV0cnlNYXAmIGdlb21ldHJ5TWFwKSBjb25zdAoreworICAgIHJldHVybiBT
VkdSZW5kZXJTdXBwb3J0OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKHRoaXMsIGFuY2VzdG9yVG9T
dG9wQXQsIGdlb21ldHJ5TWFwKTsKK30KKwogLy8gQ29waWVkIGZyb20gUmVuZGVyQm94LCB0aGlz
IG1ldGhvZCBsaWtlbHkgcmVxdWlyZXMgZnVydGhlciByZWZhY3RvcmluZyB0byB3b3JrIGVhc2ls
eSBmb3IgYm90aCBTVkcgYW5kIENTUyBCb3ggTW9kZWwgY29udGVudC4KIC8vIEZJWE1FOiBUaGlz
IG1heSBhbHNvIG5lZWQgdG8gbW92ZSBpbnRvIFNWR1JlbmRlclN1cHBvcnQgYXMgdGhlIFJlbmRl
ckJveCB2ZXJzaW9uIGRlcGVuZHMKIC8vIG9uIGJvcmRlckJvdW5kaW5nQm94KCkgd2hpY2ggU1ZH
IFJlbmRlckJveCBzdWJjbGFzZXMgKGxpa2UgU1ZHUmVuZGVyQmxvY2spIGRvIG5vdCBpbXBsZW1l
bnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01v
ZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVs
T2JqZWN0LmgKaW5kZXggYjk2OTJmZTFkZmNlYjYxYTdlYWNhMjFiY2ZkODc1MTNhYjc2ODFkNS4u
NTcxN2U5ODllNGQ4NDJkZWQ3YmEwNmYwOGYxY2JjYjc1Y2QyOTEyNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaApAQCAtNTks
NiArNTksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9y
PEZsb2F0UXVhZD4mLCBib29sKiB3YXNGaXhlZCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQg
bWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
ciwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBib29sIGZpeGVkLCBUcmFuc2Zvcm1TdGF0ZSYsIEFwcGx5
Q29udGFpbmVyRmxpcE9yTm90ID0gQXBwbHlDb250YWluZXJGbGlwLCBib29sKiB3YXNGaXhlZCA9
IDApIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0KiBwdXNoTWFwcGluZ1Rv
Q29udGFpbmVyKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBhbmNlc3RvclRvU3RvcEF0LCBS
ZW5kZXJHZW9tZXRyeU1hcCYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzdHlsZVdpbGxDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpOwogICAgIHZp
cnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTdHlsZSk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAppbmRleCA2
N2I4YTcxNGI5MDlmZjQzNWZjMTJiMGFlZDQ4YWVjNTk1YzYyODJjLi42NjE0NTZiM2NiZjBhYmMy
NGE0ZWI0M2U5N2UzY2QyZTNhZmJhOTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKQEAgLTM5MSw2ICszOTEsMTEgQEAgdm9pZCBSZW5kZXJT
VkdSb290OjptYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyLAogICAgIFJlbmRlclJlcGxhY2VkOjptYXBMb2NhbFRvQ29udGFpbmVyKHJlcGFp
bnRDb250YWluZXIsIGZpeGVkLCB1c2VUcmFuc2Zvcm1zLCB0cmFuc2Zvcm1TdGF0ZSwgQXBwbHlD
b250YWluZXJGbGlwLCB3YXNGaXhlZCk7CiB9CiAKK2NvbnN0IFJlbmRlck9iamVjdCogUmVuZGVy
U1ZHUm9vdDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVj
dCogYW5jZXN0b3JUb1N0b3BBdCwgUmVuZGVyR2VvbWV0cnlNYXAmIGdlb21ldHJ5TWFwKSBjb25z
dAoreworICAgIHJldHVybiBSZW5kZXJSZXBsYWNlZDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lcihh
bmNlc3RvclRvU3RvcEF0LCBnZW9tZXRyeU1hcCk7Cit9CisKIHZvaWQgUmVuZGVyU1ZHUm9vdDo6
dXBkYXRlQ2FjaGVkQm91bmRhcmllcygpCiB7CiAgICAgbV9vYmplY3RCb3VuZGluZ0JveCA9IEZs
b2F0UmVjdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSb290LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3Qu
aAppbmRleCBjMzM0YWZiZTZmYjI2NWE0NTc4OWViZTk4NzJhODYwYjg3NmJiOWM0Li4wNWIxZDIy
NjI3M2M5YTAzYWYyNjJlZjMxN2M4NzFjZDM2MGI3NjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaApAQCAtOTUsNiArOTUsOCBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlRmxvYXRSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2Rl
bE9iamVjdCogcmVwYWludENvbnRhaW5lciwgRmxvYXRSZWN0JiByZXBhaW50UmVjdCwgYm9vbCBm
aXhlZCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBi
b29sIGZpeGVkLCBUcmFuc2Zvcm1TdGF0ZSYsIEFwcGx5Q29udGFpbmVyRmxpcE9yTm90ID0gQXBw
bHlDb250YWluZXJGbGlwLCBib29sKiB3YXNGaXhlZCA9IDApIGNvbnN0OworICAgIHZpcnR1YWwg
Y29uc3QgUmVuZGVyT2JqZWN0KiBwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckJv
eE1vZGVsT2JqZWN0KiBhbmNlc3RvclRvU3RvcEF0LCBSZW5kZXJHZW9tZXRyeU1hcCYpIGNvbnN0
OworCiAgICAgdmlydHVhbCBib29sIGNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
VGV4dC5jcHAKaW5kZXggZDkxODQ1M2M1YWQ3YTg4NDQzMDMzNzQxZDU2ZmQyMmU3MTEyOTExOS4u
NjU4M2IyZjk4YWMwZTk1ZWIzNmI5YTBkOTVlNjRlZjc3MzQwMzdiZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCkBAIC0xMTUsNiArMTE1LDEx
IEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hNb2Rl
bE9iamVjdCogcmVwYWludENvbnRhaW5lciwKICAgICBTVkdSZW5kZXJTdXBwb3J0OjptYXBMb2Nh
bFRvQ29udGFpbmVyKHRoaXMsIHJlcGFpbnRDb250YWluZXIsIHRyYW5zZm9ybVN0YXRlLCB3YXNG
aXhlZCk7CiB9CiAKK2NvbnN0IFJlbmRlck9iamVjdCogUmVuZGVyU1ZHVGV4dDo6cHVzaE1hcHBp
bmdUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogYW5jZXN0b3JUb1N0b3BB
dCwgUmVuZGVyR2VvbWV0cnlNYXAmIGdlb21ldHJ5TWFwKSBjb25zdAoreworICAgIHJldHVybiBT
VkdSZW5kZXJTdXBwb3J0OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKHRoaXMsIGFuY2VzdG9yVG9T
dG9wQXQsIGdlb21ldHJ5TWFwKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGNvbGxlY3RMYXlv
dXRBdHRyaWJ1dGVzKFJlbmRlck9iamVjdCogdGV4dCwgVmVjdG9yPFNWR1RleHRMYXlvdXRBdHRy
aWJ1dGVzKj4mIGF0dHJpYnV0ZXMpCiB7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGRlc2NlbmRh
bnQgPSB0ZXh0OyBkZXNjZW5kYW50OyBkZXNjZW5kYW50ID0gZGVzY2VuZGFudC0+bmV4dEluUHJl
T3JkZXIodGV4dCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdU
ZXh0LmgKaW5kZXggNTY3MjNmNmMxMmI4ODdkMmNhZTgwN2RkY2VlNzkyMmMwODY0MDk5OC4uYWY5
NTBjMzQxODUzNTBjYjBiMGI4MTNjNGNiNjA0NjM5YWFjODEwNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgKQEAgLTc2LDYgKzc2LDcgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUZsb2F0UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEZsb2F0UmVjdCYsIGJvb2wgZml4ZWQgPSBm
YWxzZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBi
b29sIGZpeGVkLCBUcmFuc2Zvcm1TdGF0ZSYsIEFwcGx5Q29udGFpbmVyRmxpcE9yTm90ID0gQXBw
bHlDb250YWluZXJGbGlwLCBib29sKiB3YXNGaXhlZCA9IDApIGNvbnN0OworICAgIHZpcnR1YWwg
Y29uc3QgUmVuZGVyT2JqZWN0KiBwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckJv
eE1vZGVsT2JqZWN0KiBhbmNlc3RvclRvU3RvcEF0LCBSZW5kZXJHZW9tZXRyeU1hcCYpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNoaWxkKFJl
bmRlck9iamVjdCopIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVEZXN0cm95ZWQo
KSBPVkVSUklERTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyU3VwcG9ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRl
clN1cHBvcnQuY3BwCmluZGV4IGRkYzdjOTE1NTc5NDg4ZDAyMDUwYTUxNGZhYmI2NzExYzM4YTI5
ZmQuLjE3N2NlOWM0NDYwZDcwOTY4OGYxZjliYWMzZWUzZjk4YmU3YWZhMWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcApAQCAtMjgs
NiArMjgsNyBAQAogI2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKIAogI2luY2x1ZGUgIk5v
ZGVSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlJlbmRlckdlb21ldHJ5TWFwLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIgpAQCAtODUsNiArODYsMjMgQEAgdm9pZCBT
VkdSZW5kZXJTdXBwb3J0OjptYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCog
b2JqZWN0LCBSZW5kZXJCb3gKICAgICBwYXJlbnQtPm1hcExvY2FsVG9Db250YWluZXIocmVwYWlu
dENvbnRhaW5lciwgZmFsc2UsIHRydWUsIHRyYW5zZm9ybVN0YXRlLCBSZW5kZXJPYmplY3Q6OkRv
Tm90QXBwbHlDb250YWluZXJGbGlwLCB3YXNGaXhlZCk7CiB9CiAKK2NvbnN0IFJlbmRlck9iamVj
dCogU1ZHUmVuZGVyU3VwcG9ydDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJP
YmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9w
QXQsIFJlbmRlckdlb21ldHJ5TWFwJiBnZW9tZXRyeU1hcCkKK3sKKyAgICBBU1NFUlRfVU5VU0VE
KGFuY2VzdG9yVG9TdG9wQXQsIGFuY2VzdG9yVG9TdG9wQXQgIT0gb2JqZWN0KTsKKworICAgIFJl
bmRlck9iamVjdCogcGFyZW50ID0gb2JqZWN0LT5wYXJlbnQoKTsKKworICAgIC8vIEF0IHRoZSBT
VkcvSFRNTCBib3VuZGFyeSAoYWthIFJlbmRlclNWR1Jvb3QpLCB3ZSBhcHBseSB0aGUgbG9jYWxU
b0JvcmRlckJveFRyYW5zZm9ybSAKKyAgICAvLyB0byBtYXAgYW4gZWxlbWVudCBmcm9tIFNWRyB2
aWV3cG9ydCBjb29yZGluYXRlcyB0byBDU1MgYm94IGNvb3JkaW5hdGVzLgorICAgIC8vIFJlbmRl
clNWR1Jvb3QncyBtYXBMb2NhbFRvQ29udGFpbmVyIG1ldGhvZCBleHBlY3RzIENTUyBib3ggY29v
cmRpbmF0ZXMuCisgICAgaWYgKHBhcmVudC0+aXNTVkdSb290KCkpCisgICAgICAgIGdlb21ldHJ5
TWFwLnB1c2gob2JqZWN0LCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCh0b1JlbmRlclNWR1Jvb3QocGFy
ZW50KS0+bG9jYWxUb0JvcmRlckJveFRyYW5zZm9ybSgpKSk7CisgICAgZWxzZQorICAgICAgICBn
ZW9tZXRyeU1hcC5wdXNoKG9iamVjdCwgTGF5b3V0U2l6ZSgpKTsKKworICAgIHJldHVybiBwYXJl
bnQ7Cit9CisKIC8vIFVwZGF0ZSBhIGJvdW5kaW5nIGJveCB0YWtpbmcgaW50byBhY2NvdW50IHRo
ZSB2YWxpZGl0eSBvZiB0aGUgb3RoZXIgYm91bmRpbmcgYm94Lgogc3RhdGljIGlubGluZSB2b2lk
IHVwZGF0ZU9iamVjdEJvdW5kaW5nQm94KEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gsIGJv
b2wmIG9iamVjdEJvdW5kaW5nQm94VmFsaWQsIFJlbmRlck9iamVjdCogb3RoZXIsIEZsb2F0UmVj
dCBvdGhlckJvdW5kaW5nQm94KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlclN1cHBvcnQuaAppbmRleCBlMjViMTJmMDYwMWY4ODhkZDRkZTU4MzUzZTE4YmMw
MGIwMDRmYTYyLi5mYTk2MGYwNWU2OWUwMmExYTVlYmIxODIyMDY2MmZiN2E3NTc5MDgzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuaApAQCAt
MzQsNiArMzQsNyBAQCBjbGFzcyBGbG9hdFBvaW50OwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3Mg
SW1hZ2VCdWZmZXI7CiBjbGFzcyBSZW5kZXJCb3hNb2RlbE9iamVjdDsKK2NsYXNzIFJlbmRlckdl
b21ldHJ5TWFwOwogY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFz
cyBSZW5kZXJTVkdSb290OwpAQCAtNjQsNiArNjUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIExh
eW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoY29uc3QgUmVuZGVyT2JqZWN0
KiwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpOwogICAgIHN0YXRpYyB2
b2lkIGNvbXB1dGVGbG9hdFJlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlck9iamVjdCosIFJlbmRl
ckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBGbG9hdFJlY3QmLCBib29sIGZpeGVk
KTsKICAgICBzdGF0aWMgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVj
dCosIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBUcmFuc2Zvcm1TdGF0
ZSYsIGJvb2wqIHdhc0ZpeGVkID0gMCk7CisgICAgc3RhdGljIGNvbnN0IFJlbmRlck9iamVjdCog
cHVzaE1hcHBpbmdUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJC
b3hNb2RlbE9iamVjdCogYW5jZXN0b3JUb1N0b3BBdCwgUmVuZGVyR2VvbWV0cnlNYXAmKTsKIAog
ICAgIC8vIFNoYXJlZCBiZXR3ZWVuIFNWRyByZW5kZXJlcnMgYW5kIHJlc291cmNlcy4KICAgICBz
dGF0aWMgdm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143929</attachid>
            <date>2012-05-24 16:53:14 -0700</date>
            <delta_ts>2012-05-25 16:27:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84410-20120524165313.patch</filename>
            <type>text/plain</type>
            <size>77498</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4MDUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTBkMzQ5NjRlMDdiOWRi
ZjQ3YTU0ODM0YWY4N2RmMGRkNGZhNWFmMy4uNTNiNWM2OTg5Mzg4ZWNmMTFiMDUxZWQ5MTBlNTFl
ZTIwMWE3NTAzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEyMSBAQAogMjAxMi0wNS0yMiAgU2lt
b24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAorICAgICAgICBUZXJyaWJsZSBw
ZXJmb3JtYW5jZSBvbiBodHRwOi8vYWxsaWFuY2VzLmNvbW1hbmRhbmRjb25xdWVyLmNvbS8gYW5k
IGh0dHA6Ly93d3cubG9yZG9mdWx0aW1hLmNvbS8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg0NDEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBGaXJzdCBwYXJ0IG9mIGZpeGluZyBPKE5eMikg
aXNzdWVzIHdoZW4gd2Fsa2luZyB0aGUgUmVuZGVyTGF5ZXIgdHJlZQorICAgICAgICBmb3IgY29t
cHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKCkuCisgICAgICAgIAorICAgICAgICBGb3IgZWFj
aCBsYXllciB0aGF0IGdvZXMgaW50byB0aGUgT3ZlcmxhcE1hcCwgd2Ugd2VyZSBjb21wdXRpbmcg
YW4gYWJzb2x1dGUKKyAgICAgICAgbGF5ZXIgYm91bmRzLCB3aGljaCByZXF1aXJlcyB3YWxraW5n
IGJhY2sgdG8gdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCisgICAgICAgIE9wdGltaXplIHRoaXMgd2hl
biBwb3NzaWJsZSBieSBzdG9yaW5nIGEgc3RhY2sgb2Ygb2Zmc2V0cyBhcyB3ZSB3YWxrCisgICAg
ICAgIHRoZSB0cmVlLCBhbmQgdXNpbmcgdGhpcyBzdGFjayB0byBkbyB0aGUgbWFwcGluZy4KKyAg
ICAgICAgCisgICAgICAgIFRoZSBzdGFjayBvZiBvZmZzZXRzIGFuZCB0cmFuc2Zvcm1zIGlzIG1h
bmFnZWQgYnkgUmVuZGVyR2VvbWV0cnlNYXAuCisgICAgICAgIFdoZW4gdmlzaXRpbmcgYSBSZW5k
ZXJMYXllciwgUmVuZGVyTGF5ZXJDb21wb3NpdG9yIHB1c2hlcyBvbnRvCisgICAgICAgIHRoZSBn
ZW9tZXRyeSBtYXAgc3RhY2sgZGF0YSBhYm91dCBvZmZzZXRzIGFuZCB0cmFuc2Zvcm1zIGJldHdl
ZW4KKyAgICAgICAgdGhlIGN1cnJlbnQgbGF5ZXIgYW5kIGl0cyBzdGFja2luZy1wYXJlbnQuIFJl
bmRlckdlb21ldHJ5TWFwIGhhbmRsZXMKKyAgICAgICAgdGhlIGNhc2Ugd2hlcmUgdGhlIHByZXZp
b3VzIHJlbmRlcmVyIHB1c2hlZCBpcyBiZXR3ZWVuIHRoZSBjdXJyZW50CisgICAgICAgIHJlbmRl
cmVyIGFuZCBpdHMgY29udGFpbmVyLiBSZW5kZXJHZW9tZXRyeU1hcCBjYW4gYWxzbyBoYW5kbGUg
Y2FsbGVycworICAgICAgICBwdXNoaW5nIHJlbmRlcmVycyB3aXRoIG11bHRpcGxlIGNvbnRhaW5l
cnMgYmV0d2VlbiB0aGVtLgorICAgICAgICAKKyAgICAgICAgUmVuZGVyR2VvbWV0cnlNYXAgc3Rv
cmVzIHNvbWUgZmxhZ3MgYWJvdXQgd2hldGhlciB0aGUgc2V0IG9mIG1hcHBpbmcKKyAgICAgICAg
c3RlcHMgaW4gdGhlIHN0YWNrIGludm9sdmUgdHJhbnNmb3JtcywgZml4ZWQgcG9zaXRpb24sIG9y
IHNwZWNpYWwgbm9uLXVuaWZvcm0KKyAgICAgICAgbWFwcGluZ3MgbGlrZSBDU1MgY29sdW1ucy4g
SW4gc29tZSBjYXNlcywgaXQgZmFsbHMgYmFjayB0byBtYXBwaW5nIHZpYQorICAgICAgICByZW5k
ZXJlcnMuCisKKyAgICAgICAgT25jZSBjb25zdHJ1Y3RlZCwgdGhlIFJlbmRlckdlb21ldHJ5TWFw
IHN0YWNrIGNhbiBiZSB1c2VkIHRvIG1hcCBtdWx0aXBsZQorICAgICAgICByZWN0cyBvciBwb2lu
dHMgZWZmaWNpZW50bHkuIFN0YWNrcyBjb25zaXN0aW5nIG9mIHNpbXBsZSBvZmZzZXRzIGFyZQor
ICAgICAgICBjb2xsYXBzZWQgdG8gYSBzaW5nbGUgb2Zmc2V0LgorICAgICAgICAKKyAgICAgICAg
TWFwcGluZ3MgYmV0d2VlbiByZW5kZXJlcnMgYW5kIHRoZWlyIGNvbnRhaW5lcnMgYXJlIHB1c2hl
ZCBieSBwdXNoTWFwcGluZ1RvQ29udGFpbmVyKCkKKyAgICAgICAgbWV0aG9kcywgd2hpY2ggYXJl
IHNpbWlsYXIgdG8gbWFwTG9jYWxUb0NvbnRhaW5lcigpIG1ldGhvZHMuIEhhdmluZyB0aGlzIGNv
ZGUKKyAgICAgICAgaW4gUmVuZGVyT2JqZWN0cyB3YXMgZGVlbWVkIHByZWZlcmFibGUgdG8gaGFu
ZGxpbmcgY29sdW1ucywgdHJhbnNmb3JtcyBldGMuIGFsbCBpbgorICAgICAgICBSZW5kZXJMYXll
ciBjb2RlLgorCisgICAgICAgIFRlc3RlZCBieSBhc3NlcnRpb25zIGluIFJlbmRlckdlb21ldHJ5
TWFwIGNvZGUgdGhhdCBpdHMgbWFwcGluZyBtYXRjaGVzCisgICAgICAgIG1hcHBpbmcgdmlhIGxv
Y2FsVG9BYnNvbHV0ZSgpIGNhbGxzLgorICAgICAgICAKKyAgICAgICAgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjp1cGRhdGVDb21wb3NpdGluZ0xheWVycygpIGNyZWF0ZXMgYSBSZW5kZXJHZW9tZXRy
eU1hcCwKKyAgICAgICAgYW5kIHB1c2hlcyBhbmQgcG9wcyBsYXllciByZW5kZXJlcnMgYXMgaXQg
dmlzaXRzIHRoZW0uIFRoZSBnZW9tZXRyeSBtYXAgaXMgdXNlZAorICAgICAgICBieSBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmFkZFRvT3ZlcmxhcE1hcCgpIHdoZW4gY29tcHV0aW5nIGFic29sdXRl
IGxheWVyIGJvdW5kcy4KKyAgICAgICAgCisgICAgICAgIEZ1dGhlciBvcHRpbWl6YXRpb25zIGlu
IFJlbmRlckdlb21ldHJ5TWFwIGFyZSBwb3NzaWJsZSwgZXNwZWNpYWxseSB3aXRoIHN0YWNrcyB0
aGF0CisgICAgICAgIGhhdmUgbWFueSBvZmZzZXRzIGFuZCBhIGZldyB0cmFuc2Zvcm1zLgorCisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwdXNo
TWFwcGluZ1RvQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b2Zmc2V0
RnJvbUNvbnRhaW5lcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5jcHA6IEFkZGVkLgorICAgICAgICAoUmVu
ZGVyR2VvbWV0cnlNYXBTdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdlb21ldHJ5TWFw
U3RlcDo6UmVuZGVyR2VvbWV0cnlNYXBTdGVwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdl
b21ldHJ5TWFwU3RlcDo6bWFwUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR2VvbWV0
cnlNYXBTdGVwOjptYXBRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdlb21ldHJ5TWFw
OjpSZW5kZXJHZW9tZXRyeU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHZW9tZXRyeU1h
cDo6flJlbmRlckdlb21ldHJ5TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdlb21ldHJ5
TWFwOjphYnNvbHV0ZVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdlb21ldHJ5TWFw
OjphYnNvbHV0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR2VvbWV0cnlNYXA6Om1h
cFRvQWJzb2x1dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR2VvbWV0cnlNYXA6OnB1c2hN
YXBwaW5nc1RvQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR2VvbWV0cnlNYXA6
OnB1c2gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR2VvbWV0cnlNYXA6OnB1c2hWaWV3KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdlb21ldHJ5TWFwOjpwb3BNYXBwaW5nc1RvQW5jZXN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR2VvbWV0cnlNYXA6OnN0ZXBJbnNlcnRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHZW9tZXRyeU1hcDo6c3RlcFJlbW92ZWQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJHZW9tZXRyeU1hcC5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckdlb21ldHJ5TWFwOjpoYXNOb25Vbmlmb3JtU3RlcCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJHZW9tZXRyeU1hcDo6aGFzVHJhbnNmb3JtU3RlcCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJHZW9tZXRyeU1hcDo6aGFzRml4ZWRQb3NpdGlvblN0ZXApOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
SW5saW5lOjpvZmZzZXRGcm9tQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklu
bGluZTo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
cklubGluZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3Np
dGluZ0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFk
ZFRvT3ZlcmxhcE1hcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OmFkZFRvT3ZlcmxhcE1hcFJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oOgorICAgICAgICAoUmVuZGVyTGF5ZXJD
b21wb3NpdG9yKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om9mZnNldEZyb21Db250YWluZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpjb250YWluZXIpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6b2Zmc2V0RnJvbUNvbnRhaW5l
cik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oOgorICAgICAgICAoUmVu
ZGVyVGFibGVDZWxsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdGb3Jl
aWduT2JqZWN0OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaDoKKyAgICAgICAgKFJlbmRlclNWR0ZvcmVpZ25P
YmplY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0lubGluZTo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lcik6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNWR01vZGVsT2JqZWN0OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0Lmg6CisgICAgICAgIChSZW5kZXJT
VkdNb2RlbE9iamVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OnB1c2hNYXBwaW5nVG9Db250YWlu
ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdUZXh0OjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1RleHQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1
cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3VwcG9ydDo6cHVzaE1hcHBp
bmdUb0NvbnRhaW5lcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0
Lmg6CisKKzIwMTItMDUtMjIgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+
CisKICAgICAgICAgVXNlIHRoZSBzYW1lIGFuaW1hdGlvbiBiZWdpbiB0aW1lIHdoaWxlIHVwZGF0
aW5nIGNvbXBvc2l0aW5nIGxheWVycwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODcwODAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDQxMmI1NzEyZTJhMjBhZWIwMWMwZWJjODllODBl
ZGJhMmVkYTRjZmEuLmZkOGIwNDBiZTQyMzM5ZWJkNmMyNjcxMTE1NTNlMThlYTc2N2E2YWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTIzOSw2ICsyMzksOCBAQAogCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVy
U2VsZWN0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYxMUE1NEUwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAq
LzsgfTsKIAkJMEYxNURBOEEwRjNBQUVFNzAwMDBDRTQ3IC8qIEFuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjE1REE4OTBGM0FBRUU3MDAwMENFNDcgLyogQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCAq
LzsgfTsKIAkJMEYyOUMxNkUxMzAwQzJFMjAwMkQ3OTRFIC8qIEFjY2Vzc2liaWxpdHlBbGxJbk9u
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI5
QzE2RDEzMDBDMkUyMDAyRDc5NEUgLyogQWNjZXNzaWJpbGl0eUFsbEluT25lLmNwcCAqLzsgfTsK
KwkJMEYyQ0QzNjAxNTZDM0VBMDAwNEQ4N0JCIC8qIFJlbmRlckdlb21ldHJ5TWFwLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkNEMzVFMTU2QzNF
QTAwMDREODdCQiAvKiBSZW5kZXJHZW9tZXRyeU1hcC5jcHAgKi87IH07CisJCTBGMkNEMzYxMTU2
QzNFQTAwMDREODdCQiAvKiBSZW5kZXJHZW9tZXRyeU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQ0QzNUYxNTZDM0VBMDAwNEQ4N0JCIC8qIFJl
bmRlckdlb21ldHJ5TWFwLmggKi87IH07CiAJCTBGM0RENDRGMTJGNUVBMUIwMDBEOTE5MCAvKiBT
aGFkb3dCbHVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGM0RENDREMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNwcCAqLzsgfTsKIAkJ
MEYzREQ0NTAxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0RENDRFMTJGNUVBMUIwMDBEOTE5MCAv
KiBTaGFkb3dCbHVyLmggKi87IH07CiAJCTBGNEU1NzE3MTMxMzI3NjIwMENGODVBRiAvKiBSZW5k
ZXJTVkdBbGxJbk9uZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjRFNTcxNjEzMTMyNzYyMDBDRjg1QUYgLyogUmVuZGVyU1ZHQWxsSW5PbmUuY3Bw
ICovOyB9OwpAQCAtNzExOCw2ICs3MTIwLDggQEAKIAkJMEYxMUE1NEUwRjM5MjMzMTAwQzM3ODg0
IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyU2VsZWN0aW9uSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjE1REE4OTBGM0FBRUU3MDAwMENFNDcgLyogQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGUuaDsgcGF0aCA9IGFuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI5QzE2RDEzMDBDMkUyMDAyRDc5NEUgLyogQWNj
ZXNzaWJpbGl0eUFsbEluT25lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEFjY2Vzc2liaWxpdHlBbGxJbk9uZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMkNEMzVFMTU2QzNFQTAwMDREODdCQiAvKiBSZW5kZXJHZW9tZXRyeU1hcC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJHZW9tZXRyeU1hcC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkNEMzVGMTU2QzNFQTAwMDREODdCQiAv
KiBSZW5kZXJHZW9tZXRyeU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJHZW9tZXRyeU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNERDQ0
RDEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTaGFkb3dCbHVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYzREQ0NEUxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhZG93Qmx1ci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjRFNTcxNjEzMTMyNzYyMDBDRjg1QUYgLyogUmVuZGVyU1ZHQWxsSW5PbmUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHQWxsSW5P
bmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA4OTgsNiArMjA5MDIsOCBA
QAogCQkJCUE4NzFERUM5MEExNTMwQzcwMEIxMkE2OCAvKiBSZW5kZXJGcmFtZVNldC5oICovLAog
CQkJCUNERUE3QzgzMTI3NjIzMDQwMEI4NDZERCAvKiBSZW5kZXJGdWxsU2NyZWVuLmNwcCAqLywK
IAkJCQlDREVBN0M4MjEyNzYyMzA0MDBCODQ2REQgLyogUmVuZGVyRnVsbFNjcmVlbi5oICovLAor
CQkJCTBGMkNEMzVFMTU2QzNFQTAwMDREODdCQiAvKiBSZW5kZXJHZW9tZXRyeU1hcC5jcHAgKi8s
CisJCQkJMEYyQ0QzNUYxNTZDM0VBMDAwNEQ4N0JCIC8qIFJlbmRlckdlb21ldHJ5TWFwLmggKi8s
CiAJCQkJQkNFQTQ4MkEwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckhUTUxDYW52YXMuY3BwICov
LAogCQkJCUJDRUE0ODJCMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJIVE1MQ2FudmFzLmggKi8s
CiAJCQkJMEZEMzA4RDMxMTdEMTY4NDAwQTc5MUY3IC8qIFJlbmRlcklGcmFtZS5jcHAgKi8sCkBA
IC0yNDkxNyw2ICsyNDkyMyw3IEBACiAJCQkJMjlBMzA5QjExNTYxQ0FDNDAwQkJEOEU1IC8qIFZp
c2l0ZWRMaW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRCMDUyRTAxNTYxQTQyQzAwQjUwMEQ2
IC8qIEF1ZGlvU3VtbWluZ0p1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzE5NDE5NzE1
NjZCMzcyMDBBMjc2RDggLyogV2ViQ29yZU5TQ2VsbEV4dHJhcy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEYyQ0QzNjExNTZDM0VBMDAwNEQ4N0JCIC8qIFJlbmRlckdlb21ldHJ5TWFwLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKQEAgLTI3OTQzLDYgKzI3OTUwLDcgQEAKIAkJCQlGREIwNTJERjE1NjFBNDJDMDBC
NTAwRDYgLyogQXVkaW9TdW1taW5nSnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzcx
OTQxOTYxNTY2QjM3MjAwQTI3NkQ4IC8qIFdlYkNvcmVOU0NlbGxFeHRyYXMubSBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0NkNDMTE1MTU2OTg4RTQwMDEwOUUzNyAvKiBMZW5ndGhCb3guY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEYyQ0QzNjAxNTZDM0VBMDAwNEQ4N0JCIC8qIFJlbmRlckdlb21ldHJ5
TWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAppbmRleCAyYmE1MGFjMDE4ZjRhNzIzMGMwMjYxMTFiYTI0NTUyN2Q4NDk1YTlmLi42NTJhZWVk
ZDFmZDM0N2IwNWZlNjFiMTlkMzg3NzQzYWU3ZjI2ZmRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcApAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIlJlbmRlckJveFJl
Z2lvbkluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJGbGV4aWJsZUJveC5oIgogI2luY2x1ZGUgIlJl
bmRlckZsb3dUaHJlYWQuaCIKKyNpbmNsdWRlICJSZW5kZXJHZW9tZXRyeU1hcC5oIgogI2luY2x1
ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyUGFydC5oIgpAQCAtNTU3LDYgKzU1OCw3IEBAIHZvaWQgUmVuZGVyQm94Ojp1cGRhdGVM
YXllclRyYW5zZm9ybSgpCiAKIEludFJlY3QgUmVuZGVyQm94OjphYnNvbHV0ZUNvbnRlbnRCb3go
KSBjb25zdAogeworICAgIC8vIFRoaXMgaXMgd3Jvbmcgd2l0aCB0cmFuc2Zvcm1zIGFuZCBmbGlw
cGVkIHdyaXRpbmcgbW9kZXMuCiAgICAgSW50UmVjdCByZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVj
dChjb250ZW50Qm94UmVjdCgpKTsKICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNv
bHV0ZShGbG9hdFBvaW50KCkpOwogICAgIHJlY3QubW92ZShhYnNQb3MueCgpLCBhYnNQb3MueSgp
KTsKQEAgLTE0MzUsNiArMTQzNyw0NiBAQCB2b2lkIFJlbmRlckJveDo6bWFwTG9jYWxUb0NvbnRh
aW5lcihSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbAogICAgIG8t
Pm1hcExvY2FsVG9Db250YWluZXIocmVwYWludENvbnRhaW5lciwgZml4ZWQsIHVzZVRyYW5zZm9y
bXMsIHRyYW5zZm9ybVN0YXRlLCBEb05vdEFwcGx5Q29udGFpbmVyRmxpcCwgd2FzRml4ZWQpOwog
fQogCitjb25zdCBSZW5kZXJPYmplY3QqIFJlbmRlckJveDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5l
cihjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogYW5jZXN0b3JUb1N0b3BBdCwgUmVuZGVyR2Vv
bWV0cnlNYXAmIGdlb21ldHJ5TWFwKSBjb25zdAoreworICAgIEFTU0VSVChhbmNlc3RvclRvU3Rv
cEF0ICE9IHRoaXMpOworCisgICAgYm9vbCBhbmNlc3RvclNraXBwZWQ7CisgICAgUmVuZGVyT2Jq
ZWN0KiBjb250YWluZXIgPSB0aGlzLT5jb250YWluZXIoYW5jZXN0b3JUb1N0b3BBdCwgJmFuY2Vz
dG9yU2tpcHBlZCk7CisgICAgaWYgKCFjb250YWluZXIpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgYm9vbCBpc0ZpeGVkUG9zID0gc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9u
OworICAgIGJvb2wgaGFzVHJhbnNmb3JtID0gaGFzTGF5ZXIoKSAmJiBsYXllcigpLT50cmFuc2Zv
cm0oKTsKKworICAgIExheW91dFNpemUgYWRqdXN0bWVudEZvclNraXBwZWRBbmNlc3RvcjsKKyAg
ICBpZiAoYW5jZXN0b3JTa2lwcGVkKSB7CisgICAgICAgIC8vIFRoZXJlIGNhbid0IGJlIGEgdHJh
bnNmb3JtIGJldHdlZW4gcmVwYWludENvbnRhaW5lciBhbmQgbywgYmVjYXVzZSB0cmFuc2Zvcm1z
IGNyZWF0ZSBjb250YWluZXJzLCBzbyBpdCBzaG91bGQgYmUgc2FmZQorICAgICAgICAvLyB0byBq
dXN0IHN1YnRyYWN0IHRoZSBkZWx0YSBiZXR3ZWVuIHRoZSBhbmNlc3RvciBhbmQgby4KKyAgICAg
ICAgYWRqdXN0bWVudEZvclNraXBwZWRBbmNlc3RvciA9IC1hbmNlc3RvclRvU3RvcEF0LT5vZmZz
ZXRGcm9tQW5jZXN0b3JDb250YWluZXIoY29udGFpbmVyKTsKKyAgICB9CisKKyAgICBib29sIG9m
ZnNldERlcGVuZHNPblBvaW50ID0gZmFsc2U7CisgICAgTGF5b3V0U2l6ZSBjb250YWluZXJPZmZz
ZXQgPSBvZmZzZXRGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgTGF5b3V0UG9pbnQoKSwgJm9mZnNl
dERlcGVuZHNPblBvaW50KTsKKworICAgIGlmIChjb250YWluZXItPmlzUmVuZGVyRmxvd1RocmVh
ZCgpKQorICAgICAgICBvZmZzZXREZXBlbmRzT25Qb2ludCA9IHRydWU7CisgICAgCisgICAgYm9v
bCBwcmVzZXJ2ZTNEID0gY29udGFpbmVyLT5zdHlsZSgpLT5wcmVzZXJ2ZXMzRCgpIHx8IHN0eWxl
KCktPnByZXNlcnZlczNEKCk7CisgICAgaWYgKHNob3VsZFVzZVRyYW5zZm9ybUZyb21Db250YWlu
ZXIoY29udGFpbmVyKSkgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0OworICAgICAg
ICBnZXRUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgY29udGFpbmVyT2Zmc2V0LCB0
KTsKKyAgICAgICAgdC50cmFuc2xhdGVSaWdodChhZGp1c3RtZW50Rm9yU2tpcHBlZEFuY2VzdG9y
LndpZHRoKCksIGFkanVzdG1lbnRGb3JTa2lwcGVkQW5jZXN0b3IuaGVpZ2h0KCkpOworICAgICAg
ICAKKyAgICAgICAgZ2VvbWV0cnlNYXAucHVzaCh0aGlzLCB0LCBwcmVzZXJ2ZTNELCBvZmZzZXRE
ZXBlbmRzT25Qb2ludCwgaXNGaXhlZFBvcywgaGFzVHJhbnNmb3JtKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBjb250YWluZXJPZmZzZXQgKz0gYWRqdXN0bWVudEZvclNraXBwZWRBbmNlc3RvcjsK
KyAgICAgICAgZ2VvbWV0cnlNYXAucHVzaCh0aGlzLCBjb250YWluZXJPZmZzZXQsIHByZXNlcnZl
M0QsIG9mZnNldERlcGVuZHNPblBvaW50LCBpc0ZpeGVkUG9zLCBoYXNUcmFuc2Zvcm0pOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gYW5jZXN0b3JTa2lwcGVkID8gYW5jZXN0b3JUb1N0b3BBdCA6
IGNvbnRhaW5lcjsKK30KKwogdm9pZCBSZW5kZXJCb3g6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50
KGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcywgVHJhbnNmb3JtU3RhdGUmIHRyYW5zZm9y
bVN0YXRlKSBjb25zdAogewogICAgIC8vIFdlIGRvbid0IGV4cGVjdCBhYnNvbHV0ZVRvTG9jYWwo
KSB0byBiZSBjYWxsZWQgZHVyaW5nIGxheW91dCAoeWV0KQpAQCAtMTQ1Miw3ICsxNDk0LDcgQEAg
dm9pZCBSZW5kZXJCb3g6Om1hcEFic29sdXRlVG9Mb2NhbFBvaW50KGJvb2wgZml4ZWQsIGJvb2wg
dXNlVHJhbnNmb3JtcywgVHJhbnNmb3IKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdDo6bWFwQWJz
b2x1dGVUb0xvY2FsUG9pbnQoZml4ZWQsIHVzZVRyYW5zZm9ybXMsIHRyYW5zZm9ybVN0YXRlKTsK
IH0KIAotTGF5b3V0U2l6ZSBSZW5kZXJCb3g6Om9mZnNldEZyb21Db250YWluZXIoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0CitMYXlvdXRTaXplIFJlbmRl
ckJveDo6b2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IExheW91dFBv
aW50JiBwb2ludCwgYm9vbCogb2Zmc2V0RGVwZW5kc09uUG9pbnQpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKG8gPT0gY29udGFpbmVyKCkpOwogCkBAIC0xNDcwLDYgKzE1MTIsOSBAQCBMYXlvdXRTaXpl
IFJlbmRlckJveDo6b2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IExh
eW91dFBvaW50JiBwbwogICAgICAgICAgICAgb2Zmc2V0ID0gdG9MYXlvdXRTaXplKGJsb2NrLT5m
bGlwRm9yV3JpdGluZ01vZGVJbmNsdWRpbmdDb2x1bW5zKHRvTGF5b3V0UG9pbnQob2Zmc2V0KSkp
OwogICAgICAgICAgICAgby0+YWRqdXN0Rm9yQ29sdW1ucyhvZmZzZXQsIGNvbHVtblBvaW50KTsK
ICAgICAgICAgICAgIG9mZnNldCA9IGJsb2NrLT5mbGlwRm9yV3JpdGluZ01vZGUob2Zmc2V0KTsK
KworICAgICAgICAgICAgaWYgKG9mZnNldERlcGVuZHNPblBvaW50KQorICAgICAgICAgICAgICAg
ICpvZmZzZXREZXBlbmRzT25Qb2ludCA9IHRydWU7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgb2Zmc2V0ICs9IHRvcExlZnRMb2NhdGlvbk9mZnNldCgpOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guaAppbmRleCAwYjU2ZjNlNDg3NTNmYzk0MGQ2MjZiYzY3MzI3OTE5
NGU0NjY0ZmYxLi41ZTM1ZmY0NDY5ZjViZTI1ZDNiNTAwM2IzMjU0YjdkMjdkMDc4NzBlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCkBAIC0yNzIsNyArMjcyLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0T3ZlcnJpZGVXaWR0aChMYXlvdXRVbml0KTsKICAgICB2b2lkIGNsZWFy
T3ZlcnJpZGVTaXplKCk7CiAKLSAgICB2aXJ0dWFsIExheW91dFNpemUgb2Zmc2V0RnJvbUNvbnRh
aW5lcihSZW5kZXJPYmplY3QqLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1
YWwgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCosIGNvbnN0IExh
eW91dFBvaW50JiwgYm9vbCogb2Zmc2V0RGVwZW5kc09uUG9pbnQgPSAwKSBjb25zdDsKICAgICAK
ICAgICBMYXlvdXRVbml0IGNvbXB1dGVCb3JkZXJCb3hMb2dpY2FsV2lkdGgoTGF5b3V0VW5pdCB3
aWR0aCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBjb21wdXRlQm9yZGVyQm94TG9naWNhbEhlaWdo
dChMYXlvdXRVbml0IGhlaWdodCkgY29uc3Q7CkBAIC01MTUsNiArNTE1LDcgQEAgcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDb21wdXRlU2l6ZUFzUmVwbGFjZWQoKSBjb25zdCB7
IHJldHVybiBpc1JlcGxhY2VkKCkgJiYgIWlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCk7IH0K
IAogICAgIHZpcnR1YWwgdm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRy
YW5zZm9ybVN0YXRlJiwgQXBwbHlDb250YWluZXJGbGlwT3JOb3QgPSBBcHBseUNvbnRhaW5lckZs
aXAsIGJvb2wqIHdhc0ZpeGVkID0gMCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBSZW5kZXJP
YmplY3QqIHB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3Qq
LCBSZW5kZXJHZW9tZXRyeU1hcCYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBtYXBBYnNvbHV0
ZVRvTG9jYWxQb2ludChib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0
YXRlJikgY29uc3Q7CiAKICAgICB2b2lkIHBhaW50Um9vdEJveEZpbGxMYXllcnMoY29uc3QgUGFp
bnRJbmZvJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR2Vv
bWV0cnlNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdlb21ldHJ5TWFw
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xMWI1OGJlMDJkZDhkMTYyNTk0Yjg3Y2Q3YTk3MWMzMGY5MDZhYjll
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdlb21l
dHJ5TWFwLmNwcApAQCAtMCwwICsxLDI3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJSZW5kZXJHZW9tZXRyeU1hcC5oIgorCisjaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworCisvLyBTdG9yZXMgZGF0YSBhYm91dCBob3cgdG8gbWFwIGZyb20gb25lIHJlbmRlcmVyIHRv
IGl0cyBjb250YWluZXIuCitjbGFzcyBSZW5kZXJHZW9tZXRyeU1hcFN0ZXAgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFJlbmRlckdlb21ldHJ5TWFwU3RlcCk7CitwdWJsaWM6CisgICAgUmVu
ZGVyR2VvbWV0cnlNYXBTdGVwKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGJvb2wgYWNj
dW11bGF0aW5nVHJhbnNmb3JtLCBib29sIGlzTm9uVW5pZm9ybSwgYm9vbCBpc0ZpeGVkUG9zaXRp
b24sIGJvb2wgaGFzVHJhbnNmb3JtKQorICAgICAgICA6IG1fcmVuZGVyZXIocmVuZGVyZXIpCisg
ICAgICAgICwgbV9hY2N1bXVsYXRpbmdUcmFuc2Zvcm0oYWNjdW11bGF0aW5nVHJhbnNmb3JtKQor
ICAgICAgICAsIG1faXNOb25Vbmlmb3JtKGlzTm9uVW5pZm9ybSkKKyAgICAgICAgLCBtX2lzRml4
ZWRQb3NpdGlvbihpc0ZpeGVkUG9zaXRpb24pCisgICAgICAgICwgbV9oYXNUcmFuc2Zvcm0oaGFz
VHJhbnNmb3JtKQorICAgIHsKKyAgICB9CisgICAgICAgIAorICAgIEZsb2F0UG9pbnQgbWFwUG9p
bnQoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV90cmFu
c2Zvcm0pCisgICAgICAgICAgICByZXR1cm4gcCArIG1fb2Zmc2V0OworICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIG1fdHJhbnNmb3JtLT5tYXBQb2ludChwKTsKKyAgICB9CisgICAgCisgICAgRmxv
YXRRdWFkIG1hcFF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKCFtX3RyYW5zZm9ybSkgeworICAgICAgICAgICAgRmxvYXRRdWFkIHEgPSBxdWFkOwor
ICAgICAgICAgICAgcS5tb3ZlKG1fb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiBxOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV90cmFuc2Zvcm0tPm1hcFF1YWQocXVh
ZCk7CisgICAgfQorICAgIAorICAgIGNvbnN0IFJlbmRlck9iamVjdCogbV9yZW5kZXJlcjsKKyAg
ICBMYXlvdXRTaXplIG1fb2Zmc2V0OworICAgIE93blB0cjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD4g
bV90cmFuc2Zvcm07IC8vIEluY2x1ZGVzIG9mZnNldCBpZiBub24tbnVsbC4KKyAgICBib29sIG1f
YWNjdW11bGF0aW5nVHJhbnNmb3JtOworICAgIGJvb2wgbV9pc05vblVuaWZvcm07IC8vIE1hcHBp
bmcgZGVwZW5kcyBvbiB0aGUgaW5wdXQgcG9pbnQsIGUuZy4gYmVjYXVzZSBvZiBDU1MgY29sdW1u
cy4KKyAgICBib29sIG1faXNGaXhlZFBvc2l0aW9uOworICAgIGJvb2wgbV9oYXNUcmFuc2Zvcm07
Cit9OworCisKK1JlbmRlckdlb21ldHJ5TWFwOjpSZW5kZXJHZW9tZXRyeU1hcCgpCisgICAgOiBt
X2luc2VydGlvblBvc2l0aW9uKG5vdEZvdW5kKQorICAgICwgbV9ub25Vbmlmb3JtU3RlcHNDb3Vu
dCgwKQorICAgICwgbV90cmFuc2Zvcm1lZFN0ZXBzQ291bnQoMCkKKyAgICAsIG1fZml4ZWRTdGVw
c0NvdW50KDApCit7Cit9CisKK1JlbmRlckdlb21ldHJ5TWFwOjp+UmVuZGVyR2VvbWV0cnlNYXAo
KQoreworfQorCitGbG9hdFBvaW50IFJlbmRlckdlb21ldHJ5TWFwOjphYnNvbHV0ZVBvaW50KGNv
bnN0IEZsb2F0UG9pbnQmIHApIGNvbnN0Cit7CisgICAgRmxvYXRQb2ludCByZXN1bHQ7CisgICAg
CisgICAgaWYgKCFoYXNGaXhlZFBvc2l0aW9uU3RlcCgpICYmICFoYXNUcmFuc2Zvcm1TdGVwKCkg
JiYgIWhhc05vblVuaWZvcm1TdGVwKCkpCisgICAgICAgIHJlc3VsdCA9IHAgKyBtX2FjY3VtdWxh
dGVkT2Zmc2V0OworICAgIGVsc2UgeworICAgICAgICBUcmFuc2Zvcm1TdGF0ZSB0cmFuc2Zvcm1T
dGF0ZShUcmFuc2Zvcm1TdGF0ZTo6QXBwbHlUcmFuc2Zvcm1EaXJlY3Rpb24sIHApOworICAgICAg
ICBtYXBUb0Fic29sdXRlKHRyYW5zZm9ybVN0YXRlKTsKKyAgICAgICAgcmVzdWx0ID0gdHJhbnNm
b3JtU3RhdGUubGFzdFBsYW5hclBvaW50KCk7CisgICAgfQorCisjaWYgIUFTU0VSVF9ESVNBQkxF
RAorICAgIEZsb2F0UG9pbnQgcmVuZGVyZXJNYXBwZWRSZXN1bHQgPSBtX21hcHBpbmcubGFzdCgp
LT5tX3JlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUocCwgZmFsc2UsIHRydWUpOworICAgIEFTU0VS
VChyZW5kZXJlck1hcHBlZFJlc3VsdCA9PSByZXN1bHQpOworI2VuZGlmCisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitGbG9hdFJlY3QgUmVuZGVyR2VvbWV0cnlNYXA6OmFic29sdXRlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAg
ICAKKyAgICBpZiAoIWhhc0ZpeGVkUG9zaXRpb25TdGVwKCkgJiYgIWhhc1RyYW5zZm9ybVN0ZXAo
KSAmJiAhaGFzTm9uVW5pZm9ybVN0ZXAoKSkgeworICAgICAgICByZXN1bHQgPSByZWN0OworICAg
ICAgICByZXN1bHQubW92ZShtX2FjY3VtdWxhdGVkT2Zmc2V0KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBUcmFuc2Zvcm1TdGF0ZSB0cmFuc2Zvcm1TdGF0ZShUcmFuc2Zvcm1TdGF0ZTo6QXBwbHlU
cmFuc2Zvcm1EaXJlY3Rpb24sIHJlY3QpOworICAgICAgICBtYXBUb0Fic29sdXRlKHRyYW5zZm9y
bVN0YXRlKTsKKyAgICAgICAgcmVzdWx0ID0gdHJhbnNmb3JtU3RhdGUubGFzdFBsYW5hclF1YWQo
KS5ib3VuZGluZ0JveCgpOworICAgIH0KKworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBGbG9h
dFJlY3QgcmVuZGVyZXJNYXBwZWRSZXN1bHQgPSBtX21hcHBpbmcubGFzdCgpLT5tX3JlbmRlcmVy
LT5sb2NhbFRvQWJzb2x1dGVRdWFkKHJlY3QpLmJvdW5kaW5nQm94KCk7CisgICAgLy8gSW5zcGVj
dG9yIGNyZWF0ZXMgcmVuZGVyZXJzIHdpdGggbmVnYXRpdmUgd2lkdGggPGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzE5ND4uCisgICAgLy8gVGFraW5nIEZsb2F0UXVh
ZCBib3VuZHMgYXZvaWRzIHNwdXJpb3VzIGFzc2VydGlvbnMgYmVjYXVzZSBvZiB0aGF0LgorICAg
IEFTU0VSVChlbmNsb3NpbmdJbnRSZWN0KHJlbmRlcmVyTWFwcGVkUmVzdWx0KSA9PSBlbmNsb3Np
bmdJbnRSZWN0KEZsb2F0UXVhZChyZXN1bHQpLmJvdW5kaW5nQm94KCkpKTsKKyNlbmRpZgorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBSZW5kZXJHZW9tZXRyeU1hcDo6bWFwVG9BYnNv
bHV0ZShUcmFuc2Zvcm1TdGF0ZSYgdHJhbnNmb3JtU3RhdGUpIGNvbnN0Cit7CisgICAgLy8gSWYg
dGhlIG1hcHBpbmcgaW5jbHVkZXMgc29tZXRoaW5nIGxpa2UgY29sdW1ucywgd2UgaGF2ZSB0byBn
byB2aWEgcmVuZGVyZXJzLgorICAgIGlmIChoYXNOb25Vbmlmb3JtU3RlcCgpKSB7CisgICAgICAg
IGJvb2wgZml4ZWQgPSBmYWxzZTsKKyAgICAgICAgbV9tYXBwaW5nLmxhc3QoKS0+bV9yZW5kZXJl
ci0+bWFwTG9jYWxUb0NvbnRhaW5lcigwLCBmaXhlZCwgdHJ1ZSwgdHJhbnNmb3JtU3RhdGUsIFJl
bmRlck9iamVjdDo6QXBwbHlDb250YWluZXJGbGlwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBib29sIGluRml4ZWQgPSBmYWxzZTsKKworICAgIGZvciAoaW50IGkgPSBtX21h
cHBpbmcuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgY29uc3QgUmVuZGVyR2Vv
bWV0cnlNYXBTdGVwKiBjdXJyU3RlcCA9IG1fbWFwcGluZ1tpXS5nZXQoKTsKKworICAgICAgICBp
ZiAoY3VyclN0ZXAtPm1faGFzVHJhbnNmb3JtKSB7CisgICAgICAgICAgICAvLyBJZiB0aGlzIGJv
eCBoYXMgYSB0cmFuc2Zvcm0sIGl0IGFjdHMgYXMgYSBmaXhlZCBwb3NpdGlvbiBjb250YWluZXIg
Zm9yIGZpeGVkIGRlc2NlbmRhbnRzLAorICAgICAgICAgICAgLy8gYW5kIG1heSBpdHNlbGYgYWxz
byBiZSBmaXhlZCBwb3NpdGlvbi4gU28gcHJvcGFnYXRlICdmaXhlZCcgdXAgb25seSBpZiB0aGlz
IGJveCBpcyBmaXhlZCBwb3NpdGlvbi4KKyAgICAgICAgICAgIGluRml4ZWQgJj0gY3VyclN0ZXAt
Pm1faXNGaXhlZFBvc2l0aW9uOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGluRml4ZWQg
fD0gY3VyclN0ZXAtPm1faXNGaXhlZFBvc2l0aW9uOworCisgICAgICAgIGlmICghaSkgeworICAg
ICAgICAgICAgaWYgKGN1cnJTdGVwLT5tX3RyYW5zZm9ybSkKKyAgICAgICAgICAgICAgICB0cmFu
c2Zvcm1TdGF0ZS5hcHBseVRyYW5zZm9ybSgqY3VyclN0ZXAtPm1fdHJhbnNmb3JtLmdldCgpKTsK
KworICAgICAgICAgICAgLy8gVGhlIHJvb3QgZ2V0cyBzcGVjaWFsIHRyZWF0bWVudCBmb3IgZml4
ZWQgcG9zaXRpb24KKyAgICAgICAgICAgIGlmIChpbkZpeGVkKQorICAgICAgICAgICAgICAgIHRy
YW5zZm9ybVN0YXRlLm1vdmUoY3VyclN0ZXAtPm1fb2Zmc2V0LndpZHRoKCksIGN1cnJTdGVwLT5t
X29mZnNldC5oZWlnaHQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBUcmFuc2Zv
cm1TdGF0ZTo6VHJhbnNmb3JtQWNjdW11bGF0aW9uIGFjY3VtdWxhdGUgPSBjdXJyU3RlcC0+bV9h
Y2N1bXVsYXRpbmdUcmFuc2Zvcm0gPyBUcmFuc2Zvcm1TdGF0ZTo6QWNjdW11bGF0ZVRyYW5zZm9y
bSA6IFRyYW5zZm9ybVN0YXRlOjpGbGF0dGVuVHJhbnNmb3JtOworICAgICAgICAgICAgaWYgKGN1
cnJTdGVwLT5tX3RyYW5zZm9ybSkKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5hcHBs
eVRyYW5zZm9ybSgqY3VyclN0ZXAtPm1fdHJhbnNmb3JtLmdldCgpLCBhY2N1bXVsYXRlKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKGN1cnJT
dGVwLT5tX29mZnNldC53aWR0aCgpLCBjdXJyU3RlcC0+bV9vZmZzZXQuaGVpZ2h0KCksIGFjY3Vt
dWxhdGUpOworICAgICAgICB9CisgICAgfQorCisgICAgdHJhbnNmb3JtU3RhdGUuZmxhdHRlbigp
OyAgICAKK30KKwordm9pZCBSZW5kZXJHZW9tZXRyeU1hcDo6cHVzaE1hcHBpbmdzVG9BbmNlc3Rv
cihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVj
dCogYW5jZXN0b3IpCit7CisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBjdXJyUmVuZGVyZXIgPSBy
ZW5kZXJlcjsKKyAgICAKKyAgICAvLyBXZSBuZWVkIHRvIHB1c2ggbWFwcGluZ3MgaW4gcmV2ZXJz
ZSBvcmRlciBoZXJlLCBzbyBkbyBpbnNlcnRpb25zIHJhdGhlciB0aGFuIGFwcGVuZHMuCisgICAg
bV9pbnNlcnRpb25Qb3NpdGlvbiA9IG1fbWFwcGluZy5zaXplKCk7CisgICAgCisgICAgZG8gewor
ICAgICAgICBjdXJyUmVuZGVyZXIgPSBjdXJyUmVuZGVyZXItPnB1c2hNYXBwaW5nVG9Db250YWlu
ZXIoYW5jZXN0b3IsICp0aGlzKTsKKyAgICB9IHdoaWxlIChjdXJyUmVuZGVyZXIgJiYgY3VyclJl
bmRlcmVyICE9IGFuY2VzdG9yKTsKKyAgICAKKyAgICBtX2luc2VydGlvblBvc2l0aW9uID0gbm90
Rm91bmQ7Cit9CisKK3ZvaWQgUmVuZGVyR2VvbWV0cnlNYXA6OnB1c2goY29uc3QgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbUNvbnRhaW5lciwgYm9v
bCBhY2N1bXVsYXRpbmdUcmFuc2Zvcm0sIGJvb2wgaXNOb25Vbmlmb3JtLCBib29sIGlzRml4ZWRQ
b3NpdGlvbiwgYm9vbCBoYXNUcmFuc2Zvcm0pCit7CisgICAgQVNTRVJUKG1faW5zZXJ0aW9uUG9z
aXRpb24gIT0gbm90Rm91bmQpOworICAgIAorICAgIE93blB0cjxSZW5kZXJHZW9tZXRyeU1hcFN0
ZXA+IHN0ZXAgPSBhZG9wdFB0cihuZXcgUmVuZGVyR2VvbWV0cnlNYXBTdGVwKHJlbmRlcmVyLCBh
Y2N1bXVsYXRpbmdUcmFuc2Zvcm0sIGlzTm9uVW5pZm9ybSwgaXNGaXhlZFBvc2l0aW9uLCBoYXNU
cmFuc2Zvcm0pKTsKKyAgICBzdGVwLT5tX29mZnNldCA9IG9mZnNldEZyb21Db250YWluZXI7Cisg
ICAgCisgICAgc3RlcEluc2VydGVkKCpzdGVwLmdldCgpKTsKKyAgICBtX21hcHBpbmcuaW5zZXJ0
KG1faW5zZXJ0aW9uUG9zaXRpb24sIHN0ZXAucmVsZWFzZSgpKTsKK30KKwordm9pZCBSZW5kZXJH
ZW9tZXRyeU1hcDo6cHVzaChjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdCwgYm9vbCBhY2N1bXVsYXRpbmdUcmFuc2Zvcm0sIGJvb2wgaXNO
b25Vbmlmb3JtLCBib29sIGlzRml4ZWRQb3NpdGlvbiwgYm9vbCBoYXNUcmFuc2Zvcm0pCit7Cisg
ICAgQVNTRVJUKG1faW5zZXJ0aW9uUG9zaXRpb24gIT0gbm90Rm91bmQpOworCisgICAgT3duUHRy
PFJlbmRlckdlb21ldHJ5TWFwU3RlcD4gc3RlcCA9IGFkb3B0UHRyKG5ldyBSZW5kZXJHZW9tZXRy
eU1hcFN0ZXAocmVuZGVyZXIsIGFjY3VtdWxhdGluZ1RyYW5zZm9ybSwgaXNOb25Vbmlmb3JtLCBp
c0ZpeGVkUG9zaXRpb24sIGhhc1RyYW5zZm9ybSkpOworICAgIHN0ZXAtPm1fdHJhbnNmb3JtID0g
YWRvcHRQdHIobmV3IFRyYW5zZm9ybWF0aW9uTWF0cml4KHQpKTsKKworICAgIHN0ZXBJbnNlcnRl
ZCgqc3RlcC5nZXQoKSk7CisgICAgbV9tYXBwaW5nLmluc2VydChtX2luc2VydGlvblBvc2l0aW9u
LCBzdGVwLnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgUmVuZGVyR2VvbWV0cnlNYXA6OnB1c2hWaWV3
KGNvbnN0IFJlbmRlclZpZXcqIHZpZXcsIGNvbnN0IExheW91dFNpemUmIHNjcm9sbE9mZnNldCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgqIHQpCit7CisgICAgQVNTRVJUKG1faW5zZXJ0aW9u
UG9zaXRpb24gIT0gbm90Rm91bmQpOworCisgICAgT3duUHRyPFJlbmRlckdlb21ldHJ5TWFwU3Rl
cD4gc3RlcCA9IGFkb3B0UHRyKG5ldyBSZW5kZXJHZW9tZXRyeU1hcFN0ZXAodmlldywgZmFsc2Us
IGZhbHNlLCBmYWxzZSwgdCkpOworICAgIHN0ZXAtPm1fb2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0Owor
ICAgIGlmICh0KQorICAgICAgICBzdGVwLT5tX3RyYW5zZm9ybSA9IGFkb3B0UHRyKG5ldyBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgqdCkpOworICAgICAgICAKKyAgICBBU1NFUlQoIW1fbWFwcGluZy5z
aXplKCkpOyAvLyBUaGUgdmlldyBzaG91bGQgYWx3YXlzIGJlIHRoZSBmaXJzdCB0aGluZyBwdXNo
ZWQuCisgICAgc3RlcEluc2VydGVkKCpzdGVwLmdldCgpKTsKKyAgICBtX21hcHBpbmcuaW5zZXJ0
KG1faW5zZXJ0aW9uUG9zaXRpb24sIHN0ZXAucmVsZWFzZSgpKTsKK30KKwordm9pZCBSZW5kZXJH
ZW9tZXRyeU1hcDo6cG9wTWFwcGluZ3NUb0FuY2VzdG9yKGNvbnN0IFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiBhbmNlc3RvcikKK3sKKyAgICBBU1NFUlQobV9tYXBwaW5nLnNpemUoKSk7CisKKyAgICB3
aGlsZSAobV9tYXBwaW5nLnNpemUoKSAmJiBtX21hcHBpbmcubGFzdCgpLT5tX3JlbmRlcmVyICE9
IGFuY2VzdG9yKSB7CisgICAgICAgIHN0ZXBSZW1vdmVkKCptX21hcHBpbmcubGFzdCgpLmdldCgp
KTsKKyAgICAgICAgbV9tYXBwaW5nLnJlbW92ZUxhc3QoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVu
ZGVyR2VvbWV0cnlNYXA6OnN0ZXBJbnNlcnRlZChjb25zdCBSZW5kZXJHZW9tZXRyeU1hcFN0ZXAm
IHN0ZXApCit7CisgICAgLy8gT2Zmc2V0IG9uIHRoZSBmaXJzdCBzdGVwIGlzIHRoZSBSZW5kZXJW
aWV3J3Mgb2Zmc2V0LCB3aGljaCBpcyBvbmx5IGFwcGxpZWQgd2hlbiB3ZSBoYXZlIGZpeGVkLXBv
c2l0aW9uLnMKKyAgICBpZiAobV9tYXBwaW5nLnNpemUoKSkKKyAgICAgICAgbV9hY2N1bXVsYXRl
ZE9mZnNldCArPSBzdGVwLm1fb2Zmc2V0OworCisgICAgaWYgKHN0ZXAubV9pc05vblVuaWZvcm0p
CisgICAgICAgICsrbV9ub25Vbmlmb3JtU3RlcHNDb3VudDsKKworICAgIGlmIChzdGVwLm1fdHJh
bnNmb3JtKQorICAgICAgICArK21fdHJhbnNmb3JtZWRTdGVwc0NvdW50OworICAgIAorICAgIGlm
IChzdGVwLm1faXNGaXhlZFBvc2l0aW9uKQorICAgICAgICArK21fZml4ZWRTdGVwc0NvdW50Owor
fQorCit2b2lkIFJlbmRlckdlb21ldHJ5TWFwOjpzdGVwUmVtb3ZlZChjb25zdCBSZW5kZXJHZW9t
ZXRyeU1hcFN0ZXAmIHN0ZXApCit7CisgICAgLy8gT2Zmc2V0IG9uIHRoZSBmaXJzdCBzdGVwIGlz
IHRoZSBSZW5kZXJWaWV3J3Mgb2Zmc2V0LCB3aGljaCBpcyBvbmx5IGFwcGxpZWQgd2hlbiB3ZSBo
YXZlIGZpeGVkLXBvc2l0aW9uLnMKKyAgICBpZiAobV9tYXBwaW5nLnNpemUoKSA+IDEpCisgICAg
ICAgIG1fYWNjdW11bGF0ZWRPZmZzZXQgLT0gc3RlcC5tX29mZnNldDsKKworICAgIGlmIChzdGVw
Lm1faXNOb25Vbmlmb3JtKSB7CisgICAgICAgIEFTU0VSVChtX25vblVuaWZvcm1TdGVwc0NvdW50
KTsKKyAgICAgICAgLS1tX25vblVuaWZvcm1TdGVwc0NvdW50OworICAgIH0KKworICAgIGlmIChz
dGVwLm1fdHJhbnNmb3JtKSB7CisgICAgICAgIEFTU0VSVChtX3RyYW5zZm9ybWVkU3RlcHNDb3Vu
dCk7CisgICAgICAgIC0tbV90cmFuc2Zvcm1lZFN0ZXBzQ291bnQ7CisgICAgfQorCisgICAgaWYg
KHN0ZXAubV9pc0ZpeGVkUG9zaXRpb24pIHsKKyAgICAgICAgQVNTRVJUKG1fZml4ZWRTdGVwc0Nv
dW50KTsKKyAgICAgICAgLS1tX2ZpeGVkU3RlcHNDb3VudDsKKyAgICB9Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJHZW9tZXRyeU1hcC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdlb21ldHJ5
TWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNmE2MTIwMzMzNGVmODcwNzg0ODNkYjVhZDI5YjljOTgwNTYyNmU5
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHZW9t
ZXRyeU1hcC5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFJlbmRlckdlb21l
dHJ5TWFwX2gKKyNkZWZpbmUgUmVuZGVyR2VvbWV0cnlNYXBfaAorCisjaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNp
bmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
IgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBSZW5kZXJHZW9tZXRyeU1hcFN0ZXA7CisKKy8vIENhbiBiZSB1c2VkIHdoaWxlIHdhbGtpbmcg
dGhlIFJlbmRlcmVyIHRyZWUgdG8gY2FjaGUgZGF0YSBhYm91dCBvZmZzZXRzIGFuZCB0cmFuc2Zv
cm1zLgorY2xhc3MgUmVuZGVyR2VvbWV0cnlNYXAgeworcHVibGljOgorICAgIFJlbmRlckdlb21l
dHJ5TWFwKCk7CisgICAgflJlbmRlckdlb21ldHJ5TWFwKCk7CisKKyAgICBGbG9hdFBvaW50IGFi
c29sdXRlUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAgIEZsb2F0UmVjdCBhYnNv
bHV0ZVJlY3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisgICAgCisgICAgLy8gQ2FsbGVkIGJ5
IGNvZGUgd2Fsa2luZyB0aGUgcmVuZGVyZXIgb3IgbGF5ZXIgdHJlZXMuCisgICAgdm9pZCBwdXNo
TWFwcGluZ3NUb0FuY2VzdG9yKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlckJveE1v
ZGVsT2JqZWN0KiBhbmNlc3Rvcik7CisgICAgdm9pZCBwb3BNYXBwaW5nc1RvQW5jZXN0b3IoY29u
c3QgUmVuZGVyQm94TW9kZWxPYmplY3QqKTsKKyAgICAKKyAgICAvLyBUaGUgZm9sbG93aW5nIG1l
dGhvZHMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHJlbmRlcmVycyBpbnNpZGUgYSBjYWxsIHRv
IHB1c2hNYXBwaW5nc1RvQW5jZXN0b3IoKS4KKworICAgIC8vIFB1c2ggZ2VvbWV0cnkgaW5mbyBi
ZXR3ZWVuIHRoaXMgcmVuZGVyZXIgYW5kIHNvbWUgYW5jZXN0b3IuIFRoZSBhbmNlc3RvciBtdXN0
IGJlIGl0cyBjb250YWluZXIoKSBvciBzb21lCisgICAgLy8gc3RhY2tpbmcgY29udGV4dCBiZXR3
ZWVuIHRoZSByZW5kZXJlciBhbmQgaXRzIGNvbnRhaW5lci4KKyAgICB2b2lkIHB1c2goY29uc3Qg
UmVuZGVyT2JqZWN0KiwgY29uc3QgTGF5b3V0U2l6ZSYsIGJvb2wgYWNjdW11bGF0aW5nVHJhbnNm
b3JtID0gZmFsc2UsIGJvb2wgaXNOb25Vbmlmb3JtID0gZmFsc2UsIGJvb2wgaXNGaXhlZFBvc2l0
aW9uID0gZmFsc2UsIGJvb2wgaGFzVHJhbnNmb3JtID0gZmFsc2UpOworICAgIHZvaWQgcHVzaChj
b25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGJvb2wgYWNj
dW11bGF0aW5nVHJhbnNmb3JtID0gZmFsc2UsIGJvb2wgaXNOb25Vbmlmb3JtID0gZmFsc2UsIGJv
b2wgaXNGaXhlZFBvc2l0aW9uID0gZmFsc2UsIGJvb2wgaGFzVHJhbnNmb3JtID0gZmFsc2UpOwor
CisgICAgLy8gUmVuZGVyVmlldyBnZXRzIHNwZWNpYWwgdHJlYXRtZW50LCBiZWNhdXNlIGl0IGFw
cGxpZXMgdGhlIHNjcm9sbCBvZmZzZXQgb25seSBmb3IgZWxlbWVudHMgaW5zaWRlIGluIGZpeGVk
IHBvc2l0aW9uLgorICAgIHZvaWQgcHVzaFZpZXcoY29uc3QgUmVuZGVyVmlldyosIGNvbnN0IExh
eW91dFNpemUmIHNjcm9sbE9mZnNldCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgqID0gMCk7
CisKK3ByaXZhdGU6CisgICAgdm9pZCBtYXBUb0Fic29sdXRlKFRyYW5zZm9ybVN0YXRlJikgY29u
c3Q7CisKKyAgICB2b2lkIHN0ZXBJbnNlcnRlZChjb25zdCBSZW5kZXJHZW9tZXRyeU1hcFN0ZXAm
KTsKKyAgICB2b2lkIHN0ZXBSZW1vdmVkKGNvbnN0IFJlbmRlckdlb21ldHJ5TWFwU3RlcCYpOwor
ICAgIAorICAgIGJvb2wgaGFzTm9uVW5pZm9ybVN0ZXAoKSBjb25zdCB7IHJldHVybiBtX25vblVu
aWZvcm1TdGVwc0NvdW50OyB9CisgICAgYm9vbCBoYXNUcmFuc2Zvcm1TdGVwKCkgY29uc3QgeyBy
ZXR1cm4gbV90cmFuc2Zvcm1lZFN0ZXBzQ291bnQ7IH0KKyAgICBib29sIGhhc0ZpeGVkUG9zaXRp
b25TdGVwKCkgY29uc3QgeyByZXR1cm4gbV9maXhlZFN0ZXBzQ291bnQ7IH0KKyAgICAKKyAgICB0
eXBlZGVmIFZlY3RvcjxPd25QdHI8UmVuZGVyR2VvbWV0cnlNYXBTdGVwPiA+IFJlbmRlckdlb21l
dHJ5TWFwU3RlcHM7IC8vIEZJWE1FOiBpbmxpbmUgY2FwYWNpdHk/CisgICAgCisgICAgc2l6ZV90
IG1faW5zZXJ0aW9uUG9zaXRpb247CisgICAgaW50IG1fbm9uVW5pZm9ybVN0ZXBzQ291bnQ7Cisg
ICAgaW50IG1fdHJhbnNmb3JtZWRTdGVwc0NvdW50OworICAgIGludCBtX2ZpeGVkU3RlcHNDb3Vu
dDsKKyAgICBSZW5kZXJHZW9tZXRyeU1hcFN0ZXBzIG1fbWFwcGluZzsKKyAgICBMYXlvdXRTaXpl
IG1fYWNjdW11bGF0ZWRPZmZzZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBSZW5kZXJHZW9tZXRyeU1hcF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuY3BwCmluZGV4IGY3NDUyYTRiOTVlNjYwZGQwYjllYTVmNDBmYWE3ZWI2ZGI0MGJj
ODQuLjM2NWQ3YzY5ZWYxZjI2MjczNTEyZDQwYWQ2MjY3OTk4NDY3MDZlMmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5j
bHVkZSAiUmVuZGVyQXJlbmEuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUg
IlJlbmRlckZsb3dUaHJlYWQuaCIKKyNpbmNsdWRlICJSZW5kZXJHZW9tZXRyeU1hcC5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCkBAIC0xMDY1LDcgKzEwNjYsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6
Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyLAogICAgIG8tPmNvbXB1dGVSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyLCByZWN0
LCBmaXhlZCk7CiB9CiAKLUxheW91dFNpemUgUmVuZGVySW5saW5lOjpvZmZzZXRGcm9tQ29udGFp
bmVyKFJlbmRlck9iamVjdCogY29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpIGNv
bnN0CitMYXlvdXRTaXplIFJlbmRlcklubGluZTo6b2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5kZXJP
YmplY3QqIGNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50LCBib29sKiBvZmZzZXRE
ZXBlbmRzT25Qb2ludCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29udGFpbmVyID09IHRoaXMtPmNv
bnRhaW5lcigpKTsKICAgICAKQEAgLTEwNzgsNiArMTA3OSw5IEBAIExheW91dFNpemUgUmVuZGVy
SW5saW5lOjpvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCogY29udGFpbmVyLCBjb25z
dCBMYXlvCiAgICAgaWYgKGNvbnRhaW5lci0+aGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIG9m
ZnNldCAtPSB0b1JlbmRlckJveChjb250YWluZXIpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsK
IAorICAgIGlmIChvZmZzZXREZXBlbmRzT25Qb2ludCkKKyAgICAgICAgKm9mZnNldERlcGVuZHNP
blBvaW50ID0gY29udGFpbmVyLT5oYXNDb2x1bW5zKCk7CisKICAgICByZXR1cm4gb2Zmc2V0Owog
fQogCkBAIC0xMTI5LDYgKzExMzMsNDMgQEAgdm9pZCBSZW5kZXJJbmxpbmU6Om1hcExvY2FsVG9D
b250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGIKICAgICBv
LT5tYXBMb2NhbFRvQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIGZpeGVkLCB1c2VUcmFuc2Zv
cm1zLCB0cmFuc2Zvcm1TdGF0ZSwgYXBwbHlDb250YWluZXJGbGlwLCB3YXNGaXhlZCk7CiB9CiAK
K2NvbnN0IFJlbmRlck9iamVjdCogUmVuZGVySW5saW5lOjpwdXNoTWFwcGluZ1RvQ29udGFpbmVy
KGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBhbmNlc3RvclRvU3RvcEF0LCBSZW5kZXJHZW9t
ZXRyeU1hcCYgZ2VvbWV0cnlNYXApIGNvbnN0Cit7CisgICAgQVNTRVJUKGFuY2VzdG9yVG9TdG9w
QXQgIT0gdGhpcyk7CisKKyAgICBib29sIGFuY2VzdG9yU2tpcHBlZDsKKyAgICBSZW5kZXJPYmpl
Y3QqIGNvbnRhaW5lciA9IHRoaXMtPmNvbnRhaW5lcihhbmNlc3RvclRvU3RvcEF0LCAmYW5jZXN0
b3JTa2lwcGVkKTsKKyAgICBpZiAoIWNvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBib29sIG9mZnNldERlcGVuZHNPblBvaW50ID0gZmFsc2U7CisKKyAgICBpZiAoY29udGFpbmVy
LT5pc0JveCgpICYmIGNvbnRhaW5lci0+c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01v
ZGUoKSkKKyAgICAgICAgb2Zmc2V0RGVwZW5kc09uUG9pbnQgPSB0cnVlOworCisgICAgTGF5b3V0
U2l6ZSBhZGp1c3RtZW50Rm9yU2tpcHBlZEFuY2VzdG9yOworICAgIGlmIChhbmNlc3RvclNraXBw
ZWQpIHsKKyAgICAgICAgLy8gVGhlcmUgY2FuJ3QgYmUgYSB0cmFuc2Zvcm0gYmV0d2VlbiByZXBh
aW50Q29udGFpbmVyIGFuZCBvLCBiZWNhdXNlIHRyYW5zZm9ybXMgY3JlYXRlIGNvbnRhaW5lcnMs
IHNvIGl0IHNob3VsZCBiZSBzYWZlCisgICAgICAgIC8vIHRvIGp1c3Qgc3VidHJhY3QgdGhlIGRl
bHRhIGJldHdlZW4gdGhlIGFuY2VzdG9yIGFuZCBvLgorICAgICAgICBhZGp1c3RtZW50Rm9yU2tp
cHBlZEFuY2VzdG9yID0gLWFuY2VzdG9yVG9TdG9wQXQtPm9mZnNldEZyb21BbmNlc3RvckNvbnRh
aW5lcihjb250YWluZXIpOworICAgIH0KKworICAgIExheW91dFNpemUgY29udGFpbmVyT2Zmc2V0
ID0gb2Zmc2V0RnJvbUNvbnRhaW5lcihjb250YWluZXIsIExheW91dFBvaW50KCksICZvZmZzZXRE
ZXBlbmRzT25Qb2ludCk7CisKKyAgICBib29sIHByZXNlcnZlM0QgPSBjb250YWluZXItPnN0eWxl
KCktPnByZXNlcnZlczNEKCkgfHwgc3R5bGUoKS0+cHJlc2VydmVzM0QoKTsKKyAgICBpZiAoc2hv
dWxkVXNlVHJhbnNmb3JtRnJvbUNvbnRhaW5lcihjb250YWluZXIpKSB7CisgICAgICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHQ7CisgICAgICAgIGdldFRyYW5zZm9ybUZyb21Db250YWluZXIoY29u
dGFpbmVyLCBjb250YWluZXJPZmZzZXQsIHQpOworICAgICAgICB0LnRyYW5zbGF0ZVJpZ2h0KGFk
anVzdG1lbnRGb3JTa2lwcGVkQW5jZXN0b3Iud2lkdGgoKSwgYWRqdXN0bWVudEZvclNraXBwZWRB
bmNlc3Rvci5oZWlnaHQoKSk7IC8vIEZJWE1FOiByaWdodD8KKyAgICAgICAgZ2VvbWV0cnlNYXAu
cHVzaCh0aGlzLCB0LCBwcmVzZXJ2ZTNELCBvZmZzZXREZXBlbmRzT25Qb2ludCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgY29udGFpbmVyT2Zmc2V0ICs9IGFkanVzdG1lbnRGb3JTa2lwcGVkQW5j
ZXN0b3I7CisgICAgICAgIGdlb21ldHJ5TWFwLnB1c2godGhpcywgY29udGFpbmVyT2Zmc2V0LCBw
cmVzZXJ2ZTNELCBvZmZzZXREZXBlbmRzT25Qb2ludCk7CisgICAgfQorICAgIAorICAgIHJldHVy
biBhbmNlc3RvclNraXBwZWQgPyBhbmNlc3RvclRvU3RvcEF0IDogY29udGFpbmVyOworfQorCiB2
b2lkIFJlbmRlcklubGluZTo6dXBkYXRlRHJhZ1N0YXRlKGJvb2wgZHJhZ09uKQogewogICAgIFJl
bmRlckJveE1vZGVsT2JqZWN0Ojp1cGRhdGVEcmFnU3RhdGUoZHJhZ09uKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAppbmRleCAyMzYzZjBiMGE1N2MyYjYxZmI1ODczN2Iy
Nzk3YzZjMTZlNGVhMmQxLi40MTg3ZjMxODcxZTg3ZmMxMDE4MWIzOWMwNDRmNzhkMjU1ODU0Mzli
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCkBAIC00OSw3ICs0OSw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVj
dD4mLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0OwogICAgIHZp
cnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCogd2FzRml4
ZWQpIGNvbnN0OwogCi0gICAgdmlydHVhbCBMYXlvdXRTaXplIG9mZnNldEZyb21Db250YWluZXIo
UmVuZGVyT2JqZWN0KiwgY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIExh
eW91dFNpemUgb2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5kZXJPYmplY3QqLCBjb25zdCBMYXlvdXRQ
b2ludCYsIGJvb2wqIG9mZnNldERlcGVuZHNPblBvaW50ID0gMCkgY29uc3Q7CiAKICAgICBJbnRS
ZWN0IGxpbmVzQm91bmRpbmdCb3goKSBjb25zdDsKICAgICBMYXlvdXRSZWN0IGxpbmVzVmlzdWFs
T3ZlcmZsb3dCb3VuZGluZ0JveCgpIGNvbnN0OwpAQCAtMTM0LDYgKzEzNCw3IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lciwgTGF5b3V0UmVjdCYsIGJvb2wgZml4ZWQpIGNvbnN0Owog
CiAgICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcywgVHJh
bnNmb3JtU3RhdGUmLCBBcHBseUNvbnRhaW5lckZsaXBPck5vdCA9IEFwcGx5Q29udGFpbmVyRmxp
cCwgYm9vbCogd2FzRml4ZWQgPSAwKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9i
amVjdCogcHVzaE1hcHBpbmdUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCog
YW5jZXN0b3JUb1N0b3BBdCwgUmVuZGVyR2VvbWV0cnlNYXAmKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcAppbmRleCBjNDAyYjU5M2QwZGYwMzFlYWZlYjVlNmI1ODQ2YTU1ODUxNDVhMWE2Li5hNjNm
Mzk4YjVkNmZiMjkxZjc4OTA4MjMyNTYyOGY0YTI5YTMxMGFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtNDUsNiArNDUs
NyBAQAogI2luY2x1ZGUgIlJlbmRlckFwcGxldC5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVk
T2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgorI2luY2x1ZGUgIlJlbmRl
ckdlb21ldHJ5TWFwLmgiCiAjaW5jbHVkZSAiUmVuZGVySUZyYW1lLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVwbGljYS5oIgpAQCAtNTQsNiAr
NTUsNyBAQAogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmcuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1T
dGF0ZS5oIgogCiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCiAjaW5jbHVkZSAi
SFRNTE1lZGlhRWxlbWVudC5oIgpAQCAtMzk4LDkgKzQwMCwxMCBAQCB2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBl
IHVwZGF0ZQogICAgICAgICBib29sIGxheWVyc0NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgaWYg
KG1fY29tcG9zaXRpbmdDb25zdWx0c092ZXJsYXApIHsKICAgICAgICAgICAgIE92ZXJsYXBNYXAg
b3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOwotICAgICAgICAgICAgY29tcHV0ZUNvbXBvc2l0aW5nUmVx
dWlyZW1lbnRzKHVwZGF0ZVJvb3QsICZvdmVybGFwVGVzdFJlcXVlc3RNYXAsIGNvbXBTdGF0ZSwg
bGF5ZXJzQ2hhbmdlZCk7CisgICAgICAgICAgICBSZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1h
cDsKKyAgICAgICAgICAgIGNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cygwLCB1cGRhdGVS
b290LCAmZ2VvbWV0cnlNYXAsICZvdmVybGFwVGVzdFJlcXVlc3RNYXAsIGNvbXBTdGF0ZSwgbGF5
ZXJzQ2hhbmdlZCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY29tcHV0ZUNvbXBvc2l0
aW5nUmVxdWlyZW1lbnRzKHVwZGF0ZVJvb3QsIDAsIGNvbXBTdGF0ZSwgbGF5ZXJzQ2hhbmdlZCk7
CisgICAgICAgICAgICBjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMoMCwgdXBkYXRlUm9v
dCwgMCwgMCwgY29tcFN0YXRlLCBsYXllcnNDaGFuZ2VkKTsKICAgICAgICAgCiAgICAgICAgIG5l
ZWRIaWVyYXJjaHlVcGRhdGUgfD0gbGF5ZXJzQ2hhbmdlZDsKICAgICB9CkBAIC02MjQsMTMgKzYy
NywxMyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjplbmNsb3NpbmdOb25T
dGFja2luZ0NsaXBwaW5nTGF5ZXIoY29uc3QgUmVuZAogICAgIHJldHVybiAwOwogfQogCi12b2lk
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVG9PdmVybGFwTWFwKE92ZXJsYXBNYXAmIG92ZXJs
YXBNYXAsIFJlbmRlckxheWVyKiBsYXllciwgSW50UmVjdCYgbGF5ZXJCb3VuZHMsIGJvb2wmIGJv
dW5kc0NvbXB1dGVkKQordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkZFRvT3ZlcmxhcE1h
cChSZW5kZXJHZW9tZXRyeU1hcCYgZ2VvbWV0cnlNYXAsIE92ZXJsYXBNYXAmIG92ZXJsYXBNYXAs
IFJlbmRlckxheWVyKiBsYXllciwgSW50UmVjdCYgbGF5ZXJCb3VuZHMsIGJvb2wmIGJvdW5kc0Nv
bXB1dGVkKQogewogICAgIGlmIChsYXllci0+aXNSb290TGF5ZXIoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKCFib3VuZHNDb21wdXRlZCkgewotICAgICAgICBsYXllckJvdW5kcyA9IGxh
eWVyLT5yZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChsYXllci0+bG9j
YWxCb3VuZGluZ0JveCgpKSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgbGF5ZXJC
b3VuZHMgPSBlbmNsb3NpbmdJbnRSZWN0KGdlb21ldHJ5TWFwLmFic29sdXRlUmVjdChsYXllci0+
bG9jYWxCb3VuZGluZ0JveCgpKSk7CiAgICAgICAgIC8vIEVtcHR5IHJlY3RzIG5ldmVyIGludGVy
c2VjdCwgYnV0IHdlIG5lZWQgdGhlbSB0byBmb3IgdGhlIHB1cnBvc2VzIG9mIG92ZXJsYXAgdGVz
dGluZy4KICAgICAgICAgaWYgKGxheWVyQm91bmRzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGxh
eWVyQm91bmRzLnNldFNpemUoSW50U2l6ZSgxLCAxKSk7CkBAIC02NDMsMTQgKzY0NiwxOCBAQCB2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVG9PdmVybGFwTWFwKE92ZXJsYXBNYXAmIG92
ZXJsYXBNYXAsIFJlbmRlckxheWVyKgogICAgIG92ZXJsYXBNYXAuYWRkKGxheWVyLCBjbGlwUmVj
dCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphZGRUb092ZXJsYXBNYXBSZWN1
cnNpdmUoT3ZlcmxhcE1hcCYgb3ZlcmxhcE1hcCwgUmVuZGVyTGF5ZXIqIGxheWVyKQordm9pZCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkZFRvT3ZlcmxhcE1hcFJlY3Vyc2l2ZShSZW5kZXJHZW9t
ZXRyeU1hcCYgZ2VvbWV0cnlNYXAsIE92ZXJsYXBNYXAmIG92ZXJsYXBNYXAsIFJlbmRlckxheWVy
KiBsYXllciwgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIpCiB7CiAgICAgaWYgKCFjYW5CZUNv
bXBvc2l0ZWQobGF5ZXIpIHx8IG92ZXJsYXBNYXAuY29udGFpbnMobGF5ZXIpKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICAvLyBBIG51bGwgYW5jZXN0b3JMYXllciBpcyBhbiBpbmRpY2F0aW9uIHRo
YXQgJ2xheWVyJyBoYXMgYWxyZWFkeSBiZWVuIHB1c2hlZC4KKyAgICBpZiAoYW5jZXN0b3JMYXll
cikKKyAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNlc3RvcihsYXllci0+cmVu
ZGVyZXIoKSwgYW5jZXN0b3JMYXllci0+cmVuZGVyZXIoKSk7CisgICAgCiAgICAgSW50UmVjdCBi
b3VuZHM7CiAgICAgYm9vbCBoYXZlQ29tcHV0ZWRCb3VuZHMgPSBmYWxzZTsKLSAgICBhZGRUb092
ZXJsYXBNYXAob3ZlcmxhcE1hcCwgbGF5ZXIsIGJvdW5kcywgaGF2ZUNvbXB1dGVkQm91bmRzKTsK
KyAgICBhZGRUb092ZXJsYXBNYXAoZ2VvbWV0cnlNYXAsIG92ZXJsYXBNYXAsIGxheWVyLCBib3Vu
ZHMsIGhhdmVDb21wdXRlZEJvdW5kcyk7CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgTGF5
ZXJMaXN0TXV0YXRpb25EZXRlY3RvciBtdXRhdGlvbkNoZWNrZXIobGF5ZXIpOwpAQCAtNjYxLDcg
KzY2OCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphZGRUb092ZXJsYXBNYXBSZWN1
cnNpdmUoT3ZlcmxhcE1hcCYgb3ZlcmxhcE1hcCwgUmVuCiAgICAgICAgICAgICBzaXplX3QgbGlz
dFNpemUgPSBuZWdaT3JkZXJMaXN0LT5zaXplKCk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKICAgICAgICAgICAgICAgICBSZW5kZXJMYXllciog
Y3VyTGF5ZXIgPSBuZWdaT3JkZXJMaXN0LT5hdChpKTsKLSAgICAgICAgICAgICAgICBhZGRUb092
ZXJsYXBNYXBSZWN1cnNpdmUob3ZlcmxhcE1hcCwgY3VyTGF5ZXIpOworICAgICAgICAgICAgICAg
IGFkZFRvT3ZlcmxhcE1hcFJlY3Vyc2l2ZShnZW9tZXRyeU1hcCwgb3ZlcmxhcE1hcCwgY3VyTGF5
ZXIsIGxheWVyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTY3MCw3ICs2
NzcsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVG9PdmVybGFwTWFwUmVjdXJz
aXZlKE92ZXJsYXBNYXAmIG92ZXJsYXBNYXAsIFJlbgogICAgICAgICBzaXplX3QgbGlzdFNpemUg
PSBub3JtYWxGbG93TGlzdC0+c2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxpc3RTaXplOyArK2kpIHsKICAgICAgICAgICAgIFJlbmRlckxheWVyKiBjdXJMYXllciA9IG5v
cm1hbEZsb3dMaXN0LT5hdChpKTsKLSAgICAgICAgICAgIGFkZFRvT3ZlcmxhcE1hcFJlY3Vyc2l2
ZShvdmVybGFwTWFwLCBjdXJMYXllcik7CisgICAgICAgICAgICBhZGRUb092ZXJsYXBNYXBSZWN1
cnNpdmUoZ2VvbWV0cnlNYXAsIG92ZXJsYXBNYXAsIGN1ckxheWVyLCBsYXllcik7CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTY3OSwxMCArNjg2LDEzIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjphZGRUb092ZXJsYXBNYXBSZWN1cnNpdmUoT3ZlcmxhcE1hcCYgb3ZlcmxhcE1hcCwgUmVu
CiAgICAgICAgICAgICBzaXplX3QgbGlzdFNpemUgPSBwb3NaT3JkZXJMaXN0LT5zaXplKCk7CiAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKICAgICAg
ICAgICAgICAgICBSZW5kZXJMYXllciogY3VyTGF5ZXIgPSBwb3NaT3JkZXJMaXN0LT5hdChpKTsK
LSAgICAgICAgICAgICAgICBhZGRUb092ZXJsYXBNYXBSZWN1cnNpdmUob3ZlcmxhcE1hcCwgY3Vy
TGF5ZXIpOworICAgICAgICAgICAgICAgIGFkZFRvT3ZlcmxhcE1hcFJlY3Vyc2l2ZShnZW9tZXRy
eU1hcCwgb3ZlcmxhcE1hcCwgY3VyTGF5ZXIsIGxheWVyKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KKyAgICAKKyAgICBpZiAoYW5jZXN0b3JMYXllcikKKyAgICAgICAgZ2VvbWV0
cnlNYXAucG9wTWFwcGluZ3NUb0FuY2VzdG9yKGFuY2VzdG9yTGF5ZXItPnJlbmRlcmVyKCkpOwog
fQogCiAvLyAgUmVjdXJzZSB0aHJvdWdoIHRoZSBsYXllcnMgaW4gei1pbmRleCBhbmQgb3ZlcmZs
b3cgb3JkZXIgKHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gcGFpbnRpbmcgb3JkZXIpCkBAIC02OTQs
MTEgKzcwNCwxNSBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVG9PdmVybGFwTWFw
UmVjdXJzaXZlKE92ZXJsYXBNYXAmIG92ZXJsYXBNYXAsIFJlbgogLy8gICAgICBtdXN0IGJlIGNv
bXBvc2l0aW5nIHNvIHRoYXQgaXRzIGNvbnRlbnRzIHJlbmRlciBvdmVyIHRoYXQgY2hpbGQuCiAv
LyAgICAgIFRoaXMgaW1wbGllcyB0aGF0IGl0cyBwb3NpdGl2ZSB6LWluZGV4IGNoaWxkcmVuIG11
c3QgYWxzbyBiZSBjb21wb3NpdGluZy4KIC8vCi12b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKFJlbmRlckxheWVyKiBsYXllciwgT3Zlcmxh
cE1hcCogb3ZlcmxhcE1hcCwgQ29tcG9zaXRpbmdTdGF0ZSYgY29tcG9zaXRpbmdTdGF0ZSwgYm9v
bCYgbGF5ZXJzQ2hhbmdlZCkKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29t
cG9zaXRpbmdSZXF1aXJlbWVudHMoUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIFJlbmRlckxh
eWVyKiBsYXllciwgUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPdmVybGFwTWFwKiBv
dmVybGFwTWFwLCBDb21wb3NpdGluZ1N0YXRlJiBjb21wb3NpdGluZ1N0YXRlLCBib29sJiBsYXll
cnNDaGFuZ2VkKQogewogICAgIGxheWVyLT51cGRhdGVMYXllclBvc2l0aW9uKCk7CiAgICAgbGF5
ZXItPnVwZGF0ZUxheWVyTGlzdHNJZk5lZWRlZCgpOwotCisgICAgCisgICAgLy8gU2hvdWxkIGdl
b21ldHJ5TWFwIGJlIHBhcnQgb2YgdGhlIG92ZXJsYXAgbWFwPworICAgIGlmIChnZW9tZXRyeU1h
cCkKKyAgICAgICAgZ2VvbWV0cnlNYXAtPnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IobGF5ZXItPnJl
bmRlcmVyKCksIGFuY2VzdG9yTGF5ZXIgPyBhbmNlc3RvckxheWVyLT5yZW5kZXJlcigpIDogMCk7
CisgICAgCiAgICAgLy8gQ2xlYXIgdGhlIGZsYWcKICAgICBsYXllci0+c2V0SGFzQ29tcG9zaXRp
bmdEZXNjZW5kYW50KGZhbHNlKTsKICAgICAKQEAgLTcwOCw3ICs3MjIsOCBAQCB2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKFJlbmRlckxh
eWVyKiBsYXllciwgTwogICAgIEludFJlY3QgYWJzQm91bmRzOwogICAgIGlmIChvdmVybGFwTWFw
ICYmICFvdmVybGFwTWFwLT5pc0VtcHR5KCkgJiYgY29tcG9zaXRpbmdTdGF0ZS5tX3Rlc3RpbmdP
dmVybGFwKSB7CiAgICAgICAgIC8vIElmIHdlJ3JlIHRlc3RpbmcgZm9yIG92ZXJsYXAsIHdlIG9u
bHkgbmVlZCB0byBjb21wb3NpdGUgaWYgd2Ugb3ZlcmxhcCBzb21ldGhpbmcgdGhhdCBpcyBhbHJl
YWR5IGNvbXBvc2l0ZWQuCi0gICAgICAgIGFic0JvdW5kcyA9IGxheWVyLT5yZW5kZXJlcigpLT5s
b2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChsYXllci0+bG9jYWxCb3VuZGluZ0JveCgpKSku
ZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgYWJzQm91bmRzID0gZW5jbG9zaW5nSW50
UmVjdChnZW9tZXRyeU1hcC0+YWJzb2x1dGVSZWN0KGxheWVyLT5sb2NhbEJvdW5kaW5nQm94KCkp
KTsKKwogICAgICAgICAvLyBFbXB0eSByZWN0cyBuZXZlciBpbnRlcnNlY3QsIGJ1dCB3ZSBuZWVk
IHRoZW0gdG8gZm9yIHRoZSBwdXJwb3NlcyBvZiBvdmVybGFwIHRlc3RpbmcuCiAgICAgICAgIGlm
IChhYnNCb3VuZHMuaXNFbXB0eSgpKQogICAgICAgICAgICAgYWJzQm91bmRzLnNldFNpemUoSW50
U2l6ZSgxLCAxKSk7CkBAIC03NTcsNyArNzcyLDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhSZW5kZXJMYXllciogbGF5ZXIsIE8K
ICAgICAgICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9IG5lZ1pPcmRlckxpc3QtPnNpemUoKTsKICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsraSkgewogICAgICAg
ICAgICAgICAgIFJlbmRlckxheWVyKiBjdXJMYXllciA9IG5lZ1pPcmRlckxpc3QtPmF0KGkpOwot
ICAgICAgICAgICAgICAgIGNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhjdXJMYXllciwg
b3ZlcmxhcE1hcCwgY2hpbGRTdGF0ZSwgbGF5ZXJzQ2hhbmdlZCk7CisgICAgICAgICAgICAgICAg
Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKGxheWVyLCBjdXJMYXllciwgZ2VvbWV0cnlN
YXAsIG92ZXJsYXBNYXAsIGNoaWxkU3RhdGUsIGxheWVyc0NoYW5nZWQpOwogCiAgICAgICAgICAg
ICAgICAgLy8gSWYgd2UgaGF2ZSB0byBtYWtlIGEgbGF5ZXIgZm9yIHRoaXMgY2hpbGQsIG1ha2Ug
b25lIG5vdyBzbyB3ZSBjYW4gaGF2ZSBhIGNvbnRlbnRzIGxheWVyCiAgICAgICAgICAgICAgICAg
Ly8gKHNpbmNlIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIC12ZSB6LW9yZGVyIGNoaWxkIHJl
bmRlcnMgdW5kZXJuZWF0aCBvdXIgY29udGVudHMpLgpAQCAtNzc3LDcgKzc5Miw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMoUmVu
ZGVyTGF5ZXIqIGxheWVyLCBPCiAgICAgICAgIHNpemVfdCBsaXN0U2l6ZSA9IG5vcm1hbEZsb3dM
aXN0LT5zaXplKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdFNpemU7ICsr
aSkgewogICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGN1ckxheWVyID0gbm9ybWFsRmxvd0xpc3Qt
PmF0KGkpOwotICAgICAgICAgICAgY29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKGN1ckxh
eWVyLCBvdmVybGFwTWFwLCBjaGlsZFN0YXRlLCBsYXllcnNDaGFuZ2VkKTsKKyAgICAgICAgICAg
IGNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhsYXllciwgY3VyTGF5ZXIsIGdlb21ldHJ5
TWFwLCBvdmVybGFwTWFwLCBjaGlsZFN0YXRlLCBsYXllcnNDaGFuZ2VkKTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtNzg2LDcgKzgwMSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpj
b21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMoUmVuZGVyTGF5ZXIqIGxheWVyLCBPCiAgICAg
ICAgICAgICBzaXplX3QgbGlzdFNpemUgPSBwb3NaT3JkZXJMaXN0LT5zaXplKCk7CiAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKICAgICAgICAgICAg
ICAgICBSZW5kZXJMYXllciogY3VyTGF5ZXIgPSBwb3NaT3JkZXJMaXN0LT5hdChpKTsKLSAgICAg
ICAgICAgICAgICBjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMoY3VyTGF5ZXIsIG92ZXJs
YXBNYXAsIGNoaWxkU3RhdGUsIGxheWVyc0NoYW5nZWQpOworICAgICAgICAgICAgICAgIGNvbXB1
dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhsYXllciwgY3VyTGF5ZXIsIGdlb21ldHJ5TWFwLCBv
dmVybGFwTWFwLCBjaGlsZFN0YXRlLCBsYXllcnNDaGFuZ2VkKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KQEAgLTgwMyw3ICs4MTgsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKFJlbmRlckxheWVyKiBsYXllciwg
TwogICAgIC8vIHRoZSBvdmVybGFwIG1hcC4gTGF5ZXJzIHRoYXQgZG8gbm90IGNvbXBvc2l0ZSB3
aWxsIGRyYXcgaW50byB0aGVpcgogICAgIC8vIGNvbXBvc2l0aW5nIGFuY2VzdG9yJ3MgYmFja2lu
ZywgYW5kIHNvIGFyZSBzdGlsbCBjb25zaWRlcmVkIGZvciBvdmVybGFwLgogICAgIGlmIChvdmVy
bGFwTWFwICYmIGNoaWxkU3RhdGUubV9jb21wb3NpdGluZ0FuY2VzdG9yICYmICFjaGlsZFN0YXRl
Lm1fY29tcG9zaXRpbmdBbmNlc3Rvci0+aXNSb290TGF5ZXIoKSkKLSAgICAgICAgYWRkVG9PdmVy
bGFwTWFwKCpvdmVybGFwTWFwLCBsYXllciwgYWJzQm91bmRzLCBoYXZlQ29tcHV0ZWRCb3VuZHMp
OworICAgICAgICBhZGRUb092ZXJsYXBNYXAoKmdlb21ldHJ5TWFwLCAqb3ZlcmxhcE1hcCwgbGF5
ZXIsIGFic0JvdW5kcywgaGF2ZUNvbXB1dGVkQm91bmRzKTsKIAogICAgIC8vIElmIHdlIGhhdmUg
YSBzb2Z0d2FyZSB0cmFuc2Zvcm0sIGFuZCB3ZSBoYXZlIGxheWVycyB1bmRlciB1cywgd2UgbmVl
ZCB0byBhbHNvCiAgICAgLy8gYmUgY29tcG9zaXRlZC4gQWxzbywgaWYgd2UgaGF2ZSBvcGFjaXR5
IDwgMSwgdGhlbiB3ZSBuZWVkIHRvIGJlIGEgbGF5ZXIgc28gdGhhdApAQCAtODEzLDcgKzgyOCw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJl
bWVudHMoUmVuZGVyTGF5ZXIqIGxheWVyLCBPCiAgICAgICAgIGNoaWxkU3RhdGUubV9jb21wb3Np
dGluZ0FuY2VzdG9yID0gbGF5ZXI7CiAgICAgICAgIGlmIChvdmVybGFwTWFwKSB7CiAgICAgICAg
ICAgICBvdmVybGFwTWFwLT5wdXNoQ29tcG9zaXRpbmdDb250YWluZXIoKTsKLSAgICAgICAgICAg
IGFkZFRvT3ZlcmxhcE1hcFJlY3Vyc2l2ZSgqb3ZlcmxhcE1hcCwgbGF5ZXIpOworICAgICAgICAg
ICAgYWRkVG9PdmVybGFwTWFwUmVjdXJzaXZlKCpnZW9tZXRyeU1hcCwgKm92ZXJsYXBNYXAsIGxh
eWVyKTsKICAgICAgICAgfQogICAgICAgICB3aWxsQmVDb21wb3NpdGVkID0gdHJ1ZTsKICAgICB9
CkBAIC04NDIsNyArODU3LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVD
b21wb3NpdGluZ1JlcXVpcmVtZW50cyhSZW5kZXJMYXllciogbGF5ZXIsIE8KICAgICAgICAgICAg
IGNoaWxkU3RhdGUubV9jb21wb3NpdGluZ0FuY2VzdG9yID0gbGF5ZXI7CiAgICAgICAgICAgICBp
ZiAob3ZlcmxhcE1hcCkgewogICAgICAgICAgICAgICAgIG92ZXJsYXBNYXAtPnB1c2hDb21wb3Np
dGluZ0NvbnRhaW5lcigpOwotICAgICAgICAgICAgICAgIGFkZFRvT3ZlcmxhcE1hcFJlY3Vyc2l2
ZSgqb3ZlcmxhcE1hcCwgbGF5ZXIpOworICAgICAgICAgICAgICAgIGFkZFRvT3ZlcmxhcE1hcFJl
Y3Vyc2l2ZSgqZ2VvbWV0cnlNYXAsICpvdmVybGFwTWFwLCBsYXllcik7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB3aWxsQmVDb21wb3NpdGVkID0gdHJ1ZTsKICAgICAgICAgIH0KQEAgLTg3
Myw2ICs4ODgsOSBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBvc2l0
aW5nUmVxdWlyZW1lbnRzKFJlbmRlckxheWVyKiBsYXllciwgTwogCiAgICAgaWYgKGxheWVyLT5y
ZWZsZWN0aW9uTGF5ZXIoKSAmJiB1cGRhdGVMYXllckNvbXBvc2l0aW5nU3RhdGUobGF5ZXItPnJl
ZmxlY3Rpb25MYXllcigpLCBDb21wb3NpdGluZ0NoYW5nZVJlcGFpbnROb3cpKQogICAgICAgICBs
YXllcnNDaGFuZ2VkID0gdHJ1ZTsKKworICAgIGlmIChnZW9tZXRyeU1hcCkKKyAgICAgICAgZ2Vv
bWV0cnlNYXAtPnBvcE1hcHBpbmdzVG9BbmNlc3RvcihhbmNlc3RvckxheWVyID8gYW5jZXN0b3JM
YXllci0+cmVuZGVyZXIoKSA6IDApOwogfQogCiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
c2V0Q29tcG9zaXRpbmdQYXJlbnQoUmVuZGVyTGF5ZXIqIGNoaWxkTGF5ZXIsIFJlbmRlckxheWVy
KiBwYXJlbnRMYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuaAppbmRleCBlMjk0YjU4NjZhZWE4MDZlOGMwNjQ3ZjA1MDg1NjA4NDZkNzU5
ZGZhLi4yNzM4NDkzNTIxYjAyNTJmYjBmZDVhZDRiNDcxN2VmYWFjZGI2OTk0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCkBAIC0zNCw2
ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3NMYXllcjsKIGNs
YXNzIFJlbmRlckVtYmVkZGVkT2JqZWN0OworY2xhc3MgUmVuZGVyR2VvbWV0cnlNYXA7CiBjbGFz
cyBSZW5kZXJQYXJ0OwogY2xhc3MgU2Nyb2xsaW5nQ29vcmRpbmF0b3I7CiAjaWYgRU5BQkxFKFZJ
REVPKQpAQCAtMjM4LDEzICsyMzksMTMgQEAgcHJpdmF0ZToKICAgICAvLyBSZXBhaW50IHRoZSBn
aXZlbiByZWN0ICh3aGljaCBpcyBsYXllcidzIGNvb3JkcyksIGFuZCByZWdpb25zIG9mIGNoaWxk
IGxheWVycyB0aGF0IGludGVyc2VjdCB0aGF0IHJlY3QuCiAgICAgdm9pZCByZWN1cnNpdmVSZXBh
aW50TGF5ZXJSZWN0KFJlbmRlckxheWVyKiwgY29uc3QgSW50UmVjdCYpOwogCi0gICAgdm9pZCBh
ZGRUb092ZXJsYXBNYXAoT3ZlcmxhcE1hcCYsIFJlbmRlckxheWVyKiwgSW50UmVjdCYgbGF5ZXJC
b3VuZHMsIGJvb2wmIGJvdW5kc0NvbXB1dGVkKTsKLSAgICB2b2lkIGFkZFRvT3ZlcmxhcE1hcFJl
Y3Vyc2l2ZShPdmVybGFwTWFwJiwgUmVuZGVyTGF5ZXIqKTsKKyAgICB2b2lkIGFkZFRvT3Zlcmxh
cE1hcChSZW5kZXJHZW9tZXRyeU1hcCYsIE92ZXJsYXBNYXAmLCBSZW5kZXJMYXllciosIEludFJl
Y3QmIGxheWVyQm91bmRzLCBib29sJiBib3VuZHNDb21wdXRlZCk7CisgICAgdm9pZCBhZGRUb092
ZXJsYXBNYXBSZWN1cnNpdmUoUmVuZGVyR2VvbWV0cnlNYXAmLCBPdmVybGFwTWFwJiwgUmVuZGVy
TGF5ZXIqLCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciA9IDApOwogCiAgICAgdm9pZCB1cGRh
dGVDb21wb3NpdGluZ0xheWVyc1RpbWVyRmlyZWQoVGltZXI8UmVuZGVyTGF5ZXJDb21wb3NpdG9y
PiopOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGFueSBsYXllcidzIGNvbXBvc2l0aW5nIGNo
YW5nZWQKLSAgICB2b2lkIGNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50cyhSZW5kZXJMYXll
ciosIE92ZXJsYXBNYXAqLCBzdHJ1Y3QgQ29tcG9zaXRpbmdTdGF0ZSYsIGJvb2wmIGxheWVyc0No
YW5nZWQpOworICAgIHZvaWQgY29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKFJlbmRlckxh
eWVyKiBhbmNlc3RvckxheWVyLCBSZW5kZXJMYXllciosIFJlbmRlckdlb21ldHJ5TWFwKiwgT3Zl
cmxhcE1hcCosIHN0cnVjdCBDb21wb3NpdGluZ1N0YXRlJiwgYm9vbCYgbGF5ZXJzQ2hhbmdlZCk7
CiAgICAgCiAgICAgLy8gUmVjdXJzZXMgZG93biB0aGUgdHJlZSwgcGFyZW50aW5nIGRlc2NlbmRh
bnQgY29tcG9zaXRpbmcgbGF5ZXJzIGFuZCBjb2xsZWN0aW5nIGFuIGFycmF5IG9mIGNoaWxkIGxh
eWVycyBmb3IgdGhlIGN1cnJlbnQgY29tcG9zaXRpbmcgbGF5ZXIuCiAgICAgdm9pZCByZWJ1aWxk
Q29tcG9zaXRpbmdMYXllclRyZWUoUmVuZGVyTGF5ZXIqLCBWZWN0b3I8R3JhcGhpY3NMYXllcio+
JiBjaGlsZEdyYXBoaWNzTGF5ZXJzT2ZFbmNsb3NpbmdMYXllciwgaW50IGRlcHRoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggNGViMTZiODM1MTk2Yjk5
MDBiNDZjYjZlY2I4ZjE2ZDcyZWIwODlhMi4uZmJkODkwMDlkOTlhM2Y5Mzg5YjcxMzRjMjU2NGIw
ZGUzMTU3Mzk0NyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAK
QEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJSZW5kZXJDb3VudGVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxleGlibGVC
b3guaCIKKyNpbmNsdWRlICJSZW5kZXJHZW9tZXRyeU1hcC5oIgogI2luY2x1ZGUgIlJlbmRlcklt
YWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaCIKICNpbmNs
dWRlICJSZW5kZXJJbmxpbmUuaCIKQEAgLTIwMzEsNiArMjAzMiw3IEBAIHZvaWQgUmVuZGVyT2Jq
ZWN0OjptYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29u
dGFpbmVyLCBiCiAgICAgaWYgKCFvKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBGSVhNRTog
dGhpcyBzaG91bGQgY2FsbCBvZmZzZXRGcm9tQ29udGFpbmVyIHRvIHNoYXJlIGNvZGUsIGJ1dCBJ
J20gbm90IHN1cmUgaXQncyBldmVyIGNhbGxlZC4KICAgICBMYXlvdXRQb2ludCBjZW50ZXJQb2lu
dCA9IHJvdW5kZWRMYXlvdXRQb2ludCh0cmFuc2Zvcm1TdGF0ZS5tYXBwZWRQb2ludCgpKTsKICAg
ICBpZiAoby0+aXNCb3goKSAmJiBvLT5zdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9k
ZSgpKQogICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKHRvUmVuZGVyQm94KG8pLT5mbGlwRm9y
V3JpdGluZ01vZGVJbmNsdWRpbmdDb2x1bW5zKHJvdW5kZWRMYXlvdXRQb2ludCh0cmFuc2Zvcm1T
dGF0ZS5tYXBwZWRQb2ludCgpKSkgLSBjZW50ZXJQb2ludCk7CkBAIC0yMDQ2LDYgKzIwNDgsMjQg
QEAgdm9pZCBSZW5kZXJPYmplY3Q6Om1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIsIGIKICAgICBvLT5tYXBMb2NhbFRvQ29udGFpbmVyKHJl
cGFpbnRDb250YWluZXIsIGZpeGVkLCB1c2VUcmFuc2Zvcm1zLCB0cmFuc2Zvcm1TdGF0ZSwgRG9O
b3RBcHBseUNvbnRhaW5lckZsaXAsIHdhc0ZpeGVkKTsKIH0KIAorY29uc3QgUmVuZGVyT2JqZWN0
KiBSZW5kZXJPYmplY3Q6OnB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJiBnZW9tZXRyeU1h
cCkgY29uc3QKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGFuY2VzdG9yVG9TdG9wQXQsIGFuY2VzdG9y
VG9TdG9wQXQgIT0gdGhpcyk7CisKKyAgICBSZW5kZXJPYmplY3QqIGNvbnRhaW5lciA9IHBhcmVu
dCgpOworICAgIGlmICghY29udGFpbmVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEZJ
WE1FOiB0aGlzIHNob3VsZCBjYWxsIG9mZnNldEZyb21Db250YWluZXIgdG8gc2hhcmUgY29kZSwg
YnV0IEknbSBub3Qgc3VyZSBpdCdzIGV2ZXIgY2FsbGVkLgorICAgIExheW91dFNpemUgb2Zmc2V0
OworICAgIGlmIChjb250YWluZXItPmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICBvZmZzZXQg
PSAtdG9SZW5kZXJCb3goY29udGFpbmVyKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CisKKyAg
ICBnZW9tZXRyeU1hcC5wdXNoKHRoaXMsIG9mZnNldCwgaGFzQ29sdW1ucygpKTsKKyAgICAKKyAg
ICByZXR1cm4gY29udGFpbmVyOworfQorCiB2b2lkIFJlbmRlck9iamVjdDo6bWFwQWJzb2x1dGVU
b0xvY2FsUG9pbnQoYm9vbCBmaXhlZCwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0
ZSYgdHJhbnNmb3JtU3RhdGUpIGNvbnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0KiBvID0gcGFyZW50
KCk7CkBAIC0yMTE0LDcgKzIxMzQsNyBAQCBGbG9hdFBvaW50IFJlbmRlck9iamVjdDo6bG9jYWxU
b0NvbnRhaW5lclBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsUG9pbnQsIFJlbgogICAgIHJl
dHVybiB0cmFuc2Zvcm1TdGF0ZS5sYXN0UGxhbmFyUG9pbnQoKTsKIH0KIAotTGF5b3V0U2l6ZSBS
ZW5kZXJPYmplY3Q6Om9mZnNldEZyb21Db250YWluZXIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBM
YXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0CitMYXlvdXRTaXplIFJlbmRlck9iamVjdDo6b2Zmc2V0
RnJvbUNvbnRhaW5lcihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IExheW91dFBvaW50JiBwb2ludCwg
Ym9vbCogb2Zmc2V0RGVwZW5kc09uUG9pbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG8gPT0gY29u
dGFpbmVyKCkpOwogCkBAIC0yMTI1LDYgKzIxNDUsOSBAQCBMYXlvdXRTaXplIFJlbmRlck9iamVj
dDo6b2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IExheW91dFBvaW50
JgogICAgIGlmIChvLT5oYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgb2Zmc2V0IC09IHRvUmVu
ZGVyQm94KG8pLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKIAorICAgIGlmIChvZmZzZXREZXBl
bmRzT25Qb2ludCkKKyAgICAgICAgKm9mZnNldERlcGVuZHNPblBvaW50ID0gaGFzQ29sdW1ucygp
OworCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIApAQCAtMjIwMCw3ICsyMjIzLDcgQEAgYm9vbCBS
ZW5kZXJPYmplY3Q6Omhhc091dGxpbmVBbm5vdGF0aW9uKCkgY29uc3QKICAgICByZXR1cm4gbm9k
ZSgpICYmIG5vZGUoKS0+aXNMaW5rKCkgJiYgZG9jdW1lbnQoKS0+cHJpbnRpbmcoKTsKIH0KIAot
UmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6OmNvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lciwgYm9vbCogcmVwYWludENvbnRhaW5lclNraXBwZWQpIGNvbnN0
CitSZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6Y29udGFpbmVyKGNvbnN0IFJlbmRlckJveE1v
ZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sKiByZXBhaW50Q29udGFpbmVyU2tpcHBl
ZCkgY29uc3QKIHsKICAgICBpZiAocmVwYWludENvbnRhaW5lclNraXBwZWQpCiAgICAgICAgICpy
ZXBhaW50Q29udGFpbmVyU2tpcHBlZCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCmluZGV4IGYxMDMyYTUzNGIzMWQ2OGFjZjBiZTVmMjY3MTBmZWYxNGFjOTEx
NWYuLjU5ZmVlYjk1MzE3Yzk0NjAwNzUzZDBmMGRjZDliMGE3MTlkYWUzNjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTYwLDYgKzYwLDcgQEAgY2xhc3MgUmVu
ZGVyQm94TW9kZWxPYmplY3Q7CiBjbGFzcyBSZW5kZXJJbmxpbmU7CiBjbGFzcyBSZW5kZXJCbG9j
azsKIGNsYXNzIFJlbmRlckZsb3dUaHJlYWQ7CitjbGFzcyBSZW5kZXJHZW9tZXRyeU1hcDsKIGNs
YXNzIFJlbmRlckxheWVyOwogY2xhc3MgUmVuZGVyVGFibGU7CiBjbGFzcyBSZW5kZXJUaGVtZTsK
QEAgLTU4Myw3ICs1ODQsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyB0aGUgb2JqZWN0IGNv
bnRhaW5pbmcgdGhpcyBvbmUuIENhbiBiZSBkaWZmZXJlbnQgZnJvbSBwYXJlbnQgZm9yIHBvc2l0
aW9uZWQgZWxlbWVudHMuCiAgICAgLy8gSWYgcmVwYWludENvbnRhaW5lciBhbmQgcmVwYWludENv
bnRhaW5lclNraXBwZWQgYXJlIG5vdCBudWxsLCBvbiByZXR1cm4gKnJlcGFpbnRDb250YWluZXJT
a2lwcGVkCiAgICAgLy8gaXMgdHJ1ZSBpZiB0aGUgcmVuZGVyZXIgcmV0dXJuZWQgaXMgYW4gYW5j
ZXN0b3Igb2YgcmVwYWludENvbnRhaW5lci4KLSAgICBSZW5kZXJPYmplY3QqIGNvbnRhaW5lcihS
ZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IDAsIGJvb2wqIHJlcGFpbnRD
b250YWluZXJTa2lwcGVkID0gMCkgY29uc3Q7CisgICAgUmVuZGVyT2JqZWN0KiBjb250YWluZXIo
Y29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSAwLCBib29sKiBy
ZXBhaW50Q29udGFpbmVyU2tpcHBlZCA9IDApIGNvbnN0OwogCiAgICAgdmlydHVhbCBSZW5kZXJP
YmplY3QqIGhvdmVyQW5jZXN0b3IoKSBjb25zdCB7IHJldHVybiBwYXJlbnQoKTsgfQogCkBAIC02
ODQsNyArNjg1LDcgQEAgcHVibGljOgogCiAgICAgLy8gUmV0dXJuIHRoZSBvZmZzZXQgZnJvbSB0
aGUgY29udGFpbmVyKCkgcmVuZGVyZXIgKGV4Y2x1ZGluZyB0cmFuc2Zvcm1zKS4gSW4gbXVsdGkt
Y29sdW1uIGxheW91dCwKICAgICAvLyBkaWZmZXJlbnQgb2Zmc2V0cyBhcHBseSBhdCBkaWZmZXJl
bnQgcG9pbnRzLCBzbyByZXR1cm4gdGhlIG9mZnNldCB0aGF0IGFwcGxpZXMgdG8gdGhlIGdpdmVu
IHBvaW50LgotICAgIHZpcnR1YWwgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRl
ck9iamVjdCosIGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRT
aXplIG9mZnNldEZyb21Db250YWluZXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgTGF5b3V0UG9pbnQm
LCBib29sKiBvZmZzZXREZXBlbmRzT25Qb2ludCA9IDApIGNvbnN0OwogICAgIC8vIFJldHVybiB0
aGUgb2Zmc2V0IGZyb20gYW4gb2JqZWN0IHVwIHRoZSBjb250YWluZXIoKSBjaGFpbi4gQXNzZXJ0
cyB0aGF0IG5vbmUgb2YgdGhlIGludGVybWVkaWF0ZSBvYmplY3RzIGhhdmUgdHJhbnNmb3Jtcy4K
ICAgICBMYXlvdXRTaXplIG9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihSZW5kZXJPYmplY3Qq
KSBjb25zdDsKICAgICAKQEAgLTg4MSw2ICs4ODIsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29u
dGFpbmVyLCBib29sIHVzZVRyYW5zZm9ybXMsIGJvb2wgZml4ZWQsIFRyYW5zZm9ybVN0YXRlJiwg
QXBwbHlDb250YWluZXJGbGlwT3JOb3QgPSBBcHBseUNvbnRhaW5lckZsaXAsIGJvb2wqIHdhc0Zp
eGVkID0gMCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIG1hcEFic29sdXRlVG9Mb2NhbFBvaW50
KGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcywgVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsK
IAorICAgIC8vIFB1c2hlcyBzdGF0ZSBvbnRvIFJlbmRlckdlb21ldHJ5TWFwIGFib3V0IGhvdyB0
byBtYXAgY29vcmRpbmF0ZXMgZnJvbSB0aGlzIHJlbmRlcmVyIHRvIGl0cyBjb250YWluZXIsIG9y
IGFuY2VzdG9yVG9TdG9wQXQgKHdoaWNoZXZlciBpcyBlbmNvdW50ZXJlZCBmaXJzdCkuCisgICAg
Ly8gUmV0dXJucyB0aGUgcmVuZGVyZXIgd2hpY2ggd2FzIG1hcHBlZCB0byAoY29udGFpbmVyIG9y
IGFuY2VzdG9yVG9TdG9wQXQpLgorICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0KiBwdXNo
TWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBhbmNlc3RvclRv
U3RvcEF0LCBSZW5kZXJHZW9tZXRyeU1hcCYpIGNvbnN0OworICAgIAogICAgIGJvb2wgc2hvdWxk
VXNlVHJhbnNmb3JtRnJvbUNvbnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QqIGNvbnRhaW5lcikg
Y29uc3Q7CiAgICAgdm9pZCBnZXRUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnN0IFJlbmRlck9i
amVjdCogY29udGFpbmVyLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRJbkNvbnRhaW5lciwgVHJh
bnNmb3JtYXRpb25NYXRyaXgmKSBjb25zdDsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKaW5kZXggMTA3MjBjMmI4ZjcxODE2ZjlhMGUzYTliZTZm
ZTQ0MDE4ZDAwNzMwZS4uOTllYzkyZDdkMzljNmUyZjE1MzBjYTg0NjdiMDdkNDMwOGU5NGU4NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKQEAgLTI0
MCwxMSArMjQwLDExIEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpzZXRPdmVycmlkZUhlaWdodEZy
b21Sb3dIZWlnaHQoTGF5b3V0VW5pdCByb3dIZWlnaHQpCiAgICAgUmVuZGVyQmxvY2s6OnNldE92
ZXJyaWRlSGVpZ2h0KG1heDxMYXlvdXRVbml0PigwLCByb3dIZWlnaHQgLSBib3JkZXJCZWZvcmUo
KSAtIHBhZGRpbmdCZWZvcmUoKSAtIGJvcmRlckFmdGVyKCkgLSBwYWRkaW5nQWZ0ZXIoKSkpOwog
fQogCi1MYXlvdXRTaXplIFJlbmRlclRhYmxlQ2VsbDo6b2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IExheW91dFBvaW50JiBwb2ludCkgY29uc3QKK0xheW91dFNpemUg
UmVuZGVyVGFibGVDZWxsOjpvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCogbywgY29u
c3QgTGF5b3V0UG9pbnQmIHBvaW50LCBib29sKiBvZmZzZXREZXBlbmRzT25Qb2ludCkgY29uc3QK
IHsKICAgICBBU1NFUlQobyA9PSBjb250YWluZXIoKSk7CiAKLSAgICBMYXlvdXRTaXplIG9mZnNl
dCA9IFJlbmRlckJsb2NrOjpvZmZzZXRGcm9tQ29udGFpbmVyKG8sIHBvaW50KTsKKyAgICBMYXlv
dXRTaXplIG9mZnNldCA9IFJlbmRlckJsb2NrOjpvZmZzZXRGcm9tQ29udGFpbmVyKG8sIHBvaW50
LCBvZmZzZXREZXBlbmRzT25Qb2ludCk7CiAgICAgaWYgKHBhcmVudCgpKQogICAgICAgICBvZmZz
ZXQuZXhwYW5kKC1wYXJlbnRCb3goKS0+eCgpLCAtcGFyZW50Qm94KCktPnkoKSk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAppbmRleCBkYWM4YTc2MDZhNzg3
MTA1YmM1ZWQzYzgzNTllNWZiNjY5YmI0MTBmLi4yYTU4MjBlOWVlMjljZjdjZjUyNTcyNzEwNjk3
ZjM5MGRlZjM4ZjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVDZWxsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2Vs
bC5oCkBAIC0xNTIsNyArMTUyLDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBib3hT
aGFkb3dTaG91bGRCZUFwcGxpZWRUb0JhY2tncm91bmQoQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNl
LCBJbmxpbmVGbG93Qm94KikgY29uc3QgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIExheW91dFNp
emUgb2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5kZXJPYmplY3QqLCBjb25zdCBMYXlvdXRQb2ludCYp
IGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRl
ck9iamVjdCosIGNvbnN0IExheW91dFBvaW50JiwgYm9vbCogb2Zmc2V0RGVwZW5kc09uUG9pbnQg
PSAwKSBjb25zdDsKICAgICB2aXJ0dWFsIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZv
clJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIsIExheW91dFJlY3QmLCBib29sIGZpeGVkID0gZmFsc2UpIGNv
bnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5kZXggODYzMzEw
NGUzZjExNmI0YmM1NThiNDQ3NzMwNGYyNjNlMTUzZTVmMC4uZGE5ODZkMzdkN2Q2OTYwNTI2NjVi
ZTk0NTBhNmMzMDQwN2ZmZWUwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3
LmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVk
ZSAiUmVuZGVyR2VvbWV0cnlNYXAuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1
ZGUgIlJlbmRlck5hbWVkRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlclNlbGVjdGlvbklu
Zm8uaCIKQEAgLTE2Nyw2ICsxNjgsMjcgQEAgdm9pZCBSZW5kZXJWaWV3OjptYXBMb2NhbFRvQ29u
dGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib28KICAgICAg
ICAgdHJhbnNmb3JtU3RhdGUubW92ZShtX2ZyYW1lVmlldy0+c2Nyb2xsT2Zmc2V0Rm9yRml4ZWRQ
b3NpdGlvbigpKTsKIH0KIAorY29uc3QgUmVuZGVyT2JqZWN0KiBSZW5kZXJWaWV3OjpwdXNoTWFw
cGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBhbmNlc3RvclRvU3Rv
cEF0LCBSZW5kZXJHZW9tZXRyeU1hcCYgZ2VvbWV0cnlNYXApIGNvbnN0Cit7CisgICAgLy8gSWYg
YSBjb250YWluZXIgd2FzIHNwZWNpZmllZCwgYW5kIHdhcyBub3QgMCBvciB0aGUgUmVuZGVyVmll
dywKKyAgICAvLyB0aGVuIHdlIHNob3VsZCBoYXZlIGZvdW5kIGl0IGJ5IG5vdy4KKyAgICBBU1NF
UlRfQVJHKGFuY2VzdG9yVG9TdG9wQXQsICFhbmNlc3RvclRvU3RvcEF0IHx8IGFuY2VzdG9yVG9T
dG9wQXQgPT0gdGhpcyk7CisKKyAgICBMYXlvdXRTaXplIHNjcm9sbE9mZnNldDsKKworICAgIGlm
IChtX2ZyYW1lVmlldykKKyAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gbV9mcmFtZVZpZXctPnNjcm9s
bE9mZnNldEZvckZpeGVkUG9zaXRpb24oKTsKKworICAgIGlmICghYW5jZXN0b3JUb1N0b3BBdCAm
JiBzaG91bGRVc2VUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKDApKSB7CisgICAgICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHQ7CisgICAgICAgIGdldFRyYW5zZm9ybUZyb21Db250YWluZXIoMCwgTGF5
b3V0U2l6ZSgpLCB0KTsKKyAgICAgICAgZ2VvbWV0cnlNYXAucHVzaFZpZXcodGhpcywgc2Nyb2xs
T2Zmc2V0LCAmdCk7CisgICAgfSBlbHNlCisgICAgICAgIGdlb21ldHJ5TWFwLnB1c2hWaWV3KHRo
aXMsIHNjcm9sbE9mZnNldCk7CisKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBSZW5kZXJWaWV3
OjptYXBBYnNvbHV0ZVRvTG9jYWxQb2ludChib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMs
IFRyYW5zZm9ybVN0YXRlJiB0cmFuc2Zvcm1TdGF0ZSkgY29uc3QKIHsKICAgICBpZiAoZml4ZWQg
JiYgbV9mcmFtZVZpZXcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAppbmRleCA0
YWMwNjFmNzJlMmQxN2M0ZTQ5NmFlNDAxYmQzNjkxOWM0MDVhNjI2Li5lNmE1NzIyZDg1ODBkYTRh
NzcxNTIyMDc0Zjc4MjRmZTYyY2JjMDdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmgKQEAgLTE4OCw2ICsxODgsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lciwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBib29sIGZpeGVkLCBUcmFuc2Zvcm1TdGF0
ZSYsIEFwcGx5Q29udGFpbmVyRmxpcE9yTm90ID0gQXBwbHlDb250YWluZXJGbGlwLCBib29sKiB3
YXNGaXhlZCA9IDApIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0KiBwdXNo
TWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBhbmNlc3RvclRv
U3RvcEF0LCBSZW5kZXJHZW9tZXRyeU1hcCYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBtYXBB
YnNvbHV0ZVRvTG9jYWxQb2ludChib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5z
Zm9ybVN0YXRlJikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzQ29sdW1ucyhpbnQg
ZGVzaXJlZENvbHVtbkNvdW50KSBjb25zdCBPVkVSUklERTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAKaW5kZXgg
MjkxOGZlM2E5N2U4NDdmY2Y1MzIwNmRjYWU1Y2M2MjQ0OTNmYmYwNi4uMDc0OTQ0MDY2MjRlNTUw
NDQ1NTlkNzI5YTUxZjI0NDNkYWJkNjI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCkBAIC0xOTMsNiArMTkz
LDExIEBAIHZvaWQgUmVuZGVyU1ZHRm9yZWlnbk9iamVjdDo6bWFwTG9jYWxUb0NvbnRhaW5lcihS
ZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvCiAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6bWFw
TG9jYWxUb0NvbnRhaW5lcih0aGlzLCByZXBhaW50Q29udGFpbmVyLCB0cmFuc2Zvcm1TdGF0ZSwg
d2FzRml4ZWQpOwogfQogCitjb25zdCBSZW5kZXJPYmplY3QqIFJlbmRlclNWR0ZvcmVpZ25PYmpl
Y3Q6OnB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGFu
Y2VzdG9yVG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJiBnZW9tZXRyeU1hcCkgY29uc3QKK3sK
KyAgICByZXR1cm4gU1ZHUmVuZGVyU3VwcG9ydDo6cHVzaE1hcHBpbmdUb0NvbnRhaW5lcih0aGlz
LCBhbmNlc3RvclRvU3RvcEF0LCBnZW9tZXRyeU1hcCk7Cit9CisKIH0KIAogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmpl
Y3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVj
dC5oCmluZGV4IDRhMWE4YWMyNTg2ZWYzNzM2ODFmYjYyY2FmYWYyZjUzODQ5ZGM5NWQuLjhmZTA4
NjRjMTk5YzRjMWIxZjA3YjZiN2M5NzhhMWU3ZTYxY2M1N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5oCkBAIC01NSw2
ICs1NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdGb3JlaWduT2JqZWN0KCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250
YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQs
IGJvb2wgdXNlVHJhbnNmb3JtcywgVHJhbnNmb3JtU3RhdGUmLCBBcHBseUNvbnRhaW5lckZsaXBP
ck5vdCA9IEFwcGx5Q29udGFpbmVyRmxpcCwgYm9vbCogd2FzRml4ZWQgPSAwKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVjdCogcHVzaE1hcHBpbmdUb0NvbnRhaW5lcihjb25z
dCBSZW5kZXJCb3hNb2RlbE9iamVjdCogYW5jZXN0b3JUb1N0b3BBdCwgUmVuZGVyR2VvbWV0cnlN
YXAmKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUoKSB7
IG1fbmVlZHNUcmFuc2Zvcm1VcGRhdGUgPSB0cnVlOyB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5jcHAKaW5kZXggYmIxYTM2
N2FjNWQ1ZTc5YjE4NTgxZjM3YTQwZTIwNTRkYTA3ZWU0My4uYmYwOTlhZDAzYzcwMmNjZjA5NDYy
MThlODdkNmVmMmUzYWFjMzExMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHSW5saW5lLmNwcApAQCAtODQsNiArODQsMTEgQEAgdm9pZCBSZW5kZXJTVkdJ
bmxpbmU6Om1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRD
b250YWluZXIKICAgICBTVkdSZW5kZXJTdXBwb3J0OjptYXBMb2NhbFRvQ29udGFpbmVyKHRoaXMs
IHJlcGFpbnRDb250YWluZXIsIHRyYW5zZm9ybVN0YXRlLCB3YXNGaXhlZCk7CiB9CiAKK2NvbnN0
IFJlbmRlck9iamVjdCogUmVuZGVyU1ZHSW5saW5lOjpwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGNv
bnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBhbmNlc3RvclRvU3RvcEF0LCBSZW5kZXJHZW9tZXRy
eU1hcCYgZ2VvbWV0cnlNYXApIGNvbnN0Cit7CisgICAgcmV0dXJuIFNWR1JlbmRlclN1cHBvcnQ6
OnB1c2hNYXBwaW5nVG9Db250YWluZXIodGhpcywgYW5jZXN0b3JUb1N0b3BBdCwgZ2VvbWV0cnlN
YXApOworfQorCiB2b2lkIFJlbmRlclNWR0lubGluZTo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8Rmxv
YXRRdWFkPiYgcXVhZHMsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdAogewogICAgIGNvbnN0IFJlbmRl
ck9iamVjdCogb2JqZWN0ID0gUmVuZGVyU1ZHVGV4dDo6bG9jYXRlUmVuZGVyU1ZHVGV4dEFuY2Vz
dG9yKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdJbmxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5s
aW5lLmgKaW5kZXggMTcyMDYyMTk2ZDljOWQwYjZmZWRlYTdmYzY3NTg1OGZlZTkxMjQ3ZS4uMWRj
NWEyZWRhYjE5OGE5ZDdiMDc5NTY1ZjZhZGQwYjBkN2QwZDBlNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5oCkBAIC00OCw2ICs0OCw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFp
bnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpIGNvbnN0OwogICAgIHZp
cnR1YWwgdm9pZCBjb21wdXRlRmxvYXRSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lciwgRmxvYXRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNlKSBjb25z
dDsKICAgICB2aXJ0dWFsIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBib29sIGZpeGVkLCBU
cmFuc2Zvcm1TdGF0ZSYsIEFwcGx5Q29udGFpbmVyRmxpcE9yTm90ID0gQXBwbHlDb250YWluZXJG
bGlwLCBib29sKiB3YXNGaXhlZCA9IDApIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgUmVuZGVy
T2JqZWN0KiBwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0
KiBhbmNlc3RvclRvU3RvcEF0LCBSZW5kZXJHZW9tZXRyeU1hcCYpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCogd2FzRml4ZWQp
IGNvbnN0OwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAppbmRleCA0OGZkN2Q4NzkyNzZiZjQzNGVmNDA5
NWI0YjBiNmU1ZDExMjMyOTNiLi4yOTEyNTkxZTc5NTJlYjU0YWYyNDc1MzE5ZWI0Y2Q0ZWRmMGZk
MjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01v
ZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmNwcApAQCAtNjAsNiArNjAsMTEgQEAgdm9pZCBSZW5kZXJTVkdNb2RlbE9i
amVjdDo6bWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENv
bnQKICAgICBTVkdSZW5kZXJTdXBwb3J0OjptYXBMb2NhbFRvQ29udGFpbmVyKHRoaXMsIHJlcGFp
bnRDb250YWluZXIsIHRyYW5zZm9ybVN0YXRlLCB3YXNGaXhlZCk7CiB9CiAKK2NvbnN0IFJlbmRl
ck9iamVjdCogUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnB1c2hNYXBwaW5nVG9Db250YWluZXIoY29u
c3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5
TWFwJiBnZW9tZXRyeU1hcCkgY29uc3QKK3sKKyAgICByZXR1cm4gU1ZHUmVuZGVyU3VwcG9ydDo6
cHVzaE1hcHBpbmdUb0NvbnRhaW5lcih0aGlzLCBhbmNlc3RvclRvU3RvcEF0LCBnZW9tZXRyeU1h
cCk7Cit9CisKIC8vIENvcGllZCBmcm9tIFJlbmRlckJveCwgdGhpcyBtZXRob2QgbGlrZWx5IHJl
cXVpcmVzIGZ1cnRoZXIgcmVmYWN0b3JpbmcgdG8gd29yayBlYXNpbHkgZm9yIGJvdGggU1ZHIGFu
ZCBDU1MgQm94IE1vZGVsIGNvbnRlbnQuCiAvLyBGSVhNRTogVGhpcyBtYXkgYWxzbyBuZWVkIHRv
IG1vdmUgaW50byBTVkdSZW5kZXJTdXBwb3J0IGFzIHRoZSBSZW5kZXJCb3ggdmVyc2lvbiBkZXBl
bmRzCiAvLyBvbiBib3JkZXJCb3VuZGluZ0JveCgpIHdoaWNoIFNWRyBSZW5kZXJCb3ggc3ViY2xh
c2VzIChsaWtlIFNWR1JlbmRlckJsb2NrKSBkbyBub3QgaW1wbGVtZW50LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCmluZGV4IGI5
NjkyZmUxZGZjZWI2MWE3ZWFjYTIxYmNmZDg3NTEzYWI3NjgxZDUuLjU3MTdlOTg5ZTRkODQyZGVk
N2JhMDZmMDhmMWNiY2I3NWNkMjkxMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgKQEAgLTU5LDYgKzU5LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9v
bCogd2FzRml4ZWQpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWlu
ZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgdXNlVHJhbnNm
b3JtcywgYm9vbCBmaXhlZCwgVHJhbnNmb3JtU3RhdGUmLCBBcHBseUNvbnRhaW5lckZsaXBPck5v
dCA9IEFwcGx5Q29udGFpbmVyRmxpcCwgYm9vbCogd2FzRml4ZWQgPSAwKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVjdCogcHVzaE1hcHBpbmdUb0NvbnRhaW5lcihjb25zdCBS
ZW5kZXJCb3hNb2RlbE9iamVjdCogYW5jZXN0b3JUb1N0b3BBdCwgUmVuZGVyR2VvbWV0cnlNYXAm
KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5j
ZSwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVE
aWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwog
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKaW5kZXggNjdiOGE3MTRiOTA5ZmY0MzVm
YzEyYjBhZWQ0OGFlYzU5NWM2MjgyYy4uNjYxNDU2YjNjYmYwYWJjMjRhNGViNDNlOTdlM2NkMmUz
YWZiYTk3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jv
b3QuY3BwCkBAIC0zOTEsNiArMzkxLDExIEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6bWFwTG9jYWxU
b0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwKICAgICBS
ZW5kZXJSZXBsYWNlZDo6bWFwTG9jYWxUb0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBmaXhl
ZCwgdXNlVHJhbnNmb3JtcywgdHJhbnNmb3JtU3RhdGUsIEFwcGx5Q29udGFpbmVyRmxpcCwgd2Fz
Rml4ZWQpOwogfQogCitjb25zdCBSZW5kZXJPYmplY3QqIFJlbmRlclNWR1Jvb3Q6OnB1c2hNYXBw
aW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9w
QXQsIFJlbmRlckdlb21ldHJ5TWFwJiBnZW9tZXRyeU1hcCkgY29uc3QKK3sKKyAgICByZXR1cm4g
UmVuZGVyUmVwbGFjZWQ6OnB1c2hNYXBwaW5nVG9Db250YWluZXIoYW5jZXN0b3JUb1N0b3BBdCwg
Z2VvbWV0cnlNYXApOworfQorCiB2b2lkIFJlbmRlclNWR1Jvb3Q6OnVwZGF0ZUNhY2hlZEJvdW5k
YXJpZXMoKQogewogICAgIG1fb2JqZWN0Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgKaW5kZXggYzMzNGFmYmU2
ZmIyNjVhNDU3ODllYmU5ODcyYTg2MGI4NzZiYjljNC4uMDViMWQyMjYyNzNjOWEwM2FmMjYyZWYz
MTdjODcxY2QzNjBiNzY0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSb290LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSb290LmgKQEAgLTk1LDYgKzk1LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
Y29tcHV0ZUZsb2F0UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRD
b250YWluZXIsIEZsb2F0UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4ZWQpIGNvbnN0OwogCiAg
ICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIGJvb2wgdXNlVHJhbnNmb3JtcywgYm9vbCBmaXhlZCwgVHJhbnNm
b3JtU3RhdGUmLCBBcHBseUNvbnRhaW5lckZsaXBPck5vdCA9IEFwcGx5Q29udGFpbmVyRmxpcCwg
Ym9vbCogd2FzRml4ZWQgPSAwKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVj
dCogcHVzaE1hcHBpbmdUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogYW5j
ZXN0b3JUb1N0b3BBdCwgUmVuZGVyR2VvbWV0cnlNYXAmKSBjb25zdDsKKwogICAgIHZpcnR1YWwg
Ym9vbCBjYW5CZVNlbGVjdGlvbkxlYWYoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCmluZGV4IGQ5
MTg0NTNjNWFkN2E4ODQ0MzAzMzc0MWQ1NmZkMjJlNzExMjkxMTkuLjY1ODNiMmY5OGFjMGU5NWVi
MzZiOWEwZDk1ZTY0ZWY3NzM0MDM3YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdUZXh0LmNwcApAQCAtMTE1LDYgKzExNSwxMSBAQCB2b2lkIFJlbmRlclNW
R1RleHQ6Om1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRD
b250YWluZXIsCiAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6bWFwTG9jYWxUb0NvbnRhaW5lcih0aGlz
LCByZXBhaW50Q29udGFpbmVyLCB0cmFuc2Zvcm1TdGF0ZSwgd2FzRml4ZWQpOwogfQogCitjb25z
dCBSZW5kZXJPYmplY3QqIFJlbmRlclNWR1RleHQ6OnB1c2hNYXBwaW5nVG9Db250YWluZXIoY29u
c3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5
TWFwJiBnZW9tZXRyeU1hcCkgY29uc3QKK3sKKyAgICByZXR1cm4gU1ZHUmVuZGVyU3VwcG9ydDo6
cHVzaE1hcHBpbmdUb0NvbnRhaW5lcih0aGlzLCBhbmNlc3RvclRvU3RvcEF0LCBnZW9tZXRyeU1h
cCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb2xsZWN0TGF5b3V0QXR0cmlidXRlcyhSZW5k
ZXJPYmplY3QqIHRleHQsIFZlY3RvcjxTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyo+JiBhdHRyaWJ1
dGVzKQogewogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBkZXNjZW5kYW50ID0gdGV4dDsgZGVzY2Vu
ZGFudDsgZGVzY2VuZGFudCA9IGRlc2NlbmRhbnQtPm5leHRJblByZU9yZGVyKHRleHQpKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oCmluZGV4IDU2NzIz
ZjZjMTJiODg3ZDJjYWU4MDdkZGNlZTc5MjJjMDg2NDA5OTguLmFmOTUwYzM0MTg1MzUwY2IwYjBi
ODEzYzRjYjYwNDYzOWFhYzgxMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVGV4dC5oCkBAIC03Niw2ICs3Niw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2
b2lkIGNvbXB1dGVGbG9hdFJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBh
aW50Q29udGFpbmVyLCBGbG9hdFJlY3QmLCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0OwogCiAg
ICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIGJvb2wgdXNlVHJhbnNmb3JtcywgYm9vbCBmaXhlZCwgVHJhbnNm
b3JtU3RhdGUmLCBBcHBseUNvbnRhaW5lckZsaXBPck5vdCA9IEFwcGx5Q29udGFpbmVyRmxpcCwg
Ym9vbCogd2FzRml4ZWQgPSAwKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVj
dCogcHVzaE1hcHBpbmdUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogYW5j
ZXN0b3JUb1N0b3BBdCwgUmVuZGVyR2VvbWV0cnlNYXAmKSBjb25zdDsKICAgICB2aXJ0dWFsIHZv
aWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCA9IDApOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QqKSBPVkVS
UklERTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlRGVzdHJveWVkKCkgT1ZFUlJJREU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmNwcAppbmRl
eCBkZGM3YzkxNTU3OTQ4OGQwMjA1MGE1MTRmYWJiNjcxMWMzOGEyOWZkLi4xNzdjZTljNDQ2MGQ3
MDk2ODhmMWY5YmFjM2VlM2Y5OGJlN2FmYTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNs
dWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCiAKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIK
KyNpbmNsdWRlICJSZW5kZXJHZW9tZXRyeU1hcC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXIuaCIKQEAgLTg1LDYgKzg2LDIzIEBAIHZvaWQgU1ZHUmVuZGVyU3VwcG9ydDo6
bWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyQm94
CiAgICAgcGFyZW50LT5tYXBMb2NhbFRvQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIGZhbHNl
LCB0cnVlLCB0cmFuc2Zvcm1TdGF0ZSwgUmVuZGVyT2JqZWN0OjpEb05vdEFwcGx5Q29udGFpbmVy
RmxpcCwgd2FzRml4ZWQpOwogfQogCitjb25zdCBSZW5kZXJPYmplY3QqIFNWR1JlbmRlclN1cHBv
cnQ6OnB1c2hNYXBwaW5nVG9Db250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNv
bnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBhbmNlc3RvclRvU3RvcEF0LCBSZW5kZXJHZW9tZXRy
eU1hcCYgZ2VvbWV0cnlNYXApCit7CisgICAgQVNTRVJUX1VOVVNFRChhbmNlc3RvclRvU3RvcEF0
LCBhbmNlc3RvclRvU3RvcEF0ICE9IG9iamVjdCk7CisKKyAgICBSZW5kZXJPYmplY3QqIHBhcmVu
dCA9IG9iamVjdC0+cGFyZW50KCk7CisKKyAgICAvLyBBdCB0aGUgU1ZHL0hUTUwgYm91bmRhcnkg
KGFrYSBSZW5kZXJTVkdSb290KSwgd2UgYXBwbHkgdGhlIGxvY2FsVG9Cb3JkZXJCb3hUcmFuc2Zv
cm0gCisgICAgLy8gdG8gbWFwIGFuIGVsZW1lbnQgZnJvbSBTVkcgdmlld3BvcnQgY29vcmRpbmF0
ZXMgdG8gQ1NTIGJveCBjb29yZGluYXRlcy4KKyAgICAvLyBSZW5kZXJTVkdSb290J3MgbWFwTG9j
YWxUb0NvbnRhaW5lciBtZXRob2QgZXhwZWN0cyBDU1MgYm94IGNvb3JkaW5hdGVzLgorICAgIGlm
IChwYXJlbnQtPmlzU1ZHUm9vdCgpKQorICAgICAgICBnZW9tZXRyeU1hcC5wdXNoKG9iamVjdCwg
VHJhbnNmb3JtYXRpb25NYXRyaXgodG9SZW5kZXJTVkdSb290KHBhcmVudCktPmxvY2FsVG9Cb3Jk
ZXJCb3hUcmFuc2Zvcm0oKSkpOworICAgIGVsc2UKKyAgICAgICAgZ2VvbWV0cnlNYXAucHVzaChv
YmplY3QsIExheW91dFNpemUoKSk7CisKKyAgICByZXR1cm4gcGFyZW50OworfQorCiAvLyBVcGRh
dGUgYSBib3VuZGluZyBib3ggdGFraW5nIGludG8gYWNjb3VudCB0aGUgdmFsaWRpdHkgb2YgdGhl
IG90aGVyIGJvdW5kaW5nIGJveC4KIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVPYmplY3RCb3Vu
ZGluZ0JveChGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94LCBib29sJiBvYmplY3RCb3VuZGlu
Z0JveFZhbGlkLCBSZW5kZXJPYmplY3QqIG90aGVyLCBGbG9hdFJlY3Qgb3RoZXJCb3VuZGluZ0Jv
eCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
U3VwcG9ydC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0
LmgKaW5kZXggZTI1YjEyZjA2MDFmODg4ZGQ0ZGU1ODM1M2UxOGJjMDBiMDA0ZmE2Mi4uZmE5NjBm
MDVlNjllMDJhMWE1ZWJiMTgyMjA2NjJmYjdhNzU3OTA4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgKQEAgLTM0LDYgKzM0LDcgQEAgY2xh
c3MgRmxvYXRQb2ludDsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEltYWdlQnVmZmVyOwogY2xh
c3MgUmVuZGVyQm94TW9kZWxPYmplY3Q7CitjbGFzcyBSZW5kZXJHZW9tZXRyeU1hcDsKIGNsYXNz
IFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgUmVuZGVyU1ZHUm9vdDsK
QEAgLTY0LDYgKzY1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBMYXlvdXRSZWN0IGNsaXBwZWRP
dmVyZmxvd1JlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlck9iamVjdCosIFJlbmRlckJveE1vZGVs
T2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsKICAgICBzdGF0aWMgdm9pZCBjb21wdXRlRmxvYXRS
ZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJPYmplY3QqLCBSZW5kZXJCb3hNb2RlbE9iamVjdCog
cmVwYWludENvbnRhaW5lciwgRmxvYXRSZWN0JiwgYm9vbCBmaXhlZCk7CiAgICAgc3RhdGljIHZv
aWQgbWFwTG9jYWxUb0NvbnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QqLCBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogcmVwYWludENvbnRhaW5lciwgVHJhbnNmb3JtU3RhdGUmLCBib29sKiB3YXNGaXhl
ZCA9IDApOworICAgIHN0YXRpYyBjb25zdCBSZW5kZXJPYmplY3QqIHB1c2hNYXBwaW5nVG9Db250
YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGFu
Y2VzdG9yVG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJik7CiAKICAgICAvLyBTaGFyZWQgYmV0
d2VlbiBTVkcgcmVuZGVyZXJzIGFuZCByZXNvdXJjZXMuCiAgICAgc3RhdGljIHZvaWQgYXBwbHlT
dHJva2VTdHlsZVRvQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBSZW5kZXJTdHlsZSos
IGNvbnN0IFJlbmRlck9iamVjdCopOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY29tcG9zaXRp
bmcvZ2VvbWV0cnkvY29tcG9zaXRlZC1pbi1jb2x1bW5zLWV4cGVjdGVkLnBuZyBiL0xheW91dFRl
c3RzL2NvbXBvc2l0aW5nL2dlb21ldHJ5L2NvbXBvc2l0ZWQtaW4tY29sdW1ucy1leHBlY3RlZC5w
bmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDMxZDQ0YzlkZTJjMGQ1NzBhMmY3ZWI1OWZiZTI0MjZhN2Q2MzRjYgpH
SVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMzQ4NQp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHl+eVV7
K3ZZVjJhPmkxQiVRbFlicFJ6bmtCOWdDQ000NyQ9U3VGeGVPTk8KelglO0R8RE1xRzdoTihzZCQ+
d0lKcmZHP1okJWNsOERWOWQmI3VpPjJMVXVzSV5nVWYxTG5gTEh5P1orTXY0ZW52Cno8NXtPbExz
TSVMd2A8YWt1SlNNM1lnZTc/YihDaWpAPmgxcVBKMEhsT3lFY1BTMClDQTFKNEQzX0IqJlcwUFU0
egp6MVBZfEVhNDt9VDVRR2NQe0MpOTIpYW8wfDM+LWd4PnAjZTlYRHIlWDhOcW5LYG9tSkM0P0tU
WnhFVUJ1YTBvQ2sKekNANEVIRmZ7WnFGZnVTMEZ8cHRoe1BTeDVoNUdGSy07TWo1d3tPYjVlTnxo
PGhXJGJNezcqNnI2LVJoYz9aeFZ0CnpWSiNTR1l8UEpvWkleNWgxQjNubll1TzY2SllzXkJfYG9N
IzwoPjAzSW1uVDg/ZmI1KCo1YUQ4U0VXQys5WHJsLQp6MDJFYWg1Sl9aTSN8bDwmNHo4JUdVMm9q
S2BgcT1JeV5RJThjMkFQR3pXO3F5YEByUX0rdXB0c1d6YyloaEJHJTMKenBDRT5gJH43fSp3bGlu
bjwjU19iNVB2WTImeFk5P1VieFhZPC1TWG8reEd0ViU7Tns2Wi1PRjZYZGQmMiZIan5xCnozXnRF
T0JaK1IyXno3ZzRnPEclMXpYI1MtSDRUUnVYM2s5RlhKQn4xe0RWXnJyUVZ9KyhtPDxxTXtPU3Nr
Yng/dApuTW5pcnk8UVpgRTI4Syh5XnBqdENYN0d4NklVK1pKSzR0SzlePmJQMGwrWGtLKnN1JW0K
CmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NvbXBvc2l0
aW5nL2dlb21ldHJ5L2NvbXBvc2l0ZWQtaW4tY29sdW1ucy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9jb21wb3NpdGluZy9nZW9tZXRyeS9jb21wb3NpdGVkLWluLWNvbHVtbnMtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjJiNjQ3MzY3MmViMWIyNWM3MGJlNjA3MmVjNTZiMWMzMzEwYzg4ZGEK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9nZW9tZXRyeS9jb21w
b3NpdGVkLWluLWNvbHVtbnMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzMgQEAKKyAoR3JhcGhp
Y3NMYXllcgorICAoYm91bmRzIDgwMC4wMCA2MDAuMDApCisgIChjaGlsZHJlbiAxCisgICAgKEdy
YXBoaWNzTGF5ZXIKKyAgICAgIChib3VuZHMgODAwLjAwIDYwMC4wMCkKKyAgICAgIChjaGlsZHJl
biAyCisgICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAgKHBvc2l0aW9uIDE0LjAwIDE2
Mi4wMCkKKyAgICAgICAgICAoYm91bmRzIDIxMC4wMCA2MC4wMCkKKyAgICAgICAgICAoZHJhd3ND
b250ZW50IDEpCisgICAgICAgICAgKGNoaWxkcmVuIDEKKyAgICAgICAgICAgIChHcmFwaGljc0xh
eWVyCisgICAgICAgICAgICAgIChib3VuZHMgNjAuMDAgNjAuMDApCisgICAgICAgICAgICAgIChk
cmF3c0NvbnRlbnQgMSkKKyAgICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgICAgICkKKyAg
ICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAocG9zaXRpb24gMjcyLjAwIDg4LjAwKQor
ICAgICAgICAgIChib3VuZHMgMjEwLjAwIDYwLjAwKQorICAgICAgICAgIChkcmF3c0NvbnRlbnQg
MSkKKyAgICAgICAgICAoY2hpbGRyZW4gMQorICAgICAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAg
ICAgICAgICAgICAgKGJvdW5kcyA2MC4wMCA2MC4wMCkKKyAgICAgICAgICAgICAgKGRyYXdzQ29u
dGVudCAxKQorICAgICAgICAgICAgKQorICAgICAgICAgICkKKyAgICAgICAgKQorICAgICAgKQor
ICAgICkKKyAgKQorKQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy9nZW9t
ZXRyeS9jb21wb3NpdGVkLWluLWNvbHVtbnMuaHRtbCBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5n
L2dlb21ldHJ5L2NvbXBvc2l0ZWQtaW4tY29sdW1ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRhZGY4M2Q0
ZTVjNTkyM2QzNjM2NmQ4NmEwYjQ4NTk4ZDEwMTQ3YTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9jb21wb3NpdGluZy9nZW9tZXRyeS9jb21wb3NpdGVkLWluLWNvbHVtbnMuaHRtbApA
QCAtMCwwICsxLDcyIEBACis8IURPQ1RZUEUgaHRtbD4KKworPGh0bWw+CisgIDxzdHlsZT4KKyAg
ICBib2R5IHsKKyAgICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgfQorICAgIC5jb250YWluZXIg
eworICAgICAgd2lkdGg6IDUwMHB4OworICAgICAgaGVpZ2h0OiAzMDBweDsKKyAgICAgIC13ZWJr
aXQtY29sdW1uLWNvdW50OiAyOworICAgICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CisgICAg
fQorICAgIAorICAgIC5ibG9jayB7CisgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgICAg
ICB3aWR0aDogMjAwcHg7CisgICAgICBoZWlnaHQ6IDUwcHg7CisgICAgICBtYXJnaW46IDEwcHg7
CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBzaWx2ZXI7CisgICAgICBvdXRsaW5lOiA1cHggc29s
aWQgdHJhbnNwYXJlbnQ7IC8qIGluY3JlYXNlcyBjb21wb3NpdGluZyBsYXllciBib3VuZHMgdG8g
dGVzdCBib3VuZHMgbWF0aCAqLworICAgIH0KKyAgICAKKyAgICAuY29tcG9zaXRlZCB7CisgICAg
ICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKKyAgICAgIGJhY2tncm91bmQtY29s
b3I6IGJsdWU7CisgICAgfQorICAgIAorICAgIC5ib3ggeworICAgICAgaGVpZ2h0OiA1MHB4Owor
ICAgICAgd2lkdGg6IDUwcHg7CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsKKyAgICB9
CisKKyAgICAjbGF5ZXJzIHsKKyAgICAgIG9wYWNpdHk6IDA7IC8qIGhpZGUgZnJvbSBwaXhlbCBy
ZXN1bHQgKi8KKyAgICB9CisgIDwvc3R5bGU+CisgIDxzY3JpcHQ+CisgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQodHJ1ZSk7CisgICAgCisgICAgZnVuY3Rpb24gZHVtcExheWVycygpCisgICAgeworICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2xheWVycycpLmlubmVyVGV4dCA9IGxheW91dFRlc3RDb250cm9sbGVyLmxheWVy
VHJlZUFzVGV4dCgpOworICAgIH0KKyAgICAKKyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcign
bG9hZCcsIGR1bXBMYXllcnMsIGZhbHNlKTsKKyAgPC9zY3JpcHQ+Cis8aGVhZD4KKzwvaGVhZD4K
Kzxib2R5PgorCisgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgPGRpdiBjbGFzcz0iYmxv
Y2siPjwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImJsb2NrIj48L2Rpdj4KKyAgICA8ZGl2IGNsYXNz
PSJjb21wb3NpdGVkIGJsb2NrIj4KKyAgICAgIDxkaXYgY2xhc3M9ImNvbXBvc2l0ZWQgYm94Ij48
L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJibG9jayI+PC9kaXY+CisgICAgPGRp
diBjbGFzcz0iYmxvY2siPjwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImNvbXBvc2l0ZWQgYmxvY2si
PgorICAgICAgPGRpdiBjbGFzcz0iY29tcG9zaXRlZCBib3giPjwvZGl2PgorICAgIDwvZGl2Pgor
ICAgIDxkaXYgY2xhc3M9ImJsb2NrIj48L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJibG9jayI+PC9k
aXY+CisgIDwvZGl2PgorICAKKzxwcmUgaWQ9ImxheWVycyI+TGF5ZXIgdHJlZSBnb2VzIGhlcmUg
aW4gRFJUPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9j
b21wb3NpdGluZy9nZW9tZXRyeS9mbGlwcGVkLXdyaXRpbmctbW9kZS1leHBlY3RlZC5wbmcgYi9M
YXlvdXRUZXN0cy9jb21wb3NpdGluZy9nZW9tZXRyeS9mbGlwcGVkLXdyaXRpbmctbW9kZS1leHBl
Y3RlZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZjdmNDJhOGJiYzNiNWU1NGJiMWU5YzY1Y2U4YTljNjFiMTdl
MzM0NApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMzQwMgp6Y21lQVNATj8ob2xIeWB1VkJxIWlh
MHl+eVV7K3ZZVjJhPmkxQiVRbFlicFJ6bmtCOWdDQ000NyQ9U3VGeGVWck0KekRGIUwyI3pgaW9o
Tmd4Vk52N3Q4JHJpPippSSRkemk3QlMwJHduOEFuWiszeGM8eSsqSUVHWnJkMylDfD4jJjE+CnpM
IWpvNXhKd3N7d3A9fUZtZ19YRFZZPEcwPEB5cHNERlojYj04SmFFPVNWWCFJNlFkIWorS0YtO2xG
Yk8mYHdFNAp6Q0kqSFM3N2hsNjM0I2hoTmpHZVEmbypYVkQyLWsxIztFX3dxSGxMTjE0RXNxeEJ2
ciNnMGNoOW9FYD43MV9tUTAKejc2eWhCOTVAOXh6d3Yjc0FAX0ZLeW45cHJkTDcmR0V7PjdtMFhK
NE57K3pVNUlSOX5zUnNOakEjJnRQJHw2a09gCnp8TCFQMXw2fUxJM09SLVkjVzYlJU54YjdtUlQy
fTBNMXw2dTsmVkhiZk40ZWgqb1ZffHBCSH1Uc3hkbHQ+O0JXaQp6QTlhaWsmdiMlO1RVWmt1QXdq
dXZ7UjgpbmorSzR+PUJHVWRTa24+aXZgQ2FrTXpzJVVNJSNTZV43Jm5GMV9wLXoKeiZEezlRQ1BH
UHRLKyFnO290TyQ+Rz9ZZHxYKjMoK1k5NVd8aj92c1BubWVlVUpBTnx3Jm9JcDFWMzM7eVl6USFU
Ck15ODV9U2I0cTllMExBdjttSCs/JQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvZmxpcHBlZC13cml0aW5nLW1vZGUt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvZmxpcHBlZC13
cml0aW5nLW1vZGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmOWRjM2U2Yzk0ZmFkY2I4MzQ5
ZmYzMTk1MWI4MzExM2ZkZjk3NzAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jb21w
b3NpdGluZy9nZW9tZXRyeS9mbGlwcGVkLXdyaXRpbmctbW9kZS1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwyNCBAQAorKEdyYXBoaWNzTGF5ZXIKKyAgKGJvdW5kcyA4MDAuMDAgNjAwLjAwKQorICAo
Y2hpbGRyZW4gMQorICAgIChHcmFwaGljc0xheWVyCisgICAgICAoYm91bmRzIDgwMC4wMCA2MDAu
MDApCisgICAgICAoY2hpbGRyZW4gMQorICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAg
IChwb3NpdGlvbiAxOC4wMCAxMC4wMCkKKyAgICAgICAgICAoYm91bmRzIDI1MC4wMCAyMDAuMDAp
CisgICAgICAgICAgKGRyYXdzQ29udGVudCAxKQorICAgICAgICAgIChjaGlsZHJlbiAxCisgICAg
ICAgICAgICAoR3JhcGhpY3NMYXllcgorICAgICAgICAgICAgICAocG9zaXRpb24gMzUuMDAgMTAu
MDApCisgICAgICAgICAgICAgIChhbmNob3IgMC43NCAwLjUwKQorICAgICAgICAgICAgICAoYm91
bmRzIDE5NS4wMCAxMDAuMDApCisgICAgICAgICAgICAgIChkcmF3c0NvbnRlbnQgMSkKKyAgICAg
ICAgICAgICkKKyAgICAgICAgICApCisgICAgICAgICkKKyAgICAgICkKKyAgICApCisgICkKKykK
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvZ2VvbWV0cnkvZmxpcHBlZC13
cml0aW5nLW1vZGUuaHRtbCBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL2dlb21ldHJ5L2ZsaXBw
ZWQtd3JpdGluZy1tb2RlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGQ5OGExMWNlMGRhMTRhMGVlNjQ0ZmJj
MmQ1YzQ1NTZmMTAwOTFiYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2NvbXBvc2l0
aW5nL2dlb21ldHJ5L2ZsaXBwZWQtd3JpdGluZy1tb2RlLmh0bWwKQEAgLTAsMCArMSw2OSBAQAor
PCFET0NUWVBFIGh0bWw+CisKKzxodG1sPgorPGhlYWQ+CisgIDxzdHlsZT4KKyAgICBib2R5IHsK
KyAgICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgfQorICAgIC5mbGlwcGVkIHsKKyAgICAgIG1h
cmdpbjogMTBweDsKKyAgICAgIGhlaWdodDogMjAwcHg7CisgICAgICB3aWR0aDogMjUwcHg7Cisg
ICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBzaWx2ZXI7CisgICAgICAtd2Via2l0LXdyaXRpbmctbW9k
ZTogdmVydGljYWwtcmw7CisgICAgfQorICAgIAorICAgIC5ib3ggeworICAgICAgaGVpZ2h0OiAx
MDBweDsKKyAgICAgIHdpZHRoOiAxMDBweDsKKyAgICAgIG1hcmdpbjogMTBweCAyMHB4OworICAg
ICAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTsKKyAgICB9CisgICAgCisgICAgLmNvbXBvc2l0ZWQg
eworICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7CisgICAgfQorICAgIAor
ICAgIC5ibG9jayB7CisgICAgICB3aWR0aDogMjBweDsKKyAgICAgIGhlaWdodDogODBweDsKKyAg
ICAgIG1hcmdpbjogNXB4OworICAgICAgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47CisgICAgfQor
ICAgIAorICAgICNsYXllcnMgeworICAgICAgb3BhY2l0eTogMDsgLyogaGlkZSBmcm9tIHBpeGVs
IHJlc3VsdCAqLworICAgIH0KKyAgPC9zdHlsZT4KKyAgPHNjcmlwdD4KKyAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCh0cnVlKTsKKyAgICAKKyAgICBmdW5jdGlvbiBkdW1wTGF5ZXJzKCkKKyAgICB7CisgICAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnbGF5ZXJzJykuaW5uZXJUZXh0ID0gbGF5b3V0VGVzdENvbnRyb2xsZXIubGF5
ZXJUcmVlQXNUZXh0KCk7CisgICAgfQorICAgIAorICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVy
KCdsb2FkJywgZHVtcExheWVycywgZmFsc2UpOworICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorCisgIDxkaXYgY2xhc3M9ImNvbXBvc2l0ZWQgZmxpcHBlZCI+CisgICAgPGRpdiBjbGFzcz0i
Y29tcG9zaXRlZCBib3giPgorICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPjwvZGl2PgorICAgICAg
PGRpdiBjbGFzcz0iYmxvY2siPjwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPjwvZGl2
PgorICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPjwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0iYmxv
Y2siPjwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPjwvZGl2PgorICAgICAgPGRpdiBj
bGFzcz0iYmxvY2siPjwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPjwvZGl2PgorICAg
IDwvZGl2PgorICA8L2Rpdj4KKworICA8cHJlIGlkPSJsYXllcnMiPkxheWVyIHRyZWUgZ29lcyBo
ZXJlIGluIERSVDwvcHJlPgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="150625"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>