<?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>60318</bug_id>
          
          <creation_ts>2011-05-05 17:08:15 -0700</creation_ts>
          <short_desc>[meta] Switch away from integers representing pixels for layout/event handling/rendering</short_desc>
          <delta_ts>2012-06-28 10:35:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>44412</dependson>
    
    <dependson>60317</dependson>
    
    <dependson>60408</dependson>
    
    <dependson>60409</dependson>
    
    <dependson>60490</dependson>
    
    <dependson>60585</dependson>
    
    <dependson>60591</dependson>
    
    <dependson>60592</dependson>
    
    <dependson>60596</dependson>
    
    <dependson>60663</dependson>
    
    <dependson>60671</dependson>
    
    <dependson>60713</dependson>
    
    <dependson>60718</dependson>
    
    <dependson>60739</dependson>
    
    <dependson>60743</dependson>
    
    <dependson>60783</dependson>
    
    <dependson>60789</dependson>
    
    <dependson>60806</dependson>
    
    <dependson>61003</dependson>
    
    <dependson>61146</dependson>
    
    <dependson>61156</dependson>
    
    <dependson>61230</dependson>
    
    <dependson>61383</dependson>
    
    <dependson>61414</dependson>
    
    <dependson>61493</dependson>
    
    <dependson>61497</dependson>
    
    <dependson>61562</dependson>
    
    <dependson>61574</dependson>
    
    <dependson>61575</dependson>
    
    <dependson>61580</dependson>
    
    <dependson>61794</dependson>
    
    <dependson>61804</dependson>
    
    <dependson>61818</dependson>
    
    <dependson>61874</dependson>
    
    <dependson>61876</dependson>
    
    <dependson>61883</dependson>
    
    <dependson>61884</dependson>
    
    <dependson>61891</dependson>
    
    <dependson>61893</dependson>
    
    <dependson>61896</dependson>
    
    <dependson>61906</dependson>
    
    <dependson>61968</dependson>
    
    <dependson>62031</dependson>
    
    <dependson>62032</dependson>
    
    <dependson>62033</dependson>
    
    <dependson>62035</dependson>
    
    <dependson>62037</dependson>
    
    <dependson>62045</dependson>
    
    <dependson>62058</dependson>
    
    <dependson>62059</dependson>
    
    <dependson>62077</dependson>
    
    <dependson>62130</dependson>
    
    <dependson>62132</dependson>
    
    <dependson>62133</dependson>
    
    <dependson>62134</dependson>
    
    <dependson>62137</dependson>
    
    <dependson>62140</dependson>
    
    <dependson>62144</dependson>
    
    <dependson>62145</dependson>
    
    <dependson>62146</dependson>
    
    <dependson>62151</dependson>
    
    <dependson>62156</dependson>
    
    <dependson>62158</dependson>
    
    <dependson>62167</dependson>
    
    <dependson>62170</dependson>
    
    <dependson>62172</dependson>
    
    <dependson>62176</dependson>
    
    <dependson>62177</dependson>
    
    <dependson>62312</dependson>
    
    <dependson>62313</dependson>
    
    <dependson>63567</dependson>
    
    <dependson>63656</dependson>
    
    <dependson>68744</dependson>
    
    <dependson>71143</dependson>
    
    <dependson>72075</dependson>
    
    <dependson>76571</dependson>
    
    <dependson>77783</dependson>
    
    <dependson>77798</dependson>
    
    <dependson>77891</dependson>
    
    <dependson>77905</dependson>
    
    <dependson>77914</dependson>
    
    <dependson>77918</dependson>
    
    <dependson>78040</dependson>
    
    <dependson>78054</dependson>
    
    <dependson>78262</dependson>
    
    <dependson>78511</dependson>
    
    <dependson>78630</dependson>
    
    <dependson>78647</dependson>
    
    <dependson>78747</dependson>
    
    <dependson>79283</dependson>
    
    <dependson>79315</dependson>
    
    <dependson>80039</dependson>
    
    <dependson>80051</dependson>
    
    <dependson>80175</dependson>
    
    <dependson>80437</dependson>
    
    <dependson>80539</dependson>
    
    <dependson>80545</dependson>
    
    <dependson>80632</dependson>
    
    <dependson>80655</dependson>
    
    <dependson>80715</dependson>
    
    <dependson>80881</dependson>
    
    <dependson>80894</dependson>
    
    <dependson>80918</dependson>
    
    <dependson>81016</dependson>
    
    <dependson>81017</dependson>
    
    <dependson>81038</dependson>
    
    <dependson>81057</dependson>
    
    <dependson>81178</dependson>
    
    <dependson>81538</dependson>
    
    <dependson>81572</dependson>
    
    <dependson>81754</dependson>
    
    <dependson>81775</dependson>
    
    <dependson>81789</dependson>
    
    <dependson>81921</dependson>
    
    <dependson>82179</dependson>
    
    <dependson>82182</dependson>
    
    <dependson>82183</dependson>
    
    <dependson>82185</dependson>
    
    <dependson>82196</dependson>
    
    <dependson>82206</dependson>
    
    <dependson>82210</dependson>
    
    <dependson>82213</dependson>
    
    <dependson>82219</dependson>
    
    <dependson>82221</dependson>
    
    <dependson>82343</dependson>
    
    <dependson>82344</dependson>
    
    <dependson>82403</dependson>
    
    <dependson>82498</dependson>
    
    <dependson>82535</dependson>
    
    <dependson>82540</dependson>
    
    <dependson>82549</dependson>
    
    <dependson>82561</dependson>
    
    <dependson>82765</dependson>
    
    <dependson>82899</dependson>
    
    <dependson>83017</dependson>
    
    <dependson>83041</dependson>
    
    <dependson>83054</dependson>
    
    <dependson>83073</dependson>
    
    <dependson>83089</dependson>
    
    <dependson>83138</dependson>
    
    <dependson>83147</dependson>
    
    <dependson>83154</dependson>
    
    <dependson>83157</dependson>
    
    <dependson>83169</dependson>
    
    <dependson>83278</dependson>
    
    <dependson>83343</dependson>
    
    <dependson>83366</dependson>
    
    <dependson>83376</dependson>
    
    <dependson>83491</dependson>
    
    <dependson>83497</dependson>
    
    <dependson>83507</dependson>
    
    <dependson>83602</dependson>
    
    <dependson>83604</dependson>
    
    <dependson>83621</dependson>
    
    <dependson>83726</dependson>
    
    <dependson>83803</dependson>
    
    <dependson>83848</dependson>
    
    <dependson>83929</dependson>
    
    <dependson>84063</dependson>
    
    <dependson>84098</dependson>
    
    <dependson>84175</dependson>
    
    <dependson>84191</dependson>
    
    <dependson>84209</dependson>
    
    <dependson>84264</dependson>
    
    <dependson>84283</dependson>
    
    <dependson>84288</dependson>
    
    <dependson>84472</dependson>
    
    <dependson>84496</dependson>
    
    <dependson>84801</dependson>
    
    <dependson>85146</dependson>
    
    <dependson>85214</dependson>
    
    <dependson>85217</dependson>
    
    <dependson>85222</dependson>
    
    <dependson>85239</dependson>
    
    <dependson>85248</dependson>
    
    <dependson>85249</dependson>
    
    <dependson>85392</dependson>
    
    <dependson>85393</dependson>
    
    <dependson>85396</dependson>
    
    <dependson>89572</dependson>
    
    <dependson>90097</dependson>
    
    <dependson>90169</dependson>
    
    <dependson>90173</dependson>
          <blocked>85303</blocked>
    
    <blocked>85532</blocked>
    
    <blocked>22759</blocked>
    
    <blocked>23170</blocked>
    
    <blocked>28804</blocked>
    
    <blocked>39884</blocked>
    
    <blocked>39924</blocked>
    
    <blocked>54018</blocked>
    
    <blocked>82529</blocked>
    
    <blocked>84616</blocked>
    
    <blocked>85534</blocked>
    
    <blocked>85651</blocked>
    
    <blocked>88259</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>behdad</cc>
    
    <cc>bugs.webkit.org-19b</cc>
    
    <cc>darin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>fsamuel</cc>
    
    <cc>gregsimon</cc>
    
    <cc>gustavo</cc>
    
    <cc>hyatt</cc>
    
    <cc>isherman</cc>
    
    <cc>jknotten</cc>
    
    <cc>leviw</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>pnormand</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>scheglov</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>399206</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-05 17:08:15 -0700</bug_when>
    <thetext>Using integers that represent pixels for layout leads to rounding errors when zooming or transforms are applied. This bug will track our progress towards replacing this with something that solves these problems. What this something is hasn&apos;t been determined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424600</commentid>
    <comment_count>1</comment_count>
      <attachid>98021</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-21 11:31:40 -0700</bug_when>
    <thetext>Created attachment 98021
zooming test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424601</commentid>
    <comment_count>2</comment_count>
      <attachid>98022</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-21 11:32:07 -0700</bug_when>
    <thetext>Created attachment 98022
perf test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424602</commentid>
    <comment_count>3</comment_count>
      <attachid>98023</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-21 11:32:21 -0700</bug_when>
    <thetext>Created attachment 98023
zoom perf test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424608</commentid>
    <comment_count>4</comment_count>
      <attachid>98025</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-21 11:36:23 -0700</bug_when>
    <thetext>Created attachment 98025
Proof of concept

I&apos;m attaching a proof of concept patch that&apos;s been tested on Mac and QT. This patch changes much, but not all of the rendering tree from integer offsets to floating point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426273</commentid>
    <comment_count>5</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-06-23 10:34:35 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=98025) [details]
&gt; Proof of concept
&gt; 
&gt; I&apos;m attaching a proof of concept patch that&apos;s been tested on Mac and QT. This patch changes much, but not all of the rendering tree from integer offsets to floating point.

FYI, this patch was tested with r88496.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435226</commentid>
    <comment_count>6</comment_count>
      <attachid>100367</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-07-11 15:17:43 -0700</bug_when>
    <thetext>Created attachment 100367
Patch switching LayoutUnit int -&gt; float. Do not review.

Patch for switching LayoutUnit over to float. It&apos;s too early to make the switch but it helps in identifying places we&apos;ve missed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611862</commentid>
    <comment_count>7</comment_count>
      <attachid>139264</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-04-27 13:47:01 -0700</bug_when>
    <thetext>Created attachment 139264
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611882</commentid>
    <comment_count>8</comment_count>
      <attachid>139264</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-04-27 14:05:52 -0700</bug_when>
    <thetext>Comment on attachment 139264
Patch

Attachment 139264 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12553343</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611887</commentid>
    <comment_count>9</comment_count>
      <attachid>139264</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-04-27 14:11:32 -0700</bug_when>
    <thetext>Comment on attachment 139264
Patch

Attachment 139264 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12567166</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611889</commentid>
    <comment_count>10</comment_count>
      <attachid>139264</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-04-27 14:13:06 -0700</bug_when>
    <thetext>Comment on attachment 139264
Patch

Attachment 139264 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12551311</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611894</commentid>
    <comment_count>11</comment_count>
      <attachid>139264</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-04-27 14:18:52 -0700</bug_when>
    <thetext>Comment on attachment 139264
Patch

Attachment 139264 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12567170</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611900</commentid>
    <comment_count>12</comment_count>
      <attachid>139280</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-04-27 14:29:42 -0700</bug_when>
    <thetext>Created attachment 139280
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611951</commentid>
    <comment_count>13</comment_count>
      <attachid>139280</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-04-27 15:34:40 -0700</bug_when>
    <thetext>Comment on attachment 139280
Patch

Attachment 139280 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12548366</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611966</commentid>
    <comment_count>14</comment_count>
      <attachid>139296</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-04-27 15:54:13 -0700</bug_when>
    <thetext>Created attachment 139296
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611981</commentid>
    <comment_count>15</comment_count>
      <attachid>139296</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-04-27 16:08:35 -0700</bug_when>
    <thetext>Comment on attachment 139296
Patch

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

&gt; Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp:816
&gt; +                } while (groupRemainingSpace &gt;= 1);

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612043</commentid>
    <comment_count>16</comment_count>
      <attachid>139296</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-04-27 17:28:50 -0700</bug_when>
    <thetext>Comment on attachment 139296
Patch

Attachment 139296 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12550411</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612060</commentid>
    <comment_count>17</comment_count>
      <attachid>139296</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-04-27 18:19:59 -0700</bug_when>
    <thetext>Comment on attachment 139296
Patch

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

I think a substantial fraction of this patch could be landed separately, first. Even though we’ve carved off so many pieces before, I still think there are quite a few here.

&gt; Source/WebCore/css/CSSPrimitiveValue.h:64
&gt; -template&lt;typename T&gt; inline T roundForImpreciseConversion(double value)
&gt; -{
&gt;      // Dimension calculations are imprecise, often resulting in values of e.g.
&gt;      // 44.99998.  We need to go ahead and round if we&apos;re really close to the
&gt;      // next integer value.
&gt; +template&lt;typename T&gt; inline T roundForImpreciseConversion(double value)
&gt; +{
&gt;      value += (value &lt; 0) ? -0.01 : +0.01;
&gt;      return ((value &gt; std::numeric_limits&lt;T&gt;::max()) || (value &lt; std::numeric_limits&lt;T&gt;::min())) ? 0 : static_cast&lt;T&gt;(value);
&gt;  }
&gt;  
&gt; +template&lt;&gt; inline float roundForImpreciseConversion(double value)
&gt; +{
&gt; +    double ceiledValue = ceil(value);
&gt; +    double proximityToNextInt = ceiledValue - value;
&gt; +    if (proximityToNextInt &lt;= 0.01 &amp;&amp; value &gt; 0)
&gt; +        return static_cast&lt;float&gt;(ceiledValue);
&gt; +    if (proximityToNextInt &gt;= 0.99 &amp;&amp; value &lt; 0)
&gt; +        return static_cast&lt;float&gt;(floor(value));
&gt; +    return static_cast&lt;float&gt;(value);
&gt; +}
&gt; +

This change is one example.

Also, I don’t understand why the comment is indented now that it&apos;s outside a function.

&gt; Source/WebCore/page/SpatialNavigation.cpp:648
&gt; -        otherAxisDistance = abs(exitPoint.y() - entryPoint.y());
&gt; +        otherAxisDistance = (exitPoint.y() - entryPoint.y()).abs();

Can’t we overload the abs function so you can call it rather than having to call a member function? I don’t think we should need to change this at all.

&gt; Source/WebCore/platform/FractionalLayoutUnit.h:45
&gt; +#if ENABLE(SUBPIXEL_LAYOUT)
&gt;  static const int kFixedPointDenominator = 60;
&gt; +#else
&gt; +static const int kFixedPointDenominator = 1;
&gt; +#endif

Seems like we could land all these FractionalLayoutUnit.h changes separately, first.

&gt; Source/WebCore/platform/graphics/FractionalLayoutRect.cpp:149
&gt;  FractionalLayoutRect enclosingFractionalLayoutRect(const FloatRect&amp; rect)
&gt;  {
&gt; +#if ENABLE(SUBPIXEL_LAYOUT)
&gt;      return FractionalLayoutRect(rect.x(), rect.y(),
&gt;                       rect.maxX() - rect.x() + FractionalLayoutUnit::epsilon(),
&gt;                       rect.maxY() - rect.y() + FractionalLayoutUnit::epsilon());
&gt; +#else
&gt; +    return enclosingIntRect(rect);
&gt; +#endif
&gt;  }

Seems like this could land separately, first.

&gt; Source/WebCore/platform/qt/RenderThemeQt.cpp:740
&gt; -    IntRect b = toRenderBox(o)-&gt;contentBoxRect();
&gt; +    IntRect b = pixelSnappedIntRect(toRenderBox(o)-&gt;contentBoxRect());

Can’t we land this separately, first?

&gt; Source/WebCore/platform/win/PopupMenuWin.cpp:658
&gt; -                textX += minimumValueForLength(itemStyle.textIndent(), itemRect.width());
&gt; +                textX += minimumIntValueForLength(itemStyle.textIndent(), itemRect.width());

Can’t we land this separately, first?

&gt; Source/WebCore/rendering/InlineFlowBox.cpp:597
&gt; -        setLogicalTop(top + maxAscent - fontMetrics.ascent(baselineType));
&gt; +        setLogicalTop((top + maxAscent - fontMetrics.ascent(baselineType)).round());

Can’t we make round a free function instead of a member function? And overload it for int to do nothing? And then we could land this separately, first.

&gt; Source/WebCore/rendering/PaintInfo.h:101
&gt; -    static IntRect infiniteRect() { return IntRect(INT_MIN / 2, INT_MIN / 2, INT_MAX, INT_MAX); }
&gt; +    static IntRect infiniteRect() { return IntRect(LayoutRect::infiniteRect()); }

I don’t understand this change.

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:1760
&gt; -    LayoutUnit logicalBottom = lastLine-&gt;lineBottomWithLeading() + abs(lineDelta);
&gt; +    LayoutUnit logicalBottom = lastLine-&gt;lineBottomWithLeading() + lineDelta.abs();

Again, if we just overload a function named abs we could do this separately, first.

&gt; Source/WebCore/rendering/RenderBoxModelObject.cpp:1240
&gt; -        geometry.setPhaseX(geometry.tileSize().width() ? geometry.tileSize().width() - (xPosition + left) % geometry.tileSize().width() : 0);
&gt; +        geometry.setPhaseX(geometry.tileSize().width() ? geometry.tileSize().width() - lround(xPosition + left) % geometry.tileSize().width() : 0);

Can’t we make an overloaded function named round for use here?

&gt;&gt; Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp:816
&gt;&gt; +                } while (groupRemainingSpace &gt;= 1);
&gt; 
&gt; ?

Seems like you could land this change separately, first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612220</commentid>
    <comment_count>18</comment_count>
      <attachid>139296</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-28 02:52:56 -0700</bug_when>
    <thetext>Comment on attachment 139296
Patch

Attachment 139296 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12550528</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>614740</commentid>
    <comment_count>19</comment_count>
      <attachid>139897</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-05-02 15:49:42 -0700</bug_when>
    <thetext>Created attachment 139897
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>614822</commentid>
    <comment_count>20</comment_count>
      <attachid>139897</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-05-02 16:50:14 -0700</bug_when>
    <thetext>Comment on attachment 139897
Patch

I&apos;m concerned about the Release/Debug test differences, but that&apos;s really a separate bug.  I think we&apos;re ready to pull this trigger.  I look forward to the real &quot;enable&quot; patch soon.  You should glance at the perf bots tomorrow just to make sure you didn&apos;t slow down the world. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615427</commentid>
    <comment_count>21</comment_count>
      <attachid>140054</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-05-03 11:15:37 -0700</bug_when>
    <thetext>Created attachment 140054
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615479</commentid>
    <comment_count>22</comment_count>
      <attachid>140063</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-05-03 12:09:18 -0700</bug_when>
    <thetext>Created attachment 140063
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615480</commentid>
    <comment_count>23</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-05-03 12:10:14 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Created an attachment (id=140063) [details]
&gt; Patch for landing

(Proactively fixing a build error due to static initializers introduced in r115895)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615606</commentid>
    <comment_count>24</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2012-05-03 14:06:44 -0700</bug_when>
    <thetext>Committed r116009: &lt;http://trac.webkit.org/changeset/116009&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616145</commentid>
    <comment_count>25</comment_count>
      <attachid>140063</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-05-04 06:36:54 -0700</bug_when>
    <thetext>Comment on attachment 140063
Patch for landing

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

&gt; Source/WebCore/rendering/LayoutTypes.h:118
&gt; +    return FractionalLayoutUnit(value);

As far as I can tell, this doesn&apos;t do any rounding, it returns the floor. All the FractionalLayout types needs rounding functions similar to those of the Int types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616152</commentid>
    <comment_count>26</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-05-04 06:40:21 -0700</bug_when>
    <thetext>There is an additional bug that should be solved while rounding is fixed. In FractionalLayoutUnit the static function epsilon will always return 0 because the division performed is an integer division not a float division. This is relevant because proper rounding needs to add half epsilon to the floating point values before converting them to fixed point values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616287</commentid>
    <comment_count>27</comment_count>
      <attachid>140063</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-05-04 09:20:47 -0700</bug_when>
    <thetext>Comment on attachment 140063
Patch for landing

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

&gt;&gt; Source/WebCore/rendering/LayoutTypes.h:118
&gt;&gt; +    return FractionalLayoutUnit(value);
&gt; 
&gt; As far as I can tell, this doesn&apos;t do any rounding, it returns the floor. All the FractionalLayout types needs rounding functions similar to those of the Int types.

When SUBPIXEL_LAYOUT is enabled it will be floored to the nearest fraction which is sufficiently precise. The lround case below is a stop-gap measure to accommodate the case where SUBPIXEL_LAYOUT is disabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617223</commentid>
    <comment_count>28</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-06 16:39:47 -0700</bug_when>
    <thetext>It appears that this patch has caused 15-30% performance regressions on various page loading tests:

http://webkit-perf.appspot.com/graph.html#tests=[[476025,2001,963028]]&amp;sel=1336044324906.6218,1336124380029.0154,295.1914893617021,416.1276595744681&amp;displayrange=7&amp;datatype=running

http://webkit-perf.appspot.com/graph.html#tests=[[472030,2001,3001]]&amp;sel=1336071584445.428,1336135189885.1377,614.2978723404256,724.2127659574468&amp;displayrange=7&amp;datatype=running

http://webkit-perf.appspot.com/graph.html#tests=[[363057,2001,963028]]&amp;sel=1336077620237.7356,1336083048782.157,625.8008148483477,815.3807152557719&amp;displayrange=7&amp;datatype=running

and several other tests regressed around this changeset.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617226</commentid>
    <comment_count>29</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-06 16:49:18 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; It appears that this patch has caused 15-30% performance regressions on various page loading tests:

Given that level of performance regression we need to roll this out as soon as possible.

On the other hand, most of what is in this patch can be landed separately (yes, even now after all those previous times we did that sort of thing):

SVGRenderTreeAsText.cpp
RenderMathMLBlock.cpp
RenderTreeAsText.h
part or perhaps all of RenderTreeAsText.cpp
RenderLayer.h
PaintInfo.h (maybe)

And perhaps even more. That’s worth doing to reduce the diff even more later when we solve the performance regression problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617232</commentid>
    <comment_count>30</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-06 17:02:42 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #28)
&gt; &gt; It appears that this patch has caused 15-30% performance regressions on various page loading tests:
&gt; 
&gt; Given that level of performance regression we need to roll this out as soon as possible.

I&apos;ll be cautious about that since page loading tests aren&apos;t as robust as I have hoped for it to be. I think we need to at least verify that these regressions are real (e.g. by running the tests locally and comparing results).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618019</commentid>
    <comment_count>31</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-05-07 15:33:38 -0700</bug_when>
    <thetext>I&apos;ve uploaded a patch that I believe will fix the performance regression on bug 85834. If that fails to adequately address the regression we&apos;ll roll out this change and re-land it piece by piece as suggested by Darin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621004</commentid>
    <comment_count>32</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-05-10 14:40:50 -0700</bug_when>
    <thetext>Performance update

So far we haven&apos;t seen any performance regressions from this change on any of the page load tests/page cyclers [1] apart from a small regression on the chromium http bloat test [2] that might have been caused by this change. We&apos;ll continue to monitor the situation.

We are, however, seeing a 5-10% regression - down from slightly higher prior to r116392 - on a perf-o-matic micro-benchmark [3] testing layout of nested floats.
We are currently looking into this and will have another update within the next couple of days.

1: http://build.chromium.org/f/chromium/perf/dashboard/overview.html?graph=times
2: http://build.chromium.org/f/chromium/perf/linux-release-webkit-latest/bloat-http/report.html?history=300&amp;rev=-1
3: http://webkit-perf.appspot.com/graph.html#tests=[[472030,2001,32196],[472030,2001,173262],[472030,2001,3001]]&amp;sel=1335969265834.5168,1336672079276&amp;displayrange=30&amp;datatype=running</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621811</commentid>
    <comment_count>33</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-05-11 11:01:45 -0700</bug_when>
    <thetext>Performance update

The potential regression on the http bloat test has been determined
not to be an issue. According to the original author it should only be
used to measure memory usage. Timing data reported is inaccurate and
reportedly irrelevant.

As for the nested floats micro-benchmark we have confirmed that it is
a real regression caused by this change. However, that benchmark
intentionally stresses a code path that is rarely triggered in a
real-world scenario and as such is of limited use. Optimizing that
code path based on the benchmark would likely have negative
performance implications for the common case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623227</commentid>
    <comment_count>34</comment_count>
      <attachid>141771</attachid>
    <who name="Michael Brüning">michael.bruning</who>
    <bug_when>2012-05-14 12:45:44 -0700</bug_when>
    <thetext>Created attachment 141771
Patch. Minor ChangeLog cleanup.

Minor ChangeLog cleanup.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>98021</attachid>
            <date>2011-06-21 11:31:40 -0700</date>
            <delta_ts>2011-06-21 11:31:40 -0700</delta_ts>
            <desc>zooming test case</desc>
            <filename>zoom.html</filename>
            <type>text/html</type>
            <size>1657</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KICAgIDx0aXRsZT5sYXlvdXQgem9vbSB0ZXN0
PC90aXRsZT4KICAgIDxzdHlsZT4gCiAgICAgICAgI3Rlc3QgewogICAgICAgICAgICB3aWR0aDog
NTAwcHg7CiAgICAgICAgICAgIGhlaWdodDogMTUwMHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5k
OiBza3libHVlOwogICAgICAgIH0KICAgICAgICAjdGVzdCA+IGRpdiB7CiAgICAgICAgICAgIGJh
Y2tncm91bmQ6IG5hdnk7CiAgICAgICAgICAgIGhlaWdodDogMTVweDsKICAgICAgICB9CiAgICA8
L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgogICAgPGRpdiBpZD0idGVzdCI+PC9kaXY+CiAgICA8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KPC9ib2R5Pgo8c2NyaXB0PgogICAgdmFyIHRlc3RFbGVtZW50
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QnKTsKICAgIHZhciBjb25zb2xlRWxlbWVu
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJyk7CgogICAgZnVuY3Rpb24gaW5p
dCgpCiAgICB7CiAgICAgICAgdGVzdEVsZW1lbnQuaW5uZXJIVE1MID0gJyc7CiAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDA7IGkrKykKICAgICAgICAgICAgdGVzdEVsZW1lbnQuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOwogICAgfQoKICAgIGZ1bmN0aW9u
IHRlc3Qoem9vbSkKICAgIHsKICAgICAgICB0ZXN0RWxlbWVudC5zdHlsZS56b29tID0gem9vbSAr
ICclJzsKICAgICAgICAKICAgICAgICB2YXIgbGFzdEVsZW1lbnRCb3R0b20gPSB0ZXN0RWxlbWVu
dC5sYXN0Q2hpbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tOwogICAgICAgIHZhciBj
b250YWluZXJCb3R0b20gPSB0ZXN0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0
b207CiAgICAgICAgaWYgKE1hdGguYWJzKGxhc3RFbGVtZW50Qm90dG9tIC0gY29udGFpbmVyQm90
dG9tKSA8IDAuMDEpCiAgICAgICAgICAgIGxvZygnUEFTUzogV2l0aCB6b29tIG9mICcgKyB6b29t
ICsgJyUgYm90dG9tIGVkZ2Ugb2YgbGFzdCBjaGlsZCBsaW5lcyB1cCB3aXRoIGJvdHRvbSBlZGdl
IG9mIGNvbnRhaW5lci4nKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGxvZygnRkFJTDogV2l0
aCB6b29tIG9mICcgKyB6b29tICsgJyUgYm90dG9tIGVkZ2Ugb2YgbGFzdCBjaGlsZCBhdCAnICsg
bGFzdEVsZW1lbnRCb3R0b20gKyAnLCBjb250YWluZXIgYXQgJyArIGNvbnRhaW5lckJvdHRvbSAr
ICcuJyk7CiAgICB9CgogICAgZnVuY3Rpb24gbG9nKHN0cikKICAgIHsKICAgICAgICBjb25zb2xl
RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHIpKTsKICAgICAg
ICBjb25zb2xlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicp
KTsKICAgIH0KCiAgICBpbml0KCk7CiAgICB0ZXN0KDEwMCk7CiAgICB0ZXN0KDEyNSk7CiAgICB0
ZXN0KDEzMyk7CiAgICB0ZXN0KDE1MCk7CiAgICB0ZXN0KDE2Nik7CiAgICB0ZXN0KDIwMCk7CiAg
ICB0ZXN0KDI1MCk7CiAgICB0ZXN0KDMwMCk7CiAgICB0ZXN0KDMzMyk7CiAgICB0ZXN0KDc1KTsK
ICAgIHRlc3QoNjYpOwogICAgdGVzdCg1MCk7CiAgICB0ZXN0KDMzKTsKPC9zY3JpcHQ+CjwvaHRt
bD4KCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>98022</attachid>
            <date>2011-06-21 11:32:07 -0700</date>
            <delta_ts>2011-06-21 11:32:07 -0700</delta_ts>
            <desc>perf test case</desc>
            <filename>perf.html</filename>
            <type>text/html</type>
            <size>8372</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KICAgIDx0aXRsZT5pbnQvZmxvYXQgcGVyZiB0
ZXN0PC90aXRsZT4KICAgIDxzdHlsZT4KICAgICAgICAjdGVzdCB7CiAgICAgICAgICAgIGhlaWdo
dDogNjAwcHg7CiAgICAgICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgICAgICBmb250LXNp
emU6IDA7CiAgICAgICAgfQogICAgICAgICN0ZXN0ID4gZGl2IHsKICAgICAgICAgICAgZGlzcGxh
eTogaW5saW5lLWJsb2NrOwogICAgICAgICAgICB3aWR0aDogNXB4OwogICAgICAgICAgICBoZWln
aHQ6IDVweDsKICAgICAgICAgICAgbWFyZ2luOiAxcHg7CiAgICAgICAgICAgIGJvcmRlcjogMXB4
IHNvbGlkIG5hdnk7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHNreWJsdWU7CiAgICAgICAgfQog
ICAgICAgICN0ZXN0LnRlc3QyIHsKICAgICAgICAgICAgcGFkZGluZzogNXB4OwogICAgICAgIH0K
ICAgICAgICAjdGVzdC50ZXN0MiA+IGRpdiB7CiAgICAgICAgICAgIG1hcmdpbjogMXB4OwogICAg
ICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBncmVlbjsKICAgICAgICAgICAgYmFja2dyb3VuZDog
bGltZTsKICAgICAgICB9CiAgICAgICAgI3Rlc3QudGVzdDMgewogICAgICAgICAgICBwYWRkaW5n
OiAxOC4zcHg7CiAgICAgICAgfQogICAgICAgICN0ZXN0LnRlc3QzID4gZGl2IHsKICAgICAgICAg
ICAgbWFyZ2luOiAxLjMzcHg7CiAgICAgICAgICAgIGJvcmRlcjogMC40cHggc29saWQgcmVkOwog
ICAgICAgICAgICBiYWNrZ3JvdW5kOiBwaW5rOwogICAgICAgIH0KICAgICAgICAjdGVzdC50ZXN0
NCB7CiAgICAgICAgICAgIHBhZGRpbmc6IDE4LjNweDsKICAgICAgICB9CiAgICAgICAgI3Rlc3Qu
dGVzdDQgPiBkaXYgewogICAgICAgICAgICBtYXJnaW46IDEuMzdweDsKICAgICAgICAgICAgYm9y
ZGVyOiAxcHggc29saWQgbmF2eTsKICAgICAgICAgICAgYmFja2dyb3VuZDogc2t5Ymx1ZTsKICAg
ICAgICB9CiAgICAgICAgI3Rlc3QudGVzdDQgPiBkaXY6bnRoLWNoaWxkKG9kZCkgewogICAgICAg
ICAgICB3aWR0aDogMTguN3B4OwogICAgICAgICAgICBoZWlnaHQ6IDE4LjdweDsKICAgICAgICB9
CiAgICAgICAgI2NvbnNvbGUgewogICAgICAgICAgICBtYXJnaW4tdG9wOiAxZXg7CiAgICAgICAg
fQogICAgICAgICNjb25zb2xlID4gc3BhbiB7CiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1i
bG9jazsKICAgICAgICAgICAgd2lkdGg6IDE1ZW07CiAgICAgICAgfQogICAgICAgICNjb25zb2xl
ID4gdGltZSB7CiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgICAg
d2lkdGg6IDdlbTsKICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgfQogICAg
PC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KICAgIDxkaXYgaWQ9InRlc3QiPjwvZGl2PgogICAgPGJy
PlRlc3RzOjxicj4KICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InQxIiBkaXNhYmxlZD0i
dHJ1ZSIgY2hlY2tlZD0idHJ1ZSI+PGxhYmVsIGZvcj0idDEiPkNyZWF0ZSBhbmQgbGF5b3V0IG9u
IGludCBib3VuZGFyaWVzPC9sYWJlbD48YnI+CiAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlk
PSJ0MiIgY2hlY2tlZD0idHJ1ZSI+PGxhYmVsIGZvcj0idDIiPlJlLWxheW91dCBwYWRkaW5nL21h
cmdpbjwvbGFiZWw+PGJyPgogICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0idDMiIGNoZWNr
ZWQ9InRydWUiPjxsYWJlbCBmb3I9InQzIj5SZS1sYXlvdXQgd2l0aCBzdWJwaXhlbCBwYWRkaW5n
L21hcmdpbi9zaXplPC9sYWJlbD48YnI+CiAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ0
NCIgY2hlY2tlZD0idHJ1ZSI+PGxhYmVsIGZvcj0idDQiPlJlLWxheW91dCB3aXRoIHZhcnlpbmcg
c2l6ZTwvbGFiZWw+PGJyPgogICAgUnVuCiAgICA8c2VsZWN0IGlkPSJpdGVyYXRpb24iPgogICAg
ICAgIDxvcHRpb24gdmFsdWU9IjEwMCI+MTAwPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1
ZT0iMTAiIHNlbGVjdGVkPSJ0cnVlIj4xMDwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9
IjEiPjE8L29wdGlvbj4KICAgIDwvc2VsZWN0PgogICAgaXRlcmF0aW9uKHMpIHdpdGgKICAgIDxz
ZWxlY3QgaWQ9ImVsZW1lbnRzIj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSIxMDAwMCI+MTAsMDAw
PC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iNTAwMCI+NSwwMDA8L29wdGlvbj4KICAg
ICAgICA8b3B0aW9uIHZhbHVlPSIxMDAwIiBzZWxlY3RlZD0idHJ1ZSI+MSwwMDA8L29wdGlvbj4K
ICAgICAgICA8b3B0aW9uIHZhbHVlPSI1MDAiPjUwMDwvb3B0aW9uPgogICAgICAgIDxvcHRpb24g
dmFsdWU9IjEwMCI+MTAwPC9vcHRpb24+CiAgICA8L3NlbGVjdD4KICAgIGVsZW1lbnRzCiAgICA8
YnV0dG9uIG9uY2xpY2s9InRlc3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2l0ZXJhdGlvbicp
LnZhbHVlLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWxlbWVudHMnKS52YWx1ZSkiPkdvPC9i
dXR0b24+CiAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KPC9ib2R5Pgo8c2NyaXB0PgogICAg
dmFyIHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QnKTsKICAgIHZh
ciBjb25zb2xlRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJyk7Cgog
ICAgCiAgICBmdW5jdGlvbiB0ZXN0KGl0ZXJhdGlvbnMsIGVsZW1lbnRzKQogICAgewogICAgICAg
IHZhciByZXN1bHRzID0gW107CiAgICAgICAgY29uc29sZUVsZW1lbnQuaW5uZXJIVE1MID0gJ1J1
bm5pbmcgdGVzdC4uLic7CiAgICAgICAgcnVuQXN5bmMoMCwgaXRlcmF0aW9ucywgZWxlbWVudHMs
IHJlc3VsdHMpOwogICAgfQoKCiAgICBmdW5jdGlvbiB0ZXN0QXN5bmMoaXRlcmF0aW9uLCBpdGVy
YXRpb25zLCBlbGVtZW50cywgcmVzdWx0cykKICAgIHsKICAgICAgICBydW5UZXN0KGVsZW1lbnRz
LCByZXN1bHRzKTsKICAgICAgICBpdGVyYXRpb24rKzsKICAgICAgICBpZiAoaXRlcmF0aW9uID09
IGl0ZXJhdGlvbnMpCiAgICAgICAgICAgIHByaW50U3VtbWFyeShlbGVtZW50cywgcmVzdWx0cyk7
CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGNvbnNvbGVFbGVtZW50LmlubmVySFRNTCA9ICdS
dW5uaW5nIHRlc3QgKCcgKyBpdGVyYXRpb24gKyAnLycgKyBpdGVyYXRpb25zICsgJykuLi4nOwog
ICAgICAgICAgICBydW5Bc3luYyhpdGVyYXRpb24sIGl0ZXJhdGlvbnMsIGVsZW1lbnRzLCByZXN1
bHRzKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gcnVuQXN5bmMoaXRlcmF0aW9uLCBp
dGVyYXRpb25zLCBlbGVtZW50cywgcmVzdWx0cykKICAgIHsKICAgICAgICB0ZXN0RWxlbWVudC5p
bm5lckhUTUwgPSAnJzsKICAgICAgICB0ZXN0RWxlbWVudC5jbGFzc05hbWUgPSAnJzsKICAgICAg
ICB2YXIgaGVpZ2h0ID0gdGVzdEVsZW1lbnQub2Zmc2V0SGVpZ2h0OwogICAgICAgIHdpbmRvdy5z
ZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0ZXN0QXN5bmMoaXRlcmF0aW9uLCBp
dGVyYXRpb25zLCBlbGVtZW50cywgcmVzdWx0cyk7CiAgICAgICAgfSwgMjUpOwogICAgfQoKCiAg
ICBmdW5jdGlvbiBydW5UZXN0KGVsZW1lbnRzLCByZXN1bHRzKQogICAgeyAgICAgICAKICAgICAg
ICB2YXIgZDAgPSBEYXRlLm5vdygpOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVu
dHM7IGkrKykgewogICAgICAgICAgICB0ZXN0RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKSk7CiAgICAgICAgfQogICAgICAgIHZhciBkMSA9IERhdGUubm93
KCk7CiAgICAgICAgdmFyIGhlaWdodCA9IHRlc3RFbGVtZW50Lm9mZnNldEhlaWdodDsKICAgICAg
ICB2YXIgZDIgPSBEYXRlLm5vdygpOwoKICAgICAgICB2YXIgZDMgPSBEYXRlLm5vdygpOwogICAg
ICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndDInKS5jaGVja2VkKQogICAgICAgICAg
ICB0ZXN0RWxlbWVudC5jbGFzc05hbWUgPSAndGVzdDInOwogICAgICAgIHZhciBkNCA9IERhdGUu
bm93KCk7CiAgICAgICAgdmFyIGhlaWdodCA9IHRlc3RFbGVtZW50Lm9mZnNldEhlaWdodDsKICAg
ICAgICB2YXIgZDUgPSBEYXRlLm5vdygpOwoKICAgICAgICB2YXIgZDYgPSBEYXRlLm5vdygpOwog
ICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndDMnKS5jaGVja2VkKQogICAgICAg
ICAgICB0ZXN0RWxlbWVudC5jbGFzc05hbWUgPSAndGVzdDMnOwogICAgICAgIHZhciBkNyA9IERh
dGUubm93KCk7CiAgICAgICAgdmFyIGhlaWdodCA9IHRlc3RFbGVtZW50Lm9mZnNldEhlaWdodDsK
ICAgICAgICB2YXIgZDggPSBEYXRlLm5vdygpOwoKICAgICAgICB2YXIgZDkgPSBEYXRlLm5vdygp
OwogICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndDQnKS5jaGVja2VkKQogICAg
ICAgICAgICB0ZXN0RWxlbWVudC5jbGFzc05hbWUgPSAndGVzdDQnOwogICAgICAgIHZhciBkMTAg
PSBEYXRlLm5vdygpOwogICAgICAgIHZhciBoZWlnaHQgPSB0ZXN0RWxlbWVudC5vZmZzZXRIZWln
aHQ7CiAgICAgICAgdmFyIGQxMSA9IERhdGUubm93KCk7CgogICAgICAgIHJlc3VsdHMucHVzaChb
ZDEgLSBkMCwgZDIgLSBkMSwgZDQgLSBkMywgZDUgLSBkNCwgZDcgLSBkNiwgZDggLSBkNywgZDEw
IC0gZDksIGQxMSAtIGQxMF0pOwogICAgfQoKICAgIGZ1bmN0aW9uIG1lZGlhbihhKQogICAgewog
ICAgICAgIGlmICgoYS5sZW5ndGggJiAxKSA9PSAxKSB7CiAgICAgICAgICAgIHJldHVybiBhW01h
dGguZmxvb3IoYS5sZW5ndGggLyAyKV07CiAgICAgICAgfQogICAgICAgIHZhciBpID0gYS5sZW5n
dGggLyAyOwogICAgICAgIHJldHVybiAoYVtpIC0gMV0gKyBhW2ldKSAvIDI7CiAgICB9CiAgICAK
ICAgIGZ1bmN0aW9uIHByaW50U3VtbWFyeShlbGVtZW50cywgcmVzdWx0cykKICAgIHsKICAgICAg
ICB2YXIgdGltZTEgPSAwLCBtaW4xID0gSW5maW5pdHksIG1heDEgPSAwOwogICAgICAgIHZhciB0
aW1lMiA9IDAsIG1pbjIgPSBJbmZpbml0eSwgbWF4MiA9IDA7CiAgICAgICAgdmFyIHRpbWUzID0g
MCwgbWluMyA9IEluZmluaXR5LCBtYXgzID0gMDsKICAgICAgICB2YXIgdGltZTQgPSAwLCBtaW40
ID0gSW5maW5pdHksIG1heDQgPSAwOwogICAgICAgIHZhciB0aW1lczEgPSBbXSwgdGltZXMyID0g
W10sIHRpbWVzMyA9IFtdLCB0aW1lczQgPSBbXTsKCiAgICAgICAgdmFyIGl0ZXJhdGlvbnMgPSBy
ZXN1bHRzLmxlbmd0aDsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkr
KykgewogICAgICAgICAgICB0aW1lMSArPSByZXN1bHRzW2ldWzBdICsgcmVzdWx0c1tpXVsxXTsK
ICAgICAgICAgICAgbWluMSA9IE1hdGgubWluKG1pbjEsIHJlc3VsdHNbaV1bMF0gKyByZXN1bHRz
W2ldWzFdKTsKICAgICAgICAgICAgbWF4MSA9IE1hdGgubWF4KG1heDEsIHJlc3VsdHNbaV1bMF0g
KyByZXN1bHRzW2ldWzFdKTsKICAgICAgICAgICAgdGltZXMxLnB1c2gocmVzdWx0c1tpXVswXSAr
IHJlc3VsdHNbaV1bMV0pOwoKICAgICAgICAgICAgdGltZTIgKz0gcmVzdWx0c1tpXVsyXSArIHJl
c3VsdHNbaV1bM107CiAgICAgICAgICAgIG1pbjIgPSBNYXRoLm1pbihtaW4yLCByZXN1bHRzW2ld
WzJdICsgcmVzdWx0c1tpXVszXSk7CiAgICAgICAgICAgIG1heDIgPSBNYXRoLm1heChtYXgyLCBy
ZXN1bHRzW2ldWzJdICsgcmVzdWx0c1tpXVszXSk7CiAgICAgICAgICAgIHRpbWVzMi5wdXNoKHJl
c3VsdHNbaV1bMl0gKyByZXN1bHRzW2ldWzNdKTsKCiAgICAgICAgICAgIHRpbWUzICs9IHJlc3Vs
dHNbaV1bNF0gKyByZXN1bHRzW2ldWzVdOwogICAgICAgICAgICBtaW4zID0gTWF0aC5taW4obWlu
MywgcmVzdWx0c1tpXVs0XSArIHJlc3VsdHNbaV1bNV0pOwogICAgICAgICAgICBtYXgzID0gTWF0
aC5tYXgobWF4MywgcmVzdWx0c1tpXVs0XSArIHJlc3VsdHNbaV1bNV0pOwogICAgICAgICAgICB0
aW1lczMucHVzaChyZXN1bHRzW2ldWzRdICsgcmVzdWx0c1tpXVs1XSk7CgogICAgICAgICAgICB0
aW1lNCArPSByZXN1bHRzW2ldWzZdICsgcmVzdWx0c1tpXVs3XTsKICAgICAgICAgICAgbWluNCA9
IE1hdGgubWluKG1pbjQsIHJlc3VsdHNbaV1bNl0gKyByZXN1bHRzW2ldWzddKTsKICAgICAgICAg
ICAgbWF4NCA9IE1hdGgubWF4KG1heDQsIHJlc3VsdHNbaV1bNl0gKyByZXN1bHRzW2ldWzddKTsK
ICAgICAgICAgICAgdGltZXM0LnB1c2gocmVzdWx0c1tpXVs2XSArIHJlc3VsdHNbaV1bN10pOwog
ICAgICAgIH0KCiAgICAgICAgdmFyIHByaW50ID0gZnVuY3Rpb24oY2FwdGlvbiwgb3B0X3RpbWUs
IG9wdF9taW4sIG9wdF9tYXgsIG9wdF9tZWRpYW4pIHsKICAgICAgICAgICAgdmFyIGNhcHRpb25F
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogICAgICAgICAgICBpZiAo
dHlwZW9mIG9wdF90aW1lID09ICd1bmRlZmluZWQnKQogICAgICAgICAgICAgICAgY29uc29sZUVs
ZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2FwdGlvbikpOwogICAg
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdGltZSA9IHBhcnNlSW50KG9w
dF90aW1lICogMTAwLCAxMCkgLyAxMDA7CiAgICAgICAgICAgICAgICAgICAgY2FwdGlvbkVsZW1l
bnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2FwdGlvbiArICc6JykpOwog
ICAgICAgICAgICAgICAgICAgIGNvbnNvbGVFbGVtZW50LmFwcGVuZENoaWxkKGNhcHRpb25FbGVt
ZW50KTsKICAgICAgICAgICAgICAgICAgICB2YXIgdGltZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCd0aW1lJyk7CiAgICAgICAgICAgICAgICAgICAgdGltZUVsZW1lbnQuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGltZSArICdtcycpKTsKICAgICAgICAgICAg
ICAgICAgICBjb25zb2xlRWxlbWVudC5hcHBlbmRDaGlsZCh0aW1lRWxlbWVudCk7CiAgICAgICAg
ICAgICAgICAgICAgdGltZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aW1lJyk7
CiAgICAgICAgICAgICAgICAgICAgdGltZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoJysvLSAnICArIE1hdGguYWJzKG9wdF9tYXggLSBvcHRfbWluKSArICdtcycp
KTsKICAgICAgICAgICAgICAgICAgICBjb25zb2xlRWxlbWVudC5hcHBlbmRDaGlsZCh0aW1lRWxl
bWVudCk7CgogICAgICAgICAgICAgICAgICAgIHZhciBtZWQgPSBwYXJzZUludChvcHRfbWVkaWFu
ICogMTAwLCAxMCkgLyAxMDA7CiAgICAgICAgICAgICAgICAgICAgdGltZUVsZW1lbnQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCd0aW1lJyk7CiAgICAgICAgICAgICAgICAgICAgdGltZUVsZW1l
bnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ21lZGlhbiAnICArIG1lZCAr
ICdtcycpKTsKICAgICAgICAgICAgICAgICAgICBjb25zb2xlRWxlbWVudC5hcHBlbmRDaGlsZCh0
aW1lRWxlbWVudCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc29sZUVsZW1lbnQuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7CiAgICAgICAgfTsKICAgICAg
ICAKICAgICAgICBjb25zb2xlRWxlbWVudC5pbm5lckhUTUwgPSAnJzsKICAgICAgICBwcmludCgn
U3VtbWFyeSBhZnRlciAnICsgaXRlcmF0aW9ucyArICcgaXRlcmF0aW9uKHMpOicpOwogICAgICAg
IHByaW50KCdDcmVhdGUgYW5kIGxheW91dCAnICsgZWxlbWVudHMgKyAnIGVsZW1lbnRzJywgdGlt
ZTEgLyBpdGVyYXRpb25zLCBtaW4xLCBtYXgxLCBtZWRpYW4odGltZXMxKSk7CiAgICAgICAgaWYg
KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0MicpLmNoZWNrZWQpCiAgICAgICAgICAgIHByaW50
KCdSZS1sYXlvdXQgKHRlc3QyKSAnKyBlbGVtZW50cyArICcgZWxlbWVudHMnLCB0aW1lMiAvIGl0
ZXJhdGlvbnMsIG1pbjIsIG1heDIsIG1lZGlhbih0aW1lczIpKTsKICAgICAgICBpZiAoZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3QzJykuY2hlY2tlZCkKICAgICAgICAgICAgcHJpbnQoJ1JlLWxh
eW91dCAodGVzdDMpICcrIGVsZW1lbnRzICsgJyBlbGVtZW50cycsIHRpbWUzIC8gaXRlcmF0aW9u
cywgbWluMywgbWF4MywgbWVkaWFuKHRpbWVzMykpOwogICAgICAgIGlmIChkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgndDQnKS5jaGVja2VkKQogICAgICAgICAgICBwcmludCgnUmUtbGF5b3V0ICh0
ZXN0NCkgJysgZWxlbWVudHMgKyAnIGVsZW1lbnRzJywgdGltZTQgLyBpdGVyYXRpb25zLCBtaW40
LCBtYXg0LCBtZWRpYW4odGltZXM0KSk7CiAgICB9Cgo8L3NjcmlwdD4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>98023</attachid>
            <date>2011-06-21 11:32:21 -0700</date>
            <delta_ts>2011-06-21 11:32:21 -0700</delta_ts>
            <desc>zoom perf test case</desc>
            <filename>perf2.html</filename>
            <type>text/html</type>
            <size>1999</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KICAgIDx0aXRsZT5sYXlvdXQgem9vbSB0ZXN0
PC90aXRsZT4KICAgIDxzdHlsZT4gCiAgICAgICAgI3Rlc3QgewogICAgICAgICAgICB3aWR0aDog
NTAwcHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHNreWJsdWU7CiAgICAgICAgICAgIG92ZXJm
bG93OiBoaWRkZW47CiAgICAgICAgfQogICAgICAgICN0ZXN0ID4gZGl2IHsKICAgICAgICAgICAg
YmFja2dyb3VuZDogbmF2eTsKICAgICAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIH0KICAg
IDwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CiAgICA8ZGl2IGlkPSJ0ZXN0Ij48L2Rpdj4KICAgIDxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pgo8L2JvZHk+CjxzY3JpcHQ+CiAgICB2YXIgdGVzdEVsZW1l
bnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdCcpOwogICAgdmFyIGNvbnNvbGVFbGVt
ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKTsKCiAgICB2YXIgbnVtYmVy
T2ZFbGVtZW50cyA9IDI1MDA7CgogICAgZnVuY3Rpb24gdGVzdCh6b29tKQogICAgewogICAgICAg
IHRlc3RFbGVtZW50LmlubmVySFRNTCA9ICcnOwogICAgICAgIHRlc3RFbGVtZW50LnN0eWxlLmhl
aWdodCA9IG51bWJlck9mRWxlbWVudHMgKiAxNSArICdweCc7CiAgICAgICAgdGVzdEVsZW1lbnQu
c3R5bGUuem9vbSA9IHpvb20gKyAnJSc7CgogICAgICAgIHZhciBzdGFydFRpbWUgPSBEYXRlLm5v
dygpOwogICAgICAgIAogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZFbGVtZW50
czsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgdGVzdEVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGxhc3RF
bGVtZW50Qm90dG9tID0gdGVzdEVsZW1lbnQubGFzdENoaWxkLmdldEJvdW5kaW5nQ2xpZW50UmVj
dCgpLmJvdHRvbTsKICAgICAgICB2YXIgY29udGFpbmVyQm90dG9tID0gdGVzdEVsZW1lbnQuZ2V0
Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tOwoKICAgICAgICB2YXIgZW5kVGltZSA9IERhdGUu
bm93KCk7CgogICAgICAgIGxvZygnY3JlYXRlL2xheW91dCAnICsgbnVtYmVyT2ZFbGVtZW50cyAr
ICcgZWxlbWVudHMgYXQgem9vbSAnICsgem9vbSArICclIGluICcgKyAoZW5kVGltZSAtIHN0YXJ0
VGltZSkgKyAnbXMuJyk7CgovKiAgICAgICAgCiAgICAgICAgaWYgKE1hdGguYWJzKGxhc3RFbGVt
ZW50Qm90dG9tIC0gY29udGFpbmVyQm90dG9tKSA8IDAuMDEpCiAgICAgICAgICAgIGxvZygnUEFT
UzogV2l0aCB6b29tIG9mICcgKyB6b29tICsgJyUgYm90dG9tIGVkZ2Ugb2YgbGFzdCBjaGlsZCBs
aW5lcyB1cCB3aXRoIGJvdHRvbSBlZGdlIG9mIGNvbnRhaW5lci4nKTsKICAgICAgICBlbHNlCiAg
ICAgICAgICAgIGxvZygnRkFJTDogV2l0aCB6b29tIG9mICcgKyB6b29tICsgJyUgYm90dG9tIGVk
Z2Ugb2YgbGFzdCBjaGlsZCBhdCAnICsgbGFzdEVsZW1lbnRCb3R0b20gKyAnLCBjb250YWluZXIg
YXQgJyArIGNvbnRhaW5lckJvdHRvbSArICcuJyk7CiovCiAgICB9CgogICAgZnVuY3Rpb24gbG9n
KHN0cikKICAgIHsKICAgICAgICBjb25zb2xlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZShzdHIpKTsKICAgICAgICBjb25zb2xlRWxlbWVudC5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKICAgIH0KCiAgICB0ZXN0KDEwMCk7CiAgICB0
ZXN0KDEyNSk7CiAgICB0ZXN0KDEzMyk7CiAgICB0ZXN0KDE1MCk7CiAgICB0ZXN0KDE2Nik7CiAg
ICB0ZXN0KDIwMCk7CiAgICB0ZXN0KDI1MCk7CiAgICB0ZXN0KDMwMCk7CiAgICB0ZXN0KDMzMyk7
CiAgICB0ZXN0KDEwMCk7CiAgICB0ZXN0KDc1KTsKICAgIHRlc3QoNjYpOwogICAgdGVzdCg1MCk7
CiAgICB0ZXN0KDMzKTsKICAgIHRlc3QoMTApOwogICAgdGVzdCgxKTsKPC9zY3JpcHQ+CjwvaHRt
bD4KCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98025</attachid>
            <date>2011-06-21 11:36:23 -0700</date>
            <delta_ts>2012-02-07 10:32:47 -0800</delta_ts>
            <desc>Proof of concept</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>681754</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmll
dy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRz
Y2FwZVBsdWdpblZpZXcubW0JKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYktpdC9tYWMv
UGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC05
NzgsNyArOTc4LDcgQEAKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuIE5TWmVy
b1JlY3Q7CiAKLSAgICBJbnRSZWN0IHdpZGdldFJlY3QgPSByZW5kZXJlci0+YWJzb2x1dGVDbGlw
cGVkT3ZlcmZsb3dSZWN0KCk7CisgICAgSW50UmVjdCB3aWRnZXRSZWN0ID0gZW5jbG9zaW5nSW50
UmVjdChyZW5kZXJlci0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkpOwogICAgIHdpZGdl
dFJlY3QgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3cod2lkZ2V0UmVjdCk7CiAgICAgcmV0
dXJuIGludGVyc2VjdGlvbih0b1JlbmRlcldpZGdldChyZW5kZXJlciktPndpbmRvd0NsaXBSZWN0
KCksIHdpZGdldFJlY3QpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJS
ZW5kZXJOb2RlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
UmVuZGVyTm9kZS5tbQkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlJlbmRlck5vZGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQAog
ICAgICAgICBoZWlnaHQgPSBib3guaGVpZ2h0KCk7CiAgICAgfSBlbHNlIGlmIChub2RlLT5pc1Jl
bmRlcklubGluZSgpKSB7CiAgICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBpbmxpbmVGbG93
ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChub2RlKTsKLSAgICAgICAgSW50UmVjdCBib3VuZGlu
Z0JveCA9IGlubGluZUZsb3ctPmJvcmRlckJvdW5kaW5nQm94KCk7CisgICAgICAgIEZsb2F0UmVj
dCBib3VuZGluZ0JveCA9IGlubGluZUZsb3ctPmJvcmRlckJvdW5kaW5nQm94KCk7CiAgICAgICAg
IHggPSBib3VuZGluZ0JveC54KCk7CiAgICAgICAgIHkgPSBib3VuZGluZ0JveC55KCk7CiAgICAg
ICAgIHdpZHRoID0gYm91bmRpbmdCb3gud2lkdGgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRl
ICJET01UaW1lU3RhbXAuaCIKICNpbmNsdWRlICJEb2N1bWVudFRpbWluZy5oIgorI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkljb25VUkwuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAjaW5jbHVkZSAiUGFnZVZpc2liaWxpdHlTdGF0ZS5oIgpAQCAtMTM3Miw3ICsxMzczLDcgQEAK
ICAgICBUaW1lcjxEb2N1bWVudD4gbV9mdWxsU2NyZWVuQ2hhbmdlRGVsYXlUaW1lcjsKICAgICBE
ZXF1ZTxSZWZQdHI8RWxlbWVudD4gPiBtX2Z1bGxTY3JlZW5DaGFuZ2VFdmVudFRhcmdldFF1ZXVl
OwogICAgIGJvb2wgbV9pc0FuaW1hdGluZ0Z1bGxTY3JlZW47Ci0gICAgSW50UmVjdCBtX3NhdmVk
UGxhY2Vob2xkZXJGcmFtZVJlY3Q7CisgICAgRmxvYXRSZWN0IG1fc2F2ZWRQbGFjZWhvbGRlckZy
YW1lUmVjdDsKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fc2F2ZWRQbGFjZWhvbGRlclJlbmRl
clN0eWxlOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uY3BwCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDk3LDcgKzEwOTcsNyBAQAogICAg
ICAgICAgICAgdW5yb290ZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgbG9jYWxSZWN0Lm1vdmUocmVuZGVyZXItPm9mZnNldEZyb21Db250YWluZXIoY29u
dGFpbmVyT2JqZWN0LCBsb2NhbFJlY3QubG9jYXRpb24oKSkpOworICAgICAgICBsb2NhbFJlY3Qu
bW92ZShyb3VuZGVkSW50U2l6ZShyZW5kZXJlci0+b2Zmc2V0RnJvbUNvbnRhaW5lcihjb250YWlu
ZXJPYmplY3QsIGxvY2FsUmVjdC5sb2NhdGlvbigpKSkpOwogICAgICAgICByZW5kZXJlciA9IGNv
bnRhaW5lck9iamVjdDsKICAgICB9CiAKQEAgLTEyNTksMTMgKzEyNTksMTMgQEAKICAgICB9CiB9
CiAKLXZvaWQgRnJhbWVTZWxlY3Rpb246OnBhaW50Q2FyZXQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0
KQordm9pZCBGcmFtZVNlbGVjdGlvbjo6cGFpbnRDYXJldChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVj
dCkKIHsKICAgICBpZiAobV9zZWxlY3Rpb24uaXNDYXJldCgpICYmIG1fY2FyZXRQYWludCkKICAg
ICAgICAgQ2FyZXRCYXNlOjpwYWludENhcmV0KG1fc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRl
ZE5vZGUoKSwgY29udGV4dCwgcGFpbnRPZmZzZXQsIGNsaXBSZWN0KTsKIH0KIAotdm9pZCBDYXJl
dEJhc2U6OnBhaW50Q2FyZXQoTm9kZSogbm9kZSwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBjb25z
dAordm9pZCBDYXJldEJhc2U6OnBhaW50Q2FyZXQoTm9kZSogbm9kZSwgR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYg
Y2xpcFJlY3QpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFRFWFRfQ0FSRVQpCiAgICAgaWYgKG1fY2Fy
ZXRWaXNpYmlsaXR5ID09IEhpZGRlbikKQEAgLTEyNzUsNyArMTI3NSw3IEBACiAgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IGNhcmV0UmVuZGVyZXIobm9kZSk7CiAgICAgaWYgKHJlbmRlcmVy
ICYmIHJlbmRlcmVyLT5pc0JveCgpKQogICAgICAgICB0b1JlbmRlckJveChyZW5kZXJlciktPmZs
aXBGb3JXcml0aW5nTW9kZShkcmF3aW5nUmVjdCk7Ci0gICAgZHJhd2luZ1JlY3QubW92ZUJ5KHBh
aW50T2Zmc2V0KTsKKyAgICBkcmF3aW5nUmVjdC5tb3ZlQnkocm91bmRlZEludFBvaW50KHBhaW50
T2Zmc2V0KSk7CiAgICAgSW50UmVjdCBjYXJldCA9IGludGVyc2VjdGlvbihkcmF3aW5nUmVjdCwg
Y2xpcFJlY3QpOwogICAgIGlmIChjYXJldC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTE3NjcsNyArMTc2Nyw3IEBACiAgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9s
bGVyKCktPnNldEZvY3VzZWROb2RlKDAsIG1fZnJhbWUpOwogfQogCi12b2lkIERyYWdDYXJldENv
bnRyb2xsZXI6OnBhaW50RHJhZ0NhcmV0KEZyYW1lKiBmcmFtZSwgR3JhcGhpY3NDb250ZXh0KiBw
LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBj
b25zdAordm9pZCBEcmFnQ2FyZXRDb250cm9sbGVyOjpwYWludERyYWdDYXJldChGcmFtZSogZnJh
bWUsIEdyYXBoaWNzQ29udGV4dCogcCwgY29uc3QgRmxvYXRQb2ludCYgcGFpbnRPZmZzZXQsIGNv
bnN0IEludFJlY3QmIGNsaXBSZWN0KSBjb25zdAogewogI2lmIEVOQUJMRShURVhUX0NBUkVUKQog
ICAgIGlmIChtX3Bvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+ZG9j
dW1lbnQoKS0+ZnJhbWUoKSA9PSBmcmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gODg0OTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MCw3ICs5MCw3IEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFJl
bmRlckJveCogYm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOwotICAgIEludFJlY3QgYm9yZGVy
Qm91bmRpbmdCb3ggPSBib3gtPmJvcmRlckJvdW5kaW5nQm94KCk7CisgICAgRmxvYXRSZWN0IGJv
cmRlckJvdW5kaW5nQm94ID0gYm94LT5ib3JkZXJCb3VuZGluZ0JveCgpOwogICAgIGlmIChib3Jk
ZXJCb3VuZGluZ0JveC53aWR0aCgpIDwgbWluaW11bVdpZHRoIHx8IGJvcmRlckJvdW5kaW5nQm94
LmhlaWdodCgpIDwgbWluaW11bUhlaWdodCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCShyZXZpc2lvbiA4ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtNjEsNyArNjEsNyBAQAogICAgIEludFJlY3QgYWJzb2x1dGVCb3VuZHNGb3JMb2NhbFJl
Y3QoTm9kZSosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICBJbnRSZWN0IGNhcmV0UmVwYWlu
dFJlY3QoTm9kZSopIGNvbnN0OwogICAgIGJvb2wgc2hvdWxkUmVwYWludENhcmV0KGNvbnN0IFJl
bmRlclZpZXcqLCBib29sIGlzQ29udGVudEVkaXRhYmxlKSBjb25zdDsKLSAgICB2b2lkIHBhaW50
Q2FyZXQoTm9kZSosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50
UmVjdCYgY2xpcFJlY3QpIGNvbnN0OworICAgIHZvaWQgcGFpbnRDYXJldChOb2RlKiwgR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBj
b25zdDsKICAgICBSZW5kZXJPYmplY3QqIGNhcmV0UmVuZGVyZXIoTm9kZSopIGNvbnN0OwogCiAg
ICAgY29uc3QgSW50UmVjdCYgbG9jYWxDYXJldFJlY3RXaXRob3V0VXBkYXRlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYXJldExvY2FsUmVjdDsgfQpAQCAtODYsNyArODYsNyBAQAogICAgIERyYWdDYXJl
dENvbnRyb2xsZXIoKTsKIAogICAgIFJlbmRlck9iamVjdCogY2FyZXRSZW5kZXJlcigpIGNvbnN0
OwotICAgIHZvaWQgcGFpbnREcmFnQ2FyZXQoRnJhbWUqLCBHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBjb25zdDsKKyAgICB2b2lkIHBh
aW50RHJhZ0NhcmV0KEZyYW1lKiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYs
IGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBjb25zdDsKIAogICAgIGJvb2wgaXNDb250ZW50RWRp
dGFibGUoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsg
fQogICAgIGJvb2wgaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSBjb25zdDsKQEAgLTE5Myw3ICsx
OTMsNyBAQAogICAgIHZvaWQgY2xlYXJDYXJldFJlY3RJZk5lZWRlZCgpOwogICAgIGJvb2wgcmVj
b21wdXRlQ2FyZXRSZWN0KCk7CiAgICAgdm9pZCBpbnZhbGlkYXRlQ2FyZXRSZWN0KCk7Ci0gICAg
dm9pZCBwYWludENhcmV0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFBvaW50JiwgY29uc3Qg
SW50UmVjdCYgY2xpcFJlY3QpOworICAgIHZvaWQgcGFpbnRDYXJldChHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpOwogCiAgICAgLy8g
VXNlZCB0byBzdXNwZW5kIGNhcmV0IGJsaW5raW5nIHdoaWxlIHRoZSBtb3VzZSBpcyBkb3duLgog
ICAgIHZvaWQgc2V0Q2FyZXRCbGlua2luZ1N1c3BlbmRlZChib29sIHN1c3BlbmRlZCkgeyBtX2lz
Q2FyZXRCbGlua2luZ1N1c3BlbmRlZCA9IHN1c3BlbmRlZDsgfQpAQCAtMjIwLDcgKzIyMCw3IEBA
CiAgICAgdm9pZCBzZXRGb2N1c2VkTm9kZUlmTmVlZGVkKCk7CiAgICAgdm9pZCBub3RpZnlSZW5k
ZXJlck9mU2VsZWN0aW9uQ2hhbmdlKGJvb2wgdXNlclRyaWdnZXJlZCk7CiAKLSAgICB2b2lkIHBh
aW50RHJhZ0NhcmV0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50
UmVjdCYgY2xpcFJlY3QpIGNvbnN0OworICAgIHZvaWQgcGFpbnREcmFnQ2FyZXQoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KSBjb25z
dDsKIAogICAgIEVkaXRpbmdTdHlsZSogdHlwaW5nU3R5bGUoKSBjb25zdDsKICAgICBQYXNzUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjb3B5VHlwaW5nU3R5bGUoKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2Uu
Y3BwCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0Fu
aW1hdGlvbkJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNyArMTc1LDcgQEAKICAgICAg
ICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIENvbnZlcnQgdGhlIFRyYW5zZm9ybU9wZXJh
dGlvbnMgaW50byBtYXRyaWNlcwotICAgICAgICBJbnRTaXplIHNpemUgPSBhbmltLT5yZW5kZXJl
cigpLT5pc0JveCgpID8gdG9SZW5kZXJCb3goYW5pbS0+cmVuZGVyZXIoKSktPmJvcmRlckJveFJl
Y3QoKS5zaXplKCkgOiBJbnRTaXplKCk7CisgICAgICAgIEZsb2F0U2l6ZSBzaXplID0gYW5pbS0+
cmVuZGVyZXIoKS0+aXNCb3goKSA/IHRvUmVuZGVyQm94KGFuaW0tPnJlbmRlcmVyKCkpLT5ib3Jk
ZXJCb3hSZWN0KCkuc2l6ZSgpIDogRmxvYXRTaXplKCk7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IGZyb21UOwogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b1Q7CiAgICAgICAg
IGZyb20uYXBwbHkoc2l6ZSwgZnJvbVQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOTYsNyArMjI5Niw3IEBACiAgICAgICAgIFJl
bmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSBmb2N1c2VkTm9kZS0+cmVuZGVyQm94TW9kZWxPYmpl
Y3QoKTsKICAgICAgICAgaWYgKCFib3gpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIEludFJlY3QgY2xpcHBlZFJlY3QgPSBib3gtPmFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVj
dCgpOworICAgICAgICBJbnRSZWN0IGNsaXBwZWRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChib3gt
PmFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpKTsKICAgICAgICAgbG9jYXRpb24gPSBJbnRQ
b2ludChjbGlwcGVkUmVjdC54KCksIGNsaXBwZWRSZWN0Lm1heFkoKSAtIDEpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGxvY2F0aW9uID0gSW50UG9pbnQoCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgxLDE4
ICszODEsMTggQEAKICAgICAgICAgaW50IGR5ID0gMDsKICAgICAgICAgc3dpdGNoIChkaXJlY3Rp
b24pIHsKICAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6Ci0gICAgICAgICAgICBkeCA9
IC0gbWluKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgY29udGFpbmVyLT5yZW5kZXJC
b3goKS0+c2Nyb2xsTGVmdCgpKTsKKyAgICAgICAgICAgIGR4ID0gLSBtaW4oU2Nyb2xsYmFyOjpw
aXhlbHNQZXJMaW5lU3RlcCgpLCAoaW50KWNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbExl
ZnQoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJp
Z2h0OgogICAgICAgICAgICAgQVNTRVJUKGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbFdp
ZHRoKCkgPiAoY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsTGVmdCgpICsgY29udGFpbmVy
LT5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSkpOwotICAgICAgICAgICAgZHggPSBtaW4oU2Ny
b2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3Jv
bGxXaWR0aCgpIC0gKGNvbnRhaW5lci0+cmVuZGVyQm94KCktPnNjcm9sbExlZnQoKSArIGNvbnRh
aW5lci0+cmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpKTsKKyAgICAgICAgICAgIGR4ID0gbWlu
KChmbG9hdClTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIGNvbnRhaW5lci0+cmVuZGVy
Qm94KCktPnNjcm9sbFdpZHRoKCkgLSAoY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsTGVm
dCgpICsgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKLSAgICAgICAgICAgIGR5
ID0gLSBtaW4oU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBjb250YWluZXItPnJlbmRl
ckJveCgpLT5zY3JvbGxUb3AoKSk7CisgICAgICAgICAgICBkeSA9IC0gbWluKFNjcm9sbGJhcjo6
cGl4ZWxzUGVyTGluZVN0ZXAoKSwgKGludCljb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxU
b3AoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRv
d246CiAgICAgICAgICAgICBBU1NFUlQoY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsSGVp
Z2h0KCkgLSAoY29udGFpbmVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsVG9wKCkgKyBjb250YWluZXIt
PnJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSkpOwotICAgICAgICAgICAgZHkgPSBtaW4oU2Ny
b2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBjb250YWluZXItPnJlbmRlckJveCgpLT5zY3Jv
bGxIZWlnaHQoKSAtIChjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxUb3AoKSArIGNvbnRh
aW5lci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSk7CisgICAgICAgICAgICBkeSA9IG1p
bigoZmxvYXQpU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBjb250YWluZXItPnJlbmRl
ckJveCgpLT5zY3JvbGxIZWlnaHQoKSAtIChjb250YWluZXItPnJlbmRlckJveCgpLT5zY3JvbGxU
b3AoKSArIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQu
aAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJU
aGVtZVF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAKICAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Owog
Ci0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqIG8p
IGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJP
YmplY3QqIG8pIGNvbnN0OwogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBjb250cm9s
IGNoYW5nZXMgaXRzIHRpbnQgd2hlbiB0aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3QuCiAgICAg
dmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCopIGNv
bnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5j
cHAJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMCwxMCArMzEwLDEwIEBACiAgICAgfQog
fQogCi1pbnQgUmVuZGVyVGhlbWVRdDo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmpl
Y3QqIG8pIGNvbnN0CitmbG9hdCBSZW5kZXJUaGVtZVF0OjpiYXNlbGluZVBvc2l0aW9uKGNvbnN0
IFJlbmRlck9iamVjdCogbykgY29uc3QKIHsKICAgICBpZiAoIW8tPmlzQm94KCkpCi0gICAgICAg
IHJldHVybiAwOworICAgICAgICByZXR1cm4gMC4wZjsKIAogICAgIGlmIChvLT5zdHlsZSgpLT5h
cHBlYXJhbmNlKCkgPT0gQ2hlY2tib3hQYXJ0IHx8IG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9
PSBSYWRpb1BhcnQpCiAgICAgICAgIHJldHVybiB0b1JlbmRlckJveChvKS0+bWFyZ2luVG9wKCkg
KyB0b1JlbmRlckJveChvKS0+aGVpZ2h0KCkgLSAyOyAvLyBTYW1lIGFzIGluIG9sZCBraHRtbApA
QCAtODQ2LDcgKzg0Niw3IEBACiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUVN0eWxlT3B0aW9u
UHJvZ3Jlc3NCYXJWMiBvcHRpb247Ci0gICAgb3B0aW9uLnJlY3Quc2V0U2l6ZShyZW5kZXJQcm9n
cmVzcy0+c2l6ZSgpKTsKKyAgICBvcHRpb24ucmVjdC5zZXRTaXplKEludFNpemUoKGludCkocmVu
ZGVyUHJvZ3Jlc3MtPnNpemUoKS53aWR0aCgpKSwgKGludCkocmVuZGVyUHJvZ3Jlc3MtPnNpemUo
KS5oZWlnaHQoKSkpKTsKICAgICAvLyBGSVhNRTogVW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQu
bm9raWEuY29tL2Jyb3dzZS9RVEJVRy05MTcxIGlzIGZpeGVkLAogICAgIC8vIHdlIHNpbXVsYXRl
IG9uZSBzcXVhcmUgYW5pbWF0aW5nIGFjcm9zcyB0aGUgcHJvZ3Jlc3MgYmFyLgogICAgIHJldHVy
biAob3B0aW9uLnJlY3Qud2lkdGgoKSAvIHFTdHlsZSgpLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBN
X1Byb2dyZXNzQmFyQ2h1bmtXaWR0aCwgJm9wdGlvbikpICogYW5pbWF0aW9uUmVwZWF0SW50ZXJ2
YWxGb3JQcm9ncmVzc0JhcihyZW5kZXJQcm9ncmVzcyk7CkBAIC0xMDAyLDkgKzEwMDIsOSBAQAog
SW50UmVjdCBSZW5kZXJUaGVtZVF0Ojpjb252ZXJ0VG9QYWludGluZ1JlY3QoUmVuZGVyT2JqZWN0
KiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIHBhcnRSZW5kZXJlciwgSW50UmVj
dCBwYXJ0UmVjdCwgY29uc3QgSW50UmVjdCYgbG9jYWxPZmZzZXQpIGNvbnN0CiB7CiAgICAgLy8g
Q29tcHV0ZSBhbiBvZmZzZXQgYmV0d2VlbiB0aGUgcGFydCByZW5kZXJlciBhbmQgdGhlIGlucHV0
IHJlbmRlcmVyLgotICAgIEludFNpemUgb2Zmc2V0RnJvbUlucHV0UmVuZGVyZXIgPSAtKHBhcnRS
ZW5kZXJlci0+b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKGlucHV0UmVuZGVyZXIpKTsKKyAg
ICBGbG9hdFNpemUgb2Zmc2V0RnJvbUlucHV0UmVuZGVyZXIgPSAtKHBhcnRSZW5kZXJlci0+b2Zm
c2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKGlucHV0UmVuZGVyZXIpKTsKICAgICAvLyBNb3ZlIHRo
ZSByZWN0IGludG8gcGFydFJlbmRlcmVyJ3MgY29vcmRzLgotICAgIHBhcnRSZWN0Lm1vdmUob2Zm
c2V0RnJvbUlucHV0UmVuZGVyZXIpOworICAgIHBhcnRSZWN0Lm1vdmUocm91bmRlZEludFNpemUo
b2Zmc2V0RnJvbUlucHV0UmVuZGVyZXIpKTsKICAgICAvLyBBY2NvdW50IGZvciB0aGUgbG9jYWwg
ZHJhd2luZyBvZmZzZXQuCiAgICAgcGFydFJlY3QubW92ZShsb2NhbE9mZnNldC54KCksIGxvY2Fs
T2Zmc2V0LnkoKSk7CiAKQEAgLTEwMjEsNyArMTAyMSw3IEBACiAgICAgaWYgKCFpbnB1dC0+cmVu
ZGVyZXIoKS0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFJlbmRlckJveCog
aW5wdXRSZW5kZXJCb3ggPSB0b1JlbmRlckJveChpbnB1dC0+cmVuZGVyZXIoKSk7Ci0gICAgSW50
UmVjdCBpbnB1dENvbnRlbnRCb3ggPSBpbnB1dFJlbmRlckJveC0+Y29udGVudEJveFJlY3QoKTsK
KyAgICBJbnRSZWN0IGlucHV0Q29udGVudEJveCA9IHJvdW5kZWRJbnRSZWN0KGlucHV0UmVuZGVy
Qm94LT5jb250ZW50Qm94UmVjdCgpKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGJ1
dHRvbiBzdGF5cyBzcXVhcmUgYW5kIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3guCiAgICAg
aW50IGNhbmNlbEJ1dHRvblNpemUgPSBxTWluKGlucHV0Q29udGVudEJveC53aWR0aCgpLCBxTWlu
KGlucHV0Q29udGVudEJveC5oZWlnaHQoKSwgci5oZWlnaHQoKSkpOwpAQCAtMTM2MCw3ICsxMzYw
LDcgQEAKICAgICBpZiAoIW8tPmlzU2xpZGVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIEludFJlY3QgYiA9IHRvUmVuZGVyQm94KG8pLT5jb250ZW50Qm94UmVjdCgpOworICAgIEZs
b2F0UmVjdCBiID0gdG9SZW5kZXJCb3gobyktPmNvbnRlbnRCb3hSZWN0KCk7CiAKICAgICAvLyBQ
b3NpdGlvbiB0aGUgb3V0ZXIgcmVjdGFuZ2xlCiAgICAgaW50IHRvcCA9IHIueSgpICsgYi55KCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIyNyw3ICsxMjI3LDcgQEAKICAgICBtX2RhdGEtPnAoKS0+c2V0V29ybGRUcmFu
c2Zvcm0odHJhbnNmb3JtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJl
Y3QoY29uc3QgS1VSTCYsIGNvbnN0IEludFJlY3QmKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFVSTEZvclJlY3QoY29uc3QgS1VSTCYsIGNvbnN0IEZsb2F0UmVjdCYpCiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MDEsNyArNDAxLDcgQEAKICAgICAgICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXpl
JiBzaXplKSB7IHRyYW5zbGF0ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9CiAgICAg
ICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpOwogCi0gICAgICAgIHZvaWQgc2V0
VVJMRm9yUmVjdChjb25zdCBLVVJMJiwgY29uc3QgSW50UmVjdCYpOworICAgICAgICB2b2lkIHNl
dFVSTEZvclJlY3QoY29uc3QgS1VSTCYsIGNvbnN0IEZsb2F0UmVjdCYpOwogCiAgICAgICAgIHZv
aWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwogICAgICAgICB2b2lkIHNldENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDEsNiArMTAxLDIxIEBACiAgICAgICAgIG1feCArPSBhLngoKTsKICAgICAgICAgbV95ICs9IGEu
eSgpOwogICAgIH0KKyAgICB2b2lkIG1vdmVCeShjb25zdCBGbG9hdFBvaW50JiBhKQorICAgIHsK
KyAgICAgICAgbV94ICs9IGEueCgpOworICAgICAgICBtX3kgKz0gYS55KCk7CisgICAgfQorICAg
IHZvaWQgbW92ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgeworICAgICAgICBtX3ggKz0g
c2l6ZS53aWR0aCgpOworICAgICAgICBtX3kgKz0gc2l6ZS5oZWlnaHQoKTsKKyAgICB9CisgICAg
dm9pZCBtb3ZlKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCkKKyAgICB7CisgICAgICAgIG1feCAr
PSBvZmZzZXQueCgpOworICAgICAgICBtX3kgKz0gb2Zmc2V0LnkoKTsKKyAgICB9CiAgICAgdm9p
ZCBzY2FsZShmbG9hdCBzeCwgZmxvYXQgc3kpCiAgICAgewogICAgICAgICBtX3ggKj0gc3g7CkBA
IC0xNTEsNiArMTY2LDExIEBACiAgICAgRmxvYXRQb2ludChjb25zdCBTa1BvaW50Jik7CiAjZW5k
aWYKIAorICAgIEZsb2F0UG9pbnQgdHJhbnNwb3NlZFBvaW50KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBGbG9hdFBvaW50KG1feSwgbV94KTsKKyAgICB9CisKICAgICBGbG9hdFBvaW50
IG1hdHJpeFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIGNvbnN0OwogICAg
IEZsb2F0UG9pbnQgbWF0cml4VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGNvbnN0
OwogCkBAIC0xOTcsNiArMjE3LDExIEBACiAgICAgcmV0dXJuIEZsb2F0UG9pbnQoYS54KCkgLSBi
LndpZHRoKCksIGEueSgpIC0gYi5oZWlnaHQoKSk7CiB9CiAKK2lubGluZSBGbG9hdFBvaW50IG9w
ZXJhdG9yLShjb25zdCBGbG9hdFBvaW50JiBhKQoreworICAgIHJldHVybiBGbG9hdFBvaW50KC1h
LngoKSwgLWEueSgpKTsKK30KKwogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGbG9hdFBv
aW50JiBhLCBjb25zdCBGbG9hdFBvaW50JiBiKQogewogICAgIHJldHVybiBhLngoKSA9PSBiLngo
KSAmJiBhLnkoKSA9PSBiLnkoKTsKQEAgLTIyOCw2ICsyNTMsMTYgQEAKICAgICByZXR1cm4gSW50
U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHAueCgpKSwgc3RhdGljX2Nhc3Q8aW50PihwLnkoKSkpOwog
fQogCitpbmxpbmUgRmxvYXRQb2ludCB0b1BvaW50KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sK
KyAgICByZXR1cm4gRmxvYXRQb2ludChzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworfQor
CitpbmxpbmUgRmxvYXRTaXplIHRvU2l6ZShjb25zdCBGbG9hdFBvaW50JiBhKQoreworICAgIHJl
dHVybiBGbG9hdFNpemUoYS54KCksIGEueSgpKTsKK30KKwogZmxvYXQgZmluZFNsb3BlKGNvbnN0
IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgZmxvYXQmIGMpOwogCiAvLyBG
aW5kIHBvaW50IHdoZXJlIGxpbmVzIHRocm91Z2ggdGhlIHR3byBwYWlycyBvZiBwb2ludHMgaW50
ZXJzZWN0LiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBsaW5lcyBkb24ndCBpbnRlcnNlY3QuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAkocmV2aXNp
b24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUu
aAkod29ya2luZyBjb3B5KQpAQCAtNjIsOSArNjIsMTYgQEAKICAgICB2b2lkIHNldEhlaWdodChm
bG9hdCBoZWlnaHQpIHsgbV9oZWlnaHQgPSBoZWlnaHQ7IH0KIAogICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fd2lkdGggPD0gMCB8fCBtX2hlaWdodCA8PSAwOyB9CisgICAgYm9v
bCBpc1plcm8oKSBjb25zdCB7IHJldHVybiAhbV93aWR0aCAmJiAhbV9oZWlnaHQ7IH0KIAogICAg
IGZsb2F0IGFzcGVjdFJhdGlvKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aCAvIG1faGVpZ2h0OyB9
CiAKKyAgICB2b2lkIGV4cGFuZChmbG9hdCBkdywgZmxvYXQgZGgpCisgICAgeworICAgICAgICBt
X3dpZHRoICs9IGR3OworICAgICAgICBtX2hlaWdodCArPSBkaDsKKyAgICB9CisKICAgICB2b2lk
IHNjYWxlKGZsb2F0IHMpIHsgc2NhbGUocywgcyk7IH0KIAogICAgIHZvaWQgc2NhbGUoZmxvYXQg
c2NhbGVYLCBmbG9hdCBzY2FsZVkpCkBAIC05MSw2ICs5OCwxMSBAQAogICAgICAgICByZXR1cm4g
bV93aWR0aCAqIG1fd2lkdGggKyBtX2hlaWdodCAqIG1faGVpZ2h0OwogICAgIH0KIAorICAgIEZs
b2F0U2l6ZSB0cmFuc3Bvc2VkU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRmxv
YXRTaXplKG1faGVpZ2h0LCBtX3dpZHRoKTsKKyAgICB9CisKICNpZiBVU0UoQ0cpIHx8IChQTEFU
Rk9STShXWCkgJiYgT1MoREFSV0lOKSkgfHwgVVNFKFNLSUFfT05fTUFDX0NIUk9NRSkKICAgICBl
eHBsaWNpdCBGbG9hdFNpemUoY29uc3QgQ0dTaXplJik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGlj
aXRseSBzaW5jZSBpdCdzIGxvc3N5CiAgICAgb3BlcmF0b3IgQ0dTaXplKCkgY29uc3Q7CkBAIC0x
MDIsNiArMTE0LDEzIEBACiAgICAgb3BlcmF0b3IgTlNTaXplKCkgY29uc3Q7CiAjZW5kaWYKIAor
ICAgIGJvb2wgaXNSb3VnaGx5RXF1YWxUbyhjb25zdCBGbG9hdFNpemUmIGIpCisgICAgeworICAg
ICAgICBmbG9hdCBkdywgZGg7CisgICAgICAgIGR3ID0gYWJzKG1fd2lkdGggLSBiLm1fd2lkdGgp
OworICAgICAgICBkaCA9IGFicyhtX2hlaWdodCAtIGIubV9oZWlnaHQpOworICAgICAgICByZXR1
cm4gZHcgPCAwLjEgJiYgZGggPCAwLjE7CisgICAgfQogcHJpdmF0ZToKICAgICBmbG9hdCBtX3dp
ZHRoLCBtX2hlaWdodDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCShyZXZpc2lvbiA4ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3MCw3ICsxMjcwLDcgQEAKICAgICAgICAgQ0dD
b250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKHBsYXRmb3JtQ29udGV4dCgpLCB0cnVlKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgS1VSTCYgbGluaywgY29u
c3QgSW50UmVjdCYgZGVzdFJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVj
dChjb25zdCBLVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEyODUsNyArMTI4NSw3
IEBACiAgICAgQ0dSZWN0IGJveCA9IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0
KTsKIAogICAgIEludFJlY3QgaW50Qm94KChpbnQpYm94Lm9yaWdpbi54LCAoaW50KWJveC5vcmln
aW4ueSwgKGludClib3guc2l6ZS53aWR0aCwgKGludClib3guc2l6ZS5oZWlnaHQpOwotICAgIElu
dFJlY3QgcmVjdCA9IGRlc3RSZWN0OworICAgIEludFJlY3QgcmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3QoZGVzdFJlY3QpOwogICAgIHJlY3QuaW50ZXJzZWN0KGludEJveCk7CiAKICAgICBDR1BERkNv
bnRleHRTZXRVUkxGb3JSZWN0KGNvbnRleHQsIHVybFJlZi5nZXQoKSwKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJKHJldmlzaW9uIDg4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDUsNyArMTQ1LDkgQEAKICAgICBJbnRQb2ludCBtYXhYTWF4WUNvcm5lcigpIGNvbnN0
IHsgcmV0dXJuIEludFBvaW50KG1fbG9jYXRpb24ueCgpICsgbV9zaXplLndpZHRoKCksIG1fbG9j
YXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgpKTsgfSAvLyB0eXBpY2FsbHkgYm90dG9tUmlnaHQK
ICAgICAKICAgICBib29sIGludGVyc2VjdHMoY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgIGJv
b2wgaW50ZXJzZWN0cyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKICAgICBib29sIGNvbnRhaW5z
KGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZsb2F0UmVj
dCYpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBjaGVja3MgdG8gc2VlIGlmIHRoZSByZWN0IGNvbnRh
aW5zIHgseSBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuCiAgICAgLy8gRXF1aXZhbGVudCB0byBj
aGVja2luZyBpZiB0aGUgcmVjdCBjb250YWlucyBhIDF4MSByZWN0IGJlbG93IGFuZCB0byB0aGUg
cmlnaHQgb2YgKHB4LHB5KS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFJlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ludFJlY3QuY3BwCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMiArNDgsMjIg
QEAKICAgICAgICAgJiYgeSgpIDwgb3RoZXIubWF4WSgpICYmIG90aGVyLnkoKSA8IG1heFkoKTsK
IH0KIAorYm9vbCBJbnRSZWN0OjppbnRlcnNlY3RzKGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGludGVyc2VjdHMoZW5jbG9zaW5nSW50UmVjdChvdGhlcikpOwor
fQorCiBib29sIEludFJlY3Q6OmNvbnRhaW5zKGNvbnN0IEludFJlY3QmIG90aGVyKSBjb25zdAog
ewogICAgIHJldHVybiB4KCkgPD0gb3RoZXIueCgpICYmIG1heFgoKSA+PSBvdGhlci5tYXhYKCkK
ICAgICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBtYXhZKCkgPj0gb3RoZXIubWF4WSgpOwog
fQogCitib29sIEludFJlY3Q6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbnRhaW5zKGVuY2xvc2luZ0ludFJlY3Qob3RoZXIpKTsKK30KKwog
dm9pZCBJbnRSZWN0OjppbnRlcnNlY3QoY29uc3QgSW50UmVjdCYgb3RoZXIpCiB7CiAgICAgaW50
IGwgPSBtYXgoeCgpLCBvdGhlci54KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCwx
MCArMTEwLDEyIEBACiAgICAgdm9pZCBtb3ZlQnkoY29uc3QgRmxvYXRQb2ludCYgZGVsdGEpIHsg
bV9sb2NhdGlvbi5tb3ZlKGRlbHRhLngoKSwgZGVsdGEueSgpKTsgfQogCiAgICAgYm9vbCBpbnRl
cnNlY3RzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworICAgIGJvb2wgaW50ZXJzZWN0cyhjb25z
dCBJbnRSZWN0JikgY29uc3Q7CiAgICAgYm9vbCBjb250YWlucyhjb25zdCBGbG9hdFJlY3QmKSBj
b25zdDsKIAogICAgIHZvaWQgaW50ZXJzZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQg
dW5pdGUoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCB1bml0ZShjb25zdCBJbnRSZWN0Jik7
CiAgICAgdm9pZCB1bml0ZUlmTm9uWmVybyhjb25zdCBGbG9hdFJlY3QmKTsKIAogICAgIC8vIE5v
dGUsIHRoaXMgZG9lc24ndCBtYXRjaCB3aGF0IEludFJlY3Q6OmNvbnRhaW5zKEludFBvaW50Jikg
ZG9lczsgdGhlIGludCB2ZXJzaW9uCkBAIC0xMzQsMTEgKzEzNiw0NiBAQAogICAgIHZvaWQgc2Nh
bGUoZmxvYXQgcykgeyBzY2FsZShzLCBzKTsgfQogICAgIHZvaWQgc2NhbGUoZmxvYXQgc3gsIGZs
b2F0IHN5KTsKIAorICAgIHZvaWQgZXhwYW5kKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyBtX3Np
emUgKz0gc2l6ZTsgfQorICAgIHZvaWQgZXhwYW5kKGZsb2F0IGR3LCBmbG9hdCBkaCkgeyBtX3Np
emUuZXhwYW5kKGR3LCBkaCk7IH0KKyAgICB2b2lkIGNvbnRyYWN0KGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkgeyBtX3NpemUgLT0gc2l6ZTsgfQorICAgIHZvaWQgY29udHJhY3QoZmxvYXQgZHcsIGZs
b2F0IGRoKSB7IG1fc2l6ZS5leHBhbmQoLWR3LCAtZGgpOyB9CisKKyAgICB2b2lkIHNoaWZ0WEVk
Z2VUbyhmbG9hdCBlZGdlKQorICAgIHsKKyAgICAgICAgZmxvYXQgZGVsdGEgPSBlZGdlIC0geCgp
OworICAgICAgICBzZXRYKGVkZ2UpOworICAgICAgICBzZXRXaWR0aChzdGQ6Om1heCgwLjBmLCB3
aWR0aCgpIC0gZGVsdGEpKTsKKyAgICB9CisgICAgdm9pZCBzaGlmdE1heFhFZGdlVG8oZmxvYXQg
ZWRnZSkKKyAgICB7CisgICAgICAgIGZsb2F0IGRlbHRhID0gZWRnZSAtIG1heFgoKTsKKyAgICAg
ICAgc2V0V2lkdGgoc3RkOjptYXgoMC4wZiwgd2lkdGgoKSArIGRlbHRhKSk7CisgICAgfQorICAg
IHZvaWQgc2hpZnRZRWRnZVRvKGZsb2F0IGVkZ2UpCisgICAgeworICAgICAgICBmbG9hdCBkZWx0
YSA9IGVkZ2UgLSB5KCk7CisgICAgICAgIHNldFkoZWRnZSk7CisgICAgICAgIHNldEhlaWdodChz
dGQ6Om1heCgwLjBmLCBoZWlnaHQoKSAtIGRlbHRhKSk7CisgICAgfQorICAgIHZvaWQgc2hpZnRN
YXhZRWRnZVRvKGZsb2F0IGVkZ2UpCisgICAgeworICAgICAgICBmbG9hdCBkZWx0YSA9IGVkZ2Ug
LSBtYXhZKCk7CisgICAgICAgIHNldEhlaWdodChzdGQ6Om1heCgwLjBmLCBoZWlnaHQoKSArIGRl
bHRhKSk7CisgICAgfQorCiAgICAgLy8gUmUtaW5pdGlhbGl6ZXMgdGhpcyByZWN0YW5nbGUgdG8g
Zml0IHRoZSBzZXRzIG9mIHBhc3NlZCBwb2ludHMuCiAgICAgdm9pZCBmaXRUb1BvaW50cyhjb25z
dCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEpOwogICAgIHZvaWQgZml0VG9Q
b2ludHMoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBG
bG9hdFBvaW50JiBwMik7CiAgICAgdm9pZCBmaXRUb1BvaW50cyhjb25zdCBGbG9hdFBvaW50JiBw
MCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBjb25zdCBGbG9h
dFBvaW50JiBwMyk7CisgICAgCisgICAgRmxvYXRQb2ludCBtaW5YTWluWUNvcm5lcigpIGNvbnN0
IHsgcmV0dXJuIG1fbG9jYXRpb247IH0gLy8gdHlwaWNhbGx5IHRvcExlZnQKKyAgICBGbG9hdFBv
aW50IG1heFhNaW5ZQ29ybmVyKCkgY29uc3QgeyByZXR1cm4gRmxvYXRQb2ludChtX2xvY2F0aW9u
LngoKSArIG1fc2l6ZS53aWR0aCgpLCBtX2xvY2F0aW9uLnkoKSk7IH0gLy8gdHlwaWNhbGx5IHRv
cFJpZ2h0CisgICAgRmxvYXRQb2ludCBtaW5YTWF4WUNvcm5lcigpIGNvbnN0IHsgcmV0dXJuIEZs
b2F0UG9pbnQobV9sb2NhdGlvbi54KCksIG1fbG9jYXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgp
KTsgfSAvLyB0eXBpY2FsbHkgYm90dG9tTGVmdAorICAgIEZsb2F0UG9pbnQgbWF4WE1heFlDb3Ju
ZXIoKSBjb25zdCB7IHJldHVybiBGbG9hdFBvaW50KG1fbG9jYXRpb24ueCgpICsgbV9zaXplLndp
ZHRoKCksIG1fbG9jYXRpb24ueSgpICsgbV9zaXplLmhlaWdodCgpKTsgfSAvLyB0eXBpY2FsbHkg
Ym90dG9tUmlnaHQKIAorICAgIEZsb2F0UmVjdCB0cmFuc3Bvc2VkUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIEZsb2F0UmVjdChtX2xvY2F0aW9uLnRyYW5zcG9zZWRQb2ludCgpLCBtX3NpemUudHJhbnNw
b3NlZFNpemUoKSk7IH0KKwogI2lmIFVTRShDRykgfHwgVVNFKFNLSUFfT05fTUFDX0NIUk9NRSkK
ICAgICBGbG9hdFJlY3QoY29uc3QgQ0dSZWN0Jik7CiAgICAgb3BlcmF0b3IgQ0dSZWN0KCkgY29u
c3Q7CkBAIC0yMTgsNyArMjU1LDEwIEBACiB9CiAKIEludFJlY3QgZW5jbG9zaW5nSW50UmVjdChj
b25zdCBGbG9hdFJlY3QmKTsKK0ludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRTaXplJik7CiAKK0ludFJlY3Qgcm91bmRlZEludFJlY3QoY29uc3Qg
RmxvYXRSZWN0Jik7CisKIC8vIE1hcCByZWN0IHIgZnJvbSBzcmNSZWN0IHRvIGFuIGVxdWl2YWxl
bnQgcmVjdCBpbiBkZXN0UmVjdC4KIEZsb2F0UmVjdCBtYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
ciwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3Qu
Y3BwCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDE0IEBACiAgICAgICAg
ICYmIHkoKSA8IG90aGVyLm1heFkoKSAmJiBvdGhlci55KCkgPCBtYXhZKCk7CiB9CiAKK2Jvb2wg
RmxvYXRSZWN0OjppbnRlcnNlY3RzKGNvbnN0IEludFJlY3QmIG90aGVyKSBjb25zdAoreworICAg
IC8vIENoZWNraW5nIGVtcHRpbmVzcyBoYW5kbGVzIG5lZ2F0aXZlIHdpZHRocyBhcyB3ZWxsIGFz
IHplcm8uCisgICAgcmV0dXJuICFpc0VtcHR5KCkgJiYgIW90aGVyLmlzRW1wdHkoKQorICAgICYm
IHgoKSA8IG90aGVyLm1heFgoKSAmJiBvdGhlci54KCkgPCBtYXhYKCkKKyAgICAmJiB5KCkgPCBv
dGhlci5tYXhZKCkgJiYgb3RoZXIueSgpIDwgbWF4WSgpOworfQorCiBib29sIEZsb2F0UmVjdDo6
Y29udGFpbnMoY29uc3QgRmxvYXRSZWN0JiBvdGhlcikgY29uc3QKIHsKICAgICByZXR1cm4geCgp
IDw9IG90aGVyLngoKSAmJiBtYXhYKCkgPj0gb3RoZXIubWF4WCgpCkBAIC05Nyw2ICsxMDUsMjQg
QEAKICAgICBzZXRMb2NhdGlvbkFuZFNpemVGcm9tRWRnZXMobCwgdCwgciwgYik7CiB9CiAKK3Zv
aWQgRmxvYXRSZWN0Ojp1bml0ZShjb25zdCBJbnRSZWN0JiBvdGhlcikKK3sKKyAgICAvLyBIYW5k
bGUgZW1wdHkgc3BlY2lhbCBjYXNlcyBmaXJzdC4KKyAgICBpZiAob3RoZXIuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKGlzRW1wdHkoKSkgeworICAgICAgICAqdGhpcyA9IG90
aGVyOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZmxvYXQgbCA9IG1pbih4KCksIChm
bG9hdClvdGhlci54KCkpOworICAgIGZsb2F0IHQgPSBtaW4oeSgpLCAoZmxvYXQpb3RoZXIueSgp
KTsKKyAgICBmbG9hdCByID0gbWF4KG1heFgoKSwgKGZsb2F0KW90aGVyLm1heFgoKSk7CisgICAg
ZmxvYXQgYiA9IG1heChtYXhZKCksIChmbG9hdClvdGhlci5tYXhZKCkpOworCisgICAgc2V0TG9j
YXRpb25BbmRTaXplRnJvbUVkZ2VzKGwsIHQsIHIsIGIpOworfQorCiB2b2lkIEZsb2F0UmVjdDo6
dW5pdGVJZk5vblplcm8oY29uc3QgRmxvYXRSZWN0JiBvdGhlcikKIHsKICAgICAvLyBIYW5kbGUg
ZW1wdHkgc3BlY2lhbCBjYXNlcyBmaXJzdC4KQEAgLTE4NCwxNSArMjEwLDI1IEBACiAKIEludFJl
Y3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgZmxvYXQg
bGVmdCA9IGZsb29yZihyZWN0LngoKSk7Ci0gICAgZmxvYXQgdG9wID0gZmxvb3JmKHJlY3QueSgp
KTsKLSAgICBmbG9hdCB3aWR0aCA9IGNlaWxmKHJlY3QubWF4WCgpKSAtIGxlZnQ7Ci0gICAgZmxv
YXQgaGVpZ2h0ID0gY2VpbGYocmVjdC5tYXhZKCkpIC0gdG9wOworICAgIHJldHVybiBlbmNsb3Np
bmdJbnRSZWN0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5zaXplKCkpOworfQorCitJbnRSZWN0IGVu
Y2xvc2luZ0ludFJlY3QoY29uc3QgRmxvYXRQb2ludCYgbG9jYXRpb24sIGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSkKK3sKKyAgICBmbG9hdCBsZWZ0ID0gZmxvb3JmKGxvY2F0aW9uLngoKSk7CisgICAg
ZmxvYXQgdG9wID0gZmxvb3JmKGxvY2F0aW9uLnkoKSk7CisgICAgZmxvYXQgd2lkdGggPSBjZWls
Zihsb2NhdGlvbi54KCkgKyBzaXplLndpZHRoKCkpIC0gbGVmdDsKKyAgICBmbG9hdCBoZWlnaHQg
PSBjZWlsZihsb2NhdGlvbi55KCkgKyBzaXplLmhlaWdodCgpKSAtIHRvcDsKICAgICAKICAgICBy
ZXR1cm4gSW50UmVjdChjbGFtcFRvSW50ZWdlcihsZWZ0KSwgY2xhbXBUb0ludGVnZXIodG9wKSwg
CiAgICAgICAgICAgICAgICAgICAgY2xhbXBUb0ludGVnZXIod2lkdGgpLCBjbGFtcFRvSW50ZWdl
cihoZWlnaHQpKTsKIH0KIAorSW50UmVjdCByb3VuZGVkSW50UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit7CisgICAgcmV0dXJuIEludFJlY3Qocm91bmRlZEludFBvaW50KHJlY3QubG9jYXRp
b24oKSksIHJvdW5kZWRJbnRTaXplKHJlY3Quc2l6ZSgpKSk7Cit9CisKIEZsb2F0UmVjdCBtYXBS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgciwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0KQogewogICAgIGlmIChzcmNSZWN0LndpZHRoKCkgPT0gMCB8fCBz
cmNSZWN0LmhlaWdodCgpID09IDApCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtT3BlcmF0aW9u
LmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dHJhbnNmb3Jtcy9UcmFuc2Zvcm1PcGVyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyAr
MjYsNyBAQAogI2RlZmluZSBUcmFuc2Zvcm1PcGVyYXRpb25faAogCiAjaW5jbHVkZSAiVHJhbnNm
b3JtYXRpb25NYXRyaXguaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiRmxvYXRT
aXplLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogCkBAIC01OSw3ICs1OSw3IEBACiAgICAgdmlydHVhbCBib29sIGlzSWRlbnRpdHko
KSBjb25zdCA9IDA7CiAKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgYm9yZGVyQm94U2l6ZSB3
YXMgdXNlZCBpbiB0aGUgY29tcHV0YXRpb24sIGZhbHNlIG90aGVyd2lzZS4KLSAgICB2aXJ0dWFs
IGJvb2wgYXBwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBJbnRTaXplJiBib3JkZXJC
b3hTaXplKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGFwcGx5KFRyYW5zZm9ybWF0aW9u
TWF0cml4JiwgY29uc3QgRmxvYXRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdCA9IDA7CiAKICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFu
c2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRp
dHkgPSBmYWxzZSkgPSAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90cmFuc2Zvcm1zL1NjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9TY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbi5oCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtNTksNyArNTksNyBAQAogICAgICAgICByZXR1cm4gbV94ID09IHMtPm1feCAmJiBtX3kg
PT0gcy0+bV95ICYmIG1feiA9PSBzLT5tX3o7CiAgICAgfQogCi0gICAgdmlydHVhbCBib29sIGFw
cGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IEludFNpemUmKSBjb25z
dAorICAgIHZpcnR1YWwgYm9vbCBhcHBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFNpemUmKSBjb25zdAogICAgIHsKICAgICAgICAgdHJhbnNmb3JtLnNjYWxl
M2QobV94LCBtX3ksIG1feik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvUGVyc3BlY3RpdmVUcmFuc2Zvcm1P
cGVyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90cmFuc2Zvcm1zL1BlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmgJKHJldmlzaW9uIDg4
NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9QZXJz
cGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3
IEBACiAgICAgICAgIHJldHVybiBtX3AgPT0gcC0+bV9wOwogICAgIH0KIAotICAgIHZpcnR1YWwg
Ym9vbCBhcHBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBJbnRTaXpl
JikgY29uc3QKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRy
YW5zZm9ybSwgY29uc3QgRmxvYXRTaXplJikgY29uc3QKICAgICB7CiAgICAgICAgIHRyYW5zZm9y
bS5hcHBseVBlcnNwZWN0aXZlKG1fcC5jYWxjRmxvYXRWYWx1ZSgxKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0
aW9uLmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9JZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw3ICs0Niw3IEBACiAgICAgICAgIHJldHVybiBpc1NhbWVUeXBlKG8pOwogICAgIH0K
IAotICAgIHZpcnR1YWwgYm9vbCBhcHBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IElu
dFNpemUmKSBjb25zdAorICAgIHZpcnR1YWwgYm9vbCBhcHBseShUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYsIGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9NYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRp
b24uaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90cmFuc2Zvcm1zL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgcmV0dXJuIG1fbWF0cml4ID09IG0tPm1fbWF0cml4
OwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBhcHBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dHJhbnNmb3JtLCBjb25zdCBJbnRTaXplJikgY29uc3QKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHko
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRTaXplJikgY29uc3QK
ICAgICB7CiAgICAgICAgIHRyYW5zZm9ybS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCht
X21hdHJpeCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDIsOSArNDIsOSBAQAogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbih0eCwgdHksIHR6
LCB0eXBlKSk7CiAgICAgfQogCi0gICAgZG91YmxlIHgoY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94
U2l6ZSkgY29uc3QgeyByZXR1cm4gbV94LmNhbGNGbG9hdFZhbHVlKGJvcmRlckJveFNpemUud2lk
dGgoKSk7IH0KLSAgICBkb3VibGUgeShjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBjb25z
dCB7IHJldHVybiBtX3kuY2FsY0Zsb2F0VmFsdWUoYm9yZGVyQm94U2l6ZS5oZWlnaHQoKSk7IH0K
LSAgICBkb3VibGUgeihjb25zdCBJbnRTaXplJikgY29uc3QgeyByZXR1cm4gbV96LmNhbGNGbG9h
dFZhbHVlKDEpOyB9CisgICAgZG91YmxlIHgoY29uc3QgRmxvYXRTaXplJiBib3JkZXJCb3hTaXpl
KSBjb25zdCB7IHJldHVybiBtX3guY2FsY0Zsb2F0VmFsdWUoYm9yZGVyQm94U2l6ZS53aWR0aCgp
KTsgfQorICAgIGRvdWJsZSB5KGNvbnN0IEZsb2F0U2l6ZSYgYm9yZGVyQm94U2l6ZSkgY29uc3Qg
eyByZXR1cm4gbV95LmNhbGNGbG9hdFZhbHVlKGJvcmRlckJveFNpemUuaGVpZ2h0KCkpOyB9Cisg
ICAgZG91YmxlIHooY29uc3QgRmxvYXRTaXplJikgY29uc3QgeyByZXR1cm4gbV96LmNhbGNGbG9h
dFZhbHVlKDEpOyB9CiAKICAgICBMZW5ndGggeCgpIGNvbnN0IHsgcmV0dXJuIG1feDsgfQogICAg
IExlbmd0aCB5KCkgY29uc3QgeyByZXR1cm4gbV95OyB9CkBAIC02NCw3ICs2NCw3IEBACiAgICAg
ICAgIHJldHVybiBtX3ggPT0gdC0+bV94ICYmIG1feSA9PSB0LT5tX3kgJiYgbV96ID09IHQtPm1f
ejsKICAgICB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSkgY29uc3QKKyAgICB2aXJ0
dWFsIGJvb2wgYXBwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgRmxv
YXRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdAogICAgIHsKICAgICAgICAgdHJhbnNmb3JtLnRy
YW5zbGF0ZTNkKHgoYm9yZGVyQm94U2l6ZSksIHkoYm9yZGVyQm94U2l6ZSksIHooYm9yZGVyQm94
U2l6ZSkpOwogICAgICAgICByZXR1cm4gbV94LnR5cGUoKSA9PSBQZXJjZW50IHx8IG1feS50eXBl
KCkgPT0gUGVyY2VudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Sb3RhdGVUcmFuc2Zvcm1PcGVy
YXRpb24uaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgIHJldHVybiBtX3ggPT0gci0+bV94ICYmIG1feSA9
PSByLT5tX3kgJiYgbV96ID09IHItPm1feiAmJiBtX2FuZ2xlID09IHItPm1fYW5nbGU7CiAgICAg
fQogCi0gICAgdmlydHVhbCBib29sIGFwcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zv
cm0sIGNvbnN0IEludFNpemUmIC8qYm9yZGVyQm94U2l6ZSovKSBjb25zdAorICAgIHZpcnR1YWwg
Ym9vbCBhcHBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFNp
emUmIC8qYm9yZGVyQm94U2l6ZSovKSBjb25zdAogICAgIHsKICAgICAgICAgdHJhbnNmb3JtLnJv
dGF0ZTNkKG1feCwgbV95LCBtX3osIG1fYW5nbGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9y
bU9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9wZXJhdGlvbnMuaAkocmV2aXNpb24gODg0OTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybU9w
ZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQAogICAgICAgICByZXR1
cm4gISgqdGhpcyA9PSBvKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBhcHBseShjb25zdCBJbnRT
aXplJiBzeiwgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpIGNvbnN0CisgICAgdm9pZCBhcHBseShj
b25zdCBGbG9hdFNpemUmIHN6LCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkgY29uc3QKICAgICB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX29wZXJhdGlvbnMuc2l6ZSgpOyAr
K2kpCiAgICAgICAgICAgICBtX29wZXJhdGlvbnNbaV0tPmFwcGx5KHQsIHN6KTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvTWF0cml4VHJhbnNmb3Jt
T3BlcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9NYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaAkocmV2aXNpb24gODg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL01hdHJpeFRy
YW5zZm9ybU9wZXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBACiAgICAg
ICAgIHJldHVybiBtX2EgPT0gbS0+bV9hICYmIG1fYiA9PSBtLT5tX2IgJiYgbV9jID09IG0tPm1f
YyAmJiBtX2QgPT0gbS0+bV9kICYmIG1fZSA9PSBtLT5tX2UgJiYgbV9mID09IG0tPm1fZjsKICAg
ICB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5z
Zm9ybSwgY29uc3QgSW50U2l6ZSYpIGNvbnN0CisgICAgdmlydHVhbCBib29sIGFwcGx5KFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0U2l6ZSYpIGNvbnN0CiAgICAg
ewogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgobV9hLCBtX2IsIG1fYywgbV9k
LCBtX2UsIG1fZik7CiAgICAgICAgIHRyYW5zZm9ybS5tdWx0aXBseShtYXRyaXgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3Jt
T3BlcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgJKHJldmlzaW9uIDg4NDk2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9Ta2V3VHJhbnNm
b3JtT3BlcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAKICAgICAgICAg
cmV0dXJuIG1fYW5nbGVYID09IHMtPm1fYW5nbGVYICYmIG1fYW5nbGVZID09IHMtPm1fYW5nbGVZ
OwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBhcHBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dHJhbnNmb3JtLCBjb25zdCBJbnRTaXplJikgY29uc3QKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHko
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRTaXplJikgY29uc3QK
ICAgICB7CiAgICAgICAgIHRyYW5zZm9ybS5za2V3KG1fYW5nbGVYLCBtX2FuZ2xlWSk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVt
ZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVN
YWMubW0JKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Ro
ZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NjMsNyArNTYzLDcgQEAKICAgICAKIC8vIFRo
ZW1lIG92ZXJyaWRlcwogCi1pbnQgVGhlbWVNYWM6OmJhc2VsaW5lUG9zaXRpb25BZGp1c3RtZW50
KENvbnRyb2xQYXJ0IHBhcnQpIGNvbnN0CitmbG9hdCBUaGVtZU1hYzo6YmFzZWxpbmVQb3NpdGlv
bkFkanVzdG1lbnQoQ29udHJvbFBhcnQgcGFydCkgY29uc3QKIHsKICAgICBpZiAocGFydCA9PSBD
aGVja2JveFBhcnQgfHwgcGFydCA9PSBSYWRpb1BhcnQpCiAgICAgICAgIHJldHVybiAtMjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5oCShyZXZpc2lvbiA4ODQ5NikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw3ICszNSw3IEBACiAgICAgVGhlbWVNYWMoKSB7IH0KICAgICB2aXJ0dWFsIH5UaGVt
ZU1hYygpIHsgfQogICAgIAotICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb25BZGp1c3Rt
ZW50KENvbnRyb2xQYXJ0KSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IGJhc2VsaW5lUG9zaXRp
b25BZGp1c3RtZW50KENvbnRyb2xQYXJ0KSBjb25zdDsKIAogICAgIHZpcnR1YWwgRm9udERlc2Ny
aXB0aW9uIGNvbnRyb2xGb250KENvbnRyb2xQYXJ0LCBjb25zdCBGb250JiwgZmxvYXQgem9vbUZh
Y3RvcikgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguaAkocmV2aXNp
b24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguaAkod29ya2luZyBj
b3B5KQpAQCAtMTI5LDMxICsxMjksMzEgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGludCBj
YWxjTWluVmFsdWUoaW50IG1heFZhbHVlLCBib29sIHJvdW5kUGVyY2VudGFnZXMgPSBmYWxzZSkg
Y29uc3QKKyAgICBmbG9hdCBjYWxjTWluVmFsdWUoZmxvYXQgbWF4VmFsdWUsIGJvb2wgcm91bmRQ
ZXJjZW50YWdlcyA9IGZhbHNlKSBjb25zdAogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlKCkp
IHsKICAgICAgICAgICAgIGNhc2UgRml4ZWQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVl
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldEZsb2F0VmFsdWUoKTsKICAgICAgICAgICAg
IGNhc2UgUGVyY2VudDoKICAgICAgICAgICAgICAgICBpZiAocm91bmRQZXJjZW50YWdlcykKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocm91bmQobWF4VmFsdWUg
KiBwZXJjZW50KCkgLyAxMDAuMGYpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyb3Vu
ZChtYXhWYWx1ZSAqIHBlcmNlbnQoKSAvIDEwMC4wZikpOwogICAgICAgICAgICAgICAgIC8vIERv
bid0IHJlbW92ZSB0aGUgZXh0cmEgY2FzdCB0byBmbG9hdC4gSXQgaXMgbmVlZGVkIGZvciByb3Vu
ZGluZyBvbiAzMi1iaXQgSW50ZWwgbWFjaGluZXMgdGhhdCB1c2UgdGhlIEZQVSBzdGFjay4KLSAg
ICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzdGF0aWNfY2FzdDxmbG9hdD4o
bWF4VmFsdWUgKiBwZXJjZW50KCkgLyAxMDAuMGYpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bWF4VmFsdWUgKiBwZXJjZW50KCkgLyAxMDAuMGY7CiAgICAgICAgICAgICBjYXNlIEF1dG86CiAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9
CiAgICAgfQogCi0gICAgZmxvYXQgY2FsY0Zsb2F0VmFsdWUoaW50IG1heFZhbHVlKSBjb25zdAor
ICAgIGZsb2F0IGNhbGNGbG9hdFZhbHVlKGZsb2F0IG1heFZhbHVlKSBjb25zdAogICAgIHsKICAg
ICAgICAgc3dpdGNoICh0eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgRml4ZWQ6CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdldEZsb2F0VmFsdWUoKTsKICAgICAgICAgICAgIGNhc2UgUGVyY2Vu
dDoKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1heFZhbHVlICog
cGVyY2VudCgpIC8gMTAwLjBmKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF4VmFsdWUgKiBw
ZXJjZW50KCkgLyAxMDAuMGY7CiAgICAgICAgICAgICBjYXNlIEF1dG86Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtYXhWYWx1ZSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIG1heFZhbHVlOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHVuZGVmaW5lZExlbmd0aCk7CiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9UaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBACiAg
ICAgLy8gcG9zaXRpb24gY2Fubm90IGJlIGRldGVybWluZWQgYnkgZXhhbWluaW5nIGNoaWxkIGNv
bnRlbnQuIENoZWNrYm94ZXMgYW5kIHJhZGlvIGJ1dHRvbnMgYXJlIGV4YW1wbGVzIG9mCiAgICAg
Ly8gY29udHJvbHMgdGhhdCBuZWVkIHRvIGRvIHRoaXMuICBUaGUgYWRqdXN0bWVudCBpcyBhbiBv
ZmZzZXQgdGhhdCBhZGRzIHRvIHRoZSBiYXNlbGluZSwgZS5nLiwgbWFyZ2luVG9wKCkgKyBoZWln
aHQoKSArIHxvZmZzZXR8LgogICAgIC8vIFRoZSBvZmZzZXQgaXMgbm90IHpvb21lZC4KLSAgICB2
aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uQWRqdXN0bWVudChDb250cm9sUGFydCkgY29uc3Qg
eyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgZmxvYXQgYmFzZWxpbmVQb3NpdGlvbkFkanVzdG1l
bnQoQ29udHJvbFBhcnQpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIC8vIEEgbWV0aG9kIGFz
a2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyBhcHBlYXJhbmNlIHdoZW4gdGhlIHdpbmRv
dyBpcyBpbmFjdGl2ZS4KICAgICB2aXJ0dWFsIGJvb2wgY29udHJvbEhhc0luYWN0aXZlQXBwZWFy
YW5jZShDb250cm9sUGFydCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODQs
NyArNjg0LDcgQEAKIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNPZmZTY3JlZW4o
KSBjb25zdAogewogICAgIEFTU0VSVChtX3JlbmRlcmVyKTsKLSAgICBJbnRSZWN0IGNvbnRlbnRS
ZWN0ID0gbV9yZW5kZXJlci0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7CisgICAgRmxv
YXRSZWN0IGNvbnRlbnRSZWN0ID0gbV9yZW5kZXJlci0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dS
ZWN0KCk7CiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9yZW5kZXJlci0+ZnJhbWUoKS0+dmlldygp
OwogICAgIEZsb2F0UmVjdCB2aWV3UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOwog
ICAgIHZpZXdSZWN0LmludGVyc2VjdChjb250ZW50UmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcAkocmV2aXNpb24gODg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjU0LDcgKzI1NCw3IEBACiAgICAgICAgIFJlbmRlckJveCogcmVuZGVy
Qm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOwogCiAgICAgICAgIC8vIFJlbmRlckJveCByZXR1
cm5zIHRoZSAicHVyZSIgY29udGVudCBhcmVhIGJveCwgZXhjbHVzaXZlIG9mIHRoZSBzY3JvbGxi
YXJzIChpZiBwcmVzZW50KSwgd2hpY2ggYWxzbyBjb3VudCB0b3dhcmRzIHRoZSBjb250ZW50IGFy
ZWEgaW4gQ1NTLgotICAgICAgICBJbnRSZWN0IGNvbnRlbnRCb3ggPSByZW5kZXJCb3gtPmNvbnRl
bnRCb3hSZWN0KCk7CisgICAgICAgIEZsb2F0UmVjdCBjb250ZW50Qm94ID0gcmVuZGVyQm94LT5j
b250ZW50Qm94UmVjdCgpOwogICAgICAgICBjb250ZW50Qm94LnNldFdpZHRoKGNvbnRlbnRCb3gu
d2lkdGgoKSArIHJlbmRlckJveC0+dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpKTsKICAgICAgICAg
Y29udGVudEJveC5zZXRIZWlnaHQoY29udGVudEJveC5oZWlnaHQoKSArIHJlbmRlckJveC0+aG9y
aXpvbnRhbFNjcm9sbGJhckhlaWdodCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDE3ICs3OCwxNyBA
QAogCiAgICAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVCeVN0YXJ0KGNvbnN0IElubGluZVRl
eHRCb3gqIGZpcnN0LCBjb25zdCBJbmxpbmVUZXh0Qm94KiBzZWNvbmQpIHsgcmV0dXJuIGZpcnN0
LT5zdGFydCgpIDwgc2Vjb25kLT5zdGFydCgpOyB9CiAKLSAgICB2aXJ0dWFsIGludCBiYXNlbGlu
ZVBvc2l0aW9uKEZvbnRCYXNlbGluZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbGluZUhlaWdo
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxp
bmUpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgbGluZUhlaWdodCgpIGNvbnN0OwogCiAgICAg
Ym9vbCBnZXRFbXBoYXNpc01hcmtQb3NpdGlvbihSZW5kZXJTdHlsZSosIFRleHRFbXBoYXNpc1Bv
c2l0aW9uJikgY29uc3Q7CiAKICAgICBJbnRSZWN0IGxvZ2ljYWxPdmVyZmxvd1JlY3QoKSBjb25z
dDsKICAgICB2b2lkIHNldExvZ2ljYWxPdmVyZmxvd1JlY3QoY29uc3QgSW50UmVjdCYpOwotICAg
IGludCBsb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBsb2dpY2FsT3Zl
cmZsb3dSZWN0KCkueSgpOyB9Ci0gICAgaW50IGxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdygp
IGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxPdmVyZmxvd1JlY3QoKS5tYXhZKCk7IH0KLSAgICBpbnQg
bG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxPdmVyZmxv
d1JlY3QoKS54KCk7IH0KLSAgICBpbnQgbG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3coKSBjb25z
dCB7IHJldHVybiBsb2dpY2FsT3ZlcmZsb3dSZWN0KCkubWF4WCgpOyB9CisgICAgZmxvYXQgbG9n
aWNhbFRvcFZpc3VhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbE92ZXJmbG93UmVj
dCgpLnkoKTsgfQorICAgIGZsb2F0IGxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdygpIGNvbnN0
IHsgcmV0dXJuIGxvZ2ljYWxPdmVyZmxvd1JlY3QoKS5tYXhZKCk7IH0KKyAgICBmbG9hdCBsb2dp
Y2FsTGVmdFZpc3VhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbE92ZXJmbG93UmVj
dCgpLngoKTsgfQorICAgIGZsb2F0IGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93KCkgY29uc3Qg
eyByZXR1cm4gbG9naWNhbE92ZXJmbG93UmVjdCgpLm1heFgoKTsgfQogCiAjaWZuZGVmIE5ERUJV
RwogICAgIHZpcnR1YWwgdm9pZCBzaG93Qm94KGludCA9IDApIGNvbnN0OwpAQCAtMTEwLDcgKzEx
MCw3IEBACiAgICAgdm9pZCBzZWxlY3Rpb25TdGFydEVuZChpbnQmIHNQb3MsIGludCYgZVBvcyk7
CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3Qg
SW50UG9pbnQmLCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOworICAgIHZpcnR1YWwgdm9p
ZCBwYWludChQYWludEluZm8mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGxpbmVUb3AsIGludCBs
aW5lQm90dG9tKTsKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5l
Qm90dG9tKTsKIAogcHVibGljOgpAQCAtMTY5LDcgKzE2OSw3IEBACiAgICAgdm9pZCBwYWludERv
Y3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmln
aW4sIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYsIGJvb2wgYmFja2dyb3VuZCk7CiAgICAgdm9p
ZCBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmKTsKICNpZiBQTEFU
Rk9STShNQUMpCi0gICAgdm9pZCBwYWludEN1c3RvbUhpZ2hsaWdodChjb25zdCBJbnRQb2ludCYs
IGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSk7CisgICAgdm9pZCBwYWludEN1c3RvbUhpZ2hsaWdo
dChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKTsKICNlbmRpZgog
CiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxl
Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxl
eGlibGVCb3guY3BwCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw3ICsxNDksNyBA
QAogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaW50IG1hcmdpbiA9IG1hcmdpbldp
ZHRoRm9yQ2hpbGQoY2hpbGQpOwotICAgICAgICBpbnQgd2lkdGggPSBjaGlsZC0+bWluUHJlZmVy
cmVkTG9naWNhbFdpZHRoKCkgKyBtYXJnaW47CisgICAgICAgIGZsb2F0IHdpZHRoID0gY2hpbGQt
Pm1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpICsgbWFyZ2luOwogICAgICAgICBtX21pblByZWZl
cnJlZExvZ2ljYWxXaWR0aCA9IG1heCh3aWR0aCwgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgp
OwogCiAgICAgICAgIHdpZHRoID0gY2hpbGQtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpICsg
bWFyZ2luOwpAQCAtMTk4LDcgKzE5OCw3IEBACiAgICAgc2V0UHJlZmVycmVkTG9naWNhbFdpZHRo
c0RpcnR5KGZhbHNlKTsKIH0KIAotdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0QmxvY2so
Ym9vbCByZWxheW91dENoaWxkcmVuLCBpbnQgLypwYWdlSGVpZ2h0IEZJWE1FOiBJbXBsZW1lbnQg
Ki8pCit2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hp
bGRyZW4sIGZsb2F0IC8qcGFnZUhlaWdodCBGSVhNRTogSW1wbGVtZW50ICovKQogewogICAgIEFT
U0VSVChuZWVkc0xheW91dCgpKTsKIApAQCAtMjA4LDcgKzIwOCw3IEBACiAgICAgTGF5b3V0UmVw
YWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpOwog
ICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMsIEludFNp
emUoeCgpLCB5KCkpLCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwgc3R5bGUo
KS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSk7CiAKLSAgICBJbnRTaXplIHByZXZpb3Vz
U2l6ZSA9IHNpemUoKTsKKyAgICBGbG9hdFNpemUgcHJldmlvdXNTaXplID0gc2l6ZSgpOwogCiAg
ICAgY29tcHV0ZUxvZ2ljYWxXaWR0aCgpOwogICAgIGNvbXB1dGVMb2dpY2FsSGVpZ2h0KCk7CkBA
IC0zMTAsMTMgKzMxMCwxMyBAQAogCiB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRIb3Jp
em9udGFsQm94KGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKIHsKLSAgICBpbnQgdG9BZGQgPSBib3Jk
ZXJCb3R0b20oKSArIHBhZGRpbmdCb3R0b20oKSArIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQo
KTsKLSAgICBpbnQgeVBvcyA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpOwotICAgIGludCB4
UG9zID0gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKKyAgICBmbG9hdCB0b0FkZCA9IGJv
cmRlckJvdHRvbSgpICsgcGFkZGluZ0JvdHRvbSgpICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdo
dCgpOworICAgIGZsb2F0IHlQb3MgPSBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsKKyAgICBm
bG9hdCB4UG9zID0gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKICAgICBib29sIGhlaWdo
dFNwZWNpZmllZCA9IGZhbHNlOwotICAgIGludCBvbGRIZWlnaHQgPSAwOworICAgIGZsb2F0IG9s
ZEhlaWdodCA9IDA7CiAKLSAgICBpbnQgcmVtYWluaW5nU3BhY2UgPSAwOworICAgIGZsb2F0IHJl
bWFpbmluZ1NwYWNlID0gMDsKIAogCiAgICAgRmxleEJveEl0ZXJhdG9yIGl0ZXJhdG9yKHRoaXMp
OwpAQCAtMzM4LDcgKzMzOCw3IEBACiAgICAgICAgIC8vIE91ciBmaXJzdCBwYXNzIGlzIGRvbmUg
d2l0aG91dCBmbGV4aW5nLiAgV2Ugc2ltcGx5IGxheSB0aGUgY2hpbGRyZW4KICAgICAgICAgLy8g
b3V0IHdpdGhpbiB0aGUgYm94LiAgV2UgaGF2ZSB0byBkbyBhIGxheW91dCBmaXJzdCBpbiBvcmRl
ciB0byBkZXRlcm1pbmUKICAgICAgICAgLy8gb3VyIGJveCdzIGludHJpbnNpYyBoZWlnaHQuCi0g
ICAgICAgIGludCBtYXhBc2NlbnQgPSAwLCBtYXhEZXNjZW50ID0gMDsKKyAgICAgICAgZmxvYXQg
bWF4QXNjZW50ID0gMCwgbWF4RGVzY2VudCA9IDA7CiAgICAgICAgIGZvciAoUmVuZGVyQm94KiBj
aGlsZCA9IGl0ZXJhdG9yLmZpcnN0KCk7IGNoaWxkOyBjaGlsZCA9IGl0ZXJhdG9yLm5leHQoKSkg
ewogICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIHJlbGF5b3V0IGNoaWxkcmVuIGlmIHdlIG5l
ZWQgaXQuCiAgICAgICAgICAgICBpZiAocmVsYXlvdXRDaGlsZHJlbiB8fCAoY2hpbGQtPmlzUmVw
bGFjZWQoKSAmJiAoY2hpbGQtPnN0eWxlKCktPndpZHRoKCkuaXNQZXJjZW50KCkgfHwgY2hpbGQt
PnN0eWxlKCktPmhlaWdodCgpLmlzUGVyY2VudCgpKSkpCkBAIC0zNTgsMTEgKzM1OCwxMSBAQAog
CiAgICAgICAgICAgICAvLyBVcGRhdGUgb3VyIGhlaWdodCBhbmQgb3ZlcmZsb3cgaGVpZ2h0Lgog
ICAgICAgICAgICAgaWYgKHN0eWxlKCktPmJveEFsaWduKCkgPT0gQkJBU0VMSU5FKSB7Ci0gICAg
ICAgICAgICAgICAgaW50IGFzY2VudCA9IGNoaWxkLT5maXJzdExpbmVCb3hCYXNlbGluZSgpOwor
ICAgICAgICAgICAgICAgIGZsb2F0IGFzY2VudCA9IGNoaWxkLT5maXJzdExpbmVCb3hCYXNlbGlu
ZSgpOwogICAgICAgICAgICAgICAgIGlmIChhc2NlbnQgPT0gLTEpCiAgICAgICAgICAgICAgICAg
ICAgIGFzY2VudCA9IGNoaWxkLT5oZWlnaHQoKSArIGNoaWxkLT5tYXJnaW5Cb3R0b20oKTsKICAg
ICAgICAgICAgICAgICBhc2NlbnQgKz0gY2hpbGQtPm1hcmdpblRvcCgpOwotICAgICAgICAgICAg
ICAgIGludCBkZXNjZW50ID0gKGNoaWxkLT5tYXJnaW5Ub3AoKSArIGNoaWxkLT5oZWlnaHQoKSAr
IGNoaWxkLT5tYXJnaW5Cb3R0b20oKSkgLSBhc2NlbnQ7CisgICAgICAgICAgICAgICAgZmxvYXQg
ZGVzY2VudCA9IChjaGlsZC0+bWFyZ2luVG9wKCkgKyBjaGlsZC0+aGVpZ2h0KCkgKyBjaGlsZC0+
bWFyZ2luQm90dG9tKCkpIC0gYXNjZW50OwogCiAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIG91
ciBtYXhpbXVtIGFzY2VudC4KICAgICAgICAgICAgICAgICBtYXhBc2NlbnQgPSBtYXgobWF4QXNj
ZW50LCBhc2NlbnQpOwpAQCAtNDA3LDcgKzQwNyw3IEBACiAgICAgICAgICAgICAvLyBXZSBuZWVk
IHRvIHNlZSBpZiB0aGlzIGNoaWxkJ3MgaGVpZ2h0IGhhcyBjaGFuZ2VkLCBzaW5jZSB3ZSBtYWtl
IGJsb2NrIGVsZW1lbnRzCiAgICAgICAgICAgICAvLyBmaWxsIHRoZSBoZWlnaHQgb2YgYSBjb250
YWluaW5nIGJveCBieSBkZWZhdWx0LgogICAgICAgICAgICAgLy8gTm93IGRvIGEgbGF5b3V0Lgot
ICAgICAgICAgICAgaW50IG9sZENoaWxkSGVpZ2h0ID0gY2hpbGQtPmhlaWdodCgpOworICAgICAg
ICAgICAgZmxvYXQgb2xkQ2hpbGRIZWlnaHQgPSBjaGlsZC0+aGVpZ2h0KCk7CiAgICAgICAgICAg
ICBjaGlsZC0+Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgICAgIGlmIChvbGRDaGls
ZEhlaWdodCAhPSBjaGlsZC0+aGVpZ2h0KCkpCiAgICAgICAgICAgICAgICAgY2hpbGQtPnNldENo
aWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwpAQCAtNDIyLDcgKzQyMiw3IEBACiAgICAgICAg
ICAgICBpbnQgY2hpbGRZID0geVBvczsKICAgICAgICAgICAgIHN3aXRjaCAoc3R5bGUoKS0+Ym94
QWxpZ24oKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQkNFTlRFUjoKLSAgICAgICAgICAgICAg
ICAgICAgY2hpbGRZICs9IGNoaWxkLT5tYXJnaW5Ub3AoKSArIG1heCgwLCAoY29udGVudEhlaWdo
dCgpIC0gKGNoaWxkLT5oZWlnaHQoKSArIGNoaWxkLT5tYXJnaW5Ub3AoKSArIGNoaWxkLT5tYXJn
aW5Cb3R0b20oKSkpIC8gMik7CisgICAgICAgICAgICAgICAgICAgIGNoaWxkWSArPSBjaGlsZC0+
bWFyZ2luVG9wKCkgKyBtYXgoMC4wZiwgKGNvbnRlbnRIZWlnaHQoKSAtIChjaGlsZC0+aGVpZ2h0
KCkgKyBjaGlsZC0+bWFyZ2luVG9wKCkgKyBjaGlsZC0+bWFyZ2luQm90dG9tKCkpKSAvIDIpOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIEJCQVNFTElO
RTogewogICAgICAgICAgICAgICAgICAgICBpbnQgYXNjZW50ID0gY2hpbGQtPmZpcnN0TGluZUJv
eEJhc2VsaW5lKCk7CkBAIC02NTMsNyArNjUzLDcgQEAKICAgICAgICAgICAgIHN3aXRjaCAoc3R5
bGUoKS0+Ym94QWxpZ24oKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQkNFTlRFUjoKICAgICAg
ICAgICAgICAgICBjYXNlIEJCQVNFTElORTogLy8gQmFzZWxpbmUganVzdCBtYXBzIHRvIGNlbnRl
ciBmb3IgdmVydGljYWwgYm94ZXMKLSAgICAgICAgICAgICAgICAgICAgY2hpbGRYICs9IGNoaWxk
LT5tYXJnaW5MZWZ0KCkgKyBtYXgoMCwgKGNvbnRlbnRXaWR0aCgpIC0gKGNoaWxkLT53aWR0aCgp
ICsgY2hpbGQtPm1hcmdpbkxlZnQoKSArIGNoaWxkLT5tYXJnaW5SaWdodCgpKSkgLyAyKTsKKyAg
ICAgICAgICAgICAgICAgICAgY2hpbGRYICs9IGNoaWxkLT5tYXJnaW5MZWZ0KCkgKyBtYXgoMC4w
ZiwgKGNvbnRlbnRXaWR0aCgpIC0gKGNoaWxkLT53aWR0aCgpICsgY2hpbGQtPm1hcmdpbkxlZnQo
KSArIGNoaWxkLT5tYXJnaW5SaWdodCgpKSkgLyAyKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgY2FzZSBCRU5EOgogICAgICAgICAgICAgICAgICAgICBpZiAo
IXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKQEAgLTkzMiw5ICs5MzIsOSBAQAog
ICAgIH0KIH0KIAotdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6cGxhY2VDaGlsZChSZW5kZXJCb3gq
IGNoaWxkLCBjb25zdCBJbnRQb2ludCYgbG9jYXRpb24pCit2b2lkIFJlbmRlckZsZXhpYmxlQm94
OjpwbGFjZUNoaWxkKFJlbmRlckJveCogY2hpbGQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2F0aW9u
KQogewotICAgIEludFJlY3Qgb2xkUmVjdCA9IGNoaWxkLT5mcmFtZVJlY3QoKTsKKyAgICBGbG9h
dFJlY3Qgb2xkUmVjdCA9IGNoaWxkLT5mcmFtZVJlY3QoKTsKIAogICAgIC8vIFBsYWNlIHRoZSBj
aGlsZC4KICAgICBjaGlsZC0+c2V0TG9jYXRpb24obG9jYXRpb24pOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgJKHJldmlzaW9uIDg4
NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU3LDEwICs1NywxMCBAQAogCiAgICAgLy8gSUUgZXh0ZW5zaW9u
cy4gVXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0V2lkdGgvSGVpZ2h0LiAgT3ZlcnJpZGRlbiBieSBp
bmxpbmVzIChSZW5kZXJGbG93KQogICAgIC8vIHRvIHJldHVybiB0aGUgcmVtYWluaW5nIHdpZHRo
IG9uIGEgZ2l2ZW4gbGluZSAoYW5kIHRoZSBoZWlnaHQgb2YgYSBzaW5nbGUgbGluZSkuCi0gICAg
dmlydHVhbCBpbnQgb2Zmc2V0TGVmdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IG9mZnNldFRv
cCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IG9mZnNldFdpZHRoKCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgaW50IG9mZnNldEhlaWdodCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0
IG9mZnNldExlZnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IG9mZnNldFRvcCgpIGNvbnN0
OworICAgIHZpcnR1YWwgZmxvYXQgb2Zmc2V0V2lkdGgoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBmbG9hdCBvZmZzZXRIZWlnaHQoKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3R5
bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxl
KTsKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwpAQCAtNzEsNjEgKzcxLDYxIEBACiAgICAgdmlydHVh
bCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBpc1Jvb3QoKSB8fCBpc1Bvc2l0
aW9uZWQoKSB8fCBpc1JlbFBvc2l0aW9uZWQoKSB8fCBpc1RyYW5zcGFyZW50KCkgfHwgaGFzT3Zl
cmZsb3dDbGlwKCkgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzTWFzaygpIHx8IGhhc1JlZmxlY3Rp
b24oKSB8fCBzdHlsZSgpLT5zcGVjaWZpZXNDb2x1bW5zKCk7IH0KIAogICAgIC8vIFRoaXMgd2ls
bCB3b3JrIG9uIGlubGluZXMgdG8gcmV0dXJuIHRoZSBib3VuZGluZyBib3ggb2YgYWxsIG9mIHRo
ZSBsaW5lcycgYm9yZGVyIGJveGVzLgotICAgIHZpcnR1YWwgSW50UmVjdCBib3JkZXJCb3VuZGlu
Z0JveCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBib3JkZXJCb3VuZGluZ0Jv
eCgpIGNvbnN0ID0gMDsKIAogICAgIC8vIFZpcnR1YWwgc2luY2UgdGFibGUgY2VsbHMgb3ZlcnJp
ZGUKLSAgICB2aXJ0dWFsIGludCBwYWRkaW5nVG9wKGJvb2wgaW5jbHVkZUludHJpbnNpY1BhZGRp
bmcgPSB0cnVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBwYWRkaW5nQm90dG9tKGJvb2wgaW5j
bHVkZUludHJpbnNpY1BhZGRpbmcgPSB0cnVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBwYWRk
aW5nTGVmdChib29sIGluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nID0gdHJ1ZSkgY29uc3Q7Ci0gICAg
dmlydHVhbCBpbnQgcGFkZGluZ1JpZ2h0KGJvb2wgaW5jbHVkZUludHJpbnNpY1BhZGRpbmcgPSB0
cnVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBwYWRkaW5nQmVmb3JlKGJvb2wgaW5jbHVkZUlu
dHJpbnNpY1BhZGRpbmcgPSB0cnVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBwYWRkaW5nQWZ0
ZXIoYm9vbCBpbmNsdWRlSW50cmluc2ljUGFkZGluZyA9IHRydWUpIGNvbnN0OwotICAgIHZpcnR1
YWwgaW50IHBhZGRpbmdTdGFydChib29sIGluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nID0gdHJ1ZSkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgcGFkZGluZ0VuZChib29sIGluY2x1ZGVJbnRyaW5zaWNQ
YWRkaW5nID0gdHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBwYWRkaW5nVG9wKGJvb2wg
aW5jbHVkZUludHJpbnNpY1BhZGRpbmcgPSB0cnVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0
IHBhZGRpbmdCb3R0b20oYm9vbCBpbmNsdWRlSW50cmluc2ljUGFkZGluZyA9IHRydWUpIGNvbnN0
OworICAgIHZpcnR1YWwgZmxvYXQgcGFkZGluZ0xlZnQoYm9vbCBpbmNsdWRlSW50cmluc2ljUGFk
ZGluZyA9IHRydWUpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgcGFkZGluZ1JpZ2h0KGJvb2wg
aW5jbHVkZUludHJpbnNpY1BhZGRpbmcgPSB0cnVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0
IHBhZGRpbmdCZWZvcmUoYm9vbCBpbmNsdWRlSW50cmluc2ljUGFkZGluZyA9IHRydWUpIGNvbnN0
OworICAgIHZpcnR1YWwgZmxvYXQgcGFkZGluZ0FmdGVyKGJvb2wgaW5jbHVkZUludHJpbnNpY1Bh
ZGRpbmcgPSB0cnVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IHBhZGRpbmdTdGFydChib29s
IGluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nID0gdHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9h
dCBwYWRkaW5nRW5kKGJvb2wgaW5jbHVkZUludHJpbnNpY1BhZGRpbmcgPSB0cnVlKSBjb25zdDsK
IAotICAgIHZpcnR1YWwgaW50IGJvcmRlclRvcCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmJv
cmRlclRvcFdpZHRoKCk7IH0KLSAgICB2aXJ0dWFsIGludCBib3JkZXJCb3R0b20oKSBjb25zdCB7
IHJldHVybiBzdHlsZSgpLT5ib3JkZXJCb3R0b21XaWR0aCgpOyB9Ci0gICAgdmlydHVhbCBpbnQg
Ym9yZGVyTGVmdCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmJvcmRlckxlZnRXaWR0aCgpOyB9
Ci0gICAgdmlydHVhbCBpbnQgYm9yZGVyUmlnaHQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5i
b3JkZXJSaWdodFdpZHRoKCk7IH0KLSAgICB2aXJ0dWFsIGludCBib3JkZXJCZWZvcmUoKSBjb25z
dCB7IHJldHVybiBzdHlsZSgpLT5ib3JkZXJCZWZvcmVXaWR0aCgpOyB9Ci0gICAgdmlydHVhbCBp
bnQgYm9yZGVyQWZ0ZXIoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5ib3JkZXJBZnRlcldpZHRo
KCk7IH0KLSAgICB2aXJ0dWFsIGludCBib3JkZXJTdGFydCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxl
KCktPmJvcmRlclN0YXJ0V2lkdGgoKTsgfQotICAgIHZpcnR1YWwgaW50IGJvcmRlckVuZCgpIGNv
bnN0IHsgcmV0dXJuIHN0eWxlKCktPmJvcmRlckVuZFdpZHRoKCk7IH0KKyAgICB2aXJ0dWFsIGZs
b2F0IGJvcmRlclRvcCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmJvcmRlclRvcFdpZHRoKCk7
IH0KKyAgICB2aXJ0dWFsIGZsb2F0IGJvcmRlckJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIHN0eWxl
KCktPmJvcmRlckJvdHRvbVdpZHRoKCk7IH0KKyAgICB2aXJ0dWFsIGZsb2F0IGJvcmRlckxlZnQo
KSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKTsgfQorICAgIHZpcnR1
YWwgZmxvYXQgYm9yZGVyUmlnaHQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5ib3JkZXJSaWdo
dFdpZHRoKCk7IH0KKyAgICB2aXJ0dWFsIGZsb2F0IGJvcmRlckJlZm9yZSgpIGNvbnN0IHsgcmV0
dXJuIHN0eWxlKCktPmJvcmRlckJlZm9yZVdpZHRoKCk7IH0KKyAgICB2aXJ0dWFsIGZsb2F0IGJv
cmRlckFmdGVyKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+Ym9yZGVyQWZ0ZXJXaWR0aCgpOyB9
CisgICAgdmlydHVhbCBmbG9hdCBib3JkZXJTdGFydCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCkt
PmJvcmRlclN0YXJ0V2lkdGgoKTsgfQorICAgIHZpcnR1YWwgZmxvYXQgYm9yZGVyRW5kKCkgY29u
c3QgeyByZXR1cm4gc3R5bGUoKS0+Ym9yZGVyRW5kV2lkdGgoKTsgfQogCi0gICAgaW50IGJvcmRl
ckFuZFBhZGRpbmdIZWlnaHQoKSBjb25zdCB7IHJldHVybiBib3JkZXJUb3AoKSArIGJvcmRlckJv
dHRvbSgpICsgcGFkZGluZ1RvcCgpICsgcGFkZGluZ0JvdHRvbSgpOyB9Ci0gICAgaW50IGJvcmRl
ckFuZFBhZGRpbmdXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlckxlZnQoKSArIGJvcmRlclJp
Z2h0KCkgKyBwYWRkaW5nTGVmdCgpICsgcGFkZGluZ1JpZ2h0KCk7IH0KLSAgICBpbnQgYm9yZGVy
QW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBib3JkZXJCZWZvcmUoKSAr
IGJvcmRlckFmdGVyKCkgKyBwYWRkaW5nQmVmb3JlKCkgKyBwYWRkaW5nQWZ0ZXIoKTsgfQotICAg
IGludCBib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gYm9yZGVy
U3RhcnQoKSArIGJvcmRlckVuZCgpICsgcGFkZGluZ1N0YXJ0KCkgKyBwYWRkaW5nRW5kKCk7IH0K
LSAgICBpbnQgYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gc3R5
bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGJvcmRlckxlZnQoKSArIHBhZGRpbmdM
ZWZ0KCkgOiBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsgfQorICAgIGZsb2F0IGJvcmRlckFu
ZFBhZGRpbmdIZWlnaHQoKSBjb25zdCB7IHJldHVybiBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRv
bSgpICsgcGFkZGluZ1RvcCgpICsgcGFkZGluZ0JvdHRvbSgpOyB9CisgICAgZmxvYXQgYm9yZGVy
QW5kUGFkZGluZ1dpZHRoKCkgY29uc3QgeyByZXR1cm4gYm9yZGVyTGVmdCgpICsgYm9yZGVyUmln
aHQoKSArIHBhZGRpbmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKTsgfQorICAgIGZsb2F0IGJvcmRl
ckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gYm9yZGVyQmVmb3JlKCkg
KyBib3JkZXJBZnRlcigpICsgcGFkZGluZ0JlZm9yZSgpICsgcGFkZGluZ0FmdGVyKCk7IH0KKyAg
ICBmbG9hdCBib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gYm9y
ZGVyU3RhcnQoKSArIGJvcmRlckVuZCgpICsgcGFkZGluZ1N0YXJ0KCkgKyBwYWRkaW5nRW5kKCk7
IH0KKyAgICBmbG9hdCBib3JkZXJBbmRQYWRkaW5nTG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVy
biBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gYm9yZGVyTGVmdCgpICsgcGFk
ZGluZ0xlZnQoKSA6IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpOyB9CiAKICAgICBpbnQgYm9y
ZGVyQW5kUGFkZGluZ1N0YXJ0KCkgY29uc3QgeyByZXR1cm4gYm9yZGVyU3RhcnQoKSArIHBhZGRp
bmdTdGFydCgpOyB9CiAgICAgaW50IGJvcmRlckxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4g
c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGJvcmRlckxlZnQoKSA6IGJvcmRl
clRvcCgpOyB9CiAgICAgaW50IGJvcmRlckxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIHN0
eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBib3JkZXJSaWdodCgpIDogYm9yZGVy
Qm90dG9tKCk7IH0KIAotICAgIHZpcnR1YWwgaW50IG1hcmdpblRvcCgpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIGludCBtYXJnaW5Cb3R0b20oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQg
bWFyZ2luTGVmdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludCBtYXJnaW5SaWdodCgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludCBtYXJnaW5CZWZvcmUoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBpbnQgbWFyZ2luQWZ0ZXIoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQgbWFy
Z2luU3RhcnQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQgbWFyZ2luRW5kKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgZmxvYXQgbWFyZ2luVG9wKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgZmxvYXQgbWFyZ2luQm90dG9tKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZmxvYXQgbWFy
Z2luTGVmdCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IG1hcmdpblJpZ2h0KCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgZmxvYXQgbWFyZ2luQmVmb3JlKCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgZmxvYXQgbWFyZ2luQWZ0ZXIoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBmbG9h
dCBtYXJnaW5TdGFydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IG1hcmdpbkVuZCgp
IGNvbnN0ID0gMDsKIAogICAgIGJvb2wgaGFzSW5saW5lRGlyZWN0aW9uQm9yZGVyc1BhZGRpbmdP
ck1hcmdpbigpIGNvbnN0IHsgcmV0dXJuIGhhc0lubGluZURpcmVjdGlvbkJvcmRlcnNPclBhZGRp
bmcoKSB8fCBtYXJnaW5TdGFydCgpfHwgbWFyZ2luRW5kKCk7IH0KICAgICBib29sIGhhc0lubGlu
ZURpcmVjdGlvbkJvcmRlcnNPclBhZGRpbmcoKSBjb25zdCB7IHJldHVybiBib3JkZXJTdGFydCgp
IHx8IGJvcmRlckVuZCgpIHx8IHBhZGRpbmdTdGFydCgpfHwgcGFkZGluZ0VuZCgpOyB9CiAKLSAg
ICB2aXJ0dWFsIGludCBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50KCkgY29u
c3Q7CisgICAgdmlydHVhbCBmbG9hdCBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250
ZW50KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRCZWNhbWVOb25JbmxpbmUoUmVu
ZGVyT2JqZWN0KiAvKmNoaWxkKi8pIHsgfQogCi0gICAgdm9pZCBwYWludEJvcmRlcihHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgUmVuZGVyU3R5bGUqLCBCYWNrZ3JvdW5k
QmxlZWRBdm9pZGFuY2UgPSBCYWNrZ3JvdW5kQmxlZWROb25lLCBib29sIGluY2x1ZGVMb2dpY2Fs
TGVmdEVkZ2UgPSB0cnVlLCBib29sIGluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlID0gdHJ1ZSk7Ci0g
ICAgYm9vbCBwYWludE5pbmVQaWVjZUltYWdlKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJl
Y3QmLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IE5pbmVQaWVjZUltYWdlJiwgQ29tcG9zaXRl
T3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKLSAgICB2b2lkIHBhaW50Qm94U2hhZG93
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmLCBjb25zdCBSZW5kZXJTdHlsZSosIFNo
YWRvd1N0eWxlLCBib29sIGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UgPSB0cnVlLCBib29sIGluY2x1
ZGVMb2dpY2FsUmlnaHRFZGdlID0gdHJ1ZSk7Ci0gICAgdm9pZCBwYWludEZpbGxMYXllckV4dGVu
ZGVkKGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IENvbG9yJiwgY29uc3QgRmlsbExheWVyKiwgY29u
c3QgSW50UmVjdCYsIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSwgSW5saW5lRmxvd0JveCogPSAw
LCBjb25zdCBJbnRTaXplJiA9IEludFNpemUoKSwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3Np
dGVTb3VyY2VPdmVyLCBSZW5kZXJPYmplY3QqIGJhY2tncm91bmRPYmplY3QgPSAwKTsKKyAgICB2
b2lkIHBhaW50Qm9yZGVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IFJlbmRlclN0eWxlKiwgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlID0gQmFja2dyb3VuZEJsZWVk
Tm9uZSwgYm9vbCBpbmNsdWRlTG9naWNhbExlZnRFZGdlID0gdHJ1ZSwgYm9vbCBpbmNsdWRlTG9n
aWNhbFJpZ2h0RWRnZSA9IHRydWUpOworICAgIGJvb2wgcGFpbnROaW5lUGllY2VJbWFnZShHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0
IE5pbmVQaWVjZUltYWdlJiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVy
KTsKKyAgICB2b2lkIHBhaW50Qm94U2hhZG93KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IFJlbmRlclN0eWxlKiwgU2hhZG93U3R5bGUsIGJvb2wgaW5jbHVkZUxvZ2lj
YWxMZWZ0RWRnZSA9IHRydWUsIGJvb2wgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UgPSB0cnVlKTsK
KyAgICB2b2lkIHBhaW50RmlsbExheWVyRXh0ZW5kZWQoY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
Q29sb3ImLCBjb25zdCBGaWxsTGF5ZXIqLCBjb25zdCBGbG9hdFJlY3QmLCBCYWNrZ3JvdW5kQmxl
ZWRBdm9pZGFuY2UsIElubGluZUZsb3dCb3gqID0gMCwgY29uc3QgSW50U2l6ZSYgPSBJbnRTaXpl
KCksIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgUmVuZGVyT2JqZWN0
KiBiYWNrZ3JvdW5kT2JqZWN0ID0gMCk7CiAgICAgCiAgICAgLy8gT3ZlcnJpZGRlbiBieSBzdWJj
bGFzc2VzIHRvIGRldGVybWluZSBsaW5lIGhlaWdodCBhbmQgYmFzZWxpbmUgcG9zaXRpb24uCi0g
ICAgdmlydHVhbCBpbnQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1v
ZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCBm
aXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25P
bkNvbnRhaW5pbmdMaW5lKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBmbG9hdCBsaW5lSGVpZ2h0
KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBv
c2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZmxvYXQgYmFz
ZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9u
TW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3Qg
PSAwOwogCiAgICAgLy8gQ2FsbGVkIGJ5IFJlbmRlck9iamVjdDo6ZGVzdHJveSgpIChhbmQgUmVu
ZGVyV2lkZ2V0OjpkZXN0cm95KCkpIGFuZCBpcyB0aGUgb25seSB3YXkgbGF5ZXJzIHNob3VsZCBl
dmVyIGJlIGRlc3Ryb3llZAogICAgIHZvaWQgZGVzdHJveUxheWVyKCk7CkBAIC0xMzQsNyArMTM0
LDcgQEAKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0
ZSBzKTsKIHByb3RlY3RlZDoKLSAgICB2b2lkIGNhbGN1bGF0ZUJhY2tncm91bmRJbWFnZUdlb21l
dHJ5KGNvbnN0IEZpbGxMYXllciosIGNvbnN0IEludFJlY3QmIHBhaW50UmVjdCwgSW50UmVjdCYg
ZGVzdFJlY3QsIEludFBvaW50JiBwaGFzZSwgSW50U2l6ZSYgdGlsZVNpemUpOworICAgIHZvaWQg
Y2FsY3VsYXRlQmFja2dyb3VuZEltYWdlR2VvbWV0cnkoY29uc3QgRmlsbExheWVyKiwgY29uc3Qg
RmxvYXRSZWN0JiBwYWludFJlY3QsIEZsb2F0UmVjdCYgZGVzdFJlY3QsIEZsb2F0UG9pbnQmIHBo
YXNlLCBJbnRTaXplJiB0aWxlU2l6ZSk7CiAgICAgdm9pZCBnZXRCb3JkZXJFZGdlSW5mbyhjbGFz
cyBCb3JkZXJFZGdlW10sIGJvb2wgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSA9IHRydWUsIGJvb2wg
aW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UgPSB0cnVlKSBjb25zdDsKICAgICBib29sIGJvcmRlck9i
c2N1cmVzQmFja2dyb3VuZEVkZ2UoY29uc3QgRmxvYXRTaXplJiBjb250ZXh0U2NhbGUpIGNvbnN0
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnQuY3BwCShyZXZpc2lv
biA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgcmV0dXJuIGNvbnRlbnRSZW5kZXJl
ci0+Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFJlc3BlY3RpbmdNaW5NYXhIZWlnaHQoY29u
dGVudFJlbmRlcmVyLT5jb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcoY29udGVudFJl
bmRlcmVyLT5zdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkpKTsKIH0KIAotaW50IFJlbmRlclBhcnQ6
OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCkgY29uc3QK
K2Zsb2F0IFJlbmRlclBhcnQ6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChib29sIGluY2x1
ZGVNYXhXaWR0aCkgY29uc3QKIHsKICAgICBSZW5kZXJTVkdSb290KiBjb250ZW50UmVuZGVyZXIg
PSBlbWJlZGRlZFNWR0NvbnRlbnRSZW5kZXJlcigpOwogICAgIFJlbmRlclN0eWxlKiBjb250ZW50
UmVuZGVyU3R5bGUgPSBjb250ZW50UmVuZGVyZXIgPyBjb250ZW50UmVuZGVyZXItPnN0eWxlKCkg
OiAwOwpAQCAtMTc5LDcgKzE3OSw3IEBACiAgICAgcmV0dXJuIGludHJpbnNpY0xvZ2ljYWxXaWR0
aCgpOwogfQogCi1pbnQgUmVuZGVyUGFydDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgp
IGNvbnN0CitmbG9hdCBSZW5kZXJQYXJ0Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkg
Y29uc3QKIHsKICAgICBSZW5kZXJTVkdSb290KiBjb250ZW50UmVuZGVyZXIgPSBlbWJlZGRlZFNW
R0NvbnRlbnRSZW5kZXJlcigpOwogICAgIFJlbmRlclN0eWxlKiBjb250ZW50UmVuZGVyU3R5bGUg
PSBjb250ZW50UmVuZGVyZXIgPyBjb250ZW50UmVuZGVyZXItPnN0eWxlKCkgOiAwOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDg4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk5Nyw3ICs5OTcsNyBAQAogfQogI2VuZGlmCiAgICAgCi12b2lkIFJlbmRlck9i
amVjdDo6cGFpbnRGb2N1c1JpbmcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRQ
b2ludCYgcGFpbnRPZmZzZXQsIFJlbmRlclN0eWxlKiBzdHlsZSkKK3ZvaWQgUmVuZGVyT2JqZWN0
OjpwYWludEZvY3VzUmluZyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9p
bnQmIHBhaW50T2Zmc2V0LCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgVmVjdG9yPEludFJl
Y3Q+IGZvY3VzUmluZ1JlY3RzOwogICAgIGFkZEZvY3VzUmluZ1JlY3RzKGZvY3VzUmluZ1JlY3Rz
LCBwYWludE9mZnNldCk7CkBAIC0xMDA3LDcgKzEwMDcsNyBAQAogICAgICAgICBhZGRQREZVUkxS
ZWN0KGNvbnRleHQsIHVuaW9uUmVjdChmb2N1c1JpbmdSZWN0cykpOwogfSAgICAgICAgCiAKLXZv
aWQgUmVuZGVyT2JqZWN0OjphZGRQREZVUkxSZWN0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgUmVuZGVyT2JqZWN0OjphZGRQREZVUkxSZWN0KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGlm
IChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTAyMCw3ICsxMDIwLDcgQEAK
ICAgICBjb250ZXh0LT5zZXRVUkxGb3JSZWN0KG4tPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGhy
ZWYpLCByZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50T3V0bGluZShHcmFwaGlj
c0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgcGFpbnRSZWN0KQordm9p
ZCBSZW5kZXJPYmplY3Q6OnBhaW50T3V0bGluZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBwYWludFJlY3QpCiB7CiAgICAgaWYgKCFoYXNPdXRsaW5l
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNDMsNyArMTA0Myw3IEBACiAgICAgaWYgKHN0eWxl
VG9Vc2UtPm91dGxpbmVTdHlsZUlzQXV0bygpIHx8IHN0eWxlVG9Vc2UtPm91dGxpbmVTdHlsZSgp
ID09IEJOT05FKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRSZWN0IGFkanVzdGVkUGFpbnRS
ZWMgPSBwYWludFJlY3Q7CisgICAgSW50UmVjdCBhZGp1c3RlZFBhaW50UmVjID0gZW5jbG9zaW5n
SW50UmVjdChwYWludFJlY3QpOwogICAgIGFkanVzdGVkUGFpbnRSZWMuaW5mbGF0ZShvZmZzZXQp
OwogCiAgICAgaWYgKGFkanVzdGVkUGFpbnRSZWMuaXNFbXB0eSgpKQpAQCAtMTE0NSw3ICsxMTQ1
LDcgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFJlbmRlck9iamVjdDo6cGFpbnQo
UGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKQordm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50KFBh
aW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmKQogewogfQogCkBAIC0xMTYzLDEwICsxMTYzLDEw
IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpyZXBhaW50VXNpbmdD
b250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGNvbnN0IElu
dFJlY3QmIHIsIGJvb2wgaW1tZWRpYXRlKQordm9pZCBSZW5kZXJPYmplY3Q6OnJlcGFpbnRVc2lu
Z0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgY29uc3Qg
RmxvYXRSZWN0JiByLCBib29sIGltbWVkaWF0ZSkKIHsKICAgICBpZiAoIXJlcGFpbnRDb250YWlu
ZXIpIHsKLSAgICAgICAgdmlldygpLT5yZXBhaW50Vmlld1JlY3RhbmdsZShyLCBpbW1lZGlhdGUp
OworICAgICAgICB2aWV3KCktPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKGVuY2xvc2luZ0ludFJlY3Qo
ciksIGltbWVkaWF0ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTExNzYsMTcgKzEx
NzYsMTcgQEAKICAgICAgICAgQVNTRVJUKHJlcGFpbnRDb250YWluZXIgPT0gdik7CiAgICAgICAg
IGJvb2wgdmlld0hhc0NvbXBvc2l0ZWRMYXllciA9IHYtPmhhc0xheWVyKCkgJiYgdi0+bGF5ZXIo
KS0+aXNDb21wb3NpdGVkKCk7CiAgICAgICAgIGlmICghdmlld0hhc0NvbXBvc2l0ZWRMYXllciB8
fCB2LT5sYXllcigpLT5iYWNraW5nKCktPnBhaW50aW5nR29lc1RvV2luZG93KCkpIHsKLSAgICAg
ICAgICAgIEludFJlY3QgcmVwYWludFJlY3RhbmdsZSA9IHI7CisgICAgICAgICAgICBGbG9hdFJl
Y3QgcmVwYWludFJlY3RhbmdsZSA9IHI7CiAgICAgICAgICAgICBpZiAodmlld0hhc0NvbXBvc2l0
ZWRMYXllciAmJiAgdi0+bGF5ZXIoKS0+dHJhbnNmb3JtKCkpCiAgICAgICAgICAgICAgICAgcmVw
YWludFJlY3RhbmdsZSA9IHYtPmxheWVyKCktPnRyYW5zZm9ybSgpLT5tYXBSZWN0KHIpOwotICAg
ICAgICAgICAgdi0+cmVwYWludFZpZXdSZWN0YW5nbGUocmVwYWludFJlY3RhbmdsZSwgaW1tZWRp
YXRlKTsKKyAgICAgICAgICAgIHYtPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKGVuY2xvc2luZ0ludFJl
Y3QocmVwYWludFJlY3RhbmdsZSksIGltbWVkaWF0ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKHYtPnVzZXNDb21wb3NpdGluZygpKSB7CiAg
ICAgICAgIEFTU0VSVChyZXBhaW50Q29udGFpbmVyLT5oYXNMYXllcigpICYmIHJlcGFpbnRDb250
YWluZXItPmxheWVyKCktPmlzQ29tcG9zaXRlZCgpKTsKLSAgICAgICAgcmVwYWludENvbnRhaW5l
ci0+bGF5ZXIoKS0+c2V0QmFja2luZ05lZWRzUmVwYWludEluUmVjdChyKTsKKyAgICAgICAgcmVw
YWludENvbnRhaW5lci0+bGF5ZXIoKS0+c2V0QmFja2luZ05lZWRzUmVwYWludEluUmVjdChlbmNs
b3NpbmdJbnRSZWN0KHIpKTsKICAgICB9CiAjZWxzZQogICAgIGlmIChyZXBhaW50Q29udGFpbmVy
LT5pc1JlbmRlclZpZXcoKSkKQEAgLTEyMTgsMTggKzEyMTgsMTggQEAKICAgICBpZiAodmlldy0+
cHJpbnRpbmcoKSkKICAgICAgICAgcmV0dXJuOyAvLyBEb24ndCByZXBhaW50IGlmIHdlJ3JlIHBy
aW50aW5nLgogCi0gICAgSW50UmVjdCBkaXJ0eVJlY3Qocik7CisgICAgRmxvYXRSZWN0IGRpcnR5
UmVjdChyKTsKIAogICAgIC8vIEZJWE1FOiBsYXlvdXREZWx0YSBuZWVkcyB0byBiZSBhcHBsaWVk
IGluIHBhcnRzIGJlZm9yZS9hZnRlciB0cmFuc2Zvcm1zIGFuZAogICAgIC8vIHJlcGFpbnQgY29u
dGFpbmVycy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzA4Ci0g
ICAgZGlydHlSZWN0Lm1vdmUodmlldy0+bGF5b3V0RGVsdGEoKSk7CisgICAgZGlydHlSZWN0Lm1v
dmUocm91bmRlZEludFNpemUodmlldy0+bGF5b3V0RGVsdGEoKSkpOwogCiAgICAgUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSBjb250YWluZXJGb3JSZXBhaW50KCk7CiAg
ICAgY29tcHV0ZVJlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIGRpcnR5UmVjdCk7CiAg
ICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIgPyByZXBhaW50Q29udGFp
bmVyIDogdmlldywgZGlydHlSZWN0LCBpbW1lZGlhdGUpOwogfQogCi1ib29sIFJlbmRlck9iamVj
dDo6cmVwYWludEFmdGVyTGF5b3V0SWZOZWVkZWQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIsIGNvbnN0IEludFJlY3QmIG9sZEJvdW5kcywgY29uc3QgSW50UmVjdCYgb2xk
T3V0bGluZUJveCwgY29uc3QgSW50UmVjdCogbmV3Qm91bmRzUHRyLCBjb25zdCBJbnRSZWN0KiBu
ZXdPdXRsaW5lQm94UmVjdFB0cikKK2Jvb2wgUmVuZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlv
dXRJZk5lZWRlZChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgY29uc3Qg
RmxvYXRSZWN0JiBvbGRCb3VuZHMsIGNvbnN0IEZsb2F0UmVjdCYgb2xkT3V0bGluZUJveCwgY29u
c3QgRmxvYXRSZWN0KiBuZXdCb3VuZHNQdHIsIGNvbnN0IEZsb2F0UmVjdCogbmV3T3V0bGluZUJv
eFJlY3RQdHIpCiB7CiAgICAgUmVuZGVyVmlldyogdiA9IHZpZXcoKTsKICAgICBpZiAodi0+cHJp
bnRpbmcoKSkKQEAgLTEyMzcsOCArMTIzNyw4IEBACiAKICAgICAvLyBUaGlzIEFTU0VSVCBmYWls
cyBkdWUgdG8gYW5pbWF0aW9ucy4gIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzcwNDgKICAgICAvLyBBU1NFUlQoIW5ld0JvdW5kc1B0ciB8fCAqbmV3Qm91bmRz
UHRyID09IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIpKTsK
LSAgICBJbnRSZWN0IG5ld0JvdW5kcyA9IG5ld0JvdW5kc1B0ciA/ICpuZXdCb3VuZHNQdHIgOiBj
bGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKLSAgICBJbnRS
ZWN0IG5ld091dGxpbmVCb3g7CisgICAgRmxvYXRSZWN0IG5ld0JvdW5kcyA9IG5ld0JvdW5kc1B0
ciA/ICpuZXdCb3VuZHNQdHIgOiBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChyZXBhaW50
Q29udGFpbmVyKTsKKyAgICBGbG9hdFJlY3QgbmV3T3V0bGluZUJveDsKIAogICAgIGJvb2wgZnVs
bFJlcGFpbnQgPSBzZWxmTmVlZHNMYXlvdXQoKTsKICAgICAvLyBQcmVzdW1hYmx5IGEgYmFja2dy
b3VuZCBvciBhIGJvcmRlciBleGlzdHMgaWYgYm9yZGVyLWZpdDpsaW5lcyB3YXMgc3BlY2lmaWVk
LgpAQCAtMTI2NSwyNSArMTI2NSwyNSBAQAogICAgIGlmIChuZXdCb3VuZHMgPT0gb2xkQm91bmRz
ICYmIG5ld091dGxpbmVCb3ggPT0gb2xkT3V0bGluZUJveCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaW50IGRlbHRhTGVmdCA9IG5ld0JvdW5kcy54KCkgLSBvbGRCb3VuZHMueCgpOwor
ICAgIGZsb2F0IGRlbHRhTGVmdCA9IG5ld0JvdW5kcy54KCkgLSBvbGRCb3VuZHMueCgpOwogICAg
IGlmIChkZWx0YUxlZnQgPiAwKQogICAgICAgICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWlu
dENvbnRhaW5lciwgSW50UmVjdChvbGRCb3VuZHMueCgpLCBvbGRCb3VuZHMueSgpLCBkZWx0YUxl
ZnQsIG9sZEJvdW5kcy5oZWlnaHQoKSkpOwogICAgIGVsc2UgaWYgKGRlbHRhTGVmdCA8IDApCiAg
ICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0KG5l
d0JvdW5kcy54KCksIG5ld0JvdW5kcy55KCksIC1kZWx0YUxlZnQsIG5ld0JvdW5kcy5oZWlnaHQo
KSkpOwogCi0gICAgaW50IGRlbHRhUmlnaHQgPSBuZXdCb3VuZHMubWF4WCgpIC0gb2xkQm91bmRz
Lm1heFgoKTsKKyAgICBmbG9hdCBkZWx0YVJpZ2h0ID0gbmV3Qm91bmRzLm1heFgoKSAtIG9sZEJv
dW5kcy5tYXhYKCk7CiAgICAgaWYgKGRlbHRhUmlnaHQgPiAwKQogICAgICAgICByZXBhaW50VXNp
bmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgSW50UmVjdChvbGRCb3VuZHMubWF4WCgpLCBu
ZXdCb3VuZHMueSgpLCBkZWx0YVJpZ2h0LCBuZXdCb3VuZHMuaGVpZ2h0KCkpKTsKICAgICBlbHNl
IGlmIChkZWx0YVJpZ2h0IDwgMCkKICAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFp
bnRDb250YWluZXIsIEludFJlY3QobmV3Qm91bmRzLm1heFgoKSwgb2xkQm91bmRzLnkoKSwgLWRl
bHRhUmlnaHQsIG9sZEJvdW5kcy5oZWlnaHQoKSkpOwogCi0gICAgaW50IGRlbHRhVG9wID0gbmV3
Qm91bmRzLnkoKSAtIG9sZEJvdW5kcy55KCk7CisgICAgZmxvYXQgZGVsdGFUb3AgPSBuZXdCb3Vu
ZHMueSgpIC0gb2xkQm91bmRzLnkoKTsKICAgICBpZiAoZGVsdGFUb3AgPiAwKQogICAgICAgICBy
ZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgSW50UmVjdChvbGRCb3VuZHMu
eCgpLCBvbGRCb3VuZHMueSgpLCBvbGRCb3VuZHMud2lkdGgoKSwgZGVsdGFUb3ApKTsKICAgICBl
bHNlIGlmIChkZWx0YVRvcCA8IDApCiAgICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBh
aW50Q29udGFpbmVyLCBJbnRSZWN0KG5ld0JvdW5kcy54KCksIG5ld0JvdW5kcy55KCksIG5ld0Jv
dW5kcy53aWR0aCgpLCAtZGVsdGFUb3ApKTsKIAotICAgIGludCBkZWx0YUJvdHRvbSA9IG5ld0Jv
dW5kcy5tYXhZKCkgLSBvbGRCb3VuZHMubWF4WSgpOworICAgIGZsb2F0IGRlbHRhQm90dG9tID0g
bmV3Qm91bmRzLm1heFkoKSAtIG9sZEJvdW5kcy5tYXhZKCk7CiAgICAgaWYgKGRlbHRhQm90dG9t
ID4gMCkKICAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIElu
dFJlY3QobmV3Qm91bmRzLngoKSwgb2xkQm91bmRzLm1heFkoKSwgbmV3Qm91bmRzLndpZHRoKCks
IGRlbHRhQm90dG9tKSk7CiAgICAgZWxzZSBpZiAoZGVsdGFCb3R0b20gPCAwKQpAQCAtMTI5NSw0
MCArMTI5NSw0MCBAQAogICAgIC8vIFdlIGRpZG4ndCBtb3ZlLCBidXQgd2UgZGlkIGNoYW5nZSBz
aXplLiAgSW52YWxpZGF0ZSB0aGUgZGVsdGEsIHdoaWNoIHdpbGwgY29uc2lzdCBvZiBwb3NzaWJs
eQogICAgIC8vIHR3byByZWN0YW5nbGVzIChidXQgdHlwaWNhbGx5IG9ubHkgb25lKS4KICAgICBS
ZW5kZXJTdHlsZSogb3V0bGluZVN0eWxlID0gb3V0bGluZVN0eWxlRm9yUmVwYWludCgpOwotICAg
IGludCBvdyA9IG91dGxpbmVTdHlsZS0+b3V0bGluZVNpemUoKTsKLSAgICBpbnQgd2lkdGggPSBh
YnMobmV3T3V0bGluZUJveC53aWR0aCgpIC0gb2xkT3V0bGluZUJveC53aWR0aCgpKTsKKyAgICBm
bG9hdCBvdyA9IG91dGxpbmVTdHlsZS0+b3V0bGluZVNpemUoKTsKKyAgICBmbG9hdCB3aWR0aCA9
IGFicyhuZXdPdXRsaW5lQm94LndpZHRoKCkgLSBvbGRPdXRsaW5lQm94LndpZHRoKCkpOwogICAg
IGlmICh3aWR0aCkgewotICAgICAgICBpbnQgc2hhZG93TGVmdDsKLSAgICAgICAgaW50IHNoYWRv
d1JpZ2h0OworICAgICAgICBmbG9hdCBzaGFkb3dMZWZ0OworICAgICAgICBmbG9hdCBzaGFkb3dS
aWdodDsKICAgICAgICAgc3R5bGUoKS0+Z2V0Qm94U2hhZG93SG9yaXpvbnRhbEV4dGVudChzaGFk
b3dMZWZ0LCBzaGFkb3dSaWdodCk7CiAKLSAgICAgICAgaW50IGJvcmRlclJpZ2h0ID0gaXNCb3go
KSA/IHRvUmVuZGVyQm94KHRoaXMpLT5ib3JkZXJSaWdodCgpIDogMDsKLSAgICAgICAgaW50IGJv
eFdpZHRoID0gaXNCb3goKSA/IHRvUmVuZGVyQm94KHRoaXMpLT53aWR0aCgpIDogMDsKLSAgICAg
ICAgaW50IGJvcmRlcldpZHRoID0gbWF4KC1vdXRsaW5lU3R5bGUtPm91dGxpbmVPZmZzZXQoKSwg
bWF4KGJvcmRlclJpZ2h0LCBtYXgoc3R5bGUoKS0+Ym9yZGVyVG9wUmlnaHRSYWRpdXMoKS53aWR0
aCgpLmNhbGNWYWx1ZShib3hXaWR0aCksIHN0eWxlKCktPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVz
KCkud2lkdGgoKS5jYWxjVmFsdWUoYm94V2lkdGgpKSkpICsgbWF4KG93LCBzaGFkb3dSaWdodCk7
Ci0gICAgICAgIEludFJlY3QgcmlnaHRSZWN0KG5ld091dGxpbmVCb3gueCgpICsgbWluKG5ld091
dGxpbmVCb3gud2lkdGgoKSwgb2xkT3V0bGluZUJveC53aWR0aCgpKSAtIGJvcmRlcldpZHRoLAor
ICAgICAgICBmbG9hdCBib3JkZXJSaWdodCA9IGlzQm94KCkgPyB0b1JlbmRlckJveCh0aGlzKS0+
Ym9yZGVyUmlnaHQoKSA6IDA7CisgICAgICAgIGZsb2F0IGJveFdpZHRoID0gaXNCb3goKSA/IHRv
UmVuZGVyQm94KHRoaXMpLT53aWR0aCgpIDogMDsKKyAgICAgICAgZmxvYXQgYm9yZGVyV2lkdGgg
PSBtYXgoKGZsb2F0KS1vdXRsaW5lU3R5bGUtPm91dGxpbmVPZmZzZXQoKSwgbWF4KGJvcmRlclJp
Z2h0LCAoZmxvYXQpbWF4KHN0eWxlKCktPmJvcmRlclRvcFJpZ2h0UmFkaXVzKCkud2lkdGgoKS5j
YWxjVmFsdWUoYm94V2lkdGgpLCBzdHlsZSgpLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpLndp
ZHRoKCkuY2FsY1ZhbHVlKGJveFdpZHRoKSkpKSArIG1heChvdywgc2hhZG93UmlnaHQpOworICAg
ICAgICBGbG9hdFJlY3QgcmlnaHRSZWN0KG5ld091dGxpbmVCb3gueCgpICsgbWluKG5ld091dGxp
bmVCb3gud2lkdGgoKSwgb2xkT3V0bGluZUJveC53aWR0aCgpKSAtIGJvcmRlcldpZHRoLAogICAg
ICAgICAgICAgbmV3T3V0bGluZUJveC55KCksCiAgICAgICAgICAgICB3aWR0aCArIGJvcmRlcldp
ZHRoLAogICAgICAgICAgICAgbWF4KG5ld091dGxpbmVCb3guaGVpZ2h0KCksIG9sZE91dGxpbmVC
b3guaGVpZ2h0KCkpKTsKLSAgICAgICAgaW50IHJpZ2h0ID0gbWluKG5ld0JvdW5kcy5tYXhYKCks
IG9sZEJvdW5kcy5tYXhYKCkpOworICAgICAgICBmbG9hdCByaWdodCA9IG1pbihuZXdCb3VuZHMu
bWF4WCgpLCBvbGRCb3VuZHMubWF4WCgpKTsKICAgICAgICAgaWYgKHJpZ2h0UmVjdC54KCkgPCBy
aWdodCkgewogICAgICAgICAgICAgcmlnaHRSZWN0LnNldFdpZHRoKG1pbihyaWdodFJlY3Qud2lk
dGgoKSwgcmlnaHQgLSByaWdodFJlY3QueCgpKSk7CiAgICAgICAgICAgICByZXBhaW50VXNpbmdD
b250YWluZXIocmVwYWludENvbnRhaW5lciwgcmlnaHRSZWN0KTsKICAgICAgICAgfQogICAgIH0K
LSAgICBpbnQgaGVpZ2h0ID0gYWJzKG5ld091dGxpbmVCb3guaGVpZ2h0KCkgLSBvbGRPdXRsaW5l
Qm94LmhlaWdodCgpKTsKKyAgICBmbG9hdCBoZWlnaHQgPSBhYnMobmV3T3V0bGluZUJveC5oZWln
aHQoKSAtIG9sZE91dGxpbmVCb3guaGVpZ2h0KCkpOwogICAgIGlmIChoZWlnaHQpIHsKLSAgICAg
ICAgaW50IHNoYWRvd1RvcDsKLSAgICAgICAgaW50IHNoYWRvd0JvdHRvbTsKKyAgICAgICAgZmxv
YXQgc2hhZG93VG9wOworICAgICAgICBmbG9hdCBzaGFkb3dCb3R0b207CiAgICAgICAgIHN0eWxl
KCktPmdldEJveFNoYWRvd1ZlcnRpY2FsRXh0ZW50KHNoYWRvd1RvcCwgc2hhZG93Qm90dG9tKTsK
IAotICAgICAgICBpbnQgYm9yZGVyQm90dG9tID0gaXNCb3goKSA/IHRvUmVuZGVyQm94KHRoaXMp
LT5ib3JkZXJCb3R0b20oKSA6IDA7Ci0gICAgICAgIGludCBib3hIZWlnaHQgPSBpc0JveCgpID8g
dG9SZW5kZXJCb3godGhpcyktPmhlaWdodCgpIDogMDsKLSAgICAgICAgaW50IGJvcmRlckhlaWdo
dCA9IG1heCgtb3V0bGluZVN0eWxlLT5vdXRsaW5lT2Zmc2V0KCksIG1heChib3JkZXJCb3R0b20s
IG1heChzdHlsZSgpLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkuaGVpZ2h0KCkuY2FsY1ZhbHVl
KGJveEhlaWdodCksIHN0eWxlKCktPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkuaGVpZ2h0KCku
Y2FsY1ZhbHVlKGJveEhlaWdodCkpKSkgKyBtYXgob3csIHNoYWRvd0JvdHRvbSk7Ci0gICAgICAg
IEludFJlY3QgYm90dG9tUmVjdChuZXdPdXRsaW5lQm94LngoKSwKKyAgICAgICAgZmxvYXQgYm9y
ZGVyQm90dG9tID0gaXNCb3goKSA/IHRvUmVuZGVyQm94KHRoaXMpLT5ib3JkZXJCb3R0b20oKSA6
IDA7CisgICAgICAgIGZsb2F0IGJveEhlaWdodCA9IGlzQm94KCkgPyB0b1JlbmRlckJveCh0aGlz
KS0+aGVpZ2h0KCkgOiAwOworICAgICAgICBmbG9hdCBib3JkZXJIZWlnaHQgPSBtYXgoKGZsb2F0
KS1vdXRsaW5lU3R5bGUtPm91dGxpbmVPZmZzZXQoKSwgbWF4KGJvcmRlckJvdHRvbSwgKGZsb2F0
KW1heChzdHlsZSgpLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkuaGVpZ2h0KCkuY2FsY1ZhbHVl
KGJveEhlaWdodCksIHN0eWxlKCktPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkuaGVpZ2h0KCku
Y2FsY1ZhbHVlKGJveEhlaWdodCkpKSkgKyBtYXgob3csIHNoYWRvd0JvdHRvbSk7CisgICAgICAg
IEZsb2F0UmVjdCBib3R0b21SZWN0KG5ld091dGxpbmVCb3gueCgpLAogICAgICAgICAgICAgbWlu
KG5ld091dGxpbmVCb3gubWF4WSgpLCBvbGRPdXRsaW5lQm94Lm1heFkoKSkgLSBib3JkZXJIZWln
aHQsCiAgICAgICAgICAgICBtYXgobmV3T3V0bGluZUJveC53aWR0aCgpLCBvbGRPdXRsaW5lQm94
LndpZHRoKCkpLAogICAgICAgICAgICAgaGVpZ2h0ICsgYm9yZGVySGVpZ2h0KTsKLSAgICAgICAg
aW50IGJvdHRvbSA9IG1pbihuZXdCb3VuZHMubWF4WSgpLCBvbGRCb3VuZHMubWF4WSgpKTsKKyAg
ICAgICAgZmxvYXQgYm90dG9tID0gbWluKG5ld0JvdW5kcy5tYXhZKCksIG9sZEJvdW5kcy5tYXhZ
KCkpOwogICAgICAgICBpZiAoYm90dG9tUmVjdC55KCkgPCBib3R0b20pIHsKICAgICAgICAgICAg
IGJvdHRvbVJlY3Quc2V0SGVpZ2h0KG1pbihib3R0b21SZWN0LmhlaWdodCgpLCBib3R0b20gLSBi
b3R0b21SZWN0LnkoKSkpOwogICAgICAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFp
bnRDb250YWluZXIsIGJvdHRvbVJlY3QpOwpAQCAtMTMzNyw3ICsxMzM3LDcgQEAKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpyZXBhaW50RHVyaW5nTGF5b3V0SWZN
b3ZlZChjb25zdCBJbnRSZWN0JikKK3ZvaWQgUmVuZGVyT2JqZWN0OjpyZXBhaW50RHVyaW5nTGF5
b3V0SWZNb3ZlZChjb25zdCBGbG9hdFJlY3QmKQogewogfQogCkBAIC0xMzYwLDEzICsxMzYwLDEz
IEBACiAgICAgcmV0dXJuIHI7CiB9CiAKLUludFJlY3QgUmVuZGVyT2JqZWN0OjpjbGlwcGVkT3Zl
cmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCopCitGbG9hdFJlY3QgUmVu
ZGVyT2JqZWN0OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9i
amVjdCopCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEludFJlY3Qo
KTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0Ojpjb21w
dXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIs
IEludFJlY3QmIHJlY3QsIGJvb2wgZml4ZWQpCit2b2lkIFJlbmRlck9iamVjdDo6Y29tcHV0ZVJl
Y3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBGbG9h
dFJlY3QmIHJlY3QsIGJvb2wgZml4ZWQpCiB7CiAgICAgaWYgKHJlcGFpbnRDb250YWluZXIgPT0g
dGhpcykKICAgICAgICAgcmV0dXJuOwpAQCAtMTg1MSw5ICsxODUxLDkgQEAKIAogICAgIEludFBv
aW50IGNlbnRlclBvaW50ID0gcm91bmRlZEludFBvaW50KHRyYW5zZm9ybVN0YXRlLm1hcHBlZFBv
aW50KCkpOwogICAgIGlmIChvLT5pc0JveCgpICYmIG8tPnN0eWxlKCktPmlzRmxpcHBlZEJsb2Nr
c1dyaXRpbmdNb2RlKCkpCi0gICAgICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUodG9SZW5kZXJCb3go
byktPmZsaXBGb3JXcml0aW5nTW9kZUluY2x1ZGluZ0NvbHVtbnMocm91bmRlZEludFBvaW50KHRy
YW5zZm9ybVN0YXRlLm1hcHBlZFBvaW50KCkpKSAtIGNlbnRlclBvaW50KTsKKyAgICAgICAgdHJh
bnNmb3JtU3RhdGUubW92ZSh0b1JlbmRlckJveChvKS0+ZmxpcEZvcldyaXRpbmdNb2RlSW5jbHVk
aW5nQ29sdW1ucyh0cmFuc2Zvcm1TdGF0ZS5tYXBwZWRQb2ludCgpKSAtIGNlbnRlclBvaW50KTsK
IAotICAgIEludFNpemUgY29sdW1uT2Zmc2V0OworICAgIEZsb2F0U2l6ZSBjb2x1bW5PZmZzZXQ7
CiAgICAgby0+YWRqdXN0Rm9yQ29sdW1ucyhjb2x1bW5PZmZzZXQsIHJvdW5kZWRJbnRQb2ludCh0
cmFuc2Zvcm1TdGF0ZS5tYXBwZWRQb2ludCgpKSk7CiAgICAgaWYgKCFjb2x1bW5PZmZzZXQuaXNa
ZXJvKCkpCiAgICAgICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUoY29sdW1uT2Zmc2V0KTsKQEAgLTE4
ODYsNyArMTg4Niw3IEBACiAjZW5kaWYKIH0KIAotdm9pZCBSZW5kZXJPYmplY3Q6OmdldFRyYW5z
Zm9ybUZyb21Db250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXJPYmplY3QsIGNv
bnN0IEludFNpemUmIG9mZnNldEluQ29udGFpbmVyLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJh
bnNmb3JtKSBjb25zdAordm9pZCBSZW5kZXJPYmplY3Q6OmdldFRyYW5zZm9ybUZyb21Db250YWlu
ZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXJPYmplY3QsIGNvbnN0IEZsb2F0U2l6ZSYg
b2Zmc2V0SW5Db250YWluZXIsIFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pIGNvbnN0
CiB7CiAgICAgdHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOwogICAgIHRyYW5zZm9ybS50cmFuc2xh
dGUob2Zmc2V0SW5Db250YWluZXIud2lkdGgoKSwgb2Zmc2V0SW5Db250YWluZXIuaGVpZ2h0KCkp
OwpAQCAtMTkyMywxMyArMTkyMywxMyBAQAogICAgIHJldHVybiB0cmFuc2Zvcm1TdGF0ZS5sYXN0
UGxhbmFyUXVhZCgpOwogfQogCi1JbnRTaXplIFJlbmRlck9iamVjdDo6b2Zmc2V0RnJvbUNvbnRh
aW5lcihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK0Zsb2F0
U2l6ZSBSZW5kZXJPYmplY3Q6Om9mZnNldEZyb21Db250YWluZXIoUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBBU1NFUlQobyA9PSBjb250YWlu
ZXIoKSk7CiAKLSAgICBJbnRTaXplIG9mZnNldDsKKyAgICBGbG9hdFNpemUgb2Zmc2V0OwogCi0g
ICAgby0+YWRqdXN0Rm9yQ29sdW1ucyhvZmZzZXQsIHBvaW50KTsKKyAgICBvLT5hZGp1c3RGb3JD
b2x1bW5zKG9mZnNldCwgcm91bmRlZEludFBvaW50KHBvaW50KSk7CiAKICAgICBpZiAoby0+aGFz
T3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIG9mZnNldCAtPSB0b1JlbmRlckJveChvKS0+bGF5ZXIo
KS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CkBAIC0xOTM3LDEwICsxOTM3LDEwIEBACiAgICAg
cmV0dXJuIG9mZnNldDsKIH0KIAotSW50U2l6ZSBSZW5kZXJPYmplY3Q6Om9mZnNldEZyb21BbmNl
c3RvckNvbnRhaW5lcihSZW5kZXJPYmplY3QqIGNvbnRhaW5lcikgY29uc3QKK0Zsb2F0U2l6ZSBS
ZW5kZXJPYmplY3Q6Om9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihSZW5kZXJPYmplY3QqIGNv
bnRhaW5lcikgY29uc3QKIHsKLSAgICBJbnRTaXplIG9mZnNldDsKLSAgICBJbnRQb2ludCByZWZl
cmVuY2VQb2ludDsKKyAgICBGbG9hdFNpemUgb2Zmc2V0OworICAgIEZsb2F0UG9pbnQgcmVmZXJl
bmNlUG9pbnQ7CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBjdXJyQ29udGFpbmVyID0gdGhpczsK
ICAgICBkbyB7CiAgICAgICAgIFJlbmRlck9iamVjdCogbmV4dENvbnRhaW5lciA9IGN1cnJDb250
YWluZXItPmNvbnRhaW5lcigpOwpAQCAtMTk0OCw3ICsxOTQ4LDcgQEAKICAgICAgICAgaWYgKCFu
ZXh0Q29udGFpbmVyKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIEFTU0VSVCghY3VyckNv
bnRhaW5lci0+aGFzVHJhbnNmb3JtKCkpOwotICAgICAgICBJbnRTaXplIGN1cnJlbnRPZmZzZXQg
PSBjdXJyQ29udGFpbmVyLT5vZmZzZXRGcm9tQ29udGFpbmVyKG5leHRDb250YWluZXIsIHJlZmVy
ZW5jZVBvaW50KTsKKyAgICAgICAgRmxvYXRTaXplIGN1cnJlbnRPZmZzZXQgPSBjdXJyQ29udGFp
bmVyLT5vZmZzZXRGcm9tQ29udGFpbmVyKG5leHRDb250YWluZXIsIHJlZmVyZW5jZVBvaW50KTsK
ICAgICAgICAgb2Zmc2V0ICs9IGN1cnJlbnRPZmZzZXQ7CiAgICAgICAgIHJlZmVyZW5jZVBvaW50
Lm1vdmUoY3VycmVudE9mZnNldCk7CiAgICAgICAgIGN1cnJDb250YWluZXIgPSBuZXh0Q29udGFp
bmVyOwpAQCAtMjM2OCw3ICsyMzY4LDkgQEAKICAgICAgICAgcmVnaW9uLnR5cGUgPSBzdHlsZVJl
Z2lvbi50eXBlOwogCiAgICAgICAgIHJlZ2lvbi5jbGlwID0gcmVnaW9uLmJvdW5kczsKLSAgICAg
ICAgY29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QocmVnaW9uLmNsaXApOworICAgICAgICBGbG9h
dFJlY3QgY2xpcCA9IHJlZ2lvbi5jbGlwOworICAgICAgICBjb21wdXRlQWJzb2x1dGVSZXBhaW50
UmVjdChjbGlwKTsKKyAgICAgICAgcmVnaW9uLmNsaXAgPSBlbmNsb3NpbmdJbnRSZWN0KGNsaXAp
OwogICAgICAgICBpZiAocmVnaW9uLmNsaXAuaGVpZ2h0KCkgPCAwKSB7CiAgICAgICAgICAgICBy
ZWdpb24uY2xpcC5zZXRIZWlnaHQoMCk7CiAgICAgICAgICAgICByZWdpb24uY2xpcC5zZXRXaWR0
aCgwKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0J
KHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NTIsNyArNTUyLDcgQEAKICAgICBjb25zdCBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gcGFydFJlbmRlcmVyOwogICAgIHdoaWxlIChyZW5kZXJlciAm
JiByZW5kZXJlciAhPSBpbnB1dFJlbmRlcmVyKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogY29u
dGFpbmluZ1JlbmRlcmVyID0gcmVuZGVyZXItPmNvbnRhaW5lcigpOwotICAgICAgICBvZmZzZXRG
cm9tSW5wdXRSZW5kZXJlciAtPSByZW5kZXJlci0+b2Zmc2V0RnJvbUNvbnRhaW5lcihjb250YWlu
aW5nUmVuZGVyZXIsIEludFBvaW50KCkpOworICAgICAgICBvZmZzZXRGcm9tSW5wdXRSZW5kZXJl
ciAtPSByZW5kZXJlci0+b2Zmc2V0RnJvbUNvbnRhaW5lcihjb250YWluaW5nUmVuZGVyZXIsIEZs
b2F0UG9pbnQoKSk7CiAgICAgICAgIHJlbmRlcmVyID0gY29udGFpbmluZ1JlbmRlcmVyOwogICAg
IH0KICAgICAvLyBJZiB0aGUgaW5wdXQgcmVuZGVyZXIgd2FzIG5vdCBhIGNvbnRhaW5lciwgc29t
ZXRoaW5nIHdlbnQgd3JvbmcKQEAgLTcwNCw3ICs3MDQsNyBAQAogICAgIHJldHVybiBOU01pbmlD
b250cm9sU2l6ZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0RmllbGQoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cikKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgcikKIHsKICAgICBM
b2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0
KTsKICAgICB3a0RyYXdCZXplbGVkVGV4dEZpZWxkQ2VsbChyLCBpc0VuYWJsZWQobykgJiYgIWlz
UmVhZE9ubHlDb250cm9sKG8pKTsKQEAgLTcyNiw3ICs3MjYsNyBAQAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFJlY3QmIHIpCiB7CiAgICAgTG9jYWxDdXJyZW50
R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7CiAgICAgd2tE
cmF3QmV6ZWxlZFRleHRBcmVhKHIsIGlzRW5hYmxlZChvKSAmJiAhaXNSZWFkT25seUNvbnRyb2wo
bykpOwpAQCAtMTA3OSw3ICsxMDc5LDcgQEAKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50
TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgRmxvYXRSZWN0JiByKQogewogICAgIEludFJlY3QgYm91bmRzID0gSW50UmVjdChy
LngoKSArIG8tPnN0eWxlKCktPmJvcmRlckxlZnRXaWR0aCgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByLnkoKSArIG8tPnN0eWxlKCktPmJvcmRlclRvcFdpZHRoKCksCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAkocmV2aXNpb24gODg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgICAgIGNoaWxkcmVuKCktPnVwZGF0ZUJlZm9y
ZUFmdGVyQ29udGVudCh0aGlzLCB0eXBlKTsKIH0KIAotSW50UmVjdCBSZW5kZXJCdXR0b246OmNv
bnRyb2xDbGlwUmVjdChjb25zdCBJbnRQb2ludCYgYWRkaXRpb25hbE9mZnNldCkgY29uc3QKK0lu
dFJlY3QgUmVuZGVyQnV0dG9uOjpjb250cm9sQ2xpcFJlY3QoY29uc3QgRmxvYXRQb2ludCYgYWRk
aXRpb25hbE9mZnNldCkgY29uc3QKIHsKICAgICAvLyBDbGlwIHRvIHRoZSBwYWRkaW5nIGJveCB0
byBhdCBsZWFzdCBnaXZlIGNvbnRlbnQgdGhlIGV4dHJhIHBhZGRpbmcgc3BhY2UuCiAgICAgcmV0
dXJuIEludFJlY3QoYWRkaXRpb25hbE9mZnNldC54KCkgKyBib3JkZXJMZWZ0KCksIGFkZGl0aW9u
YWxPZmZzZXQueSgpICsgYm9yZGVyVG9wKCksIHdpZHRoKCkgLSBib3JkZXJMZWZ0KCkgLSBib3Jk
ZXJSaWdodCgpLCBoZWlnaHQoKSAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmgJKHJldmlzaW9uIDg4NDk2KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU2LDcgKzU2LDcgQEAKICAgICBpbmxpbmUgSFRNTFZpZGVvRWxlbWVudCogdmlkZW9FbGVt
ZW50KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgaW50cmluc2ljU2l6ZUNoYW5nZWQoKTsK
LSAgICBJbnRTaXplIGNhbGN1bGF0ZUludHJpbnNpY1NpemUoKTsKKyAgICBGbG9hdFNpemUgY2Fs
Y3VsYXRlSW50cmluc2ljU2l6ZSgpOwogICAgIHZvaWQgdXBkYXRlSW50cmluc2ljU2l6ZSgpOwog
CiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IElu
dFJlY3QqKTsKQEAgLTY2LDE3ICs2NiwxNyBAQAogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xh
eWVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1ZpZGVvKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50UmVwbGFjZWQo
UGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZXBs
YWNlZChQYWludEluZm8mLCBjb25zdCBGbG9hdFBvaW50Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQg
bGF5b3V0KCk7CiAKLSAgICB2aXJ0dWFsIGludCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgo
Ym9vbCBpbmNsdWRlTWF4V2lkdGggPSB0cnVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBjb21w
dXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbWluaW11
bVJlcGxhY2VkSGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBjb21wdXRlUmVwbGFj
ZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGggPSB0cnVlKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGZsb2F0IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGZsb2F0IG1pbmltdW1SZXBsYWNlZEhlaWdodCgpIGNvbnN0OwogCiAgICAgdm9pZCB1
cGRhdGVQbGF5ZXIoKTsKIAotICAgIEludFNpemUgbV9jYWNoZWRJbWFnZVNpemU7CisgICAgRmxv
YXRTaXplIG1fY2FjaGVkSW1hZ2VTaXplOwogfTsKIAogaW5saW5lIFJlbmRlclZpZGVvKiB0b1Jl
bmRlclZpZGVvKFJlbmRlck9iamVjdCogb2JqZWN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckFwcGxldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckFwcGxldC5jcHAJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckFwcGxldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEzICs0
NCwxMyBAQAogewogfQogCi1JbnRTaXplIFJlbmRlckFwcGxldDo6aW50cmluc2ljU2l6ZSgpIGNv
bnN0CitGbG9hdFNpemUgUmVuZGVyQXBwbGV0OjppbnRyaW5zaWNTaXplKCkgY29uc3QKIHsKICAg
ICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IG1ha2Ugc2Vuc2UuIFdlIGNhbid0IGp1c3Qgc3RhcnQg
cmV0dXJuaW5nCiAgICAgLy8gYSBkaWZmZXJlbnQgc2l6ZSBvbmNlIHdlJ3ZlIGNyZWF0ZWQgdGhl
IHdpZGdldCBhbmQgZXhwZWN0CiAgICAgLy8gbGF5b3V0IGFuZCBzaXppbmcgdG8gYmUgY29ycmVj
dC4gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIGFuZAogICAgIC8vIHBhc3MgdGhlIGFwcHJvcHJpYXRl
IGludHJpbnNpYyBzaXplIGluIHRoZSBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gd2lkZ2V0KCkg
PyBJbnRTaXplKDUwLCA1MCkgOiBJbnRTaXplKDE1MCwgMTUwKTsKKyAgICByZXR1cm4gd2lkZ2V0
KCkgPyBGbG9hdFNpemUoNTAsIDUwKSA6IEZsb2F0U2l6ZSgxNTAsIDE1MCk7CiB9CiAKIHZvaWQg
UmVuZGVyQXBwbGV0OjpjcmVhdGVXaWRnZXRJZk5lY2Vzc2FyeSgpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDEyICsx
OTIsMTIgQEAKICAgICAgICAgdG9SZW5kZXJCb3gobV9yZW5kZXJlciktPm1vdmUoZHgsIGR5KTsg
CiB9CiAKLXZvaWQgSW5saW5lQm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UG9pbnQmIHBhaW50T2Zmc2V0LCBpbnQgLyogbGluZVRvcCAqLywgaW50IC8qbGluZUJvdHRv
bSovKQordm9pZCBJbmxpbmVCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBG
bG9hdFBvaW50JiBwYWludE9mZnNldCwgaW50IC8qIGxpbmVUb3AgKi8sIGludCAvKmxpbmVCb3R0
b20qLykKIHsKICAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QocmVuZGVy
ZXIoKSkgfHwgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCAmJiBwYWlu
dEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbikpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEludFBvaW50IGNoaWxkUG9pbnQgPSBwYWludE9mZnNldDsKKyAgICBGbG9hdFBvaW50IGNo
aWxkUG9pbnQgPSBwYWludE9mZnNldDsKICAgICBpZiAocGFyZW50KCktPnJlbmRlcmVyKCktPnN0
eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIC8vIEZhc3RlciB0aGFuIGNhbGxp
bmcgY29udGFpbmluZ0Jsb2NrKCkuCiAgICAgICAgIGNoaWxkUG9pbnQgPSByZW5kZXJlcigpLT5j
b250YWluaW5nQmxvY2soKS0+ZmxpcEZvcldyaXRpbmdNb2RlKHRvUmVuZGVyQm94KHJlbmRlcmVy
KCkpLCBjaGlsZFBvaW50LCBSZW5kZXJCb3g6OlBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1l
bnQpOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRldGFpbHNN
YXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJE
ZXRhaWxzTWFya2VyLmNwcAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwxNCAr
MTIwLDE0IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBSZW5kZXJEZXRhaWxzTWFy
a2VyOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zm
c2V0KQordm9pZCBSZW5kZXJEZXRhaWxzTWFya2VyOjpwYWludChQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgRmxvYXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaWYgKHBhaW50SW5mby5w
aGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0g
VklTSUJMRSkgewogICAgICAgICBSZW5kZXJCbG9jazo6cGFpbnQocGFpbnRJbmZvLCBwYWludE9m
ZnNldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBJbnRQb2ludCBib3hPcmlnaW4o
cGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpKTsKKyAgICBJbnRQb2ludCBib3hPcmlnaW4ocm91bmRl
ZEludFBvaW50KHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKSkpOwogICAgIEludFJlY3Qgb3ZlcmZs
b3dSZWN0KHZpc3VhbE92ZXJmbG93UmVjdCgpKTsKICAgICBvdmVyZmxvd1JlY3QubW92ZUJ5KGJv
eE9yaWdpbik7CiAgICAgb3ZlcmZsb3dSZWN0LmluZmxhdGUobWF4aW1hbE91dGxpbmVTaXplKHBh
aW50SW5mby5waGFzZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlQ2VsbC5jcHAJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBA
QAogICAgICAgICAvLyBQZXJjZW50YWdlcyBkb24ndCBuZWVkIHRvIGJlIGhhbmRsZWQgc2luY2Ug
dGhleSdyZSBhbHdheXMgdHJlYXRlZCB0aGlzIHdheSAoZXZlbiB3aGVuIHNwZWNpZmllZCBvbiB0
aGUgY2VsbHMpLgogICAgICAgICAvLyBTZWUgQnVnemlsbGEgYnVnIDgxMjYgZm9yIGRldGFpbHMu
CiAgICAgICAgIGlmIChjb2xXaWR0aFN1bS5pc0ZpeGVkKCkgJiYgY29sV2lkdGhTdW0udmFsdWUo
KSA+IDApCi0gICAgICAgICAgICBjb2xXaWR0aFN1bSA9IExlbmd0aChtYXgoMCwgY29sV2lkdGhT
dW0udmFsdWUoKSAtIGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKSksIEZpeGVkKTsKKyAg
ICAgICAgICAgIGNvbFdpZHRoU3VtID0gTGVuZ3RoKG1heCgwLjBmLCBjb2xXaWR0aFN1bS5jYWxj
RmxvYXRWYWx1ZSgwKSAtIGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKSksIEZpeGVkKTsK
ICAgICAgICAgcmV0dXJuIGNvbFdpZHRoU3VtOwogICAgIH0KIApAQCAtMTQwLDcgKzE0MCw3IEBA
CiAgICAgICAgICAgICAvLyB0byBtYWtlIHRoZSBtaW53aWR0aCBvZiB0aGUgY2VsbCBpbnRvIHRo
ZSBmaXhlZCB3aWR0aC4gIFRoZXkgZG8gdGhpcwogICAgICAgICAgICAgLy8gZXZlbiBpbiBzdHJp
Y3QgbW9kZSwgc28gZG8gbm90IG1ha2UgdGhpcyBhIHF1aXJrLiAgQWZmZWN0ZWQgdGhlIHRvcAog
ICAgICAgICAgICAgLy8gb2YgaGlwdG9wLmNvbS4KLSAgICAgICAgICAgIG1fbWluUHJlZmVycmVk
TG9naWNhbFdpZHRoID0gbWF4KHcudmFsdWUoKSwgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgp
OworICAgICAgICAgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtYXgody5jYWxjRmxv
YXRWYWx1ZSgwKSwgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgpOwogICAgIH0KIH0KIApAQCAt
MTYzLDUwICsxNjMsNTAgQEAKICAgICBzZXRDZWxsV2lkdGhDaGFuZ2VkKGZhbHNlKTsKIH0KIAot
aW50IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ1RvcChib29sIGluY2x1ZGVJbnRyaW5zaWNQYWRk
aW5nKSBjb25zdAorZmxvYXQgUmVuZGVyVGFibGVDZWxsOjpwYWRkaW5nVG9wKGJvb2wgaW5jbHVk
ZUludHJpbnNpY1BhZGRpbmcpIGNvbnN0CiB7Ci0gICAgaW50IHJlc3VsdCA9IFJlbmRlckJsb2Nr
OjpwYWRkaW5nVG9wKCk7CisgICAgZmxvYXQgcmVzdWx0ID0gUmVuZGVyQmxvY2s6OnBhZGRpbmdU
b3AoKTsKICAgICBpZiAoIWluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nIHx8ICFpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIHJldHVybiByZXN1bHQg
KyAoc3R5bGUoKS0+d3JpdGluZ01vZGUoKSA9PSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlID8gaW50
cmluc2ljUGFkZGluZ0JlZm9yZSgpIDogaW50cmluc2ljUGFkZGluZ0FmdGVyKCkpOwogfQogCi1p
bnQgUmVuZGVyVGFibGVDZWxsOjpwYWRkaW5nQm90dG9tKGJvb2wgaW5jbHVkZUludHJpbnNpY1Bh
ZGRpbmcpIGNvbnN0CitmbG9hdCBSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdCb3R0b20oYm9vbCBp
bmNsdWRlSW50cmluc2ljUGFkZGluZykgY29uc3QKIHsKLSAgICBpbnQgcmVzdWx0ID0gUmVuZGVy
QmxvY2s6OnBhZGRpbmdCb3R0b20oKTsKKyAgICBmbG9hdCByZXN1bHQgPSBSZW5kZXJCbG9jazo6
cGFkZGluZ0JvdHRvbSgpOwogICAgIGlmICghaW5jbHVkZUludHJpbnNpY1BhZGRpbmcgfHwgIWlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgcmV0
dXJuIHJlc3VsdCArIChzdHlsZSgpLT53cml0aW5nTW9kZSgpID09IFRvcFRvQm90dG9tV3JpdGlu
Z01vZGUgPyBpbnRyaW5zaWNQYWRkaW5nQWZ0ZXIoKSA6IGludHJpbnNpY1BhZGRpbmdCZWZvcmUo
KSk7CiB9CiAKLWludCBSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdMZWZ0KGJvb2wgaW5jbHVkZUlu
dHJpbnNpY1BhZGRpbmcpIGNvbnN0CitmbG9hdCBSZW5kZXJUYWJsZUNlbGw6OnBhZGRpbmdMZWZ0
KGJvb2wgaW5jbHVkZUludHJpbnNpY1BhZGRpbmcpIGNvbnN0CiB7Ci0gICAgaW50IHJlc3VsdCA9
IFJlbmRlckJsb2NrOjpwYWRkaW5nTGVmdCgpOworICAgIGZsb2F0IHJlc3VsdCA9IFJlbmRlckJs
b2NrOjpwYWRkaW5nTGVmdCgpOwogICAgIGlmICghaW5jbHVkZUludHJpbnNpY1BhZGRpbmcgfHwg
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICBy
ZXR1cm4gcmVzdWx0ICsgKHN0eWxlKCktPndyaXRpbmdNb2RlKCkgPT0gTGVmdFRvUmlnaHRXcml0
aW5nTW9kZSA/IGludHJpbnNpY1BhZGRpbmdCZWZvcmUoKSA6IGludHJpbnNpY1BhZGRpbmdBZnRl
cigpKTsKICAgICAKIH0KIAotaW50IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ1JpZ2h0KGJvb2wg
aW5jbHVkZUludHJpbnNpY1BhZGRpbmcpIGNvbnN0CitmbG9hdCBSZW5kZXJUYWJsZUNlbGw6OnBh
ZGRpbmdSaWdodChib29sIGluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nKSBjb25zdAogeyAgIAotICAg
IGludCByZXN1bHQgPSBSZW5kZXJCbG9jazo6cGFkZGluZ1JpZ2h0KCk7CisgICAgZmxvYXQgcmVz
dWx0ID0gUmVuZGVyQmxvY2s6OnBhZGRpbmdSaWdodCgpOwogICAgIGlmICghaW5jbHVkZUludHJp
bnNpY1BhZGRpbmcgfHwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICByZXR1cm4gcmVzdWx0ICsgKHN0eWxlKCktPndyaXRpbmdNb2RlKCkgPT0g
TGVmdFRvUmlnaHRXcml0aW5nTW9kZSA/IGludHJpbnNpY1BhZGRpbmdBZnRlcigpIDogaW50cmlu
c2ljUGFkZGluZ0JlZm9yZSgpKTsKIH0KIAotaW50IFJlbmRlclRhYmxlQ2VsbDo6cGFkZGluZ0Jl
Zm9yZShib29sIGluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nKSBjb25zdAorZmxvYXQgUmVuZGVyVGFi
bGVDZWxsOjpwYWRkaW5nQmVmb3JlKGJvb2wgaW5jbHVkZUludHJpbnNpY1BhZGRpbmcpIGNvbnN0
CiB7Ci0gICAgaW50IHJlc3VsdCA9IFJlbmRlckJsb2NrOjpwYWRkaW5nQmVmb3JlKCk7CisgICAg
ZmxvYXQgcmVzdWx0ID0gUmVuZGVyQmxvY2s6OnBhZGRpbmdCZWZvcmUoKTsKICAgICBpZiAoIWlu
Y2x1ZGVJbnRyaW5zaWNQYWRkaW5nKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIHJldHVy
biByZXN1bHQgKyBpbnRyaW5zaWNQYWRkaW5nQmVmb3JlKCk7CiB9CiAKLWludCBSZW5kZXJUYWJs
ZUNlbGw6OnBhZGRpbmdBZnRlcihib29sIGluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nKSBjb25zdAor
ZmxvYXQgUmVuZGVyVGFibGVDZWxsOjpwYWRkaW5nQWZ0ZXIoYm9vbCBpbmNsdWRlSW50cmluc2lj
UGFkZGluZykgY29uc3QKIHsKLSAgICBpbnQgcmVzdWx0ID0gUmVuZGVyQmxvY2s6OnBhZGRpbmdB
ZnRlcigpOworICAgIGZsb2F0IHJlc3VsdCA9IFJlbmRlckJsb2NrOjpwYWRkaW5nQWZ0ZXIoKTsK
ICAgICBpZiAoIWluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nKQogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIHJldHVybiByZXN1bHQgKyBpbnRyaW5zaWNQYWRkaW5nQWZ0ZXIoKTsKQEAgLTIyMSwy
MSArMjIxLDIxIEBACiB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6c2V0T3ZlcnJpZGVTaXplRnJvbVJv
d0hlaWdodChpbnQgcm93SGVpZ2h0KQogewogICAgIGNsZWFySW50cmluc2ljUGFkZGluZygpOwot
ICAgIFJlbmRlckJsb2NrOjpzZXRPdmVycmlkZVNpemUobWF4KDAsIHJvd0hlaWdodCAtIGJvcmRl
ckJlZm9yZSgpIC0gcGFkZGluZ0JlZm9yZSgpIC0gYm9yZGVyQWZ0ZXIoKSAtIHBhZGRpbmdBZnRl
cigpKSk7CisgICAgUmVuZGVyQmxvY2s6OnNldE92ZXJyaWRlU2l6ZShtYXgoMC4wZiwgcm93SGVp
Z2h0IC0gYm9yZGVyQmVmb3JlKCkgLSBwYWRkaW5nQmVmb3JlKCkgLSBib3JkZXJBZnRlcigpIC0g
cGFkZGluZ0FmdGVyKCkpKTsKIH0KIAotSW50U2l6ZSBSZW5kZXJUYWJsZUNlbGw6Om9mZnNldEZy
b21Db250YWluZXIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0
CitGbG9hdFNpemUgUmVuZGVyVGFibGVDZWxsOjpvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9i
amVjdCogbywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG8g
PT0gY29udGFpbmVyKCkpOwogCi0gICAgSW50U2l6ZSBvZmZzZXQgPSBSZW5kZXJCbG9jazo6b2Zm
c2V0RnJvbUNvbnRhaW5lcihvLCBwb2ludCk7CisgICAgRmxvYXRTaXplIG9mZnNldCA9IFJlbmRl
ckJsb2NrOjpvZmZzZXRGcm9tQ29udGFpbmVyKG8sIHBvaW50KTsKICAgICBpZiAocGFyZW50KCkp
CiAgICAgICAgIG9mZnNldC5leHBhbmQoLXBhcmVudEJveCgpLT54KCksIC1wYXJlbnRCb3goKS0+
eSgpKTsKIAogICAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLUludFJlY3QgUmVuZGVyVGFibGVDZWxs
OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVw
YWludENvbnRhaW5lcikKK0Zsb2F0UmVjdCBSZW5kZXJUYWJsZUNlbGw6OmNsaXBwZWRPdmVyZmxv
d1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKQog
ewogICAgIC8vIElmIHRoZSB0YWJsZSBncmlkIGlzIGRpcnR5LCB3ZSBjYW5ub3QgZ2V0IHJlbGlh
YmxlIGluZm9ybWF0aW9uIGFib3V0IGFkam9pbmluZyBjZWxscywKICAgICAvLyBzbyB3ZSBpZ25v
cmUgb3V0c2lkZSBib3JkZXJzLiBUaGlzIHNob3VsZCBub3QgYmUgYSBwcm9ibGVtIGJlY2F1c2Ug
aXQgbWVhbnMgdGhhdApAQCAtMjQ1LDExICsyNDUsMTEgQEAKICAgICAgICAgcmV0dXJuIFJlbmRl
ckJsb2NrOjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsK
IAogICAgIGJvb2wgcnRsID0gIXRhYmxlKCktPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKTsKLSAgICBpbnQgb3V0bGluZVNpemUgPSBzdHlsZSgpLT5vdXRsaW5lU2l6ZSgpOwotICAg
IGludCBsZWZ0ID0gbWF4KGJvcmRlckhhbGZMZWZ0KHRydWUpLCBvdXRsaW5lU2l6ZSk7Ci0gICAg
aW50IHJpZ2h0ID0gbWF4KGJvcmRlckhhbGZSaWdodCh0cnVlKSwgb3V0bGluZVNpemUpOwotICAg
IGludCB0b3AgPSBtYXgoYm9yZGVySGFsZlRvcCh0cnVlKSwgb3V0bGluZVNpemUpOwotICAgIGlu
dCBib3R0b20gPSBtYXgoYm9yZGVySGFsZkJvdHRvbSh0cnVlKSwgb3V0bGluZVNpemUpOworICAg
IGZsb2F0IG91dGxpbmVTaXplID0gc3R5bGUoKS0+b3V0bGluZVNpemUoKTsKKyAgICBmbG9hdCBs
ZWZ0ID0gbWF4KGJvcmRlckhhbGZMZWZ0KHRydWUpLCBvdXRsaW5lU2l6ZSk7CisgICAgZmxvYXQg
cmlnaHQgPSBtYXgoYm9yZGVySGFsZlJpZ2h0KHRydWUpLCBvdXRsaW5lU2l6ZSk7CisgICAgZmxv
YXQgdG9wID0gbWF4KGJvcmRlckhhbGZUb3AodHJ1ZSksIG91dGxpbmVTaXplKTsKKyAgICBmbG9h
dCBib3R0b20gPSBtYXgoYm9yZGVySGFsZkJvdHRvbSh0cnVlKSwgb3V0bGluZVNpemUpOwogICAg
IGlmICgobGVmdCAmJiAhcnRsKSB8fCAocmlnaHQgJiYgcnRsKSkgewogICAgICAgICBpZiAoUmVu
ZGVyVGFibGVDZWxsKiBiZWZvcmUgPSB0YWJsZSgpLT5jZWxsQmVmb3JlKHRoaXMpKSB7CiAgICAg
ICAgICAgICB0b3AgPSBtYXgodG9wLCBiZWZvcmUtPmJvcmRlckhhbGZUb3AodHJ1ZSkpOwpAQCAt
Mjc2LDcgKzI3Niw3IEBACiAgICAgfQogICAgIGxlZnQgPSBtYXgobGVmdCwgLW1pblhWaXN1YWxP
dmVyZmxvdygpKTsKICAgICB0b3AgPSBtYXgodG9wLCAtbWluWVZpc3VhbE92ZXJmbG93KCkpOwot
ICAgIEludFJlY3QgcigtbGVmdCwgLSB0b3AsIGxlZnQgKyBtYXgod2lkdGgoKSArIHJpZ2h0LCBt
YXhYVmlzdWFsT3ZlcmZsb3coKSksIHRvcCArIG1heChoZWlnaHQoKSArIGJvdHRvbSwgbWF4WVZp
c3VhbE92ZXJmbG93KCkpKTsKKyAgICBGbG9hdFJlY3QgcigtbGVmdCwgLSB0b3AsIGxlZnQgKyBt
YXgod2lkdGgoKSArIHJpZ2h0LCAoZmxvYXQpbWF4WFZpc3VhbE92ZXJmbG93KCkpLCB0b3AgKyBt
YXgoaGVpZ2h0KCkgKyBib3R0b20sIChmbG9hdCltYXhZVmlzdWFsT3ZlcmZsb3coKSkpOwogCiAg
ICAgaWYgKFJlbmRlclZpZXcqIHYgPSB2aWV3KCkpIHsKICAgICAgICAgLy8gRklYTUU6IGxheW91
dERlbHRhIG5lZWRzIHRvIGJlIGFwcGxpZWQgaW4gcGFydHMgYmVmb3JlL2FmdGVyIHRyYW5zZm9y
bXMgYW5kCkBAIC0yODcsMTQgKzI4NywxNCBAQAogICAgIHJldHVybiByOwogfQogCi12b2lkIFJl
bmRlclRhYmxlQ2VsbDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0
KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiByLCBib29sIGZpeGVkKQordm9pZCBSZW5kZXJU
YWJsZUNlbGw6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVw
YWludENvbnRhaW5lciwgRmxvYXRSZWN0JiByLCBib29sIGZpeGVkKQogewogICAgIGlmIChyZXBh
aW50Q29udGFpbmVyID09IHRoaXMpCiAgICAgICAgIHJldHVybjsKICAgICByLnNldFkoci55KCkp
OwogICAgIFJlbmRlclZpZXcqIHYgPSB2aWV3KCk7CiAgICAgaWYgKCghdiB8fCAhdi0+bGF5b3V0
U3RhdGVFbmFibGVkKCkgfHwgcmVwYWludENvbnRhaW5lcikgJiYgcGFyZW50KCkpCi0gICAgICAg
IHIubW92ZUJ5KC1wYXJlbnRCb3goKS0+bG9jYXRpb24oKSk7IC8vIFJvd3MgYXJlIGluIHRoZSBz
YW1lIGNvb3JkaW5hdGUgc3BhY2UsIHNvIGRvbid0IGFkZCB0aGVpciBvZmZzZXQgaW4uCisgICAg
ICAgIHIubW92ZUJ5KHJvdW5kZWRJbnRQb2ludCgtcGFyZW50Qm94KCktPmxvY2F0aW9uKCkpKTsg
Ly8gUm93cyBhcmUgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZSBzcGFjZSwgc28gZG9uJ3QgYWRkIHRo
ZWlyIG9mZnNldCBpbi4KICAgICBSZW5kZXJCbG9jazo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHJl
cGFpbnRDb250YWluZXIsIHIsIGZpeGVkKTsKIH0KIApAQCAtNjk1LDQ5ICs2OTUsNDkgQEAKICAg
ICByZXR1cm4gdGFibGVTdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gY29sbGFwc2Vk
RW5kQm9yZGVyKCkgOiBjb2xsYXBzZWRTdGFydEJvcmRlcigpOwogfQogCi1pbnQgUmVuZGVyVGFi
bGVDZWxsOjpib3JkZXJMZWZ0KCkgY29uc3QKK2Zsb2F0IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVy
TGVmdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRhYmxlKCktPmNvbGxhcHNlQm9yZGVycygpID8g
Ym9yZGVySGFsZkxlZnQoZmFsc2UpIDogUmVuZGVyQmxvY2s6OmJvcmRlckxlZnQoKTsKIH0KIAot
aW50IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVyUmlnaHQoKSBjb25zdAorZmxvYXQgUmVuZGVyVGFi
bGVDZWxsOjpib3JkZXJSaWdodCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRhYmxlKCktPmNvbGxh
cHNlQm9yZGVycygpID8gYm9yZGVySGFsZlJpZ2h0KGZhbHNlKSA6IFJlbmRlckJsb2NrOjpib3Jk
ZXJSaWdodCgpOwogfQogCi1pbnQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJUb3AoKSBjb25zdAor
ZmxvYXQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJUb3AoKSBjb25zdAogewogICAgIHJldHVybiB0
YWJsZSgpLT5jb2xsYXBzZUJvcmRlcnMoKSA/IGJvcmRlckhhbGZUb3AoZmFsc2UpIDogUmVuZGVy
QmxvY2s6OmJvcmRlclRvcCgpOwogfQogCi1pbnQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJCb3R0
b20oKSBjb25zdAorZmxvYXQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJCb3R0b20oKSBjb25zdAog
ewogICAgIHJldHVybiB0YWJsZSgpLT5jb2xsYXBzZUJvcmRlcnMoKSA/IGJvcmRlckhhbGZCb3R0
b20oZmFsc2UpIDogUmVuZGVyQmxvY2s6OmJvcmRlckJvdHRvbSgpOwogfQogCiAvLyBGSVhNRTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2MTkxLCBtYWtlIHRoZSBj
b2xsYXBzZWQgYm9yZGVyIGRyYXdpbmcKIC8vIHdvcmsgd2l0aCBkaWZmZXJlbnQgYmxvY2sgZmxv
dyB2YWx1ZXMgaW5zdGVhZCBvZiBiZWluZyBoYXJkLWNvZGVkIHRvIHRvcC10by1ib3R0b20uCi1p
bnQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJTdGFydCgpIGNvbnN0CitmbG9hdCBSZW5kZXJUYWJs
ZUNlbGw6OmJvcmRlclN0YXJ0KCkgY29uc3QKIHsKICAgICByZXR1cm4gdGFibGUoKS0+Y29sbGFw
c2VCb3JkZXJzKCkgPyBib3JkZXJIYWxmU3RhcnQoZmFsc2UpIDogUmVuZGVyQmxvY2s6OmJvcmRl
clN0YXJ0KCk7CiB9CiAKLWludCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckVuZCgpIGNvbnN0Citm
bG9hdCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckVuZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRh
YmxlKCktPmNvbGxhcHNlQm9yZGVycygpID8gYm9yZGVySGFsZkVuZChmYWxzZSkgOiBSZW5kZXJC
bG9jazo6Ym9yZGVyRW5kKCk7CiB9CiAKLWludCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckJlZm9y
ZSgpIGNvbnN0CitmbG9hdCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckJlZm9yZSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIHRhYmxlKCktPmNvbGxhcHNlQm9yZGVycygpID8gYm9yZGVySGFsZkJlZm9y
ZShmYWxzZSkgOiBSZW5kZXJCbG9jazo6Ym9yZGVyQmVmb3JlKCk7CiB9CiAKLWludCBSZW5kZXJU
YWJsZUNlbGw6OmJvcmRlckFmdGVyKCkgY29uc3QKK2Zsb2F0IFJlbmRlclRhYmxlQ2VsbDo6Ym9y
ZGVyQWZ0ZXIoKSBjb25zdAogewogICAgIHJldHVybiB0YWJsZSgpLT5jb2xsYXBzZUJvcmRlcnMo
KSA/IGJvcmRlckhhbGZBZnRlcihmYWxzZSkgOiBSZW5kZXJCbG9jazo6Ym9yZGVyQWZ0ZXIoKTsK
IH0KIAotaW50IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVySGFsZkxlZnQoYm9vbCBvdXRlcikgY29u
c3QKK2Zsb2F0IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVySGFsZkxlZnQoYm9vbCBvdXRlcikgY29u
c3QKIHsKICAgICBSZW5kZXJTdHlsZSogdGFibGVTdHlsZSA9IHRhYmxlKCktPnN0eWxlKCk7CiAg
ICAgaWYgKHRhYmxlU3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCkBAIC03NDUsNyAr
NzQ1LDcgQEAKICAgICByZXR1cm4gdGFibGVTdHlsZS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01v
ZGUoKSA/IGJvcmRlckhhbGZBZnRlcihvdXRlcikgOiBib3JkZXJIYWxmQmVmb3JlKG91dGVyKTsK
IH0KIAotaW50IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVySGFsZlJpZ2h0KGJvb2wgb3V0ZXIpIGNv
bnN0CitmbG9hdCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckhhbGZSaWdodChib29sIG91dGVyKSBj
b25zdAogewogICAgIFJlbmRlclN0eWxlKiB0YWJsZVN0eWxlID0gdGFibGUoKS0+c3R5bGUoKTsK
ICAgICBpZiAodGFibGVTdHlsZS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKQEAgLTc1Myw3
ICs3NTMsNyBAQAogICAgIHJldHVybiB0YWJsZVN0eWxlLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5n
TW9kZSgpID8gYm9yZGVySGFsZkJlZm9yZShvdXRlcikgOiBib3JkZXJIYWxmQWZ0ZXIob3V0ZXIp
OwogfQogCi1pbnQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJIYWxmVG9wKGJvb2wgb3V0ZXIpIGNv
bnN0CitmbG9hdCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckhhbGZUb3AoYm9vbCBvdXRlcikgY29u
c3QKIHsKICAgICBSZW5kZXJTdHlsZSogdGFibGVTdHlsZSA9IHRhYmxlKCktPnN0eWxlKCk7CiAg
ICAgaWYgKHRhYmxlU3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCkBAIC03NjEsNyAr
NzYxLDcgQEAKICAgICByZXR1cm4gdGFibGVTdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
ID8gYm9yZGVySGFsZlN0YXJ0KG91dGVyKSA6IGJvcmRlckhhbGZFbmQob3V0ZXIpOwogfQogCi1p
bnQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJIYWxmQm90dG9tKGJvb2wgb3V0ZXIpIGNvbnN0Citm
bG9hdCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckhhbGZCb3R0b20oYm9vbCBvdXRlcikgY29uc3QK
IHsKICAgICBSZW5kZXJTdHlsZSogdGFibGVTdHlsZSA9IHRhYmxlKCktPnN0eWxlKCk7CiAgICAg
aWYgKHRhYmxlU3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCkBAIC03NjksNyArNzY5
LDcgQEAKICAgICByZXR1cm4gdGFibGVTdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
Ym9yZGVySGFsZkVuZChvdXRlcikgOiBib3JkZXJIYWxmU3RhcnQob3V0ZXIpOwogfQogCi1pbnQg
UmVuZGVyVGFibGVDZWxsOjpib3JkZXJIYWxmU3RhcnQoYm9vbCBvdXRlcikgY29uc3QKK2Zsb2F0
IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVySGFsZlN0YXJ0KGJvb2wgb3V0ZXIpIGNvbnN0CiB7CiAg
ICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUgYm9yZGVyID0gY29sbGFwc2VkU3RhcnRCb3JkZXIoKTsK
ICAgICBpZiAoYm9yZGVyLmV4aXN0cygpKQpAQCAtNzc3LDcgKzc3Nyw3IEBACiAgICAgcmV0dXJu
IDA7CiB9CiAgICAgCi1pbnQgUmVuZGVyVGFibGVDZWxsOjpib3JkZXJIYWxmRW5kKGJvb2wgb3V0
ZXIpIGNvbnN0CitmbG9hdCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckhhbGZFbmQoYm9vbCBvdXRl
cikgY29uc3QKIHsKICAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBib3JkZXIgPSBjb2xsYXBzZWRF
bmRCb3JkZXIoKTsKICAgICBpZiAoYm9yZGVyLmV4aXN0cygpKQpAQCAtNzg1LDcgKzc4NSw3IEBA
CiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBSZW5kZXJUYWJsZUNlbGw6OmJvcmRlckhhbGZCZWZv
cmUoYm9vbCBvdXRlcikgY29uc3QKK2Zsb2F0IFJlbmRlclRhYmxlQ2VsbDo6Ym9yZGVySGFsZkJl
Zm9yZShib29sIG91dGVyKSBjb25zdAogewogICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGJvcmRl
ciA9IGNvbGxhcHNlZEJlZm9yZUJvcmRlcigpOwogICAgIGlmIChib3JkZXIuZXhpc3RzKCkpCkBA
IC03OTMsNyArNzkzLDcgQEAKICAgICByZXR1cm4gMDsKIH0KIAotaW50IFJlbmRlclRhYmxlQ2Vs
bDo6Ym9yZGVySGFsZkFmdGVyKGJvb2wgb3V0ZXIpIGNvbnN0CitmbG9hdCBSZW5kZXJUYWJsZUNl
bGw6OmJvcmRlckhhbGZBZnRlcihib29sIG91dGVyKSBjb25zdAogewogICAgIENvbGxhcHNlZEJv
cmRlclZhbHVlIGJvcmRlciA9IGNvbGxhcHNlZEFmdGVyQm9yZGVyKCk7CiAgICAgaWYgKGJvcmRl
ci5leGlzdHMoKSkKQEAgLTgwMSwxNyArODAxLDE3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLXZv
aWQgUmVuZGVyVGFibGVDZWxsOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0KQordm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBpZiAo
cGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VDb2xsYXBzZWRUYWJsZUJvcmRlcnMgJiYgc3R5
bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpIHsKICAgICAgICAgaWYgKCFwYWludEluZm8u
c2hvdWxkUGFpbnRXaXRoaW5Sb290KHRoaXMpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9u
KCk7CisgICAgICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0
ICsgbG9jYXRpb24oKTsKICAgICAgICAgaW50IG9zID0gMiAqIG1heGltYWxPdXRsaW5lU2l6ZShw
YWludEluZm8ucGhhc2UpOwogICAgICAgICBpZiAoYWRqdXN0ZWRQYWludE9mZnNldC55KCkgLSB0
YWJsZSgpLT5vdXRlckJvcmRlclRvcCgpIDwgcGFpbnRJbmZvLnJlY3QubWF4WSgpICsgb3MKICAg
ICAgICAgICAgICYmIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgaGVpZ2h0KCkgKyB0YWJsZSgp
LT5vdXRlckJvcmRlckJvdHRvbSgpID4gcGFpbnRJbmZvLnJlY3QueSgpIC0gb3MpCi0gICAgICAg
ICAgICBwYWludENvbGxhcHNlZEJvcmRlcihwYWludEluZm8uY29udGV4dCwgSW50UmVjdChhZGp1
c3RlZFBhaW50T2Zmc2V0LCBzaXplKCkpKTsKKyAgICAgICAgICAgIHBhaW50Q29sbGFwc2VkQm9y
ZGVyKHBhaW50SW5mby5jb250ZXh0LCBGbG9hdFJlY3QoYWRqdXN0ZWRQYWludE9mZnNldCwgc2l6
ZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9IAogICAgIApAQCAtOTExLDcgKzkxMSw3IEBA
CiAgICAgICAgIGNvbXBhcmVCb3JkZXJTdHlsZXNGb3JRU29ydCk7CiB9CiAKLXZvaWQgUmVuZGVy
VGFibGVDZWxsOjpwYWludENvbGxhcHNlZEJvcmRlcihHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNz
Q29udGV4dCwgY29uc3QgSW50UmVjdCYgcGFpbnRSZWN0KQordm9pZCBSZW5kZXJUYWJsZUNlbGw6
OnBhaW50Q29sbGFwc2VkQm9yZGVyKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIHBhaW50UmVjdCkKIHsKICAgICBpZiAoIXRhYmxlKCktPmN1cnJlbnRC
b3JkZXJTdHlsZSgpIHx8IGdyYXBoaWNzQ29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47CkBAIC05NjAsNyArOTYwLDcgQEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVy
VGFibGVDZWxsOjpwYWludEJhY2tncm91bmRzQmVoaW5kQ2VsbChQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBSZW5kZXJPYmplY3QqIGJhY2tncm91bmRP
YmplY3QpCit2b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnRCYWNrZ3JvdW5kc0JlaGluZENlbGwo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIHBhaW50T2Zmc2V0LCBSZW5k
ZXJPYmplY3QqIGJhY2tncm91bmRPYmplY3QpCiB7CiAgICAgaWYgKCFwYWludEluZm8uc2hvdWxk
UGFpbnRXaXRoaW5Sb290KHRoaXMpKQogICAgICAgICByZXR1cm47CkBAIC05NzUsNyArOTc1LDcg
QEAKICAgICBpZiAoIXRhYmxlRWx0LT5jb2xsYXBzZUJvcmRlcnMoKSAmJiBzdHlsZSgpLT5lbXB0
eUNlbGxzKCkgPT0gSElERSAmJiAhZmlyc3RDaGlsZCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisgICAgRmxvYXRQ
b2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CiAgICAgaWYgKGJhY2tncm91
bmRPYmplY3QgIT0gdGhpcykKICAgICAgICAgYWRqdXN0ZWRQYWludE9mZnNldC5tb3ZlKGxvY2F0
aW9uKCkpOwogCkBAIC05OTIsMTEgKzk5MiwxMSBAQAogICAgICAgICAgICAgICAgIHdpZHRoKCkg
LSBib3JkZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpLCBoZWlnaHQoKSAtIGJvcmRlclRvcCgpIC0g
Ym9yZGVyQm90dG9tKCkpOwogICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAoY2xp
cFJlY3QpOwogICAgICAgICB9Ci0gICAgICAgIHBhaW50RmlsbExheWVycyhwYWludEluZm8sIGMs
IGJnTGF5ZXIsIEludFJlY3QoYWRqdXN0ZWRQYWludE9mZnNldCwgc2l6ZSgpKSwgQmFja2dyb3Vu
ZEJsZWVkTm9uZSwgQ29tcG9zaXRlU291cmNlT3ZlciwgYmFja2dyb3VuZE9iamVjdCk7CisgICAg
ICAgIHBhaW50RmlsbExheWVycyhwYWludEluZm8sIGMsIGJnTGF5ZXIsIEZsb2F0UmVjdChhZGp1
c3RlZFBhaW50T2Zmc2V0LCBzaXplKCkpLCBCYWNrZ3JvdW5kQmxlZWROb25lLCBDb21wb3NpdGVT
b3VyY2VPdmVyLCBiYWNrZ3JvdW5kT2JqZWN0KTsKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyVGFi
bGVDZWxsOjpwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRQb2ludCYgcGFpbnRPZmZzZXQpCit2b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnRCb3hEZWNv
cmF0aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQb2ludCYgcGFpbnRPZmZz
ZXQpCiB7CiAgICAgaWYgKCFwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHRoaXMpKQog
ICAgICAgICByZXR1cm47CkBAIC0xMDA1LDcgKzEwMDUsNyBAQAogICAgIGlmICghdGFibGVFbHQt
PmNvbGxhcHNlQm9yZGVycygpICYmIHN0eWxlKCktPmVtcHR5Q2VsbHMoKSA9PSBISURFICYmICFm
aXJzdENoaWxkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFJlY3QgcGFpbnRSZWN0ID0g
SW50UmVjdChwYWludE9mZnNldCwgc2l6ZSgpKTsKKyAgICBGbG9hdFJlY3QgcGFpbnRSZWN0ID0g
RmxvYXRSZWN0KHBhaW50T2Zmc2V0LCBzaXplKCkpOwogICAgIHBhaW50Qm94U2hhZG93KHBhaW50
SW5mby5jb250ZXh0LCBwYWludFJlY3QsIHN0eWxlKCksIE5vcm1hbCk7CiAgICAgCiAgICAgLy8g
UGFpbnQgb3VyIGNlbGwgYmFja2dyb3VuZC4KQEAgLTEwMTksNyArMTAxOSw3IEBACiAgICAgcGFp
bnRCb3JkZXIocGFpbnRJbmZvLmNvbnRleHQsIHBhaW50UmVjdCwgc3R5bGUoKSk7CiB9CiAKLXZv
aWQgUmVuZGVyVGFibGVDZWxsOjpwYWludE1hc2soUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFBvaW50JiBwYWludE9mZnNldCkKK3ZvaWQgUmVuZGVyVGFibGVDZWxsOjpwYWludE1hc2so
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIHBhaW50T2Zmc2V0KQogewog
ICAgIGlmIChzdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8fCBwYWludEluZm8ucGhh
c2UgIT0gUGFpbnRQaGFzZU1hc2spCiAgICAgICAgIHJldHVybjsKQEAgLTEwMjgsNyArMTAyOCw3
IEBACiAgICAgaWYgKCF0YWJsZUVsdC0+Y29sbGFwc2VCb3JkZXJzKCkgJiYgc3R5bGUoKS0+ZW1w
dHlDZWxscygpID09IEhJREUgJiYgIWZpcnN0Q2hpbGQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
Ci0gICAgcGFpbnRNYXNrSW1hZ2VzKHBhaW50SW5mbywgSW50UmVjdChwYWludE9mZnNldCwgc2l6
ZSgpKSk7CisgICAgcGFpbnRNYXNrSW1hZ2VzKHBhaW50SW5mbywgRmxvYXRSZWN0KHBhaW50T2Zm
c2V0LCBzaXplKCkpKTsKIH0KIAogdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnNjcm9sbGJhcnNDaGFu
Z2VkKGJvb2wgaG9yaXpvbnRhbFNjcm9sbGJhckNoYW5nZWQsIGJvb2wgdmVydGljYWxTY3JvbGxi
YXJDaGFuZ2VkKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNp
b24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDU5ICs0NCw3MSBAQAogICAgIFJlbmRlckJveCogZmlyc3RDaGlsZEJv
eCgpIGNvbnN0OwogICAgIFJlbmRlckJveCogbGFzdENoaWxkQm94KCkgY29uc3Q7CiAKLSAgICBp
bnQgeCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LngoKTsgfQotICAgIGludCB5KCkgY29u
c3QgeyByZXR1cm4gbV9mcmFtZVJlY3QueSgpOyB9Ci0gICAgaW50IHdpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZVJlY3Qud2lkdGgoKTsgfQotICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJl
dHVybiBtX2ZyYW1lUmVjdC5oZWlnaHQoKTsgfQorICAgIGZsb2F0IHgoKSBjb25zdCB7IHJldHVy
biBtX2ZyYW1lUmVjdC54KCk7IH0KKyAgICBmbG9hdCB5KCkgY29uc3QgeyByZXR1cm4gbV9mcmFt
ZVJlY3QueSgpOyB9CisgICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVj
dC53aWR0aCgpOyB9CisgICAgZmxvYXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJl
Y3QuaGVpZ2h0KCk7IH0KIAotICAgIHZvaWQgc2V0WChpbnQgeCkgeyBtX2ZyYW1lUmVjdC5zZXRY
KHgpOyB9Ci0gICAgdm9pZCBzZXRZKGludCB5KSB7IG1fZnJhbWVSZWN0LnNldFkoeSk7IH0KLSAg
ICB2b2lkIHNldFdpZHRoKGludCB3aWR0aCkgeyBtX2ZyYW1lUmVjdC5zZXRXaWR0aCh3aWR0aCk7
IH0KLSAgICB2b2lkIHNldEhlaWdodChpbnQgaGVpZ2h0KSB7IG1fZnJhbWVSZWN0LnNldEhlaWdo
dChoZWlnaHQpOyB9CisvLyAgICBpbnQgcm91bmRlZFgoKSBjb25zdCB7IHJldHVybiBscm91bmRm
KG1fZnJhbWVSZWN0LngoKSk7IH0KKy8vICAgIGludCByb3VuZGVkWSgpIGNvbnN0IHsgcmV0dXJu
IGxyb3VuZGYobV9mcmFtZVJlY3QueSgpKTsgfQorLy8gICAgaW50IHJvdW5kZWRXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIGxyb3VuZGYobV9mcmFtZVJlY3Qud2lkdGgoKSk7IH0KKy8vICAgIGludCBy
b3VuZGVkSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbHJvdW5kZihtX2ZyYW1lUmVjdC5oZWlnaHQo
KSk7IH0KIAotICAgIGludCBsb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyB4KCkgOiB5KCk7IH0KLSAgICBpbnQgbG9naWNhbFJp
Z2h0KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbExlZnQoKSArIGxvZ2ljYWxXaWR0aCgpOyB9Ci0g
ICAgaW50IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8geSgpIDogeCgpOyB9Ci0gICAgaW50IGxvZ2ljYWxCb3R0b20oKSBjb25z
dCB7IHJldHVybiBsb2dpY2FsVG9wKCkgKyBsb2dpY2FsSGVpZ2h0KCk7IH0KLSAgICBpbnQgbG9n
aWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSA/IHdpZHRoKCkgOiBoZWlnaHQoKTsgfQotICAgIGludCBsb2dpY2FsSGVpZ2h0KCkgY29u
c3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGhlaWdodCgp
IDogd2lkdGgoKTsgfQorICAgIHZvaWQgc2V0WChmbG9hdCB4KSB7IG1fZnJhbWVSZWN0LnNldFgo
eCk7IH0KKyAgICB2b2lkIHNldFkoZmxvYXQgeSkgeyBtX2ZyYW1lUmVjdC5zZXRZKHkpOyB9Cisg
ICAgdm9pZCBzZXRXaWR0aChmbG9hdCB3aWR0aCkgeyBtX2ZyYW1lUmVjdC5zZXRXaWR0aCh3aWR0
aCk7IH0KKyAgICB2b2lkIHNldEhlaWdodChmbG9hdCBoZWlnaHQpIHsgbV9mcmFtZVJlY3Quc2V0
SGVpZ2h0KGhlaWdodCk7IH0KIAotICAgIHZvaWQgc2V0TG9naWNhbExlZnQoaW50IGxlZnQpCisg
ICAgZmxvYXQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8geCgpIDogeSgpOyB9CisgICAgZmxvYXQgbG9naWNhbFJpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbG9naWNhbExlZnQoKSArIGxvZ2ljYWxXaWR0aCgpOyB9CisgICAgZmxv
YXQgbG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyB5KCkgOiB4KCk7IH0KKyAgICBmbG9hdCBsb2dpY2FsQm90dG9tKCkgY29uc3Qg
eyByZXR1cm4gbG9naWNhbFRvcCgpICsgbG9naWNhbEhlaWdodCgpOyB9CisgICAgZmxvYXQgbG9n
aWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSA/IHdpZHRoKCkgOiBoZWlnaHQoKTsgfQorICAgIGZsb2F0IGxvZ2ljYWxIZWlnaHQoKSBj
b25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gaGVpZ2h0
KCkgOiB3aWR0aCgpOyB9CisgICAgCisvLyAgICBpbnQgcm91bmRlZExvZ2ljYWxMZWZ0KCkgY29u
c3QgeyByZXR1cm4gbHJvdW5kZihsb2dpY2FsTGVmdCgpKTsgfQorLy8gICAgaW50IHJvdW5kZWRM
b2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBscm91bmRmKGxvZ2ljYWxSaWdodCgpKTsgfQor
Ly8gICAgaW50IHJvdW5kZWRMb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gbHJvdW5kZihsb2dp
Y2FsVG9wKCkpOyB9CisvLyAgICBpbnQgcm91bmRlZExvZ2ljYWxCb3R0b20oKSBjb25zdCB7IHJl
dHVybiBscm91bmRmKGxvZ2ljYWxCb3R0b20oKSk7IH0KKy8vICAgIGludCByb3VuZGVkTG9naWNh
bFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbHJvdW5kZihsb2dpY2FsV2lkdGgoKSk7IH0KKy8vICAg
IGludCByb3VuZGVkTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGxyb3VuZGYobG9naWNh
bEhlaWdodCgpKTsgfQorCisgICAgdm9pZCBzZXRMb2dpY2FsTGVmdChmbG9hdCBsZWZ0KQogICAg
IHsKICAgICAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAg
ICAgICAgICBzZXRYKGxlZnQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzZXRZKGxlZnQp
OwogICAgIH0KLSAgICB2b2lkIHNldExvZ2ljYWxUb3AoaW50IHRvcCkKKyAgICB2b2lkIHNldExv
Z2ljYWxUb3AoZmxvYXQgdG9wKQogICAgIHsKICAgICAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICBzZXRZKHRvcCk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHNldFgodG9wKTsKICAgICB9Ci0gICAgdm9pZCBzZXRMb2dpY2FsTG9jYXRp
b24oY29uc3QgSW50UG9pbnQmIGxvY2F0aW9uKQorICAgIHZvaWQgc2V0TG9naWNhbExvY2F0aW9u
KGNvbnN0IEZsb2F0UG9pbnQmIGxvY2F0aW9uKQogICAgIHsKICAgICAgICAgaWYgKHN0eWxlKCkt
PmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICBzZXRMb2NhdGlvbihsb2Nh
dGlvbik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNldExvY2F0aW9uKGxvY2F0aW9uLnRy
YW5zcG9zZWRQb2ludCgpKTsKICAgICB9Ci0gICAgdm9pZCBzZXRMb2dpY2FsV2lkdGgoaW50IHNp
emUpCisgICAgdm9pZCBzZXRMb2dpY2FsV2lkdGgoZmxvYXQgc2l6ZSkKICAgICB7CiAgICAgICAg
IGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICAgICAgc2V0
V2lkdGgoc2l6ZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNldEhlaWdodChzaXplKTsK
ICAgICB9Ci0gICAgdm9pZCBzZXRMb2dpY2FsSGVpZ2h0KGludCBzaXplKQorICAgIHZvaWQgc2V0
TG9naWNhbEhlaWdodChmbG9hdCBzaXplKQogICAgIHsKICAgICAgICAgaWYgKHN0eWxlKCktPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICBzZXRIZWlnaHQoc2l6ZSk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHNldFdpZHRoKHNpemUpOwogICAgIH0KLSAgICB2b2lk
IHNldExvZ2ljYWxTaXplKGNvbnN0IEludFNpemUmIHNpemUpCisgICAgdm9pZCBzZXRMb2dpY2Fs
U2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiAgICAgewogICAgICAgICBpZiAoc3R5bGUoKS0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgICAgIHNldFNpemUoc2l6ZSk7CkBA
IC0xMDQsMzEgKzExNiwzMSBAQAogICAgICAgICAgICAgc2V0U2l6ZShzaXplLnRyYW5zcG9zZWRT
aXplKCkpOwogICAgIH0KIAotICAgIEludFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9mcmFtZVJlY3QubG9jYXRpb24oKTsgfQotICAgIEludFNpemUgbG9jYXRpb25PZmZzZXQoKSBj
b25zdCB7IHJldHVybiBJbnRTaXplKHgoKSwgeSgpKTsgfQotICAgIEludFNpemUgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LnNpemUoKTsgfQorICAgIEZsb2F0UG9pbnQgbG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC5sb2NhdGlvbigpOyB9CisgICAgRmxvYXRT
aXplIGxvY2F0aW9uT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gRmxvYXRTaXplKHgoKSwgeSgpKTsg
fQorICAgIEZsb2F0U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3Quc2l6ZSgp
OyB9CiAKLSAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0IEludFBvaW50JiBsb2NhdGlvbikgeyBt
X2ZyYW1lUmVjdC5zZXRMb2NhdGlvbihsb2NhdGlvbik7IH0KKyAgICB2b2lkIHNldExvY2F0aW9u
KGNvbnN0IEZsb2F0UG9pbnQmIGxvY2F0aW9uKSB7IG1fZnJhbWVSZWN0LnNldExvY2F0aW9uKGxv
Y2F0aW9uKTsgfQogICAgIAotICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSB7
IG1fZnJhbWVSZWN0LnNldFNpemUoc2l6ZSk7IH0KLSAgICB2b2lkIG1vdmUoaW50IGR4LCBpbnQg
ZHkpIHsgbV9mcmFtZVJlY3QubW92ZShkeCwgZHkpOyB9CisgICAgdm9pZCBzZXRTaXplKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSkgeyBBU1NFUlQoc2l6ZS53aWR0aCgpIDwgMTAwMDAwKTsgbV9mcmFt
ZVJlY3Quc2V0U2l6ZShzaXplKTsgfQorICAgIHZvaWQgbW92ZShmbG9hdCBkeCwgZmxvYXQgZHkp
IHsgbV9mcmFtZVJlY3QubW92ZShkeCwgZHkpOyB9CiAKLSAgICBJbnRSZWN0IGZyYW1lUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0OyB9Ci0gICAgdm9pZCBzZXRGcmFtZVJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkgeyBtX2ZyYW1lUmVjdCA9IHJlY3Q7IH0KKyAgICBGbG9hdFJlY3Qg
ZnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3Q7IH0KKyAgICB2b2lkIHNldEZy
YW1lUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIHsgbV9mcmFtZVJlY3QgPSByZWN0OyB9CiAK
LSAgICBJbnRSZWN0IGJvcmRlckJveFJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KDAsIDAs
IHdpZHRoKCksIGhlaWdodCgpKTsgfQotICAgIHZpcnR1YWwgSW50UmVjdCBib3JkZXJCb3VuZGlu
Z0JveCgpIGNvbnN0IHsgcmV0dXJuIGJvcmRlckJveFJlY3QoKTsgfSAKKyAgICBGbG9hdFJlY3Qg
Ym9yZGVyQm94UmVjdCgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdCgwLCAwLCB3aWR0aCgpLCBo
ZWlnaHQoKSk7IH0KKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBib3JkZXJCb3VuZGluZ0JveCgpIGNv
bnN0IHsgcmV0dXJuIGJvcmRlckJveFJlY3QoKTsgfSAKIAogICAgIC8vIFRoZSBjb250ZW50IGFy
ZWEgb2YgdGhlIGJveCAoZXhjbHVkZXMgcGFkZGluZyBhbmQgYm9yZGVyKS4KLSAgICBJbnRSZWN0
IGNvbnRlbnRCb3hSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdChib3JkZXJMZWZ0KCkgKyBw
YWRkaW5nTGVmdCgpLCBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSwgY29udGVudFdpZHRoKCks
IGNvbnRlbnRIZWlnaHQoKSk7IH0KKyAgICBGbG9hdFJlY3QgY29udGVudEJveFJlY3QoKSBjb25z
dCB7IHJldHVybiBGbG9hdFJlY3QoYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSwgYm9yZGVy
VG9wKCkgKyBwYWRkaW5nVG9wKCksIGNvbnRlbnRXaWR0aCgpLCBjb250ZW50SGVpZ2h0KCkpOyB9
CiAgICAgLy8gVGhlIGNvbnRlbnQgYm94IGluIGFic29sdXRlIGNvb3Jkcy4gSWdub3JlcyB0cmFu
c2Zvcm1zLgotICAgIEludFJlY3QgYWJzb2x1dGVDb250ZW50Qm94KCkgY29uc3Q7CisgICAgRmxv
YXRSZWN0IGFic29sdXRlQ29udGVudEJveCgpIGNvbnN0OwogICAgIC8vIFRoZSBjb250ZW50IGJv
eCBjb252ZXJ0ZWQgdG8gYWJzb2x1dGUgY29vcmRzICh0YWtpbmcgdHJhbnNmb3JtcyBpbnRvIGFj
Y291bnQpLgogICAgIEZsb2F0UXVhZCBhYnNvbHV0ZUNvbnRlbnRRdWFkKCkgY29uc3Q7CiAKICAg
ICAvLyBCb3VuZHMgb2YgdGhlIG91dGxpbmUgYm94IGluIGFic29sdXRlIGNvb3Jkcy4gUmVzcGVj
dHMgdHJhbnNmb3JtcwotICAgIHZpcnR1YWwgSW50UmVjdCBvdXRsaW5lQm91bmRzRm9yUmVwYWlu
dChSZW5kZXJCb3hNb2RlbE9iamVjdCogLypyZXBhaW50Q29udGFpbmVyKi8sIEludFBvaW50KiBj
YWNoZWRPZmZzZXRUb1JlcGFpbnRDb250YWluZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBh
ZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBJbnRQb2ludCYpOworICAg
IHZpcnR1YWwgSW50UmVjdCBvdXRsaW5lQm91bmRzRm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9i
amVjdCogLypyZXBhaW50Q29udGFpbmVyKi8sIEZsb2F0UG9pbnQqIGNhY2hlZE9mZnNldFRvUmVw
YWludENvbnRhaW5lcikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3Rz
KFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKIAogICAgIC8vIFVzZSB0aGlz
IHdpdGggY2F1dGlvbiEgTm8gdHlwZSBjaGVja2luZyBpcyBkb25lIQogICAgIFJlbmRlckJveCog
cHJldmlvdXNTaWJsaW5nQm94KCkgY29uc3Q7CkBAIC0xMzksMjkgKzE1MSwyOSBAQAogICAgIC8v
IEZvciBob3Jpem9udGFsLXRiIGFuZCB2ZXJ0aWNhbC1sciB0aGV5IHdpbGwgbWF0Y2ggcGh5c2lj
YWwgZGlyZWN0aW9ucywgYnV0IGZvciBob3Jpem9udGFsLWJ0IGFuZCB2ZXJ0aWNhbC1ybCwgdGhl
IHRvcC9ib3R0b20gYW5kIGxlZnQvcmlnaHQKICAgICAvLyByZXNwZWN0aXZlbHkgYXJlIGZsaXBw
ZWQgd2hlbiBjb21wYXJlZCB0byB0aGVpciBwaHlzaWNhbCBjb3VudGVycGFydHMuICBGb3IgZXhh
bXBsZSBtaW5YIGlzIG9uIHRoZSBsZWZ0IGluIHZlcnRpY2FsLWxyLAogICAgIC8vIGJ1dCBpdCBp
cyBvbiB0aGUgcmlnaHQgaW4gdmVydGljYWwtcmwuCi0gICAgSW50UmVjdCBsYXlvdXRPdmVyZmxv
d1JlY3QoKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+bGF5b3V0T3Zl
cmZsb3dSZWN0KCkgOiBjbGllbnRCb3hSZWN0KCk7IH0KLSAgICBpbnQgbWluWUxheW91dE92ZXJm
bG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdz8gbV9vdmVyZmxvdy0+bWluWUxheW91dE92
ZXJmbG93KCkgOiBib3JkZXJUb3AoKTsgfQotICAgIGludCBtYXhZTGF5b3V0T3ZlcmZsb3coKSBj
b25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+bWF4WUxheW91dE92ZXJmbG93
KCkgOiBib3JkZXJUb3AoKSArIGNsaWVudEhlaWdodCgpOyB9Ci0gICAgaW50IG1pblhMYXlvdXRP
dmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93LT5taW5YTGF5
b3V0T3ZlcmZsb3coKSA6IGJvcmRlckxlZnQoKTsgfQotICAgIGludCBtYXhYTGF5b3V0T3ZlcmZs
b3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+bWF4WExheW91dE92
ZXJmbG93KCkgOiBib3JkZXJMZWZ0KCkgKyBjbGllbnRXaWR0aCgpOyB9Ci0gICAgSW50U2l6ZSBt
YXhMYXlvdXRPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIEludFNpemUobWF4WExheW91dE92ZXJm
bG93KCksIG1heFlMYXlvdXRPdmVyZmxvdygpKTsgfQotICAgIGludCBsb2dpY2FsTGVmdExheW91
dE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSA/IG1pblhMYXlvdXRPdmVyZmxvdygpIDogbWluWUxheW91dE92ZXJmbG93KCk7IH0KLSAg
ICBpbnQgbG9naWNhbFJpZ2h0TGF5b3V0T3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBzdHlsZSgp
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbWF4WExheW91dE92ZXJmbG93KCkgOiBtYXhZ
TGF5b3V0T3ZlcmZsb3coKTsgfQorICAgIEZsb2F0UmVjdCBsYXlvdXRPdmVyZmxvd1JlY3QoKSBj
b25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+bGF5b3V0T3ZlcmZsb3dSZWN0
KCkgOiBjbGllbnRCb3hSZWN0KCk7IH0KKyAgICBmbG9hdCBtaW5ZTGF5b3V0T3ZlcmZsb3coKSBj
b25zdCB7IHJldHVybiBtX292ZXJmbG93PyBtX292ZXJmbG93LT5taW5ZTGF5b3V0T3ZlcmZsb3co
KSA6IGJvcmRlclRvcCgpOyB9CisgICAgZmxvYXQgbWF4WUxheW91dE92ZXJmbG93KCkgY29uc3Qg
eyByZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPm1heFlMYXlvdXRPdmVyZmxvdygpIDog
Ym9yZGVyVG9wKCkgKyBjbGllbnRIZWlnaHQoKTsgfQorICAgIGZsb2F0IG1pblhMYXlvdXRPdmVy
ZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93LT5taW5YTGF5b3V0
T3ZlcmZsb3coKSA6IGJvcmRlckxlZnQoKTsgfQorICAgIGZsb2F0IG1heFhMYXlvdXRPdmVyZmxv
dygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93LT5tYXhYTGF5b3V0T3Zl
cmZsb3coKSA6IGJvcmRlckxlZnQoKSArIGNsaWVudFdpZHRoKCk7IH0KKyAgICBGbG9hdFNpemUg
bWF4TGF5b3V0T3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBGbG9hdFNpemUobWF4WExheW91dE92
ZXJmbG93KCksIG1heFlMYXlvdXRPdmVyZmxvdygpKTsgfQorICAgIGZsb2F0IGxvZ2ljYWxMZWZ0
TGF5b3V0T3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gbWluWExheW91dE92ZXJmbG93KCkgOiBtaW5ZTGF5b3V0T3ZlcmZsb3coKTsg
fQorICAgIGZsb2F0IGxvZ2ljYWxSaWdodExheW91dE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4g
c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG1heFhMYXlvdXRPdmVyZmxvdygp
IDogbWF4WUxheW91dE92ZXJmbG93KCk7IH0KICAgICAKLSAgICBJbnRSZWN0IHZpc3VhbE92ZXJm
bG93UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93LT52aXN1YWxP
dmVyZmxvd1JlY3QoKSA6IGJvcmRlckJveFJlY3QoKTsgfQotICAgIGludCBtaW5ZVmlzdWFsT3Zl
cmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93PyBtX292ZXJmbG93LT5taW5ZVmlzdWFs
T3ZlcmZsb3coKSA6IDA7IH0KLSAgICBpbnQgbWF4WVZpc3VhbE92ZXJmbG93KCkgY29uc3QgeyBy
ZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPm1heFlWaXN1YWxPdmVyZmxvdygpIDogaGVp
Z2h0KCk7IH0KLSAgICBpbnQgbWluWFZpc3VhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9v
dmVyZmxvdyA/IG1fb3ZlcmZsb3ctPm1pblhWaXN1YWxPdmVyZmxvdygpIDogMDsgfQotICAgIGlu
dCBtYXhYVmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVy
Zmxvdy0+bWF4WFZpc3VhbE92ZXJmbG93KCkgOiB3aWR0aCgpOyB9Ci0gICAgaW50IGxvZ2ljYWxM
ZWZ0VmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gbWluWFZpc3VhbE92ZXJmbG93KCkgOiBtaW5ZVmlzdWFsT3ZlcmZsb3co
KTsgfQotICAgIGludCBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJu
IHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBtYXhYVmlzdWFsT3ZlcmZsb3co
KSA6IG1heFlWaXN1YWxPdmVyZmxvdygpOyB9CisgICAgRmxvYXRSZWN0IHZpc3VhbE92ZXJmbG93
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93LT52aXN1YWxPdmVy
Zmxvd1JlY3QoKSA6IGJvcmRlckJveFJlY3QoKTsgfQorICAgIGZsb2F0IG1pbllWaXN1YWxPdmVy
ZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3c/IG1fb3ZlcmZsb3ctPm1pbllWaXN1YWxP
dmVyZmxvdygpIDogMDsgfQorICAgIGZsb2F0IG1heFlWaXN1YWxPdmVyZmxvdygpIGNvbnN0IHsg
cmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93LT5tYXhZVmlzdWFsT3ZlcmZsb3coKSA6IGhl
aWdodCgpOyB9CisgICAgZmxvYXQgbWluWFZpc3VhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4g
bV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPm1pblhWaXN1YWxPdmVyZmxvdygpIDogMDsgfQorICAg
IGZsb2F0IG1heFhWaXN1YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBt
X292ZXJmbG93LT5tYXhYVmlzdWFsT3ZlcmZsb3coKSA6IHdpZHRoKCk7IH0KKyAgICBmbG9hdCBs
b2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA/IG1pblhWaXN1YWxPdmVyZmxvdygpIDogbWluWVZpc3VhbE92
ZXJmbG93KCk7IH0KKyAgICBmbG9hdCBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdygpIGNvbnN0
IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBtYXhYVmlzdWFs
T3ZlcmZsb3coKSA6IG1heFlWaXN1YWxPdmVyZmxvdygpOyB9CiAgICAgCi0gICAgdm9pZCBhZGRM
YXlvdXRPdmVyZmxvdyhjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBhZGRWaXN1YWxPdmVyZmxv
dyhjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBhZGRMYXlvdXRPdmVyZmxvdyhjb25zdCBGbG9h
dFJlY3QmKTsKKyAgICB2b2lkIGFkZFZpc3VhbE92ZXJmbG93KGNvbnN0IEZsb2F0UmVjdCYpOwog
ICAgIAogICAgIHZvaWQgYWRkU2hhZG93T3ZlcmZsb3coKTsKLSAgICB2b2lkIGFkZE92ZXJmbG93
RnJvbUNoaWxkKFJlbmRlckJveCogY2hpbGQpIHsgYWRkT3ZlcmZsb3dGcm9tQ2hpbGQoY2hpbGQs
IEludFNpemUoY2hpbGQtPngoKSwgY2hpbGQtPnkoKSkpOyB9Ci0gICAgdm9pZCBhZGRPdmVyZmxv
d0Zyb21DaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBJbnRTaXplJiBkZWx0YSk7CisgICAg
dm9pZCBhZGRPdmVyZmxvd0Zyb21DaGlsZChSZW5kZXJCb3gqIGNoaWxkKSB7IGFkZE92ZXJmbG93
RnJvbUNoaWxkKGNoaWxkLCBGbG9hdFNpemUoY2hpbGQtPngoKSwgY2hpbGQtPnkoKSkpOyB9Cisg
ICAgdm9pZCBhZGRPdmVyZmxvd0Zyb21DaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBGbG9h
dFNpemUmIGRlbHRhKTsKICAgICB2b2lkIGNsZWFyTGF5b3V0T3ZlcmZsb3coKTsKICAgICAKICAg
ICB2b2lkIHVwZGF0ZUxheWVyVHJhbnNmb3JtKCk7CkBAIC0xNjksNTUgKzE4MSw1NSBAQAogICAg
IHZvaWQgYmxvY2tEaXJlY3Rpb25PdmVyZmxvdyhib29sIGlzTGluZUhvcml6b250YWwsIGludCYg
bG9naWNhbFRvcExheW91dE92ZXJmbG93LCBpbnQmIGxvZ2ljYWxCb3R0b21MYXlvdXRPdmVyZmxv
dywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBsb2dpY2FsVG9wVmlzdWFs
T3ZlcmZsb3csIGludCYgbG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93KTsKIAotICAgIGludCBj
b250ZW50V2lkdGgoKSBjb25zdCB7IHJldHVybiBjbGllbnRXaWR0aCgpIC0gcGFkZGluZ0xlZnQo
KSAtIHBhZGRpbmdSaWdodCgpOyB9Ci0gICAgaW50IGNvbnRlbnRIZWlnaHQoKSBjb25zdCB7IHJl
dHVybiBjbGllbnRIZWlnaHQoKSAtIHBhZGRpbmdUb3AoKSAtIHBhZGRpbmdCb3R0b20oKTsgfQot
ICAgIGludCBjb250ZW50TG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNvbnRlbnRXaWR0aCgpIDogY29udGVudEhlaWdodCgp
OyB9Ci0gICAgaW50IGNvbnRlbnRMb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gc3R5bGUo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNvbnRlbnRIZWlnaHQoKSA6IGNvbnRlbnRX
aWR0aCgpOyB9CisgICAgZmxvYXQgY29udGVudFdpZHRoKCkgY29uc3QgeyByZXR1cm4gY2xpZW50
V2lkdGgoKSAtIHBhZGRpbmdMZWZ0KCkgLSBwYWRkaW5nUmlnaHQoKTsgfQorICAgIGZsb2F0IGNv
bnRlbnRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBjbGllbnRIZWlnaHQoKSAtIHBhZGRpbmdUb3Ao
KSAtIHBhZGRpbmdCb3R0b20oKTsgfQorICAgIGZsb2F0IGNvbnRlbnRMb2dpY2FsV2lkdGgoKSBj
b25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY29udGVu
dFdpZHRoKCkgOiBjb250ZW50SGVpZ2h0KCk7IH0KKyAgICBmbG9hdCBjb250ZW50TG9naWNhbEhl
aWdodCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBjb250ZW50SGVpZ2h0KCkgOiBjb250ZW50V2lkdGgoKTsgfQogCiAgICAgLy8gSUUgZXh0ZW5z
aW9ucy4gVXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0V2lkdGgvSGVpZ2h0LiAgT3ZlcnJpZGRlbiBi
eSBpbmxpbmVzIChSZW5kZXJGbG93KQogICAgIC8vIHRvIHJldHVybiB0aGUgcmVtYWluaW5nIHdp
ZHRoIG9uIGEgZ2l2ZW4gbGluZSAoYW5kIHRoZSBoZWlnaHQgb2YgYSBzaW5nbGUgbGluZSkuCi0g
ICAgdmlydHVhbCBpbnQgb2Zmc2V0V2lkdGgoKSBjb25zdCB7IHJldHVybiB3aWR0aCgpOyB9Ci0g
ICAgdmlydHVhbCBpbnQgb2Zmc2V0SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gaGVpZ2h0KCk7IH0K
KyAgICB2aXJ0dWFsIGZsb2F0IG9mZnNldFdpZHRoKCkgY29uc3QgeyByZXR1cm4gd2lkdGgoKTsg
fQorICAgIHZpcnR1YWwgZmxvYXQgb2Zmc2V0SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gaGVpZ2h0
KCk7IH0KIAogICAgIC8vIE1vcmUgSUUgZXh0ZW5zaW9ucy4gIGNsaWVudFdpZHRoIGFuZCBjbGll
bnRIZWlnaHQgcmVwcmVzZW50IHRoZSBpbnRlcmlvciBvZiBhbiBvYmplY3QKICAgICAvLyBleGNs
dWRpbmcgYm9yZGVyIGFuZCBzY3JvbGxiYXIuICBjbGllbnRMZWZ0L1RvcCBhcmUganVzdCB0aGUg
Ym9yZGVyTGVmdFdpZHRoIGFuZCBib3JkZXJUb3BXaWR0aC4KLSAgICBpbnQgY2xpZW50TGVmdCgp
IGNvbnN0IHsgcmV0dXJuIGJvcmRlckxlZnQoKTsgfQotICAgIGludCBjbGllbnRUb3AoKSBjb25z
dCB7IHJldHVybiBib3JkZXJUb3AoKTsgfQotICAgIGludCBjbGllbnRXaWR0aCgpIGNvbnN0Owot
ICAgIGludCBjbGllbnRIZWlnaHQoKSBjb25zdDsKLSAgICBpbnQgY2xpZW50TG9naWNhbFdpZHRo
KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNs
aWVudFdpZHRoKCkgOiBjbGllbnRIZWlnaHQoKTsgfQotICAgIGludCBjbGllbnRMb2dpY2FsSGVp
Z2h0KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/
IGNsaWVudEhlaWdodCgpIDogY2xpZW50V2lkdGgoKTsgfQotICAgIGludCBjbGllbnRMb2dpY2Fs
Qm90dG9tKCkgY29uc3QgeyByZXR1cm4gYm9yZGVyQmVmb3JlKCkgKyBjbGllbnRMb2dpY2FsSGVp
Z2h0KCk7IH0KLSAgICBJbnRSZWN0IGNsaWVudEJveFJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRS
ZWN0KGNsaWVudExlZnQoKSwgY2xpZW50VG9wKCksIGNsaWVudFdpZHRoKCksIGNsaWVudEhlaWdo
dCgpKTsgfQorICAgIGZsb2F0IGNsaWVudExlZnQoKSBjb25zdCB7IHJldHVybiBib3JkZXJMZWZ0
KCk7IH0KKyAgICBmbG9hdCBjbGllbnRUb3AoKSBjb25zdCB7IHJldHVybiBib3JkZXJUb3AoKTsg
fQorICAgIGZsb2F0IGNsaWVudFdpZHRoKCkgY29uc3Q7CisgICAgZmxvYXQgY2xpZW50SGVpZ2h0
KCkgY29uc3Q7CisgICAgZmxvYXQgY2xpZW50TG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4g
c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNsaWVudFdpZHRoKCkgOiBjbGll
bnRIZWlnaHQoKTsgfQorICAgIGZsb2F0IGNsaWVudExvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJl
dHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2xpZW50SGVpZ2h0KCkg
OiBjbGllbnRXaWR0aCgpOyB9CisgICAgZmxvYXQgY2xpZW50TG9naWNhbEJvdHRvbSgpIGNvbnN0
IHsgcmV0dXJuIGJvcmRlckJlZm9yZSgpICsgY2xpZW50TG9naWNhbEhlaWdodCgpOyB9CisgICAg
RmxvYXRSZWN0IGNsaWVudEJveFJlY3QoKSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QoY2xpZW50
TGVmdCgpLCBjbGllbnRUb3AoKSwgY2xpZW50V2lkdGgoKSwgY2xpZW50SGVpZ2h0KCkpOyB9CiAK
ICAgICAvLyBzY3JvbGxXaWR0aC9zY3JvbGxIZWlnaHQgd2lsbCBiZSB0aGUgc2FtZSBhcyBjbGll
bnRXaWR0aC9jbGllbnRIZWlnaHQgdW5sZXNzIHRoZQogICAgIC8vIG9iamVjdCBoYXMgb3ZlcmZs
b3c6aGlkZGVuL3Njcm9sbC9hdXRvIHNwZWNpZmllZCBhbmQgYWxzbyBoYXMgb3ZlcmZsb3cuCiAg
ICAgLy8gc2Nyb2xsTGVmdC9Ub3AgcmV0dXJuIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbi4g
IFRoZXNlIG1ldGhvZHMgYXJlIHZpcnR1YWwgc28gdGhhdCBvYmplY3RzIGxpa2UKICAgICAvLyB0
ZXh0YXJlYXMgY2FuIHNjcm9sbCBzaGFkb3cgY29udGVudCAoYnV0IHByZXRlbmQgdGhhdCB0aGV5
IGFyZSB0aGUgb2JqZWN0cyB0aGF0IGFyZQogICAgIC8vIHNjcm9sbGluZykuCi0gICAgdmlydHVh
bCBpbnQgc2Nyb2xsTGVmdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHNjcm9sbFRvcCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBp
bnQgc2Nyb2xsSGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbExlZnQo
aW50KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsVG9wKGludCk7CisgICAgdmlydHVhbCBm
bG9hdCBzY3JvbGxMZWZ0KCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBzY3JvbGxUb3AoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IHNjcm9sbFdpZHRoKCkgY29uc3Q7CisgICAgdmlydHVh
bCBmbG9hdCBzY3JvbGxIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xs
TGVmdChmbG9hdCk7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFRvcChmbG9hdCk7CiAKLSAg
ICB2aXJ0dWFsIGludCBtYXJnaW5Ub3AoKSBjb25zdCB7IHJldHVybiBtX21hcmdpblRvcDsgfQot
ICAgIHZpcnR1YWwgaW50IG1hcmdpbkJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2luQm90
dG9tOyB9Ci0gICAgdmlydHVhbCBpbnQgbWFyZ2luTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFy
Z2luTGVmdDsgfQotICAgIHZpcnR1YWwgaW50IG1hcmdpblJpZ2h0KCkgY29uc3QgeyByZXR1cm4g
bV9tYXJnaW5SaWdodDsgfQotICAgIHZvaWQgc2V0TWFyZ2luVG9wKGludCBtYXJnaW4pIHsgbV9t
YXJnaW5Ub3AgPSBtYXJnaW47IH0KLSAgICB2b2lkIHNldE1hcmdpbkJvdHRvbShpbnQgbWFyZ2lu
KSB7IG1fbWFyZ2luQm90dG9tID0gbWFyZ2luOyB9Ci0gICAgdm9pZCBzZXRNYXJnaW5MZWZ0KGlu
dCBtYXJnaW4pIHsgbV9tYXJnaW5MZWZ0ID0gbWFyZ2luOyB9Ci0gICAgdm9pZCBzZXRNYXJnaW5S
aWdodChpbnQgbWFyZ2luKSB7IG1fbWFyZ2luUmlnaHQgPSBtYXJnaW47IH0KLSAgICB2aXJ0dWFs
IGludCBtYXJnaW5CZWZvcmUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBtYXJnaW5BZnRlcigp
IGNvbnN0OwotICAgIHZpcnR1YWwgaW50IG1hcmdpblN0YXJ0KCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBpbnQgbWFyZ2luRW5kKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRNYXJnaW5TdGFydChpbnQpOwot
ICAgIHZvaWQgc2V0TWFyZ2luRW5kKGludCk7Ci0gICAgdm9pZCBzZXRNYXJnaW5CZWZvcmUoaW50
KTsKLSAgICB2b2lkIHNldE1hcmdpbkFmdGVyKGludCk7CisgICAgdmlydHVhbCBmbG9hdCBtYXJn
aW5Ub3AoKSBjb25zdCB7IHJldHVybiBtX21hcmdpblRvcDsgfQorICAgIHZpcnR1YWwgZmxvYXQg
bWFyZ2luQm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW5Cb3R0b207IH0KKyAgICB2aXJ0
dWFsIGZsb2F0IG1hcmdpbkxlZnQoKSBjb25zdCB7IHJldHVybiBtX21hcmdpbkxlZnQ7IH0KKyAg
ICB2aXJ0dWFsIGZsb2F0IG1hcmdpblJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW5SaWdo
dDsgfQorICAgIHZvaWQgc2V0TWFyZ2luVG9wKGZsb2F0IG1hcmdpbikgeyBtX21hcmdpblRvcCA9
IG1hcmdpbjsgfQorICAgIHZvaWQgc2V0TWFyZ2luQm90dG9tKGZsb2F0IG1hcmdpbikgeyBtX21h
cmdpbkJvdHRvbSA9IG1hcmdpbjsgfQorICAgIHZvaWQgc2V0TWFyZ2luTGVmdChmbG9hdCBtYXJn
aW4pIHsgbV9tYXJnaW5MZWZ0ID0gbWFyZ2luOyB9CisgICAgdm9pZCBzZXRNYXJnaW5SaWdodChm
bG9hdCBtYXJnaW4pIHsgbV9tYXJnaW5SaWdodCA9IG1hcmdpbjsgfQorICAgIHZpcnR1YWwgZmxv
YXQgbWFyZ2luQmVmb3JlKCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBtYXJnaW5BZnRlcigp
IGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgbWFyZ2luU3RhcnQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGZsb2F0IG1hcmdpbkVuZCgpIGNvbnN0OworICAgIHZvaWQgc2V0TWFyZ2luU3RhcnQoZmxv
YXQpOworICAgIHZvaWQgc2V0TWFyZ2luRW5kKGZsb2F0KTsKKyAgICB2b2lkIHNldE1hcmdpbkJl
Zm9yZShmbG9hdCk7CisgICAgdm9pZCBzZXRNYXJnaW5BZnRlcihmbG9hdCk7CiAKICAgICAvLyBU
aGUgZm9sbG93aW5nIGZpdmUgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGltcGxlbWVudCBjb2xsYXBz
aW5nIG1hcmdpbnMuCiAgICAgLy8gQWxsIG9iamVjdHMga25vdyB0aGVpciBtYXhpbWFsIHBvc2l0
aXZlIGFuZCBuZWdhdGl2ZSBtYXJnaW5zLiAgVGhlCkBAIC0yMjcsNDMgKzIzOSw0NCBAQAogICAg
IC8vIG1ldGhvZHMuCiAgICAgZW51bSBNYXJnaW5TaWduIHsgUG9zaXRpdmVNYXJnaW4sIE5lZ2F0
aXZlTWFyZ2luIH07CiAgICAgdmlydHVhbCBib29sIGlzU2VsZkNvbGxhcHNpbmdCbG9jaygpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBpbnQgY29sbGFwc2VkTWFyZ2luQmVm
b3JlKCkgY29uc3QgeyByZXR1cm4gbWFyZ2luQmVmb3JlKCk7IH0KLSAgICB2aXJ0dWFsIGludCBj
b2xsYXBzZWRNYXJnaW5BZnRlcigpIGNvbnN0IHsgcmV0dXJuIG1hcmdpbkFmdGVyKCk7IH0KKyAg
ICB2aXJ0dWFsIGZsb2F0IGNvbGxhcHNlZE1hcmdpbkJlZm9yZSgpIGNvbnN0IHsgcmV0dXJuIG1h
cmdpbkJlZm9yZSgpOyB9CisgICAgdmlydHVhbCBmbG9hdCBjb2xsYXBzZWRNYXJnaW5BZnRlcigp
IGNvbnN0IHsgcmV0dXJuIG1hcmdpbkFmdGVyKCk7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhYnNv
bHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCk7CisgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+Jiwg
Y29uc3QgRmxvYXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOwogICAgIHZpcnR1YWwgdm9pZCBh
YnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CiAgICAgCiAgICAgSW50UmVjdCByZWZs
ZWN0aW9uQm94KCkgY29uc3Q7CiAgICAgaW50IHJlZmxlY3Rpb25PZmZzZXQoKSBjb25zdDsKICAg
ICAvLyBHaXZlbiBhIHJlY3QgaW4gdGhlIG9iamVjdCdzIGNvb3JkaW5hdGUgc3BhY2UsIHJldHVy
bnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVjdCBpbiB0aGUgcmVmbGVjdGlvbi4KICAgICBJbnRSZWN0
IHJlZmxlY3RlZFJlY3QoY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgIEZsb2F0UmVjdCByZWZs
ZWN0ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGxh
eW91dCgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2lu
dCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBGbG9hdFBvaW50
Jik7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJ
bnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmlydHVh
bCB2b2lkIGRlc3Ryb3koKTsKIAotICAgIHZpcnR1YWwgaW50IG1pblByZWZlcnJlZExvZ2ljYWxX
aWR0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IG1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgp
IGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkgY29u
c3Q7CisgICAgdmlydHVhbCBmbG9hdCBtYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSBjb25zdDsK
IAotICAgIGludCBvdmVycmlkZVNpemUoKSBjb25zdDsKLSAgICBpbnQgb3ZlcnJpZGVXaWR0aCgp
IGNvbnN0OwotICAgIGludCBvdmVycmlkZUhlaWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRPdmVycmlkZVNpemUoaW50KTsKKyAgICBmbG9hdCBvdmVycmlkZVNpemUoKSBjb25zdDsK
KyAgICBmbG9hdCBvdmVycmlkZVdpZHRoKCkgY29uc3Q7CisgICAgZmxvYXQgb3ZlcnJpZGVIZWln
aHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3ZlcnJpZGVTaXplKGZsb2F0KTsKIAot
ICAgIHZpcnR1YWwgSW50U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCosIGNv
bnN0IEludFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFNpemUgb2Zmc2V0RnJvbUNv
bnRhaW5lcihSZW5kZXJPYmplY3QqLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAgICAgCi0g
ICAgaW50IGNvbXB1dGVCb3JkZXJCb3hMb2dpY2FsV2lkdGgoaW50IHdpZHRoKSBjb25zdDsKLSAg
ICBpbnQgY29tcHV0ZUJvcmRlckJveExvZ2ljYWxIZWlnaHQoaW50IGhlaWdodCkgY29uc3Q7Ci0g
ICAgaW50IGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKGludCB3aWR0aCkgY29uc3Q7Ci0g
ICAgaW50IGNvbXB1dGVDb250ZW50Qm94TG9naWNhbEhlaWdodChpbnQgaGVpZ2h0KSBjb25zdDsK
KyAgICBmbG9hdCBjb21wdXRlQm9yZGVyQm94TG9naWNhbFdpZHRoKGZsb2F0IHdpZHRoKSBjb25z
dDsKKyAgICBmbG9hdCBjb21wdXRlQm9yZGVyQm94TG9naWNhbEhlaWdodChmbG9hdCBoZWlnaHQp
IGNvbnN0OworICAgIGZsb2F0IGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKGZsb2F0IHdp
ZHRoKSBjb25zdDsKKyAgICBmbG9hdCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxIZWlnaHQoZmxv
YXQgaGVpZ2h0KSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBib3JkZXJGaXRBZGp1c3QoSW50
UmVjdCYpIGNvbnN0IHsgfSAvLyBTaHJpbmsgdGhlIGJveCBpbiB3aGljaCB0aGUgYm9yZGVyIHBh
aW50cyBpZiBib3JkZXItZml0IGlzIHNldC4KKyAgICB2aXJ0dWFsIHZvaWQgYm9yZGVyRml0QWRq
dXN0KEZsb2F0UmVjdCYpIGNvbnN0IHsgfSAvLyBTaHJpbmsgdGhlIGJveCBpbiB3aGljaCB0aGUg
Ym9yZGVyIHBhaW50cyBpZiBib3JkZXItZml0IGlzIHNldC4KIAogICAgIC8vIFJlc29sdmUgYXV0
byBtYXJnaW5zIGluIHRoZSBpbmxpbmUgZGlyZWN0aW9uIG9mIHRoZSBjb250YWluaW5nIGJsb2Nr
IHNvIHRoYXQgb2JqZWN0cyBjYW4gYmUgcHVzaGVkIHRvIHRoZSBzdGFydCwgbWlkZGxlIG9yIGVu
ZAogICAgIC8vIG9mIHRoZSBjb250YWluaW5nIGJsb2NrLgotICAgIHZvaWQgY29tcHV0ZUlubGlu
ZURpcmVjdGlvbk1hcmdpbnMoUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jaywgaW50IGNvbnRh
aW5lcldpZHRoLCBpbnQgY2hpbGRXaWR0aCk7CisgICAgdm9pZCBjb21wdXRlSW5saW5lRGlyZWN0
aW9uTWFyZ2lucyhSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrLCBmbG9hdCBjb250YWluZXJX
aWR0aCwgZmxvYXQgY2hpbGRXaWR0aCk7CiAKICAgICAvLyBVc2VkIHRvIHJlc29sdmUgbWFyZ2lu
cyBpbiB0aGUgY29udGFpbmluZyBibG9jaydzIGJsb2NrLWZsb3cgZGlyZWN0aW9uLgogICAgIHZv
aWQgY29tcHV0ZUJsb2NrRGlyZWN0aW9uTWFyZ2lucyhSZW5kZXJCbG9jayogY29udGFpbmluZ0Js
b2NrKTsKQEAgLTI4MCwxMyArMjkzLDEzIEBACiAgICAgdm9pZCBzZXRJbmxpbmVCb3hXcmFwcGVy
KElubGluZUJveCogYm94V3JhcHBlcikgeyBtX2lubGluZUJveFdyYXBwZXIgPSBib3hXcmFwcGVy
OyB9CiAgICAgdm9pZCBkZWxldGVMaW5lQm94V3JhcHBlcigpOwogCi0gICAgdmlydHVhbCBJbnRS
ZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiBy
ZXBhaW50Q29udGFpbmVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50
KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiwgYm9vbCBm
aXhlZCA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0
Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7CisgICAg
dmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCog
cmVwYWludENvbnRhaW5lciwgRmxvYXRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNlKTsKIAotICAg
IHZpcnR1YWwgdm9pZCByZXBhaW50RHVyaW5nTGF5b3V0SWZNb3ZlZChjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCB2b2lkIHJlcGFpbnREdXJpbmdMYXlvdXRJZk1vdmVkKGNvbnN0IEZsb2F0
UmVjdCYpOwogCi0gICAgdmlydHVhbCBpbnQgY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9y
Q29udGVudCgpIGNvbnN0OwotICAgIGludCBwZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2NrTG9n
aWNhbEhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgY29udGFpbmluZ0Jsb2NrTG9n
aWNhbFdpZHRoRm9yQ29udGVudCgpIGNvbnN0OworICAgIGZsb2F0IHBlcnBlbmRpY3VsYXJDb250
YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0KCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCB2b2lk
IGNvbXB1dGVMb2dpY2FsV2lkdGgoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUxvZ2ljYWxI
ZWlnaHQoKTsKQEAgLTI5Niw0MCArMzA5LDQwIEBACiAgICAgICAgIHJldHVybiBkb2N1bWVudCgp
LT5pblF1aXJrc01vZGUoKSAmJiBzdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkuaXNBdXRvKCkgJiYg
IWlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSAmJiAoaXNSb290KCkgfHwgaXNCb2R5KCkpOwogICAg
IH0KIAotICAgIHZpcnR1YWwgSW50U2l6ZSBpbnRyaW5zaWNTaXplKCkgY29uc3QgeyByZXR1cm4g
SW50U2l6ZSgpOyB9Ci0gICAgaW50IGludHJpbnNpY0xvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBpbnRyaW5zaWNTaXplKCku
d2lkdGgoKSA6IGludHJpbnNpY1NpemUoKS5oZWlnaHQoKTsgfQotICAgIGludCBpbnRyaW5zaWNM
b2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IGludHJpbnNpY1NpemUoKS5oZWlnaHQoKSA6IGludHJpbnNpY1NpemUoKS53aWR0
aCgpOyB9CisgICAgdmlydHVhbCBGbG9hdFNpemUgaW50cmluc2ljU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIEZsb2F0U2l6ZSgpOyB9CisgICAgZmxvYXQgaW50cmluc2ljTG9naWNhbFdpZHRoKCkgY29u
c3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGludHJpbnNp
Y1NpemUoKS53aWR0aCgpIDogaW50cmluc2ljU2l6ZSgpLmhlaWdodCgpOyB9CisgICAgZmxvYXQg
aW50cmluc2ljTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyBpbnRyaW5zaWNTaXplKCkuaGVpZ2h0KCkgOiBpbnRyaW5zaWNT
aXplKCkud2lkdGgoKTsgfQogCiAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIGVsZW1lbnQgc2hy
aW5rcyB0byBpdHMgaW50cmluc2ljIHdpZHRoIChyYXRoZXIgdGhhbiBmaWxsaW5nIHRoZSB3aWR0
aAogICAgIC8vIG9mIGEgY29udGFpbmluZyBibG9jaykuICBIVE1MNCBidXR0b25zLCA8c2VsZWN0
PnMsIDxpbnB1dD5zLCBsZWdlbmRzLCBhbmQgZmxvYXRpbmcvY29tcGFjdCBlbGVtZW50cyBkbyB0
aGlzLgogICAgIGJvb2wgc2l6ZXNUb0ludHJpbnNpY0xvZ2ljYWxXaWR0aChMb2dpY2FsV2lkdGhU
eXBlKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc3RyZXRjaGVzVG9NaW5JbnRyaW5zaWNMb2dp
Y2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgaW50IGNvbXB1dGVMb2dp
Y2FsV2lkdGhVc2luZyhMb2dpY2FsV2lkdGhUeXBlLCBpbnQgYXZhaWxhYmxlTG9naWNhbFdpZHRo
KTsKLSAgICBpbnQgY29tcHV0ZUxvZ2ljYWxIZWlnaHRVc2luZyhjb25zdCBMZW5ndGgmIGhlaWdo
dCk7Ci0gICAgaW50IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKExlbmd0aCB3aWR0
aCkgY29uc3Q7Ci0gICAgaW50IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFJlc3BlY3RpbmdN
aW5NYXhXaWR0aChpbnQgbG9naWNhbFdpZHRoLCBib29sIGluY2x1ZGVNYXhXaWR0aCA9IHRydWUp
IGNvbnN0OwotICAgIGludCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcoTGVuZ3Ro
IGhlaWdodCkgY29uc3Q7Ci0gICAgaW50IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRSZXNw
ZWN0aW5nTWluTWF4SGVpZ2h0KGludCBsb2dpY2FsSGVpZ2h0KSBjb25zdDsKKyAgICBmbG9hdCBj
b21wdXRlTG9naWNhbFdpZHRoVXNpbmcoTG9naWNhbFdpZHRoVHlwZSwgZmxvYXQgYXZhaWxhYmxl
TG9naWNhbFdpZHRoKTsKKyAgICBmbG9hdCBjb21wdXRlTG9naWNhbEhlaWdodFVzaW5nKGNvbnN0
IExlbmd0aCYgaGVpZ2h0KTsKKyAgICBmbG9hdCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGhV
c2luZyhMZW5ndGggd2lkdGgpIGNvbnN0OworICAgIGZsb2F0IGNvbXB1dGVSZXBsYWNlZExvZ2lj
YWxXaWR0aFJlc3BlY3RpbmdNaW5NYXhXaWR0aChmbG9hdCBsb2dpY2FsV2lkdGgsIGJvb2wgaW5j
bHVkZU1heFdpZHRoID0gdHJ1ZSkgY29uc3Q7CisgICAgZmxvYXQgY29tcHV0ZVJlcGxhY2VkTG9n
aWNhbEhlaWdodFVzaW5nKExlbmd0aCBoZWlnaHQpIGNvbnN0OworICAgIGZsb2F0IGNvbXB1dGVS
ZXBsYWNlZExvZ2ljYWxIZWlnaHRSZXNwZWN0aW5nTWluTWF4SGVpZ2h0KGZsb2F0IGxvZ2ljYWxI
ZWlnaHQpIGNvbnN0OwogCi0gICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdp
ZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRoID0gdHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQg
Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQg
Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRoID0gdHJ1ZSkg
Y29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkg
Y29uc3Q7CiAKLSAgICBpbnQgY29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0KGNvbnN0IExl
bmd0aCYgaGVpZ2h0KTsKKyAgICBmbG9hdCBjb21wdXRlUGVyY2VudGFnZUxvZ2ljYWxIZWlnaHQo
Y29uc3QgTGVuZ3RoJiBoZWlnaHQpOwogCiAgICAgLy8gQmxvY2sgZmxvd3Mgc3ViY2xhc3MgYXZh
aWxhYmxlV2lkdGggdG8gaGFuZGxlIG11bHRpIGNvbHVtbiBsYXlvdXQgKHNocmlua2luZyB0aGUg
d2lkdGggYXZhaWxhYmxlIHRvIGNoaWxkcmVuIHdoZW4gbGF5aW5nIG91dC4pCi0gICAgdmlydHVh
bCBpbnQgYXZhaWxhYmxlTG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gY29udGVudExvZ2lj
YWxXaWR0aCgpOyB9Ci0gICAgaW50IGF2YWlsYWJsZUxvZ2ljYWxIZWlnaHQoKSBjb25zdDsKLSAg
ICBpbnQgYXZhaWxhYmxlTG9naWNhbEhlaWdodFVzaW5nKGNvbnN0IExlbmd0aCYpIGNvbnN0Owor
ICAgIHZpcnR1YWwgZmxvYXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4g
Y29udGVudExvZ2ljYWxXaWR0aCgpOyB9CisgICAgZmxvYXQgYXZhaWxhYmxlTG9naWNhbEhlaWdo
dCgpIGNvbnN0OworICAgIGZsb2F0IGF2YWlsYWJsZUxvZ2ljYWxIZWlnaHRVc2luZyhjb25zdCBM
ZW5ndGgmKSBjb25zdDsKICAgICAKICAgICAvLyBUaGVyZSBhcmUgYSBmZXcgY2FzZXMgd2hlcmUg
d2UgbmVlZCB0byByZWZlciBzcGVjaWZpY2FsbHkgdG8gdGhlIGF2YWlsYWJsZSBwaHlzaWNhbCB3
aWR0aCBhbmQgYXZhaWxhYmxlIHBoeXNpY2FsIGhlaWdodC4KICAgICAvLyBSZWxhdGl2ZSBwb3Np
dGlvbmluZyBpcyBvbmUgb2YgdGhvc2UgY2FzZXMsIHNpbmNlIGxlZnQvdG9wIG9mZnNldHMgYXJl
IHBoeXNpY2FsLgotICAgIGludCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxl
KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBhdmFpbGFibGVMb2dpY2FsV2lkdGgoKSA6
IGF2YWlsYWJsZUxvZ2ljYWxIZWlnaHQoKTsgfQotICAgIGludCBhdmFpbGFibGVIZWlnaHQoKSBj
b25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gYXZhaWxh
YmxlTG9naWNhbEhlaWdodCgpIDogYXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7IH0KKyAgICBmbG9h
dCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBhdmFpbGFibGVMb2dpY2FsV2lkdGgoKSA6IGF2YWlsYWJsZUxvZ2ljYWxI
ZWlnaHQoKTsgfQorICAgIGZsb2F0IGF2YWlsYWJsZUhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIHN0
eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBhdmFpbGFibGVMb2dpY2FsSGVpZ2h0
KCkgOiBhdmFpbGFibGVMb2dpY2FsV2lkdGgoKTsgfQogCi0gICAgdmlydHVhbCBpbnQgdmVydGlj
YWxTY3JvbGxiYXJXaWR0aCgpIGNvbnN0OwotICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0KCkgY29uc3Q7Ci0gICAgaW50IHNjcm9sbGJhckxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJl
dHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gaG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCgpIDogdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOyB9CisgICAgdmlydHVhbCBm
bG9hdCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29uc3Q7CisgICAgZmxvYXQgaG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodCgpIGNvbnN0OworICAgIGZsb2F0IHNjcm9sbGJhckxvZ2ljYWxIZWln
aHQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8g
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIDogdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOyB9
CiAgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFy
aXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSwgTm9kZSoqIHN0b3BOb2RlID0gMCk7CiAgICAgdmly
dHVhbCBib29sIGxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKICAg
ICBib29sIGNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpIGNvbnN0OwpAQCAtMzQ1
LDE2ICszNTgsMTYgQEAKICAgICAKICAgICB2aXJ0dWFsIEludFJlY3QgbG9jYWxDYXJldFJlY3Qo
SW5saW5lQm94KiwgaW50IGNhcmV0T2Zmc2V0LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9
IDApOwogCi0gICAgdmlydHVhbCBJbnRSZWN0IG92ZXJmbG93Q2xpcFJlY3QoY29uc3QgSW50UG9p
bnQmIGxvY2F0aW9uLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJs
YXlTY3JvbGxiYXJTaXplKTsKLSAgICBJbnRSZWN0IGNsaXBSZWN0KGNvbnN0IEludFBvaW50JiBs
b2NhdGlvbik7CisgICAgdmlydHVhbCBJbnRSZWN0IG92ZXJmbG93Q2xpcFJlY3QoY29uc3QgRmxv
YXRQb2ludCYgbG9jYXRpb24sIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3Jl
T3ZlcmxheVNjcm9sbGJhclNpemUpOworICAgIEludFJlY3QgY2xpcFJlY3QoY29uc3QgRmxvYXRQ
b2ludCYgbG9jYXRpb24pOwogICAgIHZpcnR1YWwgYm9vbCBoYXNDb250cm9sQ2xpcCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBJbnRSZWN0IGNvbnRyb2xDbGlwUmVjdChj
b25zdCBJbnRQb2ludCYpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoKTsgfQotICAgIGJvb2wgcHVz
aENvbnRlbnRzQ2xpcChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQpOwotICAgIHZvaWQgcG9wQ29udGVudHNDbGlwKFBhaW50SW5mbyYsIFBhaW50UGhhc2Ugb3Jp
Z2luYWxQaGFzZSwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsKKyAgICB2aXJ0
dWFsIEludFJlY3QgY29udHJvbENsaXBSZWN0KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCB7IHJl
dHVybiBJbnRSZWN0KCk7IH0KKyAgICBib29sIHB1c2hDb250ZW50c0NsaXAoUGFpbnRJbmZvJiwg
Y29uc3QgRmxvYXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOworICAgIHZvaWQgcG9wQ29udGVu
dHNDbGlwKFBhaW50SW5mbyYsIFBhaW50UGhhc2Ugb3JpZ2luYWxQaGFzZSwgY29uc3QgRmxvYXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOwogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50T2JqZWN0
KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50JikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQot
ICAgIHZpcnR1YWwgdm9pZCBwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGNvbnN0IElu
dFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50TWFzayhQYWludEluZm8mLCBjb25zdCBJ
bnRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludE9iamVjdChQYWludEluZm8mLCBjb25z
dCBGbG9hdFBvaW50JikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRNYXNrKFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgSW50
UmVjdCogPSAwKTsKIAogICAgIC8vIENhbGxlZCB3aGVuIGEgcG9zaXRpb25lZCBvYmplY3QgbW92
ZXMgYnV0IGRvZXNuJ3QgbmVjZXNzYXJpbHkgY2hhbmdlIHNpemUuICBBIHNpbXBsaWZpZWQgbGF5
b3V0IGlzIGF0dGVtcHRlZApAQCAtMzc4LDggKzM5MSw4IEBACiAgICAgCiAgICAgUmVuZGVyTGF5
ZXIqIGVuY2xvc2luZ0Zsb2F0UGFpbnRpbmdMYXllcigpIGNvbnN0OwogICAgIAotICAgIHZpcnR1
YWwgaW50IGZpcnN0TGluZUJveEJhc2VsaW5lKCkgY29uc3QgeyByZXR1cm4gLTE7IH0KLSAgICB2
aXJ0dWFsIGludCBsYXN0TGluZUJveEJhc2VsaW5lKCkgY29uc3QgeyByZXR1cm4gLTE7IH0KKyAg
ICB2aXJ0dWFsIGZsb2F0IGZpcnN0TGluZUJveEJhc2VsaW5lKCkgY29uc3QgeyByZXR1cm4gLTE7
IH0KKyAgICB2aXJ0dWFsIGZsb2F0IGxhc3RMaW5lQm94QmFzZWxpbmUoKSBjb25zdCB7IHJldHVy
biAtMTsgfQogCiAgICAgYm9vbCBzaHJpbmtUb0F2b2lkRmxvYXRzKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGF2b2lkc0Zsb2F0cygpIGNvbnN0OwpAQCAtMzg4LDI0ICs0MDEsMjUgQEAKIAog
ICAgIGJvb2wgaXNXcml0aW5nTW9kZVJvb3QoKSBjb25zdCB7IHJldHVybiAhcGFyZW50KCkgfHwg
cGFyZW50KCktPnN0eWxlKCktPndyaXRpbmdNb2RlKCkgIT0gc3R5bGUoKS0+d3JpdGluZ01vZGUo
KTsgfQogICAgIAotICAgIHZpcnR1YWwgaW50IGxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExp
bmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25PbkNvbnRhaW5pbmdM
aW5lKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGlu
ZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0g
UG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IGxpbmVI
ZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2Rl
ID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IGJh
c2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlv
bk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0
OwogCiAgICAgZW51bSBGbGlwcGluZ0FkanVzdG1lbnQgeyBDaGlsZFRvUGFyZW50RmxpcHBpbmdB
ZGp1c3RtZW50LCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50IH07CiAgICAgSW50UG9p
bnQgZmxpcEZvcldyaXRpbmdNb2RlKGNvbnN0IFJlbmRlckJveCogY2hpbGQsIGNvbnN0IEludFBv
aW50JiwgRmxpcHBpbmdBZGp1c3RtZW50KSBjb25zdDsKKyAgICBGbG9hdFBvaW50IGZsaXBGb3JX
cml0aW5nTW9kZShjb25zdCBSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBGbG9hdFBvaW50JiwgRmxp
cHBpbmdBZGp1c3RtZW50KSBjb25zdDsKICAgICBpbnQgZmxpcEZvcldyaXRpbmdNb2RlKGludCBw
b3NpdGlvbikgY29uc3Q7IC8vIFRoZSBvZmZzZXQgaXMgaW4gdGhlIGJsb2NrIGRpcmVjdGlvbiAo
eSBmb3IgaG9yaXpvbnRhbCB3cml0aW5nIG1vZGVzLCB4IGZvciB2ZXJ0aWNhbCB3cml0aW5nIG1v
ZGVzKS4KICAgICBJbnRQb2ludCBmbGlwRm9yV3JpdGluZ01vZGUoY29uc3QgSW50UG9pbnQmKSBj
b25zdDsKLSAgICBJbnRQb2ludCBmbGlwRm9yV3JpdGluZ01vZGVJbmNsdWRpbmdDb2x1bW5zKGNv
bnN0IEludFBvaW50JikgY29uc3Q7CisgICAgRmxvYXRQb2ludCBmbGlwRm9yV3JpdGluZ01vZGVJ
bmNsdWRpbmdDb2x1bW5zKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICBJbnRTaXplIGZs
aXBGb3JXcml0aW5nTW9kZShjb25zdCBJbnRTaXplJikgY29uc3Q7CiAgICAgdm9pZCBmbGlwRm9y
V3JpdGluZ01vZGUoSW50UmVjdCYpIGNvbnN0OwogICAgIEZsb2F0UG9pbnQgZmxpcEZvcldyaXRp
bmdNb2RlKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGZsaXBGb3JXcml0aW5n
TW9kZShGbG9hdFJlY3QmKSBjb25zdDsKLSAgICBJbnRTaXplIGxvY2F0aW9uT2Zmc2V0SW5jbHVk
aW5nRmxpcHBpbmcoKSBjb25zdDsKKyAgICBGbG9hdFNpemUgbG9jYXRpb25PZmZzZXRJbmNsdWRp
bmdGbGlwcGluZygpIGNvbnN0OwogCiAgICAgSW50UmVjdCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3dS
ZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqKSBjb25zdDsKICAgICBJbnRSZWN0IHZpc3Vh
bE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgSW50
UmVjdCBsb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oUmVuZGVyU3R5bGUq
KSBjb25zdDsKLSAgICBJbnRSZWN0IGxheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJl
bmRlclN0eWxlKikgY29uc3Q7CisgICAgRmxvYXRSZWN0IGxvZ2ljYWxMYXlvdXRPdmVyZmxvd1Jl
Y3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIEZsb2F0UmVjdCBsYXlv
dXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihSZW5kZXJTdHlsZSopIGNvbnN0OwogCiAgICAg
UmVuZGVyT3ZlcmZsb3cqIGhhc1JlbmRlck92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVy
Zmxvdy5nZXQoKTsgfQogCkBAIC00MTQsMTMgKzQyOCwxMyBAQAogICAgIHZpcnR1YWwgdm9pZCBz
dHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHls
ZSk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUJveE1vZGVsSW5mb0Zyb21TdHlsZSgpOwogCi0g
ICAgdm9pZCBwYWludEZpbGxMYXllcihjb25zdCBQYWludEluZm8mLCBjb25zdCBDb2xvciYsIGNv
bnN0IEZpbGxMYXllciosIGNvbnN0IEludFJlY3QmLCBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2Us
IENvbXBvc2l0ZU9wZXJhdG9yLCBSZW5kZXJPYmplY3QqIGJhY2tncm91bmRPYmplY3QpOwotICAg
IHZvaWQgcGFpbnRGaWxsTGF5ZXJzKGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IENvbG9yJiwgY29u
c3QgRmlsbExheWVyKiwgY29uc3QgSW50UmVjdCYsIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSA9
IEJhY2tncm91bmRCbGVlZE5vbmUsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNl
T3ZlciwgUmVuZGVyT2JqZWN0KiBiYWNrZ3JvdW5kT2JqZWN0ID0gMCk7CisgICAgdm9pZCBwYWlu
dEZpbGxMYXllcihjb25zdCBQYWludEluZm8mLCBjb25zdCBDb2xvciYsIGNvbnN0IEZpbGxMYXll
ciosIGNvbnN0IEZsb2F0UmVjdCYsIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSwgQ29tcG9zaXRl
T3BlcmF0b3IsIFJlbmRlck9iamVjdCogYmFja2dyb3VuZE9iamVjdCk7CisgICAgdm9pZCBwYWlu
dEZpbGxMYXllcnMoY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgQ29sb3ImLCBjb25zdCBGaWxsTGF5
ZXIqLCBjb25zdCBGbG9hdFJlY3QmLCBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UgPSBCYWNrZ3Jv
dW5kQmxlZWROb25lLCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIsIFJl
bmRlck9iamVjdCogYmFja2dyb3VuZE9iamVjdCA9IDApOwogCi0gICAgdm9pZCBwYWludE1hc2tJ
bWFnZXMoY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgcGFpbnRN
YXNrSW1hZ2VzKGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpOwogCiAjaWYgUExB
VEZPUk0oTUFDKQotICAgIHZvaWQgcGFpbnRDdXN0b21IaWdobGlnaHQoY29uc3QgSW50UG9pbnQm
LCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgYmVoaW5kVGV4dCk7CisgICAgdm9pZCBw
YWludEN1c3RvbUhpZ2hsaWdodChjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgQXRvbWljU3RyaW5n
JiB0eXBlLCBib29sIGJlaGluZFRleHQpOwogI2VuZGlmCiAKICAgICB2b2lkIGNvbXB1dGVQb3Np
dGlvbmVkTG9naWNhbFdpZHRoKCk7CkBAIC00NDQsMTMgKzQ1OCwxMyBAQAogCiAgICAgdm9pZCBj
b21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHQoKTsKICAgICB2b2lkIGNvbXB1dGVQb3NpdGlv
bmVkTG9naWNhbFdpZHRoVXNpbmcoTGVuZ3RoIGxvZ2ljYWxXaWR0aCwgY29uc3QgUmVuZGVyQm94
TW9kZWxPYmplY3QqIGNvbnRhaW5lckJsb2NrLCBUZXh0RGlyZWN0aW9uIGNvbnRhaW5lckRpcmVj
dGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNv
bnRhaW5lckxvZ2ljYWxXaWR0aCwgaW50IGJvcmRlcnNQbHVzUGFkZGluZywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgY29udGFpbmVyTG9naWNhbFdp
ZHRoLCBmbG9hdCBib3JkZXJzUGx1c1BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIExlbmd0aCBsb2dpY2FsTGVmdCwgTGVuZ3RoIGxvZ2ljYWxSaWdo
dCwgTGVuZ3RoIG1hcmdpbkxvZ2ljYWxMZWZ0LCBMZW5ndGggbWFyZ2luTG9naWNhbFJpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGxvZ2ljYWxX
aWR0aFZhbHVlLCBpbnQmIG1hcmdpbkxvZ2ljYWxMZWZ0VmFsdWUsIGludCYgbWFyZ2luTG9naWNh
bFJpZ2h0VmFsdWUsIGludCYgbG9naWNhbExlZnRQb3MpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCYgbG9naWNhbFdpZHRoVmFsdWUsIGZsb2F0JiBt
YXJnaW5Mb2dpY2FsTGVmdFZhbHVlLCBmbG9hdCYgbWFyZ2luTG9naWNhbFJpZ2h0VmFsdWUsIGZs
b2F0JiBsb2dpY2FsTGVmdFBvcyk7CiAgICAgdm9pZCBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxI
ZWlnaHRVc2luZyhMZW5ndGggbG9naWNhbEhlaWdodCwgY29uc3QgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIGNvbnRhaW5lckJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQsIGludCBib3JkZXJzUGx1c1BhZGRp
bmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBj
b250YWluZXJMb2dpY2FsSGVpZ2h0LCBmbG9hdCBib3JkZXJzUGx1c1BhZGRpbmcsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGggbG9naWNhbFRvcCwg
TGVuZ3RoIGxvZ2ljYWxCb3R0b20sIExlbmd0aCBtYXJnaW5Mb2dpY2FsVG9wLCBMZW5ndGggbWFy
Z2luTG9naWNhbEJvdHRvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCYgbG9naWNhbEhlaWdodFZhbHVlLCBpbnQmIG1hcmdpbkxvZ2ljYWxUb3BWYWx1
ZSwgaW50JiBtYXJnaW5Mb2dpY2FsQm90dG9tVmFsdWUsIGludCYgbG9naWNhbFRvcFBvcyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCYgbG9naWNh
bEhlaWdodFZhbHVlLCBmbG9hdCYgbWFyZ2luTG9naWNhbFRvcFZhbHVlLCBmbG9hdCYgbWFyZ2lu
TG9naWNhbEJvdHRvbVZhbHVlLCBmbG9hdCYgbG9naWNhbFRvcFBvcyk7CiAKICAgICB2b2lkIGNv
bXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodFJlcGxhY2VkKCk7CiAgICAgdm9pZCBjb21wdXRl
UG9zaXRpb25lZExvZ2ljYWxXaWR0aFJlcGxhY2VkKCk7CkBAIC00NjQsMTkgKzQ3OCwxOSBAQAog
CiBwcml2YXRlOgogICAgIC8vIFRoZSB3aWR0aC9oZWlnaHQgb2YgdGhlIGNvbnRlbnRzICsgYm9y
ZGVycyArIHBhZGRpbmcuICBUaGUgeC95IGxvY2F0aW9uIGlzIHJlbGF0aXZlIHRvIG91ciBjb250
YWluZXIgKHdoaWNoIGlzIG5vdCBhbHdheXMgb3VyIHBhcmVudCkuCi0gICAgSW50UmVjdCBtX2Zy
YW1lUmVjdDsKKyAgICBGbG9hdFJlY3QgbV9mcmFtZVJlY3Q7CiAKIHByb3RlY3RlZDoKLSAgICBp
bnQgbV9tYXJnaW5MZWZ0OwotICAgIGludCBtX21hcmdpblJpZ2h0OwotICAgIGludCBtX21hcmdp
blRvcDsKLSAgICBpbnQgbV9tYXJnaW5Cb3R0b207CisgICAgZmxvYXQgbV9tYXJnaW5MZWZ0Owor
ICAgIGZsb2F0IG1fbWFyZ2luUmlnaHQ7CisgICAgZmxvYXQgbV9tYXJnaW5Ub3A7CisgICAgZmxv
YXQgbV9tYXJnaW5Cb3R0b207CiAKICAgICAvLyBUaGUgcHJlZmVycmVkIGxvZ2ljYWwgd2lkdGgg
b2YgdGhlIGVsZW1lbnQgaWYgaXQgd2VyZSB0byBicmVhayBpdHMgbGluZXMgYXQgZXZlcnkgcG9z
c2libGUgb3Bwb3J0dW5pdHkuCi0gICAgaW50IG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoOwor
ICAgIGZsb2F0IG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoOwogICAgIAogICAgIC8vIFRoZSBw
cmVmZXJyZWQgbG9naWNhbCB3aWR0aCBvZiB0aGUgZWxlbWVudCBpZiBpdCBuZXZlciBicmVha3Mg
YW55IGxpbmVzIGF0IGFsbC4KLSAgICBpbnQgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGg7Cisg
ICAgZmxvYXQgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGg7CiAKICAgICAvLyBGb3IgaW5saW5l
IHJlcGxhY2VkIGVsZW1lbnRzLCB0aGUgaW5saW5lIGJveCB0aGF0IG93bnMgdXMuCiAgICAgSW5s
aW5lQm94KiBtX2lubGluZUJveFdyYXBwZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySFRNTENhbnZhcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsMTIgKzU0LDEyIEBACiAgICAgcmV0dXJuIGNhbnZhcyAmJiBjYW52YXMtPnJlbmRlcmluZ0Nv
bnRleHQoKSAmJiBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKS0+aXNBY2NlbGVyYXRlZCgpOwog
fQogCi12b2lkIFJlbmRlckhUTUxDYW52YXM6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKK3ZvaWQgUmVuZGVySFRNTENhbnZh
czo6cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQb2ludCYg
cGFpbnRPZmZzZXQpCiB7Ci0gICAgSW50UmVjdCByZWN0ID0gY29udGVudEJveFJlY3QoKTsKKyAg
ICBGbG9hdFJlY3QgcmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7CiAgICAgcmVjdC5tb3ZlQnkocGFp
bnRPZmZzZXQpOwogICAgIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gc3R5bGUoKS0+aW1hZ2VS
ZW5kZXJpbmcoKSA9PSBJbWFnZVJlbmRlcmluZ09wdGltaXplQ29udHJhc3Q7Ci0gICAgc3RhdGlj
X2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihub2RlKCkpLT5wYWludChwYWludEluZm8uY29udGV4
dCwgcmVjdCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKKyAgICBzdGF0aWNfY2FzdDxIVE1MQ2FudmFz
RWxlbWVudCo+KG5vZGUoKSktPnBhaW50KHBhaW50SW5mby5jb250ZXh0LCBlbmNsb3NpbmdJbnRS
ZWN0KHJlY3QpLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogfQogCiB2b2lkIFJlbmRlckhUTUxDYW52
YXM6OmNhbnZhc1NpemVDaGFuZ2VkKCkKQEAgLTc4LDcgKzc4LDcgQEAKICAgICBpZiAoIXByZWZl
cnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpKQogICAgICAgICBzZXRQcmVmZXJyZWRMb2dpY2FsV2lk
dGhzRGlydHkodHJ1ZSk7CiAKLSAgICBJbnRTaXplIG9sZFNpemUgPSBzaXplKCk7CisgICAgRmxv
YXRTaXplIG9sZFNpemUgPSBzaXplKCk7CiAgICAgY29tcHV0ZUxvZ2ljYWxXaWR0aCgpOwogICAg
IGNvbXB1dGVMb2dpY2FsSGVpZ2h0KCk7CiAgICAgaWYgKG9sZFNpemUgPT0gc2l6ZSgpKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcAkocmV2
aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVl
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAKICAgICByZXR1cm4gZnVsbHNj
cmVlblN0eWxlLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBSZW5kZXJGdWxsU2NyZWVuOjpjcmVhdGVQ
bGFjZWhvbGRlcihQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSwgY29uc3QgSW50UmVjdCYg
ZnJhbWVSZWN0KQordm9pZCBSZW5kZXJGdWxsU2NyZWVuOjpjcmVhdGVQbGFjZWhvbGRlcihQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSwgY29uc3QgRmxvYXRSZWN0JiBmcmFtZVJlY3QpCiB7
CiAgICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzQXV0bygpKQogICAgICAgICBzdHlsZS0+c2V0V2lk
dGgoTGVuZ3RoKGZyYW1lUmVjdC53aWR0aCgpLCBGaXhlZCkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCShyZXZpc2lvbiA4ODQ5NikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExOCw3ICsxMTgsNyBAQAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJGcmFtZVNldDo6cGFp
bnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKK3Zv
aWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9h
dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50
UGhhc2VGb3JlZ3JvdW5kKQogICAgICAgICByZXR1cm47CkBAIC0xMjcsNyArMTI3LDcgQEAKICAg
ICBpZiAoIWNoaWxkKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRQb2ludCBhZGp1c3RlZFBh
aW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOworICAgIEZsb2F0UG9pbnQgYWRq
dXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKIAogICAgIGludCBy
b3dzID0gZnJhbWVTZXQoKS0+dG90YWxSb3dzKCk7CiAgICAgaW50IGNvbHMgPSBmcmFtZVNldCgp
LT50b3RhbENvbHMoKTsKQEAgLTQ2MSw3ICs0NjEsNyBAQAogICAgIEFTU0VSVChuZWVkc0xheW91
dCgpKTsKIAogICAgIGJvb2wgZG9GdWxsUmVwYWludCA9IHNlbGZOZWVkc0xheW91dCgpICYmIGNo
ZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpOwotICAgIEludFJlY3Qgb2xkQm91bmRzOworICAg
IEZsb2F0UmVjdCBvbGRCb3VuZHM7CiAgICAgaWYgKGRvRnVsbFJlcGFpbnQpCiAgICAgICAgIG9s
ZEJvdW5kcyA9IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwogCkBAIC00OTIsMTAgKzQ5
MiwxMCBAQAogICAgIGNvbXB1dGVFZGdlSW5mbygpOwogCiAgICAgaWYgKGRvRnVsbFJlcGFpbnQp
IHsKLSAgICAgICAgdmlldygpLT5yZXBhaW50Vmlld1JlY3RhbmdsZShvbGRCb3VuZHMpOwotICAg
ICAgICBJbnRSZWN0IG5ld0JvdW5kcyA9IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwor
ICAgICAgICB2aWV3KCktPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKGVuY2xvc2luZ0ludFJlY3Qob2xk
Qm91bmRzKSk7CisgICAgICAgIEZsb2F0UmVjdCBuZXdCb3VuZHMgPSBhYnNvbHV0ZUNsaXBwZWRP
dmVyZmxvd1JlY3QoKTsKICAgICAgICAgaWYgKG5ld0JvdW5kcyAhPSBvbGRCb3VuZHMpCi0gICAg
ICAgICAgICB2aWV3KCktPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKG5ld0JvdW5kcyk7CisgICAgICAg
ICAgICB2aWV3KCktPnJlcGFpbnRWaWV3UmVjdGFuZ2xlKGVuY2xvc2luZ0ludFJlY3QobmV3Qm91
bmRzKSk7CiAgICAgfQogCiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwpAQCAtNTYzLDcgKzU2
Myw3IEBACiAgICAgICAgIGludCBoZWlnaHQgPSBtX3Jvd3MubV9zaXplc1tyXTsKIAogICAgICAg
ICBmb3IgKGludCBjID0gMDsgYyA8IGNvbHM7IGMrKykgewotICAgICAgICAgICAgSW50UmVjdCBv
bGRGcmFtZVJlY3QgPSBjaGlsZC0+ZnJhbWVSZWN0KCk7CisgICAgICAgICAgICBGbG9hdFJlY3Qg
b2xkRnJhbWVSZWN0ID0gY2hpbGQtPmZyYW1lUmVjdCgpOwogCiAgICAgICAgICAgICBpbnQgd2lk
dGggPSBtX2NvbHMubV9zaXplc1tjXTsKIApAQCAtNjExLDcgKzYxMSw3IEBACiAgICAgICAgIHhQ
b3MgPSAwOwogICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IGNvbHM7IGMrKykgewogICAgICAg
ICAgICAgLy8gZW5zdXJlIHRoZSByb3dzIGFuZCBjb2x1bW5zIGFyZSBmaWxsZWQKLSAgICAgICAg
ICAgIEludFJlY3Qgb2xkUmVjdCA9IGNoaWxkLT5mcmFtZVJlY3QoKTsKKyAgICAgICAgICAgIEZs
b2F0UmVjdCBvbGRSZWN0ID0gY2hpbGQtPmZyYW1lUmVjdCgpOwogCiAgICAgICAgICAgICBjaGls
ZC0+c2V0TG9jYXRpb24oSW50UG9pbnQoeFBvcywgeVBvcykpOwogICAgICAgICAgICAgY2hpbGQt
PnNldEhlaWdodChtX3Jvd3MubV9zaXplc1tyXSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQlIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQlIuaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQlIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQAogCiAgICAgdmlydHVh
bCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckJSIjsgfQog
IAotICAgIHZpcnR1YWwgSW50UmVjdCBzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogLypyZXBhaW50Q29udGFpbmVyKi8sIGJvb2wgLypjbGlwVG9WaXNpYmxlQ29u
dGVudCovKSB7IHJldHVybiBJbnRSZWN0KCk7IH0KKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzZWxl
Y3Rpb25SZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogLypyZXBhaW50Q29udGFp
bmVyKi8sIGJvb2wgLypjbGlwVG9WaXNpYmxlQ29udGVudCovKSB7IHJldHVybiBJbnRSZWN0KCk7
IH0KIAogICAgIHZpcnR1YWwgZmxvYXQgd2lkdGgodW5zaWduZWQgLypmcm9tKi8sIHVuc2lnbmVk
IC8qbGVuKi8sIGNvbnN0IEZvbnQmLCBmbG9hdCAvKnhQb3MqLywgSGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KiA9IDAgLypmYWxsYmFja0ZvbnRzKi8gLCBHbHlwaE92ZXJmbG93KiA9IDAp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoKHVuc2lnbmVkIC8q
ZnJvbSovLCB1bnNpZ25lZCAvKmxlbiovLCBmbG9hdCAvKnhwb3MqLywgYm9vbCA9IGZhbHNlIC8q
Zmlyc3RMaW5lKi8sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogPSAwIC8qZmFsbGJh
Y2tGb250cyovLCBHbHlwaE92ZXJmbG93KiA9IDApIGNvbnN0IHsgcmV0dXJuIDA7IH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDg4NDk2KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MjgsNyArNTI4LDcgQEAKICAgICB2b2lkIHVwZGF0ZUZpbGxJbWFnZXMoY29uc3QgRmls
bExheWVyKiwgY29uc3QgRmlsbExheWVyKik7CiAgICAgdm9pZCB1cGRhdGVJbWFnZShTdHlsZUlt
YWdlKiwgU3R5bGVJbWFnZSopOwogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYs
IGNvbnN0IEludFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNv
bnN0IEZsb2F0UG9pbnQmKTsKIAogICAgIC8vIFJlY3Vyc2l2ZSBmdW5jdGlvbiB0aGF0IGNvbXB1
dGVzIHRoZSBzaXplIGFuZCBwb3NpdGlvbiBvZiB0aGlzIG9iamVjdCBhbmQgYWxsIGl0cyBkZXNj
ZW5kYW50cy4KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CkBAIC01ODYsMTEgKzU4NiwxMSBA
QAogCiAgICAgLy8gUmV0dXJuIHRoZSBvZmZzZXQgZnJvbSB0aGUgY29udGFpbmVyKCkgcmVuZGVy
ZXIgKGV4Y2x1ZGluZyB0cmFuc2Zvcm1zKS4gSW4gbXVsdGktY29sdW1uIGxheW91dCwKICAgICAv
LyBkaWZmZXJlbnQgb2Zmc2V0cyBhcHBseSBhdCBkaWZmZXJlbnQgcG9pbnRzLCBzbyByZXR1cm4g
dGhlIG9mZnNldCB0aGF0IGFwcGxpZXMgdG8gdGhlIGdpdmVuIHBvaW50LgotICAgIHZpcnR1YWwg
SW50U2l6ZSBvZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCosIGNvbnN0IEludFBvaW50
JikgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFNpemUgb2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5k
ZXJPYmplY3QqLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAgICAgLy8gUmV0dXJuIHRoZSBv
ZmZzZXQgZnJvbSBhbiBvYmplY3QgdXAgdGhlIGNvbnRhaW5lcigpIGNoYWluLiBBc3NlcnRzIHRo
YXQgbm9uZSBvZiB0aGUgaW50ZXJtZWRpYXRlIG9iamVjdHMgaGF2ZSB0cmFuc2Zvcm1zLgotICAg
IEludFNpemUgb2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKFJlbmRlck9iamVjdCopIGNvbnN0
OworICAgIEZsb2F0U2l6ZSBvZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIoUmVuZGVyT2JqZWN0
KikgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPElu
dFJlY3Q+JiwgY29uc3QgSW50UG9pbnQmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVS
ZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBGbG9hdFBvaW50JikgeyB9CiAgICAgLy8gRklY
TUU6IHVzZVRyYW5zZm9ybXMgc2hvdWxkIGdvIGF3YXkgZXZlbnR1YWxseQogICAgIEludFJlY3Qg
YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoYm9vbCB1c2VUcmFuc2Zvcm1zID0gZmFsc2UpOwogCkBA
IC02MDIsOCArNjAyLDggQEAKICAgICAvLyB0aGUgcmVjdCB0aGF0IHdpbGwgYmUgcGFpbnRlZCBp
ZiB0aGlzIG9iamVjdCBpcyBwYXNzZWQgYXMgdGhlIHBhaW50aW5nUm9vdAogICAgIEludFJlY3Qg
cGFpbnRpbmdSb290UmVjdChJbnRSZWN0JiB0b3BMZXZlbFJlY3QpOwogCi0gICAgdmlydHVhbCBp
bnQgbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZp
cnR1YWwgaW50IG1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
KyAgICB2aXJ0dWFsIGZsb2F0IG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGZsb2F0IG1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3R5bGUuZ2V0KCk7IH0KICAgICBSZW5kZXJTdHlsZSogZmlyc3RMaW5lU3R5bGUoKSBj
b25zdCB7IHJldHVybiBkb2N1bWVudCgpLT51c2VzRmlyc3RMaW5lUnVsZXMoKSA/IGZpcnN0TGlu
ZVN0eWxlU2xvd0Nhc2UoKSA6IHN0eWxlKCk7IH0KQEAgLTYyNiw3ICs2MjYsNyBAQAogICAgIFJl
bmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJGb3JSZXBhaW50KCkgY29uc3Q7CiAgICAgLy8g
QWN0dWFsbHkgZG8gdGhlIHJlcGFpbnQgb2YgcmVjdCByIGZvciB0aGlzIG9iamVjdCB3aGljaCBo
YXMgYmVlbiBjb21wdXRlZCBpbiB0aGUgY29vcmRpbmF0ZSBzcGFjZQogICAgIC8vIG9mIHJlcGFp
bnRDb250YWluZXIuIElmIHJlcGFpbnRDb250YWluZXIgaXMgMCwgcmVwYWludCB2aWEgdGhlIHZp
ZXcuCi0gICAgdm9pZCByZXBhaW50VXNpbmdDb250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIsIGNvbnN0IEludFJlY3QmIHIsIGJvb2wgaW1tZWRpYXRlID0gZmFs
c2UpOworICAgIHZvaWQgcmVwYWludFVzaW5nQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0
KiByZXBhaW50Q29udGFpbmVyLCBjb25zdCBGbG9hdFJlY3QmIHIsIGJvb2wgaW1tZWRpYXRlID0g
ZmFsc2UpOwogICAgIAogICAgIC8vIFJlcGFpbnQgdGhlIGVudGlyZSBvYmplY3QuICBDYWxsZWQg
d2hlbiwgZS5nLiwgdGhlIGNvbG9yIG9mIGEgYm9yZGVyIGNoYW5nZXMsIG9yIHdoZW4gYSBib3Jk
ZXIKICAgICAvLyBzdHlsZSBjaGFuZ2VzLgpAQCAtNjM2LDEwICs2MzYsMTAgQEAKICAgICB2b2lk
IHJlcGFpbnRSZWN0YW5nbGUoY29uc3QgSW50UmVjdCYsIGJvb2wgaW1tZWRpYXRlID0gZmFsc2Up
OwogCiAgICAgLy8gUmVwYWludCBvbmx5IGlmIG91ciBvbGQgYm91bmRzIGFuZCBuZXcgYm91bmRz
IGFyZSBkaWZmZXJlbnQuIFRoZSBjYWxsZXIgbWF5IHBhc3MgaW4gbmV3Qm91bmRzIGFuZCBuZXdP
dXRsaW5lQm94IGlmIHRoZXkgYXJlIGtub3duLgotICAgIGJvb2wgcmVwYWludEFmdGVyTGF5b3V0
SWZOZWVkZWQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGNvbnN0IElu
dFJlY3QmIG9sZEJvdW5kcywgY29uc3QgSW50UmVjdCYgb2xkT3V0bGluZUJveCwgY29uc3QgSW50
UmVjdCogbmV3Qm91bmRzUHRyID0gMCwgY29uc3QgSW50UmVjdCogbmV3T3V0bGluZUJveFB0ciA9
IDApOworICAgIGJvb2wgcmVwYWludEFmdGVyTGF5b3V0SWZOZWVkZWQoUmVuZGVyQm94TW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIsIGNvbnN0IEZsb2F0UmVjdCYgb2xkQm91bmRzLCBjb25z
dCBGbG9hdFJlY3QmIG9sZE91dGxpbmVCb3gsIGNvbnN0IEZsb2F0UmVjdCogbmV3Qm91bmRzUHRy
ID0gMCwgY29uc3QgRmxvYXRSZWN0KiBuZXdPdXRsaW5lQm94UHRyID0gMCk7CiAKICAgICAvLyBS
ZXBhaW50IG9ubHkgaWYgdGhlIG9iamVjdCBtb3ZlZC4KLSAgICB2aXJ0dWFsIHZvaWQgcmVwYWlu
dER1cmluZ0xheW91dElmTW92ZWQoY29uc3QgSW50UmVjdCYgcmVjdCk7CisgICAgdmlydHVhbCB2
b2lkIHJlcGFpbnREdXJpbmdMYXlvdXRJZk1vdmVkKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCk7CiAK
ICAgICAvLyBDYWxsZWQgdG8gcmVwYWludCBhIGJsb2NrJ3MgZmxvYXRzLgogICAgIHZpcnR1YWwg
dm9pZCByZXBhaW50T3ZlcmhhbmdpbmdGbG9hdHMoYm9vbCBwYWludEFsbERlc2NlbmRhbnRzID0g
ZmFsc2UpOwpAQCAtNjQ4LDI2ICs2NDgsMjYgQEAKIAogICAgIC8vIFJldHVybnMgdGhlIHJlY3Qg
dGhhdCBzaG91bGQgYmUgcmVwYWludGVkIHdoZW5ldmVyIHRoaXMgb2JqZWN0IGNoYW5nZXMuICBU
aGUgcmVjdCBpcyBpbiB0aGUgdmlldydzCiAgICAgLy8gY29vcmRpbmF0ZSBzcGFjZS4gIFRoaXMg
bWV0aG9kIGRlYWxzIHdpdGggb3V0bGluZXMgYW5kIG92ZXJmbG93LgotICAgIEludFJlY3QgYWJz
b2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkKKyAgICBGbG9hdFJlY3QgYWJzb2x1dGVDbGlwcGVk
T3ZlcmZsb3dSZWN0KCkKICAgICB7CiAgICAgICAgIHJldHVybiBjbGlwcGVkT3ZlcmZsb3dSZWN0
Rm9yUmVwYWludCgwKTsKICAgICB9Ci0gICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxv
d1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsg
ICAgCisgICAgdmlydHVhbCBGbG9hdFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQo
UmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpOyAgICAKICAgICB2aXJ0dWFs
IEludFJlY3QgcmVjdFdpdGhPdXRsaW5lRm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCog
cmVwYWludENvbnRhaW5lciwgaW50IG91dGxpbmVXaWR0aCk7CiAKICAgICAvLyBHaXZlbiBhIHJl
Y3QgaW4gdGhlIG9iamVjdCdzIGNvb3JkaW5hdGUgc3BhY2UsIGNvbXB1dGUgYSByZWN0IHN1aXRh
YmxlIGZvciByZXBhaW50aW5nCiAgICAgLy8gdGhhdCByZWN0IGluIHZpZXcgY29vcmRpbmF0ZXMu
Ci0gICAgdm9pZCBjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiByLCBib29sIGZp
eGVkID0gZmFsc2UpCisgICAgdm9pZCBjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChGbG9hdFJl
Y3QmIHIsIGJvb2wgZml4ZWQgPSBmYWxzZSkKICAgICB7CiAgICAgICAgIHJldHVybiBjb21wdXRl
UmVjdEZvclJlcGFpbnQoMCwgciwgZml4ZWQpOwogICAgIH0KICAgICAvLyBHaXZlbiBhIHJlY3Qg
aW4gdGhlIG9iamVjdCdzIGNvb3JkaW5hdGUgc3BhY2UsIGNvbXB1dGUgYSByZWN0IHN1aXRhYmxl
IGZvciByZXBhaW50aW5nCiAgICAgLy8gdGhhdCByZWN0IGluIHRoZSBjb29yZGluYXRlIHNwYWNl
IG9mIHJlcGFpbnRDb250YWluZXIuCi0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVw
YWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYsIGJv
b2wgZml4ZWQgPSBmYWxzZSk7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWlu
dChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgRmxvYXRSZWN0JiwgYm9v
bCBmaXhlZCA9IGZhbHNlKTsKIAogICAgIC8vIElmIG11bHRpcGxlLWNvbHVtbiBsYXlvdXQgcmVz
dWx0cyBpbiBhcHBseWluZyBhbiBvZmZzZXQgdG8gdGhlIGdpdmVuIHBvaW50LCBhZGQgdGhlIHNh
bWUKICAgICAvLyBvZmZzZXQgdG8gdGhlIGdpdmVuIHNpemUuCi0gICAgdmlydHVhbCB2b2lkIGFk
anVzdEZvckNvbHVtbnMoSW50U2l6ZSYsIGNvbnN0IEludFBvaW50JikgY29uc3QgeyB9CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdEZvckNvbHVtbnMoRmxvYXRTaXplJiwgY29uc3QgRmxvYXRQb2lu
dCYpIGNvbnN0IHsgfQogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gMTsgfQogCkBAIC03MDEsOCArNzAxLDggQEAKIAogICAgIC8vIEEgc2luZ2xlIHJl
Y3RhbmdsZSB0aGF0IGVuY29tcGFzc2VzIGFsbCBvZiB0aGUgc2VsZWN0ZWQgb2JqZWN0cyB3aXRo
aW4gdGhpcyBvYmplY3QuICBVc2VkIHRvIGRldGVybWluZSB0aGUgdGlnaHRlc3QKICAgICAvLyBw
b3NzaWJsZSBib3VuZGluZyBib3ggZm9yIHRoZSBzZWxlY3Rpb24uCi0gICAgSW50UmVjdCBzZWxl
Y3Rpb25SZWN0KGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKSB7IHJldHVybiBzZWxl
Y3Rpb25SZWN0Rm9yUmVwYWludCgwLCBjbGlwVG9WaXNpYmxlQ29udGVudCk7IH0KLSAgICB2aXJ0
dWFsIEludFJlY3Qgc2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IC8qcmVwYWludENvbnRhaW5lciovLCBib29sIC8qY2xpcFRvVmlzaWJsZUNvbnRlbnQqLyA9IHRy
dWUpIHsgcmV0dXJuIEludFJlY3QoKTsgfQorICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0KGJv
b2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKSB7IHJldHVybiBzZWxlY3Rpb25SZWN0Rm9y
UmVwYWludCgwLCBjbGlwVG9WaXNpYmxlQ29udGVudCk7IH0KKyAgICB2aXJ0dWFsIEZsb2F0UmVj
dCBzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogLypyZXBhaW50
Q29udGFpbmVyKi8sIGJvb2wgLypjbGlwVG9WaXNpYmxlQ29udGVudCovID0gdHJ1ZSkgeyByZXR1
cm4gRmxvYXRSZWN0KCk7IH0KIAogICAgIC8vIFdoZXRoZXIgb3Igbm90IGFuIG9iamVjdCBjYW4g
YmUgcGFydCBvZiB0aGUgbGVhZiBlbGVtZW50cyBvZiB0aGUgc2VsZWN0aW9uLgogICAgIHZpcnR1
YWwgYm9vbCBjYW5CZVNlbGVjdGlvbkxlYWYoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAt
NzczLDkgKzc3Myw5IEBACiAgICAgdmlydHVhbCB2b2lkIG1hcEFic29sdXRlVG9Mb2NhbFBvaW50
KGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcywgVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsK
IAogICAgIGJvb2wgc2hvdWxkVXNlVHJhbnNmb3JtRnJvbUNvbnRhaW5lcihjb25zdCBSZW5kZXJP
YmplY3QqIGNvbnRhaW5lcikgY29uc3Q7Ci0gICAgdm9pZCBnZXRUcmFuc2Zvcm1Gcm9tQ29udGFp
bmVyKGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyLCBjb25zdCBJbnRTaXplJiBvZmZzZXRJ
bkNvbnRhaW5lciwgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSBjb25zdDsKKyAgICB2b2lkIGdldFRy
YW5zZm9ybUZyb21Db250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIsIGNvbnN0
IEZsb2F0U2l6ZSYgb2Zmc2V0SW5Db250YWluZXIsIFRyYW5zZm9ybWF0aW9uTWF0cml4JikgY29u
c3Q7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRS
ZWN0PiYsIGNvbnN0IEludFBvaW50JikgeyB9OworICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1Jp
bmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBGbG9hdFBvaW50JikgeyB9OwogCiAgICAg
SW50UmVjdCBhYnNvbHV0ZU91dGxpbmVCb3VuZHMoKSBjb25zdAogICAgIHsKQEAgLTc5MSw5ICs3
OTEsOSBAQAogICAgIHZvaWQgZHJhd0xpbmVGb3JCb3hTaWRlKEdyYXBoaWNzQ29udGV4dCosIGlu
dCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MiwgQm94U2lkZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb2xvciwgRUJvcmRlclN0eWxlLCBpbnQgYWRqYncxLCBpbnQgYWRqYncyLCBi
b29sIGFudGlhbGlhcyA9IGZhbHNlKTsKIAotICAgIHZvaWQgcGFpbnRGb2N1c1JpbmcoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgSW50UG9pbnQmLCBSZW5kZXJTdHlsZSopOwotICAgIHZvaWQgcGFp
bnRPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIGFk
ZFBERlVSTFJlY3QoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQg
cGFpbnRGb2N1c1JpbmcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYsIFJlbmRl
clN0eWxlKik7CisgICAgdm9pZCBwYWludE91dGxpbmUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
RmxvYXRSZWN0Jik7CisgICAgdm9pZCBhZGRQREZVUkxSZWN0KEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEZsb2F0UmVjdCYpOwogCiAgICAgdmlydHVhbCBJbnRSZWN0IHZpZXdSZWN0KCkgY29uc3Q7
CiAKQEAgLTgyOCw4ICs4MjgsOCBAQAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlbmRlck9iamVj
dCYgbV9vYmplY3Q7CiAgICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBtX3JlcGFpbnRDb250
YWluZXI7Ci0gICAgICAgIEludFJlY3QgbV9vbGRCb3VuZHM7Ci0gICAgICAgIEludFJlY3QgbV9v
bGRPdXRsaW5lQm94OworICAgICAgICBGbG9hdFJlY3QgbV9vbGRCb3VuZHM7CisgICAgICAgIEZs
b2F0UmVjdCBtX29sZE91dGxpbmVCb3g7CiAgICAgICAgIGJvb2wgbV9jaGVja0ZvclJlcGFpbnQ7
CiAgICAgfTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnQuaAko
cmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSw4IEBACiAgICAgUmVuZGVyU1ZHUm9vdCogZW1i
ZWRkZWRTVkdDb250ZW50UmVuZGVyZXIoKSBjb25zdDsKICAgICBpbnQgY29tcHV0ZUVtYmVkZGVk
RG9jdW1lbnRSZXBsYWNlZFdpZHRoKFJlbmRlclNWR1Jvb3QqIGNvbnRlbnRSZW5kZXJlciwgYm9v
bCBpbmNsdWRlTWF4V2lkdGgpIGNvbnN0OwogICAgIGludCBjb21wdXRlRW1iZWRkZWREb2N1bWVu
dFJlcGxhY2VkSGVpZ2h0KFJlbmRlclNWR1Jvb3QqIGNvbnRlbnRSZW5kZXJlcikgY29uc3Q7Ci0g
ICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1h
eFdpZHRoID0gdHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9n
aWNhbEhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgY29tcHV0ZVJlcGxhY2VkTG9n
aWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRoID0gdHJ1ZSkgY29uc3Q7CisgICAgdmlydHVh
bCBmbG9hdCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3Q7CiAgICAgdmlydHVh
bCB2b2lkIGxheW91dCgpOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDksOCArMzA5LDggQEAK
ICAgICAgICAgQVNTRVJUKCF2aWV3LT5sYXlvdXRTdGF0ZUVuYWJsZWQoKSk7CiAKICAgICAgICAg
UmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSByZW5kZXJlcigpLT5jb250
YWluZXJGb3JSZXBhaW50KCk7Ci0gICAgICAgIEludFJlY3QgbmV3UmVjdCA9IHJlbmRlcmVyKCkt
PmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIpOwotICAgICAg
ICBJbnRSZWN0IG5ld091dGxpbmVCb3ggPSByZW5kZXJlcigpLT5vdXRsaW5lQm91bmRzRm9yUmVw
YWludChyZXBhaW50Q29udGFpbmVyLCBjYWNoZWRPZmZzZXQpOworICAgICAgICBGbG9hdFJlY3Qg
bmV3UmVjdCA9IHJlbmRlcmVyKCktPmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFp
bnRDb250YWluZXIpOworICAgICAgICBGbG9hdFJlY3QgbmV3T3V0bGluZUJveCA9IHJlbmRlcmVy
KCktPm91dGxpbmVCb3VuZHNGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIGNhY2hlZE9mZnNl
dCk7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgQVNTRVJUIHRoYXQgdmFsdWUgY2FsY3VsYXRl
ZCBmb3IgbmV3T3V0bGluZUJveCB1c2luZyB0aGUgY2FjaGVkIG9mZnNldCBpcyB0aGUgc2FtZQog
ICAgICAgICAvLyBhcyB0aGUgdmFsdWUgbm90IHVzaW5nIHRoZSBjYWNoZWQgb2Zmc2V0LCBidXQg
d2UgY2FuJ3QgZHVlIHRvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
NzA0OAogICAgICAgICBpZiAoZmxhZ3MgJiBDaGVja0ZvclJlcGFpbnQpIHsKQEAgLTMyMyw4ICsz
MjMsOCBAQAogICAgICAgICAgICAgICAgICAgICByZW5kZXJlcigpLT5yZXBhaW50QWZ0ZXJMYXlv
dXRJZk5lZWRlZChyZXBhaW50Q29udGFpbmVyLCBtX3JlcGFpbnRSZWN0LCBtX291dGxpbmVCb3gs
ICZuZXdSZWN0LCAmbmV3T3V0bGluZUJveCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAg
ICAgICAgbV9yZXBhaW50UmVjdCA9IG5ld1JlY3Q7Ci0gICAgICAgIG1fb3V0bGluZUJveCA9IG5l
d091dGxpbmVCb3g7CisgICAgICAgIG1fcmVwYWludFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG5l
d1JlY3QpOworICAgICAgICBtX291dGxpbmVCb3ggPSBlbmNsb3NpbmdJbnRSZWN0KG5ld091dGxp
bmVCb3gpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fcmVwYWludFJlY3QgPSBJbnRSZWN0KCk7
CiAgICAgICAgIG1fb3V0bGluZUJveCA9IEludFJlY3QoKTsKQEAgLTM3Myw3ICszNzMsNyBAQAog
dm9pZCBSZW5kZXJMYXllcjo6Y29tcHV0ZVJlcGFpbnRSZWN0cygpCiB7CiAgICAgUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSByZW5kZXJlcigpLT5jb250YWluZXJGb3JS
ZXBhaW50KCk7Ci0gICAgbV9yZXBhaW50UmVjdCA9IHJlbmRlcmVyKCktPmNsaXBwZWRPdmVyZmxv
d1JlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIpOworICAgIG1fcmVwYWludFJlY3QgPSBl
bmNsb3NpbmdJbnRSZWN0KHJlbmRlcmVyKCktPmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50
KHJlcGFpbnRDb250YWluZXIpKTsKICAgICBtX291dGxpbmVCb3ggPSByZW5kZXJlcigpLT5vdXRs
aW5lQm91bmRzRm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKIH0KIApAQCAtNTA2LDcgKzUw
Niw3IEBACiAgICAgbV9oYXNWaXNpYmxlQ29udGVudCA9IGI7CiAgICAgaWYgKG1faGFzVmlzaWJs
ZUNvbnRlbnQpIHsKICAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWlu
ZXIgPSByZW5kZXJlcigpLT5jb250YWluZXJGb3JSZXBhaW50KCk7Ci0gICAgICAgIG1fcmVwYWlu
dFJlY3QgPSByZW5kZXJlcigpLT5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChyZXBhaW50
Q29udGFpbmVyKTsKKyAgICAgICAgbV9yZXBhaW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QocmVu
ZGVyZXIoKS0+Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcikp
OwogICAgICAgICBtX291dGxpbmVCb3ggPSByZW5kZXJlcigpLT5vdXRsaW5lQm91bmRzRm9yUmVw
YWludChyZXBhaW50Q29udGFpbmVyKTsKICAgICAgICAgaWYgKCFpc05vcm1hbEZsb3dPbmx5KCkp
IHsKICAgICAgICAgICAgIGZvciAoUmVuZGVyTGF5ZXIqIHNjID0gc3RhY2tpbmdDb250ZXh0KCk7
IHNjOyBzYyA9IHNjLT5zdGFja2luZ0NvbnRleHQoKSkgewpAQCAtNjQxLDggKzY0MSw4IEBACiAK
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24oKQogewotICAgIEludFBvaW50
IGxvY2FsUG9pbnQ7Ci0gICAgSW50U2l6ZSBpbmxpbmVCb3VuZGluZ0JveE9mZnNldDsgLy8gV2Ug
ZG9uJ3QgcHV0IHRoaXMgaW50byB0aGUgUmVuZGVyTGF5ZXIgeC95IGZvciBpbmxpbmVzLCBzbyB3
ZSBuZWVkIHRvIHN1YnRyYWN0IGl0IG91dCB3aGVuIGRvbmUuCisgICAgRmxvYXRQb2ludCBsb2Nh
bFBvaW50OworICAgIEZsb2F0U2l6ZSBpbmxpbmVCb3VuZGluZ0JveE9mZnNldDsgLy8gV2UgZG9u
J3QgcHV0IHRoaXMgaW50byB0aGUgUmVuZGVyTGF5ZXIgeC95IGZvciBpbmxpbmVzLCBzbyB3ZSBu
ZWVkIHRvIHN1YnRyYWN0IGl0IG91dCB3aGVuIGRvbmUuCiAgICAgaWYgKHJlbmRlcmVyKCktPmlz
UmVuZGVySW5saW5lKCkpIHsKICAgICAgICAgUmVuZGVySW5saW5lKiBpbmxpbmVGbG93ID0gdG9S
ZW5kZXJJbmxpbmUocmVuZGVyZXIoKSk7CiAgICAgICAgIEludFJlY3QgbGluZUJveCA9IGlubGlu
ZUZsb3ctPmxpbmVzQm91bmRpbmdCb3goKTsKQEAgLTY1MCw3ICs2NTAsNyBAQAogICAgICAgICBp
bmxpbmVCb3VuZGluZ0JveE9mZnNldCA9IHRvU2l6ZShsaW5lQm94LmxvY2F0aW9uKCkpOwogICAg
ICAgICBsb2NhbFBvaW50ICs9IGlubGluZUJvdW5kaW5nQm94T2Zmc2V0OwogICAgIH0gZWxzZSBp
ZiAoUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKSkgewotICAgICAgICBzZXRTaXplKGJveC0+
c2l6ZSgpKTsKKyAgICAgICAgc2V0U2l6ZShleHBhbmRlZEludFNpemUoYm94LT5zaXplKCkpKTsK
ICAgICAgICAgbG9jYWxQb2ludCArPSBib3gtPmxvY2F0aW9uT2Zmc2V0SW5jbHVkaW5nRmxpcHBp
bmcoKTsKICAgICB9CiAKQEAgLTY5MSw4ICs2OTEsOCBAQAogICAgICAgICBpZiAoaXNDb21wb3Np
dGVkKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBDb21wb3NpdGVkIGxheWVycyBpZ25vcmUg
cGFnaW5hdGlvbiwgc28gYWJvdXQgdGhlIGJlc3Qgd2UgY2FuIGRvIGlzIG1ha2Ugc3VyZSB0aGV5
J3JlIG9mZnNldCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBjb2x1bW4uCiAgICAgICAgICAgICAvLyBU
aGV5IHdvbid0IHNwbGl0IGFjcm9zcyBjb2x1bW5zIHByb3Blcmx5LgotICAgICAgICAgICAgSW50
U2l6ZSBjb2x1bW5PZmZzZXQ7Ci0gICAgICAgICAgICBwYXJlbnQoKS0+cmVuZGVyZXIoKS0+YWRq
dXN0Rm9yQ29sdW1ucyhjb2x1bW5PZmZzZXQsIGxvY2FsUG9pbnQpOworICAgICAgICAgICAgRmxv
YXRTaXplIGNvbHVtbk9mZnNldDsKKyAgICAgICAgICAgIHBhcmVudCgpLT5yZW5kZXJlcigpLT5h
ZGp1c3RGb3JDb2x1bW5zKGNvbHVtbk9mZnNldCwgcm91bmRlZEludFBvaW50KGxvY2FsUG9pbnQp
KTsKICAgICAgICAgICAgIGxvY2FsUG9pbnQgKz0gY29sdW1uT2Zmc2V0OwogICAgICAgICB9CiAK
QEAgLTcyMiw3ICs3MjIsNyBAQAogICAgICAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgo
KTsKIAogICAgIC8vIE1heWJlIGZldGNoIHRoZSBwZXJzcGVjdGl2ZSBmcm9tIHRoZSBiYWNraW5n
PwotICAgIGNvbnN0IEludFJlY3QgYm9yZGVyQm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSkt
PmJvcmRlckJveFJlY3QoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QgYm9yZGVyQm94ID0gdG9SZW5k
ZXJCb3gocmVuZGVyZXIoKSktPmJvcmRlckJveFJlY3QoKTsKICAgICBjb25zdCBmbG9hdCBib3hX
aWR0aCA9IGJvcmRlckJveC53aWR0aCgpOwogICAgIGNvbnN0IGZsb2F0IGJveEhlaWdodCA9IGJv
cmRlckJveC5oZWlnaHQoKTsKIApAQCAtNzQ3LDcgKzc0Nyw3IEBACiAgICAgaWYgKCFyZW5kZXJl
cigpLT5oYXNUcmFuc2Zvcm0oKSkKICAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoKTsKIAotICAg
IGNvbnN0IEludFJlY3QgYm9yZGVyQm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPmJvcmRl
ckJveFJlY3QoKTsKKyAgICBjb25zdCBGbG9hdFJlY3QgYm9yZGVyQm94ID0gdG9SZW5kZXJCb3go
cmVuZGVyZXIoKSktPmJvcmRlckJveFJlY3QoKTsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBy
ZW5kZXJlcigpLT5zdHlsZSgpOwogCiAgICAgcmV0dXJuIEZsb2F0UG9pbnQoc3R5bGUtPnBlcnNw
ZWN0aXZlT3JpZ2luWCgpLmNhbGNGbG9hdFZhbHVlKGJvcmRlckJveC53aWR0aCgpKSwKQEAgLTEz
NTcsNyArMTM1Nyw3IEBACiAjZW5kaWYKIAogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBh
aW50Q29udGFpbmVyID0gcmVuZGVyZXIoKS0+Y29udGFpbmVyRm9yUmVwYWludCgpOwotICAgIElu
dFJlY3QgcmVjdEZvclJlcGFpbnQgPSByZW5kZXJlcigpLT5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9y
UmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKKyAgICBJbnRSZWN0IHJlY3RGb3JSZXBhaW50ID0g
ZW5jbG9zaW5nSW50UmVjdChyZW5kZXJlcigpLT5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWlu
dChyZXBhaW50Q29udGFpbmVyKSk7CiAKICAgICBGcmFtZSogZnJhbWUgPSByZW5kZXJlcigpLT5m
cmFtZSgpOwogICAgIGlmIChmcmFtZSkgewpAQCAtMTcxOSw3ICsxNzE5LDcgQEAKICAgICBib29s
IGhhc1ZlcnRpY2FsQmFyID0gdmVydGljYWxTY3JvbGxiYXIoKTsKICAgICBib29sIGhhc1Jlc2l6
ZXIgPSByZW5kZXJlcigpLT5zdHlsZSgpLT5yZXNpemUoKSAhPSBSRVNJWkVfTk9ORTsKICAgICBp
ZiAoKGhhc0hvcml6b250YWxCYXIgJiYgaGFzVmVydGljYWxCYXIpIHx8IChoYXNSZXNpemVyICYm
IChoYXNIb3Jpem9udGFsQmFyIHx8IGhhc1ZlcnRpY2FsQmFyKSkpCi0gICAgICAgIHJldHVybiBj
b3JuZXJSZWN0KHRoaXMsIHJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0KCkpOworICAgICAgICBy
ZXR1cm4gY29ybmVyUmVjdCh0aGlzLCBlbmNsb3NpbmdJbnRSZWN0KHJlbmRlckJveCgpLT5ib3Jk
ZXJCb3hSZWN0KCkpKTsKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQogCkBAIC0xNzM4LDcgKzE3
MzgsNyBAQAogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogICAgIEludFJlY3Qgc2Nyb2xsQ29y
bmVyQW5kUmVzaXplciA9IHNjcm9sbENvcm5lclJlY3QoKTsKICAgICBpZiAoc2Nyb2xsQ29ybmVy
QW5kUmVzaXplci5pc0VtcHR5KCkpCi0gICAgICAgIHNjcm9sbENvcm5lckFuZFJlc2l6ZXIgPSBy
ZXNpemVyQ29ybmVyUmVjdCh0aGlzLCBib3gtPmJvcmRlckJveFJlY3QoKSk7CisgICAgICAgIHNj
cm9sbENvcm5lckFuZFJlc2l6ZXIgPSByZXNpemVyQ29ybmVyUmVjdCh0aGlzLCBlbmNsb3NpbmdJ
bnRSZWN0KGJveC0+Ym9yZGVyQm94UmVjdCgpKSk7CiAgICAgcmV0dXJuIHNjcm9sbENvcm5lckFu
ZFJlc2l6ZXI7CiB9CiAKQEAgLTIwMTYsNyArMjAxNiw3IEBACiAgICAgaWYgKCFib3gpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGNvbnN0IEludFJlY3QmIGJvcmRlckJveCA9IGJveC0+Ym9yZGVy
Qm94UmVjdCgpOworICAgIGNvbnN0IEludFJlY3QgYm9yZGVyQm94ID0gZW5jbG9zaW5nSW50UmVj
dChib3gtPmJvcmRlckJveFJlY3QoKSk7CiAgICAgY29uc3QgSW50UmVjdCYgc2Nyb2xsQ29ybmVy
ID0gc2Nyb2xsQ29ybmVyUmVjdCgpOwogICAgIEludFJlY3QgYWJzQm91bmRzKGJvcmRlckJveC5s
b2NhdGlvbigpICsgb2Zmc2V0RnJvbUxheWVyLCBib3JkZXJCb3guc2l6ZSgpKTsKICAgICBpZiAo
bV92QmFyKQpAQCAtMjE2NSw4ICsyMTY1LDggQEAKICAgICBpZiAoYm94LT5zdHlsZSgpLT5vdmVy
Zmxvd1goKSAhPSBPTUFSUVVFRSkgewogICAgICAgICAvLyBMYXlvdXQgbWF5IGNhdXNlIHVzIHRv
IGJlIGluIGFuIGludmFsaWQgc2Nyb2xsIHBvc2l0aW9uLiAgSW4gdGhpcyBjYXNlIHdlIG5lZWQK
ICAgICAgICAgLy8gdG8gcHVsbCBvdXIgc2Nyb2xsIG9mZnNldHMgYmFjayB0byB0aGUgbWF4IChv
ciBwdXNoIHRoZW0gdXAgdG8gdGhlIG1pbikuCi0gICAgICAgIGludCBuZXdYID0gbWF4KDAsIG1p
bihzY3JvbGxYT2Zmc2V0KCksIHNjcm9sbFdpZHRoKCkgLSBib3gtPmNsaWVudFdpZHRoKCkpKTsK
LSAgICAgICAgaW50IG5ld1kgPSBtYXgoMCwgbWluKHNjcm9sbFlPZmZzZXQoKSwgc2Nyb2xsSGVp
Z2h0KCkgLSBib3gtPmNsaWVudEhlaWdodCgpKSk7CisgICAgICAgIGZsb2F0IG5ld1ggPSBtYXgo
MC4wZiwgbWluKChmbG9hdClzY3JvbGxYT2Zmc2V0KCksIHNjcm9sbFdpZHRoKCkgLSBib3gtPmNs
aWVudFdpZHRoKCkpKTsKKyAgICAgICAgZmxvYXQgbmV3WSA9IG1heCgwLjBmLCBtaW4oKGZsb2F0
KXNjcm9sbFlPZmZzZXQoKSwgc2Nyb2xsSGVpZ2h0KCkgLSBib3gtPmNsaWVudEhlaWdodCgpKSk7
CiAgICAgICAgIGlmIChuZXdYICE9IHNjcm9sbFhPZmZzZXQoKSB8fCBuZXdZICE9IHNjcm9sbFlP
ZmZzZXQoKSkgewogICAgICAgICAgICAgUmVuZGVyVmlldyogdmlldyA9IHJlbmRlcmVyKCktPnZp
ZXcoKTsKICAgICAgICAgICAgIEFTU0VSVCh2aWV3KTsKQEAgLTIyNTgsNyArMjI1OCw3IEBACiAg
ICAgICAgIHVwZGF0ZU92ZXJmbG93U3RhdHVzKGhvcml6b250YWxPdmVyZmxvdywgdmVydGljYWxP
dmVyZmxvdyk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29u
c3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scykKK3Zv
aWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1h
Z2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQogewogICAgIC8vIERvbid0IGRv
IGFueXRoaW5nIGlmIHdlIGhhdmUgbm8gb3ZlcmZsb3cuCiAgICAgaWYgKCFyZW5kZXJlcigpLT5o
YXNPdmVyZmxvd0NsaXAoKSkKQEAgLTIyNjgsNyArMjI2OCw3IEBACiAgICAgLy8gb24gdG9wIG9m
IGV2ZXJ5dGhpbmcgZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBhaW50aW5nIHBhc3MsIHBh
aW50aW5nT3ZlcmxheUNvbnRyb2xzCiAgICAgLy8gd2lsbCBiZSBmYWxzZSwgYW5kIHdlIHNob3Vs
ZCBqdXN0IHRlbGwgdGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUgb3ZlcmxheSBzY3JvbGxi
YXJzCiAgICAgLy8gdGhhdCBuZWVkIHRvIGJlIHBhaW50ZWQuIFRoYXQgd2lsbCBjYXVzZSB0aGUg
c2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSB0byBydW4sCi0gICAgLy8gYW5kIHdl
J2xsIHBhaW50IHRoZSBzY3JvbGxiYXJzIHRoZW4uIEluIHRoZSBtZWFudGltZSwgY2FjaGUgdHgg
YW5kIHR5IHNvIHRoYXQgdGhlIAorICAgIC8vIGFuZCB3ZSdsbCBwYWludCB0aGUgc2Nyb2xsYmFy
cyB0aGVuLiBJbiB0aGUgbWVhbnRpbWUsIGNhY2hlIHRoZSBwYWludCBvZmZzZXQgc28gdGhhdCB0
aGUgCiAgICAgLy8gc2Vjb25kIHBhc3MgZG9lc24ndCBuZWVkIHRvIHJlLWVudGVyIHRoZSBSZW5k
ZXJUcmVlIHRvIGdldCBpdCByaWdodC4KICAgICBpZiAoaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAm
JiAhcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpIHsKICAgICAgICAgUmVuZGVyVmlldyogcmVuZGVy
VmlldyA9IHJlbmRlcmVyKCktPnZpZXcoKTsKQEAgLTIyODIsMTQgKzIyODIsMTQgQEAKICAgICBp
ZiAocGFpbnRpbmdPdmVybGF5Q29udHJvbHMgJiYgIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWlu
dE9mZnNldDsKKyAgICBGbG9hdFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNl
dDsKICAgICBpZiAocGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCiAgICAgICAgIGFkanVzdGVkUGFp
bnRPZmZzZXQgPSBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CiAKICAgICAvLyBNb3Zl
IHRoZSBzY3JvbGxiYXIgd2lkZ2V0cyBpZiBuZWNlc3NhcnkuICBXZSBub3JtYWxseSBtb3ZlIGFu
ZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcgbGF5b3V0LCBidXQgc29tZXRpbWVzCiAgICAgLy8gd2lk
Z2V0cyBjYW4gbW92ZSB3aXRob3V0IGxheW91dCBvY2N1cnJpbmcgKG1vc3Qgbm90YWJseSB3aGVu
IHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0aGF0CiAgICAgLy8gY29udGFpbnMgZml4ZWQgcG9zaXRp
b25lZCBlbGVtZW50cykuCi0gICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHRvU2l6ZShhZGp1
c3RlZFBhaW50T2Zmc2V0KSk7CisgICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHJvdW5kZWRJ
bnRTaXplKHRvU2l6ZShhZGp1c3RlZFBhaW50T2Zmc2V0KSkpOwogCiAgICAgLy8gTm93IHRoYXQg
d2UncmUgc3VyZSB0aGUgc2Nyb2xsYmFycyBhcmUgaW4gdGhlIHJpZ2h0IHBsYWNlLCBwYWludCB0
aGVtLgogICAgIGlmIChtX2hCYXIKQEAgLTIzMTgsMTMgKzIzMTgsMTMgQEAKICAgICBwYWludFJl
c2l6ZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7CiB9CiAKLXZv
aWQgUmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0
KQordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFt
YWdlUmVjdCkKIHsKICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwogICAgIEFTU0VS
VChib3gpOwogCiAgICAgSW50UmVjdCBhYnNSZWN0ID0gc2Nyb2xsQ29ybmVyUmVjdCgpOwotICAg
IGFic1JlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKKyAgICBhYnNSZWN0Lm1vdmVCeShyb3VuZGVk
SW50UG9pbnQocGFpbnRPZmZzZXQpKTsKICAgICBpZiAoIWFic1JlY3QuaW50ZXJzZWN0cyhkYW1h
Z2VSZWN0KSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMzQ0LDcgKzIzNDQsNyBAQAogICAgICAg
ICBjb250ZXh0LT5maWxsUmVjdChhYnNSZWN0LCBDb2xvcjo6d2hpdGUsIGJveC0+c3R5bGUoKS0+
Y29sb3JTcGFjZSgpKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJ
bnRSZWN0JiBkYW1hZ2VSZWN0KQordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0
IEludFJlY3QmIGRhbWFnZVJlY3QpCiB7CiAgICAgaWYgKHJlbmRlcmVyKCktPnN0eWxlKCktPnJl
c2l6ZSgpID09IFJFU0laRV9OT05FKQogICAgICAgICByZXR1cm47CkBAIC0yMzUyLDggKzIzNTIs
OCBAQAogICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CiAgICAgQVNTRVJUKGJveCk7
CiAKLSAgICBJbnRSZWN0IGFic1JlY3QgPSByZXNpemVyQ29ybmVyUmVjdCh0aGlzLCBib3gtPmJv
cmRlckJveFJlY3QoKSk7Ci0gICAgYWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOworICAgIElu
dFJlY3QgYWJzUmVjdCA9IHJlc2l6ZXJDb3JuZXJSZWN0KHRoaXMsIGVuY2xvc2luZ0ludFJlY3Qo
Ym94LT5ib3JkZXJCb3hSZWN0KCkpKTsKKyAgICBhYnNSZWN0Lm1vdmVCeShyb3VuZGVkSW50UG9p
bnQocGFpbnRPZmZzZXQpKTsKICAgICBpZiAoIWFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0
KSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNDEwLDcgKzI0MTAsNyBAQAogICAgIAogICAgIElu
dFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7CiAgICAgaWYgKHJlbmRlcmVyKCktPnN0eWxlKCktPnJl
c2l6ZSgpICE9IFJFU0laRV9OT05FKSB7Ci0gICAgICAgIHJlc2l6ZUNvbnRyb2xSZWN0ID0gcmVz
aXplckNvcm5lclJlY3QodGhpcywgYm94LT5ib3JkZXJCb3hSZWN0KCkpOworICAgICAgICByZXNp
emVDb250cm9sUmVjdCA9IHJlc2l6ZXJDb3JuZXJSZWN0KHRoaXMsIGVuY2xvc2luZ0ludFJlY3Qo
Ym94LT5ib3JkZXJCb3hSZWN0KCkpKTsKICAgICAgICAgaWYgKHJlc2l6ZUNvbnRyb2xSZWN0LmNv
bnRhaW5zKGxvY2FsUG9pbnQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
MjU5Nyw3ICsyNTk3LDcgQEAKICAgICAvLyBDYWxjdWxhdGUgdGhlIGNsaXAgcmVjdHMgd2Ugc2hv
dWxkIHVzZS4KICAgICBJbnRSZWN0IGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRv
QXBwbHksIG91dGxpbmVSZWN0OwogICAgIGNhbGN1bGF0ZVJlY3RzKHJvb3RMYXllciwgcGFpbnRE
aXJ0eVJlY3QsIGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRvQXBwbHksIG91dGxp
bmVSZWN0LCBsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3RzKTsK
LSAgICBJbnRQb2ludCBwYWludE9mZnNldCA9IHRvUG9pbnQobGF5ZXJCb3VuZHMubG9jYXRpb24o
KSAtIHJlbmRlckJveExvY2F0aW9uKCkpOworICAgIEZsb2F0UG9pbnQgcGFpbnRPZmZzZXQgPSB0
b1BvaW50KGxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgLy8gRW5zdXJlIG91ciBsaXN0cyBhcmUg
dXAtdG8tZGF0ZS4KICAgICB1cGRhdGVDb21wb3NpdGluZ0FuZExheWVyTGlzdHNJZk5lZWRlZCgp
OwpAQCAtMzEzNCw3ICszMTM0LDcgQEAKIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50
cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBj
b25zdCBJbnRSZWN0JiBsYXllckJvdW5kcywgY29uc3QgSW50UG9pbnQmIGhpdFRlc3RQb2ludCwg
SGl0VGVzdEZpbHRlciBoaXRUZXN0RmlsdGVyKSBjb25zdAogewogICAgIGlmICghcmVuZGVyZXIo
KS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RQb2ludCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b1BvaW50KGxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hM
b2NhdGlvbigpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZGVkSW50UG9pbnQo
dG9Qb2ludChsYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSkpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpdFRlc3RGaWx0ZXIpKSB7CiAgICAgICAgIC8v
IEl0J3Mgd3JvbmcgdG8gc2V0IGlubmVyTm9kZSwgYnV0IHRoZW4gY2xhaW0gdGhhdCB5b3UgZGlk
bid0IGhpdCBhbnl0aGluZywgdW5sZXNzIGl0IGlzCiAgICAgICAgIC8vIGEgcmVjdC1iYXNlZCB0
ZXN0LgpAQCAtMzQ4Miw3ICszNDgyLDcgQEAKICAgICByZXR1cm4gY2xpcHBpbmdSb290TGF5ZXIt
PnJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKGJhY2tncm91bmRSZWN0
KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6YWRkQmxv
Y2tTZWxlY3Rpb25HYXBzQm91bmRzKGNvbnN0IEludFJlY3QmIGJvdW5kcykKK3ZvaWQgUmVuZGVy
TGF5ZXI6OmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjb25zdCBGbG9hdFJlY3QmIGJvdW5k
cykKIHsKICAgICBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcy51bml0ZShib3VuZHMpOwogfQpA
QCAtMzUwMiw3ICszNTAyLDcgQEAKICAgICBpZiAobV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRSZWN0IHJlY3QgPSBtX2Jsb2Nr
U2VsZWN0aW9uR2Fwc0JvdW5kczsKKyAgICBJbnRSZWN0IHJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0
KG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKTsKICAgICByZWN0Lm1vdmUoLXNjcm9sbGVkQ29u
dGVudE9mZnNldCgpKTsKICAgICBpZiAocmVuZGVyZXIoKS0+aGFzT3ZlcmZsb3dDbGlwKCkpCiAg
ICAgICAgIHJlY3QuaW50ZXJzZWN0KHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLT5vdmVyZmxvd0Ns
aXBSZWN0KEludFBvaW50KCkpKTsKQEAgLTM1NTQsOSArMzU1NCw5IEBACiAgICAgICAgIC8vIE91
ciBib3VuZGluZyBib3ggaXMganVzdCB0aGUgdW5pb24gb2YgYWxsIG9mIG91ciBjZWxscycgYm9y
ZGVyL292ZXJmbG93IHJlY3RzLgogICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBy
ZW5kZXJlcigpLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
ZygpKSB7CiAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVDZWxsKCkpIHsKLSAgICAgICAg
ICAgICAgICBJbnRSZWN0IGJib3ggPSB0b1JlbmRlckJveChjaGlsZCktPmJvcmRlckJveFJlY3Qo
KTsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IGJib3ggPSBlbmNsb3NpbmdJbnRSZWN0KHRvUmVu
ZGVyQm94KGNoaWxkKS0+Ym9yZGVyQm94UmVjdCgpKTsKICAgICAgICAgICAgICAgICByZXN1bHQu
dW5pdGUoYmJveCk7Ci0gICAgICAgICAgICAgICAgSW50UmVjdCBvdmVyZmxvd1JlY3QgPSByZW5k
ZXJCb3goKS0+dmlzdWFsT3ZlcmZsb3dSZWN0KCk7CisgICAgICAgICAgICAgICAgSW50UmVjdCBv
dmVyZmxvd1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHJlbmRlckJveCgpLT52aXN1YWxPdmVyZmxv
d1JlY3QoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGJib3ggIT0gb3ZlcmZsb3dSZWN0KQogICAg
ICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGUob3ZlcmZsb3dSZWN0KTsKICAgICAgICAgICAg
IH0KQEAgLTM1NjcsOSArMzU2Nyw5IEBACiAgICAgICAgIGlmIChib3gtPmhhc01hc2soKSkKICAg
ICAgICAgICAgIHJlc3VsdCA9IGJveC0+bWFza0NsaXBSZWN0KCk7CiAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgSW50UmVjdCBiYm94ID0gYm94LT5ib3JkZXJCb3hSZWN0KCk7CisgICAgICAg
ICAgICBJbnRSZWN0IGJib3ggPSBlbmNsb3NpbmdJbnRSZWN0KGJveC0+Ym9yZGVyQm94UmVjdCgp
KTsKICAgICAgICAgICAgIHJlc3VsdCA9IGJib3g7Ci0gICAgICAgICAgICBJbnRSZWN0IG92ZXJm
bG93UmVjdCA9IGJveC0+dmlzdWFsT3ZlcmZsb3dSZWN0KCk7CisgICAgICAgICAgICBJbnRSZWN0
IG92ZXJmbG93UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoYm94LT52aXN1YWxPdmVyZmxvd1JlY3Qo
KSk7CiAgICAgICAgICAgICBpZiAoYmJveCAhPSBvdmVyZmxvd1JlY3QpCiAgICAgICAgICAgICAg
ICAgcmVzdWx0LnVuaXRlKG92ZXJmbG93UmVjdCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9Db2x1bW5JbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0NvbHVtbkluZm8uaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvQ29sdW1uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3
IEBACiAKICAgICBpbnQgZm9yY2VkQnJlYWtzKCkgY29uc3QgeyByZXR1cm4gbV9mb3JjZWRCcmVh
a3M7IH0KICAgICBpbnQgZm9yY2VkQnJlYWtPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2ZvcmNl
ZEJyZWFrT2Zmc2V0OyB9Ci0gICAgaW50IG1heGltdW1EaXN0YW5jZUJldHdlZW5Gb3JjZWRCcmVh
a3MoKSBjb25zdCB7IHJldHVybiBtX21heGltdW1EaXN0YW5jZUJldHdlZW5Gb3JjZWRCcmVha3M7
IH0KKyAgICBmbG9hdCBtYXhpbXVtRGlzdGFuY2VCZXR3ZWVuRm9yY2VkQnJlYWtzKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXhpbXVtRGlzdGFuY2VCZXR3ZWVuRm9yY2VkQnJlYWtzOyB9CiAgICAgdm9p
ZCBjbGVhckZvcmNlZEJyZWFrcygpCiAgICAgeyAKICAgICAgICAgbV9mb3JjZWRCcmVha3MgPSAw
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
aAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVTZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAKIAogICAgIHZpcnR1
YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkID0gMCk7CiAKLSAgICB2aXJ0dWFsIGludCBmaXJzdExpbmVCb3hCYXNlbGluZSgpIGNv
bnN0OworICAgIHZpcnR1YWwgZmxvYXQgZmlyc3RMaW5lQm94QmFzZWxpbmUoKSBjb25zdDsKIAog
ICAgIHZvaWQgYWRkQ2VsbChSZW5kZXJUYWJsZUNlbGwqLCBSZW5kZXJUYWJsZVJvdyogcm93KTsK
IApAQCAtMTMyLDkgKzEzMiw5IEBACiAKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVu
ZGVyT2JqZWN0KiBvbGRDaGlsZCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiwgY29uc3QgSW50UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDZWxsKFJlbmRlclRh
YmxlQ2VsbCosIFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lk
IHBhaW50T2JqZWN0KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CisgICAgdmlydHVhbCB2
b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRDZWxsKFJlbmRlclRhYmxlQ2VsbCosIFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9p
bnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgY29uc3QgRmxv
YXRQb2ludCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQ
dHIsIGNvbnN0IEludFJlY3QqID0gMCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTbGlkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTbGlkZXIuY3BwCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBA
CiB7CiB9CiAKLWludCBSZW5kZXJTbGlkZXI6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5l
LCBib29sIC8qZmlyc3RMaW5lKi8sIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2Rl
KSBjb25zdAorZmxvYXQgUmVuZGVyU2xpZGVyOjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGlu
ZSwgYm9vbCAvKmZpcnN0TGluZSovLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9k
ZSkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogUGF0Y2ggdGhpcyBmdW5jdGlvbiBmb3Igd3JpdGlu
Zy1tb2RlLgogICAgIHJldHVybiBoZWlnaHQoKSArIG1hcmdpblRvcCgpOwpAQCAtMTEzLDcgKzEx
Myw3IEBACiAgICAgdGh1bWJSZWN0LnNldEhlaWdodCh0aHVtYi0+c3R5bGUoKS0+aGVpZ2h0KCku
Y2FsY01pblZhbHVlKGNvbnRlbnRIZWlnaHQoKSkpOwogCiAgICAgZG91YmxlIGZyYWN0aW9uID0g
c2xpZGVyUG9zaXRpb24oc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSkpOwot
ICAgIEludFJlY3QgY29udGVudFJlY3QgPSBjb250ZW50Qm94UmVjdCgpOworICAgIEludFJlY3Qg
Y29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNvbnRlbnRCb3hSZWN0KCkpOwogICAgIGlm
IChzdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0IHx8IHN0eWxlKCkt
PmFwcGVhcmFuY2UoKSA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpIHsKICAgICAgICAgdGh1bWJS
ZWN0LnNldFgoY29udGVudFJlY3QueCgpICsgKGNvbnRlbnRSZWN0LndpZHRoKCkgLSB0aHVtYlJl
Y3Qud2lkdGgoKSkgLyAyKTsKICAgICAgICAgdGh1bWJSZWN0LnNldFkoY29udGVudFJlY3QueSgp
ICsgc3RhdGljX2Nhc3Q8aW50PihuZXh0YWZ0ZXIoKGNvbnRlbnRSZWN0LmhlaWdodCgpIC0gdGh1
bWJSZWN0LmhlaWdodCgpKSArIDEsIDApICogKDEgLSBmcmFjdGlvbikpKTsKQEAgLTE0NCw3ICsx
NDQsNyBAQAogCiAgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JS
ZXBhaW50RHVyaW5nTGF5b3V0KCkpOwogCi0gICAgSW50U2l6ZSBvbGRTaXplID0gc2l6ZSgpOwor
ICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gc2l6ZSgpOwogCiAgICAgc2V0U2l6ZShiYXNlU2l6ZSk7
CiAgICAgY29tcHV0ZUxvZ2ljYWxXaWR0aCgpOwpAQCAtMTU5LDcgKzE1OSw3IEBACiAKICAgICAg
ICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywgSW50U2l6
ZSh4KCksIHkoKSksIHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpOwogCi0g
ICAgICAgIEludFJlY3Qgb2xkVGh1bWJSZWN0ID0gdGh1bWItPmZyYW1lUmVjdCgpOworICAgICAg
ICBGbG9hdFJlY3Qgb2xkVGh1bWJSZWN0ID0gdGh1bWItPmZyYW1lUmVjdCgpOwogCiAgICAgICAg
IHRodW1iLT5sYXlvdXRJZk5lZWRlZCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lRmxvd0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDUwICsxMDMsNTAg
QEAKIAogICAgIEludFJlY3Qgcm91bmRlZEZyYW1lUmVjdCgpIGNvbnN0OwogICAgIAotICAgIHZp
cnR1YWwgdm9pZCBwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50
Jik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50TWFzayhQYWludEluZm8mLCBjb25zdCBJbnRQb2lu
dCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGNv
bnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRNYXNrKFBhaW50SW5mbyYs
IGNvbnN0IEZsb2F0UG9pbnQmKTsKICAgICB2b2lkIHBhaW50RmlsbExheWVycyhjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBDb2xvciYsIGNvbnN0IEZpbGxMYXllciosIGNvbnN0IEludFJlY3QmLCBD
b21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIpOwogICAgIHZvaWQgcGFpbnRG
aWxsTGF5ZXIoY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgQ29sb3ImLCBjb25zdCBGaWxsTGF5ZXIq
LCBjb25zdCBJbnRSZWN0JiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVy
KTsKICAgICB2b2lkIHBhaW50Qm94U2hhZG93KEdyYXBoaWNzQ29udGV4dCosIFJlbmRlclN0eWxl
KiwgU2hhZG93U3R5bGUsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmLCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20p
OworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBGbG9hdFBvaW50Jiwg
aW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQm
IHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50
IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKIAogICAgIHZpcnR1YWwgUmVuZGVyTGluZUJveExp
c3QqIHJlbmRlcmVyTGluZUJveGVzKCkgY29uc3Q7CiAKICAgICAvLyBsb2dpY2FsTGVmdCA9IGxl
ZnQgaW4gYSBob3Jpem9udGFsIGxpbmUgYW5kIHRvcCBpbiBhIHZlcnRpY2FsIGxpbmUuCi0gICAg
aW50IG1hcmdpbkJvcmRlclBhZGRpbmdMb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1hcmdp
bkxvZ2ljYWxMZWZ0KCkgKyBib3JkZXJMb2dpY2FsTGVmdCgpICsgcGFkZGluZ0xvZ2ljYWxMZWZ0
KCk7IH0KLSAgICBpbnQgbWFyZ2luQm9yZGVyUGFkZGluZ0xvZ2ljYWxSaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1hcmdpbkxvZ2ljYWxSaWdodCgpICsgYm9yZGVyTG9naWNhbFJpZ2h0KCkgKyBwYWRk
aW5nTG9naWNhbFJpZ2h0KCk7IH0KLSAgICBpbnQgbWFyZ2luTG9naWNhbExlZnQoKSBjb25zdAor
ICAgIGZsb2F0IG1hcmdpbkJvcmRlclBhZGRpbmdMb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJu
IG1hcmdpbkxvZ2ljYWxMZWZ0KCkgKyBib3JkZXJMb2dpY2FsTGVmdCgpICsgcGFkZGluZ0xvZ2lj
YWxMZWZ0KCk7IH0KKyAgICBmbG9hdCBtYXJnaW5Cb3JkZXJQYWRkaW5nTG9naWNhbFJpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbWFyZ2luTG9naWNhbFJpZ2h0KCkgKyBib3JkZXJMb2dpY2FsUmlnaHQo
KSArIHBhZGRpbmdMb2dpY2FsUmlnaHQoKTsgfQorICAgIGZsb2F0IG1hcmdpbkxvZ2ljYWxMZWZ0
KCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmICghaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSgpKQog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBpc0hvcml6b250YWwoKSA/IGJv
eE1vZGVsT2JqZWN0KCktPm1hcmdpbkxlZnQoKSA6IGJveE1vZGVsT2JqZWN0KCktPm1hcmdpblRv
cCgpOwogICAgIH0KLSAgICBpbnQgbWFyZ2luTG9naWNhbFJpZ2h0KCkgY29uc3QKKyAgICBmbG9h
dCBtYXJnaW5Mb2dpY2FsUmlnaHQoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFpbmNsdWRl
TG9naWNhbFJpZ2h0RWRnZSgpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVy
biBpc0hvcml6b250YWwoKSA/IGJveE1vZGVsT2JqZWN0KCktPm1hcmdpblJpZ2h0KCkgOiBib3hN
b2RlbE9iamVjdCgpLT5tYXJnaW5Cb3R0b20oKTsKICAgICB9Ci0gICAgaW50IGJvcmRlckxvZ2lj
YWxMZWZ0KCkgY29uc3QKKyAgICBmbG9hdCBib3JkZXJMb2dpY2FsTGVmdCgpIGNvbnN0CiAgICAg
ewogICAgICAgICBpZiAoIWluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UoKSkKICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyByZW5kZXJlcigpLT5zdHls
ZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKSA6IHJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlclRvcFdp
ZHRoKCk7CiAgICAgfQotICAgIGludCBib3JkZXJMb2dpY2FsUmlnaHQoKSBjb25zdAorICAgIGZs
b2F0IGJvcmRlckxvZ2ljYWxSaWdodCgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoIWluY2x1
ZGVMb2dpY2FsUmlnaHRFZGdlKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0
dXJuIGlzSG9yaXpvbnRhbCgpID8gcmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyUmlnaHRXaWR0
aCgpIDogcmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tV2lkdGgoKTsKICAgICB9Ci0g
ICAgaW50IHBhZGRpbmdMb2dpY2FsTGVmdCgpIGNvbnN0CisgICAgZmxvYXQgcGFkZGluZ0xvZ2lj
YWxMZWZ0KCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmICghaW5jbHVkZUxvZ2ljYWxMZWZ0RWRn
ZSgpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBpc0hvcml6b250YWwo
KSA/IGJveE1vZGVsT2JqZWN0KCktPnBhZGRpbmdMZWZ0KCkgOiBib3hNb2RlbE9iamVjdCgpLT5w
YWRkaW5nVG9wKCk7CiAgICAgfQotICAgIGludCBwYWRkaW5nTG9naWNhbFJpZ2h0KCkgY29uc3QK
KyAgICBmbG9hdCBwYWRkaW5nTG9naWNhbFJpZ2h0KCkgY29uc3QKICAgICB7CiAgICAgICAgIGlm
ICghaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UoKSkKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAt
MTY1LDE0ICsxNjUsMTQgQEAKICAgICB2b2lkIGRldGVybWluZVNwYWNpbmdGb3JGbG93Qm94ZXMo
Ym9vbCBsYXN0TGluZSwgYm9vbCBpc0xvZ2ljYWxseUxhc3RSdW5XcmFwcGVkLCBSZW5kZXJPYmpl
Y3QqIGxvZ2ljYWxseUxhc3RSdW5SZW5kZXJlcik7CiAgICAgaW50IGdldEZsb3dTcGFjaW5nTG9n
aWNhbFdpZHRoKCk7CiAgICAgZmxvYXQgcGxhY2VCb3hlc0luSW5saW5lRGlyZWN0aW9uKGZsb2F0
IGxvZ2ljYWxMZWZ0LCBib29sJiBuZWVkc1dvcmRTcGFjaW5nLCBHbHlwaE92ZXJmbG93QW5kRmFs
bGJhY2tGb250c01hcCYpOwotICAgIHZvaWQgY29tcHV0ZUxvZ2ljYWxCb3hIZWlnaHRzKFJvb3RJ
bmxpbmVCb3gqLCBpbnQmIG1heFBvc2l0aW9uVG9wLCBpbnQmIG1heFBvc2l0aW9uQm90dG9tLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbWF4QXNjZW50LCBpbnQmIG1h
eERlc2NlbnQsIGJvb2wmIHNldE1heEFzY2VudCwgYm9vbCYgc2V0TWF4RGVzY2VudCwKKyAgICB2
b2lkIGNvbXB1dGVMb2dpY2FsQm94SGVpZ2h0cyhSb290SW5saW5lQm94KiwgZmxvYXQmIG1heFBv
c2l0aW9uVG9wLCBmbG9hdCYgbWF4UG9zaXRpb25Cb3R0b20sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmxvYXQmIG1heEFzY2VudCwgZmxvYXQmIG1heERlc2NlbnQsIGJvb2wm
IHNldE1heEFzY2VudCwgYm9vbCYgc2V0TWF4RGVzY2VudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIHN0cmljdE1vZGUsIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0Zv
bnRzTWFwJiwgRm9udEJhc2VsaW5lLCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmKTsKLSAgICB2b2lk
IGFkanVzdE1heEFzY2VudEFuZERlc2NlbnQoaW50JiBtYXhBc2NlbnQsIGludCYgbWF4RGVzY2Vu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heFBvc2l0aW9uVG9w
LCBpbnQgbWF4UG9zaXRpb25Cb3R0b20pOwotICAgIHZvaWQgcGxhY2VCb3hlc0luQmxvY2tEaXJl
Y3Rpb24oaW50IGxvZ2ljYWxUb3AsIGludCBtYXhIZWlnaHQsIGludCBtYXhBc2NlbnQsIGJvb2wg
c3RyaWN0TW9kZSwgaW50JiBsaW5lVG9wLCBpbnQmIGxpbmVCb3R0b20sIGJvb2wmIHNldExpbmVU
b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGxpbmVUb3BJbmNs
dWRpbmdNYXJnaW5zLCBpbnQmIGxpbmVCb3R0b21JbmNsdWRpbmdNYXJnaW5zLCBib29sJiBoYXNB
bm5vdGF0aW9uc0JlZm9yZSwgYm9vbCYgaGFzQW5ub3RhdGlvbnNBZnRlciwgRm9udEJhc2VsaW5l
KTsKLSAgICB2b2lkIGZsaXBMaW5lc0luQmxvY2tEaXJlY3Rpb24oaW50IGxpbmVUb3AsIGludCBs
aW5lQm90dG9tKTsKKyAgICB2b2lkIGFkanVzdE1heEFzY2VudEFuZERlc2NlbnQoZmxvYXQmIG1h
eEFzY2VudCwgZmxvYXQmIG1heERlc2NlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsb2F0IG1heFBvc2l0aW9uVG9wLCBmbG9hdCBtYXhQb3NpdGlvbkJvdHRvbSk7Cisg
ICAgdm9pZCBwbGFjZUJveGVzSW5CbG9ja0RpcmVjdGlvbihmbG9hdCBsb2dpY2FsVG9wLCBmbG9h
dCBtYXhIZWlnaHQsIGZsb2F0IG1heEFzY2VudCwgYm9vbCBzdHJpY3RNb2RlLCBmbG9hdCYgbGlu
ZVRvcCwgZmxvYXQmIGxpbmVCb3R0b20sIGJvb2wmIHNldExpbmVUb3AsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCYgbGluZVRvcEluY2x1ZGluZ01hcmdpbnMsIGZs
b2F0JiBsaW5lQm90dG9tSW5jbHVkaW5nTWFyZ2lucywgYm9vbCYgaGFzQW5ub3RhdGlvbnNCZWZv
cmUsIGJvb2wmIGhhc0Fubm90YXRpb25zQWZ0ZXIsIEZvbnRCYXNlbGluZSk7CisgICAgdm9pZCBm
bGlwTGluZXNJbkJsb2NrRGlyZWN0aW9uKGZsb2F0IGxpbmVUb3AsIGZsb2F0IGxpbmVCb3R0b20p
OwogICAgIGJvb2wgcmVxdWlyZXNJZGVvZ3JhcGhpY0Jhc2VsaW5lKGNvbnN0IEdseXBoT3ZlcmZs
b3dBbmRGYWxsYmFja0ZvbnRzTWFwJikgY29uc3Q7CiAKICAgICBpbnQgY29tcHV0ZU92ZXJBbm5v
dGF0aW9uQWRqdXN0bWVudChpbnQgYWxsb3dlZFBvc2l0aW9uKSBjb25zdDsKQEAgLTIyNiw5ICsy
MjYsOSBAQAogICAgIHsgCiAgICAgICAgIHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+
dmlzdWFsT3ZlcmZsb3dSZWN0KCkgOiBlbmNsb3NpbmdJbnRSZWN0KGZyYW1lUmVjdEluY2x1ZGlu
Z0xpbmVIZWlnaHQobGluZVRvcCwgbGluZUJvdHRvbSkpOwogICAgIH0KLSAgICBpbnQgbG9naWNh
bExlZnRWaXN1YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyAoaXNIb3Jp
em9udGFsKCkgPyBtX292ZXJmbG93LT5taW5YVmlzdWFsT3ZlcmZsb3coKSA6IG1fb3ZlcmZsb3ct
Pm1pbllWaXN1YWxPdmVyZmxvdygpKSA6IGxvZ2ljYWxMZWZ0KCk7IH0KLSAgICBpbnQgbG9naWNh
bFJpZ2h0VmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gKGlzSG9y
aXpvbnRhbCgpID8gbV9vdmVyZmxvdy0+bWF4WFZpc3VhbE92ZXJmbG93KCkgOiBtX292ZXJmbG93
LT5tYXhZVmlzdWFsT3ZlcmZsb3coKSkgOiBjZWlsZihsb2dpY2FsUmlnaHQoKSk7IH0KLSAgICBp
bnQgbG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KGludCBsaW5lVG9wKSBjb25zdAorICAgIGZsb2F0
IGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8g
KGlzSG9yaXpvbnRhbCgpID8gbV9vdmVyZmxvdy0+bWluWFZpc3VhbE92ZXJmbG93KCkgOiBtX292
ZXJmbG93LT5taW5ZVmlzdWFsT3ZlcmZsb3coKSkgOiBsb2dpY2FsTGVmdCgpOyB9CisgICAgZmxv
YXQgbG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93
ID8gKGlzSG9yaXpvbnRhbCgpID8gbV9vdmVyZmxvdy0+bWF4WFZpc3VhbE92ZXJmbG93KCkgOiBt
X292ZXJmbG93LT5tYXhZVmlzdWFsT3ZlcmZsb3coKSkgOiBjZWlsZihsb2dpY2FsUmlnaHQoKSk7
IH0KKyAgICBmbG9hdCBsb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3coaW50IGxpbmVUb3ApIGNvbnN0
CiAgICAgewogICAgICAgICBpZiAobV9vdmVyZmxvdykKICAgICAgICAgICAgIHJldHVybiBpc0hv
cml6b250YWwoKSA/IG1fb3ZlcmZsb3ctPm1pbllWaXN1YWxPdmVyZmxvdygpIDogbV9vdmVyZmxv
dy0+bWluWFZpc3VhbE92ZXJmbG93KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVSb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVSb3cuaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVSb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTMgKzUzLDEzIEBA
CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLSAg
ICB2aXJ0dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpOworICAgIHZpcnR1YWwgRmxvYXRSZWN0IGNs
aXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyKTsKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIs
IGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAKICAg
ICAvLyBUaGUgb25seSB0aW1lIHJvd3MgZ2V0IGEgbGF5ZXIgaXMgd2hlbiB0aGV5IGhhdmUgdHJh
bnNwYXJlbmN5LgogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1
cm4gaXNUcmFuc3BhcmVudCgpIHx8IGhhc092ZXJmbG93Q2xpcCgpIHx8IGhhc1RyYW5zZm9ybSgp
IHx8IGhhc01hc2soKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNv
bnN0IEludFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0
IEZsb2F0UG9pbnQmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBlZElt
YWdlUHRyLCBjb25zdCBJbnRSZWN0KiA9IDApOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAkocmV2aXNpb24gODg0OTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNTYsOCArNTYsOCBAQAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJFbWJlZGRlZE9iamVjdCI7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNFbWJlZGRlZE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZp
cnR1YWwgdm9pZCBwYWludFJlcGxhY2VkKFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7Ci0g
ICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CisgICAg
dmlydHVhbCB2b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRQb2ludCYp
OworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBGbG9hdFBvaW50Jik7
CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCBib29sIHJl
cXVpcmVzTGF5ZXIoKSBjb25zdDsKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAKICAgICB2b2lkIHNl
dE1pc3NpbmdQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQoYm9vbCk7CiAgICAgYm9vbCBpc0luTWlz
c2luZ1BsdWdpbkluZGljYXRvcihNb3VzZUV2ZW50Kik7Ci0gICAgYm9vbCBnZXRSZXBsYWNlbWVu
dFRleHRHZW9tZXRyeShjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEZsb2F0UmVj
dCYgY29udGVudFJlY3QsIFBhdGgmLCBGbG9hdFJlY3QmIHJlcGxhY2VtZW50VGV4dFJlY3QsIEZv
bnQmLCBUZXh0UnVuJiwgZmxvYXQmIHRleHRXaWR0aCk7CisgICAgYm9vbCBnZXRSZXBsYWNlbWVu
dFRleHRHZW9tZXRyeShjb25zdCBGbG9hdFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgRmxvYXRS
ZWN0JiBjb250ZW50UmVjdCwgUGF0aCYsIEZsb2F0UmVjdCYgcmVwbGFjZW1lbnRUZXh0UmVjdCwg
Rm9udCYsIFRleHRSdW4mLCBmbG9hdCYgdGV4dFdpZHRoKTsKIAogICAgIFN0cmluZyBtX3JlcGxh
Y2VtZW50VGV4dDsKICAgICBib29sIG1faGFzRmFsbGJhY2tDb250ZW50OyAvLyBGSVhNRTogVGhp
cyBiZWxvbmdzIG9uIEhUTUxPYmplY3RFbGVtZW50LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
OCw3ICszMTgsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGFkanVzdE92ZXJmbG93KSB7
Ci0gICAgICAgICAgICBJbnRSZWN0IG1hcmtlclJlY3QobWFya2VyTG9naWNhbExlZnQgKyBsaW5l
T2Zmc2V0LCBibG9ja09mZnNldCwgbV9tYXJrZXItPndpZHRoKCksIG1fbWFya2VyLT5oZWlnaHQo
KSk7CisgICAgICAgICAgICBGbG9hdFJlY3QgbWFya2VyUmVjdChtYXJrZXJMb2dpY2FsTGVmdCAr
IGxpbmVPZmZzZXQsIGJsb2NrT2Zmc2V0LCBtX21hcmtlci0+d2lkdGgoKSwgbV9tYXJrZXItPmhl
aWdodCgpKTsKICAgICAgICAgICAgIGlmICghc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSkKICAgICAgICAgICAgICAgICBtYXJrZXJSZWN0ID0gbWFya2VyUmVjdC50cmFuc3Bvc2Vk
UmVjdCgpOwogICAgICAgICAgICAgUmVuZGVyQm94KiBvID0gbV9tYXJrZXI7CkBAIC0zMzAsOSAr
MzMwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgcHJvcGFnYXRlVmlzdWFsT3ZlcmZsb3cgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICBpZiAoby0+aXNSZW5kZXJCbG9jaygpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChwcm9wYWdhdGVWaXN1YWxPdmVyZmxvdykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRvUmVuZGVyQmxvY2sobyktPmFkZFZpc3VhbE92ZXJmbG93KG1hcmtlclJlY3Qp
OworICAgICAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhvKS0+YWRkVmlzdWFsT3Zl
cmZsb3coZW5jbG9zaW5nSW50UmVjdChtYXJrZXJSZWN0KSk7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChwcm9wYWdhdGVMYXlvdXRPdmVyZmxvdykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRv
UmVuZGVyQmxvY2sobyktPmFkZExheW91dE92ZXJmbG93KG1hcmtlclJlY3QpOworICAgICAgICAg
ICAgICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhvKS0+YWRkTGF5b3V0T3ZlcmZsb3coZW5jbG9z
aW5nSW50UmVjdChtYXJrZXJSZWN0KSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGlmIChvLT5oYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGFn
YXRlTGF5b3V0T3ZlcmZsb3cgPSBmYWxzZTsKQEAgLTM0NCw3ICszNDQsNyBAQAogICAgIH0KIH0K
IAotdm9pZCBSZW5kZXJMaXN0SXRlbTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFBvaW50JiBwYWludE9mZnNldCkKK3ZvaWQgUmVuZGVyTGlzdEl0ZW06OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBp
ZiAoIWxvZ2ljYWxIZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5j
cHAJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMiw3ICszMzIsNyBA
QAogICAgIHJldHVybiBjb250YWluZXI7CiB9CiAKLWludCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6
YmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0
aW9uTW9kZSBsaW5lRGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUp
IGNvbnN0CitmbG9hdCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6YmFzZWxpbmVQb3NpdGlvbihGb250
QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSBsaW5lRGlyZWN0aW9u
LCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0CiB7CiAgICAgaWYgKG1f
aXNTdGFja2VkKQogICAgICAgICByZXR1cm4gbV9zdHJldGNoSGVpZ2h0ICogMiAvIDMgLSAobV9z
dHJldGNoSGVpZ2h0IC0gc3RhdGljX2Nhc3Q8aW50PihtX3N0cmV0Y2hIZWlnaHQgLyBnT3BlcmF0
b3JFeHBhbnNpb24pKSAvIDI7ICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suaAkocmV2aXNpb24gODg0OTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICB2aXJ0dWFsIHZvaWQgc3RyZXRjaFRvSGVp
Z2h0KGludCBoZWlnaHQpOwogCiAjaWYgRU5BQkxFKERFQlVHX01BVEhfTEFZT1VUKQotICAgIHZp
cnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOworICAgIHZpcnR1
YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBGbG9hdFBvaW50Jik7CiAjZW5kaWYKICAg
ICAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MT3BlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBACiAgICAgdmlydHVhbCB2b2lkIHN0cmV0Y2hUb0hl
aWdodChpbnQgcGl4ZWxIZWlnaHQpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVu
dCgpOyAKICAgICB2aXJ0dWFsIGJvb2wgaXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0KiwgUmVu
ZGVyU3R5bGUqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKEZvbnRC
YXNlbGluZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25N
b2RlID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0
IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIGZpcnN0TGluZSwgTGluZURpcmVj
dGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNv
bnN0OwogICAgICAgICAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJv
b3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjYsMTQgKzY2LDE0IEBACiB7CiB9CiAKLXZvaWQgUmVuZGVyTWF0aE1MU3F1YXJl
Um9vdDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQp
Cit2b2lkIFJlbmRlck1hdGhNTFNxdWFyZVJvb3Q6OnBhaW50KFBhaW50SW5mbyYgaW5mbywgY29u
c3QgRmxvYXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgUmVuZGVyTWF0aE1MQmxvY2s6OnBh
aW50KGluZm8sIHBhaW50T2Zmc2V0KTsKICAgIAogICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEludFBvaW50IGFkanVz
dGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CisgICAgRmxvYXRQb2lu
dCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOwogCiAgICAg
aW50IG1heEhlaWdodCA9IDA7CiAgICAgaW50IHdpZHRoID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24u
Y3BwCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDcg
QEAKIAogfQogCi12b2lkIFJlbmRlck1hdGhNTEZyYWN0aW9uOjpwYWludChQYWludEluZm8mIGlu
Zm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKK3ZvaWQgUmVuZGVyTWF0aE1MRnJhY3Rp
b246OnBhaW50KFBhaW50SW5mbyYgaW5mbywgY29uc3QgRmxvYXRQb2ludCYgcGFpbnRPZmZzZXQp
CiB7CiAgICAgUmVuZGVyTWF0aE1MQmxvY2s6OnBhaW50KGluZm8sIHBhaW50T2Zmc2V0KTsKICAg
ICBpZiAoaW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgaW5mby5waGFzZSAhPSBQ
YWludFBoYXNlRm9yZWdyb3VuZCkKQEAgLTE1Myw3ICsxNTMsNyBAQAogICAgICAgICAgICAgdmVy
dGljYWxPZmZzZXQgPSBudW1lcmF0b3ItPm9mZnNldEhlaWdodCgpOyAgICAgICAgCiAgICAgfQog
ICAgIAotICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxv
Y2F0aW9uKCk7CisgICAgRmxvYXRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZz
ZXQgKyBsb2NhdGlvbigpOwogICAgIGFkanVzdGVkUGFpbnRPZmZzZXQuc2V0WShhZGp1c3RlZFBh
aW50T2Zmc2V0LnkoKSArIHZlcnRpY2FsT2Zmc2V0KTsKICAgICAKICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmluZm8uY29udGV4dCk7CkBAIC0xNjIsMTAgKzE2Miwx
MCBAQAogICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAg
IGluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Ioc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENv
bG9yKENTU1Byb3BlcnR5Q29sb3IpLCBDb2xvclNwYWNlU1JHQik7CiAgICAgCi0gICAgaW5mby5j
b250ZXh0LT5kcmF3TGluZShhZGp1c3RlZFBhaW50T2Zmc2V0LCBJbnRQb2ludChhZGp1c3RlZFBh
aW50T2Zmc2V0LngoKSArIG9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpKSk7
CisgICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShyb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWlu
dE9mZnNldCksIEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgb2Zmc2V0V2lkdGgo
KSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpKTsKIH0KIAotaW50IFJlbmRlck1hdGhNTEZyYWN0
aW9uOjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCBmaXJzdExpbmUsIExpbmVE
aXJlY3Rpb25Nb2RlIGxpbmVEaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUgbGluZVBvc2l0aW9u
TW9kZSkgY29uc3QKK2Zsb2F0IFJlbmRlck1hdGhNTEZyYWN0aW9uOjpiYXNlbGluZVBvc2l0aW9u
KEZvbnRCYXNlbGluZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGxpbmVEaXJl
Y3Rpb24sIExpbmVQb3NpdGlvbk1vZGUgbGluZVBvc2l0aW9uTW9kZSkgY29uc3QKIHsKICAgICBp
ZiAoZmlyc3RDaGlsZCgpICYmIGZpcnN0Q2hpbGQoKS0+aXNSZW5kZXJNYXRoTUxCbG9jaygpKSB7
CiAgICAgICAgIFJlbmRlck1hdGhNTEJsb2NrKiBudW1lcmF0b3IgPSB0b1JlbmRlck1hdGhNTEJs
b2NrKGZpcnN0Q2hpbGQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFJvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE5LDcgKzExOSw3IEBACiAgICAgCiB9ICAgIAogCi1pbnQgUmVuZGVyTWF0aE1M
Um93OjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCBmaXJzdExpbmUsIExpbmVE
aXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGluZVBvc2l0aW9uTW9kZSBsaW5lUG9zaXRpb25Nb2Rl
KSBjb25zdAorZmxvYXQgUmVuZGVyTWF0aE1MUm93OjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNl
bGluZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGluZVBv
c2l0aW9uTW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdAogewogICAgIGlmIChmaXJzdENoaWxk
KCkgJiYgZmlyc3RDaGlsZCgpLT5pc1JlbmRlck1hdGhNTEJsb2NrKCkpIHsKICAgICAgICAgUmVu
ZGVyTWF0aE1MQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJNYXRoTUxCbG9jayhmaXJzdENoaWxkKCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVh
cmVSb290LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxTcXVhcmVSb290LmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDcgKzM1LDcgQEAKIGNsYXNzIFJlbmRlck1hdGhNTFNxdWFyZVJvb3QgOiBwdWJs
aWMgUmVuZGVyTWF0aE1MQmxvY2sgewogcHVibGljOgogICAgIFJlbmRlck1hdGhNTFNxdWFyZVJv
b3QoTm9kZSogZnJhY3Rpb24pOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBj
b25zdCBJbnRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25z
dCBGbG9hdFBvaW50Jik7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwog
fTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVW5k
ZXJPdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNDMsNyArMjQzLDcgQEAKICAgICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7CiB9
CiAKLWludCBSZW5kZXJNYXRoTUxVbmRlck92ZXI6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2Vs
aW5lLCBib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9z
aXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0CitmbG9hdCBSZW5kZXJNYXRoTUxVbmRl
ck92ZXI6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIGZpcnN0TGluZSwgTGlu
ZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1v
ZGUpIGNvbnN0CiB7CiAgICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOwog
ICAgIGlmICghY3VycmVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MRnJhY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmgJKHJldmlzaW9uIDg4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBACiAgICAgUmVuZGVyTWF0aE1MRnJhY3Rpb24o
RWxlbWVudCogZnJhY3Rpb24pOwogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmpl
Y3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CiAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7Ci0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlv
bihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBv
c2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3Q7IAotICAgIHZpcnR1
YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOworICAgIHZpcnR1YWwg
ZmxvYXQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5l
RGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGlu
ZSkgY29uc3Q7IAorICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBGbG9h
dFBvaW50Jik7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogcHJpdmF0
ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxSb3cuaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFJvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBA
CiAgICAgUmVuZGVyTWF0aE1MUm93KE5vZGUqIGNvbnRhaW5lcik7CiAgICAgdmlydHVhbCBib29s
IGlzUmVuZGVyTWF0aE1MUm93KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwg
aW50IG5vbk9wZXJhdG9ySGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQ
b3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwg
TGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3Q7ICAgIAor
ICAgIHZpcnR1YWwgZmxvYXQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmly
c3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25D
b250YWluaW5nTGluZSkgY29uc3Q7ICAgIAogICAgIHZpcnR1YWwgdm9pZCBzdHJldGNoVG9IZWln
aHQoaW50KSB7fQogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxVbmRlck92ZXIuaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw3IEBACiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgYm9vbCBo
YXNCYXNlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgaW50IG5vbk9wZXJh
dG9ySGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihGb250
QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9u
TW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3Q7ICAgIAorICAgIHZpcnR1YWwg
ZmxvYXQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5l
RGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGlu
ZSkgY29uc3Q7ICAgIAogICAgIHZpcnR1YWwgdm9pZCBzdHJldGNoVG9IZWlnaHQoaW50IHBpeGVs
SGVpZ2h0KTsKIHByaXZhdGU6CiAgICAgZW51bSBVbmRlck92ZXJUeXBlIHsgVW5kZXIsIE92ZXIs
IFVuZGVyT3ZlciB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxTdWJTdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MU3ViU3VwLmNwcAkocmV2aXNpb24gODg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFN1YlN1cC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3Miw3ICsxNzIsNyBAQAogICAgIH0gICAgCiB9CiAKLWludCBSZW5kZXJN
YXRoTUxTdWJTdXA6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIGZpcnN0TGlu
ZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3Np
dGlvbk1vZGUpIGNvbnN0CitmbG9hdCBSZW5kZXJNYXRoTUxTdWJTdXA6OmJhc2VsaW5lUG9zaXRp
b24oRm9udEJhc2VsaW5lLCBib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0
aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0CiB7CiAgICAgUmVu
ZGVyT2JqZWN0KiBiYXNlID0gZmlyc3RDaGlsZCgpOwogICAgIGlmICghYmFzZSkgCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9v
dC5jcHAJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQAog
ICAgIH0KIH0KICAgICAKLXZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCit2b2lkIFJlbmRlck1hdGhNTFJvb3Q6
OnBhaW50KFBhaW50SW5mbyYgaW5mbywgY29uc3QgRmxvYXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7
CiAgICAgUmVuZGVyTWF0aE1MQmxvY2s6OnBhaW50KGluZm8sIHBhaW50T2Zmc2V0KTsKICAgICAK
QEAgLTEwNCw3ICsxMDQsNyBAQAogICAgIGlmICghZmlyc3RDaGlsZCgpIHx8ICFsYXN0Q2hpbGQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9
IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKKyAgICBGbG9hdFBvaW50IGFkanVzdGVkUGFpbnRP
ZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CiAgICAgCiAgICAgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIGluZGV4Qm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChsYXN0Q2hpbGQoKSk7
CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TFN1YlN1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MU3ViU3VwLmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTdWJTdXAuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQAogICAgIHZpcnR1YWwgYm9vbCBoYXNCYXNlKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIHZpcnR1YWwgaW50IG5vbk9wZXJhdG9ySGVpZ2h0KCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHN0cmV0Y2hUb0hlaWdodChpbnQgcGl4ZWxIZWlnaHQpOwotICAgIHZpcnR1
YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIGZpcnN0TGluZSwgTGlu
ZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xp
bmUpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxp
bmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9
IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIHZvaWQgbGF5b3V0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFJvb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMzYsNyArMzYsNyBAQAogcHVibGljOgogICAgIFJlbmRlck1hdGhNTFJvb3QoTm9kZSog
ZnJhY3Rpb24pOwogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxk
LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50
KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBh
aW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0KCk7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAJKHJldmlzaW9uIDg4NDk2KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc1LDE0ICs3NSwxNCBAQAogfQogCiAjaWYgRU5BQkxFKERFQlVHX01BVEhf
TEFZT1VUKQotdm9pZCBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBj
b25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCit2b2lkIFJlbmRlck1hdGhNTEJsb2NrOjpwYWlu
dChQYWludEluZm8mIGluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAg
IFJlbmRlckJsb2NrOjpwYWludChpbmZvLCBwYWludE9mZnNldCk7CiAgICAgCiAgICAgaWYgKGlu
Zm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8IGluZm8ucGhhc2UgIT0gUGFpbnRQaGFz
ZUZvcmVncm91bmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFBvaW50IGFkanVzdGVkUGFp
bnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CisgICAgRmxvYXRQb2ludCBhZGp1
c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOwogCiAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCppbmZvLmNvbnRleHQpOwogICAgIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUuaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEx
ICs1NywxMSBAQAogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBoYXNDb250cm9sQ2xpcCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgSW50UmVjdCBjb250cm9sQ2xpcFJlY3QoY29uc3QgSW50UG9p
bnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3QgY29udHJvbENsaXBSZWN0KGNvbnN0IEZs
b2F0UG9pbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc3VidHJlZUhhc0NoYW5nZWQoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRQb2ludCYpOwogICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9p
bnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0
QWN0aW9uKTsKQEAgLTY5LDEwICs2OSwxMCBAQAogICAgIHZpcnR1YWwgdm9pZCBhdXRvc2Nyb2xs
KCk7CiAKICAgICAvLyBTdWJjbGFzc2VkIHRvIGZvcndhcmQgdG8gb3VyIGlubmVyIGRpdi4KLSAg
ICB2aXJ0dWFsIGludCBzY3JvbGxMZWZ0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xs
VG9wKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGludCBzY3JvbGxIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IHNjcm9s
bExlZnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IHNjcm9sbFRvcCgpIGNvbnN0OworICAg
IHZpcnR1YWwgZmxvYXQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IHNj
cm9sbEhlaWdodCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxMZWZ0KGludCk7
CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFRvcChpbnQpOwogICAgIHZpcnR1YWwgYm9vbCBz
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGll
ciA9IDEsIE5vZGUqKiBzdG9wTm9kZSA9IDApOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lbnVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lbnVMaXN0LmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcg
QEAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBoYXNDb250cm9sQ2xpcCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFs
IEludFJlY3QgY29udHJvbENsaXBSZWN0KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgdmly
dHVhbCBJbnRSZWN0IGNvbnRyb2xDbGlwUmVjdChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAK
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVu
ZGVyTWVudUxpc3QiOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
dWxsU2NyZWVuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZ1bGxTY3JlZW4uaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRnVsbFNjcmVlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRl
ckZ1bGxTY3JlZW4iOyB9CiAKICAgICBSZW5kZXJCbG9jayogcGxhY2Vob2xkZXIoKSB7IHJldHVy
biBtX3BsYWNlaG9sZGVyOyB9Ci0gICAgdm9pZCBjcmVhdGVQbGFjZWhvbGRlcihQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiwgY29uc3QgSW50UmVjdCYgZnJhbWVSZWN0KTsKKyAgICB2b2lkIGNyZWF0
ZVBsYWNlaG9sZGVyKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+LCBjb25zdCBGbG9hdFJlY3QmIGZy
YW1lUmVjdCk7CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlRnVs
bFNjcmVlblN0eWxlKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAJKHJldmlzaW9uIDg4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5l
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgc2V0SGVpZ2h0KGhl
aWdodCgpICsgbGluZUhlaWdodCAqIHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQqPihu
b2RlKCkpLT5yb3dzKCkpOwogfQogCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OmJh
c2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSwgYm9vbCBmaXJzdExpbmUs
IExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGluZVBvc2l0aW9uTW9kZSBsaW5lUG9zaXRp
b25Nb2RlKSBjb25zdAorZmxvYXQgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OmJhc2VsaW5l
UG9zaXRpb24oRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSwgYm9vbCBmaXJzdExpbmUsIExpbmVE
aXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGluZVBvc2l0aW9uTW9kZSBsaW5lUG9zaXRpb25Nb2Rl
KSBjb25zdAogewogICAgIHJldHVybiBSZW5kZXJCb3g6OmJhc2VsaW5lUG9zaXRpb24oYmFzZWxp
bmVUeXBlLCBmaXJzdExpbmUsIGRpcmVjdGlvbiwgbGluZVBvc2l0aW9uTW9kZSk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuY3Bw
CShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3Jv
bGxiYXJQYXJ0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1OSw3IEBACiAgICAgfQog
fQogCi12b2lkIFJlbmRlclNjcm9sbGJhclBhcnQ6OnBhaW50SW50b1JlY3QoR3JhcGhpY3NDb250
ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3ZvaWQgUmVuZGVyU2Nyb2xsYmFyUGFydDo6cGFpbnRJbnRvUmVjdChH
cmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgcGFpbnRP
ZmZzZXQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgLy8gTWFrZSBzdXJlIG91ciBkaW1l
bnNpb25zIG1hdGNoIHRoZSByZWN0LgogICAgIHNldExvY2F0aW9uKHJlY3QubG9jYXRpb24oKSAt
IHRvU2l6ZShwYWludE9mZnNldCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZyYW1lU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZyYW1lU2V0LmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZyYW1lU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAKIAog
ICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBv
aW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVz
dEFjdGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBv
aW50Jik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9p
bnQmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0KiwgUmVu
ZGVyU3R5bGUqKSBjb25zdDsKIAogICAgIGlubGluZSBIVE1MRnJhbWVTZXRFbGVtZW50KiBmcmFt
ZVNldCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RN
YXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0TWFya2VyLmNwcAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMDEsNyArMTEwMSw3
IEBACiAgICAgcmV0dXJuIEludFJlY3QobmV3TG9naWNhbFRvcCwgMCwgcm9vdC0+c2VsZWN0aW9u
SGVpZ2h0KCksIGhlaWdodCgpKTsKIH0KIAotdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQordm9pZCBS
ZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQ
b2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBo
YXNlRm9yZWdyb3VuZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTEwOSw3ICsxMTA5LDcgQEAKICAg
ICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEludFBvaW50IGJveE9yaWdpbihwYWludE9mZnNldCArIGxvY2F0aW9uKCkpOworICAg
IEludFBvaW50IGJveE9yaWdpbihyb3VuZGVkSW50UG9pbnQocGFpbnRPZmZzZXQgKyBsb2NhdGlv
bigpKSk7CiAgICAgSW50UmVjdCBvdmVyZmxvd1JlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KCkpOwog
ICAgIG92ZXJmbG93UmVjdC5tb3ZlQnkoYm94T3JpZ2luKTsKICAgICBvdmVyZmxvd1JlY3QuaW5m
bGF0ZShtYXhpbWFsT3V0bGluZVNpemUocGFpbnRJbmZvLnBoYXNlKSk7CkBAIC0xNTMzLDE0ICsx
NTMzLDE0IEBACiAgICAgc3R5bGUoKS0+c2V0TWFyZ2luRW5kKExlbmd0aChtYXJnaW5FbmQsIEZp
eGVkKSk7CiB9CiAKLWludCBSZW5kZXJMaXN0TWFya2VyOjpsaW5lSGVpZ2h0KGJvb2wgZmlyc3RM
aW5lLCBMaW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUgbGluZVBv
c2l0aW9uTW9kZSkgY29uc3QKK2Zsb2F0IFJlbmRlckxpc3RNYXJrZXI6OmxpbmVIZWlnaHQoYm9v
bCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGluZVBvc2l0aW9uTW9k
ZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdAogewogICAgIGlmICghaXNJbWFnZSgpKQogICAgICAg
ICByZXR1cm4gbV9saXN0SXRlbS0+bGluZUhlaWdodChmaXJzdExpbmUsIGRpcmVjdGlvbiwgUG9z
aXRpb25PZkludGVyaW9yTGluZUJveGVzKTsKICAgICByZXR1cm4gUmVuZGVyQm94OjpsaW5lSGVp
Z2h0KGZpcnN0TGluZSwgZGlyZWN0aW9uLCBsaW5lUG9zaXRpb25Nb2RlKTsKIH0KIAotaW50IFJl
bmRlckxpc3RNYXJrZXI6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlw
ZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGluZVBvc2l0
aW9uTW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdAorZmxvYXQgUmVuZGVyTGlzdE1hcmtlcjo6
YmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlLCBib29sIGZpcnN0TGlu
ZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3Np
dGlvbk1vZGUpIGNvbnN0CiB7CiAgICAgaWYgKCFpc0ltYWdlKCkpCiAgICAgICAgIHJldHVybiBt
X2xpc3RJdGVtLT5iYXNlbGluZVBvc2l0aW9uKGJhc2VsaW5lVHlwZSwgZmlyc3RMaW5lLCBkaXJl
Y3Rpb24sIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcyk7CkBAIC0xNjk4LDcgKzE2OTgsNyBA
QAogICAgIGNvbnRhaW5pbmdCbG9jaygpLT5zZXRTZWxlY3Rpb25TdGF0ZShzdGF0ZSk7CiB9CiAK
LUludFJlY3QgUmVuZGVyTGlzdE1hcmtlcjo6c2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoUmVuZGVy
Qm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRl
bnQpCitGbG9hdFJlY3QgUmVuZGVyTGlzdE1hcmtlcjo6c2VsZWN0aW9uUmVjdEZvclJlcGFpbnQo
UmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJs
ZUNvbnRlbnQpCiB7CiAgICAgQVNTRVJUKCFuZWVkc0xheW91dCgpKTsKIApAQCAtMTcwNiwxMiAr
MTcwNiwxMiBAQAogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCiAgICAgUm9vdElubGluZUJv
eCogcm9vdCA9IGlubGluZUJveFdyYXBwZXIoKS0+cm9vdCgpOwotICAgIEludFJlY3QgcmVjdCgw
LCByb290LT5zZWxlY3Rpb25Ub3AoKSAtIHkoKSwgd2lkdGgoKSwgcm9vdC0+c2VsZWN0aW9uSGVp
Z2h0KCkpOworICAgIEZsb2F0UmVjdCByZWN0KDAsIHJvb3QtPnNlbGVjdGlvblRvcCgpIC0geSgp
LCB3aWR0aCgpLCByb290LT5zZWxlY3Rpb25IZWlnaHQoKSk7CiAgICAgICAgICAgICAKICAgICBp
ZiAoY2xpcFRvVmlzaWJsZUNvbnRlbnQpCiAgICAgICAgIGNvbXB1dGVSZWN0Rm9yUmVwYWludChy
ZXBhaW50Q29udGFpbmVyLCByZWN0KTsKICAgICBlbHNlCi0gICAgICAgIHJlY3QgPSBsb2NhbFRv
Q29udGFpbmVyUXVhZChGbG9hdFJlY3QocmVjdCksIHJlcGFpbnRDb250YWluZXIpLmVuY2xvc2lu
Z0JvdW5kaW5nQm94KCk7CisgICAgICAgIHJlY3QgPSBsb2NhbFRvQ29udGFpbmVyUXVhZChyZWN0
LCByZXBhaW50Q29udGFpbmVyKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogICAgIAogICAgIHJl
dHVybiByZWN0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93
Qm94LmNwcAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0OCw3ICs0NDgsNyBAQAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotdm9pZCBJbmxpbmVGbG93Qm94OjphZGp1c3RNYXhBc2NlbnRBbmRE
ZXNjZW50KGludCYgbWF4QXNjZW50LCBpbnQmIG1heERlc2NlbnQsIGludCBtYXhQb3NpdGlvblRv
cCwgaW50IG1heFBvc2l0aW9uQm90dG9tKQordm9pZCBJbmxpbmVGbG93Qm94OjphZGp1c3RNYXhB
c2NlbnRBbmREZXNjZW50KGZsb2F0JiBtYXhBc2NlbnQsIGZsb2F0JiBtYXhEZXNjZW50LCBmbG9h
dCBtYXhQb3NpdGlvblRvcCwgZmxvYXQgbWF4UG9zaXRpb25Cb3R0b20pCiB7CiAgICAgZm9yIChJ
bmxpbmVCb3gqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0T25M
aW5lKCkpIHsKICAgICAgICAgLy8gVGhlIGNvbXB1dGVkIGxpbmVoZWlnaHQgbmVlZHMgdG8gYmUg
ZXh0ZW5kZWQgZm9yIHRoZQpAQCAtNDc1LDggKzQ3NSw4IEBACiAgICAgfQogfQogCi12b2lkIElu
bGluZUZsb3dCb3g6OmNvbXB1dGVMb2dpY2FsQm94SGVpZ2h0cyhSb290SW5saW5lQm94KiByb290
Qm94LCBpbnQmIG1heFBvc2l0aW9uVG9wLCBpbnQmIG1heFBvc2l0aW9uQm90dG9tLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBtYXhBc2NlbnQsIGlu
dCYgbWF4RGVzY2VudCwgYm9vbCYgc2V0TWF4QXNjZW50LCBib29sJiBzZXRNYXhEZXNjZW50LAor
dm9pZCBJbmxpbmVGbG93Qm94Ojpjb21wdXRlTG9naWNhbEJveEhlaWdodHMoUm9vdElubGluZUJv
eCogcm9vdEJveCwgZmxvYXQmIG1heFBvc2l0aW9uVG9wLCBmbG9hdCYgbWF4UG9zaXRpb25Cb3R0
b20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCYg
bWF4QXNjZW50LCBmbG9hdCYgbWF4RGVzY2VudCwgYm9vbCYgc2V0TWF4QXNjZW50LCBib29sJiBz
ZXRNYXhEZXNjZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBzdHJpY3RNb2RlLCBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCYgdGV4
dEJveERhdGFNYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlLCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmIHZlcnRp
Y2FsUG9zaXRpb25DYWNoZSkKIHsKQEAgLTUwMSw4ICs1MDEsOCBAQAogICAgIAogICAgIGlmIChp
c1Jvb3RJbmxpbmVCb3goKSkgewogICAgICAgICAvLyBFeGFtaW5lIG91ciByb290IGJveC4KLSAg
ICAgICAgaW50IGFzY2VudCA9IDA7Ci0gICAgICAgIGludCBkZXNjZW50ID0gMDsKKyAgICAgICAg
ZmxvYXQgYXNjZW50ID0gMDsKKyAgICAgICAgZmxvYXQgZGVzY2VudCA9IDA7CiAgICAgICAgIHJv
b3RCb3gtPmFzY2VudEFuZERlc2NlbnRGb3JCb3gocm9vdEJveCwgdGV4dEJveERhdGFNYXAsIGFz
Y2VudCwgZGVzY2VudCwgYWZmZWN0c0FzY2VudCwgYWZmZWN0c0Rlc2NlbnQpOwogICAgICAgICBp
ZiAoc3RyaWN0TW9kZSB8fCBoYXNUZXh0Q2hpbGRyZW4oKSB8fCAoIWNoZWNrQ2hpbGRyZW4gJiYg
aGFzVGV4dERlc2NlbmRhbnRzKCkpKSB7CiAgICAgICAgICAgICBpZiAobWF4QXNjZW50IDwgYXNj
ZW50IHx8ICFzZXRNYXhBc2NlbnQpIHsKQEAgLTUzMywxMSArNTMzLDExIEBACiAgICAgICAgIC8v
IHJvb3QgYm94J3MgYmFzZWxpbmUsIGFuZCBpdCBpcyBwb3NpdGl2ZSBpZiB0aGUgY2hpbGQgYm94
J3MgYmFzZWxpbmUgaXMgYmVsb3cgdGhlIHJvb3QgYm94J3MgYmFzZWxpbmUuCiAgICAgICAgIGN1
cnItPnNldExvZ2ljYWxUb3Aocm9vdEJveC0+dmVydGljYWxQb3NpdGlvbkZvckJveChjdXJyLCB2
ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUpKTsKICAgICAgICAgCi0gICAgICAgIGludCBhc2NlbnQgPSAw
OwotICAgICAgICBpbnQgZGVzY2VudCA9IDA7CisgICAgICAgIGZsb2F0IGFzY2VudCA9IDA7Cisg
ICAgICAgIGZsb2F0IGRlc2NlbnQgPSAwOwogICAgICAgICByb290Qm94LT5hc2NlbnRBbmREZXNj
ZW50Rm9yQm94KGN1cnIsIHRleHRCb3hEYXRhTWFwLCBhc2NlbnQsIGRlc2NlbnQsIGFmZmVjdHNB
c2NlbnQsIGFmZmVjdHNEZXNjZW50KTsKIAotICAgICAgICBpbnQgYm94SGVpZ2h0ID0gYXNjZW50
ICsgZGVzY2VudDsKKyAgICAgICAgZmxvYXQgYm94SGVpZ2h0ID0gYXNjZW50ICsgZGVzY2VudDsK
ICAgICAgICAgaWYgKGN1cnItPnZlcnRpY2FsQWxpZ24oKSA9PSBUT1ApIHsKICAgICAgICAgICAg
IGlmIChtYXhQb3NpdGlvblRvcCA8IGJveEhlaWdodCkKICAgICAgICAgICAgICAgICBtYXhQb3Np
dGlvblRvcCA9IGJveEhlaWdodDsKQEAgLTU3Miw4ICs1NzIsOCBAQAogICAgIH0KIH0KIAotdm9p
ZCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSW5CbG9ja0RpcmVjdGlvbihpbnQgdG9wLCBpbnQg
bWF4SGVpZ2h0LCBpbnQgbWF4QXNjZW50LCBib29sIHN0cmljdE1vZGUsIGludCYgbGluZVRvcCwg
aW50JiBsaW5lQm90dG9tLCBib29sJiBzZXRMaW5lVG9wLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGxpbmVUb3BJbmNsdWRpbmdNYXJnaW5zLCBp
bnQmIGxpbmVCb3R0b21JbmNsdWRpbmdNYXJnaW5zLCBib29sJiBoYXNBbm5vdGF0aW9uc0JlZm9y
ZSwgYm9vbCYgaGFzQW5ub3RhdGlvbnNBZnRlciwgRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSkK
K3ZvaWQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0luQmxvY2tEaXJlY3Rpb24oZmxvYXQgdG9w
LCBmbG9hdCBtYXhIZWlnaHQsIGZsb2F0IG1heEFzY2VudCwgYm9vbCBzdHJpY3RNb2RlLCBmbG9h
dCYgbGluZVRvcCwgZmxvYXQmIGxpbmVCb3R0b20sIGJvb2wmIHNldExpbmVUb3AsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0JiBsaW5lVG9wSW5j
bHVkaW5nTWFyZ2lucywgZmxvYXQmIGxpbmVCb3R0b21JbmNsdWRpbmdNYXJnaW5zLCBib29sJiBo
YXNBbm5vdGF0aW9uc0JlZm9yZSwgYm9vbCYgaGFzQW5ub3RhdGlvbnNBZnRlciwgRm9udEJhc2Vs
aW5lIGJhc2VsaW5lVHlwZSkKIHsKICAgICBib29sIGlzUm9vdEJveCA9IGlzUm9vdElubGluZUJv
eCgpOwogICAgIGlmIChpc1Jvb3RCb3gpIHsKQEAgLTU4MSw3ICs1ODEsNyBAQAogICAgICAgICBz
ZXRMb2dpY2FsVG9wKHRvcCArIG1heEFzY2VudCAtIGZvbnRNZXRyaWNzLmFzY2VudChiYXNlbGlu
ZVR5cGUpKTsKICAgICB9CiAKLSAgICBpbnQgYWRqdXN0bWVudEZvckNoaWxkcmVuV2l0aFNhbWVM
aW5lSGVpZ2h0QW5kQmFzZWxpbmUgPSAwOworICAgIGZsb2F0IGFkanVzdG1lbnRGb3JDaGlsZHJl
bldpdGhTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lID0gMDsKICAgICBpZiAoZGVzY2VuZGFudHNI
YXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSgpKSB7CiAgICAgICAgIGFkanVzdG1lbnRGb3JD
aGlsZHJlbldpdGhTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lID0gbG9naWNhbFRvcCgpOwogICAg
ICAgICBpZiAocGFyZW50KCkpCkBAIC02MTEsMTAgKzYxMSwxMCBAQAogICAgICAgICAgICAgY3Vy
ci0+c2V0TG9naWNhbFRvcChjdXJyLT5sb2dpY2FsVG9wKCkgKyB0b3AgKyBwb3NBZGp1c3QpOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpbnQgbmV3TG9naWNhbFRvcCA9IGN1cnItPmxv
Z2ljYWxUb3AoKTsKLSAgICAgICAgaW50IG5ld0xvZ2ljYWxUb3BJbmNsdWRpbmdNYXJnaW5zID0g
bmV3TG9naWNhbFRvcDsKLSAgICAgICAgaW50IGJveEhlaWdodCA9IGN1cnItPmxvZ2ljYWxIZWln
aHQoKTsKLSAgICAgICAgaW50IGJveEhlaWdodEluY2x1ZGluZ01hcmdpbnMgPSBib3hIZWlnaHQ7
CisgICAgICAgIGZsb2F0IG5ld0xvZ2ljYWxUb3AgPSBjdXJyLT5sb2dpY2FsVG9wKCk7CisgICAg
ICAgIGZsb2F0IG5ld0xvZ2ljYWxUb3BJbmNsdWRpbmdNYXJnaW5zID0gbmV3TG9naWNhbFRvcDsK
KyAgICAgICAgZmxvYXQgYm94SGVpZ2h0ID0gY3Vyci0+bG9naWNhbEhlaWdodCgpOworICAgICAg
ICBmbG9hdCBib3hIZWlnaHRJbmNsdWRpbmdNYXJnaW5zID0gYm94SGVpZ2h0OwogICAgICAgICAg
ICAgCiAgICAgICAgIGlmIChjdXJyLT5pc1RleHQoKSB8fCBjdXJyLT5pc0lubGluZUZsb3dCb3go
KSkgewogICAgICAgICAgICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gY3Vyci0+
cmVuZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUpLT5mb250TWV0cmljcygpOwpAQCAtNjI4LDgg
KzYyOCw4IEBACiAgICAgICAgIH0gZWxzZSBpZiAoIWN1cnItPnJlbmRlcmVyKCktPmlzQlIoKSkg
ewogICAgICAgICAgICAgUmVuZGVyQm94KiBib3ggPSB0b1JlbmRlckJveChjdXJyLT5yZW5kZXJl
cigpKTsKICAgICAgICAgICAgIG5ld0xvZ2ljYWxUb3BJbmNsdWRpbmdNYXJnaW5zID0gbmV3TG9n
aWNhbFRvcDsKLSAgICAgICAgICAgIGludCBvdmVyU2lkZU1hcmdpbiA9IGN1cnItPmlzSG9yaXpv
bnRhbCgpID8gYm94LT5tYXJnaW5Ub3AoKSA6IGJveC0+bWFyZ2luUmlnaHQoKTsKLSAgICAgICAg
ICAgIGludCB1bmRlclNpZGVNYXJnaW4gPSBjdXJyLT5pc0hvcml6b250YWwoKSA/IGJveC0+bWFy
Z2luQm90dG9tKCkgOiBib3gtPm1hcmdpbkxlZnQoKTsKKyAgICAgICAgICAgIGZsb2F0IG92ZXJT
aWRlTWFyZ2luID0gY3Vyci0+aXNIb3Jpem9udGFsKCkgPyBib3gtPm1hcmdpblRvcCgpIDogYm94
LT5tYXJnaW5SaWdodCgpOworICAgICAgICAgICAgZmxvYXQgdW5kZXJTaWRlTWFyZ2luID0gY3Vy
ci0+aXNIb3Jpem9udGFsKCkgPyBib3gtPm1hcmdpbkJvdHRvbSgpIDogYm94LT5tYXJnaW5MZWZ0
KCk7CiAgICAgICAgICAgICBuZXdMb2dpY2FsVG9wICs9IG92ZXJTaWRlTWFyZ2luOwogICAgICAg
ICAgICAgYm94SGVpZ2h0SW5jbHVkaW5nTWFyZ2lucyArPSBvdmVyU2lkZU1hcmdpbiArIHVuZGVy
U2lkZU1hcmdpbjsKICAgICAgICAgfQpAQCAtNjQ4LDggKzY0OCw4IEBACiAKICAgICAgICAgICAg
ICAgICBSZW5kZXJSdWJ5UnVuKiBydWJ5UnVuID0gc3RhdGljX2Nhc3Q8UmVuZGVyUnVieVJ1bio+
KGN1cnItPnJlbmRlcmVyKCkpOwogICAgICAgICAgICAgICAgIGlmIChSZW5kZXJSdWJ5QmFzZSog
cnVieUJhc2UgPSBydWJ5UnVuLT5ydWJ5QmFzZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlu
dCBib3R0b21SdWJ5QmFzZUxlYWRpbmcgPSAoY3Vyci0+bG9naWNhbEhlaWdodCgpIC0gcnVieUJh
c2UtPmxvZ2ljYWxCb3R0b20oKSkgKyBydWJ5QmFzZS0+bG9naWNhbEhlaWdodCgpIC0gKHJ1YnlC
YXNlLT5sYXN0Um9vdEJveCgpID8gcnVieUJhc2UtPmxhc3RSb290Qm94KCktPmxpbmVCb3R0b20o
KSA6IDApOwotICAgICAgICAgICAgICAgICAgICBpbnQgdG9wUnVieUJhc2VMZWFkaW5nID0gcnVi
eUJhc2UtPmxvZ2ljYWxUb3AoKSArIChydWJ5QmFzZS0+Zmlyc3RSb290Qm94KCkgPyBydWJ5QmFz
ZS0+Zmlyc3RSb290Qm94KCktPmxpbmVUb3AoKSA6IDApOworICAgICAgICAgICAgICAgICAgICBm
bG9hdCBib3R0b21SdWJ5QmFzZUxlYWRpbmcgPSAoY3Vyci0+bG9naWNhbEhlaWdodCgpIC0gcnVi
eUJhc2UtPmxvZ2ljYWxCb3R0b20oKSkgKyBydWJ5QmFzZS0+bG9naWNhbEhlaWdodCgpIC0gKHJ1
YnlCYXNlLT5sYXN0Um9vdEJveCgpID8gcnVieUJhc2UtPmxhc3RSb290Qm94KCktPmxpbmVCb3R0
b20oKSA6IDApOworICAgICAgICAgICAgICAgICAgICBmbG9hdCB0b3BSdWJ5QmFzZUxlYWRpbmcg
PSBydWJ5QmFzZS0+bG9naWNhbFRvcCgpICsgKHJ1YnlCYXNlLT5maXJzdFJvb3RCb3goKSA/IHJ1
YnlCYXNlLT5maXJzdFJvb3RCb3goKS0+bGluZVRvcCgpIDogMCk7CiAgICAgICAgICAgICAgICAg
ICAgIG5ld0xvZ2ljYWxUb3AgKz0gIXJlbmRlcmVyKCktPnN0eWxlKCktPmlzRmxpcHBlZExpbmVz
V3JpdGluZ01vZGUoKSA/IHRvcFJ1YnlCYXNlTGVhZGluZyA6IGJvdHRvbVJ1YnlCYXNlTGVhZGlu
ZzsKICAgICAgICAgICAgICAgICAgICAgYm94SGVpZ2h0IC09ICh0b3BSdWJ5QmFzZUxlYWRpbmcg
KyBib3R0b21SdWJ5QmFzZUxlYWRpbmcpOwogICAgICAgICAgICAgICAgIH0KQEAgLTcwMyw3ICs3
MDMsNyBAQAogICAgIH0KIH0KIAotdm9pZCBJbmxpbmVGbG93Qm94OjpmbGlwTGluZXNJbkJsb2Nr
RGlyZWN0aW9uKGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSkKK3ZvaWQgSW5saW5lRmxvd0Jv
eDo6ZmxpcExpbmVzSW5CbG9ja0RpcmVjdGlvbihmbG9hdCBsaW5lVG9wLCBmbG9hdCBsaW5lQm90
dG9tKQogewogICAgIC8vIEZsaXAgdGhlIGJveCBvbiB0aGUgbGluZSBzdWNoIHRoYXQgdGhlIHRv
cCBpcyBub3cgcmVsYXRpdmUgdG8gdGhlIGxpbmVCb3R0b20gaW5zdGVhZCBvZiB0aGUgbGluZVRv
cC4KICAgICBzZXRMb2dpY2FsVG9wKGxpbmVCb3R0b20gLSAobG9naWNhbFRvcCgpIC0gbGluZVRv
cCkgLSBsb2dpY2FsSGVpZ2h0KCkpOwpAQCAtNzI0LDE5ICs3MjQsMTkgQEAKICAgICBpZiAoIXBh
cmVudCgpKQogICAgICAgICByZXR1cm47IC8vIEJveC1zaGFkb3cgZG9lc24ndCBhcHBseSB0byBy
b290IGxpbmUgYm94ZXMuCiAKLSAgICBpbnQgYm94U2hhZG93TG9naWNhbFRvcDsKLSAgICBpbnQg
Ym94U2hhZG93TG9naWNhbEJvdHRvbTsKKyAgICBmbG9hdCBib3hTaGFkb3dMb2dpY2FsVG9wOwor
ICAgIGZsb2F0IGJveFNoYWRvd0xvZ2ljYWxCb3R0b207CiAgICAgcmVuZGVyZXIoKS0+c3R5bGUo
bV9maXJzdExpbmUpLT5nZXRCb3hTaGFkb3dCbG9ja0RpcmVjdGlvbkV4dGVudChib3hTaGFkb3dM
b2dpY2FsVG9wLCBib3hTaGFkb3dMb2dpY2FsQm90dG9tKTsKICAgICAKLSAgICBpbnQgbG9naWNh
bFRvcFZpc3VhbE92ZXJmbG93ID0gbWluKGxvZ2ljYWxUb3AoKSArIGJveFNoYWRvd0xvZ2ljYWxU
b3AsIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy55KCkpOwotICAgIGludCBsb2dpY2FsQm90dG9tVmlz
dWFsT3ZlcmZsb3cgPSBtYXgobG9naWNhbEJvdHRvbSgpICsgYm94U2hhZG93TG9naWNhbEJvdHRv
bSwgbG9naWNhbFZpc3VhbE92ZXJmbG93Lm1heFkoKSk7CisgICAgZmxvYXQgbG9naWNhbFRvcFZp
c3VhbE92ZXJmbG93ID0gbWluKGxvZ2ljYWxUb3AoKSArIGJveFNoYWRvd0xvZ2ljYWxUb3AsIChm
bG9hdClsb2dpY2FsVmlzdWFsT3ZlcmZsb3cueSgpKTsKKyAgICBmbG9hdCBsb2dpY2FsQm90dG9t
VmlzdWFsT3ZlcmZsb3cgPSBtYXgobG9naWNhbEJvdHRvbSgpICsgYm94U2hhZG93TG9naWNhbEJv
dHRvbSwgKGZsb2F0KWxvZ2ljYWxWaXN1YWxPdmVyZmxvdy5tYXhZKCkpOwogICAgIAotICAgIGlu
dCBib3hTaGFkb3dMb2dpY2FsTGVmdDsKLSAgICBpbnQgYm94U2hhZG93TG9naWNhbFJpZ2h0Owor
ICAgIGZsb2F0IGJveFNoYWRvd0xvZ2ljYWxMZWZ0OworICAgIGZsb2F0IGJveFNoYWRvd0xvZ2lj
YWxSaWdodDsKICAgICByZW5kZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSktPmdldEJveFNoYWRv
d0lubGluZURpcmVjdGlvbkV4dGVudChib3hTaGFkb3dMb2dpY2FsTGVmdCwgYm94U2hhZG93TG9n
aWNhbFJpZ2h0KTsKIAotICAgIGludCBsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93ID0gbWluKHBp
eGVsU25hcHBlZExvZ2ljYWxMZWZ0KCkgKyBib3hTaGFkb3dMb2dpY2FsTGVmdCwgbG9naWNhbFZp
c3VhbE92ZXJmbG93LngoKSk7Ci0gICAgaW50IGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93ID0g
bWF4KHBpeGVsU25hcHBlZExvZ2ljYWxSaWdodCgpICsgYm94U2hhZG93TG9naWNhbFJpZ2h0LCBs
b2dpY2FsVmlzdWFsT3ZlcmZsb3cubWF4WCgpKTsKKyAgICBmbG9hdCBsb2dpY2FsTGVmdFZpc3Vh
bE92ZXJmbG93ID0gbWluKHBpeGVsU25hcHBlZExvZ2ljYWxMZWZ0KCkgKyBib3hTaGFkb3dMb2dp
Y2FsTGVmdCwgKGZsb2F0KWxvZ2ljYWxWaXN1YWxPdmVyZmxvdy54KCkpOworICAgIGZsb2F0IGxv
Z2ljYWxSaWdodFZpc3VhbE92ZXJmbG93ID0gbWF4KHBpeGVsU25hcHBlZExvZ2ljYWxSaWdodCgp
ICsgYm94U2hhZG93TG9naWNhbFJpZ2h0LCAoZmxvYXQpbG9naWNhbFZpc3VhbE92ZXJmbG93Lm1h
eFgoKSk7CiAgICAgCiAgICAgbG9naWNhbFZpc3VhbE92ZXJmbG93ID0gSW50UmVjdChsb2dpY2Fs
TGVmdFZpc3VhbE92ZXJmbG93LCBsb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3csCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdyAtIGxv
Z2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3csIGxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyAtIGxv
Z2ljYWxUb3BWaXN1YWxPdmVyZmxvdyk7CkBAIC03NTMsMjAgKzc1MywyMCBAQAogICAgIEdseXBo
T3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAg
OiAmaXQtPnNlY29uZC5zZWNvbmQ7CiAgICAgYm9vbCBpc0ZsaXBwZWRMaW5lID0gc3R5bGUtPmlz
RmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKTsKIAotICAgIGludCB0b3BHbHlwaEVkZ2UgPSBnbHlw
aE92ZXJmbG93ID8gKGlzRmxpcHBlZExpbmUgPyBnbHlwaE92ZXJmbG93LT5ib3R0b20gOiBnbHlw
aE92ZXJmbG93LT50b3ApIDogMDsKLSAgICBpbnQgYm90dG9tR2x5cGhFZGdlID0gZ2x5cGhPdmVy
ZmxvdyA/IChpc0ZsaXBwZWRMaW5lID8gZ2x5cGhPdmVyZmxvdy0+dG9wIDogZ2x5cGhPdmVyZmxv
dy0+Ym90dG9tKSA6IDA7Ci0gICAgaW50IGxlZnRHbHlwaEVkZ2UgPSBnbHlwaE92ZXJmbG93ID8g
Z2x5cGhPdmVyZmxvdy0+bGVmdCA6IDA7Ci0gICAgaW50IHJpZ2h0R2x5cGhFZGdlID0gZ2x5cGhP
dmVyZmxvdyA/IGdseXBoT3ZlcmZsb3ctPnJpZ2h0IDogMDsKKyAgICBmbG9hdCB0b3BHbHlwaEVk
Z2UgPSBnbHlwaE92ZXJmbG93ID8gKGlzRmxpcHBlZExpbmUgPyBnbHlwaE92ZXJmbG93LT5ib3R0
b20gOiBnbHlwaE92ZXJmbG93LT50b3ApIDogMDsKKyAgICBmbG9hdCBib3R0b21HbHlwaEVkZ2Ug
PSBnbHlwaE92ZXJmbG93ID8gKGlzRmxpcHBlZExpbmUgPyBnbHlwaE92ZXJmbG93LT50b3AgOiBn
bHlwaE92ZXJmbG93LT5ib3R0b20pIDogMDsKKyAgICBmbG9hdCBsZWZ0R2x5cGhFZGdlID0gZ2x5
cGhPdmVyZmxvdyA/IGdseXBoT3ZlcmZsb3ctPmxlZnQgOiAwOworICAgIGZsb2F0IHJpZ2h0R2x5
cGhFZGdlID0gZ2x5cGhPdmVyZmxvdyA/IGdseXBoT3ZlcmZsb3ctPnJpZ2h0IDogMDsKIAotICAg
IGludCBzdHJva2VPdmVyZmxvdyA9IHN0YXRpY19jYXN0PGludD4oY2VpbGYoc3R5bGUtPnRleHRT
dHJva2VXaWR0aCgpIC8gMi4wZikpOwotICAgIGludCB0b3BHbHlwaE92ZXJmbG93ID0gLXN0cm9r
ZU92ZXJmbG93IC0gdG9wR2x5cGhFZGdlOwotICAgIGludCBib3R0b21HbHlwaE92ZXJmbG93ID0g
c3Ryb2tlT3ZlcmZsb3cgKyBib3R0b21HbHlwaEVkZ2U7Ci0gICAgaW50IGxlZnRHbHlwaE92ZXJm
bG93ID0gLXN0cm9rZU92ZXJmbG93IC0gbGVmdEdseXBoRWRnZTsKLSAgICBpbnQgcmlnaHRHbHlw
aE92ZXJmbG93ID0gc3Ryb2tlT3ZlcmZsb3cgKyByaWdodEdseXBoRWRnZTsKKyAgICBmbG9hdCBz
dHJva2VPdmVyZmxvdyA9IHN0YXRpY19jYXN0PGludD4oY2VpbGYoc3R5bGUtPnRleHRTdHJva2VX
aWR0aCgpIC8gMi4wZikpOworICAgIGZsb2F0IHRvcEdseXBoT3ZlcmZsb3cgPSAtc3Ryb2tlT3Zl
cmZsb3cgLSB0b3BHbHlwaEVkZ2U7CisgICAgZmxvYXQgYm90dG9tR2x5cGhPdmVyZmxvdyA9IHN0
cm9rZU92ZXJmbG93ICsgYm90dG9tR2x5cGhFZGdlOworICAgIGZsb2F0IGxlZnRHbHlwaE92ZXJm
bG93ID0gLXN0cm9rZU92ZXJmbG93IC0gbGVmdEdseXBoRWRnZTsKKyAgICBmbG9hdCByaWdodEds
eXBoT3ZlcmZsb3cgPSBzdHJva2VPdmVyZmxvdyArIHJpZ2h0R2x5cGhFZGdlOwogCiAgICAgVGV4
dEVtcGhhc2lzUG9zaXRpb24gZW1waGFzaXNNYXJrUG9zaXRpb247CiAgICAgaWYgKHN0eWxlLT50
ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4dEVtcGhhc2lzTWFya05vbmUgJiYgdGV4dEJveC0+Z2V0
RW1waGFzaXNNYXJrUG9zaXRpb24oc3R5bGUsIGVtcGhhc2lzTWFya1Bvc2l0aW9uKSkgewotICAg
ICAgICBpbnQgZW1waGFzaXNNYXJrSGVpZ2h0ID0gc3R5bGUtPmZvbnQoKS5lbXBoYXNpc01hcmtI
ZWlnaHQoc3R5bGUtPnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CisgICAgICAgIGZsb2F0IGVt
cGhhc2lzTWFya0hlaWdodCA9IHN0eWxlLT5mb250KCkuZW1waGFzaXNNYXJrSGVpZ2h0KHN0eWxl
LT50ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOwogICAgICAgICBpZiAoKGVtcGhhc2lzTWFya1Bv
c2l0aW9uID09IFRleHRFbXBoYXNpc1Bvc2l0aW9uT3ZlcikgPT0gKCFzdHlsZS0+aXNGbGlwcGVk
TGluZXNXcml0aW5nTW9kZSgpKSkKICAgICAgICAgICAgIHRvcEdseXBoT3ZlcmZsb3cgPSBtaW4o
dG9wR2x5cGhPdmVyZmxvdywgLWVtcGhhc2lzTWFya0hlaWdodCk7CiAgICAgICAgIGVsc2UKQEAg
LTc3NywyNCArNzc3LDI0IEBACiAgICAgLy8gYXBwbGllZCB0byB0aGUgcmlnaHQsIHNvIHRoaXMg
aXMgbm90IGFuIGlzc3VlIHdpdGggbGVmdCBvdmVyZmxvdy4KICAgICByaWdodEdseXBoT3ZlcmZs
b3cgLT0gbWluKDAsIChpbnQpc3R5bGUtPmZvbnQoKS5sZXR0ZXJTcGFjaW5nKCkpOwogCi0gICAg
aW50IHRleHRTaGFkb3dMb2dpY2FsVG9wOwotICAgIGludCB0ZXh0U2hhZG93TG9naWNhbEJvdHRv
bTsKKyAgICBmbG9hdCB0ZXh0U2hhZG93TG9naWNhbFRvcDsKKyAgICBmbG9hdCB0ZXh0U2hhZG93
TG9naWNhbEJvdHRvbTsKICAgICBzdHlsZS0+Z2V0VGV4dFNoYWRvd0Jsb2NrRGlyZWN0aW9uRXh0
ZW50KHRleHRTaGFkb3dMb2dpY2FsVG9wLCB0ZXh0U2hhZG93TG9naWNhbEJvdHRvbSk7CiAgICAg
Ci0gICAgaW50IGNoaWxkT3ZlcmZsb3dMb2dpY2FsVG9wID0gbWluKHRleHRTaGFkb3dMb2dpY2Fs
VG9wICsgdG9wR2x5cGhPdmVyZmxvdywgdG9wR2x5cGhPdmVyZmxvdyk7Ci0gICAgaW50IGNoaWxk
T3ZlcmZsb3dMb2dpY2FsQm90dG9tID0gbWF4KHRleHRTaGFkb3dMb2dpY2FsQm90dG9tICsgYm90
dG9tR2x5cGhPdmVyZmxvdywgYm90dG9tR2x5cGhPdmVyZmxvdyk7CisgICAgZmxvYXQgY2hpbGRP
dmVyZmxvd0xvZ2ljYWxUb3AgPSBtaW4odGV4dFNoYWRvd0xvZ2ljYWxUb3AgKyB0b3BHbHlwaE92
ZXJmbG93LCB0b3BHbHlwaE92ZXJmbG93KTsKKyAgICBmbG9hdCBjaGlsZE92ZXJmbG93TG9naWNh
bEJvdHRvbSA9IG1heCh0ZXh0U2hhZG93TG9naWNhbEJvdHRvbSArIGJvdHRvbUdseXBoT3ZlcmZs
b3csIGJvdHRvbUdseXBoT3ZlcmZsb3cpOwogICAgCi0gICAgaW50IHRleHRTaGFkb3dMb2dpY2Fs
TGVmdDsKLSAgICBpbnQgdGV4dFNoYWRvd0xvZ2ljYWxSaWdodDsKKyAgICBmbG9hdCB0ZXh0U2hh
ZG93TG9naWNhbExlZnQ7CisgICAgZmxvYXQgdGV4dFNoYWRvd0xvZ2ljYWxSaWdodDsKICAgICBz
dHlsZS0+Z2V0VGV4dFNoYWRvd0lubGluZURpcmVjdGlvbkV4dGVudCh0ZXh0U2hhZG93TG9naWNh
bExlZnQsIHRleHRTaGFkb3dMb2dpY2FsUmlnaHQpOwogICAgCi0gICAgaW50IGNoaWxkT3ZlcmZs
b3dMb2dpY2FsTGVmdCA9IG1pbih0ZXh0U2hhZG93TG9naWNhbExlZnQgKyBsZWZ0R2x5cGhPdmVy
ZmxvdywgbGVmdEdseXBoT3ZlcmZsb3cpOwotICAgIGludCBjaGlsZE92ZXJmbG93TG9naWNhbFJp
Z2h0ID0gbWF4KHRleHRTaGFkb3dMb2dpY2FsUmlnaHQgKyByaWdodEdseXBoT3ZlcmZsb3csIHJp
Z2h0R2x5cGhPdmVyZmxvdyk7CisgICAgZmxvYXQgY2hpbGRPdmVyZmxvd0xvZ2ljYWxMZWZ0ID0g
bWluKHRleHRTaGFkb3dMb2dpY2FsTGVmdCArIGxlZnRHbHlwaE92ZXJmbG93LCBsZWZ0R2x5cGhP
dmVyZmxvdyk7CisgICAgZmxvYXQgY2hpbGRPdmVyZmxvd0xvZ2ljYWxSaWdodCA9IG1heCh0ZXh0
U2hhZG93TG9naWNhbFJpZ2h0ICsgcmlnaHRHbHlwaE92ZXJmbG93LCByaWdodEdseXBoT3ZlcmZs
b3cpOwogCi0gICAgaW50IGxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdyA9IG1pbih0ZXh0Qm94LT5s
b2dpY2FsVG9wKCkgKyBjaGlsZE92ZXJmbG93TG9naWNhbFRvcCwgbG9naWNhbFZpc3VhbE92ZXJm
bG93LnkoKSk7Ci0gICAgaW50IGxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyA9IG1heCh0ZXh0
Qm94LT5sb2dpY2FsQm90dG9tKCkgKyBjaGlsZE92ZXJmbG93TG9naWNhbEJvdHRvbSwgbG9naWNh
bFZpc3VhbE92ZXJmbG93Lm1heFkoKSk7Ci0gICAgaW50IGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZs
b3cgPSBtaW4odGV4dEJveC0+cGl4ZWxTbmFwcGVkTG9naWNhbExlZnQoKSArIGNoaWxkT3ZlcmZs
b3dMb2dpY2FsTGVmdCwgbG9naWNhbFZpc3VhbE92ZXJmbG93LngoKSk7Ci0gICAgaW50IGxvZ2lj
YWxSaWdodFZpc3VhbE92ZXJmbG93ID0gbWF4KHRleHRCb3gtPnBpeGVsU25hcHBlZExvZ2ljYWxS
aWdodCgpICsgY2hpbGRPdmVyZmxvd0xvZ2ljYWxSaWdodCwgbG9naWNhbFZpc3VhbE92ZXJmbG93
Lm1heFgoKSk7CisgICAgZmxvYXQgbG9naWNhbFRvcFZpc3VhbE92ZXJmbG93ID0gbWluKHRleHRC
b3gtPmxvZ2ljYWxUb3AoKSArIGNoaWxkT3ZlcmZsb3dMb2dpY2FsVG9wLCAoZmxvYXQpbG9naWNh
bFZpc3VhbE92ZXJmbG93LnkoKSk7CisgICAgZmxvYXQgbG9naWNhbEJvdHRvbVZpc3VhbE92ZXJm
bG93ID0gbWF4KHRleHRCb3gtPmxvZ2ljYWxCb3R0b20oKSArIGNoaWxkT3ZlcmZsb3dMb2dpY2Fs
Qm90dG9tLCAoZmxvYXQpbG9naWNhbFZpc3VhbE92ZXJmbG93Lm1heFkoKSk7CisgICAgZmxvYXQg
bG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdyA9IG1pbih0ZXh0Qm94LT5waXhlbFNuYXBwZWRMb2dp
Y2FsTGVmdCgpICsgY2hpbGRPdmVyZmxvd0xvZ2ljYWxMZWZ0LCAoZmxvYXQpbG9naWNhbFZpc3Vh
bE92ZXJmbG93LngoKSk7CisgICAgZmxvYXQgbG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3cgPSBt
YXgodGV4dEJveC0+cGl4ZWxTbmFwcGVkTG9naWNhbFJpZ2h0KCkgKyBjaGlsZE92ZXJmbG93TG9n
aWNhbFJpZ2h0LCAoZmxvYXQpbG9naWNhbFZpc3VhbE92ZXJmbG93Lm1heFgoKSk7CiAgICAgCiAg
ICAgbG9naWNhbFZpc3VhbE92ZXJmbG93ID0gSW50UmVjdChsb2dpY2FsTGVmdFZpc3VhbE92ZXJm
bG93LCBsb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdyAtIGxvZ2ljYWxMZWZ0VmlzdWFs
T3ZlcmZsb3csIGxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyAtIGxvZ2ljYWxUb3BWaXN1YWxP
dmVyZmxvdyk7CkBAIC04MTgsNyArODE4LDcgQEAKICAgICAvLyBMYXlvdXQgb3ZlcmZsb3cgaW50
ZXJuYWwgdG8gdGhlIGNoaWxkIGJveCBvbmx5IHByb3BhZ2F0ZXMgaWYgdGhlIGNoaWxkIGJveCBk
b2Vzbid0IGhhdmUgb3ZlcmZsb3cgY2xpcCBzZXQuCiAgICAgLy8gT3RoZXJ3aXNlIHRoZSBjaGls
ZCBib3JkZXIgYm94IHByb3BhZ2F0ZXMgYXMgbGF5b3V0IG92ZXJmbG93LiAgVGhpcyByZWN0YW5n
bGUgbXVzdCBpbmNsdWRlIHRyYW5zZm9ybXMgYW5kIHJlbGF0aXZlIHBvc2l0aW9uaW5nCiAgICAg
Ly8gYW5kIGJlIGFkanVzdGVkIGZvciB3cml0aW5nLW1vZGUgZGlmZmVyZW5jZXMuCi0gICAgSW50
UmVjdCBjaGlsZExvZ2ljYWxMYXlvdXRPdmVyZmxvdyA9IGJveC0+bG9naWNhbExheW91dE92ZXJm
bG93UmVjdEZvclByb3BhZ2F0aW9uKHJlbmRlcmVyKCktPnN0eWxlKCkpOworICAgIEludFJlY3Qg
Y2hpbGRMb2dpY2FsTGF5b3V0T3ZlcmZsb3cgPSBlbmNsb3NpbmdJbnRSZWN0KGJveC0+bG9naWNh
bExheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKHJlbmRlcmVyKCktPnN0eWxlKCkpKTsK
ICAgICBjaGlsZExvZ2ljYWxMYXlvdXRPdmVyZmxvdy5tb3ZlKGlubGluZUJveC0+bG9naWNhbExl
ZnQoKSwgaW5saW5lQm94LT5sb2dpY2FsVG9wKCkpOwogICAgIGxvZ2ljYWxMYXlvdXRPdmVyZmxv
dy51bml0ZShjaGlsZExvZ2ljYWxMYXlvdXRPdmVyZmxvdyk7CiB9CkBAIC05MTYsMTggKzkxNiwx
OCBAQAogCiAgICAgLy8gTm93IGNoZWNrIG91cnNlbHZlcy4gUGl4ZWwgc25hcCBoaXQgdGVzdGlu
Zy4KICAgICBJbnRSZWN0IGZyYW1lUmVjdCA9IHJvdW5kZWRGcmFtZVJlY3QoKTsKLSAgICBpbnQg
bWluWCA9IGZyYW1lUmVjdC54KCk7Ci0gICAgaW50IG1pblkgPSBmcmFtZVJlY3QueSgpOwotICAg
IGludCB3aWR0aCA9IGZyYW1lUmVjdC53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBmcmFtZVJl
Y3QuaGVpZ2h0KCk7CisgICAgZmxvYXQgbWluWCA9IGZyYW1lUmVjdC54KCk7CisgICAgZmxvYXQg
bWluWSA9IGZyYW1lUmVjdC55KCk7CisgICAgZmxvYXQgd2lkdGggPSBmcmFtZVJlY3Qud2lkdGgo
KTsKKyAgICBmbG9hdCBoZWlnaHQgPSBmcmFtZVJlY3QuaGVpZ2h0KCk7CiAKICAgICAvLyBDb25z
dHJhaW4gb3VyIGhpdCB0ZXN0aW5nIHRvIHRoZSBsaW5lIHRvcCBhbmQgYm90dG9tIGlmIG5lY2Vz
c2FyeS4KICAgICBib29sIG5vUXVpcmtzTW9kZSA9IHJlbmRlcmVyKCktPmRvY3VtZW50KCktPmlu
Tm9RdWlya3NNb2RlKCk7CiAgICAgaWYgKCFub1F1aXJrc01vZGUgJiYgIWhhc1RleHRDaGlsZHJl
bigpICYmICEoZGVzY2VuZGFudHNIYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSgpICYmIGhh
c1RleHREZXNjZW5kYW50cygpKSkgewogICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0g
cm9vdCgpOwotICAgICAgICBpbnQmIHRvcCA9IGlzSG9yaXpvbnRhbCgpID8gbWluWSA6IG1pblg7
Ci0gICAgICAgIGludCYgbG9naWNhbEhlaWdodCA9IGlzSG9yaXpvbnRhbCgpID8gaGVpZ2h0IDog
d2lkdGg7Ci0gICAgICAgIGludCBib3R0b20gPSBtaW4ocm9vdEJveC0+bGluZUJvdHRvbSgpLCB0
b3AgKyBsb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgZmxvYXQmIHRvcCA9IGlzSG9yaXpvbnRhbCgp
ID8gbWluWSA6IG1pblg7CisgICAgICAgIGZsb2F0JiBsb2dpY2FsSGVpZ2h0ID0gaXNIb3Jpem9u
dGFsKCkgPyBoZWlnaHQgOiB3aWR0aDsKKyAgICAgICAgZmxvYXQgYm90dG9tID0gbWluKHJvb3RC
b3gtPmxpbmVCb3R0b20oKSwgdG9wICsgbG9naWNhbEhlaWdodCk7CiAgICAgICAgIHRvcCA9IG1h
eChyb290Qm94LT5saW5lVG9wKCksIHRvcCk7CiAgICAgICAgIGxvZ2ljYWxIZWlnaHQgPSBib3R0
b20gLSB0b3A7CiAgICAgfQpAQCAtOTQ2LDEyICs5NDYsMTIgQEAKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFBvaW50JiBwYWludE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKQor
dm9pZCBJbmxpbmVGbG93Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxv
YXRQb2ludCYgcGFpbnRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSkKIHsKICAg
ICBJbnRSZWN0IG92ZXJmbG93UmVjdCh2aXN1YWxPdmVyZmxvd1JlY3QobGluZVRvcCwgbGluZUJv
dHRvbSkpOwogICAgIG92ZXJmbG93UmVjdC5pbmZsYXRlKHJlbmRlcmVyKCktPm1heGltYWxPdXRs
aW5lU2l6ZShwYWludEluZm8ucGhhc2UpKTsKICAgICBmbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZs
b3dSZWN0KTsKLSAgICBvdmVyZmxvd1JlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKKyAgICBvdmVy
Zmxvd1JlY3QubW92ZUJ5KHJvdW5kZWRJbnRQb2ludChwYWludE9mZnNldCkpOwogICAgIAogICAg
IGlmICghcGFpbnRJbmZvLnJlY3QuaW50ZXJzZWN0cyhvdmVyZmxvd1JlY3QpKQogICAgICAgICBy
ZXR1cm47CkBAIC0xMDc5LDkgKzEwNzksOSBAQAogICAgIGJvb2wgbm9RdWlya3NNb2RlID0gcmVu
ZGVyZXIoKS0+ZG9jdW1lbnQoKS0+aW5Ob1F1aXJrc01vZGUoKTsKICAgICBpZiAoIW5vUXVpcmtz
TW9kZSAmJiAhaGFzVGV4dENoaWxkcmVuKCkgJiYgIShkZXNjZW5kYW50c0hhdmVTYW1lTGluZUhl
aWdodEFuZEJhc2VsaW5lKCkgJiYgaGFzVGV4dERlc2NlbmRhbnRzKCkpKSB7CiAgICAgICAgIGNv
bnN0IFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSByb290KCk7Ci0gICAgICAgIGludCBsb2dpY2Fs
VG9wID0gaXNIb3Jpem9udGFsKCkgPyByZWN0LnkoKSA6IHJlY3QueCgpOwotICAgICAgICBpbnQg
bG9naWNhbEhlaWdodCA9IGlzSG9yaXpvbnRhbCgpID8gcmVjdC5oZWlnaHQoKSA6IHJlY3Qud2lk
dGgoKTsKLSAgICAgICAgaW50IGJvdHRvbSA9IG1pbihyb290Qm94LT5saW5lQm90dG9tKCksIGxv
Z2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgZmxvYXQgbG9naWNhbFRvcCA9IGlz
SG9yaXpvbnRhbCgpID8gcmVjdC55KCkgOiByZWN0LngoKTsKKyAgICAgICAgZmxvYXQgbG9naWNh
bEhlaWdodCA9IGlzSG9yaXpvbnRhbCgpID8gcmVjdC5oZWlnaHQoKSA6IHJlY3Qud2lkdGgoKTsK
KyAgICAgICAgZmxvYXQgYm90dG9tID0gbWluKHJvb3RCb3gtPmxpbmVCb3R0b20oKSwgbG9naWNh
bFRvcCArIGxvZ2ljYWxIZWlnaHQpOwogICAgICAgICBsb2dpY2FsVG9wID0gbWF4KHJvb3RCb3gt
PmxpbmVUb3AoKSwgbG9naWNhbFRvcCk7CiAgICAgICAgIGxvZ2ljYWxIZWlnaHQgPSBib3R0b20g
LSBsb2dpY2FsVG9wOwogICAgICAgICBpZiAoaXNIb3Jpem9udGFsKCkpIHsKQEAgLTEwOTQsNyAr
MTA5NCw3IEBACiAgICAgfQogfQogCi12b2lkIElubGluZUZsb3dCb3g6OnBhaW50Qm94RGVjb3Jh
dGlvbnMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkK
K3ZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgRmxvYXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaWYgKCFwYWludElu
Zm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHJlbmRlcmVyKCkpIHx8IHJlbmRlcmVyKCktPnN0eWxl
KCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8IHBhaW50SW5mby5waGFzZSAhPSBQYWludFBo
YXNlRm9yZWdyb3VuZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTEwNyw3ICsxMTA3LDcgQEAKICAg
ICAvLyBNb3ZlIHgveSB0byBvdXIgY29vcmRpbmF0ZXMuCiAgICAgSW50UmVjdCBsb2NhbFJlY3Qo
ZnJhbWVSZWN0KTsKICAgICBmbGlwRm9yV3JpdGluZ01vZGUobG9jYWxSZWN0KTsKLSAgICBJbnRQ
b2ludCBhZGp1c3RlZFBhaW50b2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhbFJlY3QubG9jYXRp
b24oKTsKKyAgICBGbG9hdFBvaW50IGFkanVzdGVkUGFpbnRvZmZzZXQgPSBwYWludE9mZnNldCAr
IGxvY2FsUmVjdC5sb2NhdGlvbigpOwogICAgIAogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCA9IHBhaW50SW5mby5jb250ZXh0OwogICAgIApAQCAtMTExNSw3ICsxMTE1LDcgQEAKICAgICAv
LyBhIGxpbmUgbWF5IGFjdHVhbGx5IGhhdmUgdG8gcGFpbnQgYSBiYWNrZ3JvdW5kLgogICAgIFJl
bmRlclN0eWxlKiBzdHlsZVRvVXNlID0gcmVuZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUpOwog
ICAgIGlmICgoIXBhcmVudCgpICYmIG1fZmlyc3RMaW5lICYmIHN0eWxlVG9Vc2UgIT0gcmVuZGVy
ZXIoKS0+c3R5bGUoKSkgfHwgKHBhcmVudCgpICYmIHJlbmRlcmVyKCktPmhhc0JveERlY29yYXRp
b25zKCkpKSB7Ci0gICAgICAgIEludFJlY3QgcGFpbnRSZWN0ID0gSW50UmVjdChhZGp1c3RlZFBh
aW50b2Zmc2V0LCBmcmFtZVJlY3Quc2l6ZSgpKTsKKyAgICAgICAgSW50UmVjdCBwYWludFJlY3Qg
PSBlbmNsb3NpbmdJbnRSZWN0KGFkanVzdGVkUGFpbnRvZmZzZXQsIGZyYW1lUmVjdC5zaXplKCkp
OwogICAgICAgICAvLyBTaGFkb3cgY29tZXMgZmlyc3QgYW5kIGlzIGJlaGluZCB0aGUgYmFja2dy
b3VuZCBhbmQgYm9yZGVyLgogICAgICAgICBwYWludEJveFNoYWRvdyhjb250ZXh0LCBzdHlsZVRv
VXNlLCBOb3JtYWwsIHBhaW50UmVjdCk7CiAKQEAgLTExNjMsNyArMTE2Myw3IEBACiAgICAgfQog
fQogCi12b2lkIElubGluZUZsb3dCb3g6OnBhaW50TWFzayhQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQordm9pZCBJbmxpbmVGbG93Qm94OjpwYWludE1h
c2soUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIHBhaW50T2Zmc2V0KQog
ewogICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdChyZW5kZXJlcigpKSB8
fCByZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8fCBwYWludElu
Zm8ucGhhc2UgIT0gUGFpbnRQaGFzZU1hc2spCiAgICAgICAgIHJldHVybjsKQEAgLTExNzYsNyAr
MTE3Niw3IEBACiAgICAgLy8gTW92ZSB4L3kgdG8gb3VyIGNvb3JkaW5hdGVzLgogICAgIEludFJl
Y3QgbG9jYWxSZWN0KGZyYW1lUmVjdCk7CiAgICAgZmxpcEZvcldyaXRpbmdNb2RlKGxvY2FsUmVj
dCk7Ci0gICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9j
YWxSZWN0LmxvY2F0aW9uKCk7CisgICAgRmxvYXRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0g
cGFpbnRPZmZzZXQgKyBsb2NhbFJlY3QubG9jYXRpb24oKTsKIAogICAgIGNvbnN0IE5pbmVQaWVj
ZUltYWdlJiBtYXNrTmluZVBpZWNlSW1hZ2UgPSByZW5kZXJlcigpLT5zdHlsZSgpLT5tYXNrQm94
SW1hZ2UoKTsKICAgICBTdHlsZUltYWdlKiBtYXNrQm94SW1hZ2UgPSByZW5kZXJlcigpLT5zdHls
ZSgpLT5tYXNrQm94SW1hZ2UoKS5pbWFnZSgpOwpAQCAtMTE5Nyw3ICsxMTk3LDcgQEAKICAgICAg
ICAgfQogICAgIH0KIAotICAgIEludFJlY3QgcGFpbnRSZWN0ID0gSW50UmVjdChhZGp1c3RlZFBh
aW50T2Zmc2V0LCBmcmFtZVJlY3Quc2l6ZSgpKTsKKyAgICBJbnRSZWN0IHBhaW50UmVjdCA9IGVu
Y2xvc2luZ0ludFJlY3QoYWRqdXN0ZWRQYWludE9mZnNldCwgZnJhbWVSZWN0LnNpemUoKSk7CiAg
ICAgcGFpbnRGaWxsTGF5ZXJzKHBhaW50SW5mbywgQ29sb3IoKSwgcmVuZGVyZXIoKS0+c3R5bGUo
KS0+bWFza0xheWVycygpLCBwYWludFJlY3QsIGNvbXBvc2l0ZU9wKTsKICAgICAKICAgICBib29s
IGhhc0JveEltYWdlID0gbWFza0JveEltYWdlICYmIG1hc2tCb3hJbWFnZS0+Y2FuUmVuZGVyKHJl
bmRlcmVyKCktPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CkBAIC0xMjA3LDcgKzEyMDcsNyBA
QAogICAgIC8vIFRoZSBzaW1wbGUgY2FzZSBpcyB3aGVyZSB3ZSBhcmUgdGhlIG9ubHkgYm94IGZv
ciB0aGlzIG9iamVjdC4gIEluIHRob3NlCiAgICAgLy8gY2FzZXMgb25seSBhIHNpbmdsZSBjYWxs
IHRvIGRyYXcgaXMgcmVxdWlyZWQuCiAgICAgaWYgKCFwcmV2TGluZUJveCgpICYmICFuZXh0TGlu
ZUJveCgpKSB7Ci0gICAgICAgIGJveE1vZGVsT2JqZWN0KCktPnBhaW50TmluZVBpZWNlSW1hZ2Uo
cGFpbnRJbmZvLmNvbnRleHQsIEludFJlY3QoYWRqdXN0ZWRQYWludE9mZnNldCwgZnJhbWVSZWN0
LnNpemUoKSksIHJlbmRlcmVyKCktPnN0eWxlKCksIG1hc2tOaW5lUGllY2VJbWFnZSwgY29tcG9z
aXRlT3ApOworICAgICAgICBib3hNb2RlbE9iamVjdCgpLT5wYWludE5pbmVQaWVjZUltYWdlKHBh
aW50SW5mby5jb250ZXh0LCBGbG9hdFJlY3QoYWRqdXN0ZWRQYWludE9mZnNldCwgZnJhbWVSZWN0
LnNpemUoKSksIHJlbmRlcmVyKCktPnN0eWxlKCksIG1hc2tOaW5lUGllY2VJbWFnZSwgY29tcG9z
aXRlT3ApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFdlIGhhdmUgYSBtYXNrIGltYWdlIHRo
YXQgc3BhbnMgbXVsdGlwbGUgbGluZXMuCiAgICAgICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IF90
eCBhbmQgX3R5IGJ5IHRoZSB3aWR0aCBvZiBhbGwgcHJldmlvdXMgbGluZXMuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAJKHJldmlzaW9uIDg4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw3IEBACiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwog
fQogCi1JbnRSZWN0IFJlbmRlclRhYmxlUm93OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWlu
dChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikKK0Zsb2F0UmVjdCBSZW5k
ZXJUYWJsZVJvdzo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIpCiB7CiAgICAgQVNTRVJUKHBhcmVudCgpKTsKIApAQCAt
MTgzLDcgKzE4Myw3IEBACiAgICAgaWYgKFJlbmRlclRhYmxlKiBwYXJlbnRUYWJsZSA9IHRhYmxl
KCkpCiAgICAgICAgIHJldHVybiBwYXJlbnRUYWJsZS0+Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJl
cGFpbnQocmVwYWludENvbnRhaW5lcik7CiAKLSAgICByZXR1cm4gSW50UmVjdCgpOworICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKIH0KIAogLy8gSGl0IFRlc3RpbmcKQEAgLTIwOCw3ICsyMDgsNyBA
QAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZVJvdzo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKK3ZvaWQgUmVu
ZGVyVGFibGVSb3c6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFBvaW50
JiBwYWludE9mZnNldCkKIHsKICAgICBBU1NFUlQoaGFzU2VsZlBhaW50aW5nTGF5ZXIoKSk7CiAg
ICAgaWYgKCFsYXllcigpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklt
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1h
Z2UuY3BwCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw5ICsxOTcsOSBAQAogICAgICAgICAg
ICAgLy8gc28gbWFwIGZyb20gdGhlIGJvdW5kcyBvZiB0aGUgaW1hZ2UgdG8gdGhlIGNvbnRlbnRz
Qm94LgogICAgICAgICAgICAgcmVwYWludFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1hcFJlY3Qo
KnJlY3QsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1faW1hZ2VSZXNvdXJjZS0+aW1hZ2VTaXpl
KDEuMGYpKSwgY29udGVudEJveFJlY3QoKSkpOwogICAgICAgICAgICAgLy8gR3VhcmQgYWdhaW5z
dCB0b28tbGFyZ2UgY2hhbmdlZCByZWN0cy4KLSAgICAgICAgICAgIHJlcGFpbnRSZWN0LmludGVy
c2VjdChjb250ZW50Qm94UmVjdCgpKTsKKyAgICAgICAgICAgIHJlcGFpbnRSZWN0LmludGVyc2Vj
dChlbmNsb3NpbmdJbnRSZWN0KGNvbnRlbnRCb3hSZWN0KCkpKTsKICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICByZXBhaW50UmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7CisgICAgICAgICAgICBy
ZXBhaW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY29udGVudEJveFJlY3QoKSk7CiAgICAgICAg
IAogICAgICAgICByZXBhaW50UmVjdGFuZ2xlKHJlcGFpbnRSZWN0KTsKIApAQCAtMjMxLDcgKzIz
MSw3IEBACiAjZW5kaWYKIH0KIAotdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQordm9pZCBSZW5k
ZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQ
b2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaW50IGNXaWR0aCA9IGNvbnRlbnRXaWR0aCgpOwog
ICAgIGludCBjSGVpZ2h0ID0gY29udGVudEhlaWdodCgpOwpAQCAtMjcxLDcgKzI3MSw3IEBACiAg
ICAgICAgICAgICAgICAgaWYgKGNlbnRlclkgPCAwKQogICAgICAgICAgICAgICAgICAgICBjZW50
ZXJZID0gMDsKICAgICAgICAgICAgICAgICBpbWFnZU9mZnNldCA9IEludFNpemUobGVmdEJvcmRl
ciArIGxlZnRQYWQgKyBjZW50ZXJYICsgMSwgdG9wQm9yZGVyICsgdG9wUGFkICsgY2VudGVyWSAr
IDEpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZS5nZXQoKSwgc3R5
bGUoKS0+Y29sb3JTcGFjZSgpLCBwYWludE9mZnNldCArIGltYWdlT2Zmc2V0KTsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIHN0eWxlKCktPmNvbG9yU3Bh
Y2UoKSwgcm91bmRlZEludFBvaW50KHBhaW50T2Zmc2V0ICsgaW1hZ2VPZmZzZXQpKTsKICAgICAg
ICAgICAgICAgICBlcnJvclBpY3R1cmVEcmF3biA9IHRydWU7CiAgICAgICAgICAgICB9CiAKQEAg
LTI4MSw3ICsyODEsNyBAQAogICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHls
ZSgpLT5mb250KCk7CiAgICAgICAgICAgICAgICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRy
aWNzID0gZm9udC5mb250TWV0cmljcygpOwogICAgICAgICAgICAgICAgIGludCBhc2NlbnQgPSBm
b250TWV0cmljcy5hc2NlbnQoKTsKLSAgICAgICAgICAgICAgICBJbnRQb2ludCBhbHRUZXh0T2Zm
c2V0ID0gcGFpbnRPZmZzZXQ7CisgICAgICAgICAgICAgICAgRmxvYXRQb2ludCBhbHRUZXh0T2Zm
c2V0ID0gcGFpbnRPZmZzZXQ7CiAgICAgICAgICAgICAgICAgYWx0VGV4dE9mZnNldC5tb3ZlKGxl
ZnRCb3JkZXIgKyBsZWZ0UGFkLCB0b3BCb3JkZXIgKyB0b3BQYWQgKyBhc2NlbnQpOwogCiAgICAg
ICAgICAgICAgICAgLy8gT25seSBkcmF3IHRoZSBhbHQgdGV4dCBpZiBpdCdsbCBmaXQgd2l0aGlu
IHRoZSBjb250ZW50IGJveCwKQEAgLTMwNSwxNCArMzA1LDE0IEBACiAgICAgICAgICAgICBwYWlu
dEN1c3RvbUhpZ2hsaWdodCh0b1BvaW50KHBhaW50T2Zmc2V0IC0gbG9jYXRpb24oKSksIHN0eWxl
KCktPmhpZ2hsaWdodCgpLCB0cnVlKTsKICNlbmRpZgogCi0gICAgICAgIEludFNpemUgY29udGVu
dFNpemUoY1dpZHRoLCBjSGVpZ2h0KTsKLSAgICAgICAgSW50UG9pbnQgY29udGVudExvY2F0aW9u
ID0gcGFpbnRPZmZzZXQ7CisgICAgICAgIEZsb2F0U2l6ZSBjb250ZW50U2l6ZShjV2lkdGgsIGNI
ZWlnaHQpOworICAgICAgICBGbG9hdFBvaW50IGNvbnRlbnRMb2NhdGlvbiA9IHBhaW50T2Zmc2V0
OwogICAgICAgICBjb250ZW50TG9jYXRpb24ubW92ZShsZWZ0Qm9yZGVyICsgbGVmdFBhZCwgdG9w
Qm9yZGVyICsgdG9wUGFkKTsKLSAgICAgICAgcGFpbnRJbnRvUmVjdChjb250ZXh0LCBJbnRSZWN0
KGNvbnRlbnRMb2NhdGlvbiwgY29udGVudFNpemUpKTsKKyAgICAgICAgcGFpbnRJbnRvUmVjdChj
b250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChjb250ZW50TG9jYXRpb24sIGNvbnRl
bnRTaXplKSkpOwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKK3ZvaWQgUmVuZGVySW1h
Z2U6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiBwYWludE9m
ZnNldCkKIHsKICAgICBSZW5kZXJSZXBsYWNlZDo6cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNl
dCk7CiAgICAgCkBAIC0zODMsNyArMzgzLDcgQEAKICAgICBjb250ZXh0LT5kcmF3SW1hZ2UobV9p
bWFnZVJlc291cmNlLT5pbWFnZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpLmdldCgpLCBz
dHlsZSgpLT5jb2xvclNwYWNlKCksIHJlY3QsIGNvbXBvc2l0ZU9wZXJhdG9yLCB1c2VMb3dRdWFs
aXR5U2NhbGluZyk7CiB9CiAKLWludCBSZW5kZXJJbWFnZTo6bWluaW11bVJlcGxhY2VkSGVpZ2h0
KCkgY29uc3QKK2Zsb2F0IFJlbmRlckltYWdlOjptaW5pbXVtUmVwbGFjZWRIZWlnaHQoKSBjb25z
dAogewogICAgIHJldHVybiBtX2ltYWdlUmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSA/IGludHJp
bnNpY1NpemUoKS5oZWlnaHQoKSA6IDA7CiB9CkBAIC00MDEsNyArNDAxLDcgQEAKIAogICAgIGlm
ICh0ZW1wUmVzdWx0LmlubmVyTm9kZSgpICYmIG5vZGUoKSkgewogICAgICAgICBpZiAoSFRNTE1h
cEVsZW1lbnQqIG1hcCA9IGltYWdlTWFwKCkpIHsKLSAgICAgICAgICAgIEludFJlY3QgY29udGVu
dEJveCA9IGNvbnRlbnRCb3hSZWN0KCk7CisgICAgICAgICAgICBJbnRSZWN0IGNvbnRlbnRCb3gg
PSBlbmNsb3NpbmdJbnRSZWN0KGNvbnRlbnRCb3hSZWN0KCkpOwogICAgICAgICAgICAgZmxvYXQg
em9vbSA9IHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKICAgICAgICAgICAgIGludCBtYXBYID0g
bHJvdW5kZigocG9pbnRJbkNvbnRhaW5lci54KCkgLSBhY2N1bXVsYXRlZE9mZnNldC54KCkgLSB0
aGlzLT54KCkgLSBjb250ZW50Qm94LngoKSkgLyB6b29tKTsKICAgICAgICAgICAgIGludCBtYXBZ
ID0gbHJvdW5kZigocG9pbnRJbkNvbnRhaW5lci55KCkgLSBhY2N1bXVsYXRlZE9mZnNldC55KCkg
LSB0aGlzLT55KCkgLSBjb250ZW50Qm94LnkoKSkgLyB6b29tKTsKQEAgLTQ2MCw3ICs0NjAsNyBA
QAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW50IFJlbmRlckltYWdlOjpjb21wdXRlUmVwbGFj
ZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGgpIGNvbnN0CitmbG9hdCBSZW5kZXJJ
bWFnZTo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRoKSBj
b25zdAogewogICAgIGlmIChtX2ltYWdlUmVzb3VyY2UtPmltYWdlSGFzUmVsYXRpdmVXaWR0aCgp
KQogICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBjYiA9IGlzUG9zaXRpb25lZCgpID8gY29udGFp
bmVyKCkgOiBjb250YWluaW5nQmxvY2soKSkgewpAQCAtNDY4LDcgKzQ2OCw3IEBACiAgICAgICAg
ICAgICAgICAgbV9pbWFnZVJlc291cmNlLT5zZXRJbWFnZUNvbnRhaW5lclNpemUoSW50U2l6ZSh0
b1JlbmRlckJveChjYiktPmF2YWlsYWJsZVdpZHRoKCksIHRvUmVuZGVyQm94KGNiKS0+YXZhaWxh
YmxlSGVpZ2h0KCkpKTsKICAgICAgICAgfQogCi0gICAgaW50IGxvZ2ljYWxXaWR0aDsKKyAgICBm
bG9hdCBsb2dpY2FsV2lkdGg7CiAgICAgaWYgKGlzTG9naWNhbFdpZHRoU3BlY2lmaWVkKCkpCiAg
ICAgICAgIGxvZ2ljYWxXaWR0aCA9IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKHN0
eWxlKCktPmxvZ2ljYWxXaWR0aCgpKTsKICAgICBlbHNlIGlmIChtX2ltYWdlUmVzb3VyY2UtPnVz
ZXNJbWFnZUNvbnRhaW5lclNpemUoKSkgewpAQCAtNDgyLDkgKzQ4Miw5IEBACiAgICAgcmV0dXJu
IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFJlc3BlY3RpbmdNaW5NYXhXaWR0aChsb2dpY2Fs
V2lkdGgsIGluY2x1ZGVNYXhXaWR0aCk7CiB9CiAKLWludCBSZW5kZXJJbWFnZTo6Y29tcHV0ZVJl
cGxhY2VkTG9naWNhbEhlaWdodCgpIGNvbnN0CitmbG9hdCBSZW5kZXJJbWFnZTo6Y29tcHV0ZVJl
cGxhY2VkTG9naWNhbEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgaW50IGxvZ2ljYWxIZWlnaHQ7Cisg
ICAgZmxvYXQgbG9naWNhbEhlaWdodDsKICAgICBpZiAoaXNMb2dpY2FsSGVpZ2h0U3BlY2lmaWVk
KCkpCiAgICAgICAgIGxvZ2ljYWxIZWlnaHQgPSBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0
VXNpbmcoc3R5bGUoKS0+bG9naWNhbEhlaWdodCgpKTsKICAgICBlbHNlIGlmIChtX2ltYWdlUmVz
b3VyY2UtPnVzZXNJbWFnZUNvbnRhaW5lclNpemUoKSkgewpAQCAtNDk4LDEwICs0OTgsMTAgQEAK
ICAgICByZXR1cm4gY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFJlc3BlY3RpbmdNaW5NYXhI
ZWlnaHQobG9naWNhbEhlaWdodCk7CiB9CiAKLWludCBSZW5kZXJJbWFnZTo6Y2FsY0FzcGVjdFJh
dGlvTG9naWNhbFdpZHRoKCkgY29uc3QKK2Zsb2F0IFJlbmRlckltYWdlOjpjYWxjQXNwZWN0UmF0
aW9Mb2dpY2FsV2lkdGgoKSBjb25zdAogewotICAgIGludCBpbnRyaW5zaWNXaWR0aCA9IGludHJp
bnNpY0xvZ2ljYWxXaWR0aCgpOwotICAgIGludCBpbnRyaW5zaWNIZWlnaHQgPSBpbnRyaW5zaWNM
b2dpY2FsSGVpZ2h0KCk7CisgICAgZmxvYXQgaW50cmluc2ljV2lkdGggPSBpbnRyaW5zaWNMb2dp
Y2FsV2lkdGgoKTsKKyAgICBmbG9hdCBpbnRyaW5zaWNIZWlnaHQgPSBpbnRyaW5zaWNMb2dpY2Fs
SGVpZ2h0KCk7CiAgICAgaWYgKCFpbnRyaW5zaWNIZWlnaHQpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIGlmICghbV9pbWFnZVJlc291cmNlLT5oYXNJbWFnZSgpIHx8IG1faW1hZ2VSZXNvdXJjZS0+
ZXJyb3JPY2N1cnJlZCgpKQpAQCAtNTA5LDEwICs1MDksMTAgQEAKICAgICByZXR1cm4gUmVuZGVy
Qm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgKiBpbnRyaW5zaWNXaWR0aCAvIGlu
dHJpbnNpY0hlaWdodDsKIH0KIAotaW50IFJlbmRlckltYWdlOjpjYWxjQXNwZWN0UmF0aW9Mb2dp
Y2FsSGVpZ2h0KCkgY29uc3QKK2Zsb2F0IFJlbmRlckltYWdlOjpjYWxjQXNwZWN0UmF0aW9Mb2dp
Y2FsSGVpZ2h0KCkgY29uc3QKIHsKLSAgICBpbnQgaW50cmluc2ljV2lkdGggPSBpbnRyaW5zaWNM
b2dpY2FsV2lkdGgoKTsKLSAgICBpbnQgaW50cmluc2ljSGVpZ2h0ID0gaW50cmluc2ljTG9naWNh
bEhlaWdodCgpOworICAgIGZsb2F0IGludHJpbnNpY1dpZHRoID0gaW50cmluc2ljTG9naWNhbFdp
ZHRoKCk7CisgICAgZmxvYXQgaW50cmluc2ljSGVpZ2h0ID0gaW50cmluc2ljTG9naWNhbEhlaWdo
dCgpOwogICAgIGlmICghaW50cmluc2ljV2lkdGgpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlm
ICghbV9pbWFnZVJlc291cmNlLT5oYXNJbWFnZSgpIHx8IG1faW1hZ2VSZXNvdXJjZS0+ZXJyb3JP
Y2N1cnJlZCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAko
cmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogICAgIGZvciAoSW5saW5lVGV4
dEJveCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgp
KSB7CiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBib3gtPnJvb3QoKTsKICAgICAg
ICAgaWYgKHBvaW50QmxvY2tEaXJlY3Rpb24gPj0gcm9vdEJveC0+c2VsZWN0aW9uVG9wKCkgfHwg
cG9pbnRCbG9ja0RpcmVjdGlvbiA+PSByb290Qm94LT5saW5lVG9wKCkpIHsKLSAgICAgICAgICAg
IGludCBib3R0b20gPSByb290Qm94LT5zZWxlY3Rpb25Cb3R0b20oKTsKKyAgICAgICAgICAgIGZs
b2F0IGJvdHRvbSA9IHJvb3RCb3gtPnNlbGVjdGlvbkJvdHRvbSgpOwogICAgICAgICAgICAgaWYg
KHJvb3RCb3gtPm5leHRSb290Qm94KCkpCiAgICAgICAgICAgICAgICAgYm90dG9tID0gbWluKGJv
dHRvbSwgcm9vdEJveC0+bmV4dFJvb3RCb3goKS0+bGluZVRvcCgpKTsKIApAQCAtMTMzOSwxNiAr
MTMzOSwxNiBAQAogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCiAgICAgLy8gUmV0dXJuIHRo
ZSB3aWR0aCBvZiB0aGUgbWluaW1hbCBsZWZ0IHNpZGUgYW5kIHRoZSBtYXhpbWFsIHJpZ2h0IHNp
ZGUuCi0gICAgaW50IGxvZ2ljYWxMZWZ0U2lkZSA9IG51bWVyaWNfbGltaXRzPGludD46Om1heCgp
OwotICAgIGludCBsb2dpY2FsUmlnaHRTaWRlID0gbnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7
CisgICAgZmxvYXQgbG9naWNhbExlZnRTaWRlID0gbnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgo
KTsKKyAgICBmbG9hdCBsb2dpY2FsUmlnaHRTaWRlID0gbnVtZXJpY19saW1pdHM8ZmxvYXQ+Ojpt
aW4oKTsKICAgICBmb3IgKElubGluZVRleHRCb3gqIGN1cnIgPSBmaXJzdFRleHRCb3goKTsgY3Vy
cjsgY3VyciA9IGN1cnItPm5leHRUZXh0Qm94KCkpIHsKICAgICAgICAgbG9naWNhbExlZnRTaWRl
ID0gbWluKGxvZ2ljYWxMZWZ0U2lkZSwgY3Vyci0+bG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdygp
KTsKICAgICAgICAgbG9naWNhbFJpZ2h0U2lkZSA9IG1heChsb2dpY2FsUmlnaHRTaWRlLCBjdXJy
LT5sb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdygpKTsKICAgICB9CiAgICAgCi0gICAgaW50IGxv
Z2ljYWxUb3AgPSBmaXJzdFRleHRCb3goKS0+bG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KCk7Ci0g
ICAgaW50IGxvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxSaWdodFNpZGUgLSBsb2dpY2FsTGVmdFNpZGU7
Ci0gICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBsYXN0VGV4dEJveCgpLT5sb2dpY2FsQm90dG9tVmlz
dWFsT3ZlcmZsb3coKSAtIGxvZ2ljYWxUb3A7CisgICAgZmxvYXQgbG9naWNhbFRvcCA9IGZpcnN0
VGV4dEJveCgpLT5sb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3coKTsKKyAgICBmbG9hdCBsb2dpY2Fs
V2lkdGggPSBsb2dpY2FsUmlnaHRTaWRlIC0gbG9naWNhbExlZnRTaWRlOworICAgIGZsb2F0IGxv
Z2ljYWxIZWlnaHQgPSBsYXN0VGV4dEJveCgpLT5sb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3co
KSAtIGxvZ2ljYWxUb3A7CiAgICAgCiAgICAgSW50UmVjdCByZWN0KGxvZ2ljYWxMZWZ0U2lkZSwg
bG9naWNhbFRvcCwgbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KTsKICAgICBpZiAoIXN0eWxl
KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCkBAIC0xMzU2LDcgKzEzNTYsNyBAQAogICAg
IHJldHVybiByZWN0OwogfQogCi1JbnRSZWN0IFJlbmRlclRleHQ6OmNsaXBwZWRPdmVyZmxvd1Jl
Y3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKQorRmxv
YXRSZWN0IFJlbmRlclRleHQ6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJv
eE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKQogewogICAgIGJvb2wgcmVwYWludENvbnRh
aW5lclNraXBwZWQ7CiAgICAgUmVuZGVyT2JqZWN0KiBjb250YWluZXIgPSB0aGlzLT5jb250YWlu
ZXIocmVwYWludENvbnRhaW5lciwgJnJlcGFpbnRDb250YWluZXJTa2lwcGVkKTsKQEAgLTEzNjcs
NyArMTM2Nyw3IEBACiAgICAgcmV0dXJuIGNvbnRhaW5lci0+Y2xpcHBlZE92ZXJmbG93UmVjdEZv
clJlcGFpbnQocmVwYWludENvbnRhaW5lcik7CiB9CiAKLUludFJlY3QgUmVuZGVyVGV4dDo6c2Vs
ZWN0aW9uUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWlu
ZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpCitGbG9hdFJlY3QgUmVuZGVyVGV4dDo6c2Vs
ZWN0aW9uUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWlu
ZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpCiB7CiAgICAgQVNTRVJUKCFuZWVkc0xheW91
dCgpKTsKIApAQCAtMTM3NSw3ICsxMzc1LDcgQEAKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsK
ICAgICBSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsKICAgICBpZiAoIWNiKQot
ICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAK
ICAgICAvLyBOb3cgY2FsY3VsYXRlIHN0YXJ0UG9zIGFuZCBlbmRQb3MgZm9yIHBhaW50aW5nIHNl
bGVjdGlvbi4KICAgICAvLyBXZSBpbmNsdWRlIGEgc2VsZWN0aW9uIHdoaWxlIGVuZFBvcyA+IDAK
QEAgLTEzOTUsNyArMTM5NSw3IEBACiAgICAgaWYgKHN0YXJ0UG9zID09IGVuZFBvcykKICAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKIAotICAgIEludFJlY3QgcmVjdDsKKyAgICBGbG9hdFJlY3Qg
cmVjdDsKICAgICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IGZpcnN0VGV4dEJveCgpOyBib3g7
IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewogICAgICAgICByZWN0LnVuaXRlKGJveC0+c2Vs
ZWN0aW9uUmVjdChzdGFydFBvcywgZW5kUG9zKSk7CiAgICAgICAgIHJlY3QudW5pdGUoZWxsaXBz
aXNSZWN0Rm9yQm94KGJveCwgc3RhcnRQb3MsIGVuZFBvcykpOwpAQCAtMTQwNyw3ICsxNDA3LDcg
QEAKICAgICAgICAgaWYgKGNiLT5oYXNDb2x1bW5zKCkpCiAgICAgICAgICAgICBjYi0+YWRqdXN0
UmVjdEZvckNvbHVtbnMocmVjdCk7CiAKLSAgICAgICAgcmVjdCA9IGxvY2FsVG9Db250YWluZXJR
dWFkKEZsb2F0UmVjdChyZWN0KSwgcmVwYWludENvbnRhaW5lcikuZW5jbG9zaW5nQm91bmRpbmdC
b3goKTsKKyAgICAgICAgcmVjdCA9IGxvY2FsVG9Db250YWluZXJRdWFkKHJlY3QsIHJlcGFpbnRD
b250YWluZXIpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJl
Y3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVCYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVCYXNlLmNw
cAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJh
bWVCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsOCArNjUsOCBAQAogICAgIGJvb2wgaXNT
Y3JvbGxhYmxlID0gZWxlbWVudC0+c2Nyb2xsaW5nTW9kZSgpICE9IFNjcm9sbGJhckFsd2F5c09m
ZjsKIAogICAgIC8vIGNvbnNpZGVyIGlmcmFtZSBpbnNldCBib3JkZXIKLSAgICBpbnQgaEJvcmRl
ciA9IGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCk7Ci0gICAgaW50IHZCb3JkZXIgPSBib3Jk
ZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpOworICAgIGZsb2F0IGhCb3JkZXIgPSBib3JkZXJMZWZ0
KCkgKyBib3JkZXJSaWdodCgpOworICAgIGZsb2F0IHZCb3JkZXIgPSBib3JkZXJUb3AoKSArIGJv
cmRlckJvdHRvbSgpOwogCiAgICAgLy8gbWFrZSBzdXJlIG1pbmltdW0gcHJlZmVycmVkIHdpZHRo
IGlzIGVuZm9yY2VkCiAgICAgaWYgKGlzU2Nyb2xsYWJsZSB8fCAhZml4ZWRXaWR0aCkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaAkocmV2aXNpb24gODg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJO
YW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNsaWRlciI7IH0KICAgICAgICAgdmlydHVhbCBi
b29sIGlzU2xpZGVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgICAgIHZpcnR1YWwg
aW50IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIGZpcnN0TGluZSwgTGluZURp
cmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUp
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIGZsb2F0IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2Vs
aW5lLCBib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUg
PSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIHZvaWQg
Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGxh
eW91dCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVB
c1RleHQuY3BwCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQAogCiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0aWMgdm9pZCB3cml0ZUxheWVycyhUZXh0
U3RyZWFtJiwgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqLCBjb25z
dCBJbnRSZWN0JiBwYWludERpcnR5UmVjdCwgaW50IGluZGVudCA9IDAsIFJlbmRlckFzVGV4dEJl
aGF2aW9yIGJlaGF2aW9yID0gUmVuZGVyQXNUZXh0QmVoYXZpb3JOb3JtYWwpOworc3RhdGljIHZv
aWQgd3JpdGVMYXllcnMoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIs
IFJlbmRlckxheWVyKiwgY29uc3QgRmxvYXRSZWN0JiBwYWludERpcnR5UmVjdCwgaW50IGluZGVu
dCA9IDAsIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yID0gUmVuZGVyQXNUZXh0QmVoYXZp
b3JOb3JtYWwpOwogCiBib29sIGhhc0ZyYWN0aW9ucyhkb3VibGUgdmFsKQogewpAQCAtMjY3LDcg
KzI2Nyw3IEBACiAgICAgICAgIGNvbnN0IFJlbmRlclRhYmxlQ2VsbCYgY2VsbCA9ICp0b1JlbmRl
clRhYmxlQ2VsbCgmbyk7CiAgICAgICAgIHIgPSBJbnRSZWN0KGNlbGwueCgpLCBjZWxsLnkoKSAr
IGNlbGwuaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpLCBjZWxsLndpZHRoKCksIGNlbGwuaGVpZ2h0
KCkgLSBjZWxsLmludHJpbnNpY1BhZGRpbmdCZWZvcmUoKSAtIGNlbGwuaW50cmluc2ljUGFkZGlu
Z0FmdGVyKCkpOwogICAgIH0gZWxzZSBpZiAoby5pc0JveCgpKQotICAgICAgICByID0gdG9SZW5k
ZXJCb3goJm8pLT5mcmFtZVJlY3QoKTsKKyAgICAgICAgciA9IGVuY2xvc2luZ0ludFJlY3QodG9S
ZW5kZXJCb3goJm8pLT5mcmFtZVJlY3QoKSk7CiAKICAgICAvLyBGSVhNRTogVGVtcG9yYXJ5IGlu
IG9yZGVyIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgbGF5b3V0IHRlc3Qg
cmVzdWx0cy4KICAgICBpZiAoYWRqdXN0Rm9yVGFibGVDZWxscykKQEAgLTY0NiwxOSArNjQ2LDE5
IEBACiB9CiAKIHN0YXRpYyB2b2lkIHdyaXRlTGF5ZXJzKFRleHRTdHJlYW0mIHRzLCBjb25zdCBS
ZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogbCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEludFJlY3QmIHBhaW50UmVjdCwgaW50IGluZGVudCwgUmVuZGVyQXNUZXh0
QmVoYXZpb3IgYmVoYXZpb3IpCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJl
Y3QmIHBhaW50UmVjdCwgaW50IGluZGVudCwgUmVuZGVyQXNUZXh0QmVoYXZpb3IgYmVoYXZpb3Ip
CiB7CiAgICAgLy8gRklYTUU6IEFwcGx5IG92ZXJmbG93IHRvIHRoZSByb290IGxheWVyIHRvIG5v
dCBicmVhayBldmVyeSB0ZXN0LiAgQ29tcGxldGUgaGFjay4gIFNpZ2guCi0gICAgSW50UmVjdCBw
YWludERpcnR5UmVjdChwYWludFJlY3QpOworICAgIEZsb2F0UmVjdCBwYWludERpcnR5UmVjdChw
YWludFJlY3QpOwogICAgIGlmIChyb290TGF5ZXIgPT0gbCkgewogICAgICAgICBwYWludERpcnR5
UmVjdC5zZXRXaWR0aChtYXgocGFpbnREaXJ0eVJlY3Qud2lkdGgoKSwgcm9vdExheWVyLT5yZW5k
ZXJCb3goKS0+bWF4WExheW91dE92ZXJmbG93KCkpKTsKICAgICAgICAgcGFpbnREaXJ0eVJlY3Qu
c2V0SGVpZ2h0KG1heChwYWludERpcnR5UmVjdC5oZWlnaHQoKSwgcm9vdExheWVyLT5yZW5kZXJC
b3goKS0+bWF4WUxheW91dE92ZXJmbG93KCkpKTsKLSAgICAgICAgbC0+c2V0U2l6ZShsLT5zaXpl
KCkuZXhwYW5kZWRUbyhsLT5yZW5kZXJCb3goKS0+bWF4TGF5b3V0T3ZlcmZsb3coKSkpOworICAg
ICAgICBsLT5zZXRTaXplKGwtPnNpemUoKS5leHBhbmRlZFRvKGV4cGFuZGVkSW50U2l6ZShsLT5y
ZW5kZXJCb3goKS0+bWF4TGF5b3V0T3ZlcmZsb3coKSkpKTsKICAgICB9CiAgICAgCiAgICAgLy8g
Q2FsY3VsYXRlIHRoZSBjbGlwIHJlY3RzIHdlIHNob3VsZCB1c2UuCiAgICAgSW50UmVjdCBsYXll
ckJvdW5kcywgZGFtYWdlUmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdDsKLSAgICBs
LT5jYWxjdWxhdGVSZWN0cyhyb290TGF5ZXIsIHBhaW50RGlydHlSZWN0LCBsYXllckJvdW5kcywg
ZGFtYWdlUmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdCwgdHJ1ZSk7CisgICAgbC0+
Y2FsY3VsYXRlUmVjdHMocm9vdExheWVyLCBlbmNsb3NpbmdJbnRSZWN0KHBhaW50RGlydHlSZWN0
KSwgbGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3Qs
IHRydWUpOwogCiAgICAgLy8gRW5zdXJlIG91ciBsaXN0cyBhcmUgdXAtdG8tZGF0ZS4KICAgICBs
LT51cGRhdGVaT3JkZXJMaXN0cygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5oCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB2
b2lkIHNldE9wdGlvbnNDaGFuZ2VkKGJvb2wgY2hhbmdlZCkgeyBtX29wdGlvbnNDaGFuZ2VkID0g
Y2hhbmdlZDsgfQogCiAgICAgaW50IGxpc3RJbmRleEF0T2Zmc2V0KGludCB4LCBpbnQgeSk7Ci0g
ICAgSW50UmVjdCBpdGVtQm91bmRpbmdCb3hSZWN0KGNvbnN0IEludFBvaW50JiwgaW50IGluZGV4
KTsKKyAgICBJbnRSZWN0IGl0ZW1Cb3VuZGluZ0JveFJlY3QoY29uc3QgRmxvYXRQb2ludCYsIGlu
dCBpbmRleCk7CiAKICAgICBib29sIHNjcm9sbFRvUmV2ZWFsRWxlbWVudEF0TGlzdEluZGV4KGlu
dCBpbmRleCk7CiAgICAgYm9vbCBsaXN0SW5kZXhJc1Zpc2libGUoaW50IGluZGV4KTsKQEAgLTY1
LDggKzY1LDggQEAKICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBoYXNDb250cm9sQ2xpcCgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJbmZv
JiwgY29uc3QgSW50UG9pbnQmKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgY29udHJvbENsaXBSZWN0
KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBhaW50T2JqZWN0KFBh
aW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIEludFJlY3QgY29udHJv
bENsaXBSZWN0KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBp
c1BvaW50SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBw
b2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOwogCkBA
IC03NCwxMiArNzQsMTIgQEAKICAgICB2aXJ0dWFsIGJvb2wgbG9naWNhbFNjcm9sbChTY3JvbGxM
b2dpY2FsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEs
IE5vZGUqKiBzdG9wTm9kZSA9IDApOwogCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzKCk7Ci0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihGb250
QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9u
TW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9h
dCBiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJl
Y3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUxvZ2ljYWxIZWlnaHQoKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0
cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBJbnRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBh
ZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBGbG9hdFBvaW50Jik7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgY2FuQmVQcm9ncmFtYXRpY2FsbHlTY3JvbGxlZCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgYXV0b3Njcm9sbCgpOwpAQCAtODgsMTMg
Kzg4LDEzIEBACiAgICAgdmlydHVhbCBib29sIHNob3VsZFBhblNjcm9sbCgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFuU2Nyb2xsKGNvbnN0IEludFBvaW50Jik7
CiAKLSAgICB2aXJ0dWFsIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBpbnQgc2Nyb2xsTGVmdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHNjcm9sbFRv
cCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBpbnQgc2Nyb2xsSGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9s
bExlZnQoaW50KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsVG9wKGludCk7CisgICAgdmly
dHVhbCBmbG9hdCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBm
bG9hdCBzY3JvbGxMZWZ0KCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBzY3JvbGxUb3AoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IHNjcm9sbFdpZHRoKCkgY29uc3Q7CisgICAgdmlydHVh
bCBmbG9hdCBzY3JvbGxIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xs
TGVmdChmbG9hdCk7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFRvcChmbG9hdCk7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CiAKQEAgLTEzMiw5ICsxMzIsOSBA
QAogICAgIGludCBudW1WaXNpYmxlSXRlbXMoKSBjb25zdDsKICAgICBpbnQgbnVtSXRlbXMoKSBj
b25zdDsKICAgICBpbnQgbGlzdEhlaWdodCgpIGNvbnN0OwotICAgIHZvaWQgcGFpbnRTY3JvbGxi
YXIoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKLSAgICB2b2lkIHBhaW50SXRlbUZvcmVn
cm91bmQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmLCBpbnQgbGlzdEluZGV4KTsKLSAgICB2
b2lkIHBhaW50SXRlbUJhY2tncm91bmQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmLCBpbnQg
bGlzdEluZGV4KTsKKyAgICB2b2lkIHBhaW50U2Nyb2xsYmFyKFBhaW50SW5mbyYsIGNvbnN0IEZs
b2F0UG9pbnQmKTsKKyAgICB2b2lkIHBhaW50SXRlbUZvcmVncm91bmQoUGFpbnRJbmZvJiwgY29u
c3QgRmxvYXRQb2ludCYsIGludCBsaXN0SW5kZXgpOworICAgIHZvaWQgcGFpbnRJdGVtQmFja2dy
b3VuZChQYWludEluZm8mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGxpc3RJbmRleCk7CiAgICAg
dm9pZCBzY3JvbGxUb1JldmVhbFNlbGVjdGlvbigpOwogCiAgICAgYm9vbCBtX29wdGlvbnNDaGFu
Z2VkOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAko
cmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAKICAgICBnVGV4dEJveGVzV2l0
aE92ZXJmbG93LT5hZGQodGhpcywgcmVjdCk7CiB9CiAKLWludCBJbmxpbmVUZXh0Qm94OjpiYXNl
bGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUpIGNvbnN0CitmbG9hdCBJbmxp
bmVUZXh0Qm94OjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUpIGNv
bnN0CiB7CiAgICAgaWYgKCFpc1RleHQoKSB8fCAhcGFyZW50KCkpCiAgICAgICAgIHJldHVybiAw
OwpAQCAtODcsNyArODcsNyBAQAogICAgIHJldHVybiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJl
bmRlcmVyKCktPnBhcmVudCgpKS0+YmFzZWxpbmVQb3NpdGlvbihiYXNlbGluZVR5cGUsIG1fZmly
c3RMaW5lLCBpc0hvcml6b250YWwoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQ
b3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpOwogfQogICAgIAotaW50IElubGluZVRleHRCb3g6Omxp
bmVIZWlnaHQoKSBjb25zdAorZmxvYXQgSW5saW5lVGV4dEJveDo6bGluZUhlaWdodCgpIGNvbnN0
CiB7CiAgICAgaWYgKCFpc1RleHQoKSB8fCAhcmVuZGVyZXIoKS0+cGFyZW50KCkpCiAgICAgICAg
IHJldHVybiAwOwpAQCAtNDY2LDcgKzQ2Niw3IEBACiAgICAgICAgIDogQWZmaW5lVHJhbnNmb3Jt
KDAsIC0xLCAxLCAwLCBib3hSZWN0LngoKSAtIGJveFJlY3QubWF4WSgpLCBib3hSZWN0LngoKSAr
IGJveFJlY3QubWF4WSgpKTsKIH0KIAotdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBpbnQgLypsaW5lVG9w
Ki8sIGludCAvKmxpbmVCb3R0b20qLykKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIHBhaW50T2Zmc2V0LCBpbnQgLypsaW5l
VG9wKi8sIGludCAvKmxpbmVCb3R0b20qLykKIHsKICAgICBpZiAoaXNMaW5lQnJlYWsoKSB8fCAh
cGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdChyZW5kZXJlcigpKSB8fCByZW5kZXJlcigp
LT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8fAogICAgICAgICBtX3RydW5jYXRp
b24gPT0gY0Z1bGxUcnVuY2F0aW9uIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0
bGluZSB8fCAhbV9sZW4pCkBAIC00ODIsNyArNDgyLDcgQEAKICAgICBpbnQgcGFpbnRFbmQgPSBp
c0hvcml6b250YWwoKSA/IHBhaW50SW5mby5yZWN0Lm1heFgoKSA6IHBhaW50SW5mby5yZWN0Lm1h
eFkoKTsKICAgICBpbnQgcGFpbnRTdGFydCA9IGlzSG9yaXpvbnRhbCgpID8gcGFpbnRJbmZvLnJl
Y3QueCgpIDogcGFpbnRJbmZvLnJlY3QueSgpOwogICAgIAotICAgIEludFBvaW50IGFkanVzdGVk
UGFpbnRPZmZzZXQgPSBwYWludE9mZnNldDsKKyAgICBGbG9hdFBvaW50IGFkanVzdGVkUGFpbnRP
ZmZzZXQgPSBwYWludE9mZnNldDsKICAgICAKICAgICBpZiAobG9naWNhbFN0YXJ0ID49IHBhaW50
RW5kIHx8IGxvZ2ljYWxTdGFydCArIGxvZ2ljYWxFeHRlbnQgPD0gcGFpbnRTdGFydCkKICAgICAg
ICAgcmV0dXJuOwpAQCAtODUzLDcgKzg1Myw3IEBACiAKICNpZiBQTEFURk9STShNQUMpCiAKLXZv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnRDdXN0b21IaWdobGlnaHQoY29uc3QgSW50UG9pbnQmIHBh
aW50T2Zmc2V0LCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpCit2b2lkIElubGluZVRleHRCb3g6
OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KGNvbnN0IEZsb2F0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gcmVuZGVyZXIoKS0+
ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0VsbGlwc2lzQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RWxsaXBzaXNCb3guY3BwCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FbGxpcHNpc0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEVsbGlwc2lzQm94OjpwYWludChQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBpbnQgbGluZVRvcCwgaW50
IGxpbmVCb3R0b20pCit2b2lkIEVsbGlwc2lzQm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgRmxvYXRQb2ludCYgcGFpbnRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJv
dHRvbSkKIHsKICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4
dDsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX3JlbmRlcmVyLT5zdHlsZShtX2ZpcnN0TGlu
ZSk7CkBAIC02Niw3ICs2Niw3IEBACiAKICAgICBpZiAobV9tYXJrdXBCb3gpIHsKICAgICAgICAg
Ly8gUGFpbnQgdGhlIG1hcmt1cCBib3gKLSAgICAgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9m
ZnNldCA9IHBhaW50T2Zmc2V0OworICAgICAgICBGbG9hdFBvaW50IGFkanVzdGVkUGFpbnRPZmZz
ZXQgPSBwYWludE9mZnNldDsKICAgICAgICAgYWRqdXN0ZWRQYWludE9mZnNldC5tb3ZlKHgoKSAr
IG1fbG9naWNhbFdpZHRoIC0gbV9tYXJrdXBCb3gtPngoKSwKICAgICAgICAgICAgIHkoKSArIHN0
eWxlLT5mb250TWV0cmljcygpLmFzY2VudCgpIC0gKG1fbWFya3VwQm94LT55KCkgKyBtX21hcmt1
cEJveC0+cmVuZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUpLT5mb250TWV0cmljcygpLmFzY2Vu
dCgpKSk7CiAgICAgICAgIG1fbWFya3VwQm94LT5wYWludChwYWludEluZm8sIGFkanVzdGVkUGFp
bnRPZmZzZXQsIGxpbmVUb3AsIGxpbmVCb3R0b20pOwpAQCAtODEsNyArODEsNyBAQAogICAgIHJl
dHVybiBlbmNsb3NpbmdJbnRSZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQoUmVuZGVyQmxv
Y2s6OmNvbnN0cnVjdFRleHRSdW4ocmVuZGVyZXIoKSwgZm9udCwgbV9zdHIsIHN0eWxlLCBUZXh0
UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKSwgSW50UG9pbnQoeCgpLCB5KCkgKyByb290KCkt
PnNlbGVjdGlvblRvcCgpKSwgcm9vdCgpLT5zZWxlY3Rpb25IZWlnaHQoKSkpOwogfQogCi12b2lk
IEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFBvaW50JiBwYWludE9mZnNldCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250
JiBmb250KQordm9pZCBFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwYWludE9mZnNldCwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBjb25zdCBGb250JiBmb250KQogewogICAgIENvbG9yIHRleHRDb2xvciA9IHN0eWxlLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CiAgICAgQ29sb3IgYyA9IG1f
cmVuZGVyZXItPnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDcgKzU3LDcgQEAKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwogCiAgICAgdmlydHVhbCBi
b29sIGlzRW1wdHkoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwg
Y29uc3QgSW50UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29u
c3QgRmxvYXRQb2ludCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1
YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5jcHAJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSwxOSArMjM1
LDE5IEBACiAgICAgfQogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cGFp
bnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKK3Zv
aWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwYWludChQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgRmxvYXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgUmVuZGVyVGV4dENvbnRy
b2w6OnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogCiAgICAgaWYgKHBhaW50SW5mby5w
aGFzZSA9PSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kICYmIG1fc2hvdWxkRHJhd0NhcHNMb2Nr
SW5kaWNhdG9yKSB7Ci0gICAgICAgIEludFJlY3QgY29udGVudHNSZWN0ID0gY29udGVudEJveFJl
Y3QoKTsKKyAgICAgICAgRmxvYXRSZWN0IGNvbnRlbnRzUmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7
CiAKICAgICAgICAgLy8gQ2VudGVyIHZlcnRpY2FsbHkgbGlrZSB0aGUgdGV4dC4KICAgICAgICAg
Y29udGVudHNSZWN0LnNldFkoKGhlaWdodCgpIC0gY29udGVudHNSZWN0LmhlaWdodCgpKSAvIDIp
OwogCiAgICAgICAgIC8vIENvbnZlcnQgdGhlIHJlY3QgaW50byB0aGUgY29vcmRzIHVzZWQgZm9y
IHBhaW50aW5nIHRoZSBjb250ZW50CiAgICAgICAgIGNvbnRlbnRzUmVjdC5tb3ZlQnkocGFpbnRP
ZmZzZXQgKyBsb2NhdGlvbigpKTsKLSAgICAgICAgdGhlbWUoKS0+cGFpbnRDYXBzTG9ja0luZGlj
YXRvcih0aGlzLCBwYWludEluZm8sIGNvbnRlbnRzUmVjdCk7CisgICAgICAgIHRoZW1lKCktPnBh
aW50Q2Fwc0xvY2tJbmRpY2F0b3IodGhpcywgcGFpbnRJbmZvLCBlbmNsb3NpbmdJbnRSZWN0KGNv
bnRlbnRzUmVjdCkpOwogICAgIH0KIH0KIApAQCAtMzY1LDcgKzM2NSw3IEBACiAgICAgUmVuZGVy
Qm94KiBpbm5lclRleHRSZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyQm94KCk7
CiAKICAgICBJbnRQb2ludCBsb2NhbFBvaW50ID0gcmVzdWx0LmxvY2FsUG9pbnQoKTsKLSAgICBs
b2NhbFBvaW50Lm1vdmUoLWlubmVyQmxvY2tSZW5kZXJlci0+bG9jYXRpb24oKSk7CisgICAgbG9j
YWxQb2ludC5tb3ZlKHJvdW5kZWRJbnRQb2ludCgtaW5uZXJCbG9ja1JlbmRlcmVyLT5sb2NhdGlv
bigpKSk7CiAKICAgICBpbnQgdGV4dExlZnQgPSBhY2N1bXVsYXRlZE9mZnNldC54KCkgKyB4KCkg
KyBpbm5lckJsb2NrUmVuZGVyZXItPngoKSArIGlubmVyVGV4dFJlbmRlcmVyLT54KCk7CiAgICAg
aWYgKHJlc3VsdHNCdXR0b24gJiYgcmVzdWx0c0J1dHRvbi0+cmVuZGVyZXIoKSAmJiBwb2ludElu
Q29udGFpbmVyLngoKSA8IHRleHRMZWZ0KQpAQCAtMzg3LDcgKzM4Nyw3IEBACiAKICAgICBpZiAo
aW5uZXJOb2RlKSB7CiAgICAgICAgIHJlc3VsdC5zZXRJbm5lck5vZGUoaW5uZXJOb2RlKTsKLSAg
ICAgICAgbG9jYWxQb2ludC5tb3ZlKC1pbm5lck5vZGUtPnJlbmRlckJveCgpLT5sb2NhdGlvbigp
KTsKKyAgICAgICAgbG9jYWxQb2ludC5tb3ZlKHJvdW5kZWRJbnRQb2ludCgtaW5uZXJOb2RlLT5y
ZW5kZXJCb3goKS0+bG9jYXRpb24oKSkpOwogICAgIH0KIAogICAgIHJlc3VsdC5zZXRMb2NhbFBv
aW50KGxvY2FsUG9pbnQpOwpAQCAtNDgyLDEzICs0ODIsMTMgQEAKICAgICByZXR1cm4gY2xpcDsK
IH0KIAotSW50UmVjdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbnRyb2xDbGlwUmVj
dChjb25zdCBJbnRQb2ludCYgYWRkaXRpb25hbE9mZnNldCkgY29uc3QKK0ludFJlY3QgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb250cm9sQ2xpcFJlY3QoY29uc3QgRmxvYXRQb2ludCYg
YWRkaXRpb25hbE9mZnNldCkgY29uc3QKIHsKICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGdldCBj
YWxsZWQgZm9yIHNlYXJjaCAmIHNwZWVjaCBpbnB1dHMuCiAgICAgQVNTRVJUKGhhc0NvbnRyb2xD
bGlwKCkpOwogCiAgICAgSW50UmVjdCBjbGlwUmVjdCA9IEludFJlY3QoaW5uZXJCbG9ja0VsZW1l
bnQoKS0+cmVuZGVyQm94KCktPmZyYW1lUmVjdCgpKTsKLSAgICBjbGlwUmVjdC5tb3ZlQnkoYWRk
aXRpb25hbE9mZnNldCk7CisgICAgY2xpcFJlY3QubW92ZUJ5KHJvdW5kZWRJbnRQb2ludChhZGRp
dGlvbmFsT2Zmc2V0KSk7CiAgICAgcmV0dXJuIGNsaXBSZWN0OwogfQogCkBAIC01ODYsMTkgKzU4
NiwxOSBAQAogICAgIGlmIChSZW5kZXJCb3gqIHJlc3VsdHNSZW5kZXJlciA9IHJlc3VsdHNCdXR0
b24gPyByZXN1bHRzQnV0dG9uLT5yZW5kZXJCb3goKSA6IDApIHsKICAgICAgICAgcmVzdWx0c1Jl
bmRlcmVyLT5jb21wdXRlTG9naWNhbEhlaWdodCgpOwogICAgICAgICBzZXRIZWlnaHQobWF4KGhl
aWdodCgpLAotICAgICAgICAgICAgICAgICAgcmVzdWx0c1JlbmRlcmVyLT5ib3JkZXJUb3AoKSAr
IHJlc3VsdHNSZW5kZXJlci0+Ym9yZGVyQm90dG9tKCkgKworICAgICAgICAgICAgICAgICAgKGZs
b2F0KXJlc3VsdHNSZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyByZXN1bHRzUmVuZGVyZXItPmJvcmRl
ckJvdHRvbSgpICsKICAgICAgICAgICAgICAgICAgIHJlc3VsdHNSZW5kZXJlci0+cGFkZGluZ1Rv
cCgpICsgcmVzdWx0c1JlbmRlcmVyLT5wYWRkaW5nQm90dG9tKCkgKwogICAgICAgICAgICAgICAg
ICAgcmVzdWx0c1JlbmRlcmVyLT5tYXJnaW5Ub3AoKSArIHJlc3VsdHNSZW5kZXJlci0+bWFyZ2lu
Qm90dG9tKCkpKTsKLSAgICAgICAgbGluZUhlaWdodCA9IG1heChsaW5lSGVpZ2h0LCByZXN1bHRz
UmVuZGVyZXItPmhlaWdodCgpKTsKKyAgICAgICAgbGluZUhlaWdodCA9IG1heCgoZmxvYXQpbGlu
ZUhlaWdodCwgcmVzdWx0c1JlbmRlcmVyLT5oZWlnaHQoKSk7CiAgICAgfQogICAgIEhUTUxFbGVt
ZW50KiBjYW5jZWxCdXR0b24gPSBjYW5jZWxCdXR0b25FbGVtZW50KCk7CiAgICAgaWYgKFJlbmRl
ckJveCogY2FuY2VsUmVuZGVyZXIgPSBjYW5jZWxCdXR0b24gPyBjYW5jZWxCdXR0b24tPnJlbmRl
ckJveCgpIDogMCkgewogICAgICAgICBjYW5jZWxSZW5kZXJlci0+Y29tcHV0ZUxvZ2ljYWxIZWln
aHQoKTsKICAgICAgICAgc2V0SGVpZ2h0KG1heChoZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAg
IGNhbmNlbFJlbmRlcmVyLT5ib3JkZXJUb3AoKSArIGNhbmNlbFJlbmRlcmVyLT5ib3JkZXJCb3R0
b20oKSArCisgICAgICAgICAgICAgICAgICAoZmxvYXQpY2FuY2VsUmVuZGVyZXItPmJvcmRlclRv
cCgpICsgY2FuY2VsUmVuZGVyZXItPmJvcmRlckJvdHRvbSgpICsKICAgICAgICAgICAgICAgICAg
IGNhbmNlbFJlbmRlcmVyLT5wYWRkaW5nVG9wKCkgKyBjYW5jZWxSZW5kZXJlci0+cGFkZGluZ0Jv
dHRvbSgpICsKICAgICAgICAgICAgICAgICAgIGNhbmNlbFJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAr
IGNhbmNlbFJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSkpOwotICAgICAgICBsaW5lSGVpZ2h0ID0g
bWF4KGxpbmVIZWlnaHQsIGNhbmNlbFJlbmRlcmVyLT5oZWlnaHQoKSk7CisgICAgICAgIGxpbmVI
ZWlnaHQgPSBtYXgoKGZsb2F0KWxpbmVIZWlnaHQsIGNhbmNlbFJlbmRlcmVyLT5oZWlnaHQoKSk7
CiAgICAgfQogCiAgICAgc2V0SGVpZ2h0KGhlaWdodCgpICsgbGluZUhlaWdodCk7CkBAIC04ODIs
MjggKzg4MiwyOCBAQAogICAgICAgICBsYXllci0+YXV0b3Njcm9sbCgpOwogfQogCi1pbnQgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGxXaWR0aCgpIGNvbnN0CitmbG9hdCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbFdpZHRoKCkgY29uc3QKIHsKICAgICBpZiAo
aW5uZXJUZXh0RWxlbWVudCgpKQogICAgICAgICByZXR1cm4gaW5uZXJUZXh0RWxlbWVudCgpLT5z
Y3JvbGxXaWR0aCgpOwogICAgIHJldHVybiBSZW5kZXJCbG9jazo6c2Nyb2xsV2lkdGgoKTsKIH0K
IAotaW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QK
K2Zsb2F0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QK
IHsKICAgICBpZiAoaW5uZXJUZXh0RWxlbWVudCgpKQogICAgICAgICByZXR1cm4gaW5uZXJUZXh0
RWxlbWVudCgpLT5zY3JvbGxIZWlnaHQoKTsKICAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnNjcm9s
bEhlaWdodCgpOwogfQogCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGxM
ZWZ0KCkgY29uc3QKK2Zsb2F0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xsTGVm
dCgpIGNvbnN0CiB7CiAgICAgaWYgKGlubmVyVGV4dEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJu
IGlubmVyVGV4dEVsZW1lbnQoKS0+c2Nyb2xsTGVmdCgpOwogICAgIHJldHVybiBSZW5kZXJCbG9j
azo6c2Nyb2xsTGVmdCgpOwogfQogCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpz
Y3JvbGxUb3AoKSBjb25zdAorZmxvYXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3Jv
bGxUb3AoKSBjb25zdAogewogICAgIGlmIChpbm5lclRleHRFbGVtZW50KCkpCiAgICAgICAgIHJl
dHVybiBpbm5lclRleHRFbGVtZW50KCktPnNjcm9sbFRvcCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiA4
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNCw3ICs0MjQsNyBAQAogICAgIHJldHVybiAwOwogfQog
Ci1pbnQgUmVuZGVyQm94TW9kZWxPYmplY3Q6Om9mZnNldExlZnQoKSBjb25zdAorZmxvYXQgUmVu
ZGVyQm94TW9kZWxPYmplY3Q6Om9mZnNldExlZnQoKSBjb25zdAogewogICAgIC8vIElmIHRoZSBl
bGVtZW50IGlzIHRoZSBIVE1MIGJvZHkgZWxlbWVudCBvciBkb2VzIG5vdCBoYXZlIGFuIGFzc29j
aWF0ZWQgYm94CiAgICAgLy8gcmV0dXJuIDAgYW5kIHN0b3AgdGhpcyBhbGdvcml0aG0uCkBAIC00
MzIsNyArNDMyLDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIG9mZnNldFBhciA9IG9mZnNldFBhcmVudCgpOwotICAgIGludCB4UG9zID0gKGlz
Qm94KCkgPyB0b1JlbmRlckJveCh0aGlzKS0+eCgpIDogMCk7CisgICAgZmxvYXQgeFBvcyA9IChp
c0JveCgpID8gdG9SZW5kZXJCb3godGhpcyktPngoKSA6IDApOwogICAgIAogICAgIC8vIElmIHRo
ZSBvZmZzZXRQYXJlbnQgb2YgdGhlIGVsZW1lbnQgaXMgbnVsbCwgb3IgaXMgdGhlIEhUTUwgYm9k
eSBlbGVtZW50LAogICAgIC8vIHJldHVybiB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgY2FudmFz
IG9yaWdpbiBhbmQgdGhlIGxlZnQgYm9yZGVyIGVkZ2UgCkBAIC00NTgsNyArNDU4LDcgQEAKICAg
ICByZXR1cm4geFBvczsKIH0KIAotaW50IFJlbmRlckJveE1vZGVsT2JqZWN0OjpvZmZzZXRUb3Ao
KSBjb25zdAorZmxvYXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6Om9mZnNldFRvcCgpIGNvbnN0CiB7
CiAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgdGhlIEhUTUwgYm9keSBlbGVtZW50IG9yIGRvZXMg
bm90IGhhdmUgYW4gYXNzb2NpYXRlZCBib3gKICAgICAvLyByZXR1cm4gMCBhbmQgc3RvcCB0aGlz
IGFsZ29yaXRobS4KQEAgLTQ2Niw3ICs0NjYsNyBAQAogICAgICAgICByZXR1cm4gMDsKICAgICAK
ICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2Zmc2V0UGFyID0gb2Zmc2V0UGFyZW50KCk7Ci0g
ICAgaW50IHlQb3MgPSAoaXNCb3goKSA/IHRvUmVuZGVyQm94KHRoaXMpLT55KCkgOiAwKTsKKyAg
ICBmbG9hdCB5UG9zID0gKGlzQm94KCkgPyB0b1JlbmRlckJveCh0aGlzKS0+eSgpIDogMCk7CiAg
ICAgCiAgICAgLy8gSWYgdGhlIG9mZnNldFBhcmVudCBvZiB0aGUgZWxlbWVudCBpcyBudWxsLCBv
ciBpcyB0aGUgSFRNTCBib2R5IGVsZW1lbnQsCiAgICAgLy8gcmV0dXJuIHRoZSBkaXN0YW5jZSBi
ZXR3ZWVuIHRoZSBjYW52YXMgb3JpZ2luIGFuZCB0aGUgdG9wIGJvcmRlciBlZGdlIApAQCAtNDkx
LDcyICs0OTEsNzIgQEAKICAgICByZXR1cm4geVBvczsKIH0KIAotaW50IFJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWRkaW5nVG9wKGJvb2wpIGNvbnN0CitmbG9hdCBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6cGFkZGluZ1RvcChib29sKSBjb25zdAogewotICAgIGludCB3ID0gMDsKKyAgICBmbG9hdCB3
ID0gMDsKICAgICBMZW5ndGggcGFkZGluZyA9IHN0eWxlKCktPnBhZGRpbmdUb3AoKTsKICAgICBp
ZiAocGFkZGluZy5pc1BlcmNlbnQoKSkKICAgICAgICAgdyA9IGNvbnRhaW5pbmdCbG9jaygpLT5h
dmFpbGFibGVMb2dpY2FsV2lkdGgoKTsKICAgICByZXR1cm4gcGFkZGluZy5jYWxjTWluVmFsdWUo
dyk7CiB9CiAKLWludCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFkZGluZ0JvdHRvbShib29sKSBj
b25zdAorZmxvYXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhZGRpbmdCb3R0b20oYm9vbCkgY29u
c3QKIHsKLSAgICBpbnQgdyA9IDA7CisgICAgZmxvYXQgdyA9IDA7CiAgICAgTGVuZ3RoIHBhZGRp
bmcgPSBzdHlsZSgpLT5wYWRkaW5nQm90dG9tKCk7CiAgICAgaWYgKHBhZGRpbmcuaXNQZXJjZW50
KCkpCiAgICAgICAgIHcgPSBjb250YWluaW5nQmxvY2soKS0+YXZhaWxhYmxlTG9naWNhbFdpZHRo
KCk7CiAgICAgcmV0dXJuIHBhZGRpbmcuY2FsY01pblZhbHVlKHcpOwogfQogCi1pbnQgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OnBhZGRpbmdMZWZ0KGJvb2wpIGNvbnN0CitmbG9hdCBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6cGFkZGluZ0xlZnQoYm9vbCkgY29uc3QKIHsKLSAgICBpbnQgdyA9IDA7Cisg
ICAgZmxvYXQgdyA9IDA7CiAgICAgTGVuZ3RoIHBhZGRpbmcgPSBzdHlsZSgpLT5wYWRkaW5nTGVm
dCgpOwogICAgIGlmIChwYWRkaW5nLmlzUGVyY2VudCgpKQogICAgICAgICB3ID0gY29udGFpbmlu
Z0Jsb2NrKCktPmF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpOwogICAgIHJldHVybiBwYWRkaW5nLmNh
bGNNaW5WYWx1ZSh3KTsKIH0KIAotaW50IFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWRkaW5nUmln
aHQoYm9vbCkgY29uc3QKK2Zsb2F0IFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWRkaW5nUmlnaHQo
Ym9vbCkgY29uc3QKIHsKLSAgICBpbnQgdyA9IDA7CisgICAgZmxvYXQgdyA9IDA7CiAgICAgTGVu
Z3RoIHBhZGRpbmcgPSBzdHlsZSgpLT5wYWRkaW5nUmlnaHQoKTsKICAgICBpZiAocGFkZGluZy5p
c1BlcmNlbnQoKSkKICAgICAgICAgdyA9IGNvbnRhaW5pbmdCbG9jaygpLT5hdmFpbGFibGVMb2dp
Y2FsV2lkdGgoKTsKICAgICByZXR1cm4gcGFkZGluZy5jYWxjTWluVmFsdWUodyk7CiB9CiAKLWlu
dCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFkZGluZ0JlZm9yZShib29sKSBjb25zdAorZmxvYXQg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhZGRpbmdCZWZvcmUoYm9vbCkgY29uc3QKIHsKLSAgICBp
bnQgdyA9IDA7CisgICAgZmxvYXQgdyA9IDA7CiAgICAgTGVuZ3RoIHBhZGRpbmcgPSBzdHlsZSgp
LT5wYWRkaW5nQmVmb3JlKCk7CiAgICAgaWYgKHBhZGRpbmcuaXNQZXJjZW50KCkpCiAgICAgICAg
IHcgPSBjb250YWluaW5nQmxvY2soKS0+YXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7CiAgICAgcmV0
dXJuIHBhZGRpbmcuY2FsY01pblZhbHVlKHcpOwogfQogCi1pbnQgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OnBhZGRpbmdBZnRlcihib29sKSBjb25zdAorZmxvYXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6
OnBhZGRpbmdBZnRlcihib29sKSBjb25zdAogewotICAgIGludCB3ID0gMDsKKyAgICBmbG9hdCB3
ID0gMDsKICAgICBMZW5ndGggcGFkZGluZyA9IHN0eWxlKCktPnBhZGRpbmdBZnRlcigpOwogICAg
IGlmIChwYWRkaW5nLmlzUGVyY2VudCgpKQogICAgICAgICB3ID0gY29udGFpbmluZ0Jsb2NrKCkt
PmF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpOwogICAgIHJldHVybiBwYWRkaW5nLmNhbGNNaW5WYWx1
ZSh3KTsKIH0KIAotaW50IFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWRkaW5nU3RhcnQoYm9vbCkg
Y29uc3QKK2Zsb2F0IFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWRkaW5nU3RhcnQoYm9vbCkgY29u
c3QKIHsKLSAgICBpbnQgdyA9IDA7CisgICAgZmxvYXQgdyA9IDA7CiAgICAgTGVuZ3RoIHBhZGRp
bmcgPSBzdHlsZSgpLT5wYWRkaW5nU3RhcnQoKTsKICAgICBpZiAocGFkZGluZy5pc1BlcmNlbnQo
KSkKICAgICAgICAgdyA9IGNvbnRhaW5pbmdCbG9jaygpLT5hdmFpbGFibGVMb2dpY2FsV2lkdGgo
KTsKICAgICByZXR1cm4gcGFkZGluZy5jYWxjTWluVmFsdWUodyk7CiB9CiAKLWludCBSZW5kZXJC
b3hNb2RlbE9iamVjdDo6cGFkZGluZ0VuZChib29sKSBjb25zdAorZmxvYXQgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OnBhZGRpbmdFbmQoYm9vbCkgY29uc3QKIHsKLSAgICBpbnQgdyA9IDA7CisgICAg
ZmxvYXQgdyA9IDA7CiAgICAgTGVuZ3RoIHBhZGRpbmcgPSBzdHlsZSgpLT5wYWRkaW5nRW5kKCk7
CiAgICAgaWYgKHBhZGRpbmcuaXNQZXJjZW50KCkpCiAgICAgICAgIHcgPSBjb250YWluaW5nQmxv
Y2soKS0+YXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7CkBAIC01NzUsMTIgKzU3NSwxMiBAQAogICAg
IHJldHVybiBib3JkZXI7CiB9CiAKLXN0YXRpYyBJbnRSZWN0IGJhY2tncm91bmRSZWN0QWRqdXN0
ZWRGb3JCbGVlZEF2b2lkYW5jZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJl
Y3QmIGJvcmRlclJlY3QsIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSBibGVlZEF2b2lkYW5jZSkK
K3N0YXRpYyBJbnRSZWN0IGJhY2tncm91bmRSZWN0QWRqdXN0ZWRGb3JCbGVlZEF2b2lkYW5jZShH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgYm9yZGVyUmVjdCwgQmFj
a2dyb3VuZEJsZWVkQXZvaWRhbmNlIGJsZWVkQXZvaWRhbmNlKQogewogICAgIGlmIChibGVlZEF2
b2lkYW5jZSAhPSBCYWNrZ3JvdW5kQmxlZWRTaHJpbmtCYWNrZ3JvdW5kKQotICAgICAgICByZXR1
cm4gYm9yZGVyUmVjdDsKKyAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoYm9yZGVyUmVj
dCk7CiAKLSAgICBJbnRSZWN0IGFkanVzdGVkUmVjdCA9IGJvcmRlclJlY3Q7CisgICAgSW50UmVj
dCBhZGp1c3RlZFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGJvcmRlclJlY3QpOwogICAgIC8vIFdl
IG5lZWQgdG8gc2hyaW5rIHRoZSBib3JkZXIgYnkgb25lIGRldmljZSBwaXhlbCBvbiBlYWNoIHNp
ZGUuCiAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IGNvbnRleHQtPmdldENUTSgpOwogICAgIEZs
b2F0U2l6ZSBjb250ZXh0U2NhbGUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGN0bS54U2NhbGUoKSksIHN0
YXRpY19jYXN0PGZsb2F0PihjdG0ueVNjYWxlKCkpKTsKQEAgLTU4OSw3ICs1ODksNyBAQAogICAg
IHJldHVybiBhZGp1c3RlZFJlY3Q7CiB9CiAKLXZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBh
aW50RmlsbExheWVyRXh0ZW5kZWQoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IENv
bG9yJiBjb2xvciwgY29uc3QgRmlsbExheWVyKiBiZ0xheWVyLCBjb25zdCBJbnRSZWN0JiByZWN0
LAordm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZChjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgQ29sb3ImIGNvbG9yLCBjb25zdCBGaWxsTGF5
ZXIqIGJnTGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwKICAgICBCYWNrZ3JvdW5kQmxlZWRB
dm9pZGFuY2UgYmxlZWRBdm9pZGFuY2UsIElubGluZUZsb3dCb3gqIGJveCwgY29uc3QgSW50U2l6
ZSYgYm94U2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIFJlbmRlck9iamVjdCogYmFja2dyb3Vu
ZE9iamVjdCkKIHsKICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29u
dGV4dDsKQEAgLTY1Miw3ICs2NTIsNyBAQAogICAgIGludCBwUmlnaHQgPSBpbmNsdWRlUmlnaHRF
ZGdlID8gcGFkZGluZ1JpZ2h0KCkgOiAwOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBjbGlwV2l0aFNjcm9sbGluZ1N0YXRlU2F2ZXIoKmNvbnRleHQsIGNsaXBwZWRXaXRoTG9jYWxT
Y3JvbGxpbmcpOwotICAgIEludFJlY3Qgc2Nyb2xsZWRQYWludFJlY3QgPSByZWN0OworICAgIEZs
b2F0UmVjdCBzY3JvbGxlZFBhaW50UmVjdCA9IHJlY3Q7CiAgICAgaWYgKGNsaXBwZWRXaXRoTG9j
YWxTY3JvbGxpbmcpIHsKICAgICAgICAgLy8gQ2xpcCB0byB0aGUgb3ZlcmZsb3cgYXJlYS4KICAg
ICAgICAgY29udGV4dC0+Y2xpcCh0b1JlbmRlckJveCh0aGlzKS0+b3ZlcmZsb3dDbGlwUmVjdChy
ZWN0LmxvY2F0aW9uKCkpKTsKQEAgLTY3OCwxMSArNjc4LDExIEBACiAgICAgICAgIC8vIFdlIGhh
dmUgdG8gZHJhdyBvdXIgdGV4dCBpbnRvIGEgbWFzayB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgdG8g
Y2xpcCBiYWNrZ3JvdW5kIGRyYXdpbmcuCiAgICAgICAgIC8vIEZpcnN0IGZpZ3VyZSBvdXQgaG93
IGJpZyB0aGUgbWFzayBoYXMgdG8gYmUuICBJdCBzaG91bGQgYmUgbm8gYmlnZ2VyIHRoYW4gd2hh
dCB3ZSBuZWVkCiAgICAgICAgIC8vIHRvIGFjdHVhbGx5IHJlbmRlciwgc28gd2Ugc2hvdWxkIGlu
dGVyc2VjdCB0aGUgZGlydHkgcmVjdCB3aXRoIHRoZSBib3JkZXIgYm94IG9mIHRoZSBiYWNrZ3Jv
dW5kLgotICAgICAgICBJbnRSZWN0IG1hc2tSZWN0ID0gcmVjdDsKKyAgICAgICAgRmxvYXRSZWN0
IG1hc2tSZWN0ID0gcmVjdDsKICAgICAgICAgbWFza1JlY3QuaW50ZXJzZWN0KHBhaW50SW5mby5y
ZWN0KTsKICAgICAgICAgCiAgICAgICAgIC8vIE5vdyBjcmVhdGUgdGhlIG1hc2suCi0gICAgICAg
IE93blB0cjxJbWFnZUJ1ZmZlcj4gbWFza0ltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtYXNr
UmVjdC5zaXplKCkpOworICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1hc2tJbWFnZSA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKG1hc2tSZWN0LnNpemUoKSkpOwogICAg
ICAgICBpZiAoIW1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCkBAIC02
OTEsMTIgKzY5MSwxMiBAQAogICAgICAgICAKICAgICAgICAgLy8gTm93IGFkZCB0aGUgdGV4dCB0
byB0aGUgY2xpcC4gIFdlIGRvIHRoaXMgYnkgcGFpbnRpbmcgdXNpbmcgYSBzcGVjaWFsIHBhaW50
IHBoYXNlIHRoYXQgc2lnbmFscyB0bwogICAgICAgICAvLyBJbmxpbmVUZXh0Qm94ZXMgdGhhdCB0
aGV5IHNob3VsZCBqdXN0IGFkZCB0aGVpciBjb250ZW50cyB0byB0aGUgY2xpcC4KLSAgICAgICAg
UGFpbnRJbmZvIGluZm8obWFza0ltYWdlQ29udGV4dCwgbWFza1JlY3QsIFBhaW50UGhhc2VUZXh0
Q2xpcCwgdHJ1ZSwgMCwgMCk7CisgICAgICAgIFBhaW50SW5mbyBpbmZvKG1hc2tJbWFnZUNvbnRl
eHQsIGVuY2xvc2luZ0ludFJlY3QobWFza1JlY3QpLCBQYWludFBoYXNlVGV4dENsaXAsIHRydWUs
IDAsIDApOwogICAgICAgICBpZiAoYm94KSB7CiAgICAgICAgICAgICBSb290SW5saW5lQm94KiBy
b290ID0gYm94LT5yb290KCk7CiAgICAgICAgICAgICBib3gtPnBhaW50KGluZm8sIEludFBvaW50
KHNjcm9sbGVkUGFpbnRSZWN0LngoKSAtIGJveC0+eCgpLCBzY3JvbGxlZFBhaW50UmVjdC55KCkg
LSBib3gtPnkoKSksIHJvb3QtPmxpbmVUb3AoKSwgcm9vdC0+bGluZUJvdHRvbSgpKTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNpemUgbG9jYWxPZmZzZXQgPSBpc0JveCgpID8g
dG9SZW5kZXJCb3godGhpcyktPmxvY2F0aW9uT2Zmc2V0KCkgOiBJbnRTaXplKCk7CisgICAgICAg
ICAgICBGbG9hdFNpemUgbG9jYWxPZmZzZXQgPSBpc0JveCgpID8gdG9SZW5kZXJCb3godGhpcykt
PmxvY2F0aW9uT2Zmc2V0KCkgOiBGbG9hdFNpemUoKTsKICAgICAgICAgICAgIHBhaW50KGluZm8s
IHNjcm9sbGVkUGFpbnRSZWN0LmxvY2F0aW9uKCkgLSBsb2NhbE9mZnNldCk7CiAgICAgICAgIH0K
ICAgICAgICAgCkBAIC03NTgsMTIgKzc1OCwxMiBAQAogCiAgICAgLy8gbm8gcHJvZ3Jlc3NpdmUg
bG9hZGluZyBvZiB0aGUgYmFja2dyb3VuZCBpbWFnZQogICAgIGlmIChzaG91bGRQYWludEJhY2tn
cm91bmRJbWFnZSkgewotICAgICAgICBJbnRSZWN0IGRlc3RSZWN0OwotICAgICAgICBJbnRQb2lu
dCBwaGFzZTsKKyAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0OworICAgICAgICBGbG9hdFBvaW50
IHBoYXNlOwogICAgICAgICBJbnRTaXplIHRpbGVTaXplOwogCiAgICAgICAgIGNhbGN1bGF0ZUJh
Y2tncm91bmRJbWFnZUdlb21ldHJ5KGJnTGF5ZXIsIHNjcm9sbGVkUGFpbnRSZWN0LCBkZXN0UmVj
dCwgcGhhc2UsIHRpbGVTaXplKTsKLSAgICAgICAgSW50UG9pbnQgZGVzdE9yaWdpbiA9IGRlc3RS
ZWN0LmxvY2F0aW9uKCk7CisgICAgICAgIEZsb2F0UG9pbnQgZGVzdE9yaWdpbiA9IGRlc3RSZWN0
LmxvY2F0aW9uKCk7CiAgICAgICAgIGRlc3RSZWN0LmludGVyc2VjdChwYWludEluZm8ucmVjdCk7
CiAgICAgICAgIGlmICghZGVzdFJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBwaGFzZSAr
PSBkZXN0UmVjdC5sb2NhdGlvbigpIC0gZGVzdE9yaWdpbjsKQEAgLTc3MSw3ICs3NzEsNyBAQAog
ICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBjbGllbnRGb3JCYWNrZ3JvdW5kSW1hZ2UgPSBiYWNr
Z3JvdW5kT2JqZWN0ID8gYmFja2dyb3VuZE9iamVjdCA6IHRoaXM7CiAgICAgICAgICAgICBSZWZQ
dHI8SW1hZ2U+IGltYWdlID0gYmdJbWFnZS0+aW1hZ2UoY2xpZW50Rm9yQmFja2dyb3VuZEltYWdl
LCB0aWxlU2l6ZSk7CiAgICAgICAgICAgICBib29sIHVzZUxvd1F1YWxpdHlTY2FsaW5nID0gc2hv
dWxkUGFpbnRBdExvd1F1YWxpdHkoY29udGV4dCwgaW1hZ2UuZ2V0KCksIGJnTGF5ZXIsIHRpbGVT
aXplKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgpLCBz
dHlsZSgpLT5jb2xvclNwYWNlKCksIGRlc3RSZWN0LCBwaGFzZSwgdGlsZVNpemUsIGNvbXBvc2l0
ZU9wLCB1c2VMb3dRdWFsaXR5U2NhbGluZyk7CisgICAgICAgICAgICBjb250ZXh0LT5kcmF3VGls
ZWRJbWFnZShpbWFnZS5nZXQoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBlbmNsb3NpbmdJbnRS
ZWN0KGRlc3RSZWN0KSwgcm91bmRlZEludFBvaW50KHBoYXNlKSwgdGlsZVNpemUsIGNvbXBvc2l0
ZU9wLCB1c2VMb3dRdWFsaXR5U2NhbGluZyk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC04Mzcs
MTEgKzgzNywxMSBAQAogICAgIHJldHVybiBpbWFnZS0+aW1hZ2VTaXplKHRoaXMsIHN0eWxlKCkt
PmVmZmVjdGl2ZVpvb20oKSk7CiB9CiAKLXZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1
bGF0ZUJhY2tncm91bmRJbWFnZUdlb21ldHJ5KGNvbnN0IEZpbGxMYXllciogZmlsbExheWVyLCBj
b25zdCBJbnRSZWN0JiBwYWludFJlY3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCYgZGVzdFJlY3QsIEludFBvaW50
JiBwaGFzZSwgSW50U2l6ZSYgdGlsZVNpemUpCit2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpj
YWxjdWxhdGVCYWNrZ3JvdW5kSW1hZ2VHZW9tZXRyeShjb25zdCBGaWxsTGF5ZXIqIGZpbGxMYXll
ciwgY29uc3QgRmxvYXRSZWN0JiBwYWludFJlY3QsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
RmxvYXRQb2ludCYgcGhhc2UsIEludFNpemUmIHRpbGVTaXplKQogewotICAgIGludCBsZWZ0ID0g
MDsKLSAgICBpbnQgdG9wID0gMDsKKyAgICBmbG9hdCBsZWZ0ID0gMDsKKyAgICBmbG9hdCB0b3Ag
PSAwOwogICAgIEludFNpemUgcG9zaXRpb25pbmdBcmVhU2l6ZTsKIAogICAgIC8vIERldGVybWlu
ZSB0aGUgYmFja2dyb3VuZCBwb3NpdGlvbmluZyBhcmVhIGFuZCBzZXQgZGVzdFJlY3QgdG8gdGhl
IGJhY2tncm91bmQgcGFpbnRpbmcgYXJlYS4KQEAgLTg2MSw4ICs4NjEsOCBAQAogICAgIGlmICgh
Zml4ZWRBdHRhY2htZW50KSB7CiAgICAgICAgIGRlc3RSZWN0ID0gcGFpbnRSZWN0OwogCi0gICAg
ICAgIGludCByaWdodCA9IDA7Ci0gICAgICAgIGludCBib3R0b20gPSAwOworICAgICAgICBmbG9h
dCByaWdodCA9IDA7CisgICAgICAgIGZsb2F0IGJvdHRvbSA9IDA7CiAgICAgICAgIC8vIFNjcm9s
bCBhbmQgTG9jYWwuCiAgICAgICAgIGlmIChmaWxsTGF5ZXItPm9yaWdpbigpICE9IEJvcmRlckZp
bGxCb3gpIHsKICAgICAgICAgICAgIGxlZnQgPSBib3JkZXJMZWZ0KCk7CkBAIC04ODgsNyArODg4
LDcgQEAKICAgICAgICAgICAgIHBvc2l0aW9uaW5nQXJlYVNpemUgPSBJbnRTaXplKHBhaW50UmVj
dC53aWR0aCgpIC0gbGVmdCAtIHJpZ2h0LCBwYWludFJlY3QuaGVpZ2h0KCkgLSB0b3AgLSBib3R0
b20pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGRlc3RSZWN0ID0gdmlld1JlY3QoKTsKLSAgICAg
ICAgcG9zaXRpb25pbmdBcmVhU2l6ZSA9IGRlc3RSZWN0LnNpemUoKTsKKyAgICAgICAgcG9zaXRp
b25pbmdBcmVhU2l6ZSA9IHJvdW5kZWRJbnRTaXplKGRlc3RSZWN0LnNpemUoKSk7CiAgICAgfQog
CiAgICAgdGlsZVNpemUgPSBjYWxjdWxhdGVGaWxsVGlsZVNpemUoZmlsbExheWVyLCBwb3NpdGlv
bmluZ0FyZWFTaXplKTsKQEAgLTg5NiwzMSArODk2LDMxIEBACiAgICAgRUZpbGxSZXBlYXQgYmFj
a2dyb3VuZFJlcGVhdFggPSBmaWxsTGF5ZXItPnJlcGVhdFgoKTsKICAgICBFRmlsbFJlcGVhdCBi
YWNrZ3JvdW5kUmVwZWF0WSA9IGZpbGxMYXllci0+cmVwZWF0WSgpOwogCi0gICAgaW50IHhQb3Np
dGlvbiA9IGZpbGxMYXllci0+eFBvc2l0aW9uKCkuY2FsY01pblZhbHVlKHBvc2l0aW9uaW5nQXJl
YVNpemUud2lkdGgoKSAtIHRpbGVTaXplLndpZHRoKCksIHRydWUpOworICAgIGZsb2F0IHhQb3Np
dGlvbiA9IGZpbGxMYXllci0+eFBvc2l0aW9uKCkuY2FsY01pblZhbHVlKHBvc2l0aW9uaW5nQXJl
YVNpemUud2lkdGgoKSAtIHRpbGVTaXplLndpZHRoKCksIHRydWUpOwogICAgIGlmIChiYWNrZ3Jv
dW5kUmVwZWF0WCA9PSBSZXBlYXRGaWxsKQotICAgICAgICBwaGFzZS5zZXRYKHRpbGVTaXplLndp
ZHRoKCkgPyB0aWxlU2l6ZS53aWR0aCgpIC0gKHhQb3NpdGlvbiArIGxlZnQpICUgdGlsZVNpemUu
d2lkdGgoKSA6IDApOworICAgICAgICBwaGFzZS5zZXRYKHRpbGVTaXplLndpZHRoKCkgPyB0aWxl
U2l6ZS53aWR0aCgpIC0gZm1vZGYoeFBvc2l0aW9uICsgbGVmdCwgdGlsZVNpemUud2lkdGgoKSkg
OiAwKTsKICAgICBlbHNlIHsKLSAgICAgICAgZGVzdFJlY3QubW92ZShtYXgoeFBvc2l0aW9uICsg
bGVmdCwgMCksIDApOwotICAgICAgICBwaGFzZS5zZXRYKC1taW4oeFBvc2l0aW9uICsgbGVmdCwg
MCkpOwotICAgICAgICBkZXN0UmVjdC5zZXRXaWR0aCh0aWxlU2l6ZS53aWR0aCgpICsgbWluKHhQ
b3NpdGlvbiArIGxlZnQsIDApKTsKKyAgICAgICAgZGVzdFJlY3QubW92ZShtYXgoeFBvc2l0aW9u
ICsgbGVmdCwgMC4wZiksIDApOworICAgICAgICBwaGFzZS5zZXRYKC1taW4oeFBvc2l0aW9uICsg
bGVmdCwgMC4wZikpOworICAgICAgICBkZXN0UmVjdC5zZXRXaWR0aCh0aWxlU2l6ZS53aWR0aCgp
ICsgbWluKHhQb3NpdGlvbiArIGxlZnQsIDAuMGYpKTsKICAgICB9CiAKLSAgICBpbnQgeVBvc2l0
aW9uID0gZmlsbExheWVyLT55UG9zaXRpb24oKS5jYWxjTWluVmFsdWUocG9zaXRpb25pbmdBcmVh
U2l6ZS5oZWlnaHQoKSAtIHRpbGVTaXplLmhlaWdodCgpLCB0cnVlKTsKKyAgICBmbG9hdCB5UG9z
aXRpb24gPSBmaWxsTGF5ZXItPnlQb3NpdGlvbigpLmNhbGNNaW5WYWx1ZShwb3NpdGlvbmluZ0Fy
ZWFTaXplLmhlaWdodCgpIC0gdGlsZVNpemUuaGVpZ2h0KCksIHRydWUpOwogICAgIGlmIChiYWNr
Z3JvdW5kUmVwZWF0WSA9PSBSZXBlYXRGaWxsKQotICAgICAgICBwaGFzZS5zZXRZKHRpbGVTaXpl
LmhlaWdodCgpID8gdGlsZVNpemUuaGVpZ2h0KCkgLSAoeVBvc2l0aW9uICsgdG9wKSAlIHRpbGVT
aXplLmhlaWdodCgpIDogMCk7CisgICAgICAgIHBoYXNlLnNldFkodGlsZVNpemUuaGVpZ2h0KCkg
PyB0aWxlU2l6ZS5oZWlnaHQoKSAtIGZtb2RmKHlQb3NpdGlvbiArIHRvcCwgdGlsZVNpemUuaGVp
Z2h0KCkpIDogMCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGRlc3RSZWN0Lm1vdmUoMCwgbWF4KHlQ
b3NpdGlvbiArIHRvcCwgMCkpOwotICAgICAgICBwaGFzZS5zZXRZKC1taW4oeVBvc2l0aW9uICsg
dG9wLCAwKSk7Ci0gICAgICAgIGRlc3RSZWN0LnNldEhlaWdodCh0aWxlU2l6ZS5oZWlnaHQoKSAr
IG1pbih5UG9zaXRpb24gKyB0b3AsIDApKTsKKyAgICAgICAgZGVzdFJlY3QubW92ZSgwLjBmLCBt
YXgoeVBvc2l0aW9uICsgdG9wLCAwLjBmKSk7CisgICAgICAgIHBoYXNlLnNldFkoLW1pbih5UG9z
aXRpb24gKyB0b3AsIDAuMGYpKTsKKyAgICAgICAgZGVzdFJlY3Quc2V0SGVpZ2h0KHRpbGVTaXpl
LmhlaWdodCgpICsgbWluKHlQb3NpdGlvbiArIHRvcCwgMC4wZikpOwogICAgIH0KIAogICAgIGlm
IChmaXhlZEF0dGFjaG1lbnQpCi0gICAgICAgIHBoYXNlLm1vdmUobWF4KHBhaW50UmVjdC54KCkg
LSBkZXN0UmVjdC54KCksIDApLCBtYXgocGFpbnRSZWN0LnkoKSAtIGRlc3RSZWN0LnkoKSwgMCkp
OworICAgICAgICBwaGFzZS5tb3ZlKG1heChwYWludFJlY3QueCgpIC0gZGVzdFJlY3QueCgpLCAw
LjBmKSwgbWF4KHBhaW50UmVjdC55KCkgLSBkZXN0UmVjdC55KCksIDAuMGYpKTsKIAogICAgIGRl
c3RSZWN0LmludGVyc2VjdChwYWludFJlY3QpOwogfQogCi1ib29sIFJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpwYWludE5pbmVQaWVjZUltYWdlKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0
LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsCitib29sIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpwYWludE5pbmVQaWVjZUltYWdlKEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IFJlbmRlclN0eWxl
KiBzdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTmluZVBpZWNlSW1hZ2UmIG5pbmVQaWVjZUltYWdlLCBDb21wb3NpdGVPcGVyYXRvciBv
cCkKIHsKICAgICBTdHlsZUltYWdlKiBzdHlsZUltYWdlID0gbmluZVBpZWNlSW1hZ2UuaW1hZ2Uo
KTsKQEAgLTkzMyw5ICs5MzMsMTAgQEAKICAgICBpZiAoIXN0eWxlSW1hZ2UtPmNhblJlbmRlcihz
dHlsZS0+ZWZmZWN0aXZlWm9vbSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgSW50
UmVjdCBlbmNsb3NpbmdSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChyZWN0KTsKICAgICAvLyBGSVhN
RTogYm9yZGVyLWltYWdlIGlzIGJyb2tlbiB3aXRoIGZ1bGwgcGFnZSB6b29taW5nIHdoZW4gdGls
aW5nIGhhcyB0byBoYXBwZW4sIHNpbmNlIHRoZSB0aWxpbmcgZnVuY3Rpb24KICAgICAvLyBkb2Vz
bid0IGhhdmUgYW55IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHpvb20gdGhhdCBpcyBpbiBlZmZlY3Qg
b24gdGhlIHRpbGUuCi0gICAgc3R5bGVJbWFnZS0+c2V0SW1hZ2VDb250YWluZXJTaXplKHJlY3Qu
c2l6ZSgpKTsKKyAgICBzdHlsZUltYWdlLT5zZXRJbWFnZUNvbnRhaW5lclNpemUoZW5jbG9zaW5n
UmVjdC5zaXplKCkpOwogICAgIEludFNpemUgaW1hZ2VTaXplID0gc3R5bGVJbWFnZS0+aW1hZ2VT
aXplKHRoaXMsIDEuMGYpOwogICAgIGludCBpbWFnZVdpZHRoID0gaW1hZ2VTaXplLndpZHRoKCk7
CiAgICAgaW50IGltYWdlSGVpZ2h0ID0gaW1hZ2VTaXplLmhlaWdodCgpOwpAQCAtOTU5LDggKzk2
MCw4IEBACiAgICAgYm9vbCBkcmF3VG9wID0gdG9wU2xpY2UgPiAwICYmIHRvcFdpZHRoID4gMDsK
ICAgICBib29sIGRyYXdSaWdodCA9IHJpZ2h0U2xpY2UgPiAwICYmIHJpZ2h0V2lkdGggPiAwOwog
ICAgIGJvb2wgZHJhd0JvdHRvbSA9IGJvdHRvbVNsaWNlID4gMCAmJiBib3R0b21XaWR0aCA+IDA7
Ci0gICAgYm9vbCBkcmF3TWlkZGxlID0gKGltYWdlV2lkdGggLSBsZWZ0U2xpY2UgLSByaWdodFNs
aWNlKSA+IDAgJiYgKHJlY3Qud2lkdGgoKSAtIGxlZnRXaWR0aCAtIHJpZ2h0V2lkdGgpID4gMAot
ICAgICAgICAgICAgICAgICAgICAgICYmIChpbWFnZUhlaWdodCAtIHRvcFNsaWNlIC0gYm90dG9t
U2xpY2UpID4gMCAmJiAocmVjdC5oZWlnaHQoKSAtIHRvcFdpZHRoIC0gYm90dG9tV2lkdGgpID4g
MDsKKyAgICBib29sIGRyYXdNaWRkbGUgPSAoaW1hZ2VXaWR0aCAtIGxlZnRTbGljZSAtIHJpZ2h0
U2xpY2UpID4gMCAmJiAoZW5jbG9zaW5nUmVjdC53aWR0aCgpIC0gbGVmdFdpZHRoIC0gcmlnaHRX
aWR0aCkgPiAwCisgICAgICAgICAgICAgICAgICAgICAgJiYgKGltYWdlSGVpZ2h0IC0gdG9wU2xp
Y2UgLSBib3R0b21TbGljZSkgPiAwICYmIChlbmNsb3NpbmdSZWN0LmhlaWdodCgpIC0gdG9wV2lk
dGggLSBib3R0b21XaWR0aCkgPiAwOwogCiAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHN0eWxl
SW1hZ2UtPmltYWdlKHRoaXMsIGltYWdlU2l6ZSk7CiAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNl
ID0gc3R5bGUtPmNvbG9yU3BhY2UoKTsKQEAgLTk2OSwyMSArOTcwLDIxIEBACiAgICAgICAgIC8v
IFBhaW50IHRoZSB0b3AgYW5kIGJvdHRvbSBsZWZ0IGNvcm5lcnMuCiAKICAgICAgICAgLy8gVGhl
IHRvcCBsZWZ0IGNvcm5lciByZWN0IGlzICh0eCwgdHksIGxlZnRXaWR0aCwgdG9wV2lkdGgpCi0g
ICAgICAgIC8vIFRoZSByZWN0IHRvIHVzZSBmcm9tIHdpdGhpbiB0aGUgaW1hZ2UgaXMgb2J0YWlu
ZWQgZnJvbSBvdXIgc2xpY2UsIGFuZCBpcyAoMCwgMCwgbGVmdFNsaWNlLCB0b3BTbGljZSkKKyAg
ICAgICAgLy8gVGhlIGVuY2xvc2luZ1JlY3QgdG8gdXNlIGZyb20gd2l0aGluIHRoZSBpbWFnZSBp
cyBvYnRhaW5lZCBmcm9tIG91ciBzbGljZSwgYW5kIGlzICgwLCAwLCBsZWZ0U2xpY2UsIHRvcFNs
aWNlKQogICAgICAgICBpZiAoZHJhd1RvcCkKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
ZHJhd0ltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBJbnRSZWN0KHJlY3QubG9jYXRpb24o
KSwgSW50U2l6ZShsZWZ0V2lkdGgsIHRvcFdpZHRoKSksCisgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQtPmRyYXdJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgSW50UmVjdChlbmNsb3Np
bmdSZWN0LmxvY2F0aW9uKCksIEludFNpemUobGVmdFdpZHRoLCB0b3BXaWR0aCkpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCgwLCAwLCBsZWZ0U2xpY2Us
IHRvcFNsaWNlKSwgb3ApOwogCiAgICAgICAgIC8vIFRoZSBib3R0b20gbGVmdCBjb3JuZXIgcmVj
dCBpcyAodHgsIHR5ICsgaCAtIGJvdHRvbVdpZHRoLCBsZWZ0V2lkdGgsIGJvdHRvbVdpZHRoKQog
ICAgICAgICAvLyBUaGUgcmVjdCB0byB1c2UgZnJvbSB3aXRoaW4gdGhlIGltYWdlIGlzICgwLCBp
bWFnZUhlaWdodCAtIGJvdHRvbVNsaWNlLCBsZWZ0U2xpY2UsIGJvdG9tU2xpY2UpCiAgICAgICAg
IGlmIChkcmF3Qm90dG9tKQotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2Uo
aW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIEludFJlY3QocmVjdC54KCksIHJlY3QueSgpICsgcmVj
dC5oZWlnaHQoKSAtIGJvdHRvbVdpZHRoLCBsZWZ0V2lkdGgsIGJvdHRvbVdpZHRoKSwKKyAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNl
LCBJbnRSZWN0KGVuY2xvc2luZ1JlY3QueCgpLCBlbmNsb3NpbmdSZWN0LnkoKSArIGVuY2xvc2lu
Z1JlY3QuaGVpZ2h0KCkgLSBib3R0b21XaWR0aCwgbGVmdFdpZHRoLCBib3R0b21XaWR0aCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KDAsIGltYWdlSGVp
Z2h0IC0gYm90dG9tU2xpY2UsIGxlZnRTbGljZSwgYm90dG9tU2xpY2UpLCBvcCk7CiAKICAgICAg
ICAgLy8gUGFpbnQgdGhlIGxlZnQgZWRnZS4KICAgICAgICAgLy8gSGF2ZSB0byBzY2FsZSBhbmQg
dGlsZSBpbnRvIHRoZSBib3JkZXIgcmVjdC4KLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3
VGlsZWRJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgSW50UmVjdChyZWN0LngoKSwgcmVj
dC55KCkgKyB0b3BXaWR0aCwgbGVmdFdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlY3QuaGVpZ2h0KCkgLSB0b3BXaWR0aCAtIGJvdHRvbVdpZHRoKSwKKyAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JT
cGFjZSwgSW50UmVjdChlbmNsb3NpbmdSZWN0LngoKSwgZW5jbG9zaW5nUmVjdC55KCkgKyB0b3BX
aWR0aCwgbGVmdFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVuY2xvc2luZ1JlY3QuaGVpZ2h0KCkgLSB0b3BXaWR0aCAtIGJvdHRvbVdpZHRoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KDAsIHRvcFNsaWNlLCBs
ZWZ0U2xpY2UsIGltYWdlSGVpZ2h0IC0gdG9wU2xpY2UgLSBib3R0b21TbGljZSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U6OlN0cmV0Y2hUaWxlLCAoSW1h
Z2U6OlRpbGVSdWxlKXZSdWxlLCBvcCk7CiAgICAgfQpAQCAtOTkzLDM5ICs5OTQsMzkgQEAKICAg
ICAgICAgLy8gVGhlIHRvcCByaWdodCBjb3JuZXIgcmVjdCBpcyAodHggKyB3IC0gcmlnaHRXaWR0
aCwgdHksIHJpZ2h0V2lkdGgsIHRvcFdpZHRoKQogICAgICAgICAvLyBUaGUgcmVjdCB0byB1c2Ug
ZnJvbSB3aXRoaW4gdGhlIGltYWdlIGlzIG9idGFpbmVkIGZyb20gb3VyIHNsaWNlLCBhbmQgaXMg
KGltYWdlV2lkdGggLSByaWdodFNsaWNlLCAwLCByaWdodFNsaWNlLCB0b3BTbGljZSkKICAgICAg
ICAgaWYgKGRyYXdUb3ApCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShp
bWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgSW50UmVjdChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSAt
IHJpZ2h0V2lkdGgsIHJlY3QueSgpLCByaWdodFdpZHRoLCB0b3BXaWR0aCksCisgICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgSW50
UmVjdChlbmNsb3NpbmdSZWN0LngoKSArIGVuY2xvc2luZ1JlY3Qud2lkdGgoKSAtIHJpZ2h0V2lk
dGgsIGVuY2xvc2luZ1JlY3QueSgpLCByaWdodFdpZHRoLCB0b3BXaWR0aCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KGltYWdlV2lkdGggLSByaWdodFNs
aWNlLCAwLCByaWdodFNsaWNlLCB0b3BTbGljZSksIG9wKTsKIAogICAgICAgICAvLyBUaGUgYm90
dG9tIHJpZ2h0IGNvcm5lciByZWN0IGlzICh0eCArIHcgLSByaWdodFdpZHRoLCB0eSArIGggLSBi
b3R0b21XaWR0aCwgcmlnaHRXaWR0aCwgYm90dG9tV2lkdGgpCiAgICAgICAgIC8vIFRoZSByZWN0
IHRvIHVzZSBmcm9tIHdpdGhpbiB0aGUgaW1hZ2UgaXMgKGltYWdlV2lkdGggLSByaWdodFNsaWNl
LCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNlLCByaWdodFNsaWNlLCBib3R0b21TbGljZSkKICAg
ICAgICAgaWYgKGRyYXdCb3R0b20pCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJ
bWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgSW50UmVjdChyZWN0LngoKSArIHJlY3Qud2lk
dGgoKSAtIHJpZ2h0V2lkdGgsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAtIGJvdHRvbVdpZHRo
LCByaWdodFdpZHRoLCBib3R0b21XaWR0aCksCisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQt
PmRyYXdJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgSW50UmVjdChlbmNsb3NpbmdSZWN0
LngoKSArIGVuY2xvc2luZ1JlY3Qud2lkdGgoKSAtIHJpZ2h0V2lkdGgsIGVuY2xvc2luZ1JlY3Qu
eSgpICsgZW5jbG9zaW5nUmVjdC5oZWlnaHQoKSAtIGJvdHRvbVdpZHRoLCByaWdodFdpZHRoLCBi
b3R0b21XaWR0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRS
ZWN0KGltYWdlV2lkdGggLSByaWdodFNsaWNlLCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNlLCBy
aWdodFNsaWNlLCBib3R0b21TbGljZSksIG9wKTsKIAogICAgICAgICAvLyBQYWludCB0aGUgcmln
aHQgZWRnZS4KLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZS5n
ZXQoKSwgY29sb3JTcGFjZSwgSW50UmVjdChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIHJpZ2h0
V2lkdGgsIHJlY3QueSgpICsgdG9wV2lkdGgsIHJpZ2h0V2lkdGgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5oZWlnaHQoKSAtIHRvcFdpZHRoIC0gYm90dG9t
V2lkdGgpLAorICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdl
dCgpLCBjb2xvclNwYWNlLCBJbnRSZWN0KGVuY2xvc2luZ1JlY3QueCgpICsgZW5jbG9zaW5nUmVj
dC53aWR0aCgpIC0gcmlnaHRXaWR0aCwgZW5jbG9zaW5nUmVjdC55KCkgKyB0b3BXaWR0aCwgcmln
aHRXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNsb3Np
bmdSZWN0LmhlaWdodCgpIC0gdG9wV2lkdGggLSBib3R0b21XaWR0aCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdChpbWFnZVdpZHRoIC0gcmlnaHRTbGlj
ZSwgdG9wU2xpY2UsIHJpZ2h0U2xpY2UsIGltYWdlSGVpZ2h0IC0gdG9wU2xpY2UgLSBib3R0b21T
bGljZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U6OlN0
cmV0Y2hUaWxlLCAoSW1hZ2U6OlRpbGVSdWxlKXZSdWxlLCBvcCk7CiAgICAgfQogCiAgICAgLy8g
UGFpbnQgdGhlIHRvcCBlZGdlLgogICAgIGlmIChkcmF3VG9wKQotICAgICAgICBncmFwaGljc0Nv
bnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBJbnRSZWN0KHJl
Y3QueCgpICsgbGVmdFdpZHRoLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpIC0gbGVmdFdpZHRoIC0g
cmlnaHRXaWR0aCwgdG9wV2lkdGgpLAorICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxl
ZEltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBJbnRSZWN0KGVuY2xvc2luZ1JlY3QueCgp
ICsgbGVmdFdpZHRoLCBlbmNsb3NpbmdSZWN0LnkoKSwgZW5jbG9zaW5nUmVjdC53aWR0aCgpIC0g
bGVmdFdpZHRoIC0gcmlnaHRXaWR0aCwgdG9wV2lkdGgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEludFJlY3QobGVmdFNsaWNlLCAwLCBpbWFnZVdpZHRoIC0gcmln
aHRTbGljZSAtIGxlZnRTbGljZSwgdG9wU2xpY2UpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChJbWFnZTo6VGlsZVJ1bGUpaFJ1bGUsIEltYWdlOjpTdHJldGNoVGls
ZSwgb3ApOwogCiAgICAgLy8gUGFpbnQgdGhlIGJvdHRvbSBlZGdlLgogICAgIGlmIChkcmF3Qm90
dG9tKQotICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgp
LCBjb2xvclNwYWNlLCBJbnRSZWN0KHJlY3QueCgpICsgbGVmdFdpZHRoLCByZWN0LnkoKSArIHJl
Y3QuaGVpZ2h0KCkgLSBib3R0b21XaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWN0LndpZHRoKCkgLSBsZWZ0V2lkdGggLSByaWdodFdpZHRoLCBib3R0b21X
aWR0aCksCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UuZ2V0
KCksIGNvbG9yU3BhY2UsIEludFJlY3QoZW5jbG9zaW5nUmVjdC54KCkgKyBsZWZ0V2lkdGgsIGVu
Y2xvc2luZ1JlY3QueSgpICsgZW5jbG9zaW5nUmVjdC5oZWlnaHQoKSAtIGJvdHRvbVdpZHRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY2xvc2luZ1JlY3Qud2lk
dGgoKSAtIGxlZnRXaWR0aCAtIHJpZ2h0V2lkdGgsIGJvdHRvbVdpZHRoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KGxlZnRTbGljZSwgaW1hZ2VIZWln
aHQgLSBib3R0b21TbGljZSwgaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2UgLSBsZWZ0U2xpY2UsIGJv
dHRvbVNsaWNlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSW1h
Z2U6OlRpbGVSdWxlKWhSdWxlLCBJbWFnZTo6U3RyZXRjaFRpbGUsIG9wKTsKIAogICAgIC8vIFBh
aW50IHRoZSBtaWRkbGUuCiAgICAgaWYgKGRyYXdNaWRkbGUpCi0gICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIEludFJlY3QocmVj
dC54KCkgKyBsZWZ0V2lkdGgsIHJlY3QueSgpICsgdG9wV2lkdGgsIHJlY3Qud2lkdGgoKSAtIGxl
ZnRXaWR0aCAtIHJpZ2h0V2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVjdC5oZWlnaHQoKSAtIHRvcFdpZHRoIC0gYm90dG9tV2lkdGgpLAorICAgICAgICBn
cmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBJ
bnRSZWN0KGVuY2xvc2luZ1JlY3QueCgpICsgbGVmdFdpZHRoLCBlbmNsb3NpbmdSZWN0LnkoKSAr
IHRvcFdpZHRoLCBlbmNsb3NpbmdSZWN0LndpZHRoKCkgLSBsZWZ0V2lkdGggLSByaWdodFdpZHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY2xvc2luZ1JlY3Qu
aGVpZ2h0KCkgLSB0b3BXaWR0aCAtIGJvdHRvbVdpZHRoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KGxlZnRTbGljZSwgdG9wU2xpY2UsIGltYWdlV2lk
dGggLSByaWdodFNsaWNlIC0gbGVmdFNsaWNlLCBpbWFnZUhlaWdodCAtIHRvcFNsaWNlIC0gYm90
dG9tU2xpY2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbWFn
ZTo6VGlsZVJ1bGUpaFJ1bGUsIChJbWFnZTo6VGlsZVJ1bGUpdlJ1bGUsIG9wKTsKIApAQCAtMTM0
NSw3ICsxMzQ2LDcgQEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBh
aW50Qm9yZGVyKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0
JiByZWN0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsCit2b2lkIFJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpwYWludEJvcmRlcihHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UgYmxlZWRB
dm9pZGFuY2UsIGJvb2wgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgYm9vbCBpbmNsdWRlTG9naWNh
bFJpZ2h0RWRnZSkKIHsKICAgICAvLyBib3JkZXItaW1hZ2UgaXMgbm90IGFmZmVjdGVkIGJ5IGJv
cmRlci1yYWRpdXMuCkBAIC0xMzU1LDExICsxMzU2LDEyIEBACiAgICAgaWYgKGdyYXBoaWNzQ29u
dGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBJbnRSZWN0
IGVuY2xvc2luZ1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOwogICAgIEJvcmRlckVkZ2Ug
ZWRnZXNbNF07CiAgICAgZ2V0Qm9yZGVyRWRnZUluZm8oZWRnZXMsIGluY2x1ZGVMb2dpY2FsTGVm
dEVkZ2UsIGluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlKTsKIAotICAgIFJvdW5kZWRJbnRSZWN0IG91
dGVyQm9yZGVyID0gc3R5bGUtPmdldFJvdW5kZWRCb3JkZXJGb3IocmVjdCwgaW5jbHVkZUxvZ2lj
YWxMZWZ0RWRnZSwgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UpOwotICAgIFJvdW5kZWRJbnRSZWN0
IGlubmVyQm9yZGVyID0gc3R5bGUtPmdldFJvdW5kZWRJbm5lckJvcmRlckZvcihyZWN0LCBpbmNs
dWRlTG9naWNhbExlZnRFZGdlLCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSk7CisgICAgUm91bmRl
ZEludFJlY3Qgb3V0ZXJCb3JkZXIgPSBzdHlsZS0+Z2V0Um91bmRlZEJvcmRlckZvcihlbmNsb3Np
bmdSZWN0LCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSk7
CisgICAgUm91bmRlZEludFJlY3QgaW5uZXJCb3JkZXIgPSBzdHlsZS0+Z2V0Um91bmRlZElubmVy
Qm9yZGVyRm9yKGVuY2xvc2luZ1JlY3QsIGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UsIGluY2x1ZGVM
b2dpY2FsUmlnaHRFZGdlKTsKIAogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3VycmVudENU
TSA9IGdyYXBoaWNzQ29udGV4dC0+Z2V0Q1RNKCk7CiAgICAgLy8gRklYTUU6IHRoaXMgaXNuJ3Qg
cXVpdGUgY29ycmVjdC4gV2UgbWF5IHdhbnQgdG8gYW50aWFsaWFzIHdoZW4gc2NhbGVkIGJ5IGEg
bm9uLWludGVncmFsIHZhbHVlLCBvciB3aGVuIHRoZSB0cmFuc2xhdGlvbiBpcyBub24taW50ZWdy
YWwuCkBAIC0yMDgzLDEzICsyMDg1LDE0IEBACiAgICAgcmV0dXJuIHVuaW9uUmVjdChib3VuZHMs
IG9mZnNldEJvdW5kcyk7CiB9CiAKLXZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94
U2hhZG93KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcGFpbnRSZWN0
LCBjb25zdCBSZW5kZXJTdHlsZSogcywgU2hhZG93U3R5bGUgc2hhZG93U3R5bGUsIGJvb2wgaW5j
bHVkZUxvZ2ljYWxMZWZ0RWRnZSwgYm9vbCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRnZSkKK3ZvaWQg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBSZW5kZXJTdHlsZSogcywgU2hhZG93
U3R5bGUgc2hhZG93U3R5bGUsIGJvb2wgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSwgYm9vbCBpbmNs
dWRlTG9naWNhbFJpZ2h0RWRnZSkKIHsKICAgICAvLyBGSVhNRTogRGVhbCB3aXRoIGJvcmRlci1p
bWFnZS4gIFdvdWxkIGJlIGdyZWF0IHRvIHVzZSBib3JkZXItaW1hZ2UgYXMgYSBtYXNrLgogCiAg
ICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCAhcy0+Ym94U2hhZG93KCkpCiAg
ICAgICAgIHJldHVybjsKIAorICAgIEludFJlY3QgcGFpbnRSZWN0ID0gZW5jbG9zaW5nSW50UmVj
dChyZWN0KTsKICAgICBSb3VuZGVkSW50UmVjdCBib3JkZXIgPSAoc2hhZG93U3R5bGUgPT0gSW5z
ZXQpID8gcy0+Z2V0Um91bmRlZElubmVyQm9yZGVyRm9yKHBhaW50UmVjdCwgaW5jbHVkZUxvZ2lj
YWxMZWZ0RWRnZSwgaW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHMtPmdldFJvdW5kZWRCb3JkZXJGb3Io
cGFpbnRSZWN0LCBpbmNsdWRlTG9naWNhbExlZnRFZGdlLCBpbmNsdWRlTG9naWNhbFJpZ2h0RWRn
ZSk7CiAKQEAgLTIyMjQsNyArMjIyNyw3IEBACiAgICAgfQogfQogCi1pbnQgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKSBjb25zdAor
ZmxvYXQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZv
ckNvbnRlbnQoKSBjb25zdAogewogICAgIHJldHVybiBjb250YWluaW5nQmxvY2soKS0+YXZhaWxh
YmxlTG9naWNhbFdpZHRoKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGluZUJveExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGluZUJveExpc3QuaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsMTMgKzYz
LDEzIEBACiAgICAgdm9pZCBkaXJ0eUxpbmVCb3hlcygpOwogICAgIHZvaWQgZGlydHlMaW5lc0Zy
b21DaGFuZ2VkQ2hpbGQoUmVuZGVyT2JqZWN0KiBwYXJlbnQsIFJlbmRlck9iamVjdCogY2hpbGQp
OwogCi0gICAgdm9pZCBwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCosIFBhaW50SW5mbyYsIGNv
bnN0IEludFBvaW50JikgY29uc3Q7CisgICAgdm9pZCBwYWludChSZW5kZXJCb3hNb2RlbE9iamVj
dCosIFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICBib29sIGhpdFRl
c3QoUmVuZGVyQm94TW9kZWxPYmplY3QqLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RS
ZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBjb25zdDsKICAgICAKIHByaXZhdGU6
Ci0gICAgYm9vbCBhbnlMaW5lSW50ZXJzZWN0c1JlY3QoUmVuZGVyQm94TW9kZWxPYmplY3QqLCBj
b25zdCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmLCBib29sIHVzZVByaW50UmVjdCA9IGZhbHNl
LCBpbnQgb3V0bGluZVNpemUgPSAwKSBjb25zdDsKLSAgICBib29sIGxpbmVJbnRlcnNlY3RzRGly
dHlSZWN0KFJlbmRlckJveE1vZGVsT2JqZWN0KiwgSW5saW5lRmxvd0JveCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFBvaW50JikgY29uc3Q7Ci0gICAgYm9vbCByYW5nZUludGVyc2VjdHNS
ZWN0KFJlbmRlckJveE1vZGVsT2JqZWN0KiwgaW50IGxvZ2ljYWxUb3AsIGludCBsb2dpY2FsQm90
dG9tLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICBib29sIGFu
eUxpbmVJbnRlcnNlY3RzUmVjdChSZW5kZXJCb3hNb2RlbE9iamVjdCosIGNvbnN0IEludFJlY3Qm
LCBjb25zdCBGbG9hdFBvaW50JiwgYm9vbCB1c2VQcmludFJlY3QgPSBmYWxzZSwgaW50IG91dGxp
bmVTaXplID0gMCkgY29uc3Q7CisgICAgYm9vbCBsaW5lSW50ZXJzZWN0c0RpcnR5UmVjdChSZW5k
ZXJCb3hNb2RlbE9iamVjdCosIElubGluZUZsb3dCb3gqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgYm9vbCByYW5nZUludGVyc2VjdHNSZWN0KFJlbmRl
ckJveE1vZGVsT2JqZWN0KiwgaW50IGxvZ2ljYWxUb3AsIGludCBsb2dpY2FsQm90dG9tLCBjb25z
dCBJbnRSZWN0JiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogCiAgICAgLy8gRm9yIGJsb2Nr
IGZsb3dzLCBlYWNoIGJveCByZXByZXNlbnRzIHRoZSByb290IGlubGluZSBib3ggZm9yIGEgbGlu
ZSBpbiB0aGUKICAgICAvLyBwYXJhZ3JhcGguCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYwLDcgKzQ2MCw3
IEBACiAgICAgfQogfQogCi12b2lkIFJlbmRlcklubGluZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKK3ZvaWQgUmVuZGVySW5saW5lOjpw
YWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQb2ludCYgcGFpbnRPZmZzZXQp
CiB7CiAgICAgbV9saW5lQm94ZXMucGFpbnQodGhpcywgcGFpbnRJbmZvLCBwYWludE9mZnNldCk7
CiB9CkBAIC00ODQsNyArNDg0LDcgQEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVySW5saW5lOjpj
dWxsZWRJbmxpbmVBYnNvbHV0ZVJlY3RzKGNvbnN0IFJlbmRlcklubGluZSogY29udGFpbmVyLCBW
ZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBJbnRTaXplJiBvZmZzZXQpCit2b2lkIFJlbmRl
cklubGluZTo6Y3VsbGVkSW5saW5lQWJzb2x1dGVSZWN0cyhjb25zdCBSZW5kZXJJbmxpbmUqIGNv
bnRhaW5lciwgVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQp
CiB7CiAgICAgYm9vbCBpc0hvcml6b250YWwgPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpOwogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJy
OyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewpAQCAtNjMxLDY5ICs2MzEsNjkgQEAKICAg
ICB9CiB9CiAKLWludCBSZW5kZXJJbmxpbmU6Om9mZnNldExlZnQoKSBjb25zdAorZmxvYXQgUmVu
ZGVySW5saW5lOjpvZmZzZXRMZWZ0KCkgY29uc3QKIHsKLSAgICBpbnQgeCA9IFJlbmRlckJveE1v
ZGVsT2JqZWN0OjpvZmZzZXRMZWZ0KCk7CisgICAgZmxvYXQgeCA9IFJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpvZmZzZXRMZWZ0KCk7CiAgICAgaWYgKElubGluZUJveCogZmlyc3RCb3ggPSBmaXJzdExp
bmVCb3hJbmNsdWRpbmdDdWxsaW5nKCkpCiAgICAgICAgIHggKz0gZmlyc3RCb3gtPngoKTsKICAg
ICByZXR1cm4geDsKIH0KIAotaW50IFJlbmRlcklubGluZTo6b2Zmc2V0VG9wKCkgY29uc3QKK2Zs
b2F0IFJlbmRlcklubGluZTo6b2Zmc2V0VG9wKCkgY29uc3QKIHsKLSAgICBpbnQgeSA9IFJlbmRl
ckJveE1vZGVsT2JqZWN0OjpvZmZzZXRUb3AoKTsKKyAgICBmbG9hdCB5ID0gUmVuZGVyQm94TW9k
ZWxPYmplY3Q6Om9mZnNldFRvcCgpOwogICAgIGlmIChJbmxpbmVCb3gqIGZpcnN0Qm94ID0gZmly
c3RMaW5lQm94SW5jbHVkaW5nQ3VsbGluZygpKQogICAgICAgICB5ICs9IGZpcnN0Qm94LT55KCk7
CiAgICAgcmV0dXJuIHk7CiB9CiAKLXN0YXRpYyBpbnQgY29tcHV0ZU1hcmdpbihjb25zdCBSZW5k
ZXJJbmxpbmUqIHJlbmRlcmVyLCBjb25zdCBMZW5ndGgmIG1hcmdpbikKK3N0YXRpYyBmbG9hdCBj
b21wdXRlTWFyZ2luKGNvbnN0IFJlbmRlcklubGluZSogcmVuZGVyZXIsIGNvbnN0IExlbmd0aCYg
bWFyZ2luKQogewogICAgIGlmIChtYXJnaW4uaXNBdXRvKCkpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIGlmIChtYXJnaW4uaXNGaXhlZCgpKQogICAgICAgICByZXR1cm4gbWFyZ2luLnZhbHVlKCk7
CiAgICAgaWYgKG1hcmdpbi5pc1BlcmNlbnQoKSkKLSAgICAgICAgcmV0dXJuIG1hcmdpbi5jYWxj
TWluVmFsdWUobWF4KDAsIHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKS0+YXZhaWxhYmxlTG9n
aWNhbFdpZHRoKCkpKTsKKyAgICAgICAgcmV0dXJuIG1hcmdpbi5jYWxjTWluVmFsdWUobWF4KDAu
MGYsIHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKS0+YXZhaWxhYmxlTG9naWNhbFdpZHRoKCkp
KTsKICAgICByZXR1cm4gMDsKIH0KIAotaW50IFJlbmRlcklubGluZTo6bWFyZ2luTGVmdCgpIGNv
bnN0CitmbG9hdCBSZW5kZXJJbmxpbmU6Om1hcmdpbkxlZnQoKSBjb25zdAogewogICAgIHJldHVy
biBjb21wdXRlTWFyZ2luKHRoaXMsIHN0eWxlKCktPm1hcmdpbkxlZnQoKSk7CiB9CiAKLWludCBS
ZW5kZXJJbmxpbmU6Om1hcmdpblJpZ2h0KCkgY29uc3QKK2Zsb2F0IFJlbmRlcklubGluZTo6bWFy
Z2luUmlnaHQoKSBjb25zdAogewogICAgIHJldHVybiBjb21wdXRlTWFyZ2luKHRoaXMsIHN0eWxl
KCktPm1hcmdpblJpZ2h0KCkpOwogfQogCi1pbnQgUmVuZGVySW5saW5lOjptYXJnaW5Ub3AoKSBj
b25zdAorZmxvYXQgUmVuZGVySW5saW5lOjptYXJnaW5Ub3AoKSBjb25zdAogewogICAgIHJldHVy
biBjb21wdXRlTWFyZ2luKHRoaXMsIHN0eWxlKCktPm1hcmdpblRvcCgpKTsKIH0KIAotaW50IFJl
bmRlcklubGluZTo6bWFyZ2luQm90dG9tKCkgY29uc3QKK2Zsb2F0IFJlbmRlcklubGluZTo6bWFy
Z2luQm90dG9tKCkgY29uc3QKIHsKICAgICByZXR1cm4gY29tcHV0ZU1hcmdpbih0aGlzLCBzdHls
ZSgpLT5tYXJnaW5Cb3R0b20oKSk7CiB9CiAKLWludCBSZW5kZXJJbmxpbmU6Om1hcmdpblN0YXJ0
KCkgY29uc3QKK2Zsb2F0IFJlbmRlcklubGluZTo6bWFyZ2luU3RhcnQoKSBjb25zdAogewogICAg
IHJldHVybiBjb21wdXRlTWFyZ2luKHRoaXMsIHN0eWxlKCktPm1hcmdpblN0YXJ0KCkpOwogfQog
Ci1pbnQgUmVuZGVySW5saW5lOjptYXJnaW5FbmQoKSBjb25zdAorZmxvYXQgUmVuZGVySW5saW5l
OjptYXJnaW5FbmQoKSBjb25zdAogewogICAgIHJldHVybiBjb21wdXRlTWFyZ2luKHRoaXMsIHN0
eWxlKCktPm1hcmdpbkVuZCgpKTsKIH0KIAotaW50IFJlbmRlcklubGluZTo6bWFyZ2luQmVmb3Jl
KCkgY29uc3QKK2Zsb2F0IFJlbmRlcklubGluZTo6bWFyZ2luQmVmb3JlKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gY29tcHV0ZU1hcmdpbih0aGlzLCBzdHlsZSgpLT5tYXJnaW5CZWZvcmUoKSk7CiB9
CiAKLWludCBSZW5kZXJJbmxpbmU6Om1hcmdpbkFmdGVyKCkgY29uc3QKK2Zsb2F0IFJlbmRlcklu
bGluZTo6bWFyZ2luQWZ0ZXIoKSBjb25zdAogewogICAgIHJldHVybiBjb21wdXRlTWFyZ2luKHRo
aXMsIHN0eWxlKCktPm1hcmdpbkFmdGVyKCkpOwogfQpAQCAtODk2LDEzICs4OTYsMTEgQEAKICAg
ICAgICAgICAgIFJlbmRlckJveCogY3VyckJveCA9IHRvUmVuZGVyQm94KGN1cnIpOwogICAgICAg
ICAgICAgaWYgKCFjdXJyQm94LT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmIGN1cnJCb3gtPmlu
bGluZUJveFdyYXBwZXIoKSkgewogICAgICAgICAgICAgICAgIEludFJlY3QgbG9naWNhbFJlY3Qg
PSBjdXJyQm94LT5sb2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oc3R5bGUo
KSk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkgewotICAgICAgICAgICAgICAg
ICAgICBsb2dpY2FsUmVjdC5tb3ZlQnkoY3VyckJveC0+bG9jYXRpb24oKSk7CisgICAgICAgICAg
ICAgICAgbG9naWNhbFJlY3QubW92ZUJ5KHJvdW5kZWRJbnRQb2ludChjdXJyQm94LT5sb2NhdGlv
bigpKSk7CisgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKGxvZ2ljYWxSZWN0KTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBsb2dpY2FsUmVjdC5tb3ZlQnkoY3VyckJv
eC0+bG9jYXRpb24oKSk7CisgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICByZXN1bHQudW5pdGVJZk5vblplcm8obG9naWNhbFJlY3QudHJhbnNwb3NlZFJlY3QoKSk7Ci0g
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGN1cnIt
PmlzUmVuZGVySW5saW5lKCkpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBkb2Vzbid0
IG5lZWQgbGluZSBib3hlcyBlaXRoZXIsIHRoZW4gd2UgY2FuIHJlY3VyLgpAQCAtOTMwLDggKzky
OCw4IEBACiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKICAgICAvLyBSZXR1cm4gdGhlIHdp
ZHRoIG9mIHRoZSBtaW5pbWFsIGxlZnQgc2lkZSBhbmQgdGhlIG1heGltYWwgcmlnaHQgc2lkZS4K
LSAgICBpbnQgbG9naWNhbExlZnRTaWRlID0gbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7Ci0g
ICAgaW50IGxvZ2ljYWxSaWdodFNpZGUgPSBudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsKKyAg
ICBmbG9hdCBsb2dpY2FsTGVmdFNpZGUgPSBudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpOwor
ICAgIGZsb2F0IGxvZ2ljYWxSaWdodFNpZGUgPSBudW1lcmljX2xpbWl0czxmbG9hdD46Om1pbigp
OwogICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IGZpcnN0TGluZUJveCgpOyBjdXJyOyBj
dXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkgewogICAgICAgICBsb2dpY2FsTGVmdFNpZGUgPSBt
aW4obG9naWNhbExlZnRTaWRlLCBjdXJyLT5sb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93KCkpOwog
ICAgICAgICBsb2dpY2FsUmlnaHRTaWRlID0gbWF4KGxvZ2ljYWxSaWdodFNpZGUsIGN1cnItPmxv
Z2ljYWxSaWdodFZpc3VhbE92ZXJmbG93KCkpOwpAQCAtOTQwLDE3ICs5MzgsMTcgQEAKICAgICBS
b290SW5saW5lQm94KiBmaXJzdFJvb3RCb3ggPSBmaXJzdExpbmVCb3goKS0+cm9vdCgpOwogICAg
IFJvb3RJbmxpbmVCb3gqIGxhc3RSb290Qm94ID0gbGFzdExpbmVCb3goKS0+cm9vdCgpOwogICAg
IAotICAgIGludCBsb2dpY2FsVG9wID0gZmlyc3RMaW5lQm94KCktPmxvZ2ljYWxUb3BWaXN1YWxP
dmVyZmxvdyhmaXJzdFJvb3RCb3gtPmxpbmVUb3AoKSk7Ci0gICAgaW50IGxvZ2ljYWxXaWR0aCA9
IGxvZ2ljYWxSaWdodFNpZGUgLSBsb2dpY2FsTGVmdFNpZGU7Ci0gICAgaW50IGxvZ2ljYWxIZWln
aHQgPSBsYXN0TGluZUJveCgpLT5sb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3cobGFzdFJvb3RC
b3gtPmxpbmVCb3R0b20oKSkgLSBsb2dpY2FsVG9wOworICAgIGZsb2F0IGxvZ2ljYWxUb3AgPSBm
aXJzdExpbmVCb3goKS0+bG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KGZpcnN0Um9vdEJveC0+bGlu
ZVRvcCgpKTsKKyAgICBmbG9hdCBsb2dpY2FsV2lkdGggPSBsb2dpY2FsUmlnaHRTaWRlIC0gbG9n
aWNhbExlZnRTaWRlOworICAgIGZsb2F0IGxvZ2ljYWxIZWlnaHQgPSBsYXN0TGluZUJveCgpLT5s
b2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3cobGFzdFJvb3RCb3gtPmxpbmVCb3R0b20oKSkgLSBs
b2dpY2FsVG9wOwogICAgIAotICAgIEludFJlY3QgcmVjdChsb2dpY2FsTGVmdFNpZGUsIGxvZ2lj
YWxUb3AsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCk7CisgICAgRmxvYXRSZWN0IHJlY3Qo
bG9naWNhbExlZnRTaWRlLCBsb2dpY2FsVG9wLCBsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQp
OwogICAgIGlmICghc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAg
cmVjdCA9IHJlY3QudHJhbnNwb3NlZFJlY3QoKTsKLSAgICByZXR1cm4gcmVjdDsKKyAgICByZXR1
cm4gZW5jbG9zaW5nSW50UmVjdChyZWN0KTsKIH0KIAotSW50UmVjdCBSZW5kZXJJbmxpbmU6OmNs
aXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyKQorRmxvYXRSZWN0IFJlbmRlcklubGluZTo6Y2xpcHBlZE92ZXJmbG93UmVjdEZv
clJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpCiB7CiAgICAg
Ly8gT25seSBydW4taW5zIGFyZSBhbGxvd2VkIGluIGhlcmUgZHVyaW5nIGxheW91dC4KICAgICBB
U1NFUlQoIXZpZXcoKSB8fCAhdmlldygpLT5sYXlvdXRTdGF0ZUVuYWJsZWQoKSB8fCBpc1J1bklu
KCkpOwpAQCAtOTU5LDEyICs5NTcsMTIgQEAKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAog
ICAgIC8vIEZpbmQgb3VyIGxlZnRtb3N0IHBvc2l0aW9uLgotICAgIEludFJlY3QgYm91bmRpbmdC
b3gobGluZXNWaXN1YWxPdmVyZmxvd0JvdW5kaW5nQm94KCkpOwotICAgIGludCBsZWZ0ID0gYm91
bmRpbmdCb3gueCgpOwotICAgIGludCB0b3AgPSBib3VuZGluZ0JveC55KCk7CisgICAgRmxvYXRS
ZWN0IGJvdW5kaW5nQm94KGxpbmVzVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCgpKTsKKyAgICBm
bG9hdCBsZWZ0ID0gYm91bmRpbmdCb3gueCgpOworICAgIGZsb2F0IHRvcCA9IGJvdW5kaW5nQm94
LnkoKTsKIAogICAgIC8vIE5vdyBpbnZhbGlkYXRlIGEgcmVjdGFuZ2xlLgotICAgIGludCBvdyA9
IHN0eWxlKCkgPyBzdHlsZSgpLT5vdXRsaW5lU2l6ZSgpIDogMDsKKyAgICBmbG9hdCBvdyA9IHN0
eWxlKCkgPyBzdHlsZSgpLT5vdXRsaW5lU2l6ZSgpIDogMDsKICAgICAKICAgICAvLyBXZSBuZWVk
IHRvIGFkZCBpbiB0aGUgcmVsYXRpdmUgcG9zaXRpb24gb2Zmc2V0cyBvZiBhbnkgaW5saW5lcyAo
aW5jbHVkaW5nIHVzKSB1cCB0byBvdXIKICAgICAvLyBjb250YWluaW5nIGJsb2NrLgpAQCAtOTc1
LDcgKzk3Myw3IEBACiAgICAgICAgICAgICB0b1JlbmRlcklubGluZShpbmxpbmVGbG93KS0+bGF5
ZXIoKS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldChsZWZ0LCB0b3ApOwogICAgIH0KIAotICAgIElu
dFJlY3Qgcigtb3cgKyBsZWZ0LCAtb3cgKyB0b3AsIGJvdW5kaW5nQm94LndpZHRoKCkgKyBvdyAq
IDIsIGJvdW5kaW5nQm94LmhlaWdodCgpICsgb3cgKiAyKTsKKyAgICBGbG9hdFJlY3Qgcigtb3cg
KyBsZWZ0LCAtb3cgKyB0b3AsIGJvdW5kaW5nQm94LndpZHRoKCkgKyBvdyAqIDIsIGJvdW5kaW5n
Qm94LmhlaWdodCgpICsgb3cgKiAyKTsKIAogICAgIGlmIChjYi0+aGFzQ29sdW1ucygpKQogICAg
ICAgICBjYi0+YWRqdXN0UmVjdEZvckNvbHVtbnMocik7CkBAIC05ODQsMTAgKzk4MiwxMCBAQAog
ICAgICAgICAvLyBjYi0+aGVpZ2h0KCkgaXMgaW5hY2N1cmF0ZSBpZiB3ZSdyZSBpbiB0aGUgbWlk
ZGxlIG9mIGEgbGF5b3V0IG9mIHxjYnwsIHNvIHVzZSB0aGUKICAgICAgICAgLy8gbGF5ZXIncyBz
aXplIGluc3RlYWQuICBFdmVuIGlmIHRoZSBsYXllcidzIHNpemUgaXMgd3JvbmcsIHRoZSBsYXll
ciBpdHNlbGYgd2lsbCByZXBhaW50CiAgICAgICAgIC8vIGFueXdheSBpZiBpdHMgc2l6ZSBkb2Vz
IGNoYW5nZS4KLSAgICAgICAgSW50UmVjdCByZXBhaW50UmVjdChyKTsKKyAgICAgICAgRmxvYXRS
ZWN0IHJlcGFpbnRSZWN0KHIpOwogICAgICAgICByZXBhaW50UmVjdC5tb3ZlKC1jYi0+bGF5ZXIo
KS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCkpOyAvLyBGb3Igb3ZlcmZsb3c6YXV0by9zY3JvbGwv
aGlkZGVuLgogCi0gICAgICAgIEludFJlY3QgYm94UmVjdChJbnRQb2ludCgpLCBjYi0+bGF5ZXIo
KS0+c2l6ZSgpKTsKKyAgICAgICAgRmxvYXRSZWN0IGJveFJlY3QoSW50UG9pbnQoKSwgY2ItPmxh
eWVyKCktPnNpemUoKSk7CiAgICAgICAgIHIgPSBpbnRlcnNlY3Rpb24ocmVwYWludFJlY3QsIGJv
eFJlY3QpOwogICAgIH0KICAgICAKQEAgLTEwMjMsNyArMTAyMSw3IEBACiAgICAgcmV0dXJuIHI7
CiB9CiAKLXZvaWQgUmVuZGVySW5saW5lOjpjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmIHJlY3QsIGJvb2wgZml4ZWQp
Cit2b2lkIFJlbmRlcklubGluZTo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVs
T2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgZml4ZWQpCiB7
CiAgICAgaWYgKFJlbmRlclZpZXcqIHYgPSB2aWV3KCkpIHsKICAgICAgICAgLy8gTGF5b3V0U3Rh
dGUgaXMgb25seSB2YWxpZCBmb3Igcm9vdC1yZWxhdGl2ZSByZXBhaW50aW5nCkBAIC0xMDMxLDcg
KzEwMjksNyBAQAogICAgICAgICAgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdi0+bGF5
b3V0U3RhdGUoKTsKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09IFJlbGF0
aXZlUG9zaXRpb24gJiYgbGF5ZXIoKSkKICAgICAgICAgICAgICAgICByZWN0Lm1vdmUobGF5ZXIo
KS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpKTsKLSAgICAgICAgICAgIHJlY3QubW92ZShsYXlv
dXRTdGF0ZS0+bV9wYWludE9mZnNldCk7CisgICAgICAgICAgICByZWN0Lm1vdmUocm91bmRlZElu
dFNpemUobGF5b3V0U3RhdGUtPm1fcGFpbnRPZmZzZXQpKTsKICAgICAgICAgICAgIGlmIChsYXlv
dXRTdGF0ZS0+bV9jbGlwcGVkKQogICAgICAgICAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGxheW91
dFN0YXRlLT5tX2NsaXBSZWN0KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEwNDYsMTIgKzEw
NDQsMTIgQEAKICAgICBpZiAoIW8pCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFBvaW50IHRv
cExlZnQgPSByZWN0LmxvY2F0aW9uKCk7CisgICAgRmxvYXRQb2ludCB0b3BMZWZ0ID0gcmVjdC5s
b2NhdGlvbigpOwogCiAgICAgaWYgKG8tPmlzQmxvY2tGbG93KCkgJiYgc3R5bGUoKS0+cG9zaXRp
b24oKSAhPSBBYnNvbHV0ZVBvc2l0aW9uICYmIHN0eWxlKCktPnBvc2l0aW9uKCkgIT0gRml4ZWRQ
b3NpdGlvbikgewogICAgICAgICBSZW5kZXJCbG9jayogY2IgPSB0b1JlbmRlckJsb2NrKG8pOwog
ICAgICAgICBpZiAoY2ItPmhhc0NvbHVtbnMoKSkgewotICAgICAgICAgICAgSW50UmVjdCByZXBh
aW50UmVjdCh0b3BMZWZ0LCByZWN0LnNpemUoKSk7CisgICAgICAgICAgICBGbG9hdFJlY3QgcmVw
YWludFJlY3QodG9wTGVmdCwgcmVjdC5zaXplKCkpOwogICAgICAgICAgICAgY2ItPmFkanVzdFJl
Y3RGb3JDb2x1bW5zKHJlcGFpbnRSZWN0KTsKICAgICAgICAgICAgIHRvcExlZnQgPSByZXBhaW50
UmVjdC5sb2NhdGlvbigpOwogICAgICAgICAgICAgcmVjdCA9IHJlcGFpbnRSZWN0OwpAQCAtMTA3
Niw4ICsxMDc0LDggQEAKICAgICAgICAgLy8gYW55d2F5IGlmIGl0cyBzaXplIGRvZXMgY2hhbmdl
LgogICAgICAgICB0b3BMZWZ0IC09IGNvbnRhaW5lckJveC0+bGF5ZXIoKS0+c2Nyb2xsZWRDb250
ZW50T2Zmc2V0KCk7IC8vIEZvciBvdmVyZmxvdzphdXRvL3Njcm9sbC9oaWRkZW4uCiAKLSAgICAg
ICAgSW50UmVjdCByZXBhaW50UmVjdCh0b3BMZWZ0LCByZWN0LnNpemUoKSk7Ci0gICAgICAgIElu
dFJlY3QgYm94UmVjdChJbnRQb2ludCgpLCBjb250YWluZXJCb3gtPmxheWVyKCktPnNpemUoKSk7
CisgICAgICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdCh0b3BMZWZ0LCByZWN0LnNpemUoKSk7Cisg
ICAgICAgIEZsb2F0UmVjdCBib3hSZWN0KEludFBvaW50KCksIGNvbnRhaW5lckJveC0+bGF5ZXIo
KS0+c2l6ZSgpKTsKICAgICAgICAgcmVjdCA9IGludGVyc2VjdGlvbihyZXBhaW50UmVjdCwgYm94
UmVjdCk7CiAgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTEwODYsNyArMTA4NCw3IEBACiAKICAgICBpZiAoY29udGFpbmVyU2tpcHBlZCkgewogICAg
ICAgICAvLyBJZiB0aGUgcmVwYWludENvbnRhaW5lciBpcyBiZWxvdyBvLCB0aGVuIHdlIG5lZWQg
dG8gbWFwIHRoZSByZWN0IGludG8gcmVwYWludENvbnRhaW5lcidzIGNvb3JkaW5hdGVzLgotICAg
ICAgICBJbnRTaXplIGNvbnRhaW5lck9mZnNldCA9IHJlcGFpbnRDb250YWluZXItPm9mZnNldEZy
b21BbmNlc3RvckNvbnRhaW5lcihvKTsKKyAgICAgICAgSW50U2l6ZSBjb250YWluZXJPZmZzZXQg
PSByb3VuZGVkSW50U2l6ZShyZXBhaW50Q29udGFpbmVyLT5vZmZzZXRGcm9tQW5jZXN0b3JDb250
YWluZXIobykpOwogICAgICAgICByZWN0Lm1vdmUoLWNvbnRhaW5lck9mZnNldCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC0xMDk0LDE1ICsxMDkyLDE1IEBACiAgICAgby0+Y29tcHV0ZVJl
Y3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIHJlY3QsIGZpeGVkKTsKIH0KIAotSW50U2l6
ZSBSZW5kZXJJbmxpbmU6Om9mZnNldEZyb21Db250YWluZXIoUmVuZGVyT2JqZWN0KiBjb250YWlu
ZXIsIGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK0Zsb2F0U2l6ZSBSZW5kZXJJbmxpbmU6
Om9mZnNldEZyb21Db250YWluZXIoUmVuZGVyT2JqZWN0KiBjb250YWluZXIsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIEFTU0VSVChjb250YWluZXIgPT0gdGhpcy0+Y29u
dGFpbmVyKCkpOwogICAgIAotICAgIEludFNpemUgb2Zmc2V0OyAgICAKKyAgICBGbG9hdFNpemUg
b2Zmc2V0OyAgICAKICAgICBpZiAoaXNSZWxQb3NpdGlvbmVkKCkpCiAgICAgICAgIG9mZnNldCAr
PSByZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7CiAKLSAgICBjb250YWluZXItPmFkanVzdEZvckNv
bHVtbnMob2Zmc2V0LCBwb2ludCk7CisgICAgY29udGFpbmVyLT5hZGp1c3RGb3JDb2x1bW5zKG9m
ZnNldCwgcm91bmRlZEludFBvaW50KHBvaW50KSk7CiAKICAgICBpZiAoY29udGFpbmVyLT5oYXNP
dmVyZmxvd0NsaXAoKSkKICAgICAgICAgb2Zmc2V0IC09IHRvUmVuZGVyQm94KGNvbnRhaW5lcikt
PmxheWVyKCktPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOwpAQCAtMTExOCwxMCArMTExNiwxMCBA
QAogICAgIGlmIChSZW5kZXJWaWV3ICp2ID0gdmlldygpKSB7CiAgICAgICAgIGlmICh2LT5sYXlv
dXRTdGF0ZUVuYWJsZWQoKSAmJiAhcmVwYWludENvbnRhaW5lcikgewogICAgICAgICAgICAgTGF5
b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdi0+bGF5b3V0U3RhdGUoKTsKLSAgICAgICAgICAgIElu
dFNpemUgb2Zmc2V0ID0gbGF5b3V0U3RhdGUtPm1fcGFpbnRPZmZzZXQ7CisgICAgICAgICAgICBG
bG9hdFNpemUgb2Zmc2V0ID0gbGF5b3V0U3RhdGUtPm1fcGFpbnRPZmZzZXQ7CiAgICAgICAgICAg
ICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uICYmIGxheWVyKCkp
CiAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGxheWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZz
ZXQoKTsKLSAgICAgICAgICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUob2Zmc2V0KTsKKyAgICAgICAg
ICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUocm91bmRlZEludFNpemUob2Zmc2V0KSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0xMTM1LDcgKzExMzMsNyBAQAogICAg
IGlmIChvLT5pc0JveCgpICYmIG8tPnN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2Rl
KCkpCiAgICAgICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUodG9SZW5kZXJCb3gobyktPmZsaXBGb3JX
cml0aW5nTW9kZUluY2x1ZGluZ0NvbHVtbnMocm91bmRlZEludFBvaW50KHRyYW5zZm9ybVN0YXRl
Lm1hcHBlZFBvaW50KCkpKSAtIGNlbnRlclBvaW50KTsKIAotICAgIEludFNpemUgY29udGFpbmVy
T2Zmc2V0ID0gb2Zmc2V0RnJvbUNvbnRhaW5lcihvLCByb3VuZGVkSW50UG9pbnQodHJhbnNmb3Jt
U3RhdGUubWFwcGVkUG9pbnQoKSkpOworICAgIEZsb2F0U2l6ZSBjb250YWluZXJPZmZzZXQgPSBv
ZmZzZXRGcm9tQ29udGFpbmVyKG8sIHJvdW5kZWRJbnRQb2ludCh0cmFuc2Zvcm1TdGF0ZS5tYXBw
ZWRQb2ludCgpKSk7CiAKICAgICBib29sIHByZXNlcnZlM0QgPSB1c2VUcmFuc2Zvcm1zICYmIChv
LT5zdHlsZSgpLT5wcmVzZXJ2ZXMzRCgpIHx8IHN0eWxlKCktPnByZXNlcnZlczNEKCkpOwogICAg
IGlmICh1c2VUcmFuc2Zvcm1zICYmIHNob3VsZFVzZVRyYW5zZm9ybUZyb21Db250YWluZXIobykp
IHsKQEAgLTExNDgsNyArMTE0Niw3IEBACiAgICAgaWYgKGNvbnRhaW5lclNraXBwZWQpIHsKICAg
ICAgICAgLy8gVGhlcmUgY2FuJ3QgYmUgYSB0cmFuc2Zvcm0gYmV0d2VlbiByZXBhaW50Q29udGFp
bmVyIGFuZCBvLCBiZWNhdXNlIHRyYW5zZm9ybXMgY3JlYXRlIGNvbnRhaW5lcnMsIHNvIGl0IHNo
b3VsZCBiZSBzYWZlCiAgICAgICAgIC8vIHRvIGp1c3Qgc3VidHJhY3QgdGhlIGRlbHRhIGJldHdl
ZW4gdGhlIHJlcGFpbnRDb250YWluZXIgYW5kIG8uCi0gICAgICAgIEludFNpemUgY29udGFpbmVy
T2Zmc2V0ID0gcmVwYWludENvbnRhaW5lci0+b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKG8p
OworICAgICAgICBJbnRTaXplIGNvbnRhaW5lck9mZnNldCA9IHJvdW5kZWRJbnRTaXplKHJlcGFp
bnRDb250YWluZXItPm9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihvKSk7CiAgICAgICAgIHRy
YW5zZm9ybVN0YXRlLm1vdmUoLWNvbnRhaW5lck9mZnNldC53aWR0aCgpLCAtY29udGFpbmVyT2Zm
c2V0LmhlaWdodCgpLCBwcmVzZXJ2ZTNEID8gVHJhbnNmb3JtU3RhdGU6OkFjY3VtdWxhdGVUcmFu
c2Zvcm0gOiBUcmFuc2Zvcm1TdGF0ZTo6RmxhdHRlblRyYW5zZm9ybSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0xMTY3LDcgKzExNjUsNyBAQAogCiAgICAgby0+bWFwQWJzb2x1dGVUb0xv
Y2FsUG9pbnQoZml4ZWQsIHVzZVRyYW5zZm9ybXMsIHRyYW5zZm9ybVN0YXRlKTsKIAotICAgIElu
dFNpemUgY29udGFpbmVyT2Zmc2V0ID0gb2Zmc2V0RnJvbUNvbnRhaW5lcihvLCBJbnRQb2ludCgp
KTsKKyAgICBGbG9hdFNpemUgY29udGFpbmVyT2Zmc2V0ID0gb2Zmc2V0RnJvbUNvbnRhaW5lcihv
LCBJbnRQb2ludCgpKTsKIAogICAgIGJvb2wgcHJlc2VydmUzRCA9IHVzZVRyYW5zZm9ybXMgJiYg
KG8tPnN0eWxlKCktPnByZXNlcnZlczNEKCkgfHwgc3R5bGUoKS0+cHJlc2VydmVzM0QoKSk7CiAg
ICAgaWYgKHVzZVRyYW5zZm9ybXMgJiYgc2hvdWxkVXNlVHJhbnNmb3JtRnJvbUNvbnRhaW5lcihv
KSkgewpAQCAtMTI2Niw3ICsxMjY0LDcgQEAKICAgICByZXR1cm4gZmxvd0JveDsKIH0KIAotaW50
IFJlbmRlcklubGluZTo6bGluZUhlaWdodChib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1v
ZGUgLypkaXJlY3Rpb24qLywgTGluZVBvc2l0aW9uTW9kZSAvKmxpbmVQb3NpdGlvbk1vZGUqLykg
Y29uc3QKK2Zsb2F0IFJlbmRlcklubGluZTo6bGluZUhlaWdodChib29sIGZpcnN0TGluZSwgTGlu
ZURpcmVjdGlvbk1vZGUgLypkaXJlY3Rpb24qLywgTGluZVBvc2l0aW9uTW9kZSAvKmxpbmVQb3Np
dGlvbk1vZGUqLykgY29uc3QKIHsKICAgICBpZiAoZmlyc3RMaW5lICYmIGRvY3VtZW50KCktPnVz
ZXNGaXJzdExpbmVSdWxlcygpKSB7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzID0gc3R5bGUoZmly
c3RMaW5lKTsKQEAgLTEyODAsNyArMTI3OCw3IEBACiAgICAgcmV0dXJuIG1fbGluZUhlaWdodDsK
IH0KIAotaW50IFJlbmRlcklubGluZTo6YmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUgYmFz
ZWxpbmVUeXBlLCBib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBM
aW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0CitmbG9hdCBSZW5kZXJJbmxp
bmU6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSwgYm9vbCBmaXJz
dExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGluZVBvc2l0aW9uTW9kZSBsaW5l
UG9zaXRpb25Nb2RlKSBjb25zdAogewogICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmlj
cyA9IHN0eWxlKGZpcnN0TGluZSktPmZvbnRNZXRyaWNzKCk7CiAgICAgcmV0dXJuIGZvbnRNZXRy
aWNzLmFzY2VudChiYXNlbGluZVR5cGUpICsgKGxpbmVIZWlnaHQoZmlyc3RMaW5lLCBkaXJlY3Rp
b24sIGxpbmVQb3NpdGlvbk1vZGUpIC0gZm9udE1ldHJpY3MuaGVpZ2h0KCkpIC8gMjsKQEAgLTEz
MzUsNyArMTMzMyw3IEBACiAgICAgcmVwYWludCgpOwogfQogCi12b2lkIFJlbmRlcklubGluZTo6
YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgSW50UG9pbnQm
IGFkZGl0aW9uYWxPZmZzZXQpCit2b2lkIFJlbmRlcklubGluZTo6YWRkRm9jdXNSaW5nUmVjdHMo
VmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgRmxvYXRQb2ludCYgYWRkaXRpb25hbE9mZnNl
dCkKIHsKICAgICBpZiAoIWFsd2F5c0NyZWF0ZUxpbmVCb3hlcygpKQogICAgICAgICBjdWxsZWRJ
bmxpbmVBYnNvbHV0ZVJlY3RzKHRoaXMsIHJlY3RzLCB0b1NpemUoYWRkaXRpb25hbE9mZnNldCkp
OwpAQCAtMTM2NCw3ICsxMzYyLDcgQEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVySW5saW5lOjpw
YWludE91dGxpbmUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFBv
aW50JiBwYWludE9mZnNldCkKK3ZvaWQgUmVuZGVySW5saW5lOjpwYWludE91dGxpbmUoR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBhaW50T2Zmc2V0
KQogewogICAgIGlmICghaGFzT3V0bGluZSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMzg4LDgg
KzEzODYsOCBAQAogICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KCkpOwogICAgIGZvciAoSW5saW5l
Rmxvd0JveCogY3VyciA9IGZpcnN0TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExp
bmVCb3goKSkgewogICAgICAgICBSb290SW5saW5lQm94KiByb290ID0gY3Vyci0+cm9vdCgpOwot
ICAgICAgICBpbnQgdG9wID0gbWF4KHJvb3QtPmxpbmVUb3AoKSwgY3Vyci0+bG9naWNhbFRvcCgp
KTsKLSAgICAgICAgaW50IGJvdHRvbSA9IG1pbihyb290LT5saW5lQm90dG9tKCksIGN1cnItPmxv
Z2ljYWxCb3R0b20oKSk7CisgICAgICAgIGZsb2F0IHRvcCA9IG1heChyb290LT5saW5lVG9wKCks
IGN1cnItPmxvZ2ljYWxUb3AoKSk7CisgICAgICAgIGZsb2F0IGJvdHRvbSA9IG1pbihyb290LT5s
aW5lQm90dG9tKCksIGN1cnItPmxvZ2ljYWxCb3R0b20oKSk7CiAgICAgICAgIHJlY3RzLmFwcGVu
ZChJbnRSZWN0KGN1cnItPngoKSwgdG9wLCBjdXJyLT5sb2dpY2FsV2lkdGgoKSwgYm90dG9tIC0g
dG9wKSk7CiAgICAgfQogICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KCkpOwpAQCAtMTQxNiw3ICsx
NDE0LDcgQEAKICNlbmRpZgogfQogCi12b2lkIFJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lRm9y
TGluZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBh
aW50T2Zmc2V0LAordm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50T3V0bGluZUZvckxpbmUoR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBhaW50T2Zmc2V0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYg
bGFzdGxpbmUsIGNvbnN0IEludFJlY3QmIHRoaXNsaW5lLCBjb25zdCBJbnRSZWN0JiBuZXh0bGlu
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbG9yIG91
dGxpbmVDb2xvcikKIHsKQEAgLTE0MjgsMTEgKzE0MjYsMTMgQEAKICAgICBib29sIGFudGlhbGlh
cyA9ICFjdXJyZW50Q1RNLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCk7CiAKICAg
ICBpbnQgb2Zmc2V0ID0gc3R5bGUoKS0+b3V0bGluZU9mZnNldCgpOworICAgIAorICAgIEludFBv
aW50IHJvdW5kZWRQYWludE9mZnNldCA9IHJvdW5kZWRJbnRQb2ludChwYWludE9mZnNldCk7CiAK
LSAgICBpbnQgdCA9IHBhaW50T2Zmc2V0LnkoKSArIHRoaXNsaW5lLnkoKSAtIG9mZnNldDsKLSAg
ICBpbnQgbCA9IHBhaW50T2Zmc2V0LngoKSArIHRoaXNsaW5lLngoKSAtIG9mZnNldDsKLSAgICBp
bnQgYiA9IHBhaW50T2Zmc2V0LnkoKSArIHRoaXNsaW5lLm1heFkoKSArIG9mZnNldDsKLSAgICBp
bnQgciA9IHBhaW50T2Zmc2V0LngoKSArIHRoaXNsaW5lLm1heFgoKSArIG9mZnNldDsKKyAgICBp
bnQgdCA9IHJvdW5kZWRQYWludE9mZnNldC55KCkgKyB0aGlzbGluZS55KCkgLSBvZmZzZXQ7Cisg
ICAgaW50IGwgPSByb3VuZGVkUGFpbnRPZmZzZXQueCgpICsgdGhpc2xpbmUueCgpIC0gb2Zmc2V0
OworICAgIGludCBiID0gcm91bmRlZFBhaW50T2Zmc2V0LnkoKSArIHRoaXNsaW5lLm1heFkoKSAr
IG9mZnNldDsKKyAgICBpbnQgciA9IHJvdW5kZWRQYWludE9mZnNldC54KCkgKyB0aGlzbGluZS5t
YXhYKCkgKyBvZmZzZXQ7CiAgICAgCiAgICAgLy8gbGVmdCBlZGdlCiAgICAgZHJhd0xpbmVGb3JC
b3hTaWRlKGdyYXBoaWNzQ29udGV4dCwKQEAgLTE0NjIsMjEgKzE0NjIsMjEgQEAKICAgICAgICAg
ZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICBs
IC0gb3csCiAgICAgICAgICAgICAgICAgICAgdCAtIG93LAotICAgICAgICAgICAgICAgICAgIG1p
bihyK293LCAobGFzdGxpbmUuaXNFbXB0eSgpID8gMTAwMDAwMCA6IHBhaW50T2Zmc2V0LngoKSAr
IGxhc3RsaW5lLngoKSkpLAorICAgICAgICAgICAgICAgICAgIG1pbihyK293LCAobGFzdGxpbmUu
aXNFbXB0eSgpID8gMTAwMDAwMCA6IHJvdW5kZWRQYWludE9mZnNldC54KCkgKyBsYXN0bGluZS54
KCkpKSwKICAgICAgICAgICAgICAgICAgICB0LAogICAgICAgICAgICAgICAgICAgIEJTVG9wLCBv
dXRsaW5lQ29sb3IsIG9zLAogICAgICAgICAgICAgICAgICAgIG93LAotICAgICAgICAgICAgICAg
ICAgICghbGFzdGxpbmUuaXNFbXB0eSgpICYmIHBhaW50T2Zmc2V0LngoKSArIGxhc3RsaW5lLngo
KSArIDEgPCByICsgb3cpID8gLW93IDogb3csCisgICAgICAgICAgICAgICAgICAgKCFsYXN0bGlu
ZS5pc0VtcHR5KCkgJiYgcm91bmRlZFBhaW50T2Zmc2V0LngoKSArIGxhc3RsaW5lLngoKSArIDEg
PCByICsgb3cpID8gLW93IDogb3csCiAgICAgICAgICAgICAgICAgICAgYW50aWFsaWFzKTsKICAg
ICAKICAgICBpZiAobGFzdGxpbmUubWF4WCgpIDwgdGhpc2xpbmUubWF4WCgpKQogICAgICAgICBk
cmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LAotICAgICAgICAgICAgICAgICAgIG1h
eChsYXN0bGluZS5pc0VtcHR5KCkgPyAtMTAwMDAwMCA6IHBhaW50T2Zmc2V0LngoKSArIGxhc3Rs
aW5lLm1heFgoKSwgbCAtIG93KSwKKyAgICAgICAgICAgICAgICAgICBtYXgobGFzdGxpbmUuaXNF
bXB0eSgpID8gLTEwMDAwMDAgOiByb3VuZGVkUGFpbnRPZmZzZXQueCgpICsgbGFzdGxpbmUubWF4
WCgpLCBsIC0gb3cpLAogICAgICAgICAgICAgICAgICAgIHQgLSBvdywKICAgICAgICAgICAgICAg
ICAgICByICsgb3csCiAgICAgICAgICAgICAgICAgICAgdCwKICAgICAgICAgICAgICAgICAgICBC
U1RvcCwgb3V0bGluZUNvbG9yLCBvcywKLSAgICAgICAgICAgICAgICAgICAoIWxhc3RsaW5lLmlz
RW1wdHkoKSAmJiBsIC0gb3cgPCBwYWludE9mZnNldC54KCkgKyBsYXN0bGluZS5tYXhYKCkpID8g
LW93IDogb3csCisgICAgICAgICAgICAgICAgICAgKCFsYXN0bGluZS5pc0VtcHR5KCkgJiYgbCAt
IG93IDwgcm91bmRlZFBhaW50T2Zmc2V0LngoKSArIGxhc3RsaW5lLm1heFgoKSkgPyAtb3cgOiBv
dywKICAgICAgICAgICAgICAgICAgICBvdywgYW50aWFsaWFzKTsKICAgICAKICAgICAvLyBsb3dl
ciBlZGdlCkBAIC0xNDg0LDIxICsxNDg0LDIxIEBACiAgICAgICAgIGRyYXdMaW5lRm9yQm94U2lk
ZShncmFwaGljc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgbCAtIG93LAogICAgICAgICAg
ICAgICAgICAgIGIsCi0gICAgICAgICAgICAgICAgICAgbWluKHIgKyBvdywgIW5leHRsaW5lLmlz
RW1wdHkoKSA/IHBhaW50T2Zmc2V0LngoKSArIG5leHRsaW5lLngoKSArIDEgOiAxMDAwMDAwKSwK
KyAgICAgICAgICAgICAgICAgICBtaW4ociArIG93LCAhbmV4dGxpbmUuaXNFbXB0eSgpID8gcm91
bmRlZFBhaW50T2Zmc2V0LngoKSArIG5leHRsaW5lLngoKSArIDEgOiAxMDAwMDAwKSwKICAgICAg
ICAgICAgICAgICAgICBiICsgb3csCiAgICAgICAgICAgICAgICAgICAgQlNCb3R0b20sIG91dGxp
bmVDb2xvciwgb3MsCiAgICAgICAgICAgICAgICAgICAgb3csCi0gICAgICAgICAgICAgICAgICAg
KCFuZXh0bGluZS5pc0VtcHR5KCkgJiYgcGFpbnRPZmZzZXQueCgpICsgbmV4dGxpbmUueCgpICsg
MSA8IHIgKyBvdykgPyAtb3cgOiBvdywKKyAgICAgICAgICAgICAgICAgICAoIW5leHRsaW5lLmlz
RW1wdHkoKSAmJiByb3VuZGVkUGFpbnRPZmZzZXQueCgpICsgbmV4dGxpbmUueCgpICsgMSA8IHIg
KyBvdykgPyAtb3cgOiBvdywKICAgICAgICAgICAgICAgICAgICBhbnRpYWxpYXMpOwogICAgIAog
ICAgIGlmIChuZXh0bGluZS5tYXhYKCkgPCB0aGlzbGluZS5tYXhYKCkpCiAgICAgICAgIGRyYXdM
aW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgbWF4KCFu
ZXh0bGluZS5pc0VtcHR5KCkgPyBwYWludE9mZnNldC54KCkgKyBuZXh0bGluZS5tYXhYKCkgOiAt
MTAwMDAwMCwgbCAtIG93KSwKKyAgICAgICAgICAgICAgICAgICBtYXgoIW5leHRsaW5lLmlzRW1w
dHkoKSA/IHJvdW5kZWRQYWludE9mZnNldC54KCkgKyBuZXh0bGluZS5tYXhYKCkgOiAtMTAwMDAw
MCwgbCAtIG93KSwKICAgICAgICAgICAgICAgICAgICBiLAogICAgICAgICAgICAgICAgICAgIHIg
KyBvdywKICAgICAgICAgICAgICAgICAgICBiICsgb3csCiAgICAgICAgICAgICAgICAgICAgQlNC
b3R0b20sIG91dGxpbmVDb2xvciwgb3MsCi0gICAgICAgICAgICAgICAgICAgKCFuZXh0bGluZS5p
c0VtcHR5KCkgJiYgbCAtIG93IDwgcGFpbnRPZmZzZXQueCgpICsgbmV4dGxpbmUubWF4WCgpKSA/
IC1vdyA6IG93LAorICAgICAgICAgICAgICAgICAgICghbmV4dGxpbmUuaXNFbXB0eSgpICYmIGwg
LSBvdyA8IHJvdW5kZWRQYWludE9mZnNldC54KCkgKyBuZXh0bGluZS5tYXhYKCkpID8gLW93IDog
b3csCiAgICAgICAgICAgICAgICAgICAgb3csIGFudGlhbGlhcyk7CiB9CiAKQEAgLTE1MzEsNyAr
MTUzMSw5IEBACiAgICAgICAgICAgICBjb250YWluZXIgPSB0aGlzOwogCiAgICAgICAgIHJlZ2lv
bi5jbGlwID0gcmVnaW9uLmJvdW5kczsKLSAgICAgICAgY29udGFpbmVyLT5jb21wdXRlQWJzb2x1
dGVSZXBhaW50UmVjdChyZWdpb24uY2xpcCk7CisgICAgICAgIEZsb2F0UmVjdCBleHBhbmRlZFJl
Y3QgPSByZWdpb24uY2xpcDsKKyAgICAgICAgY29udGFpbmVyLT5jb21wdXRlQWJzb2x1dGVSZXBh
aW50UmVjdChleHBhbmRlZFJlY3QpOworICAgICAgICByZWdpb24uY2xpcCA9IGVuY2xvc2luZ0lu
dFJlY3QoZXhwYW5kZWRSZWN0KTsKICAgICAgICAgaWYgKHJlZ2lvbi5jbGlwLmhlaWdodCgpIDwg
MCkgewogICAgICAgICAgICAgcmVnaW9uLmNsaXAuc2V0SGVpZ2h0KDApOwogICAgICAgICAgICAg
cmVnaW9uLmNsaXAuc2V0V2lkdGgoMCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2Nyb2xsYmFyUGFydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZv
aWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAgICAKLSAgICB2b2lkIHBhaW50
SW50b1JlY3QoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0
Jik7CisgICAgdm9pZCBwYWludEludG9SZWN0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UG9pbnQmLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2
b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5
bGUqIG5ld1N0eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZUNvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ29sLmNwcAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVDb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBACiAgICAg
cmV0dXJuIHN0eWxlKCktPmRpc3BsYXkoKSA9PSBUQUJMRV9DT0xVTU5fR1JPVVA7CiB9CiAKLUlu
dFJlY3QgUmVuZGVyVGFibGVDb2w6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRl
ckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKQorRmxvYXRSZWN0IFJlbmRlclRhYmxl
Q29sOjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCog
cmVwYWludENvbnRhaW5lcikKIHsKICAgICAvLyBGb3Igbm93LCBqdXN0IHJlcGFpbnQgdGhlIHdo
b2xlIHRhYmxlLgogICAgIC8vIEZJWE1FOiBGaW5kIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzLCBl
LmcuLCBuZWVkIHRvIHJlcGFpbnQgYWxsIHRoZSBjZWxscyB0aGF0IHdlCkBAIC03OCw3ICs3OCw3
IEBACiAKICAgICBSZW5kZXJUYWJsZSogcGFyZW50VGFibGUgPSB0YWJsZSgpOwogICAgIGlmICgh
cGFyZW50VGFibGUpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgICAgIHJldHVybiBG
bG9hdFJlY3QoKTsKICAgICByZXR1cm4gcGFyZW50VGFibGUtPmNsaXBwZWRPdmVyZmxvd1JlY3RG
b3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQAog
ICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRS
ZWN0KiA9IDApOwogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50SW50b1JlY3QoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8m
LCBjb25zdCBJbnRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBj
b25zdCBGbG9hdFBvaW50Jik7CiAKICAgICBib29sIGlzTG9naWNhbFdpZHRoU3BlY2lmaWVkKCkg
Y29uc3Q7CiAgICAgYm9vbCBpc0xvZ2ljYWxIZWlnaHRTcGVjaWZpZWQoKSBjb25zdDsKQEAgLTc2
LDIxICs3NiwyMSBAQAogICAgIHZpcnR1YWwgYm9vbCBpc0ltYWdlKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlckltYWdlKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiwgY29u
c3QgSW50UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZXBsYWNlZChQYWludEluZm8m
LCBjb25zdCBGbG9hdFBvaW50Jik7CiAKLSAgICB2aXJ0dWFsIGludCBtaW5pbXVtUmVwbGFjZWRI
ZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IG1pbmltdW1SZXBsYWNlZEhlaWdodCgp
IGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNl
Kik7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJ
bnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogCi0gICAgdmlydHVh
bCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRoID0g
dHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdo
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRo
KGJvb2wgaW5jbHVkZU1heFdpZHRoID0gdHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBj
b21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3Q7CiAKICAgICBJbnRTaXplIGltYWdl
U2l6ZUZvckVycm9yKENhY2hlZEltYWdlKikgY29uc3Q7CiAgICAgdm9pZCBpbWFnZURpbWVuc2lv
bnNDaGFuZ2VkKGJvb2wgaW1hZ2VTaXplQ2hhbmdlZCwgY29uc3QgSW50UmVjdCogPSAwKTsKIAot
ICAgIGludCBjYWxjQXNwZWN0UmF0aW9Mb2dpY2FsV2lkdGgoKSBjb25zdDsKLSAgICBpbnQgY2Fs
Y0FzcGVjdFJhdGlvTG9naWNhbEhlaWdodCgpIGNvbnN0OworICAgIGZsb2F0IGNhbGNBc3BlY3RS
YXRpb0xvZ2ljYWxXaWR0aCgpIGNvbnN0OworICAgIGZsb2F0IGNhbGNBc3BlY3RSYXRpb0xvZ2lj
YWxIZWlnaHQoKSBjb25zdDsKIAogICAgIHZvaWQgcGFpbnRBcmVhRWxlbWVudEZvY3VzUmluZyhQ
YWludEluZm8mKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJ
KHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAKIHsKIH0KIAotaW50IFJlbmRlckJv
eDo6bWFyZ2luQmVmb3JlKCkgY29uc3QKK2Zsb2F0IFJlbmRlckJveDo6bWFyZ2luQmVmb3JlKCkg
Y29uc3QKIHsKICAgICBzd2l0Y2ggKHN0eWxlKCktPndyaXRpbmdNb2RlKCkpIHsKICAgICBjYXNl
IFRvcFRvQm90dG9tV3JpdGluZ01vZGU6CkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgcmV0dXJuIG1f
bWFyZ2luVG9wOwogfQogCi1pbnQgUmVuZGVyQm94OjptYXJnaW5BZnRlcigpIGNvbnN0CitmbG9h
dCBSZW5kZXJCb3g6Om1hcmdpbkFmdGVyKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHN0eWxlKCkt
PndyaXRpbmdNb2RlKCkpIHsKICAgICBjYXNlIFRvcFRvQm90dG9tV3JpdGluZ01vZGU6CkBAIC0x
MTMsMjEgKzExMywyMSBAQAogICAgIHJldHVybiBtX21hcmdpbkJvdHRvbTsKIH0KIAotaW50IFJl
bmRlckJveDo6bWFyZ2luU3RhcnQoKSBjb25zdAorZmxvYXQgUmVuZGVyQm94OjptYXJnaW5TdGFy
dCgpIGNvbnN0CiB7CiAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAg
IHJldHVybiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtX21hcmdpbkxlZnQg
OiBtX21hcmdpblJpZ2h0OwogICAgIHJldHVybiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgPyBtX21hcmdpblRvcCA6IG1fbWFyZ2luQm90dG9tOwogfQogCi1pbnQgUmVuZGVyQm94
OjptYXJnaW5FbmQoKSBjb25zdAorZmxvYXQgUmVuZGVyQm94OjptYXJnaW5FbmQoKSBjb25zdAog
ewogICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gc3R5
bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbV9tYXJnaW5SaWdodCA6IG1fbWFyZ2lu
TGVmdDsKICAgICByZXR1cm4gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbV9t
YXJnaW5Cb3R0b20gOiBtX21hcmdpblRvcDsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OnNldE1hcmdp
blN0YXJ0KGludCBtYXJnaW4pCit2b2lkIFJlbmRlckJveDo6c2V0TWFyZ2luU3RhcnQoZmxvYXQg
bWFyZ2luKQogewogICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAg
IGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCkBAIC0xNDIsNyArMTQyLDcg
QEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQm94OjpzZXRNYXJnaW5FbmQoaW50IG1hcmdpbikK
K3ZvaWQgUmVuZGVyQm94OjpzZXRNYXJnaW5FbmQoZmxvYXQgbWFyZ2luKQogewogICAgIGlmIChp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgIGlmIChzdHlsZSgpLT5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkpCkBAIC0xNTcsNyArMTU3LDcgQEAKICAgICB9CiB9CiAKLXZvaWQg
UmVuZGVyQm94OjpzZXRNYXJnaW5CZWZvcmUoaW50IG1hcmdpbikKK3ZvaWQgUmVuZGVyQm94Ojpz
ZXRNYXJnaW5CZWZvcmUoZmxvYXQgbWFyZ2luKQogewogICAgIHN3aXRjaCAoc3R5bGUoKS0+d3Jp
dGluZ01vZGUoKSkgewogICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9kZToKQEAgLTE3NSw3
ICsxNzUsNyBAQAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJCb3g6OnNldE1hcmdpbkFmdGVyKGlu
dCBtYXJnaW4pCit2b2lkIFJlbmRlckJveDo6c2V0TWFyZ2luQWZ0ZXIoZmxvYXQgbWFyZ2luKQog
ewogICAgIHN3aXRjaCAoc3R5bGUoKS0+d3JpdGluZ01vZGUoKSkgewogICAgIGNhc2UgVG9wVG9C
b3R0b21Xcml0aW5nTW9kZToKQEAgLTQwMywxNyArNDAzLDE3IEBACiAKIC8vIE1vcmUgSUUgZXh0
ZW5zaW9ucy4gIGNsaWVudFdpZHRoIGFuZCBjbGllbnRIZWlnaHQgcmVwcmVzZW50IHRoZSBpbnRl
cmlvciBvZiBhbiBvYmplY3QKIC8vIGV4Y2x1ZGluZyBib3JkZXIgYW5kIHNjcm9sbGJhci4KLWlu
dCBSZW5kZXJCb3g6OmNsaWVudFdpZHRoKCkgY29uc3QKK2Zsb2F0IFJlbmRlckJveDo6Y2xpZW50
V2lkdGgoKSBjb25zdAogewogICAgIHJldHVybiB3aWR0aCgpIC0gYm9yZGVyTGVmdCgpIC0gYm9y
ZGVyUmlnaHQoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKIH0KIAotaW50IFJlbmRlckJv
eDo6Y2xpZW50SGVpZ2h0KCkgY29uc3QKK2Zsb2F0IFJlbmRlckJveDo6Y2xpZW50SGVpZ2h0KCkg
Y29uc3QKIHsKICAgICByZXR1cm4gaGVpZ2h0KCkgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRv
bSgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpOwogfQogCi1pbnQgUmVuZGVyQm94Ojpz
Y3JvbGxXaWR0aCgpIGNvbnN0CitmbG9hdCBSZW5kZXJCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QK
IHsKICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIHJldHVybiBsYXllcigpLT5z
Y3JvbGxXaWR0aCgpOwpAQCAtNDIxLDEwICs0MjEsMTAgQEAKICAgICAvLyBGSVhNRTogTmVlZCB0
byB3b3JrIHJpZ2h0IHdpdGggd3JpdGluZyBtb2Rlcy4KICAgICBpZiAoc3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICByZXR1cm4gbWF4KGNsaWVudFdpZHRoKCksIG1h
eFhMYXlvdXRPdmVyZmxvdygpIC0gYm9yZGVyTGVmdCgpKTsKLSAgICByZXR1cm4gY2xpZW50V2lk
dGgoKSAtIG1pbigwLCBtaW5YTGF5b3V0T3ZlcmZsb3coKSAtIGJvcmRlckxlZnQoKSk7CisgICAg
cmV0dXJuIGNsaWVudFdpZHRoKCkgLSBtaW4oMC4wZiwgbWluWExheW91dE92ZXJmbG93KCkgLSBi
b3JkZXJMZWZ0KCkpOwogfQogCi1pbnQgUmVuZGVyQm94OjpzY3JvbGxIZWlnaHQoKSBjb25zdAor
ZmxvYXQgUmVuZGVyQm94OjpzY3JvbGxIZWlnaHQoKSBjb25zdAogewogICAgIGlmIChoYXNPdmVy
Zmxvd0NsaXAoKSkKICAgICAgICAgcmV0dXJuIGxheWVyKCktPnNjcm9sbEhlaWdodCgpOwpAQCAt
NDMzLDMxICs0MzMsMzEgQEAKICAgICByZXR1cm4gbWF4KGNsaWVudEhlaWdodCgpLCBtYXhZTGF5
b3V0T3ZlcmZsb3coKSAtIGJvcmRlclRvcCgpKTsKIH0KIAotaW50IFJlbmRlckJveDo6c2Nyb2xs
TGVmdCgpIGNvbnN0CitmbG9hdCBSZW5kZXJCb3g6OnNjcm9sbExlZnQoKSBjb25zdAogewogICAg
IHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSA/IGxheWVyKCktPnNjcm9sbFhPZmZzZXQoKSA6IDA7
CiB9CiAKLWludCBSZW5kZXJCb3g6OnNjcm9sbFRvcCgpIGNvbnN0CitmbG9hdCBSZW5kZXJCb3g6
OnNjcm9sbFRvcCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpID8gbGF5
ZXIoKS0+c2Nyb2xsWU9mZnNldCgpIDogMDsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9s
bExlZnQoaW50IG5ld0xlZnQpCit2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdChmbG9hdCBu
ZXdMZWZ0KQogewogICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgbGF5ZXIoKS0+
c2Nyb2xsVG9YT2Zmc2V0KG5ld0xlZnQpOwogfQogCi12b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xs
VG9wKGludCBuZXdUb3ApCit2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsVG9wKGZsb2F0IG5ld1Rv
cCkKIHsKICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIGxheWVyKCktPnNjcm9s
bFRvWU9mZnNldChuZXdUb3ApOwogfQogCi12b2lkIFJlbmRlckJveDo6YWJzb2x1dGVSZWN0cyhW
ZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQp
Cit2b2lkIFJlbmRlckJveDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBj
b25zdCBGbG9hdFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkKIHsKLSAgICByZWN0cy5hcHBlbmQo
SW50UmVjdChhY2N1bXVsYXRlZE9mZnNldCwgc2l6ZSgpKSk7CisgICAgcmVjdHMuYXBwZW5kKGVu
Y2xvc2luZ0ludFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQsIHNpemUoKSkpOwogfQogCiB2b2lkIFJl
bmRlckJveDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCkBAIC00NzIs
OSArNDcyLDkgQEAKICAgICAgICAgbGF5ZXIoKS0+dXBkYXRlVHJhbnNmb3JtKCk7CiB9CiAKLUlu
dFJlY3QgUmVuZGVyQm94OjphYnNvbHV0ZUNvbnRlbnRCb3goKSBjb25zdAorRmxvYXRSZWN0IFJl
bmRlckJveDo6YWJzb2x1dGVDb250ZW50Qm94KCkgY29uc3QKIHsKLSAgICBJbnRSZWN0IHJlY3Qg
PSBjb250ZW50Qm94UmVjdCgpOworICAgIEZsb2F0UmVjdCByZWN0ID0gY29udGVudEJveFJlY3Qo
KTsKICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkp
OwogICAgIHJlY3QubW92ZShhYnNQb3MueCgpLCBhYnNQb3MueSgpKTsKICAgICByZXR1cm4gcmVj
dDsKQEAgLTQ4MiwxMyArNDgyLDEzIEBACiAKIEZsb2F0UXVhZCBSZW5kZXJCb3g6OmFic29sdXRl
Q29udGVudFF1YWQoKSBjb25zdAogewotICAgIEludFJlY3QgcmVjdCA9IGNvbnRlbnRCb3hSZWN0
KCk7Ci0gICAgcmV0dXJuIGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHJlY3QpKTsKKyAg
ICBGbG9hdFJlY3QgcmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7CisgICAgcmV0dXJuIGxvY2FsVG9B
YnNvbHV0ZVF1YWQocmVjdCk7CiB9CiAKLUludFJlY3QgUmVuZGVyQm94OjpvdXRsaW5lQm91bmRz
Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UG9p
bnQqIGNhY2hlZE9mZnNldFRvUmVwYWludENvbnRhaW5lcikgY29uc3QKK0ludFJlY3QgUmVuZGVy
Qm94OjpvdXRsaW5lQm91bmRzRm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lciwgRmxvYXRQb2ludCogY2FjaGVkT2Zmc2V0VG9SZXBhaW50Q29udGFpbmVyKSBj
b25zdAogewotICAgIEludFJlY3QgYm94ID0gYm9yZGVyQm91bmRpbmdCb3goKTsKKyAgICBJbnRS
ZWN0IGJveCA9IGVuY2xvc2luZ0ludFJlY3QoYm9yZGVyQm91bmRpbmdCb3goKSk7CiAgICAgYWRq
dXN0UmVjdEZvck91dGxpbmVBbmRTaGFkb3coYm94KTsKIAogICAgIEZsb2F0UXVhZCBjb250YWlu
ZXJSZWxhdGl2ZVF1YWQgPSBGbG9hdFJlY3QoYm94KTsKQEAgLTUwMSwxNSArNTAxLDE1IEBACiAK
ICAgICAvLyBGSVhNRTogbGF5b3V0RGVsdGEgbmVlZHMgdG8gYmUgYXBwbGllZCBpbiBwYXJ0cyBi
ZWZvcmUvYWZ0ZXIgdHJhbnNmb3JtcyBhbmQKICAgICAvLyByZXBhaW50IGNvbnRhaW5lcnMuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMwOAotICAgIGJveC5tb3Zl
KHZpZXcoKS0+bGF5b3V0RGVsdGEoKSk7CisgICAgYm94Lm1vdmUocm91bmRlZEludFNpemUodmll
dygpLT5sYXlvdXREZWx0YSgpKSk7CiAKICAgICByZXR1cm4gYm94OwogfQogCi12b2lkIFJlbmRl
ckJveDo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgSW50
UG9pbnQmIGFkZGl0aW9uYWxPZmZzZXQpCit2b2lkIFJlbmRlckJveDo6YWRkRm9jdXNSaW5nUmVj
dHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgRmxvYXRQb2ludCYgYWRkaXRpb25hbE9m
ZnNldCkKIHsKICAgICBpZiAoIXNpemUoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJlY3RzLmFwcGVu
ZChJbnRSZWN0KGFkZGl0aW9uYWxPZmZzZXQsIHNpemUoKSkpOworICAgICAgICByZWN0cy5hcHBl
bmQoZW5jbG9zaW5nSW50UmVjdChhZGRpdGlvbmFsT2Zmc2V0LCBzaXplKCkpKTsKIH0KIAogSW50
UmVjdCBSZW5kZXJCb3g6OnJlZmxlY3Rpb25Cb3goKSBjb25zdApAQCAtNTE3LDcgKzUxNyw3IEBA
CiAgICAgSW50UmVjdCByZXN1bHQ7CiAgICAgaWYgKCFzdHlsZSgpLT5ib3hSZWZsZWN0KCkpCiAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgSW50UmVjdCBib3ggPSBib3JkZXJCb3hSZWN0KCk7
CisgICAgSW50UmVjdCBib3ggPSBlbmNsb3NpbmdJbnRSZWN0KGJvcmRlckJveFJlY3QoKSk7CiAg
ICAgcmVzdWx0ID0gYm94OwogICAgIHN3aXRjaCAoc3R5bGUoKS0+Ym94UmVmbGVjdCgpLT5kaXJl
Y3Rpb24oKSkgewogICAgICAgICBjYXNlIFJlZmxlY3Rpb25CZWxvdzoKQEAgLTU1MCw3ICs1NTAs
NyBAQAogICAgIGlmICghc3R5bGUoKS0+Ym94UmVmbGVjdCgpKQogICAgICAgICByZXR1cm4gSW50
UmVjdCgpOwogCi0gICAgSW50UmVjdCBib3ggPSBib3JkZXJCb3hSZWN0KCk7CisgICAgSW50UmVj
dCBib3ggPSBlbmNsb3NpbmdJbnRSZWN0KGJvcmRlckJveFJlY3QoKSk7CiAgICAgSW50UmVjdCBy
ZXN1bHQgPSByOwogICAgIHN3aXRjaCAoc3R5bGUoKS0+Ym94UmVmbGVjdCgpLT5kaXJlY3Rpb24o
KSkgewogICAgICAgICBjYXNlIFJlZmxlY3Rpb25CZWxvdzoKQEAgLTU2OSw2ICs1NjksMzAgQEAK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCitGbG9hdFJlY3QgUmVuZGVyQm94OjpyZWZsZWN0ZWRS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikgY29uc3QKK3sKKyAgICBpZiAoIXN0eWxlKCktPmJveFJl
ZmxlY3QoKSkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIEZsb2F0UmVjdCBib3gg
PSBlbmNsb3NpbmdJbnRSZWN0KGJvcmRlckJveFJlY3QoKSk7CisgICAgRmxvYXRSZWN0IHJlc3Vs
dCA9IHI7CisgICAgc3dpdGNoIChzdHlsZSgpLT5ib3hSZWZsZWN0KCktPmRpcmVjdGlvbigpKSB7
CisgICAgICAgIGNhc2UgUmVmbGVjdGlvbkJlbG93OgorICAgICAgICAgICAgcmVzdWx0LnNldFko
Ym94Lm1heFkoKSArIHJlZmxlY3Rpb25PZmZzZXQoKSArIChib3gubWF4WSgpIC0gci5tYXhZKCkp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJlZmxlY3Rpb25BYm92ZToKKyAg
ICAgICAgICAgIHJlc3VsdC5zZXRZKGJveC55KCkgLSByZWZsZWN0aW9uT2Zmc2V0KCkgLSBib3gu
aGVpZ2h0KCkgKyAoYm94Lm1heFkoKSAtIHIubWF4WSgpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBSZWZsZWN0aW9uTGVmdDoKKyAgICAgICAgICAgIHJlc3VsdC5zZXRYKGJv
eC54KCkgLSByZWZsZWN0aW9uT2Zmc2V0KCkgLSBib3gud2lkdGgoKSArIChib3gubWF4WCgpIC0g
ci5tYXhYKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJlZmxlY3Rpb25S
aWdodDoKKyAgICAgICAgICAgIHJlc3VsdC5zZXRYKGJveC5tYXhYKCkgKyByZWZsZWN0aW9uT2Zm
c2V0KCkgKyAoYm94Lm1heFgoKSAtIHIubWF4WCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogYm9vbCBSZW5kZXJCb3g6OmluY2x1ZGVWZXJ0
aWNhbFNjcm9sbGJhclNpemUoKSBjb25zdAogewogICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAo
KSAmJiAhbGF5ZXIoKS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKQpAQCAtNTgxLDEyICs2MDUsMTIg
QEAKICAgICAgICAgJiYgKHN0eWxlKCktPm92ZXJmbG93WCgpID09IE9TQ1JPTEwgfHwgc3R5bGUo
KS0+b3ZlcmZsb3dYKCkgPT0gT0FVVE8pOwogfQogCi1pbnQgUmVuZGVyQm94Ojp2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoKCkgY29uc3QKK2Zsb2F0IFJlbmRlckJveDo6dmVydGljYWxTY3JvbGxiYXJX
aWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUo
KSA/IGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSA6IDA7CiB9CiAKLWludCBSZW5k
ZXJCb3g6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSBjb25zdAorZmxvYXQgUmVuZGVyQm94
Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29uc3QKIHsKICAgICByZXR1cm4gaW5jbHVk
ZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0KCkgOiAwOwogfQpAQCAtNjYxLDcgKzY4NSw3IEBACiAgICAgICAgIGxheWVyKCktPnBh
blNjcm9sbEZyb21Qb2ludChzb3VyY2UpOwogfQogCi1pbnQgUmVuZGVyQm94OjptaW5QcmVmZXJy
ZWRMb2dpY2FsV2lkdGgoKSBjb25zdAorZmxvYXQgUmVuZGVyQm94OjptaW5QcmVmZXJyZWRMb2dp
Y2FsV2lkdGgoKSBjb25zdAogewogICAgIGlmIChwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHko
KSkKICAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJCb3gqPih0aGlzKS0+Y29tcHV0ZVByZWZlcnJl
ZExvZ2ljYWxXaWR0aHMoKTsKQEAgLTY2OSw3ICs2OTMsNyBAQAogICAgIHJldHVybiBtX21pblBy
ZWZlcnJlZExvZ2ljYWxXaWR0aDsKIH0KIAotaW50IFJlbmRlckJveDo6bWF4UHJlZmVycmVkTG9n
aWNhbFdpZHRoKCkgY29uc3QKK2Zsb2F0IFJlbmRlckJveDo6bWF4UHJlZmVycmVkTG9naWNhbFdp
ZHRoKCkgY29uc3QKIHsKICAgICBpZiAocHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KCkpCiAg
ICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyQm94Kj4odGhpcyktPmNvbXB1dGVQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzKCk7CkBAIC02NzcsMTQgKzcwMSwxNCBAQAogICAgIHJldHVybiBtX21heFByZWZl
cnJlZExvZ2ljYWxXaWR0aDsKIH0KIAotaW50IFJlbmRlckJveDo6b3ZlcnJpZGVTaXplKCkgY29u
c3QKK2Zsb2F0IFJlbmRlckJveDo6b3ZlcnJpZGVTaXplKCkgY29uc3QKIHsKICAgICBpZiAoIWhh
c092ZXJyaWRlU2l6ZSgpKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIGdPdmVycmlk
ZVNpemVNYXAtPmdldCh0aGlzKTsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OnNldE92ZXJyaWRlU2l6
ZShpbnQgcykKK3ZvaWQgUmVuZGVyQm94OjpzZXRPdmVycmlkZVNpemUoZmxvYXQgcykKIHsKICAg
ICBpZiAocyA9PSAtMSkgewogICAgICAgICBpZiAoaGFzT3ZlcnJpZGVTaXplKCkpIHsKQEAgLTY5
OSw1MCArNzIzLDUwIEBACiAgICAgfQogfQogCi1pbnQgUmVuZGVyQm94OjpvdmVycmlkZVdpZHRo
KCkgY29uc3QKK2Zsb2F0IFJlbmRlckJveDo6b3ZlcnJpZGVXaWR0aCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGhhc092ZXJyaWRlU2l6ZSgpID8gb3ZlcnJpZGVTaXplKCkgOiB3aWR0aCgpOwogfQog
Ci1pbnQgUmVuZGVyQm94OjpvdmVycmlkZUhlaWdodCgpIGNvbnN0CitmbG9hdCBSZW5kZXJCb3g6
Om92ZXJyaWRlSGVpZ2h0KCkgY29uc3QKIHsKICAgICByZXR1cm4gaGFzT3ZlcnJpZGVTaXplKCkg
PyBvdmVycmlkZVNpemUoKSA6IGhlaWdodCgpOwogfQogCi1pbnQgUmVuZGVyQm94Ojpjb21wdXRl
Qm9yZGVyQm94TG9naWNhbFdpZHRoKGludCB3aWR0aCkgY29uc3QKK2Zsb2F0IFJlbmRlckJveDo6
Y29tcHV0ZUJvcmRlckJveExvZ2ljYWxXaWR0aChmbG9hdCB3aWR0aCkgY29uc3QKIHsKLSAgICBp
bnQgYm9yZGVyc1BsdXNQYWRkaW5nID0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpOwor
ICAgIGZsb2F0IGJvcmRlcnNQbHVzUGFkZGluZyA9IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lk
dGgoKTsKICAgICBpZiAoc3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1gpCiAgICAg
ICAgIHJldHVybiB3aWR0aCArIGJvcmRlcnNQbHVzUGFkZGluZzsKICAgICByZXR1cm4gbWF4KHdp
ZHRoLCBib3JkZXJzUGx1c1BhZGRpbmcpOwogfQogCi1pbnQgUmVuZGVyQm94Ojpjb21wdXRlQm9y
ZGVyQm94TG9naWNhbEhlaWdodChpbnQgaGVpZ2h0KSBjb25zdAorZmxvYXQgUmVuZGVyQm94Ojpj
b21wdXRlQm9yZGVyQm94TG9naWNhbEhlaWdodChmbG9hdCBoZWlnaHQpIGNvbnN0CiB7Ci0gICAg
aW50IGJvcmRlcnNQbHVzUGFkZGluZyA9IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCk7
CisgICAgZmxvYXQgYm9yZGVyc1BsdXNQYWRkaW5nID0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxI
ZWlnaHQoKTsKICAgICBpZiAoc3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1gpCiAg
ICAgICAgIHJldHVybiBoZWlnaHQgKyBib3JkZXJzUGx1c1BhZGRpbmc7CiAgICAgcmV0dXJuIG1h
eChoZWlnaHQsIGJvcmRlcnNQbHVzUGFkZGluZyk7CiB9CiAKLWludCBSZW5kZXJCb3g6OmNvbXB1
dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKGludCB3aWR0aCkgY29uc3QKK2Zsb2F0IFJlbmRlckJv
eDo6Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoZmxvYXQgd2lkdGgpIGNvbnN0CiB7CiAg
ICAgaWYgKHN0eWxlKCktPmJveFNpemluZygpID09IEJPUkRFUl9CT1gpCiAgICAgICAgIHdpZHRo
IC09IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKTsKLSAgICByZXR1cm4gbWF4KDAsIHdp
ZHRoKTsKKyAgICByZXR1cm4gbWF4KDAuMGYsIHdpZHRoKTsKIH0KIAotaW50IFJlbmRlckJveDo6
Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KGludCBoZWlnaHQpIGNvbnN0CitmbG9hdCBS
ZW5kZXJCb3g6OmNvbXB1dGVDb250ZW50Qm94TG9naWNhbEhlaWdodChmbG9hdCBoZWlnaHQpIGNv
bnN0CiB7CiAgICAgaWYgKHN0eWxlKCktPmJveFNpemluZygpID09IEJPUkRFUl9CT1gpCiAgICAg
ICAgIGhlaWdodCAtPSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpOwotICAgIHJldHVy
biBtYXgoMCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gbWF4KDAuMGYsIGhlaWdodCk7CiB9CiAKIC8v
IEhpdCBUZXN0aW5nCiBib29sIFJlbmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBv
aW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVz
dEFjdGlvbiBhY3Rpb24pCiB7Ci0gICAgSW50UG9pbnQgYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3Vt
dWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKKyAgICBJbnRQb2ludCBhZGp1c3RlZExvY2F0aW9u
ID0gcm91bmRlZEludFBvaW50KGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKSk7CiAKICAg
ICAvLyBDaGVjayBraWRzIGZpcnN0LgogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGxh
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKQEAg
LTc1NCw3ICs3NzgsNyBAQAogCiAgICAgLy8gQ2hlY2sgb3VyIGJvdW5kcyBuZXh0LiBGb3IgdGhp
cyBwdXJwb3NlIGFsd2F5cyBhc3N1bWUgdGhhdCB3ZSBjYW4gb25seSBiZSBoaXQgaW4gdGhlCiAg
ICAgLy8gZm9yZWdyb3VuZCBwaGFzZSAod2hpY2ggaXMgdHJ1ZSBmb3IgcmVwbGFjZWQgZWxlbWVu
dHMgbGlrZSBpbWFnZXMpLgotICAgIEludFJlY3QgYm91bmRzUmVjdCA9IEludFJlY3QoYWRqdXN0
ZWRMb2NhdGlvbiwgc2l6ZSgpKTsKKyAgICBJbnRSZWN0IGJvdW5kc1JlY3QgPSBlbmNsb3NpbmdJ
bnRSZWN0KGFkanVzdGVkTG9jYXRpb24sIHNpemUoKSk7CiAgICAgaWYgKHZpc2libGVUb0hpdFRl
c3RpbmcoKSAmJiBhY3Rpb24gPT0gSGl0VGVzdEZvcmVncm91bmQgJiYgYm91bmRzUmVjdC5pbnRl
cnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKSB7CiAgICAgICAg
IHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gdG9TaXplKGFk
anVzdGVkTG9jYXRpb24pKTsKICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2Vk
VGVzdFJlc3VsdChub2RlKCksIHBvaW50SW5Db250YWluZXIsIGJvdW5kc1JlY3QpKQpAQCAtNzY2
LDkgKzc5MCw5IEBACiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwYWludGluZyBzdHVmZiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgUmVuZGVyQm94OjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQordm9pZCBS
ZW5kZXJCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiBw
YWludE9mZnNldCkKIHsKLSAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRP
ZmZzZXQgKyBsb2NhdGlvbigpOworICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9
IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKICAgICAvLyBkZWZhdWx0IGltcGxlbWVudGF0aW9u
LiBKdXN0IHBhc3MgcGFpbnQgdGhyb3VnaCB0byB0aGUgY2hpbGRyZW4KICAgICBQYWludEluZm8g
Y2hpbGRJbmZvKHBhaW50SW5mbyk7CiAgICAgY2hpbGRJbmZvLnVwZGF0ZVBhaW50aW5nUm9vdEZv
ckNoaWxkcmVuKHRoaXMpOwpAQCAtODIyLDExICs4NDYsMTEgQEAKICAgICByZXR1cm4gQmFja2dy
b3VuZEJsZWVkVXNlVHJhbnNwYXJlbmN5TGF5ZXI7CiB9CiAKLXZvaWQgUmVuZGVyQm94OjpwYWlu
dEJveERlY29yYXRpb25zKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFp
bnRPZmZzZXQpCit2b2lkIFJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgRmxvYXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaWYgKCFw
YWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHRoaXMpKQogICAgICAgICByZXR1cm47Ci0g
ICAgSW50UmVjdCBwYWludFJlY3QocGFpbnRPZmZzZXQsIHNpemUoKSk7CisgICAgRmxvYXRSZWN0
IHBhaW50UmVjdChwYWludE9mZnNldCwgc2l6ZSgpKTsKIAogICAgIC8vIGJvcmRlci1maXQgY2Fu
IGFkanVzdCB3aGVyZSB3ZSBwYWludCBvdXIgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kLiAgSWYgc2V0
LCB3ZSBzbnVnbHkgZml0IG91ciBsaW5lIGJveCBkZXNjZW5kYW50cy4gIChUaGUgaUNoYXQKICAg
ICAvLyBiYWxsb29uIGxheW91dCBpcyBhbiBleGFtcGxlIG9mIHRoaXMpLgpAQCAtODQzLDcgKzg2
Nyw3IEBACiAgICAgICAgIC8vIFRvIGF2b2lkIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGJsZWVkaW5n
IG91dCBiZWhpbmQgdGhlIGJvcmRlciwgd2UnbGwgcmVuZGVyIGJhY2tncm91bmQgYW5kIGJvcmRl
cgogICAgICAgICAvLyBpbnRvIGEgdHJhbnNwYXJlbmN5IGxheWVyLCBhbmQgdGhlbiBjbGlwIHRo
YXQgaW4gb25lIGdvICh3aGljaCByZXF1aXJlcyBzZXR0aW5nIHVwIHRoZSBjbGlwIGJlZm9yZQog
ICAgICAgICAvLyBiZWdpbm5pbmcgdGhlIGxheWVyKS4KLSAgICAgICAgUm91bmRlZEludFJlY3Qg
Ym9yZGVyID0gc3R5bGUoKS0+Z2V0Um91bmRlZEJvcmRlckZvcihwYWludFJlY3QpOworICAgICAg
ICBSb3VuZGVkSW50UmVjdCBib3JkZXIgPSBzdHlsZSgpLT5nZXRSb3VuZGVkQm9yZGVyRm9yKGVu
Y2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CiAgICAgICAgIHN0YXRlU2F2ZXIuc2F2ZSgpOwog
ICAgICAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKGJvcmRlcik7CiAg
ICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEpOwpAQCAt
ODUxLDcgKzg3NSw3IEBACiAgICAgCiAgICAgLy8gSWYgd2UgaGF2ZSBhIG5hdGl2ZSB0aGVtZSBh
cHBlYXJhbmNlLCBwYWludCB0aGF0IGJlZm9yZSBwYWludGluZyBvdXIgYmFja2dyb3VuZC4KICAg
ICAvLyBUaGUgdGhlbWUgd2lsbCB0ZWxsIHVzIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCBhbHNv
IHBhaW50IHRoZSBDU1MgYmFja2dyb3VuZC4KLSAgICBib29sIHRoZW1lUGFpbnRlZCA9IHN0eWxl
KCktPmhhc0FwcGVhcmFuY2UoKSAmJiAhdGhlbWUoKS0+cGFpbnQodGhpcywgcGFpbnRJbmZvLCBw
YWludFJlY3QpOworICAgIGJvb2wgdGhlbWVQYWludGVkID0gc3R5bGUoKS0+aGFzQXBwZWFyYW5j
ZSgpICYmICF0aGVtZSgpLT5wYWludCh0aGlzLCBwYWludEluZm8sIGVuY2xvc2luZ0ludFJlY3Qo
cGFpbnRSZWN0KSk7CiAgICAgaWYgKCF0aGVtZVBhaW50ZWQpIHsKICAgICAgICAgaWYgKGlzUm9v
dCgpKQogICAgICAgICAgICAgcGFpbnRSb290Qm94RmlsbExheWVycyhwYWludEluZm8pOwpAQCAt
ODczLDEyICs4OTcsMTIgQEAKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmVuZFRyYW5zcGFy
ZW5jeUxheWVyKCk7CiB9CiAKLXZvaWQgUmVuZGVyQm94OjpwYWludE1hc2soUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKK3ZvaWQgUmVuZGVyQm94Ojpw
YWludE1hc2soUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIHBhaW50T2Zm
c2V0KQogewogICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCh0aGlzKSB8
fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8fCBwYWludEluZm8ucGhhc2UgIT0g
UGFpbnRQaGFzZU1hc2sgfHwgcGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50UmVjdCBwYWludFJlY3QgPSBJbnRSZWN0KHBhaW50
T2Zmc2V0LCBzaXplKCkpOworICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBGbG9hdFJlY3QocGFp
bnRPZmZzZXQsIHNpemUoKSk7CiAKICAgICAvLyBib3JkZXItZml0IGNhbiBhZGp1c3Qgd2hlcmUg
d2UgcGFpbnQgb3VyIGJvcmRlciBhbmQgYmFja2dyb3VuZC4gIElmIHNldCwgd2Ugc251Z2x5IGZp
dCBvdXIgbGluZSBib3ggZGVzY2VuZGFudHMuICAoVGhlIGlDaGF0CiAgICAgLy8gYmFsbG9vbiBs
YXlvdXQgaXMgYW4gZXhhbXBsZSBvZiB0aGlzKS4KQEAgLTg4Nyw3ICs5MTEsNyBAQAogICAgIHBh
aW50TWFza0ltYWdlcyhwYWludEluZm8sIHBhaW50UmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyQm94
OjpwYWludE1hc2tJbWFnZXMoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHBhaW50UmVjdCkKK3ZvaWQgUmVuZGVyQm94OjpwYWludE1hc2tJbWFnZXMoY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgcGFpbnRSZWN0KQogewogICAgIC8v
IEZpZ3VyZSBvdXQgaWYgd2UgbmVlZCB0byBwdXNoIGEgdHJhbnNwYXJlbmN5IGxheWVyIHRvIHJl
bmRlciBvdXIgbWFzay4KICAgICBib29sIHB1c2hUcmFuc3BhcmVuY3lMYXllciA9IGZhbHNlOwpA
QCAtOTU1LDI0ICs5NzksMjQgQEAKIAogSW50UmVjdCBSZW5kZXJCb3g6Om1hc2tDbGlwUmVjdCgp
CiB7Ci0gICAgSW50UmVjdCBiYm94ID0gYm9yZGVyQm94UmVjdCgpOworICAgIEZsb2F0UmVjdCBi
Ym94ID0gYm9yZGVyQm94UmVjdCgpOwogICAgIGlmIChzdHlsZSgpLT5tYXNrQm94SW1hZ2UoKS5p
bWFnZSgpKQotICAgICAgICByZXR1cm4gYmJveDsKKyAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0lu
dFJlY3QoYmJveCk7CiAgICAgCi0gICAgSW50UmVjdCByZXN1bHQ7CisgICAgRmxvYXRSZWN0IHJl
c3VsdDsKICAgICBmb3IgKGNvbnN0IEZpbGxMYXllciogbWFza0xheWVyID0gc3R5bGUoKS0+bWFz
a0xheWVycygpOyBtYXNrTGF5ZXI7IG1hc2tMYXllciA9IG1hc2tMYXllci0+bmV4dCgpKSB7CiAg
ICAgICAgIGlmIChtYXNrTGF5ZXItPmltYWdlKCkpIHsKLSAgICAgICAgICAgIEludFJlY3QgbWFz
a1JlY3Q7Ci0gICAgICAgICAgICBJbnRQb2ludCBwaGFzZTsKKyAgICAgICAgICAgIEZsb2F0UmVj
dCBtYXNrUmVjdDsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgcGhhc2U7CiAgICAgICAgICAgICBJ
bnRTaXplIHRpbGVTaXplOwogICAgICAgICAgICAgY2FsY3VsYXRlQmFja2dyb3VuZEltYWdlR2Vv
bWV0cnkobWFza0xheWVyLCBiYm94LCBtYXNrUmVjdCwgcGhhc2UsIHRpbGVTaXplKTsKICAgICAg
ICAgICAgIHJlc3VsdC51bml0ZShtYXNrUmVjdCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChyZXN1bHQpOwogfQogCi12
b2lkIFJlbmRlckJveDo6cGFpbnRGaWxsTGF5ZXJzKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBDb2xvciYgYywgY29uc3QgRmlsbExheWVyKiBmaWxsTGF5ZXIsIGNvbnN0IEludFJl
Y3QmIHJlY3QsCit2b2lkIFJlbmRlckJveDo6cGFpbnRGaWxsTGF5ZXJzKGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBDb2xvciYgYywgY29uc3QgRmlsbExheWVyKiBmaWxsTGF5ZXIs
IGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwKICAgICBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UgYmxl
ZWRBdm9pZGFuY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBSZW5kZXJPYmplY3QqIGJhY2tncm91
bmRPYmplY3QpCiB7CiAgICAgaWYgKCFmaWxsTGF5ZXIpCkBAIC05ODIsNyArMTAwNiw3IEBACiAg
ICAgcGFpbnRGaWxsTGF5ZXIocGFpbnRJbmZvLCBjLCBmaWxsTGF5ZXIsIHJlY3QsIGJsZWVkQXZv
aWRhbmNlLCBvcCwgYmFja2dyb3VuZE9iamVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyQm94OjpwYWlu
dEZpbGxMYXllcihjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgQ29sb3ImIGMsIGNv
bnN0IEZpbGxMYXllciogZmlsbExheWVyLCBjb25zdCBJbnRSZWN0JiByZWN0LAordm9pZCBSZW5k
ZXJCb3g6OnBhaW50RmlsbExheWVyKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBD
b2xvciYgYywgY29uc3QgRmlsbExheWVyKiBmaWxsTGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwKICAgICBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UgYmxlZWRBdm9pZGFuY2UsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wLCBSZW5kZXJPYmplY3QqIGJhY2tncm91bmRPYmplY3QpCiB7CiAgICAgcGFp
bnRGaWxsTGF5ZXJFeHRlbmRlZChwYWludEluZm8sIGMsIGZpbGxMYXllciwgcmVjdCwgYmxlZWRB
dm9pZGFuY2UsIDAsIEludFNpemUoKSwgb3AsIGJhY2tncm91bmRPYmplY3QpOwpAQCAtMTAyNCw3
ICsxMDQ4LDcgQEAKIAogYm9vbCBSZW5kZXJCb3g6OnJlcGFpbnRMYXllclJlY3RzRm9ySW1hZ2Uo
V3JhcHBlZEltYWdlUHRyIGltYWdlLCBjb25zdCBGaWxsTGF5ZXIqIGxheWVycywgYm9vbCBkcmF3
aW5nQmFja2dyb3VuZCkKIHsKLSAgICBJbnRSZWN0IHJlbmRlcmVyUmVjdDsKKyAgICBGbG9hdFJl
Y3QgcmVuZGVyZXJSZWN0OwogICAgIFJlbmRlckJveCogbGF5ZXJSZW5kZXJlciA9IDA7CiAKICAg
ICBmb3IgKGNvbnN0IEZpbGxMYXllciogY3VyTGF5ZXIgPSBsYXllcnM7IGN1ckxheWVyOyBjdXJM
YXllciA9IGN1ckxheWVyLT5uZXh0KCkpIHsKQEAgLTEwMzYsOCArMTA2MCw4IEBACiAgICAgICAg
ICAgICAgICAgaWYgKGRyYXdpbmdSb290QmFja2dyb3VuZCkgewogICAgICAgICAgICAgICAgICAg
ICBsYXllclJlbmRlcmVyID0gdmlldygpOwogCi0gICAgICAgICAgICAgICAgICAgIGludCBydzsK
LSAgICAgICAgICAgICAgICAgICAgaW50IHJoOworICAgICAgICAgICAgICAgICAgICBmbG9hdCAg
cnc7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IHJoOwogCiAgICAgICAgICAgICAgICAgICAg
IGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHRvUmVuZGVyVmlldyhsYXllclJlbmRlcmVyKS0+
ZnJhbWVWaWV3KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJ3ID0gZnJhbWVWaWV3LT5j
b250ZW50c1dpZHRoKCk7CkBAIC0xMDQ2LDIxICsxMDcwLDIxIEBACiAgICAgICAgICAgICAgICAg
ICAgICAgICBydyA9IGxheWVyUmVuZGVyZXItPndpZHRoKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICByaCA9IGxheWVyUmVuZGVyZXItPmhlaWdodCgpOwogICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyUmVjdCA9IEludFJlY3QoLWxheWVyUmVuZGVy
ZXItPm1hcmdpbkxlZnQoKSwKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXJSZWN0ID0gRmxv
YXRSZWN0KC1sYXllclJlbmRlcmVyLT5tYXJnaW5MZWZ0KCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAtbGF5ZXJSZW5kZXJlci0+bWFyZ2luVG9wKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXgobGF5ZXJSZW5kZXJlci0+d2lkdGgoKSArIGxheWVyUmVuZGVyZXItPm1hcmdpbkxlZnQo
KSArIGxheWVyUmVuZGVyZXItPm1hcmdpblJpZ2h0KCkgKyBsYXllclJlbmRlcmVyLT5ib3JkZXJM
ZWZ0KCkgKyBsYXllclJlbmRlcmVyLT5ib3JkZXJSaWdodCgpLCBydyksCiAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXgobGF5ZXJSZW5kZXJlci0+aGVpZ2h0KCkgKyBsYXllclJlbmRlcmVyLT5t
YXJnaW5Ub3AoKSArIGxheWVyUmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpICsgbGF5ZXJSZW5kZXJl
ci0+Ym9yZGVyVG9wKCkgKyBsYXllclJlbmRlcmVyLT5ib3JkZXJCb3R0b20oKSwgcmgpKTsKICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBsYXllclJlbmRlcmVy
ID0gdGhpczsKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXJSZWN0ID0gYm9yZGVyQm94UmVj
dCgpOworICAgICAgICAgICAgICAgICAgICByZW5kZXJlclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0
KGJvcmRlckJveFJlY3QoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBJbnRSZWN0IHJlcGFpbnRSZWN0OwotICAgICAgICAgICAgSW50UG9pbnQgcGhh
c2U7CisgICAgICAgICAgICBGbG9hdFJlY3QgcmVwYWludFJlY3Q7CisgICAgICAgICAgICBGbG9h
dFBvaW50IHBoYXNlOwogICAgICAgICAgICAgSW50U2l6ZSB0aWxlU2l6ZTsKICAgICAgICAgICAg
IGxheWVyUmVuZGVyZXItPmNhbGN1bGF0ZUJhY2tncm91bmRJbWFnZUdlb21ldHJ5KGN1ckxheWVy
LCByZW5kZXJlclJlY3QsIHJlcGFpbnRSZWN0LCBwaGFzZSwgdGlsZVNpemUpOwotICAgICAgICAg
ICAgbGF5ZXJSZW5kZXJlci0+cmVwYWludFJlY3RhbmdsZShyZXBhaW50UmVjdCk7CisgICAgICAg
ICAgICBsYXllclJlbmRlcmVyLT5yZXBhaW50UmVjdGFuZ2xlKGVuY2xvc2luZ0ludFJlY3QocmVw
YWludFJlY3QpKTsKICAgICAgICAgICAgIGlmIChyZXBhaW50UmVjdCA9PSByZW5kZXJlclJlY3Qp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTEwNzAsNyArMTA5
NCw3IEBACiAKICNpZiBQTEFURk9STShNQUMpCiAKLXZvaWQgUmVuZGVyQm94OjpwYWludEN1c3Rv
bUhpZ2hsaWdodChjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdHlwZSwgYm9vbCBiZWhpbmRUZXh0KQordm9pZCBSZW5kZXJCb3g6OnBhaW50Q3VzdG9tSGln
aGxpZ2h0KGNvbnN0IEZsb2F0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBBdG9taWNTdHJpbmcm
IHR5cGUsIGJvb2wgYmVoaW5kVGV4dCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFt
ZSgpOwogICAgIGlmICghZnJhbWUpCkBAIC0xMDkzLDcgKzExMTcsNyBAQAogCiAjZW5kaWYKIAot
Ym9vbCBSZW5kZXJCb3g6OnB1c2hDb250ZW50c0NsaXAoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkKK2Jvb2wgUmVuZGVyQm94OjpwdXNoQ29u
dGVudHNDbGlwKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCkKIHsKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VCbG9j
a0JhY2tncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSB8
fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU1hc2spCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTExMTQsMTIgKzExMzgsMTIgQEAKICAgICBJbnRSZWN0IGNsaXBSZWN0KGlzQ29udHJv
bENsaXAgPyBjb250cm9sQ2xpcFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQpIDogb3ZlcmZsb3dDbGlw
UmVjdChhY2N1bXVsYXRlZE9mZnNldCkpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7
CiAgICAgaWYgKHN0eWxlKCktPmhhc0JvcmRlclJhZGl1cygpKQotICAgICAgICBwYWludEluZm8u
Y29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKHN0eWxlKCktPmdldFJvdW5kZWRCb3JkZXJGb3Io
SW50UmVjdChhY2N1bXVsYXRlZE9mZnNldCwgc2l6ZSgpKSkpOworICAgICAgICBwYWludEluZm8u
Y29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKHN0eWxlKCktPmdldFJvdW5kZWRCb3JkZXJGb3Io
ZW5jbG9zaW5nSW50UmVjdChhY2N1bXVsYXRlZE9mZnNldCwgc2l6ZSgpKSkpOwogICAgIHBhaW50
SW5mby5jb250ZXh0LT5jbGlwKGNsaXBSZWN0KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBSZW5kZXJCb3g6OnBvcENvbnRlbnRzQ2xpcChQYWludEluZm8mIHBhaW50SW5mbywgUGFpbnRQ
aGFzZSBvcmlnaW5hbFBoYXNlLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpCit2
b2lkIFJlbmRlckJveDo6cG9wQ29udGVudHNDbGlwKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBQYWlu
dFBoYXNlIG9yaWdpbmFsUGhhc2UsIGNvbnN0IEZsb2F0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
KQogewogICAgIEFTU0VSVChoYXNDb250cm9sQ2xpcCgpIHx8IChoYXNPdmVyZmxvd0NsaXAoKSAm
JiAhbGF5ZXIoKS0+aXNTZWxmUGFpbnRpbmdMYXllcigpKSk7CiAKQEAgLTExMzIsMTIgKzExNTYs
MTIgQEAKICAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gb3JpZ2luYWxQaGFzZTsKIH0KIAotSW50
UmVjdCBSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3QoY29uc3QgSW50UG9pbnQmIGxvY2F0aW9u
LCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpCitJbnRSZWN0IFJlbmRl
ckJveDo6b3ZlcmZsb3dDbGlwUmVjdChjb25zdCBGbG9hdFBvaW50JiBsb2NhdGlvbiwgT3Zlcmxh
eVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KQogewogICAgIC8vIEZJWE1FOiBXaGVu
IG92ZXJmbG93LWNsaXAgKENTUzMpIGlzIGltcGxlbWVudGVkLCB3ZSdsbCBvYnRhaW4gdGhlIHBy
b3BlcnR5CiAgICAgLy8gaGVyZS4KLSAgICBJbnRSZWN0IGNsaXBSZWN0KGxvY2F0aW9uICsgSW50
U2l6ZShib3JkZXJMZWZ0KCksIGJvcmRlclRvcCgpKSwKLSAgICAgICAgc2l6ZSgpIC0gSW50U2l6
ZShib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpLCBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRv
bSgpKSk7CisgICAgSW50UmVjdCBjbGlwUmVjdChlbmNsb3NpbmdJbnRSZWN0KGxvY2F0aW9uICsg
SW50U2l6ZShib3JkZXJMZWZ0KCksIGJvcmRlclRvcCgpKSwKKyAgICAgICAgc2l6ZSgpIC0gSW50
U2l6ZShib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpLCBib3JkZXJUb3AoKSArIGJvcmRlckJv
dHRvbSgpKSkpOwogCiAgICAgLy8gU3VidHJhY3Qgb3V0IHNjcm9sbGJhcnMgaWYgd2UgaGF2ZSB0
aGVtLgogICAgIGlmIChsYXllcigpKQpAQCAtMTE0Niw5ICsxMTcwLDkgQEAKICAgICByZXR1cm4g
Y2xpcFJlY3Q7CiB9CiAKLUludFJlY3QgUmVuZGVyQm94OjpjbGlwUmVjdChjb25zdCBJbnRQb2lu
dCYgbG9jYXRpb24pCitJbnRSZWN0IFJlbmRlckJveDo6Y2xpcFJlY3QoY29uc3QgRmxvYXRQb2lu
dCYgbG9jYXRpb24pCiB7Ci0gICAgSW50UmVjdCBjbGlwUmVjdChsb2NhdGlvbiwgc2l6ZSgpKTsK
KyAgICBJbnRSZWN0IGNsaXBSZWN0KGVuY2xvc2luZ0ludFJlY3QobG9jYXRpb24sIHNpemUoKSkp
OwogICAgIGlmICghc3R5bGUoKS0+Y2xpcExlZnQoKS5pc0F1dG8oKSkgewogICAgICAgICBpbnQg
YyA9IHN0eWxlKCktPmNsaXBMZWZ0KCkuY2FsY1ZhbHVlKHdpZHRoKCkpOwogICAgICAgICBjbGlw
UmVjdC5tb3ZlKGMsIDApOwpAQCAtMTE3MCw3ICsxMTk0LDcgQEAKICAgICByZXR1cm4gY2xpcFJl
Y3Q7CiB9CiAKLWludCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNv
bnRlbnQoKSBjb25zdAorZmxvYXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsV2lk
dGhGb3JDb250ZW50KCkgY29uc3QKIHsKICAgICBSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5n
QmxvY2soKTsKICAgICBpZiAoc2hyaW5rVG9Bdm9pZEZsb2F0cygpKQpAQCAtMTE3OCw3ICsxMjAy
LDcgQEAKICAgICByZXR1cm4gY2ItPmF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpOwogfQogCi1pbnQg
UmVuZGVyQm94OjpwZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodCgpIGNv
bnN0CitmbG9hdCBSZW5kZXJCb3g6OnBlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2tMb2dpY2Fs
SGVpZ2h0KCkgY29uc3QKIHsKICAgICBSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2so
KTsKICAgICBSZW5kZXJTdHlsZSogY29udGFpbmluZ0Jsb2NrU3R5bGUgPSBjYi0+c3R5bGUoKTsK
QEAgLTEyMDQsMTEgKzEyMjgsMTEgQEAKICAgICBpZiAoUmVuZGVyVmlldyogdiA9IHZpZXcoKSkg
ewogICAgICAgICBpZiAodi0+bGF5b3V0U3RhdGVFbmFibGVkKCkgJiYgIXJlcGFpbnRDb250YWlu
ZXIpIHsKICAgICAgICAgICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHYtPmxheW91dFN0
YXRlKCk7Ci0gICAgICAgICAgICBJbnRTaXplIG9mZnNldCA9IGxheW91dFN0YXRlLT5tX3BhaW50
T2Zmc2V0OworICAgICAgICAgICAgRmxvYXRTaXplIG9mZnNldCA9IGxheW91dFN0YXRlLT5tX3Bh
aW50T2Zmc2V0OwogICAgICAgICAgICAgb2Zmc2V0LmV4cGFuZCh4KCksIHkoKSk7CiAgICAgICAg
ICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uICYmIGxheWVy
KCkpCiAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGxheWVyKCktPnJlbGF0aXZlUG9zaXRpb25P
ZmZzZXQoKTsKLSAgICAgICAgICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUob2Zmc2V0KTsKKyAgICAg
ICAgICAgIHRyYW5zZm9ybVN0YXRlLm1vdmUocm91bmRlZEludFNpemUob2Zmc2V0KSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjI3LDcgKzEyNTEsNyBAQAog
ICAgIH0gZWxzZQogICAgICAgICBmaXhlZCB8PSBpc0ZpeGVkUG9zOwogICAgIAotICAgIEludFNp
emUgY29udGFpbmVyT2Zmc2V0ID0gb2Zmc2V0RnJvbUNvbnRhaW5lcihvLCByb3VuZGVkSW50UG9p
bnQodHJhbnNmb3JtU3RhdGUubWFwcGVkUG9pbnQoKSkpOworICAgIEZsb2F0U2l6ZSBjb250YWlu
ZXJPZmZzZXQgPSBvZmZzZXRGcm9tQ29udGFpbmVyKG8sIHRyYW5zZm9ybVN0YXRlLm1hcHBlZFBv
aW50KCkpOwogICAgIAogICAgIGJvb2wgcHJlc2VydmUzRCA9IHVzZVRyYW5zZm9ybXMgJiYgKG8t
PnN0eWxlKCktPnByZXNlcnZlczNEKCkgfHwgc3R5bGUoKS0+cHJlc2VydmVzM0QoKSk7CiAgICAg
aWYgKHVzZVRyYW5zZm9ybXMgJiYgc2hvdWxkVXNlVHJhbnNmb3JtRnJvbUNvbnRhaW5lcihvKSkg
ewpAQCAtMTI0MCw3ICsxMjY0LDcgQEAKICAgICBpZiAoY29udGFpbmVyU2tpcHBlZCkgewogICAg
ICAgICAvLyBUaGVyZSBjYW4ndCBiZSBhIHRyYW5zZm9ybSBiZXR3ZWVuIHJlcGFpbnRDb250YWlu
ZXIgYW5kIG8sIGJlY2F1c2UgdHJhbnNmb3JtcyBjcmVhdGUgY29udGFpbmVycywgc28gaXQgc2hv
dWxkIGJlIHNhZmUKICAgICAgICAgLy8gdG8ganVzdCBzdWJ0cmFjdCB0aGUgZGVsdGEgYmV0d2Vl
biB0aGUgcmVwYWludENvbnRhaW5lciBhbmQgby4KLSAgICAgICAgSW50U2l6ZSBjb250YWluZXJP
ZmZzZXQgPSByZXBhaW50Q29udGFpbmVyLT5vZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIobyk7
CisgICAgICAgIEZsb2F0U2l6ZSBjb250YWluZXJPZmZzZXQgPSByZXBhaW50Q29udGFpbmVyLT5v
ZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIobyk7CiAgICAgICAgIHRyYW5zZm9ybVN0YXRlLm1v
dmUoLWNvbnRhaW5lck9mZnNldC53aWR0aCgpLCAtY29udGFpbmVyT2Zmc2V0LmhlaWdodCgpLCBw
cmVzZXJ2ZTNEID8gVHJhbnNmb3JtU3RhdGU6OkFjY3VtdWxhdGVUcmFuc2Zvcm0gOiBUcmFuc2Zv
cm1TdGF0ZTo6RmxhdHRlblRyYW5zZm9ybSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0x
MjY4LDcgKzEyOTIsNyBAQAogCiAgICAgby0+bWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQoZml4ZWQs
IHVzZVRyYW5zZm9ybXMsIHRyYW5zZm9ybVN0YXRlKTsKIAotICAgIEludFNpemUgY29udGFpbmVy
T2Zmc2V0ID0gb2Zmc2V0RnJvbUNvbnRhaW5lcihvLCBJbnRQb2ludCgpKTsKKyAgICBGbG9hdFNp
emUgY29udGFpbmVyT2Zmc2V0ID0gb2Zmc2V0RnJvbUNvbnRhaW5lcihvLCBJbnRQb2ludCgpKTsK
IAogICAgIGJvb2wgcHJlc2VydmUzRCA9IHVzZVRyYW5zZm9ybXMgJiYgKG8tPnN0eWxlKCktPnBy
ZXNlcnZlczNEKCkgfHwgc3R5bGUoKS0+cHJlc2VydmVzM0QoKSk7CiAgICAgaWYgKHVzZVRyYW5z
Zm9ybXMgJiYgc2hvdWxkVXNlVHJhbnNmb3JtRnJvbUNvbnRhaW5lcihvKSkgewpAQCAtMTI3OSwy
MSArMTMwMywyMSBAQAogICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5tb3ZlKC1jb250YWluZXJPZmZz
ZXQud2lkdGgoKSwgLWNvbnRhaW5lck9mZnNldC5oZWlnaHQoKSwgcHJlc2VydmUzRCA/IFRyYW5z
Zm9ybVN0YXRlOjpBY2N1bXVsYXRlVHJhbnNmb3JtIDogVHJhbnNmb3JtU3RhdGU6OkZsYXR0ZW5U
cmFuc2Zvcm0pOwogfQogCi1JbnRTaXplIFJlbmRlckJveDo6b2Zmc2V0RnJvbUNvbnRhaW5lcihS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK0Zsb2F0U2l6ZSBS
ZW5kZXJCb3g6Om9mZnNldEZyb21Db250YWluZXIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBBU1NFUlQobyA9PSBjb250YWluZXIoKSk7CiAK
LSAgICBJbnRTaXplIG9mZnNldDsgICAgCisgICAgRmxvYXRTaXplIG9mZnNldDsgICAgCiAgICAg
aWYgKGlzUmVsUG9zaXRpb25lZCgpKQogICAgICAgICBvZmZzZXQgKz0gcmVsYXRpdmVQb3NpdGlv
bk9mZnNldCgpOwogCiAgICAgaWYgKCFpc0lubGluZSgpIHx8IGlzUmVwbGFjZWQoKSkgewogICAg
ICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSAhPSBBYnNvbHV0ZVBvc2l0aW9uICYmIHN0eWxl
KCktPnBvc2l0aW9uKCkgIT0gRml4ZWRQb3NpdGlvbikgewogICAgICAgICAgICAgaWYgKG8tPmhh
c0NvbHVtbnMoKSkgewotICAgICAgICAgICAgICAgIEludFJlY3QgY29sdW1uUmVjdChmcmFtZVJl
Y3QoKSk7CisgICAgICAgICAgICAgICAgRmxvYXRSZWN0IGNvbHVtblJlY3QoZnJhbWVSZWN0KCkp
OwogICAgICAgICAgICAgICAgIHRvUmVuZGVyQmxvY2sobyktPmZsaXBGb3JXcml0aW5nTW9kZUlu
Y2x1ZGluZ0NvbHVtbnMoY29sdW1uUmVjdCk7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IElu
dFNpemUoY29sdW1uUmVjdC5sb2NhdGlvbigpLngoKSwgY29sdW1uUmVjdC5sb2NhdGlvbigpLnko
KSk7Ci0gICAgICAgICAgICAgICAgY29sdW1uUmVjdC5tb3ZlQnkocG9pbnQpOworICAgICAgICAg
ICAgICAgIG9mZnNldCArPSBGbG9hdFNpemUoY29sdW1uUmVjdC5sb2NhdGlvbigpLngoKSwgY29s
dW1uUmVjdC5sb2NhdGlvbigpLnkoKSk7CisgICAgICAgICAgICAgICAgY29sdW1uUmVjdC5tb3Zl
Qnkocm91bmRlZEludFBvaW50KHBvaW50KSk7CiAgICAgICAgICAgICAgICAgby0+YWRqdXN0Rm9y
Q29sdW1ucyhvZmZzZXQsIGNvbHVtblJlY3QubG9jYXRpb24oKSk7CiAgICAgICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbG9jYXRpb25PZmZzZXRJbmNsdWRpbmdGbGlw
cGluZygpOwpAQCAtMTM2NywyNCArMTM5MSwyNyBAQAogICAgIH0KIH0KIAotSW50UmVjdCBSZW5k
ZXJCb3g6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0
KiByZXBhaW50Q29udGFpbmVyKQorRmxvYXRSZWN0IFJlbmRlckJveDo6Y2xpcHBlZE92ZXJmbG93
UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpCiB7
CiAgICAgaWYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFICYmICFlbmNsb3NpbmdM
YXllcigpLT5oYXNWaXNpYmxlQ29udGVudCgpKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwog
Ci0gICAgSW50UmVjdCByID0gdmlzdWFsT3ZlcmZsb3dSZWN0KCk7CisgICAgRmxvYXRSZWN0IHIg
PSB2aXN1YWxPdmVyZmxvd1JlY3QoKTsKIAogICAgIFJlbmRlclZpZXcqIHYgPSB2aWV3KCk7CiAg
ICAgaWYgKHYpIHsKICAgICAgICAgLy8gRklYTUU6IGxheW91dERlbHRhIG5lZWRzIHRvIGJlIGFw
cGxpZWQgaW4gcGFydHMgYmVmb3JlL2FmdGVyIHRyYW5zZm9ybXMgYW5kCiAgICAgICAgIC8vIHJl
cGFpbnQgY29udGFpbmVycy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzMzA4Ci0gICAgICAgIHIubW92ZSh2LT5sYXlvdXREZWx0YSgpKTsKKyAgICAgICAgci5tb3Zl
KHJvdW5kZWRJbnRTaXplKHYtPmxheW91dERlbHRhKCkpKTsKICAgICB9CiAgICAgCiAgICAgaWYg
KHN0eWxlKCkpIHsKLSAgICAgICAgaWYgKHN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkKKyAgICAg
ICAgaWYgKHN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkgewogICAgICAgICAgICAgLy8gVGhlIHRo
ZW1lIG1heSB3aXNoIHRvIGluZmxhdGUgdGhlIHJlY3QgdXNlZCB3aGVuIHJlcGFpbnRpbmcuCi0g
ICAgICAgICAgICB0aGVtZSgpLT5hZGp1c3RSZXBhaW50UmVjdCh0aGlzLCByKTsKKyAgICAgICAg
ICAgIEludFJlY3QgZXhwYW5kZWRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChyKTsKKyAgICAgICAg
ICAgIHRoZW1lKCktPmFkanVzdFJlcGFpbnRSZWN0KHRoaXMsIGV4cGFuZGVkUmVjdCk7CisgICAg
ICAgICAgICByLnVuaXRlKGV4cGFuZGVkUmVjdCk7CisgICAgICAgIH0KIAogICAgICAgICAvLyBX
ZSBoYXZlIHRvIHVzZSBtYXhpbWFsT3V0bGluZVNpemUoKSBiZWNhdXNlIGEgY2hpbGQgbWlnaHQg
aGF2ZSBhbiBvdXRsaW5lCiAgICAgICAgIC8vIHRoYXQgcHJvamVjdHMgb3V0c2lkZSBvZiBvdXIg
b3ZlcmZsb3dSZWN0LgpAQCAtMTM5OCw3ICsxNDI1LDcgQEAKICAgICByZXR1cm4gcjsKIH0KIAot
dm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVjdCwgYm9vbCBmaXhlZCkKK3ZvaWQgUmVu
ZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIsIEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBmaXhlZCkKIHsKICAgICAvLyBUaGUg
cmVjdCB3ZSBjb21wdXRlIGF0IGVhY2ggc3RlcCBpcyBzaGlmdGVkIGJ5IG91ciB4L3kgb2Zmc2V0
IGluIHRoZSBwYXJlbnQgY29udGFpbmVyJ3MgY29vcmRpbmF0ZSBzcGFjZS4KICAgICAvLyBPbmx5
IHdoZW4gd2UgY3Jvc3MgYSB3cml0aW5nIG1vZGUgYm91bmRhcnkgd2lsbCB3ZSBoYXZlIHRvIHBv
c3NpYmx5IGZsaXBGb3JXcml0aW5nTW9kZSAodG8gY29udmVydCBpbnRvIGEgbW9yZSBhcHByb3By
aWF0ZQpAQCAtMTQxOSw4ICsxNDQ2LDcgQEAKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5wb3Np
dGlvbigpID09IFJlbGF0aXZlUG9zaXRpb24gJiYgbGF5ZXIoKSkKICAgICAgICAgICAgICAgICBy
ZWN0Lm1vdmUobGF5ZXIoKS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpKTsKIAotICAgICAgICAg
ICAgcmVjdC5tb3ZlQnkobG9jYXRpb24oKSk7Ci0gICAgICAgICAgICByZWN0Lm1vdmUobGF5b3V0
U3RhdGUtPm1fcGFpbnRPZmZzZXQpOworICAgICAgICAgICAgcmVjdC5tb3ZlQnkocm91bmRlZElu
dFBvaW50KGxvY2F0aW9uKCkgKyBsYXlvdXRTdGF0ZS0+bV9wYWludE9mZnNldCkpOwogICAgICAg
ICAgICAgaWYgKGxheW91dFN0YXRlLT5tX2NsaXBwZWQpCiAgICAgICAgICAgICAgICAgcmVjdC5p
bnRlcnNlY3QobGF5b3V0U3RhdGUtPm1fY2xpcFJlY3QpOwogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMTQ0Myw3ICsxNDY5LDcgQEAKIAogICAgIGlmIChpc1dyaXRpbmdNb2RlUm9vdCgpICYmICFp
c1Bvc2l0aW9uZWQoKSkKICAgICAgICAgZmxpcEZvcldyaXRpbmdNb2RlKHJlY3QpOwotICAgIElu
dFBvaW50IHRvcExlZnQgPSByZWN0LmxvY2F0aW9uKCk7CisgICAgRmxvYXRQb2ludCB0b3BMZWZ0
ID0gcmVjdC5sb2NhdGlvbigpOwogICAgIHRvcExlZnQubW92ZSh4KCksIHkoKSk7CiAKICAgICBF
UG9zaXRpb24gcG9zaXRpb24gPSBzdHlsZSgpLT5wb3NpdGlvbigpOwpAQCAtMTQ3MSw3ICsxNDk3
LDcgQEAKICAgICBpZiAoby0+aXNCbG9ja0Zsb3coKSAmJiBwb3NpdGlvbiAhPSBBYnNvbHV0ZVBv
c2l0aW9uICYmIHBvc2l0aW9uICE9IEZpeGVkUG9zaXRpb24pIHsKICAgICAgICAgUmVuZGVyQmxv
Y2sqIGNiID0gdG9SZW5kZXJCbG9jayhvKTsKICAgICAgICAgaWYgKGNiLT5oYXNDb2x1bW5zKCkp
IHsKLSAgICAgICAgICAgIEludFJlY3QgcmVwYWludFJlY3QodG9wTGVmdCwgcmVjdC5zaXplKCkp
OworICAgICAgICAgICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0KHRvcExlZnQsIHJlY3Quc2l6ZSgp
KTsKICAgICAgICAgICAgIGNiLT5hZGp1c3RSZWN0Rm9yQ29sdW1ucyhyZXBhaW50UmVjdCk7CiAg
ICAgICAgICAgICB0b3BMZWZ0ID0gcmVwYWludFJlY3QubG9jYXRpb24oKTsKICAgICAgICAgICAg
IHJlY3QgPSByZXBhaW50UmVjdDsKQEAgLTE0ODgsOCArMTUxNCw4IEBACiAgICAgICAgIC8vIGFu
eXdheSBpZiBpdHMgc2l6ZSBkb2VzIGNoYW5nZS4KICAgICAgICAgdG9wTGVmdCAtPSBjb250YWlu
ZXJCb3gtPmxheWVyKCktPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOyAvLyBGb3Igb3ZlcmZsb3c6
YXV0by9zY3JvbGwvaGlkZGVuLgogCi0gICAgICAgIEludFJlY3QgcmVwYWludFJlY3QodG9wTGVm
dCwgcmVjdC5zaXplKCkpOwotICAgICAgICBJbnRSZWN0IGJveFJlY3QoSW50UG9pbnQoKSwgY29u
dGFpbmVyQm94LT5sYXllcigpLT5zaXplKCkpOworICAgICAgICBGbG9hdFJlY3QgcmVwYWludFJl
Y3QodG9wTGVmdCwgcmVjdC5zaXplKCkpOworICAgICAgICBGbG9hdFJlY3QgYm94UmVjdChGbG9h
dFBvaW50KCksIGNvbnRhaW5lckJveC0+bGF5ZXIoKS0+c2l6ZSgpKTsKICAgICAgICAgcmVjdCA9
IGludGVyc2VjdGlvbihyZXBhaW50UmVjdCwgYm94UmVjdCk7CiAgICAgICAgIGlmIChyZWN0Lmlz
RW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE0OTgsNyArMTUyNCw3IEBACiAKICAg
ICBpZiAoY29udGFpbmVyU2tpcHBlZCkgewogICAgICAgICAvLyBJZiB0aGUgcmVwYWludENvbnRh
aW5lciBpcyBiZWxvdyBvLCB0aGVuIHdlIG5lZWQgdG8gbWFwIHRoZSByZWN0IGludG8gcmVwYWlu
dENvbnRhaW5lcidzIGNvb3JkaW5hdGVzLgotICAgICAgICBJbnRTaXplIGNvbnRhaW5lck9mZnNl
dCA9IHJlcGFpbnRDb250YWluZXItPm9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihvKTsKKyAg
ICAgICAgSW50U2l6ZSBjb250YWluZXJPZmZzZXQgPSByb3VuZGVkSW50U2l6ZShyZXBhaW50Q29u
dGFpbmVyLT5vZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIobykpOwogICAgICAgICByZWN0Lm1v
dmUoLWNvbnRhaW5lck9mZnNldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNTA2LDEy
ICsxNTMyLDEyIEBACiAgICAgby0+Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWlu
ZXIsIHJlY3QsIGZpeGVkKTsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OnJlcGFpbnREdXJpbmdMYXlv
dXRJZk1vdmVkKGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIFJlbmRlckJveDo6cmVwYWludER1
cmluZ0xheW91dElmTW92ZWQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGludCBuZXdY
ID0geCgpOwotICAgIGludCBuZXdZID0geSgpOwotICAgIGludCBuZXdXaWR0aCA9IHdpZHRoKCk7
Ci0gICAgaW50IG5ld0hlaWdodCA9IGhlaWdodCgpOworICAgIGZsb2F0IG5ld1ggPSB4KCk7Cisg
ICAgZmxvYXQgbmV3WSA9IHkoKTsKKyAgICBmbG9hdCBuZXdXaWR0aCA9IHdpZHRoKCk7CisgICAg
ZmxvYXQgbmV3SGVpZ2h0ID0gaGVpZ2h0KCk7CiAgICAgaWYgKHJlY3QueCgpICE9IG5ld1ggfHwg
cmVjdC55KCkgIT0gbmV3WSkgewogICAgICAgICAvLyBUaGUgY2hpbGQgbW92ZWQuICBJbnZhbGlk
YXRlIHRoZSBvYmplY3QncyBvbGQgYW5kIG5ldyBwb3NpdGlvbnMuICBXZSBoYXZlIHRvIGRvIHRo
aXMKICAgICAgICAgLy8gc2luY2UgdGhlIG9iamVjdCBtYXkgbm90IGhhdmUgZ290dGVuIGEgbGF5
b3V0LgpAQCAtMTU1Niw5ICsxNTgyLDkgQEAKICAgICBMZW5ndGggbG9naWNhbFdpZHRoTGVuZ3Ro
ID0gKHRyZWF0QXNSZXBsYWNlZCkgPyBMZW5ndGgoY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRo
KCksIEZpeGVkKSA6IHN0eWxlKCktPmxvZ2ljYWxXaWR0aCgpOwogCiAgICAgUmVuZGVyQmxvY2sq
IGNiID0gY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaW50IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCA9
IG1heCgwLCBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50KCkpOworICAgIGZs
b2F0IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCA9IG1heCgwLjBmLCBjb250YWluaW5nQmxvY2tMb2dp
Y2FsV2lkdGhGb3JDb250ZW50KCkpOwogICAgIGJvb2wgaGFzUGVycGVuZGljdWxhckNvbnRhaW5p
bmdCbG9jayA9IGNiLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCk7Ci0gICAgaW50IGNvbnRhaW5lcldpZHRoSW5JbmxpbmVEaXJlY3Rpb24gPSBj
b250YWluZXJMb2dpY2FsV2lkdGg7CisgICAgZmxvYXQgY29udGFpbmVyV2lkdGhJbklubGluZURp
cmVjdGlvbiA9IGNvbnRhaW5lckxvZ2ljYWxXaWR0aDsKICAgICBpZiAoaGFzUGVycGVuZGljdWxh
ckNvbnRhaW5pbmdCbG9jaykKICAgICAgICAgY29udGFpbmVyV2lkdGhJbklubGluZURpcmVjdGlv
biA9IHBlcnBlbmRpY3VsYXJDb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0KCk7CiAgICAgCkBA
IC0xNTY3LDcgKzE1OTMsNyBAQAogICAgICAgICBzZXRNYXJnaW5TdGFydChzdHlsZSgpLT5tYXJn
aW5TdGFydCgpLmNhbGNNaW5WYWx1ZShjb250YWluZXJMb2dpY2FsV2lkdGgpKTsKICAgICAgICAg
c2V0TWFyZ2luRW5kKHN0eWxlKCktPm1hcmdpbkVuZCgpLmNhbGNNaW5WYWx1ZShjb250YWluZXJM
b2dpY2FsV2lkdGgpKTsKICAgICAgICAgaWYgKHRyZWF0QXNSZXBsYWNlZCkKLSAgICAgICAgICAg
IHNldExvZ2ljYWxXaWR0aChtYXgobG9naWNhbFdpZHRoTGVuZ3RoLnZhbHVlKCkgKyBib3JkZXJB
bmRQYWRkaW5nTG9naWNhbFdpZHRoKCksIG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpKSk7Cisg
ICAgICAgICAgICBzZXRMb2dpY2FsV2lkdGgobWF4KGxvZ2ljYWxXaWR0aExlbmd0aC5jYWxjRmxv
YXRWYWx1ZSgwKSArIGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKSwgbWluUHJlZmVycmVk
TG9naWNhbFdpZHRoKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTU4MCw3ICsx
NjA2LDcgQEAKIAogICAgICAgICAvLyBDYWxjdWxhdGUgTWF4TG9naWNhbFdpZHRoCiAgICAgICAg
IGlmICghc3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCkuaXNVbmRlZmluZWQoKSkgewotICAgICAg
ICAgICAgaW50IG1heExvZ2ljYWxXaWR0aCA9IGNvbXB1dGVMb2dpY2FsV2lkdGhVc2luZyhNYXhM
b2dpY2FsV2lkdGgsIGNvbnRhaW5lcldpZHRoSW5JbmxpbmVEaXJlY3Rpb24pOworICAgICAgICAg
ICAgZmxvYXQgbWF4TG9naWNhbFdpZHRoID0gY29tcHV0ZUxvZ2ljYWxXaWR0aFVzaW5nKE1heExv
Z2ljYWxXaWR0aCwgY29udGFpbmVyV2lkdGhJbklubGluZURpcmVjdGlvbik7CiAgICAgICAgICAg
ICBpZiAobG9naWNhbFdpZHRoKCkgPiBtYXhMb2dpY2FsV2lkdGgpIHsKICAgICAgICAgICAgICAg
ICBzZXRMb2dpY2FsV2lkdGgobWF4TG9naWNhbFdpZHRoKTsKICAgICAgICAgICAgICAgICBsb2dp
Y2FsV2lkdGhMZW5ndGggPSBzdHlsZSgpLT5sb2dpY2FsTWF4V2lkdGgoKTsKQEAgLTE1ODgsNyAr
MTYxNCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAvLyBDYWxjdWxhdGUgTWluTG9naWNhbFdp
ZHRoCi0gICAgICAgIGludCBtaW5Mb2dpY2FsV2lkdGggPSBjb21wdXRlTG9naWNhbFdpZHRoVXNp
bmcoTWluTG9naWNhbFdpZHRoLCBjb250YWluZXJXaWR0aEluSW5saW5lRGlyZWN0aW9uKTsKKyAg
ICAgICAgZmxvYXQgbWluTG9naWNhbFdpZHRoID0gY29tcHV0ZUxvZ2ljYWxXaWR0aFVzaW5nKE1p
bkxvZ2ljYWxXaWR0aCwgY29udGFpbmVyV2lkdGhJbklubGluZURpcmVjdGlvbik7CiAgICAgICAg
IGlmIChsb2dpY2FsV2lkdGgoKSA8IG1pbkxvZ2ljYWxXaWR0aCkgewogICAgICAgICAgICAgc2V0
TG9naWNhbFdpZHRoKG1pbkxvZ2ljYWxXaWR0aCk7CiAgICAgICAgICAgICBsb2dpY2FsV2lkdGhM
ZW5ndGggPSBzdHlsZSgpLT5sb2dpY2FsTWluV2lkdGgoKTsKQEAgLTE2MTMsOSArMTYzOSw5IEBA
CiAgICAgICAgIGNiLT5zZXRNYXJnaW5FbmRGb3JDaGlsZCh0aGlzLCBjb250YWluZXJMb2dpY2Fs
V2lkdGggLSBsb2dpY2FsV2lkdGgoKSAtIGNiLT5tYXJnaW5TdGFydEZvckNoaWxkKHRoaXMpKTsK
IH0KIAotaW50IFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aFVzaW5nKExvZ2ljYWxXaWR0
aFR5cGUgd2lkdGhUeXBlLCBpbnQgYXZhaWxhYmxlTG9naWNhbFdpZHRoKQorZmxvYXQgUmVuZGVy
Qm94Ojpjb21wdXRlTG9naWNhbFdpZHRoVXNpbmcoTG9naWNhbFdpZHRoVHlwZSB3aWR0aFR5cGUs
IGZsb2F0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCkKIHsKLSAgICBpbnQgbG9naWNhbFdpZHRoUmVz
dWx0ID0gbG9naWNhbFdpZHRoKCk7CisgICAgZmxvYXQgbG9naWNhbFdpZHRoUmVzdWx0ID0gbG9n
aWNhbFdpZHRoKCk7CiAgICAgTGVuZ3RoIGxvZ2ljYWxXaWR0aDsKICAgICBpZiAod2lkdGhUeXBl
ID09IExvZ2ljYWxXaWR0aCkKICAgICAgICAgbG9naWNhbFdpZHRoID0gc3R5bGUoKS0+bG9naWNh
bFdpZHRoKCk7CkBAIC0xNjI1LDggKzE2NTEsOCBAQAogICAgICAgICBsb2dpY2FsV2lkdGggPSBz
dHlsZSgpLT5sb2dpY2FsTWF4V2lkdGgoKTsKIAogICAgIGlmIChsb2dpY2FsV2lkdGguaXNJbnRy
aW5zaWNPckF1dG8oKSkgewotICAgICAgICBpbnQgbWFyZ2luU3RhcnQgPSBzdHlsZSgpLT5tYXJn
aW5TdGFydCgpLmNhbGNNaW5WYWx1ZShhdmFpbGFibGVMb2dpY2FsV2lkdGgpOwotICAgICAgICBp
bnQgbWFyZ2luRW5kID0gc3R5bGUoKS0+bWFyZ2luRW5kKCkuY2FsY01pblZhbHVlKGF2YWlsYWJs
ZUxvZ2ljYWxXaWR0aCk7CisgICAgICAgIGZsb2F0IG1hcmdpblN0YXJ0ID0gc3R5bGUoKS0+bWFy
Z2luU3RhcnQoKS5jYWxjTWluVmFsdWUoYXZhaWxhYmxlTG9naWNhbFdpZHRoKTsKKyAgICAgICAg
ZmxvYXQgbWFyZ2luRW5kID0gc3R5bGUoKS0+bWFyZ2luRW5kKCkuY2FsY01pblZhbHVlKGF2YWls
YWJsZUxvZ2ljYWxXaWR0aCk7CiAgICAgICAgIGlmIChhdmFpbGFibGVMb2dpY2FsV2lkdGgpCiAg
ICAgICAgICAgICBsb2dpY2FsV2lkdGhSZXN1bHQgPSBhdmFpbGFibGVMb2dpY2FsV2lkdGggLSBt
YXJnaW5TdGFydCAtIG1hcmdpbkVuZDsKIApAQCAtMTY4Myw3ICsxNzA5LDcgQEAKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyQm94Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uTWFy
Z2lucyhSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrLCBpbnQgY29udGFpbmVyV2lkdGgsIGlu
dCBjaGlsZFdpZHRoKQordm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25NYXJn
aW5zKFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2ssIGZsb2F0IGNvbnRhaW5lcldpZHRoLCBm
bG9hdCBjaGlsZFdpZHRoKQogewogICAgIGNvbnN0IFJlbmRlclN0eWxlKiBjb250YWluaW5nQmxv
Y2tTdHlsZSA9IGNvbnRhaW5pbmdCbG9jay0+c3R5bGUoKTsKICAgICBMZW5ndGggbWFyZ2luU3Rh
cnRMZW5ndGggPSBzdHlsZSgpLT5tYXJnaW5TdGFydFVzaW5nKGNvbnRhaW5pbmdCbG9ja1N0eWxl
KTsKQEAgLTE2OTIsNyArMTcxOCw3IEBACiAgICAgLy8gQ2FzZSBPbmU6IFRoZSBvYmplY3QgaXMg
YmVpbmcgY2VudGVyZWQgaW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBhdmFpbGFibGUgbG9naWNh
bCB3aWR0aC4KICAgICBpZiAoKG1hcmdpblN0YXJ0TGVuZ3RoLmlzQXV0bygpICYmIG1hcmdpbkVu
ZExlbmd0aC5pc0F1dG8oKSAmJiBjaGlsZFdpZHRoIDwgY29udGFpbmVyV2lkdGgpCiAgICAgICAg
IHx8ICghbWFyZ2luU3RhcnRMZW5ndGguaXNBdXRvKCkgJiYgIW1hcmdpbkVuZExlbmd0aC5pc0F1
dG8oKSAmJiBjb250YWluaW5nQmxvY2stPnN0eWxlKCktPnRleHRBbGlnbigpID09IFdFQktJVF9D
RU5URVIpKSB7Ci0gICAgICAgIGNvbnRhaW5pbmdCbG9jay0+c2V0TWFyZ2luU3RhcnRGb3JDaGls
ZCh0aGlzLCBtYXgoMCwgKGNvbnRhaW5lcldpZHRoIC0gY2hpbGRXaWR0aCkgLyAyKSk7CisgICAg
ICAgIGNvbnRhaW5pbmdCbG9jay0+c2V0TWFyZ2luU3RhcnRGb3JDaGlsZCh0aGlzLCBtYXgoMC4w
ZiwgKGNvbnRhaW5lcldpZHRoIC0gY2hpbGRXaWR0aCkgLyAyKSk7CiAgICAgICAgIGNvbnRhaW5p
bmdCbG9jay0+c2V0TWFyZ2luRW5kRm9yQ2hpbGQodGhpcywgY29udGFpbmVyV2lkdGggLSBjaGls
ZFdpZHRoIC0gY29udGFpbmluZ0Jsb2NrLT5tYXJnaW5TdGFydEZvckNoaWxkKHRoaXMpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0gCkBAIC0xNzc0LDEzICsxODAwLDEzIEBACiAgICAgICAgICAg
ICBjaGVja01pbk1heEhlaWdodCA9IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IGhl
aWdodFJlc3VsdDsKKyAgICAgICAgZmxvYXQgaGVpZ2h0UmVzdWx0OwogICAgICAgICBpZiAoY2hl
Y2tNaW5NYXhIZWlnaHQpIHsKICAgICAgICAgICAgIGhlaWdodFJlc3VsdCA9IGNvbXB1dGVMb2dp
Y2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgICAgIGlm
IChoZWlnaHRSZXN1bHQgPT0gLTEpCiAgICAgICAgICAgICAgICAgaGVpZ2h0UmVzdWx0ID0gbG9n
aWNhbEhlaWdodCgpOwotICAgICAgICAgICAgaW50IG1pbkggPSBjb21wdXRlTG9naWNhbEhlaWdo
dFVzaW5nKHN0eWxlKCktPmxvZ2ljYWxNaW5IZWlnaHQoKSk7IC8vIExlYXZlIGFzIC0xIGlmIHVu
c2V0LgotICAgICAgICAgICAgaW50IG1heEggPSBzdHlsZSgpLT5sb2dpY2FsTWF4SGVpZ2h0KCku
aXNVbmRlZmluZWQoKSA/IGhlaWdodFJlc3VsdCA6IGNvbXB1dGVMb2dpY2FsSGVpZ2h0VXNpbmco
c3R5bGUoKS0+bG9naWNhbE1heEhlaWdodCgpKTsKKyAgICAgICAgICAgIGZsb2F0IG1pbkggPSBj
b21wdXRlTG9naWNhbEhlaWdodFVzaW5nKHN0eWxlKCktPmxvZ2ljYWxNaW5IZWlnaHQoKSk7IC8v
IExlYXZlIGFzIC0xIGlmIHVuc2V0LgorICAgICAgICAgICAgZmxvYXQgbWF4SCA9IHN0eWxlKCkt
PmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1VuZGVmaW5lZCgpID8gaGVpZ2h0UmVzdWx0IDogY29tcHV0
ZUxvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZSgpLT5sb2dpY2FsTWF4SGVpZ2h0KCkpOwogICAgICAg
ICAgICAgaWYgKG1heEggPT0gLTEpCiAgICAgICAgICAgICAgICAgbWF4SCA9IGhlaWdodFJlc3Vs
dDsKICAgICAgICAgICAgIGhlaWdodFJlc3VsdCA9IG1pbihtYXhILCBoZWlnaHRSZXN1bHQpOwpA
QCAtMTgwOCw4ICsxODM0LDggQEAKICAgICBpZiAoc3RyZXRjaGVzVG9WaWV3cG9ydCgpIHx8IHBh
Z2luYXRlZENvbnRlbnROZWVkc0Jhc2VIZWlnaHQpIHsKICAgICAgICAgLy8gRklYTUU6IEZpbmlz
aCBhY2NvdW50aW5nIGZvciBibG9jayBmbG93IGhlcmUuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjYwMwotICAgICAgICBpbnQgbWFyZ2lucyA9
IGNvbGxhcHNlZE1hcmdpbkJlZm9yZSgpICsgY29sbGFwc2VkTWFyZ2luQWZ0ZXIoKTsKLSAgICAg
ICAgaW50IHZpc0hlaWdodDsKKyAgICAgICAgZmxvYXQgbWFyZ2lucyA9IGNvbGxhcHNlZE1hcmdp
bkJlZm9yZSgpICsgY29sbGFwc2VkTWFyZ2luQWZ0ZXIoKTsKKyAgICAgICAgZmxvYXQgdmlzSGVp
Z2h0OwogICAgICAgICBpZiAoZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSkKICAgICAgICAgICAgIHZp
c0hlaWdodCA9IHN0YXRpY19jYXN0PGludD4odmlldygpLT5wYWdlTG9naWNhbEhlaWdodCgpKTsK
ICAgICAgICAgZWxzZSAgewpAQCAtMTgyNywxMiArMTg1MywxMiBAQAogICAgIH0KIH0KIAotaW50
IFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHRVc2luZyhjb25zdCBMZW5ndGgmIGgpCitm
bG9hdCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0VXNpbmcoY29uc3QgTGVuZ3RoJiBo
KQogewotICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gLTE7CisgICAgZmxvYXQgbG9naWNhbEhlaWdo
dCA9IC0xOwogICAgIGlmICghaC5pc0F1dG8oKSkgewogICAgICAgICBpZiAoaC5pc0ZpeGVkKCkp
Ci0gICAgICAgICAgICBsb2dpY2FsSGVpZ2h0ID0gaC52YWx1ZSgpOworICAgICAgICAgICAgbG9n
aWNhbEhlaWdodCA9IGguY2FsY0Zsb2F0VmFsdWUoMCk7CiAgICAgICAgIGVsc2UgaWYgKGguaXNQ
ZXJjZW50KCkpCiAgICAgICAgICAgICBsb2dpY2FsSGVpZ2h0ID0gY29tcHV0ZVBlcmNlbnRhZ2VM
b2dpY2FsSGVpZ2h0KGgpOwogICAgICAgICBpZiAobG9naWNhbEhlaWdodCAhPSAtMSkgewpAQCAt
MTg0Myw3ICsxODY5LDcgQEAKICAgICByZXR1cm4gbG9naWNhbEhlaWdodDsKIH0KIAotaW50IFJl
bmRlckJveDo6Y29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0KGNvbnN0IExlbmd0aCYgaGVp
Z2h0KQorZmxvYXQgUmVuZGVyQm94Ojpjb21wdXRlUGVyY2VudGFnZUxvZ2ljYWxIZWlnaHQoY29u
c3QgTGVuZ3RoJiBoZWlnaHQpCiB7CiAgICAgaW50IHJlc3VsdCA9IC0xOwogICAgIApAQCAtMTky
NiwxOSArMTk1MiwxOSBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWludCBSZW5kZXJCb3g6
OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCkgY29uc3QK
K2Zsb2F0IFJlbmRlckJveDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVk
ZU1heFdpZHRoKSBjb25zdAogewogICAgIHJldHVybiBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lk
dGhSZXNwZWN0aW5nTWluTWF4V2lkdGgoY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoVXNpbmco
c3R5bGUoKS0+bG9naWNhbFdpZHRoKCkpLCBpbmNsdWRlTWF4V2lkdGgpOwogfQogCi1pbnQgUmVu
ZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGhSZXNwZWN0aW5nTWluTWF4V2lkdGgo
aW50IGxvZ2ljYWxXaWR0aCwgYm9vbCBpbmNsdWRlTWF4V2lkdGgpIGNvbnN0CitmbG9hdCBSZW5k
ZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFJlc3BlY3RpbmdNaW5NYXhXaWR0aChm
bG9hdCBsb2dpY2FsV2lkdGgsIGJvb2wgaW5jbHVkZU1heFdpZHRoKSBjb25zdAogewotICAgIGlu
dCBtaW5Mb2dpY2FsV2lkdGggPSBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGhVc2luZyhzdHls
ZSgpLT5sb2dpY2FsTWluV2lkdGgoKSk7Ci0gICAgaW50IG1heExvZ2ljYWxXaWR0aCA9ICFpbmNs
dWRlTWF4V2lkdGggfHwgc3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCkuaXNVbmRlZmluZWQoKSA/
IGxvZ2ljYWxXaWR0aCA6IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKHN0eWxlKCkt
PmxvZ2ljYWxNYXhXaWR0aCgpKTsKKyAgICBmbG9hdCBtaW5Mb2dpY2FsV2lkdGggPSBjb21wdXRl
UmVwbGFjZWRMb2dpY2FsV2lkdGhVc2luZyhzdHlsZSgpLT5sb2dpY2FsTWluV2lkdGgoKSk7Cisg
ICAgZmxvYXQgbWF4TG9naWNhbFdpZHRoID0gIWluY2x1ZGVNYXhXaWR0aCB8fCBzdHlsZSgpLT5s
b2dpY2FsTWF4V2lkdGgoKS5pc1VuZGVmaW5lZCgpID8gbG9naWNhbFdpZHRoIDogY29tcHV0ZVJl
cGxhY2VkTG9naWNhbFdpZHRoVXNpbmcoc3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCkpOwogICAg
IHJldHVybiBtYXgobWluTG9naWNhbFdpZHRoLCBtaW4obG9naWNhbFdpZHRoLCBtYXhMb2dpY2Fs
V2lkdGgpKTsKIH0KIAotaW50IFJlbmRlckJveDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRo
VXNpbmcoTGVuZ3RoIGxvZ2ljYWxXaWR0aCkgY29uc3QKK2Zsb2F0IFJlbmRlckJveDo6Y29tcHV0
ZVJlcGxhY2VkTG9naWNhbFdpZHRoVXNpbmcoTGVuZ3RoIGxvZ2ljYWxXaWR0aCkgY29uc3QKIHsK
ICAgICBzd2l0Y2ggKGxvZ2ljYWxXaWR0aC50eXBlKCkpIHsKICAgICAgICAgY2FzZSBGaXhlZDoK
QEAgLTE5NTcsMTkgKzE5ODMsMTkgQEAKICAgICAgfQogfQogCi1pbnQgUmVuZGVyQm94Ojpjb21w
dXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3QKK2Zsb2F0IFJlbmRlckJveDo6Y29tcHV0
ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNvbXB1dGVSZXBs
YWNlZExvZ2ljYWxIZWlnaHRSZXNwZWN0aW5nTWluTWF4SGVpZ2h0KGNvbXB1dGVSZXBsYWNlZExv
Z2ljYWxIZWlnaHRVc2luZyhzdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkpKTsKIH0KIAotaW50IFJl
bmRlckJveDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFJlc3BlY3RpbmdNaW5NYXhIZWln
aHQoaW50IGxvZ2ljYWxIZWlnaHQpIGNvbnN0CitmbG9hdCBSZW5kZXJCb3g6OmNvbXB1dGVSZXBs
YWNlZExvZ2ljYWxIZWlnaHRSZXNwZWN0aW5nTWluTWF4SGVpZ2h0KGZsb2F0IGxvZ2ljYWxIZWln
aHQpIGNvbnN0CiB7Ci0gICAgaW50IG1pbkxvZ2ljYWxIZWlnaHQgPSBjb21wdXRlUmVwbGFjZWRM
b2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bG9naWNhbE1pbkhlaWdodCgpKTsKLSAgICBpbnQg
bWF4TG9naWNhbEhlaWdodCA9IHN0eWxlKCktPmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1VuZGVmaW5l
ZCgpID8gbG9naWNhbEhlaWdodCA6IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2luZyhz
dHlsZSgpLT5sb2dpY2FsTWF4SGVpZ2h0KCkpOworICAgIGZsb2F0IG1pbkxvZ2ljYWxIZWlnaHQg
PSBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bG9naWNhbE1pbkhl
aWdodCgpKTsKKyAgICBmbG9hdCBtYXhMb2dpY2FsSGVpZ2h0ID0gc3R5bGUoKS0+bG9naWNhbE1h
eEhlaWdodCgpLmlzVW5kZWZpbmVkKCkgPyBsb2dpY2FsSGVpZ2h0IDogY29tcHV0ZVJlcGxhY2Vk
TG9naWNhbEhlaWdodFVzaW5nKHN0eWxlKCktPmxvZ2ljYWxNYXhIZWlnaHQoKSk7CiAgICAgcmV0
dXJuIG1heChtaW5Mb2dpY2FsSGVpZ2h0LCBtaW4obG9naWNhbEhlaWdodCwgbWF4TG9naWNhbEhl
aWdodCkpOwogfQogCi1pbnQgUmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0
VXNpbmcoTGVuZ3RoIGxvZ2ljYWxIZWlnaHQpIGNvbnN0CitmbG9hdCBSZW5kZXJCb3g6OmNvbXB1
dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2luZyhMZW5ndGggbG9naWNhbEhlaWdodCkgY29uc3QK
IHsKICAgICBzd2l0Y2ggKGxvZ2ljYWxIZWlnaHQudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgRml4
ZWQ6CkBAIC0xOTg3LDkgKzIwMTMsOSBAQAogICAgICAgICAgICAgaWYgKGNiLT5pc1Bvc2l0aW9u
ZWQoKSAmJiBjYi0+c3R5bGUoKS0+aGVpZ2h0KCkuaXNBdXRvKCkgJiYgIShjYi0+c3R5bGUoKS0+
dG9wKCkuaXNBdXRvKCkgfHwgY2ItPnN0eWxlKCktPmJvdHRvbSgpLmlzQXV0bygpKSkgewogICAg
ICAgICAgICAgICAgIEFTU0VSVChjYi0+aXNSZW5kZXJCbG9jaygpKTsKICAgICAgICAgICAgICAg
ICBSZW5kZXJCbG9jayogYmxvY2sgPSB0b1JlbmRlckJsb2NrKGNiKTsKLSAgICAgICAgICAgICAg
ICBpbnQgb2xkSGVpZ2h0ID0gYmxvY2stPmhlaWdodCgpOworICAgICAgICAgICAgICAgIGZsb2F0
IG9sZEhlaWdodCA9IGJsb2NrLT5oZWlnaHQoKTsKICAgICAgICAgICAgICAgICBibG9jay0+Y29t
cHV0ZUxvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgICAgICAgICBpbnQgbmV3SGVpZ2h0ID0gYmxv
Y2stPmNvbXB1dGVDb250ZW50Qm94TG9naWNhbEhlaWdodChibG9jay0+Y29udGVudEhlaWdodCgp
KTsKKyAgICAgICAgICAgICAgICBmbG9hdCBuZXdIZWlnaHQgPSBibG9jay0+Y29tcHV0ZUNvbnRl
bnRCb3hMb2dpY2FsSGVpZ2h0KGJsb2NrLT5jb250ZW50SGVpZ2h0KCkpOwogICAgICAgICAgICAg
ICAgIGJsb2NrLT5zZXRIZWlnaHQob2xkSGVpZ2h0KTsKICAgICAgICAgICAgICAgICByZXR1cm4g
Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQuY2FsY1ZhbHVlKG5l
d0hlaWdodCkpOwogICAgICAgICAgICAgfQpAQCAtMTk5Nyw3ICsyMDIzLDcgQEAKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBhdmFpbGFibGVMb2dpY2FsSGVpZ2h0KCkgaXMgd3JvbmcgaWYgdGhlIHJl
cGxhY2VkIGVsZW1lbnQncyBibG9jay1mbG93IGlzIHBlcnBlbmRpY3VsYXIgdG8gdGhlCiAgICAg
ICAgICAgICAvLyBjb250YWluaW5nIGJsb2NrJ3MgYmxvY2stZmxvdy4KICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjQ5NgotICAgICAgICAg
ICAgaW50IGF2YWlsYWJsZUhlaWdodDsKKyAgICAgICAgICAgIGZsb2F0IGF2YWlsYWJsZUhlaWdo
dDsKICAgICAgICAgICAgIGlmIChpc1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgICAgICBhdmFp
bGFibGVIZWlnaHQgPSBjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yUG9zaXRpb25lZCh0
b1JlbmRlckJveE1vZGVsT2JqZWN0KGNiKSk7CiAgICAgICAgICAgICBlbHNlIHsKQEAgLTIwMjQs
MTIgKzIwNTAsMTIgQEAKICAgICB9CiB9CiAKLWludCBSZW5kZXJCb3g6OmF2YWlsYWJsZUxvZ2lj
YWxIZWlnaHQoKSBjb25zdAorZmxvYXQgUmVuZGVyQm94OjphdmFpbGFibGVMb2dpY2FsSGVpZ2h0
KCkgY29uc3QKIHsKICAgICByZXR1cm4gYXZhaWxhYmxlTG9naWNhbEhlaWdodFVzaW5nKHN0eWxl
KCktPmxvZ2ljYWxIZWlnaHQoKSk7CiB9CiAKLWludCBSZW5kZXJCb3g6OmF2YWlsYWJsZUxvZ2lj
YWxIZWlnaHRVc2luZyhjb25zdCBMZW5ndGgmIGgpIGNvbnN0CitmbG9hdCBSZW5kZXJCb3g6OmF2
YWlsYWJsZUxvZ2ljYWxIZWlnaHRVc2luZyhjb25zdCBMZW5ndGgmIGgpIGNvbnN0CiB7CiAgICAg
aWYgKGguaXNGaXhlZCgpKQogICAgICAgICByZXR1cm4gY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2Fs
SGVpZ2h0KGgudmFsdWUoKSk7CkBAIC0yMDUwLDkgKzIwNzYsOSBAQAogICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjUwMAogICAgIGlmIChpc1JlbmRlckJs
b2NrKCkgJiYgaXNQb3NpdGlvbmVkKCkgJiYgc3R5bGUoKS0+aGVpZ2h0KCkuaXNBdXRvKCkgJiYg
IShzdHlsZSgpLT50b3AoKS5pc0F1dG8oKSB8fCBzdHlsZSgpLT5ib3R0b20oKS5pc0F1dG8oKSkp
IHsKICAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gY29uc3RfY2FzdDxSZW5kZXJCbG9jayo+
KHRvUmVuZGVyQmxvY2sodGhpcykpOwotICAgICAgICBpbnQgb2xkSGVpZ2h0ID0gYmxvY2stPmxv
Z2ljYWxIZWlnaHQoKTsKKyAgICAgICAgZmxvYXQgb2xkSGVpZ2h0ID0gYmxvY2stPmxvZ2ljYWxI
ZWlnaHQoKTsKICAgICAgICAgYmxvY2stPmNvbXB1dGVMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAg
IGludCBuZXdIZWlnaHQgPSBibG9jay0+Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KGJs
b2NrLT5jb250ZW50TG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgZmxvYXQgbmV3SGVpZ2h0ID0g
YmxvY2stPmNvbXB1dGVDb250ZW50Qm94TG9naWNhbEhlaWdodChibG9jay0+Y29udGVudExvZ2lj
YWxIZWlnaHQoKSk7CiAgICAgICAgIGJsb2NrLT5zZXRMb2dpY2FsSGVpZ2h0KG9sZEhlaWdodCk7
CiAgICAgICAgIHJldHVybiBjb21wdXRlQ29udGVudEJveExvZ2ljYWxIZWlnaHQobmV3SGVpZ2h0
KTsKICAgICB9CkBAIC0yMjAwLDE4ICsyMjI2LDE4IEBACiAgICAgLy8gcmVsYXRpdmUgcG9zaXRp
b25lZCBpbmxpbmUuCiAgICAgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRhaW5lckJs
b2NrID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChjb250YWluZXIoKSk7CiAgICAgCi0gICAgY29u
c3QgaW50IGNvbnRhaW5lckxvZ2ljYWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0
aEZvclBvc2l0aW9uZWQoY29udGFpbmVyQmxvY2spOworICAgIGNvbnN0IGZsb2F0IGNvbnRhaW5l
ckxvZ2ljYWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQo
Y29udGFpbmVyQmxvY2spOwogCiAgICAgLy8gVG8gbWF0Y2ggV2luSUUsIGluIHF1aXJrcyBtb2Rl
IHVzZSB0aGUgcGFyZW50J3MgJ2RpcmVjdGlvbicgcHJvcGVydHkKICAgICAvLyBpbnN0ZWFkIG9m
IHRoZSB0aGUgY29udGFpbmVyIGJsb2NrJ3MuCiAgICAgVGV4dERpcmVjdGlvbiBjb250YWluZXJE
aXJlY3Rpb24gPSAoZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpID8gcGFyZW50KCktPnN0eWxl
KCktPmRpcmVjdGlvbigpIDogY29udGFpbmVyQmxvY2stPnN0eWxlKCktPmRpcmVjdGlvbigpOwog
CiAgICAgYm9vbCBpc0hvcml6b250YWwgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwotICAg
IGNvbnN0IGludCBib3JkZXJzUGx1c1BhZGRpbmcgPSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdp
ZHRoKCk7CisgICAgY29uc3QgZmxvYXQgYm9yZGVyc1BsdXNQYWRkaW5nID0gYm9yZGVyQW5kUGFk
ZGluZ0xvZ2ljYWxXaWR0aCgpOwogICAgIGNvbnN0IExlbmd0aCBtYXJnaW5Mb2dpY2FsTGVmdCA9
IGlzSG9yaXpvbnRhbCA/IHN0eWxlKCktPm1hcmdpbkxlZnQoKSA6IHN0eWxlKCktPm1hcmdpblRv
cCgpOwogICAgIGNvbnN0IExlbmd0aCBtYXJnaW5Mb2dpY2FsUmlnaHQgPSBpc0hvcml6b250YWwg
PyBzdHlsZSgpLT5tYXJnaW5SaWdodCgpIDogc3R5bGUoKS0+bWFyZ2luQm90dG9tKCk7Ci0gICAg
aW50JiBtYXJnaW5Mb2dpY2FsTGVmdEFsaWFzID0gaXNIb3Jpem9udGFsID8gbV9tYXJnaW5MZWZ0
IDogbV9tYXJnaW5Ub3A7Ci0gICAgaW50JiBtYXJnaW5Mb2dpY2FsUmlnaHRBbGlhcyA9IGlzSG9y
aXpvbnRhbCA/IG1fbWFyZ2luUmlnaHQgOiBtX21hcmdpbkJvdHRvbTsKKyAgICBmbG9hdCYgbWFy
Z2luTG9naWNhbExlZnRBbGlhcyA9IGlzSG9yaXpvbnRhbCA/IG1fbWFyZ2luTGVmdCA6IG1fbWFy
Z2luVG9wOworICAgIGZsb2F0JiBtYXJnaW5Mb2dpY2FsUmlnaHRBbGlhcyA9IGlzSG9yaXpvbnRh
bCA/IG1fbWFyZ2luUmlnaHQgOiBtX21hcmdpbkJvdHRvbTsKIAogICAgIExlbmd0aCBsb2dpY2Fs
TGVmdCA9IHN0eWxlKCktPmxvZ2ljYWxMZWZ0KCk7CiAgICAgTGVuZ3RoIGxvZ2ljYWxSaWdodCA9
IHN0eWxlKCktPmxvZ2ljYWxSaWdodCgpOwpAQCAtMjI0NSw4ICsyMjcxLDggQEAKICAgICBjb21w
dXRlSW5saW5lU3RhdGljRGlzdGFuY2UobG9naWNhbExlZnQsIGxvZ2ljYWxSaWdodCwgdGhpcywg
Y29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckxvZ2ljYWxXaWR0aCwgY29udGFpbmVyRGlyZWN0aW9u
KTsKICAgICAKICAgICAvLyBDYWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlvbiB2YWx1ZXMgZm9y
ICd3aWR0aCcgY2FzZS4KLSAgICBpbnQgbG9naWNhbFdpZHRoUmVzdWx0OwotICAgIGludCBsb2dp
Y2FsTGVmdFJlc3VsdDsKKyAgICBmbG9hdCBsb2dpY2FsV2lkdGhSZXN1bHQ7CisgICAgZmxvYXQg
bG9naWNhbExlZnRSZXN1bHQ7CiAgICAgY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhVc2lu
ZyhzdHlsZSgpLT5sb2dpY2FsV2lkdGgoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckRpcmVj
dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckxv
Z2ljYWxXaWR0aCwgYm9yZGVyc1BsdXNQYWRkaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9naWNhbExlZnQsIGxvZ2ljYWxSaWdodCwgbWFyZ2luTG9naWNhbExl
ZnQsIG1hcmdpbkxvZ2ljYWxSaWdodCwKQEAgLTIyNTYsMTAgKzIyODIsMTAgQEAKIAogICAgIC8v
IENhbGN1bGF0ZSBjb25zdHJhaW50IGVxdWF0aW9uIHZhbHVlcyBmb3IgJ21heC13aWR0aCcgY2Fz
ZS4KICAgICBpZiAoIXN0eWxlKCktPmxvZ2ljYWxNYXhXaWR0aCgpLmlzVW5kZWZpbmVkKCkpIHsK
LSAgICAgICAgaW50IG1heExvZ2ljYWxXaWR0aDsKLSAgICAgICAgaW50IG1heE1hcmdpbkxvZ2lj
YWxMZWZ0OwotICAgICAgICBpbnQgbWF4TWFyZ2luTG9naWNhbFJpZ2h0OwotICAgICAgICBpbnQg
bWF4TG9naWNhbExlZnRQb3M7CisgICAgICAgIGZsb2F0IG1heExvZ2ljYWxXaWR0aDsKKyAgICAg
ICAgZmxvYXQgbWF4TWFyZ2luTG9naWNhbExlZnQ7CisgICAgICAgIGZsb2F0IG1heE1hcmdpbkxv
Z2ljYWxSaWdodDsKKyAgICAgICAgZmxvYXQgbWF4TG9naWNhbExlZnRQb3M7CiAKICAgICAgICAg
Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhVc2luZyhzdHlsZSgpLT5sb2dpY2FsTWF4V2lk
dGgoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckRpcmVjdGlvbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJMb2dpY2FsV2lkdGgsIGJvcmRl
cnNQbHVzUGFkZGluZywKQEAgLTIyNzYsMTAgKzIzMDIsMTAgQEAKIAogICAgIC8vIENhbGN1bGF0
ZSBjb25zdHJhaW50IGVxdWF0aW9uIHZhbHVlcyBmb3IgJ21pbi13aWR0aCcgY2FzZS4KICAgICBp
ZiAoIXN0eWxlKCktPmxvZ2ljYWxNaW5XaWR0aCgpLmlzWmVybygpKSB7Ci0gICAgICAgIGludCBt
aW5Mb2dpY2FsV2lkdGg7Ci0gICAgICAgIGludCBtaW5NYXJnaW5Mb2dpY2FsTGVmdDsKLSAgICAg
ICAgaW50IG1pbk1hcmdpbkxvZ2ljYWxSaWdodDsKLSAgICAgICAgaW50IG1pbkxvZ2ljYWxMZWZ0
UG9zOworICAgICAgICBmbG9hdCBtaW5Mb2dpY2FsV2lkdGg7CisgICAgICAgIGZsb2F0IG1pbk1h
cmdpbkxvZ2ljYWxMZWZ0OworICAgICAgICBmbG9hdCBtaW5NYXJnaW5Mb2dpY2FsUmlnaHQ7Cisg
ICAgICAgIGZsb2F0IG1pbkxvZ2ljYWxMZWZ0UG9zOwogCiAgICAgICAgIGNvbXB1dGVQb3NpdGlv
bmVkTG9naWNhbFdpZHRoVXNpbmcoc3R5bGUoKS0+bG9naWNhbE1pbldpZHRoKCksIGNvbnRhaW5l
ckJsb2NrLCBjb250YWluZXJEaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGFpbmVyTG9naWNhbFdpZHRoLCBib3JkZXJzUGx1c1BhZGRpbmcs
CkBAIC0yMzA3LDcgKzIzMzMsNyBAQAogICAgIHNldExvZ2ljYWxXaWR0aChsb2dpY2FsV2lkdGgo
KSArIGJvcmRlcnNQbHVzUGFkZGluZyk7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbXB1dGVMb2dpY2Fs
TGVmdFBvc2l0aW9uZWRPZmZzZXQoaW50JiBsb2dpY2FsTGVmdFBvcywgY29uc3QgUmVuZGVyQm94
KiBjaGlsZCwgaW50IGxvZ2ljYWxXaWR0aFZhbHVlLCBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVj
dCogY29udGFpbmVyQmxvY2ssIGludCBjb250YWluZXJMb2dpY2FsV2lkdGgpCitzdGF0aWMgdm9p
ZCBjb21wdXRlTG9naWNhbExlZnRQb3NpdGlvbmVkT2Zmc2V0KGZsb2F0JiBsb2dpY2FsTGVmdFBv
cywgY29uc3QgUmVuZGVyQm94KiBjaGlsZCwgZmxvYXQgbG9naWNhbFdpZHRoVmFsdWUsIGNvbnN0
IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJCbG9jaywgZmxvYXQgY29udGFpbmVyTG9n
aWNhbFdpZHRoKQogewogICAgIC8vIERlYWwgd2l0aCBkaWZmZXJpbmcgd3JpdGluZyBtb2RlcyBo
ZXJlLiAgT3VyIG9mZnNldCBuZWVkcyB0byBiZSBpbiB0aGUgY29udGFpbmluZyBibG9jaydzIGNv
b3JkaW5hdGUgc3BhY2UuIElmIHRoZSBjb250YWluaW5nIGJsb2NrIGlzIGZsaXBwZWQKICAgICAv
LyBhbG9uZyB0aGlzIGF4aXMsIHRoZW4gd2UgbmVlZCB0byBmbGlwIHRoZSBjb29yZGluYXRlLiAg
VGhpcyBjYW4gb25seSBoYXBwZW4gaWYgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgYm90aCBhIGZs
aXBwZWQgbW9kZSBhbmQgcGVycGVuZGljdWxhciB0byB1cy4KQEAgLTIzMTksMTUgKzIzNDUsMTUg
QEAKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNp
bmcoTGVuZ3RoIGxvZ2ljYWxXaWR0aCwgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRh
aW5lckJsb2NrLCBUZXh0RGlyZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlvbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb250YWluZXJMb2dp
Y2FsV2lkdGgsIGludCBib3JkZXJzUGx1c1BhZGRpbmcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBjb250YWluZXJMb2dpY2FsV2lkdGgs
IGZsb2F0IGJvcmRlcnNQbHVzUGFkZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCBsb2dpY2FsTGVmdCwgTGVuZ3RoIGxvZ2ljYWxS
aWdodCwgTGVuZ3RoIG1hcmdpbkxvZ2ljYWxMZWZ0LCBMZW5ndGggbWFyZ2luTG9naWNhbFJpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
JiBsb2dpY2FsV2lkdGhWYWx1ZSwgaW50JiBtYXJnaW5Mb2dpY2FsTGVmdFZhbHVlLCBpbnQmIG1h
cmdpbkxvZ2ljYWxSaWdodFZhbHVlLCBpbnQmIGxvZ2ljYWxMZWZ0UG9zKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQmIGxvZ2ljYWxXaWR0
aFZhbHVlLCBmbG9hdCYgbWFyZ2luTG9naWNhbExlZnRWYWx1ZSwgZmxvYXQmIG1hcmdpbkxvZ2lj
YWxSaWdodFZhbHVlLCBmbG9hdCYgbG9naWNhbExlZnRQb3MpCiB7CiAgICAgLy8gJ2xlZnQnIGFu
ZCAncmlnaHQnIGNhbm5vdCBib3RoIGJlICdhdXRvJyBiZWNhdXNlIG9uZSB3b3VsZCBvZiBiZWVu
CiAgICAgLy8gY29udmVydGVkIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24gYWxyZWFkeQogICAgIEFT
U0VSVCghKGxvZ2ljYWxMZWZ0LmlzQXV0bygpICYmIGxvZ2ljYWxSaWdodC5pc0F1dG8oKSkpOwog
Ci0gICAgaW50IGxvZ2ljYWxMZWZ0VmFsdWUgPSAwOworICAgIGZsb2F0IGxvZ2ljYWxMZWZ0VmFs
dWUgPSAwOwogCiAgICAgYm9vbCBsb2dpY2FsV2lkdGhJc0F1dG8gPSBsb2dpY2FsV2lkdGguaXNJ
bnRyaW5zaWNPckF1dG8oKTsKICAgICBib29sIGxvZ2ljYWxMZWZ0SXNBdXRvID0gbG9naWNhbExl
ZnQuaXNBdXRvKCk7CkBAIC0yNDM5LDEyICsyNDY1LDEyIEBACiAgICAgICAgIC8vIFVzZSBydWxl
L2Nhc2UgdGhhdCBhcHBsaWVzLgogICAgICAgICBpZiAobG9naWNhbExlZnRJc0F1dG8gJiYgbG9n
aWNhbFdpZHRoSXNBdXRvICYmICFsb2dpY2FsUmlnaHRJc0F1dG8pIHsKICAgICAgICAgICAgIC8v
IFJVTEUgMTogKHVzZSBzaHJpbmstdG8tZml0IGZvciB3aWR0aCwgYW5kIHNvbHZlIG9mIGxlZnQp
Ci0gICAgICAgICAgICBpbnQgbG9naWNhbFJpZ2h0VmFsdWUgPSBsb2dpY2FsUmlnaHQuY2FsY1Zh
bHVlKGNvbnRhaW5lckxvZ2ljYWxXaWR0aCk7CisgICAgICAgICAgICBmbG9hdCBsb2dpY2FsUmln
aHRWYWx1ZSA9IGxvZ2ljYWxSaWdodC5jYWxjVmFsdWUoY29udGFpbmVyTG9naWNhbFdpZHRoKTsK
IAogICAgICAgICAgICAgLy8gRklYTUU6IHdvdWxkIGl0IGJlIGJldHRlciB0byBoYXZlIHNocmlu
ay10by1maXQgaW4gb25lIHN0ZXA/Ci0gICAgICAgICAgICBpbnQgcHJlZmVycmVkV2lkdGggPSBt
YXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKLSAgICAgICAg
ICAgIGludCBwcmVmZXJyZWRNaW5XaWR0aCA9IG1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIC0g
Ym9yZGVyc1BsdXNQYWRkaW5nOwotICAgICAgICAgICAgaW50IGF2YWlsYWJsZVdpZHRoID0gYXZh
aWxhYmxlU3BhY2UgLSBsb2dpY2FsUmlnaHRWYWx1ZTsKKyAgICAgICAgICAgIGZsb2F0IHByZWZl
cnJlZFdpZHRoID0gbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgLSBib3JkZXJzUGx1c1BhZGRp
bmc7CisgICAgICAgICAgICBmbG9hdCBwcmVmZXJyZWRNaW5XaWR0aCA9IG1pblByZWZlcnJlZExv
Z2ljYWxXaWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nOworICAgICAgICAgICAgZmxvYXQgYXZh
aWxhYmxlV2lkdGggPSBhdmFpbGFibGVTcGFjZSAtIGxvZ2ljYWxSaWdodFZhbHVlOwogICAgICAg
ICAgICAgbG9naWNhbFdpZHRoVmFsdWUgPSBtaW4obWF4KHByZWZlcnJlZE1pbldpZHRoLCBhdmFp
bGFibGVXaWR0aCksIHByZWZlcnJlZFdpZHRoKTsKICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0VmFs
dWUgPSBhdmFpbGFibGVTcGFjZSAtIChsb2dpY2FsV2lkdGhWYWx1ZSArIGxvZ2ljYWxSaWdodFZh
bHVlKTsKICAgICAgICAgfSBlbHNlIGlmICghbG9naWNhbExlZnRJc0F1dG8gJiYgbG9naWNhbFdp
ZHRoSXNBdXRvICYmIGxvZ2ljYWxSaWdodElzQXV0bykgewpAQCAtMjQ1Miw5ICsyNDc4LDkgQEAK
ICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0VmFsdWUgPSBsb2dpY2FsTGVmdC5jYWxjVmFsdWUoY29u
dGFpbmVyTG9naWNhbFdpZHRoKTsKIAogICAgICAgICAgICAgLy8gRklYTUU6IHdvdWxkIGl0IGJl
IGJldHRlciB0byBoYXZlIHNocmluay10by1maXQgaW4gb25lIHN0ZXA/Ci0gICAgICAgICAgICBp
bnQgcHJlZmVycmVkV2lkdGggPSBtYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSAtIGJvcmRlcnNQ
bHVzUGFkZGluZzsKLSAgICAgICAgICAgIGludCBwcmVmZXJyZWRNaW5XaWR0aCA9IG1pblByZWZl
cnJlZExvZ2ljYWxXaWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nOwotICAgICAgICAgICAgaW50
IGF2YWlsYWJsZVdpZHRoID0gYXZhaWxhYmxlU3BhY2UgLSBsb2dpY2FsTGVmdFZhbHVlOworICAg
ICAgICAgICAgZmxvYXQgcHJlZmVycmVkV2lkdGggPSBtYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgo
KSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKKyAgICAgICAgICAgIGZsb2F0IHByZWZlcnJlZE1pbldp
ZHRoID0gbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkgLSBib3JkZXJzUGx1c1BhZGRpbmc7Cisg
ICAgICAgICAgICBmbG9hdCBhdmFpbGFibGVXaWR0aCA9IGF2YWlsYWJsZVNwYWNlIC0gbG9naWNh
bExlZnRWYWx1ZTsKICAgICAgICAgICAgIGxvZ2ljYWxXaWR0aFZhbHVlID0gbWluKG1heChwcmVm
ZXJyZWRNaW5XaWR0aCwgYXZhaWxhYmxlV2lkdGgpLCBwcmVmZXJyZWRXaWR0aCk7CiAgICAgICAg
IH0gZWxzZSBpZiAobG9naWNhbExlZnRJc0F1dG8gJiYgIWxvZ2ljYWxXaWR0aElzQXV0byAmJiAh
bG9naWNhbFJpZ2h0SXNBdXRvKSB7CiAgICAgICAgICAgICAvLyBSVUxFIDQ6IChzb2x2ZSBmb3Ig
bGVmdCkKQEAgLTI1MjIsMTUgKzI1NDgsMTUgQEAKICAgICAvLyBXZSBkb24ndCB1c2UgY29udGFp
bmluZ0Jsb2NrKCksIHNpbmNlIHdlIG1heSBiZSBwb3NpdGlvbmVkIGJ5IGFuIGVuY2xvc2luZyBy
ZWxwb3NpdGlvbmVkIGlubGluZS4KICAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29u
dGFpbmVyQmxvY2sgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lcigpKTsKIAotICAg
IGNvbnN0IGludCBjb250YWluZXJMb2dpY2FsSGVpZ2h0ID0gY29udGFpbmluZ0Jsb2NrTG9naWNh
bEhlaWdodEZvclBvc2l0aW9uZWQoY29udGFpbmVyQmxvY2spOworICAgIGNvbnN0IGZsb2F0IGNv
bnRhaW5lckxvZ2ljYWxIZWlnaHQgPSBjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yUG9z
aXRpb25lZChjb250YWluZXJCbG9jayk7CiAKICAgICBib29sIGlzSG9yaXpvbnRhbCA9IGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCk7CiAgICAgYm9vbCBpc0ZsaXBwZWQgPSBzdHlsZSgpLT5pc0Zs
aXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpOwotICAgIGNvbnN0IGludCBib3JkZXJzUGx1c1BhZGRp
bmcgPSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpOworICAgIGNvbnN0IGZsb2F0IGJv
cmRlcnNQbHVzUGFkZGluZyA9IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCk7CiAgICAg
Y29uc3QgTGVuZ3RoIG1hcmdpbkJlZm9yZSA9IHN0eWxlKCktPm1hcmdpbkJlZm9yZSgpOwogICAg
IGNvbnN0IExlbmd0aCBtYXJnaW5BZnRlciA9IHN0eWxlKCktPm1hcmdpbkFmdGVyKCk7Ci0gICAg
aW50JiBtYXJnaW5CZWZvcmVBbGlhcyA9IGlzSG9yaXpvbnRhbCA/IChpc0ZsaXBwZWQgPyBtX21h
cmdpbkJvdHRvbSA6IG1fbWFyZ2luVG9wKSA6IChpc0ZsaXBwZWQgPyBtX21hcmdpblJpZ2h0OiBt
X21hcmdpbkxlZnQpOwotICAgIGludCYgbWFyZ2luQWZ0ZXJBbGlhcyA9IGlzSG9yaXpvbnRhbCA/
IChpc0ZsaXBwZWQgPyBtX21hcmdpblRvcCA6IG1fbWFyZ2luQm90dG9tKSA6IChpc0ZsaXBwZWQg
PyBtX21hcmdpbkxlZnQ6IG1fbWFyZ2luUmlnaHQpOworICAgIGZsb2F0JiBtYXJnaW5CZWZvcmVB
bGlhcyA9IGlzSG9yaXpvbnRhbCA/IChpc0ZsaXBwZWQgPyBtX21hcmdpbkJvdHRvbSA6IG1fbWFy
Z2luVG9wKSA6IChpc0ZsaXBwZWQgPyBtX21hcmdpblJpZ2h0OiBtX21hcmdpbkxlZnQpOworICAg
IGZsb2F0JiBtYXJnaW5BZnRlckFsaWFzID0gaXNIb3Jpem9udGFsID8gKGlzRmxpcHBlZCA/IG1f
bWFyZ2luVG9wIDogbV9tYXJnaW5Cb3R0b20pIDogKGlzRmxpcHBlZCA/IG1fbWFyZ2luTGVmdDog
bV9tYXJnaW5SaWdodCk7CiAKICAgICBMZW5ndGggbG9naWNhbFRvcCA9IHN0eWxlKCktPmxvZ2lj
YWxUb3AoKTsKICAgICBMZW5ndGggbG9naWNhbEJvdHRvbSA9IHN0eWxlKCktPmxvZ2ljYWxCb3R0
b20oKTsKQEAgLTI1NTYsOCArMjU4Miw4IEBACiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzdGF0aWMg
ZGlzdGFuY2UgaWYgbmVlZGVkLgogICAgIGNvbXB1dGVCbG9ja1N0YXRpY0Rpc3RhbmNlKGxvZ2lj
YWxUb3AsIGxvZ2ljYWxCb3R0b20sIHRoaXMsIGNvbnRhaW5lckJsb2NrKTsKIAotICAgIGludCBs
b2dpY2FsSGVpZ2h0UmVzdWx0OyAvLyBOZWVkZWQgdG8gY29tcHV0ZSBvdmVyZmxvdy4KLSAgICBp
bnQgbG9naWNhbFRvcFBvczsKKyAgICBmbG9hdCBsb2dpY2FsSGVpZ2h0UmVzdWx0OyAvLyBOZWVk
ZWQgdG8gY29tcHV0ZSBvdmVyZmxvdy4KKyAgICBmbG9hdCBsb2dpY2FsVG9wUG9zOwogCiAgICAg
Ly8gQ2FsY3VsYXRlIGNvbnN0cmFpbnQgZXF1YXRpb24gdmFsdWVzIGZvciAnaGVpZ2h0JyBjYXNl
LgogICAgIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdodFVzaW5nKHN0eWxlKCktPmxvZ2lj
YWxIZWlnaHQoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQsIGJvcmRl
cnNQbHVzUGFkZGluZywKQEAgLTI1NzAsMTAgKzI1OTYsMTAgQEAKIAogICAgIC8vIENhbGN1bGF0
ZSBjb25zdHJhaW50IGVxdWF0aW9uIHZhbHVlcyBmb3IgJ21heC1oZWlnaHQnIGNhc2UuCiAgICAg
aWYgKCFzdHlsZSgpLT5sb2dpY2FsTWF4SGVpZ2h0KCkuaXNVbmRlZmluZWQoKSkgewotICAgICAg
ICBpbnQgbWF4TG9naWNhbEhlaWdodDsKLSAgICAgICAgaW50IG1heE1hcmdpbkJlZm9yZTsKLSAg
ICAgICAgaW50IG1heE1hcmdpbkFmdGVyOwotICAgICAgICBpbnQgbWF4TG9naWNhbFRvcFBvczsK
KyAgICAgICAgZmxvYXQgbWF4TG9naWNhbEhlaWdodDsKKyAgICAgICAgZmxvYXQgbWF4TWFyZ2lu
QmVmb3JlOworICAgICAgICBmbG9hdCBtYXhNYXJnaW5BZnRlcjsKKyAgICAgICAgZmxvYXQgbWF4
TG9naWNhbFRvcFBvczsKIAogICAgICAgICBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHRV
c2luZyhzdHlsZSgpLT5sb2dpY2FsTWF4SGVpZ2h0KCksIGNvbnRhaW5lckJsb2NrLCBjb250YWlu
ZXJMb2dpY2FsSGVpZ2h0LCBib3JkZXJzUGx1c1BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AsIGxvZ2ljYWxCb3R0b20sIG1hcmdp
bkJlZm9yZSwgbWFyZ2luQWZ0ZXIsCkBAIC0yNTg5LDEwICsyNjE1LDEwIEBACiAKICAgICAvLyBD
YWxjdWxhdGUgY29uc3RyYWludCBlcXVhdGlvbiB2YWx1ZXMgZm9yICdtaW4taGVpZ2h0JyBjYXNl
LgogICAgIGlmICghc3R5bGUoKS0+bG9naWNhbE1pbkhlaWdodCgpLmlzWmVybygpKSB7Ci0gICAg
ICAgIGludCBtaW5Mb2dpY2FsSGVpZ2h0OwotICAgICAgICBpbnQgbWluTWFyZ2luQmVmb3JlOwot
ICAgICAgICBpbnQgbWluTWFyZ2luQWZ0ZXI7Ci0gICAgICAgIGludCBtaW5Mb2dpY2FsVG9wUG9z
OworICAgICAgICBmbG9hdCBtaW5Mb2dpY2FsSGVpZ2h0OworICAgICAgICBmbG9hdCBtaW5NYXJn
aW5CZWZvcmU7CisgICAgICAgIGZsb2F0IG1pbk1hcmdpbkFmdGVyOworICAgICAgICBmbG9hdCBt
aW5Mb2dpY2FsVG9wUG9zOwogCiAgICAgICAgIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdo
dFVzaW5nKHN0eWxlKCktPmxvZ2ljYWxNaW5IZWlnaHQoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRh
aW5lckxvZ2ljYWxIZWlnaHQsIGJvcmRlcnNQbHVzUGFkZGluZywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbFRvcCwgbG9naWNhbEJvdHRvbSwgbWFy
Z2luQmVmb3JlLCBtYXJnaW5BZnRlciwKQEAgLTI2MTAsNyArMjYzNiw3IEBACiAgICAgc2V0TG9n
aWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0UmVzdWx0ICsgYm9yZGVyc1BsdXNQYWRkaW5nKTsKIH0K
IAotc3RhdGljIHZvaWQgY29tcHV0ZUxvZ2ljYWxUb3BQb3NpdGlvbmVkT2Zmc2V0KGludCYgbG9n
aWNhbFRvcFBvcywgY29uc3QgUmVuZGVyQm94KiBjaGlsZCwgaW50IGxvZ2ljYWxIZWlnaHRWYWx1
ZSwgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRhaW5lckJsb2NrLCBpbnQgY29udGFp
bmVyTG9naWNhbEhlaWdodCkKK3N0YXRpYyB2b2lkIGNvbXB1dGVMb2dpY2FsVG9wUG9zaXRpb25l
ZE9mZnNldChmbG9hdCYgbG9naWNhbFRvcFBvcywgY29uc3QgUmVuZGVyQm94KiBjaGlsZCwgZmxv
YXQgbG9naWNhbEhlaWdodFZhbHVlLCBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGFp
bmVyQmxvY2ssIGZsb2F0IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQpCiB7CiAgICAgLy8gRGVhbCB3
aXRoIGRpZmZlcmluZyB3cml0aW5nIG1vZGVzIGhlcmUuICBPdXIgb2Zmc2V0IG5lZWRzIHRvIGJl
IGluIHRoZSBjb250YWluaW5nIGJsb2NrJ3MgY29vcmRpbmF0ZSBzcGFjZS4gSWYgdGhlIGNvbnRh
aW5pbmcgYmxvY2sgaXMgZmxpcHBlZAogICAgIC8vIGFsb25nIHRoaXMgYXhpcywgdGhlbiB3ZSBu
ZWVkIHRvIGZsaXAgdGhlIGNvb3JkaW5hdGUuICBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpZiB0aGUg
Y29udGFpbmluZyBibG9jayBpcyBib3RoIGEgZmxpcHBlZCBtb2RlIGFuZCBwZXJwZW5kaWN1bGFy
IHRvIHVzLgpAQCAtMjYzMywxNyArMjY1OSwxNyBAQAogfQogCiB2b2lkIFJlbmRlckJveDo6Y29t
cHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0VXNpbmcoTGVuZ3RoIGxvZ2ljYWxIZWlnaHRMZW5n
dGgsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJCbG9jaywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29udGFpbmVy
TG9naWNhbEhlaWdodCwgaW50IGJvcmRlcnNQbHVzUGFkZGluZywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBjb250YWluZXJMb2dpY2Fs
SGVpZ2h0LCBmbG9hdCBib3JkZXJzUGx1c1BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoIGxvZ2ljYWxUb3AsIExlbmd0aCBs
b2dpY2FsQm90dG9tLCBMZW5ndGggbWFyZ2luQmVmb3JlLCBMZW5ndGggbWFyZ2luQWZ0ZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBs
b2dpY2FsSGVpZ2h0VmFsdWUsIGludCYgbWFyZ2luQmVmb3JlVmFsdWUsIGludCYgbWFyZ2luQWZ0
ZXJWYWx1ZSwgaW50JiBsb2dpY2FsVG9wUG9zKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0JiBsb2dpY2FsSGVpZ2h0VmFsdWUsIGZsb2F0
JiBtYXJnaW5CZWZvcmVWYWx1ZSwgZmxvYXQmIG1hcmdpbkFmdGVyVmFsdWUsIGZsb2F0JiBsb2dp
Y2FsVG9wUG9zKQogewogICAgIC8vICd0b3AnIGFuZCAnYm90dG9tJyBjYW5ub3QgYm90aCBiZSAn
YXV0bycgYmVjYXVzZSAndG9wIHdvdWxkIG9mIGJlZW4KICAgICAvLyBjb252ZXJ0ZWQgdG8gdGhl
IHN0YXRpYyBwb3NpdGlvbiBpbiBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHQoKQogICAg
IEFTU0VSVCghKGxvZ2ljYWxUb3AuaXNBdXRvKCkgJiYgbG9naWNhbEJvdHRvbS5pc0F1dG8oKSkp
OwogCi0gICAgaW50IGNvbnRlbnRMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpIC0gYm9y
ZGVyc1BsdXNQYWRkaW5nOworICAgIGZsb2F0IGNvbnRlbnRMb2dpY2FsSGVpZ2h0ID0gbG9naWNh
bEhlaWdodCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nOwogCi0gICAgaW50IGxvZ2ljYWxUb3BWYWx1
ZSA9IDA7CisgICAgZmxvYXQgbG9naWNhbFRvcFZhbHVlID0gMDsKIAogICAgIGJvb2wgbG9naWNh
bEhlaWdodElzQXV0byA9IGxvZ2ljYWxIZWlnaHRMZW5ndGguaXNBdXRvKCk7CiAgICAgYm9vbCBs
b2dpY2FsVG9wSXNBdXRvID0gbG9naWNhbFRvcC5pc0F1dG8oKTsKQEAgLTI2NzAsNyArMjY5Niw3
IEBACiAgICAgICAgIGxvZ2ljYWxIZWlnaHRWYWx1ZSA9IGNvbXB1dGVDb250ZW50Qm94TG9naWNh
bEhlaWdodChsb2dpY2FsSGVpZ2h0TGVuZ3RoLmNhbGNWYWx1ZShjb250YWluZXJMb2dpY2FsSGVp
Z2h0KSk7CiAgICAgICAgIGxvZ2ljYWxUb3BWYWx1ZSA9IGxvZ2ljYWxUb3AuY2FsY1ZhbHVlKGNv
bnRhaW5lckxvZ2ljYWxIZWlnaHQpOwogCi0gICAgICAgIGNvbnN0IGludCBhdmFpbGFibGVTcGFj
ZSA9IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQgLSAobG9naWNhbFRvcFZhbHVlICsgbG9naWNhbEhl
aWdodFZhbHVlICsgbG9naWNhbEJvdHRvbS5jYWxjVmFsdWUoY29udGFpbmVyTG9naWNhbEhlaWdo
dCkgKyBib3JkZXJzUGx1c1BhZGRpbmcpOworICAgICAgICBjb25zdCBmbG9hdCBhdmFpbGFibGVT
cGFjZSA9IGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQgLSAobG9naWNhbFRvcFZhbHVlICsgbG9naWNh
bEhlaWdodFZhbHVlICsgbG9naWNhbEJvdHRvbS5jYWxjVmFsdWUoY29udGFpbmVyTG9naWNhbEhl
aWdodCkgKyBib3JkZXJzUGx1c1BhZGRpbmcpOwogCiAgICAgICAgIC8vIE1hcmdpbnMgYXJlIG5v
dyB0aGUgb25seSB1bmtub3duCiAgICAgICAgIGlmIChtYXJnaW5CZWZvcmUuaXNBdXRvKCkgJiYg
bWFyZ2luQWZ0ZXIuaXNBdXRvKCkpIHsKQEAgLTI3MzksNyArMjc2NSw3IEBACiAgICAgICAgIH0g
ZWxzZSBpZiAoIWxvZ2ljYWxUb3BJc0F1dG8gJiYgbG9naWNhbEhlaWdodElzQXV0byAmJiAhbG9n
aWNhbEJvdHRvbUlzQXV0bykgewogICAgICAgICAgICAgLy8gUlVMRSA1OiAoc29sdmUgb2YgaGVp
Z2h0KQogICAgICAgICAgICAgbG9naWNhbFRvcFZhbHVlID0gbG9naWNhbFRvcC5jYWxjVmFsdWUo
Y29udGFpbmVyTG9naWNhbEhlaWdodCk7Ci0gICAgICAgICAgICBsb2dpY2FsSGVpZ2h0VmFsdWUg
PSBtYXgoMCwgYXZhaWxhYmxlU3BhY2UgLSAobG9naWNhbFRvcFZhbHVlICsgbG9naWNhbEJvdHRv
bS5jYWxjVmFsdWUoY29udGFpbmVyTG9naWNhbEhlaWdodCkpKTsKKyAgICAgICAgICAgIGxvZ2lj
YWxIZWlnaHRWYWx1ZSA9IG1heCgwLjBmLCBhdmFpbGFibGVTcGFjZSAtIChsb2dpY2FsVG9wVmFs
dWUgKyBsb2dpY2FsQm90dG9tLmNhbGNWYWx1ZShjb250YWluZXJMb2dpY2FsSGVpZ2h0KSkpOwog
ICAgICAgICB9IGVsc2UgaWYgKCFsb2dpY2FsVG9wSXNBdXRvICYmICFsb2dpY2FsSGVpZ2h0SXNB
dXRvICYmIGxvZ2ljYWxCb3R0b21Jc0F1dG8pIHsKICAgICAgICAgICAgIC8vIFJVTEUgNjogKG5v
IG5lZWQgc29sdmUgb2YgYm90dG9tKQogICAgICAgICAgICAgbG9naWNhbEhlaWdodFZhbHVlID0g
Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHRMZW5ndGguY2FsY1Zh
bHVlKGNvbnRhaW5lckxvZ2ljYWxIZWlnaHQpKTsKQEAgLTI3NzYsOCArMjgwMiw4IEBACiAgICAg
TGVuZ3RoIGxvZ2ljYWxSaWdodCA9IHN0eWxlKCktPmxvZ2ljYWxSaWdodCgpOwogICAgIExlbmd0
aCBtYXJnaW5Mb2dpY2FsTGVmdCA9IGlzSG9yaXpvbnRhbCA/IHN0eWxlKCktPm1hcmdpbkxlZnQo
KSA6IHN0eWxlKCktPm1hcmdpblRvcCgpOwogICAgIExlbmd0aCBtYXJnaW5Mb2dpY2FsUmlnaHQg
PSBpc0hvcml6b250YWwgPyBzdHlsZSgpLT5tYXJnaW5SaWdodCgpIDogc3R5bGUoKS0+bWFyZ2lu
Qm90dG9tKCk7Ci0gICAgaW50JiBtYXJnaW5Mb2dpY2FsTGVmdEFsaWFzID0gaXNIb3Jpem9udGFs
ID8gbV9tYXJnaW5MZWZ0IDogbV9tYXJnaW5Ub3A7Ci0gICAgaW50JiBtYXJnaW5Mb2dpY2FsUmln
aHRBbGlhcyA9IGlzSG9yaXpvbnRhbCA/IG1fbWFyZ2luUmlnaHQgOiBtX21hcmdpbkJvdHRvbTsK
KyAgICBmbG9hdCYgbWFyZ2luTG9naWNhbExlZnRBbGlhcyA9IGlzSG9yaXpvbnRhbCA/IG1fbWFy
Z2luTGVmdCA6IG1fbWFyZ2luVG9wOworICAgIGZsb2F0JiBtYXJnaW5Mb2dpY2FsUmlnaHRBbGlh
cyA9IGlzSG9yaXpvbnRhbCA/IG1fbWFyZ2luUmlnaHQgOiBtX21hcmdpbkJvdHRvbTsKIAogICAg
IC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qXAogICAgICAqIDEuIFRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcg
aXMgZGV0ZXJtaW5lZCBhcyBmb3IgaW5saW5lIHJlcGxhY2VkCkBAIC0yOTEyLDcgKzI5MzgsNyBA
QAogICAgICAgICB9CiAgICAgfQogCi0gICAgaW50IGxvZ2ljYWxMZWZ0UG9zID0gbG9naWNhbExl
ZnRWYWx1ZSArIG1hcmdpbkxvZ2ljYWxMZWZ0QWxpYXM7CisgICAgZmxvYXQgbG9naWNhbExlZnRQ
b3MgPSBsb2dpY2FsTGVmdFZhbHVlICsgbWFyZ2luTG9naWNhbExlZnRBbGlhczsKICAgICBjb21w
dXRlTG9naWNhbExlZnRQb3NpdGlvbmVkT2Zmc2V0KGxvZ2ljYWxMZWZ0UG9zLCB0aGlzLCBsb2dp
Y2FsV2lkdGgoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckxvZ2ljYWxXaWR0aCk7ICAgIAog
ICAgIHNldExvZ2ljYWxMZWZ0KGxvZ2ljYWxMZWZ0UG9zKTsKIH0KQEAgLTI5MzUsOCArMjk2MSw4
IEBACiAgICAgYm9vbCBpc0ZsaXBwZWQgPSBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5n
TW9kZSgpOwogICAgIExlbmd0aCBtYXJnaW5CZWZvcmUgPSBzdHlsZSgpLT5tYXJnaW5CZWZvcmUo
KTsKICAgICBMZW5ndGggbWFyZ2luQWZ0ZXIgPSBzdHlsZSgpLT5tYXJnaW5BZnRlcigpOwotICAg
IGludCYgbWFyZ2luQmVmb3JlQWxpYXMgPSBpc0hvcml6b250YWwgPyAoaXNGbGlwcGVkID8gbV9t
YXJnaW5Cb3R0b20gOiBtX21hcmdpblRvcCkgOiAoaXNGbGlwcGVkID8gbV9tYXJnaW5SaWdodDog
bV9tYXJnaW5MZWZ0KTsKLSAgICBpbnQmIG1hcmdpbkFmdGVyQWxpYXMgPSBpc0hvcml6b250YWwg
PyAoaXNGbGlwcGVkID8gbV9tYXJnaW5Ub3AgOiBtX21hcmdpbkJvdHRvbSkgOiAoaXNGbGlwcGVk
ID8gbV9tYXJnaW5MZWZ0OiBtX21hcmdpblJpZ2h0KTsKKyAgICBmbG9hdCYgbWFyZ2luQmVmb3Jl
QWxpYXMgPSBpc0hvcml6b250YWwgPyAoaXNGbGlwcGVkID8gbV9tYXJnaW5Cb3R0b20gOiBtX21h
cmdpblRvcCkgOiAoaXNGbGlwcGVkID8gbV9tYXJnaW5SaWdodDogbV9tYXJnaW5MZWZ0KTsKKyAg
ICBmbG9hdCYgbWFyZ2luQWZ0ZXJBbGlhcyA9IGlzSG9yaXpvbnRhbCA/IChpc0ZsaXBwZWQgPyBt
X21hcmdpblRvcCA6IG1fbWFyZ2luQm90dG9tKSA6IChpc0ZsaXBwZWQgPyBtX21hcmdpbkxlZnQ6
IG1fbWFyZ2luUmlnaHQpOwogCiAgICAgTGVuZ3RoIGxvZ2ljYWxUb3AgPSBzdHlsZSgpLT5sb2dp
Y2FsVG9wKCk7CiAgICAgTGVuZ3RoIGxvZ2ljYWxCb3R0b20gPSBzdHlsZSgpLT5sb2dpY2FsQm90
dG9tKCk7CkBAIC0zMDQyLDcgKzMwNjgsNyBAQAogICAgIC8vIG9yIG5vdC4KIAogICAgIC8vIFVz
ZSBjb21wdXRlZCB2YWx1ZXMgdG8gY2FsY3VsYXRlIHRoZSB2ZXJ0aWNhbCBwb3NpdGlvbi4KLSAg
ICBpbnQgbG9naWNhbFRvcFBvcyA9IGxvZ2ljYWxUb3BWYWx1ZSArIG1hcmdpbkJlZm9yZUFsaWFz
OworICAgIGZsb2F0IGxvZ2ljYWxUb3BQb3MgPSBsb2dpY2FsVG9wVmFsdWUgKyBtYXJnaW5CZWZv
cmVBbGlhczsKICAgICBjb21wdXRlTG9naWNhbFRvcFBvc2l0aW9uZWRPZmZzZXQobG9naWNhbFRv
cFBvcywgdGhpcywgbG9naWNhbEhlaWdodCgpLCBjb250YWluZXJCbG9jaywgY29udGFpbmVyTG9n
aWNhbEhlaWdodCk7CiAgICAgc2V0TG9naWNhbFRvcChsb2dpY2FsVG9wUG9zKTsKIH0KQEAgLTMw
ODQsNyArMzExMCw3IEBACiAgICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSB4KCkgKyB3
aWR0aCgpIC0gcmVjdC5tYXhYKCk7CiAKICAgICAvLyBNb3ZlIHRvIGxvY2FsIGNvb3JkcwotICAg
IHJlY3QubW92ZUJ5KC1sb2NhdGlvbigpKTsKKyAgICByZWN0Lm1vdmVCeSgtcm91bmRlZEludFBv
aW50KGxvY2F0aW9uKCkpKTsKICAgICByZXR1cm4gcmVjdDsKIH0KIApAQCAtMzIwMCw3ICszMjI2
LDcgQEAKICAgICBpbnQgc2hhZG93VG9wOwogICAgIGludCBzaGFkb3dCb3R0b207CiAgICAgc3R5
bGUoKS0+Z2V0Qm94U2hhZG93RXh0ZW50KHNoYWRvd1RvcCwgc2hhZG93UmlnaHQsIHNoYWRvd0Jv
dHRvbSwgc2hhZG93TGVmdCk7Ci0gICAgSW50UmVjdCBib3JkZXJCb3ggPSBib3JkZXJCb3hSZWN0
KCk7CisgICAgSW50UmVjdCBib3JkZXJCb3ggPSBlbmNsb3NpbmdJbnRSZWN0KGJvcmRlckJveFJl
Y3QoKSk7CiAgICAgaW50IG92ZXJmbG93TGVmdCA9IGJvcmRlckJveC54KCkgKyBzaGFkb3dMZWZ0
OwogICAgIGludCBvdmVyZmxvd1JpZ2h0ID0gYm9yZGVyQm94Lm1heFgoKSArIHNoYWRvd1JpZ2h0
OwogICAgIGludCBvdmVyZmxvd1RvcCA9IGJvcmRlckJveC55KCkgKyBzaGFkb3dUb3A7CkBAIC0z
MjA4LDEyICszMjM0LDEyIEBACiAgICAgYWRkVmlzdWFsT3ZlcmZsb3coSW50UmVjdChvdmVyZmxv
d0xlZnQsIG92ZXJmbG93VG9wLCBvdmVyZmxvd1JpZ2h0IC0gb3ZlcmZsb3dMZWZ0LCBvdmVyZmxv
d0JvdHRvbSAtIG92ZXJmbG93VG9wKSk7CiB9CiAKLXZvaWQgUmVuZGVyQm94OjphZGRPdmVyZmxv
d0Zyb21DaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBJbnRTaXplJiBkZWx0YSkKK3ZvaWQg
UmVuZGVyQm94OjphZGRPdmVyZmxvd0Zyb21DaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBG
bG9hdFNpemUmIGRlbHRhKQogewogICAgIC8vIE9ubHkgcHJvcGFnYXRlIGxheW91dCBvdmVyZmxv
dyBmcm9tIHRoZSBjaGlsZCBpZiB0aGUgY2hpbGQgaXNuJ3QgY2xpcHBpbmcgaXRzIG92ZXJmbG93
LiAgSWYgaXQgaXMsIHRoZW4KICAgICAvLyBpdHMgb3ZlcmZsb3cgaXMgaW50ZXJuYWwgdG8gaXQs
IGFuZCB3ZSBkb24ndCBjYXJlIGFib3V0IGl0LiAgbGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFn
YXRpb24gdGFrZXMgY2FyZSBvZiB0aGlzCiAgICAgLy8gYW5kIGp1c3QgcHJvcGFnYXRlcyB0aGUg
Ym9yZGVyIGJveCByZWN0IGluc3RlYWQuCi0gICAgSW50UmVjdCBjaGlsZExheW91dE92ZXJmbG93
UmVjdCA9IGNoaWxkLT5sYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihzdHlsZSgpKTsK
KyAgICBGbG9hdFJlY3QgY2hpbGRMYXlvdXRPdmVyZmxvd1JlY3QgPSBjaGlsZC0+bGF5b3V0T3Zl
cmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oc3R5bGUoKSk7CiAgICAgY2hpbGRMYXlvdXRPdmVyZmxv
d1JlY3QubW92ZShkZWx0YSk7CiAgICAgYWRkTGF5b3V0T3ZlcmZsb3coY2hpbGRMYXlvdXRPdmVy
Zmxvd1JlY3QpOwogICAgICAgICAgICAgCkBAIC0zMjIyLDE5ICszMjQ4LDE5IEBACiAgICAgLy8g
b3ZlcmZsb3cgaWYgd2UgYXJlIGNsaXBwaW5nIG91ciBvd24gb3ZlcmZsb3cuCiAgICAgaWYgKGNo
aWxkLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpIHx8IGhhc092ZXJmbG93Q2xpcCgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgSW50UmVjdCBjaGlsZFZpc3VhbE92ZXJmbG93UmVjdCA9IGNoaWxkLT52
aXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihzdHlsZSgpKTsKKyAgICBGbG9hdFJlY3Qg
Y2hpbGRWaXN1YWxPdmVyZmxvd1JlY3QgPSBjaGlsZC0+dmlzdWFsT3ZlcmZsb3dSZWN0Rm9yUHJv
cGFnYXRpb24oc3R5bGUoKSk7CiAgICAgY2hpbGRWaXN1YWxPdmVyZmxvd1JlY3QubW92ZShkZWx0
YSk7CiAgICAgYWRkVmlzdWFsT3ZlcmZsb3coY2hpbGRWaXN1YWxPdmVyZmxvd1JlY3QpOwogfQog
Ci12b2lkIFJlbmRlckJveDo6YWRkTGF5b3V0T3ZlcmZsb3coY29uc3QgSW50UmVjdCYgcmVjdCkK
K3ZvaWQgUmVuZGVyQm94OjphZGRMYXlvdXRPdmVyZmxvdyhjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiB7Ci0gICAgSW50UmVjdCBjbGllbnRCb3ggPSBjbGllbnRCb3hSZWN0KCk7CisgICAgRmxvYXRS
ZWN0IGNsaWVudEJveCA9IGNsaWVudEJveFJlY3QoKTsKICAgICBpZiAoY2xpZW50Qm94LmNvbnRh
aW5zKHJlY3QpIHx8IHJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAg
Ly8gRm9yIG92ZXJmbG93IGNsaXAgb2JqZWN0cywgd2UgZG9uJ3Qgd2FudCB0byBwcm9wYWdhdGUg
b3ZlcmZsb3cgaW50byB1bnJlYWNoYWJsZSBhcmVhcy4KLSAgICBJbnRSZWN0IG92ZXJmbG93UmVj
dChyZWN0KTsKKyAgICBGbG9hdFJlY3Qgb3ZlcmZsb3dSZWN0KHJlY3QpOwogICAgIGlmIChoYXNP
dmVyZmxvd0NsaXAoKSB8fCBpc1JlbmRlclZpZXcoKSkgewogICAgICAgICAvLyBPdmVyZmxvdyBp
cyBpbiB0aGUgYmxvY2sncyBjb29yZGluYXRlIHNwYWNlIGFuZCB0aHVzIGlzIGZsaXBwZWQgZm9y
IGhvcml6b250YWwtYnQgYW5kIHZlcnRpY2FsLXJsIAogICAgICAgICAvLyB3cml0aW5nIG1vZGVz
LiAgQXQgdGhpcyBzdGFnZSB0aGF0IGlzIGFjdHVhbGx5IGEgc2ltcGxpZmljYXRpb24sIHNpbmNl
IHdlIGNhbiB0cmVhdCBob3Jpem9udGFsLXRiL2J0IGFzIHRoZSBzYW1lCkBAIC0zMjU4LDIxICsz
Mjg0LDIxIEBACiAgICAgfQogCiAgICAgaWYgKCFtX292ZXJmbG93KQotICAgICAgICBtX292ZXJm
bG93ID0gYWRvcHRQdHIobmV3IFJlbmRlck92ZXJmbG93KGNsaWVudEJveCwgYm9yZGVyQm94UmVj
dCgpKSk7CisgICAgICAgIG1fb3ZlcmZsb3cgPSBhZG9wdFB0cihuZXcgUmVuZGVyT3ZlcmZsb3co
ZW5jbG9zaW5nSW50UmVjdChjbGllbnRCb3gpLCBlbmNsb3NpbmdJbnRSZWN0KGJvcmRlckJveFJl
Y3QoKSkpKTsKICAgICAKLSAgICBtX292ZXJmbG93LT5hZGRMYXlvdXRPdmVyZmxvdyhvdmVyZmxv
d1JlY3QpOworICAgIG1fb3ZlcmZsb3ctPmFkZExheW91dE92ZXJmbG93KGVuY2xvc2luZ0ludFJl
Y3Qob3ZlcmZsb3dSZWN0KSk7CiB9CiAKLXZvaWQgUmVuZGVyQm94OjphZGRWaXN1YWxPdmVyZmxv
dyhjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBSZW5kZXJCb3g6OmFkZFZpc3VhbE92ZXJmbG93
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBJbnRSZWN0IGJvcmRlckJveCA9IGJvcmRl
ckJveFJlY3QoKTsKKyAgICBGbG9hdFJlY3QgYm9yZGVyQm94ID0gYm9yZGVyQm94UmVjdCgpOwog
ICAgIGlmIChib3JkZXJCb3guY29udGFpbnMocmVjdCkgfHwgcmVjdC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgaWYgKCFtX292ZXJmbG93KQotICAgICAgICBtX292
ZXJmbG93ID0gYWRvcHRQdHIobmV3IFJlbmRlck92ZXJmbG93KGNsaWVudEJveFJlY3QoKSwgYm9y
ZGVyQm94KSk7CisgICAgICAgIG1fb3ZlcmZsb3cgPSBhZG9wdFB0cihuZXcgUmVuZGVyT3ZlcmZs
b3coZW5jbG9zaW5nSW50UmVjdChjbGllbnRCb3hSZWN0KCkpLCBlbmNsb3NpbmdJbnRSZWN0KGJv
cmRlckJveCkpKTsKICAgICAKLSAgICBtX292ZXJmbG93LT5hZGRWaXN1YWxPdmVyZmxvdyhyZWN0
KTsKKyAgICBtX292ZXJmbG93LT5hZGRWaXN1YWxPdmVyZmxvdyhlbmNsb3NpbmdJbnRSZWN0KHJl
Y3QpKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmNsZWFyTGF5b3V0T3ZlcmZsb3coKQpAQCAtMzI4
NSwyMCArMzMxMSwyMCBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIG1fb3Zl
cmZsb3ctPnJlc2V0TGF5b3V0T3ZlcmZsb3coYm9yZGVyQm94UmVjdCgpKTsKKyAgICBtX292ZXJm
bG93LT5yZXNldExheW91dE92ZXJmbG93KGVuY2xvc2luZ0ludFJlY3QoYm9yZGVyQm94UmVjdCgp
KSk7CiB9CiAKLWludCBSZW5kZXJCb3g6OmxpbmVIZWlnaHQoYm9vbCAvKmZpcnN0TGluZSovLCBM
aW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUgLypsaW5lUG9zaXRp
b25Nb2RlKi8pIGNvbnN0CitmbG9hdCBSZW5kZXJCb3g6OmxpbmVIZWlnaHQoYm9vbCAvKmZpcnN0
TGluZSovLCBMaW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUgLyps
aW5lUG9zaXRpb25Nb2RlKi8pIGNvbnN0CiB7CiAgICAgaWYgKGlzUmVwbGFjZWQoKSkKICAgICAg
ICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IG1fbWFyZ2luVG9wICsgaGVp
Z2h0KCkgKyBtX21hcmdpbkJvdHRvbSA6IG1fbWFyZ2luUmlnaHQgKyB3aWR0aCgpICsgbV9tYXJn
aW5MZWZ0OwogICAgIHJldHVybiAwOwogfQogCi1pbnQgUmVuZGVyQm94OjpiYXNlbGluZVBvc2l0
aW9uKEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUsIGJvb2wgLypmaXJzdExpbmUqLywgTGluZURp
cmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIC8qbGluZVBvc2l0aW9uTW9k
ZSovKSBjb25zdAorZmxvYXQgUmVuZGVyQm94OjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGlu
ZSBiYXNlbGluZVR5cGUsIGJvb2wgLypmaXJzdExpbmUqLywgTGluZURpcmVjdGlvbk1vZGUgZGly
ZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIC8qbGluZVBvc2l0aW9uTW9kZSovKSBjb25zdAogewog
ICAgIGlmIChpc1JlcGxhY2VkKCkpIHsKLSAgICAgICAgaW50IHJlc3VsdCA9IGRpcmVjdGlvbiA9
PSBIb3Jpem9udGFsTGluZSA/IG1fbWFyZ2luVG9wICsgaGVpZ2h0KCkgKyBtX21hcmdpbkJvdHRv
bSA6IG1fbWFyZ2luUmlnaHQgKyB3aWR0aCgpICsgbV9tYXJnaW5MZWZ0OworICAgICAgICBmbG9h
dCByZXN1bHQgPSBkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyBtX21hcmdpblRvcCArIGhl
aWdodCgpICsgbV9tYXJnaW5Cb3R0b20gOiBtX21hcmdpblJpZ2h0ICsgd2lkdGgoKSArIG1fbWFy
Z2luTGVmdDsKICAgICAgICAgaWYgKGJhc2VsaW5lVHlwZSA9PSBBbHBoYWJldGljQmFzZWxpbmUp
CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICByZXR1cm4gcmVzdWx0IC0gcmVz
dWx0IC8gMjsKQEAgLTMzMzEsNyArMzM1Nyw3IEBACiB7CiAgICAgLy8gSWYgdGhlIHdyaXRpbmcg
bW9kZXMgb2YgdGhlIGNoaWxkIGFuZCBwYXJlbnQgbWF0Y2gsIHRoZW4gd2UgZG9uJ3QgaGF2ZSB0
byAKICAgICAvLyBkbyBhbnl0aGluZyBmYW5jeS4gSnVzdCByZXR1cm4gdGhlIHJlc3VsdC4KLSAg
ICBJbnRSZWN0IHJlY3QgPSB2aXN1YWxPdmVyZmxvd1JlY3QoKTsKKyAgICBJbnRSZWN0IHJlY3Qg
PSBlbmNsb3NpbmdJbnRSZWN0KHZpc3VhbE92ZXJmbG93UmVjdCgpKTsKICAgICBpZiAocGFyZW50
U3R5bGUtPndyaXRpbmdNb2RlKCkgPT0gc3R5bGUoKS0+d3JpdGluZ01vZGUoKSkKICAgICAgICAg
cmV0dXJuIHJlY3Q7CiAgICAgCkBAIC0zMzQ1LDE4ICszMzcxLDE4IEBACiAgICAgcmV0dXJuIHJl
Y3Q7CiB9CiAKLUludFJlY3QgUmVuZGVyQm94Ojpsb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0Rm9y
UHJvcGFnYXRpb24oUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAorRmxvYXRSZWN0IFJl
bmRlckJveDo6bG9naWNhbExheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QKIHsKLSAgICBJbnRSZWN0IHJlY3QgPSBsYXlvdXRPdmVy
Zmxvd1JlY3RGb3JQcm9wYWdhdGlvbihwYXJlbnRTdHlsZSk7CisgICAgRmxvYXRSZWN0IHJlY3Qg
PSBsYXlvdXRPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihwYXJlbnRTdHlsZSk7CiAgICAgaWYg
KCFwYXJlbnRTdHlsZS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJu
IHJlY3QudHJhbnNwb3NlZFJlY3QoKTsKICAgICByZXR1cm4gcmVjdDsKIH0KIAotSW50UmVjdCBS
ZW5kZXJCb3g6OmxheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSkgY29uc3QKK0Zsb2F0UmVjdCBSZW5kZXJCb3g6OmxheW91dE92ZXJmbG93UmVj
dEZvclByb3BhZ2F0aW9uKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QKIHsKICAgICAv
LyBPbmx5IHByb3BhZ2F0ZSBpbnRlcmlvciBsYXlvdXQgb3ZlcmZsb3cgaWYgd2UgZG9uJ3QgY2xp
cCBpdC4KLSAgICBJbnRSZWN0IHJlY3QgPSBib3JkZXJCb3hSZWN0KCk7CisgICAgRmxvYXRSZWN0
IHJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGJvcmRlckJveFJlY3QoKSk7CiAgICAgaWYgKCFoYXNP
dmVyZmxvd0NsaXAoKSkKICAgICAgICAgcmVjdC51bml0ZShsYXlvdXRPdmVyZmxvd1JlY3QoKSk7
CiAKQEAgLTM0MDQsNiArMzQzMCwxOCBAQAogICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCkg
KyB3aWR0aCgpIC0gY2hpbGQtPndpZHRoKCkgLSBjaGlsZC0+eCgpIC0gKGFkanVzdG1lbnQgPT0g
UGFyZW50VG9DaGlsZEZsaXBwaW5nQWRqdXN0bWVudCA/IGNoaWxkLT54KCkgOiAwKSwgcG9pbnQu
eSgpKTsKIH0KIAorRmxvYXRQb2ludCBSZW5kZXJCb3g6OmZsaXBGb3JXcml0aW5nTW9kZShjb25z
dCBSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRmxpcHBpbmdBZGp1
c3RtZW50IGFkanVzdG1lbnQpIGNvbnN0Cit7CisgICAgaWYgKCFzdHlsZSgpLT5pc0ZsaXBwZWRC
bG9ja3NXcml0aW5nTW9kZSgpKQorICAgICAgICByZXR1cm4gcG9pbnQ7CisgICAgCisgICAgLy8g
VGhlIGNoaWxkIGlzIGdvaW5nIHRvIGFkZCBpbiBpdHMgeCgpIGFuZCB5KCksIHNvIHdlIGhhdmUg
dG8gbWFrZSBzdXJlIGl0IGVuZHMgdXAgaW4KKyAgICAvLyB0aGUgcmlnaHQgcGxhY2UuCisgICAg
aWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisgICAgICAgIHJldHVybiBGbG9hdFBvaW50
KHBvaW50LngoKSwgcG9pbnQueSgpICsgaGVpZ2h0KCkgLSBjaGlsZC0+aGVpZ2h0KCkgLSBjaGls
ZC0+eSgpIC0gKGFkanVzdG1lbnQgPT0gUGFyZW50VG9DaGlsZEZsaXBwaW5nQWRqdXN0bWVudCA/
IGNoaWxkLT55KCkgOiAwKSk7CisgICAgcmV0dXJuIEZsb2F0UG9pbnQocG9pbnQueCgpICsgd2lk
dGgoKSAtIGNoaWxkLT53aWR0aCgpIC0gY2hpbGQtPngoKSAtIChhZGp1c3RtZW50ID09IFBhcmVu
dFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQgPyBjaGlsZC0+eCgpIDogMCksIHBvaW50LnkoKSk7
Cit9CisgICAgCiB2b2lkIFJlbmRlckJveDo6ZmxpcEZvcldyaXRpbmdNb2RlKEludFJlY3QmIHJl
Y3QpIGNvbnN0CiB7CiAgICAgaWYgKCFzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9k
ZSgpKQpAQCAtMzQyOSw3ICszNDY3LDcgQEAKICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IEludFBvaW50KHBvc2l0aW9uLngoKSwgaGVpZ2h0KCkgLSBwb3NpdGlvbi55KCkp
IDogSW50UG9pbnQod2lkdGgoKSAtIHBvc2l0aW9uLngoKSwgcG9zaXRpb24ueSgpKTsKIH0KIAot
SW50UG9pbnQgUmVuZGVyQm94OjpmbGlwRm9yV3JpdGluZ01vZGVJbmNsdWRpbmdDb2x1bW5zKGNv
bnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK0Zsb2F0UG9pbnQgUmVuZGVyQm94OjpmbGlwRm9y
V3JpdGluZ01vZGVJbmNsdWRpbmdDb2x1bW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25z
dAogewogICAgIGlmICghaGFzQ29sdW1ucygpIHx8ICFzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NX
cml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gZmxpcEZvcldyaXRpbmdNb2RlKHBvaW50KTsK
QEAgLTM0NjEsMTUgKzM0OTksMTUgQEAKICAgICAgICAgcmVjdC5zZXRYKHdpZHRoKCkgLSByZWN0
Lm1heFgoKSk7CiB9CiAKLUludFNpemUgUmVuZGVyQm94Ojpsb2NhdGlvbk9mZnNldEluY2x1ZGlu
Z0ZsaXBwaW5nKCkgY29uc3QKK0Zsb2F0U2l6ZSBSZW5kZXJCb3g6OmxvY2F0aW9uT2Zmc2V0SW5j
bHVkaW5nRmxpcHBpbmcoKSBjb25zdAogewogICAgIFJlbmRlckJsb2NrKiBjb250YWluZXJCbG9j
ayA9IGNvbnRhaW5pbmdCbG9jaygpOwogICAgIGlmICghY29udGFpbmVyQmxvY2sgfHwgY29udGFp
bmVyQmxvY2sgPT0gdGhpcykKICAgICAgICAgcmV0dXJuIGxvY2F0aW9uT2Zmc2V0KCk7CiAgICAg
Ci0gICAgSW50UmVjdCByZWN0KGZyYW1lUmVjdCgpKTsKKyAgICBGbG9hdFJlY3QgcmVjdChmcmFt
ZVJlY3QoKSk7CiAgICAgY29udGFpbmVyQmxvY2stPmZsaXBGb3JXcml0aW5nTW9kZShyZWN0KTsg
Ly8gRklYTUU6IFRoaXMgaXMgd3JvbmcgaWYgd2UgYXJlIGFuIGFic29sdXRlbHkgcG9zaXRpb25l
ZCBvYmplY3QgZW5jbG9zZWQgYnkgYSByZWxhdGl2ZS1wb3NpdGlvbmVkIGlubGluZS4KLSAgICBy
ZXR1cm4gSW50U2l6ZShyZWN0LngoKSwgcmVjdC55KCkpOworICAgIHJldHVybiBGbG9hdFNpemUo
cmVjdC54KCksIHJlY3QueSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAkocmV2aXNpb24gODg0OTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTYwLDcgKzYwLDcgQEAKIAogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHls
ZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAgICAgdmlydHVhbCB2
b2lkIGxheW91dCgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJ
bnRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBGbG9h
dFBvaW50Jik7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzV2lkZ2V0KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckFw
cGxldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJBcHBs
ZXQuaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QXBwbGV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB2aXJ0dWFsIGJv
b2wgaXNBcHBsZXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQg
bGF5b3V0KCk7Ci0gICAgdmlydHVhbCBJbnRTaXplIGludHJpbnNpY1NpemUoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEZsb2F0U2l6ZSBpbnRyaW5zaWNTaXplKCkgY29uc3Q7CiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBj
b25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2
aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBACiBib29sIFJlbmRlckJsb2NrOjpzX2Nh
blByb3BhZ2F0ZUZsb2F0SW50b1NpYmxpbmcgPSBmYWxzZTsKIAogLy8gT3VyIE1hcmdpbkluZm8g
c3RhdGUgdXNlZCB3aGVuIGxheWluZyBvdXQgYmxvY2sgY2hpbGRyZW4uCi1SZW5kZXJCbG9jazo6
TWFyZ2luSW5mbzo6TWFyZ2luSW5mbyhSZW5kZXJCbG9jayogYmxvY2ssIGludCBiZWZvcmVCb3Jk
ZXJQYWRkaW5nLCBpbnQgYWZ0ZXJCb3JkZXJQYWRkaW5nKQorUmVuZGVyQmxvY2s6Ok1hcmdpbklu
Zm86Ok1hcmdpbkluZm8oUmVuZGVyQmxvY2sqIGJsb2NrLCBmbG9hdCBiZWZvcmVCb3JkZXJQYWRk
aW5nLCBmbG9hdCBhZnRlckJvcmRlclBhZGRpbmcpCiAgICAgOiBtX2F0QmVmb3JlU2lkZU9mQmxv
Y2sodHJ1ZSkKICAgICAsIG1fYXRBZnRlclNpZGVPZkJsb2NrKGZhbHNlKQogICAgICwgbV9tYXJn
aW5CZWZvcmVRdWlyayhmYWxzZSkKQEAgLTExMzksNyArMTEzOSw3IEBACiAgICAgICAgIGNsZWFy
TGF5b3V0T3ZlcmZsb3coKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9v
bCByZWxheW91dENoaWxkcmVuLCBpbnQgcGFnZUxvZ2ljYWxIZWlnaHQpCit2b2lkIFJlbmRlckJs
b2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGZsb2F0IHBhZ2VMb2dpY2Fs
SGVpZ2h0KQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKIApAQCAtMTE1MSw4ICsxMTUx
LDggQEAKIAogICAgIExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIG1fZXZlckhhZExh
eW91dCAmJiBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSk7CiAKLSAgICBpbnQgb2xkV2lk
dGggPSBsb2dpY2FsV2lkdGgoKTsKLSAgICBpbnQgb2xkQ29sdW1uV2lkdGggPSBkZXNpcmVkQ29s
dW1uV2lkdGgoKTsKKyAgICBmbG9hdCBvbGRXaWR0aCA9IGxvZ2ljYWxXaWR0aCgpOworICAgIGZs
b2F0IG9sZENvbHVtbldpZHRoID0gZGVzaXJlZENvbHVtbldpZHRoKCk7CiAKICAgICBjb21wdXRl
TG9naWNhbFdpZHRoKCk7CiAgICAgY2FsY0NvbHVtbldpZHRoKCk7CkBAIC0xMTY0LDcgKzExNjQs
NyBAQAogCiAgICAgY2xlYXJGbG9hdHMoKTsKIAotICAgIGludCBwcmV2aW91c0hlaWdodCA9IGxv
Z2ljYWxIZWlnaHQoKTsKKyAgICBmbG9hdCBwcmV2aW91c0hlaWdodCA9IGxvZ2ljYWxIZWlnaHQo
KTsKICAgICBzZXRMb2dpY2FsSGVpZ2h0KDApOwogICAgIGJvb2wgaGFzU3BlY2lmaWVkUGFnZUxv
Z2ljYWxIZWlnaHQgPSBmYWxzZTsKICAgICBib29sIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCA9
IGZhbHNlOwpAQCAtMTIyNyw5ICsxMjI3LDkgQEAKICAgICAgICAgICAgIGxheWVyKCktPnNldEhh
c1ZlcnRpY2FsU2Nyb2xsYmFyKHRydWUpOwogICAgIH0KIAotICAgIGludCByZXBhaW50TG9naWNh
bFRvcCA9IDA7Ci0gICAgaW50IHJlcGFpbnRMb2dpY2FsQm90dG9tID0gMDsKLSAgICBpbnQgbWF4
RmxvYXRMb2dpY2FsQm90dG9tID0gMDsKKyAgICBmbG9hdCByZXBhaW50TG9naWNhbFRvcCA9IDA7
CisgICAgZmxvYXQgcmVwYWludExvZ2ljYWxCb3R0b20gPSAwOworICAgIGZsb2F0IG1heEZsb2F0
TG9naWNhbEJvdHRvbSA9IDA7CiAgICAgaWYgKCFmaXJzdENoaWxkKCkgJiYgIWlzQW5vbnltb3Vz
QmxvY2soKSkKICAgICAgICAgc2V0Q2hpbGRyZW5JbmxpbmUodHJ1ZSk7CiAgICAgaWYgKGNoaWxk
cmVuSW5saW5lKCkpCkBAIC0xMjM4LDcgKzEyMzgsNyBAQAogICAgICAgICBsYXlvdXRCbG9ja0No
aWxkcmVuKHJlbGF5b3V0Q2hpbGRyZW4sIG1heEZsb2F0TG9naWNhbEJvdHRvbSk7CiAKICAgICAv
LyBFeHBhbmQgb3VyIGludHJpbnNpYyBoZWlnaHQgdG8gZW5jb21wYXNzIGZsb2F0cy4KLSAgICBp
bnQgdG9BZGQgPSBib3JkZXJBZnRlcigpICsgcGFkZGluZ0FmdGVyKCkgKyBzY3JvbGxiYXJMb2dp
Y2FsSGVpZ2h0KCk7CisgICAgZmxvYXQgdG9BZGQgPSBib3JkZXJBZnRlcigpICsgcGFkZGluZ0Fm
dGVyKCkgKyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCk7CiAgICAgaWYgKGxvd2VzdEZsb2F0TG9n
aWNhbEJvdHRvbSgpID4gKGxvZ2ljYWxIZWlnaHQoKSAtIHRvQWRkKSAmJiBleHBhbmRzVG9FbmNs
b3NlT3ZlcmhhbmdpbmdGbG9hdHMoKSkKICAgICAgICAgc2V0TG9naWNhbEhlaWdodChsb3dlc3RG
bG9hdExvZ2ljYWxCb3R0b20oKSArIHRvQWRkKTsKICAgICAKQEAgLTEyNDYsMTAgKzEyNDYsMTAg
QEAKICAgICAgICAgcmV0dXJuOwogIAogICAgIC8vIENhbGN1bGF0ZSBvdXIgbmV3IGhlaWdodC4K
LSAgICBpbnQgb2xkSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwotICAgIGludCBvbGRDbGllbnRB
ZnRlckVkZ2UgPSBjbGllbnRMb2dpY2FsQm90dG9tKCk7CisgICAgZmxvYXQgb2xkSGVpZ2h0ID0g
bG9naWNhbEhlaWdodCgpOworICAgIGZsb2F0IG9sZENsaWVudEFmdGVyRWRnZSA9IGNsaWVudExv
Z2ljYWxCb3R0b20oKTsKICAgICBjb21wdXRlTG9naWNhbEhlaWdodCgpOwotICAgIGludCBuZXdI
ZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7CisgICAgZmxvYXQgbmV3SGVpZ2h0ID0gbG9naWNhbEhl
aWdodCgpOwogICAgIGlmIChvbGRIZWlnaHQgIT0gbmV3SGVpZ2h0KSB7CiAgICAgICAgIGlmIChv
bGRIZWlnaHQgPiBuZXdIZWlnaHQgJiYgbWF4RmxvYXRMb2dpY2FsQm90dG9tID4gbmV3SGVpZ2h0
ICYmICFjaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgICAgICAvLyBPbmUgb2Ygb3VyIGNoaWxk
cmVuJ3MgZmxvYXRzIG1heSBoYXZlIGJlY29tZSBhbiBvdmVyaGFuZ2luZyBmbG9hdCBmb3IgdXMu
IFdlIG5lZWQgdG8gbG9vayBmb3IgaXQuCkBAIC0xMjg4LDggKzEyODgsOCBAQAogICAgIGlmICgh
ZGlkRnVsbFJlcGFpbnQgJiYgcmVwYWludExvZ2ljYWxUb3AgIT0gcmVwYWludExvZ2ljYWxCb3R0
b20gJiYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFIHx8IGVuY2xvc2luZ0xheWVy
KCktPmhhc1Zpc2libGVDb250ZW50KCkpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCB0
aWdodGVuIHVwIHRoZSBsZWZ0IGFuZCByaWdodCBpbnZhbGlkYXRpb24gcG9pbnRzIGlmIHdlIGxl
dCBsYXlvdXRJbmxpbmVDaGlsZHJlbiBmaWxsIHRoZW0gaW4gYmFzZWQgb2ZmIHRoZSBwYXJ0aWN1
bGFyIGxpbmVzCiAgICAgICAgIC8vIGl0IGhhZCB0byBsYXkgb3V0LiAgV2Ugd291bGRuJ3QgbmVl
ZCB0aGUgaGFzT3ZlcmZsb3dDbGlwKCkgaGFjayBpbiB0aGF0IGNhc2UgZWl0aGVyLgotICAgICAg
ICBpbnQgcmVwYWludExvZ2ljYWxMZWZ0ID0gbG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdygpOwot
ICAgICAgICBpbnQgcmVwYWludExvZ2ljYWxSaWdodCA9IGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJm
bG93KCk7CisgICAgICAgIGZsb2F0IHJlcGFpbnRMb2dpY2FsTGVmdCA9IGxvZ2ljYWxMZWZ0Vmlz
dWFsT3ZlcmZsb3coKTsKKyAgICAgICAgZmxvYXQgcmVwYWludExvZ2ljYWxSaWdodCA9IGxvZ2lj
YWxSaWdodFZpc3VhbE92ZXJmbG93KCk7CiAgICAgICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkg
ewogICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBjbGlwcGVkIG92ZXJmbG93LCB3ZSBzaG91bGQg
dXNlIGxheW91dCBvdmVyZmxvdyBhcyB3ZWxsLCBzaW5jZSB2aXN1YWwgb3ZlcmZsb3cgZnJvbSBs
aW5lcyBkaWRuJ3QgcHJvcGFnYXRlIHRvIG91ciBibG9jaydzIG92ZXJmbG93LgogICAgICAgICAg
ICAgLy8gTm90ZSB0aGUgb2xkIGNvZGUgZGlkIHRoaXMgYXMgd2VsbCBidXQgZXZlbiBmb3Igb3Zl
cmZsb3c6dmlzaWJsZS4gIFRoZSBhZGRpdGlvbiBvZiBoYXNPdmVyZmxvd0NsaXAoKSBhdCBsZWFz
dCB0aWdodGVucyB1cCB0aGUgaGFjayBhIGJpdC4KQEAgLTEyOTgsOSArMTI5OCw5IEBACiAgICAg
ICAgICAgICByZXBhaW50TG9naWNhbFJpZ2h0ID0gbWF4KHJlcGFpbnRMb2dpY2FsUmlnaHQsIGxv
Z2ljYWxSaWdodExheW91dE92ZXJmbG93KCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBJbnRSZWN0IHJlcGFpbnRSZWN0OworICAgICAgICBGbG9hdFJlY3QgcmVwYWludFJlY3Q7CiAg
ICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICAgICAgcmVwYWlu
dFJlY3QgPSBJbnRSZWN0KHJlcGFpbnRMb2dpY2FsTGVmdCwgcmVwYWludExvZ2ljYWxUb3AsIHJl
cGFpbnRMb2dpY2FsUmlnaHQgLSByZXBhaW50TG9naWNhbExlZnQsIHJlcGFpbnRMb2dpY2FsQm90
dG9tIC0gcmVwYWludExvZ2ljYWxUb3ApOworICAgICAgICAgICAgcmVwYWludFJlY3QgPSBGbG9h
dFJlY3QocmVwYWludExvZ2ljYWxMZWZ0LCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2lj
YWxSaWdodCAtIHJlcGFpbnRMb2dpY2FsTGVmdCwgcmVwYWludExvZ2ljYWxCb3R0b20gLSByZXBh
aW50TG9naWNhbFRvcCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlcGFpbnRSZWN0ID0g
SW50UmVjdChyZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxMZWZ0LCByZXBhaW50TG9n
aWNhbEJvdHRvbSAtIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbFJpZ2h0IC0gcmVw
YWludExvZ2ljYWxMZWZ0KTsKIApAQCAtMTMxOSw5ICsxMzE5LDkgQEAKIAogICAgICAgICAvLyBN
YWtlIHN1cmUgdGhlIHJlY3QgaXMgc3RpbGwgbm9uLWVtcHR5IGFmdGVyIGludGVyc2VjdGluZyBm
b3Igb3ZlcmZsb3cgYWJvdmUKICAgICAgICAgaWYgKCFyZXBhaW50UmVjdC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgIHJlcGFpbnRSZWN0YW5nbGUocmVwYWludFJlY3QpOyAvLyBXZSBuZWVkIHRv
IGRvIGEgcGFydGlhbCByZXBhaW50IG9mIG91ciBjb250ZW50LgorICAgICAgICAgICAgcmVwYWlu
dFJlY3RhbmdsZShlbmNsb3NpbmdJbnRSZWN0KHJlcGFpbnRSZWN0KSk7IC8vIFdlIG5lZWQgdG8g
ZG8gYSBwYXJ0aWFsIHJlcGFpbnQgb2Ygb3VyIGNvbnRlbnQuCiAgICAgICAgICAgICBpZiAoaGFz
UmVmbGVjdGlvbigpKQotICAgICAgICAgICAgICAgIHJlcGFpbnRSZWN0YW5nbGUocmVmbGVjdGVk
UmVjdChyZXBhaW50UmVjdCkpOworICAgICAgICAgICAgICAgIHJlcGFpbnRSZWN0YW5nbGUoZW5j
bG9zaW5nSW50UmVjdChyZWZsZWN0ZWRSZWN0KHJlcGFpbnRSZWN0KSkpOwogICAgICAgICB9CiAg
ICAgfQogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKQEAgLTEzMzcsMjggKzEzMzcsMjggQEAK
ICAgICB9IGVsc2UgewogICAgICAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygp
OwogICAgICAgICBpZiAoY29sdW1uQ291bnQoY29sSW5mbykpIHsKLSAgICAgICAgICAgIEludFJl
Y3QgbGFzdFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgY29sdW1uQ291bnQoY29sSW5mbykg
LSAxKTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBsYXN0UmVjdCA9IGNvbHVtblJlY3RBdChjb2xJ
bmZvLCBjb2x1bW5Db3VudChjb2xJbmZvKSAtIDEpOwogICAgICAgICAgICAgaWYgKGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBpbnQgb3ZlcmZsb3dMZWZ0ID0g
IXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1pbigwLCBsYXN0UmVjdC54KCkp
IDogMDsKLSAgICAgICAgICAgICAgICBpbnQgb3ZlcmZsb3dSaWdodCA9IHN0eWxlKCktPmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSA/IG1heCh3aWR0aCgpLCBsYXN0UmVjdC5tYXhYKCkpIDogMDsK
LSAgICAgICAgICAgICAgICBpbnQgb3ZlcmZsb3dIZWlnaHQgPSBib3JkZXJCZWZvcmUoKSArIHBh
ZGRpbmdCZWZvcmUoKSArIGNvbEluZm8tPmNvbHVtbkhlaWdodCgpOwotICAgICAgICAgICAgICAg
IGFkZExheW91dE92ZXJmbG93KEludFJlY3Qob3ZlcmZsb3dMZWZ0LCAwLCBvdmVyZmxvd1JpZ2h0
IC0gb3ZlcmZsb3dMZWZ0LCBvdmVyZmxvd0hlaWdodCkpOworICAgICAgICAgICAgICAgIGZsb2F0
IG92ZXJmbG93TGVmdCA9ICFzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtaW4o
MC4wZiwgbGFzdFJlY3QueCgpKSA6IDA7CisgICAgICAgICAgICAgICAgZmxvYXQgb3ZlcmZsb3dS
aWdodCA9IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1heCh3aWR0aCgpLCBs
YXN0UmVjdC5tYXhYKCkpIDogMDsKKyAgICAgICAgICAgICAgICBmbG9hdCBvdmVyZmxvd0hlaWdo
dCA9IGJvcmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpICsgY29sSW5mby0+Y29sdW1uSGVp
Z2h0KCk7CisgICAgICAgICAgICAgICAgYWRkTGF5b3V0T3ZlcmZsb3coRmxvYXRSZWN0KG92ZXJm
bG93TGVmdCwgMCwgb3ZlcmZsb3dSaWdodCAtIG92ZXJmbG93TGVmdCwgb3ZlcmZsb3dIZWlnaHQp
KTsKICAgICAgICAgICAgICAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICAgICAg
ICAgICAgICBhZGRWaXN1YWxPdmVyZmxvdyhJbnRSZWN0KG92ZXJmbG93TGVmdCwgMCwgb3ZlcmZs
b3dSaWdodCAtIG92ZXJmbG93TGVmdCwgb3ZlcmZsb3dIZWlnaHQpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYWRkVmlzdWFsT3ZlcmZsb3coRmxvYXRSZWN0KG92ZXJmbG93TGVmdCwgMCwgb3ZlcmZs
b3dSaWdodCAtIG92ZXJmbG93TGVmdCwgb3ZlcmZsb3dIZWlnaHQpKTsKICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgSW50UmVjdCBsYXN0UmVjdCA9IGNvbHVtblJlY3RBdChj
b2xJbmZvLCBjb2x1bW5Db3VudChjb2xJbmZvKSAtIDEpOwotICAgICAgICAgICAgICAgIGludCBv
dmVyZmxvd1RvcCA9ICFzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtaW4oMCwg
bGFzdFJlY3QueSgpKSA6IDA7Ci0gICAgICAgICAgICAgICAgaW50IG92ZXJmbG93Qm90dG9tID0g
c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWF4KGhlaWdodCgpLCBsYXN0UmVj
dC5tYXhZKCkpIDogMDsKLSAgICAgICAgICAgICAgICBpbnQgb3ZlcmZsb3dXaWR0aCA9IGJvcmRl
ckJlZm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpICsgY29sSW5mby0+Y29sdW1uSGVpZ2h0KCk7Ci0g
ICAgICAgICAgICAgICAgYWRkTGF5b3V0T3ZlcmZsb3coSW50UmVjdCgwLCBvdmVyZmxvd1RvcCwg
b3ZlcmZsb3dXaWR0aCwgb3ZlcmZsb3dCb3R0b20gLSBvdmVyZmxvd1RvcCkpOworICAgICAgICAg
ICAgICAgIEZsb2F0UmVjdCBsYXN0UmVjdCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBjb2x1bW5D
b3VudChjb2xJbmZvKSAtIDEpOworICAgICAgICAgICAgICAgIGZsb2F0IG92ZXJmbG93VG9wID0g
IXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1pbigwLjBmLCBsYXN0UmVjdC55
KCkpIDogMDsKKyAgICAgICAgICAgICAgICBmbG9hdCBvdmVyZmxvd0JvdHRvbSA9IHN0eWxlKCkt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1heChoZWlnaHQoKSwgbGFzdFJlY3QubWF4WSgp
KSA6IDA7CisgICAgICAgICAgICAgICAgZmxvYXQgb3ZlcmZsb3dXaWR0aCA9IGJvcmRlckJlZm9y
ZSgpICsgcGFkZGluZ0JlZm9yZSgpICsgY29sSW5mby0+Y29sdW1uSGVpZ2h0KCk7CisgICAgICAg
ICAgICAgICAgYWRkTGF5b3V0T3ZlcmZsb3coRmxvYXRSZWN0KDAsIG92ZXJmbG93VG9wLCBvdmVy
Zmxvd1dpZHRoLCBvdmVyZmxvd0JvdHRvbSAtIG92ZXJmbG93VG9wKSk7CiAgICAgICAgICAgICAg
ICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgICAgICAgICAgICAgYWRkVmlzdWFs
T3ZlcmZsb3coSW50UmVjdCgwLCBvdmVyZmxvd1RvcCwgb3ZlcmZsb3dXaWR0aCwgb3ZlcmZsb3dC
b3R0b20gLSBvdmVyZmxvd1RvcCkpOworICAgICAgICAgICAgICAgICAgICBhZGRWaXN1YWxPdmVy
ZmxvdyhGbG9hdFJlY3QoMCwgb3ZlcmZsb3dUb3AsIG92ZXJmbG93V2lkdGgsIG92ZXJmbG93Qm90
dG9tIC0gb3ZlcmZsb3dUb3ApKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0K
IAotdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZU92ZXJmbG93KGludCBvbGRDbGllbnRBZnRlckVk
Z2UsIGJvb2wgcmVjb21wdXRlRmxvYXRzKQordm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZU92ZXJm
bG93KGZsb2F0IG9sZENsaWVudEFmdGVyRWRnZSwgYm9vbCByZWNvbXB1dGVGbG9hdHMpCiB7CiAg
ICAgLy8gQWRkIG92ZXJmbG93IGZyb20gY2hpbGRyZW4uCiAgICAgYWRkT3ZlcmZsb3dGcm9tQ2hp
bGRyZW4oKTsKQEAgLTEzNzMsMTIgKzEzNzMsMTIgQEAKICAgICAgICAgLy8gV2hlbiB3ZSBoYXZl
IG92ZXJmbG93IGNsaXAsIHByb3BhZ2F0ZSB0aGUgb3JpZ2luYWwgc3BpbGxvdXQgc2luY2UgaXQg
d2lsbCBpbmNsdWRlIGNvbGxhcHNlZCBib3R0b20gbWFyZ2lucwogICAgICAgICAvLyBhbmQgYm90
dG9tIHBhZGRpbmcuICBTZXQgdGhlIGF4aXMgd2UgZG9uJ3QgY2FyZSBhYm91dCB0byBiZSAxLCBz
aW5jZSB3ZSB3YW50IHRoaXMgb3ZlcmZsb3cgdG8gYWx3YXlzCiAgICAgICAgIC8vIGJlIGNvbnNp
ZGVyZWQgcmVhY2hhYmxlLgotICAgICAgICBJbnRSZWN0IGNsaWVudFJlY3QoY2xpZW50Qm94UmVj
dCgpKTsKLSAgICAgICAgSW50UmVjdCByZWN0VG9BcHBseTsKKyAgICAgICAgRmxvYXRSZWN0IGNs
aWVudFJlY3QoY2xpZW50Qm94UmVjdCgpKTsKKyAgICAgICAgRmxvYXRSZWN0IHJlY3RUb0FwcGx5
OwogICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgIHJl
Y3RUb0FwcGx5ID0gSW50UmVjdChjbGllbnRSZWN0LngoKSwgY2xpZW50UmVjdC55KCksIDEsIG1h
eCgwLCBvbGRDbGllbnRBZnRlckVkZ2UgLSBjbGllbnRSZWN0LnkoKSkpOworICAgICAgICAgICAg
cmVjdFRvQXBwbHkgPSBGbG9hdFJlY3QoY2xpZW50UmVjdC54KCksIGNsaWVudFJlY3QueSgpLCAx
LCBtYXgoMC4wZiwgb2xkQ2xpZW50QWZ0ZXJFZGdlIC0gY2xpZW50UmVjdC55KCkpKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgcmVjdFRvQXBwbHkgPSBJbnRSZWN0KGNsaWVudFJlY3QueCgp
LCBjbGllbnRSZWN0LnkoKSwgbWF4KDAsIG9sZENsaWVudEFmdGVyRWRnZSAtIGNsaWVudFJlY3Qu
eCgpKSwgMSk7CisgICAgICAgICAgICByZWN0VG9BcHBseSA9IEZsb2F0UmVjdChjbGllbnRSZWN0
LngoKSwgY2xpZW50UmVjdC55KCksIG1heCgwLjBmLCBvbGRDbGllbnRBZnRlckVkZ2UgLSBjbGll
bnRSZWN0LngoKSksIDEpOwogICAgICAgICBhZGRMYXlvdXRPdmVyZmxvdyhyZWN0VG9BcHBseSk7
CiAgICAgfQogICAgICAgICAKQEAgLTE1NzIsMTQgKzE1NzIsMTQgQEAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotaW50IFJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMoUmVuZGVyQm94KiBjaGls
ZCwgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbykKK2Zsb2F0IFJlbmRlckJsb2NrOjpjb2xsYXBzZU1h
cmdpbnMoUmVuZGVyQm94KiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbykKIHsKICAgICAv
LyBHZXQgdGhlIGZvdXIgbWFyZ2luIHZhbHVlcyBmb3IgdGhlIGNoaWxkIGFuZCBjYWNoZSB0aGVt
LgogICAgIGNvbnN0IE1hcmdpblZhbHVlcyBjaGlsZE1hcmdpbnMgPSBtYXJnaW5WYWx1ZXNGb3JD
aGlsZChjaGlsZCk7CiAKICAgICAvLyBHZXQgb3VyIG1heCBwb3MgYW5kIG5lZyB0b3AgbWFyZ2lu
cy4KLSAgICBpbnQgcG9zVG9wID0gY2hpbGRNYXJnaW5zLnBvc2l0aXZlTWFyZ2luQmVmb3JlKCk7
Ci0gICAgaW50IG5lZ1RvcCA9IGNoaWxkTWFyZ2lucy5uZWdhdGl2ZU1hcmdpbkJlZm9yZSgpOwor
ICAgIGZsb2F0IHBvc1RvcCA9IGNoaWxkTWFyZ2lucy5wb3NpdGl2ZU1hcmdpbkJlZm9yZSgpOwor
ICAgIGZsb2F0IG5lZ1RvcCA9IGNoaWxkTWFyZ2lucy5uZWdhdGl2ZU1hcmdpbkJlZm9yZSgpOwog
CiAgICAgLy8gRm9yIHNlbGYtY29sbGFwc2luZyBibG9ja3MsIGNvbGxhcHNlIG91ciBib3R0b20g
bWFyZ2lucyBpbnRvIG91cgogICAgIC8vIHRvcCB0byBnZXQgbmV3IHBvc1RvcCBhbmQgbmVnVG9w
IHZhbHVlcy4KQEAgLTE2MjAsMTQgKzE2MjAsMTQgQEAKICAgICBpZiAobWFyZ2luSW5mby5xdWly
a0NvbnRhaW5lcigpICYmIG1hcmdpbkluZm8uYXRCZWZvcmVTaWRlT2ZCbG9jaygpICYmIChwb3NU
b3AgLSBuZWdUb3ApKQogICAgICAgICBtYXJnaW5JbmZvLnNldE1hcmdpbkJlZm9yZVF1aXJrKHRv
cFF1aXJrKTsKIAotICAgIGludCBiZWZvcmVDb2xsYXBzZUxvZ2ljYWxUb3AgPSBsb2dpY2FsSGVp
Z2h0KCk7Ci0gICAgaW50IGxvZ2ljYWxUb3AgPSBiZWZvcmVDb2xsYXBzZUxvZ2ljYWxUb3A7Cisg
ICAgZmxvYXQgYmVmb3JlQ29sbGFwc2VMb2dpY2FsVG9wID0gbG9naWNhbEhlaWdodCgpOworICAg
IGZsb2F0IGxvZ2ljYWxUb3AgPSBiZWZvcmVDb2xsYXBzZUxvZ2ljYWxUb3A7CiAgICAgaWYgKGNo
aWxkLT5pc1NlbGZDb2xsYXBzaW5nQmxvY2soKSkgewogICAgICAgICAvLyBUaGlzIGNoaWxkIGhh
cyBubyBoZWlnaHQuICBXZSBuZWVkIHRvIGNvbXB1dGUgb3VyCiAgICAgICAgIC8vIHBvc2l0aW9u
IGJlZm9yZSB3ZSBjb2xsYXBzZSB0aGUgY2hpbGQncyBtYXJnaW5zIHRvZ2V0aGVyLAogICAgICAg
ICAvLyBzbyB0aGF0IHdlIGNhbiBnZXQgYW4gYWNjdXJhdGUgcG9zaXRpb24gZm9yIHRoZSB6ZXJv
LWhlaWdodCBibG9jay4KLSAgICAgICAgaW50IGNvbGxhcHNlZEJlZm9yZVBvcyA9IG1heChtYXJn
aW5JbmZvLnBvc2l0aXZlTWFyZ2luKCksIGNoaWxkTWFyZ2lucy5wb3NpdGl2ZU1hcmdpbkJlZm9y
ZSgpKTsKLSAgICAgICAgaW50IGNvbGxhcHNlZEJlZm9yZU5lZyA9IG1heChtYXJnaW5JbmZvLm5l
Z2F0aXZlTWFyZ2luKCksIGNoaWxkTWFyZ2lucy5uZWdhdGl2ZU1hcmdpbkJlZm9yZSgpKTsKKyAg
ICAgICAgZmxvYXQgY29sbGFwc2VkQmVmb3JlUG9zID0gbWF4KG1hcmdpbkluZm8ucG9zaXRpdmVN
YXJnaW4oKSwgY2hpbGRNYXJnaW5zLnBvc2l0aXZlTWFyZ2luQmVmb3JlKCkpOworICAgICAgICBm
bG9hdCBjb2xsYXBzZWRCZWZvcmVOZWcgPSBtYXgobWFyZ2luSW5mby5uZWdhdGl2ZU1hcmdpbigp
LCBjaGlsZE1hcmdpbnMubmVnYXRpdmVNYXJnaW5CZWZvcmUoKSk7CiAgICAgICAgIG1hcmdpbklu
Zm8uc2V0TWFyZ2luKGNvbGxhcHNlZEJlZm9yZVBvcywgY29sbGFwc2VkQmVmb3JlTmVnKTsKICAg
ICAgICAgCiAgICAgICAgIC8vIE5vdyBjb2xsYXBzZSB0aGUgY2hpbGQncyBtYXJnaW5zIHRvZ2V0
aGVyLCB3aGljaCBtZWFucyBleGFtaW5pbmcgb3VyCkBAIC0xNjY3LDE2ICsxNjY3LDE2IEBACiAg
ICAgLy8gY29sbGFwc2VkIGludG8gdGhlIHBhZ2UgZWRnZS4KICAgICBib29sIHBhZ2luYXRlZCA9
IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+aXNQYWdpbmF0ZWQoKTsKICAgICBpZiAocGFnaW5hdGVk
ICYmIGxvZ2ljYWxUb3AgPiBiZWZvcmVDb2xsYXBzZUxvZ2ljYWxUb3ApIHsKLSAgICAgICAgaW50
IG9sZExvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wOworICAgICAgICBmbG9hdCBvbGRMb2dpY2FsVG9w
ID0gbG9naWNhbFRvcDsKICAgICAgICAgbG9naWNhbFRvcCA9IG1pbihsb2dpY2FsVG9wLCBuZXh0
UGFnZUxvZ2ljYWxUb3AoYmVmb3JlQ29sbGFwc2VMb2dpY2FsVG9wKSk7CiAgICAgICAgIHNldExv
Z2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCgpICsgKGxvZ2ljYWxUb3AgLSBvbGRMb2dpY2FsVG9w
KSk7CiAgICAgfQogICAgIHJldHVybiBsb2dpY2FsVG9wOwogfQogCi1pbnQgUmVuZGVyQmxvY2s6
OmNsZWFyRmxvYXRzSWZOZWVkZWQoUmVuZGVyQm94KiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFyZ2lu
SW5mbywgaW50IG9sZFRvcFBvc01hcmdpbiwgaW50IG9sZFRvcE5lZ01hcmdpbiwgaW50IHlQb3Mp
CitmbG9hdCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHNJZk5lZWRlZChSZW5kZXJCb3gqIGNoaWxk
LCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvLCBmbG9hdCBvbGRUb3BQb3NNYXJnaW4sIGZsb2F0IG9s
ZFRvcE5lZ01hcmdpbiwgZmxvYXQgeVBvcykKIHsKLSAgICBpbnQgaGVpZ2h0SW5jcmVhc2UgPSBn
ZXRDbGVhckRlbHRhKGNoaWxkLCB5UG9zKTsKKyAgICBmbG9hdCBoZWlnaHRJbmNyZWFzZSA9IGdl
dENsZWFyRGVsdGEoY2hpbGQsIHlQb3MpOwogICAgIGlmICghaGVpZ2h0SW5jcmVhc2UpCiAgICAg
ICAgIHJldHVybiB5UG9zOwogCkBAIC0xNzA1LDcgKzE3MDUsNyBAQAogICAgICAgICAKICAgICAg
ICAgLy8gQWRqdXN0IG91ciBoZWlnaHQgc3VjaCB0aGF0IHdlIGFyZSByZWFkeSB0byBiZSBjb2xs
YXBzZWQgd2l0aCBzdWJzZXF1ZW50IHNpYmxpbmdzIChvciB0aGUgYm90dG9tCiAgICAgICAgIC8v
IG9mIHRoZSBwYXJlbnQgYmxvY2spLgotICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGNoaWxkLT55
KCkgLSBtYXgoMCwgbWFyZ2luSW5mby5tYXJnaW4oKSkpOworICAgICAgICBzZXRMb2dpY2FsSGVp
Z2h0KGNoaWxkLT55KCkgLSBtYXgoMC4wZiwgbWFyZ2luSW5mby5tYXJnaW4oKSkpOwogICAgIH0g
ZWxzZQogICAgICAgICAvLyBJbmNyZWFzZSBvdXIgaGVpZ2h0IGJ5IHRoZSBhbW91bnQgd2UgaGFk
IHRvIGNsZWFyLgogICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGhlaWdodCgpICsgaGVpZ2h0SW5j
cmVhc2UpOwpAQCAtMTcyMywxMyArMTcyMywxMyBAQAogICAgIHJldHVybiB5UG9zICsgaGVpZ2h0
SW5jcmVhc2U7CiB9CiAKLWludCBSZW5kZXJCbG9jazo6ZXN0aW1hdGVMb2dpY2FsVG9wUG9zaXRp
b24oUmVuZGVyQm94KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbykKK2Zsb2F0
IFJlbmRlckJsb2NrOjplc3RpbWF0ZUxvZ2ljYWxUb3BQb3NpdGlvbihSZW5kZXJCb3gqIGNoaWxk
LCBjb25zdCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvKQogewogICAgIC8vIEZJWE1FOiBXZSBuZWVk
IHRvIGVsaW1pbmF0ZSB0aGUgZXN0aW1hdGlvbiBvZiB2ZXJ0aWNhbCBwb3NpdGlvbiwgYmVjYXVz
ZSB3aGVuIGl0J3Mgd3Jvbmcgd2Ugc29tZXRpbWVzIHRyaWdnZXIgYSBwYXRob2xvZ2ljYWwKICAg
ICAvLyByZWxheW91dCBpZiB0aGVyZSBhcmUgaW50cnVkaW5nIGZsb2F0cy4KLSAgICBpbnQgbG9n
aWNhbFRvcEVzdGltYXRlID0gbG9naWNhbEhlaWdodCgpOworICAgIGZsb2F0IGxvZ2ljYWxUb3BF
c3RpbWF0ZSA9IGxvZ2ljYWxIZWlnaHQoKTsKICAgICBpZiAoIW1hcmdpbkluZm8uY2FuQ29sbGFw
c2VXaXRoTWFyZ2luQmVmb3JlKCkpIHsKLSAgICAgICAgaW50IGNoaWxkTWFyZ2luQmVmb3JlID0g
Y2hpbGQtPnNlbGZOZWVkc0xheW91dCgpID8gbWFyZ2luQmVmb3JlRm9yQ2hpbGQoY2hpbGQpIDog
Y29sbGFwc2VkTWFyZ2luQmVmb3JlRm9yQ2hpbGQoY2hpbGQpOworICAgICAgICBmbG9hdCBjaGls
ZE1hcmdpbkJlZm9yZSA9IGNoaWxkLT5zZWxmTmVlZHNMYXlvdXQoKSA/IG1hcmdpbkJlZm9yZUZv
ckNoaWxkKGNoaWxkKSA6IGNvbGxhcHNlZE1hcmdpbkJlZm9yZUZvckNoaWxkKGNoaWxkKTsKICAg
ICAgICAgbG9naWNhbFRvcEVzdGltYXRlICs9IG1heChtYXJnaW5JbmZvLm1hcmdpbigpLCBjaGls
ZE1hcmdpbkJlZm9yZSk7CiAgICAgfQogICAgIApAQCAtMTc1OCwxNyArMTc1OCwxNyBAQAogCiB2
b2lkIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVMb2dpY2FsTGVmdFBvc2l0aW9uRm9yQ2hpbGQoUmVu
ZGVyQm94KiBjaGlsZCkKIHsKLSAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IGJvcmRlclN0YXJ0KCkg
KyBwYWRkaW5nU3RhcnQoKTsKLSAgICBpbnQgdG90YWxBdmFpbGFibGVMb2dpY2FsV2lkdGggPSBi
b3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCkgKyBhdmFpbGFibGVMb2dpY2FsV2lkdGgoKTsK
KyAgICBmbG9hdCBzdGFydFBvc2l0aW9uID0gYm9yZGVyU3RhcnQoKSArIHBhZGRpbmdTdGFydCgp
OworICAgIGZsb2F0IHRvdGFsQXZhaWxhYmxlTG9naWNhbFdpZHRoID0gYm9yZGVyQW5kUGFkZGlu
Z0xvZ2ljYWxXaWR0aCgpICsgYXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7CiAKICAgICAvLyBBZGQg
aW4gb3VyIHN0YXJ0IG1hcmdpbi4KLSAgICBpbnQgY2hpbGRNYXJnaW5TdGFydCA9IG1hcmdpblN0
YXJ0Rm9yQ2hpbGQoY2hpbGQpOwotICAgIGludCBuZXdQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24g
KyBjaGlsZE1hcmdpblN0YXJ0OworICAgIGZsb2F0IGNoaWxkTWFyZ2luU3RhcnQgPSBtYXJnaW5T
dGFydEZvckNoaWxkKGNoaWxkKTsKKyAgICBmbG9hdCBuZXdQb3NpdGlvbiA9IHN0YXJ0UG9zaXRp
b24gKyBjaGlsZE1hcmdpblN0YXJ0OwogICAgICAgICAKICAgICAvLyBTb21lIG9iamVjdHMgKGUu
Zy4sIHRhYmxlcywgaG9yaXpvbnRhbCBydWxlcywgb3ZlcmZsb3c6YXV0byBibG9ja3MpIGF2b2lk
IGZsb2F0cy4gIFRoZXkgbmVlZAogICAgIC8vIHRvIHNoaWZ0IG92ZXIgYXMgbmVjZXNzYXJ5IHRv
IGRvZGdlIGFueSBmbG9hdHMgdGhhdCBtaWdodCBnZXQgaW4gdGhlIHdheS4KICAgICBpZiAoY2hp
bGQtPmF2b2lkc0Zsb2F0cygpKSB7Ci0gICAgICAgIGludCBzdGFydE9mZiA9IHN0eWxlKCktPmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShsb2dpY2Fs
SGVpZ2h0KCksIGZhbHNlKSA6IHRvdGFsQXZhaWxhYmxlTG9naWNhbFdpZHRoIC0gbG9naWNhbFJp
Z2h0T2Zmc2V0Rm9yTGluZShsb2dpY2FsSGVpZ2h0KCksIGZhbHNlKTsKKyAgICAgICAgZmxvYXQg
c3RhcnRPZmYgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsb2dpY2FsTGVm
dE9mZnNldEZvckxpbmUobG9naWNhbEhlaWdodCgpLCBmYWxzZSkgOiB0b3RhbEF2YWlsYWJsZUxv
Z2ljYWxXaWR0aCAtIGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUobG9naWNhbEhlaWdodCgpLCBm
YWxzZSk7CiAgICAgICAgIGlmIChzdHlsZSgpLT50ZXh0QWxpZ24oKSAhPSBXRUJLSVRfQ0VOVEVS
ICYmICFjaGlsZC0+c3R5bGUoKS0+bWFyZ2luU3RhcnRVc2luZyhzdHlsZSgpKS5pc0F1dG8oKSkg
ewogICAgICAgICAgICAgaWYgKGNoaWxkTWFyZ2luU3RhcnQgPCAwKQogICAgICAgICAgICAgICAg
IHN0YXJ0T2ZmICs9IGNoaWxkTWFyZ2luU3RhcnQ7CkBAIC0xODA1LDcgKzE4MDUsNyBAQAogICAg
IH0KIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6aGFuZGxlQWZ0ZXJTaWRlT2ZCbG9jayhpbnQgYmVm
b3JlU2lkZSwgaW50IGFmdGVyU2lkZSwgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbykKK3ZvaWQgUmVu
ZGVyQmxvY2s6OmhhbmRsZUFmdGVyU2lkZU9mQmxvY2soZmxvYXQgIGJlZm9yZVNpZGUsIGZsb2F0
IGFmdGVyU2lkZSwgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbykKIHsKICAgICBtYXJnaW5JbmZvLnNl
dEF0QWZ0ZXJTaWRlT2ZCbG9jayh0cnVlKTsKIApAQCAtMTgyNSwzMyArMTgyNSwzMyBAQAogICAg
IHNldENvbGxhcHNlZEJvdHRvbU1hcmdpbihtYXJnaW5JbmZvKTsKIH0KIAotdm9pZCBSZW5kZXJC
bG9jazo6c2V0TG9naWNhbExlZnRGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBpbnQgbG9naWNh
bExlZnQsIEFwcGx5TGF5b3V0RGVsdGFNb2RlIGFwcGx5RGVsdGEpCit2b2lkIFJlbmRlckJsb2Nr
OjpzZXRMb2dpY2FsTGVmdEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQsIGZsb2F0IGxvZ2ljYWxM
ZWZ0LCBBcHBseUxheW91dERlbHRhTW9kZSBhcHBseURlbHRhKQogewogICAgIGlmIChpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgIGlmIChhcHBseURlbHRhID09IEFwcGx5TGF5
b3V0RGVsdGEpCi0gICAgICAgICAgICB2aWV3KCktPmFkZExheW91dERlbHRhKEludFNpemUoY2hp
bGQtPngoKSAtIGxvZ2ljYWxMZWZ0LCAwKSk7CisgICAgICAgICAgICB2aWV3KCktPmFkZExheW91
dERlbHRhKEZsb2F0U2l6ZShjaGlsZC0+eCgpIC0gbG9naWNhbExlZnQsIDApKTsKICAgICAgICAg
Y2hpbGQtPnNldFgobG9naWNhbExlZnQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChhcHBs
eURlbHRhID09IEFwcGx5TGF5b3V0RGVsdGEpCi0gICAgICAgICAgICB2aWV3KCktPmFkZExheW91
dERlbHRhKEludFNpemUoMCwgY2hpbGQtPnkoKSAtIGxvZ2ljYWxMZWZ0KSk7CisgICAgICAgICAg
ICB2aWV3KCktPmFkZExheW91dERlbHRhKEZsb2F0U2l6ZSgwLCBjaGlsZC0+eSgpIC0gbG9naWNh
bExlZnQpKTsKICAgICAgICAgY2hpbGQtPnNldFkobG9naWNhbExlZnQpOwogICAgIH0KIH0KIAot
dm9pZCBSZW5kZXJCbG9jazo6c2V0TG9naWNhbFRvcEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQs
IGludCBsb2dpY2FsVG9wLCBBcHBseUxheW91dERlbHRhTW9kZSBhcHBseURlbHRhKQordm9pZCBS
ZW5kZXJCbG9jazo6c2V0TG9naWNhbFRvcEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQsIGZsb2F0
IGxvZ2ljYWxUb3AsIEFwcGx5TGF5b3V0RGVsdGFNb2RlIGFwcGx5RGVsdGEpCiB7CiAgICAgaWYg
KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgaWYgKGFwcGx5RGVsdGEgPT0g
QXBwbHlMYXlvdXREZWx0YSkKLSAgICAgICAgICAgIHZpZXcoKS0+YWRkTGF5b3V0RGVsdGEoSW50
U2l6ZSgwLCBjaGlsZC0+eSgpIC0gbG9naWNhbFRvcCkpOworICAgICAgICAgICAgdmlldygpLT5h
ZGRMYXlvdXREZWx0YShGbG9hdFNpemUoMCwgY2hpbGQtPnkoKSAtIGxvZ2ljYWxUb3ApKTsKICAg
ICAgICAgY2hpbGQtPnNldFkobG9naWNhbFRvcCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYg
KGFwcGx5RGVsdGEgPT0gQXBwbHlMYXlvdXREZWx0YSkKLSAgICAgICAgICAgIHZpZXcoKS0+YWRk
TGF5b3V0RGVsdGEoSW50U2l6ZShjaGlsZC0+eCgpIC0gbG9naWNhbFRvcCwgMCkpOworICAgICAg
ICAgICAgdmlldygpLT5hZGRMYXlvdXREZWx0YShGbG9hdFNpemUoY2hpbGQtPngoKSAtIGxvZ2lj
YWxUb3AsIDApKTsKICAgICAgICAgY2hpbGQtPnNldFgobG9naWNhbFRvcCk7CiAgICAgfQogfQog
Ci12b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGls
ZHJlbiwgaW50JiBtYXhGbG9hdExvZ2ljYWxCb3R0b20pCit2b2lkIFJlbmRlckJsb2NrOjpsYXlv
dXRCbG9ja0NoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgZmxvYXQmIG1heEZsb2F0TG9n
aWNhbEJvdHRvbSkKIHsKICAgICBpZiAoZ1BlcmNlbnRIZWlnaHREZXNjZW5kYW50c01hcCkgewog
ICAgICAgICBpZiAoSGFzaFNldDxSZW5kZXJCb3gqPiogZGVzY2VuZGFudHMgPSBnUGVyY2VudEhl
aWdodERlc2NlbmRhbnRzTWFwLT5nZXQodGhpcykpIHsKQEAgLTE4NzEsOCArMTg3MSw4IEBACiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpbnQgYmVmb3JlRWRnZSA9IGJvcmRlckJlZm9yZSgpICsg
cGFkZGluZ0JlZm9yZSgpOwotICAgIGludCBhZnRlckVkZ2UgPSBib3JkZXJBZnRlcigpICsgcGFk
ZGluZ0FmdGVyKCkgKyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCk7CisgICAgZmxvYXQgYmVmb3Jl
RWRnZSA9IGJvcmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpOworICAgIGZsb2F0IGFmdGVy
RWRnZSA9IGJvcmRlckFmdGVyKCkgKyBwYWRkaW5nQWZ0ZXIoKSArIHNjcm9sbGJhckxvZ2ljYWxI
ZWlnaHQoKTsKIAogICAgIHNldExvZ2ljYWxIZWlnaHQoYmVmb3JlRWRnZSk7CiAKQEAgLTE4ODQs
NyArMTg4NCw3IEBACiAgICAgLy8gSXQgZG9lc24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIG5vcm1h
bCBsYXlvdXQgcHJvY2VzcyBidXQgaXMgaW5zdGVhZCBza2lwcGVkLgogICAgIFJlbmRlck9iamVj
dCogY2hpbGRUb0V4Y2x1ZGUgPSBsYXlvdXRTcGVjaWFsRXhjbHVkZWRDaGlsZChyZWxheW91dENo
aWxkcmVuKTsKIAotICAgIGludCBwcmV2aW91c0Zsb2F0TG9naWNhbEJvdHRvbSA9IDA7CisgICAg
ZmxvYXQgcHJldmlvdXNGbG9hdExvZ2ljYWxCb3R0b20gPSAwOwogICAgIG1heEZsb2F0TG9naWNh
bEJvdHRvbSA9IDA7CiAKICAgICBSZW5kZXJCb3gqIG5leHQgPSBmaXJzdENoaWxkQm94KCk7CkBA
IC0xOTIwLDEwICsxOTIwLDEwIEBACiAgICAgaGFuZGxlQWZ0ZXJTaWRlT2ZCbG9jayhiZWZvcmVF
ZGdlLCBhZnRlckVkZ2UsIG1hcmdpbkluZm8pOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpsYXlv
dXRCbG9ja0NoaWxkKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mIG1hcmdpbkluZm8sIGlu
dCYgcHJldmlvdXNGbG9hdExvZ2ljYWxCb3R0b20sIGludCYgbWF4RmxvYXRMb2dpY2FsQm90dG9t
KQordm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBN
YXJnaW5JbmZvJiBtYXJnaW5JbmZvLCBmbG9hdCYgcHJldmlvdXNGbG9hdExvZ2ljYWxCb3R0b20s
IGZsb2F0JiBtYXhGbG9hdExvZ2ljYWxCb3R0b20pCiB7Ci0gICAgaW50IG9sZFBvc01hcmdpbkJl
Zm9yZSA9IG1heFBvc2l0aXZlTWFyZ2luQmVmb3JlKCk7Ci0gICAgaW50IG9sZE5lZ01hcmdpbkJl
Zm9yZSA9IG1heE5lZ2F0aXZlTWFyZ2luQmVmb3JlKCk7CisgICAgZmxvYXQgb2xkUG9zTWFyZ2lu
QmVmb3JlID0gbWF4UG9zaXRpdmVNYXJnaW5CZWZvcmUoKTsKKyAgICBmbG9hdCBvbGROZWdNYXJn
aW5CZWZvcmUgPSBtYXhOZWdhdGl2ZU1hcmdpbkJlZm9yZSgpOwogCiAgICAgLy8gVGhlIGNoaWxk
IGlzIGEgbm9ybWFsIGZsb3cgb2JqZWN0LiAgQ29tcHV0ZSB0aGUgbWFyZ2lucyB3ZSB3aWxsIHVz
ZSBmb3IgY29sbGFwc2luZyBub3cuCiAgICAgY2hpbGQtPmNvbXB1dGVCbG9ja0RpcmVjdGlvbk1h
cmdpbnModGhpcyk7CkBAIC0xOTM3LDE0ICsxOTM3LDE0IEBACiAgICAgLy8gVHJ5IHRvIGd1ZXNz
IG91ciBjb3JyZWN0IGxvZ2ljYWwgdG9wIHBvc2l0aW9uLiAgSW4gbW9zdCBjYXNlcyB0aGlzIGd1
ZXNzIHdpbGwKICAgICAvLyBiZSBjb3JyZWN0LiAgT25seSBpZiB3ZSdyZSB3cm9uZyAod2hlbiB3
ZSBjb21wdXRlIHRoZSByZWFsIGxvZ2ljYWwgdG9wIHBvc2l0aW9uKQogICAgIC8vIHdpbGwgd2Ug
aGF2ZSB0byBwb3RlbnRpYWxseSByZWxheW91dC4KLSAgICBpbnQgbG9naWNhbFRvcEVzdGltYXRl
ID0gZXN0aW1hdGVMb2dpY2FsVG9wUG9zaXRpb24oY2hpbGQsIG1hcmdpbkluZm8pOworICAgIGZs
b2F0IGxvZ2ljYWxUb3BFc3RpbWF0ZSA9IGVzdGltYXRlTG9naWNhbFRvcFBvc2l0aW9uKGNoaWxk
LCBtYXJnaW5JbmZvKTsKIAogICAgIC8vIENhY2hlIG91ciBvbGQgcmVjdCBzbyB0aGF0IHdlIGNh
biBkaXJ0eSB0aGUgcHJvcGVyIHJlcGFpbnQgcmVjdHMgaWYgdGhlIGNoaWxkIG1vdmVzLgotICAg
IEludFJlY3Qgb2xkUmVjdChjaGlsZC0+eCgpLCBjaGlsZC0+eSgpICwgY2hpbGQtPndpZHRoKCks
IGNoaWxkLT5oZWlnaHQoKSk7Ci0gICAgaW50IG9sZExvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wRm9y
Q2hpbGQoY2hpbGQpOworICAgIEZsb2F0UmVjdCBvbGRSZWN0KGNoaWxkLT54KCksIGNoaWxkLT55
KCkgLCBjaGlsZC0+d2lkdGgoKSwgY2hpbGQtPmhlaWdodCgpKTsKKyAgICBmbG9hdCBvbGRMb2dp
Y2FsVG9wID0gbG9naWNhbFRvcEZvckNoaWxkKGNoaWxkKTsKIAogI2lmbmRlZiBOREVCVUcKLSAg
ICBJbnRTaXplIG9sZExheW91dERlbHRhID0gdmlldygpLT5sYXlvdXREZWx0YSgpOworICAgIEZs
b2F0U2l6ZSBvbGRMYXlvdXREZWx0YSA9IHZpZXcoKS0+bGF5b3V0RGVsdGEoKTsKICNlbmRpZgog
ICAgIC8vIEdvIGFoZWFkIGFuZCBwb3NpdGlvbiB0aGUgY2hpbGQgYXMgdGhvdWdoIGl0IGRpZG4n
dCBjb2xsYXBzZSB3aXRoIHRoZSB0b3AuCiAgICAgc2V0TG9naWNhbFRvcEZvckNoaWxkKGNoaWxk
LCBsb2dpY2FsVG9wRXN0aW1hdGUsIEFwcGx5TGF5b3V0RGVsdGEpOwpAQCAtMTk1Niw3ICsxOTU2
LDcgQEAKICAgICBlbHNlIGlmICghY2hpbGQtPmF2b2lkc0Zsb2F0cygpIHx8IGNoaWxkLT5zaHJp
bmtUb0F2b2lkRmxvYXRzKCkpIHsKICAgICAgICAgLy8gSWYgYW4gZWxlbWVudCBtaWdodCBiZSBh
ZmZlY3RlZCBieSB0aGUgcHJlc2VuY2Ugb2YgZmxvYXRzLCB0aGVuIGFsd2F5cyBtYXJrIGl0IGZv
cgogICAgICAgICAvLyBsYXlvdXQuCi0gICAgICAgIGludCBmYiA9IG1heChwcmV2aW91c0Zsb2F0
TG9naWNhbEJvdHRvbSwgbG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkpOworICAgICAgICBmbG9h
dCBmYiA9IG1heChwcmV2aW91c0Zsb2F0TG9naWNhbEJvdHRvbSwgbG93ZXN0RmxvYXRMb2dpY2Fs
Qm90dG9tKCkpOwogICAgICAgICBpZiAoZmIgPiBsb2dpY2FsVG9wRXN0aW1hdGUpCiAgICAgICAg
ICAgICBtYXJrRGVzY2VuZGFudHNXaXRoRmxvYXRzID0gdHJ1ZTsKICAgICB9CkBAIC0xOTgxLDI0
ICsxOTgxLDI0IEBACiAKICAgICAvLyBOb3cgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHlwb3MgYmFz
ZWQgb2ZmIGV4YW1pbmF0aW9uIG9mIGNvbGxhcHNpbmcgbWFyZ2luCiAgICAgLy8gdmFsdWVzLgot
ICAgIGludCBsb2dpY2FsVG9wQmVmb3JlQ2xlYXIgPSBjb2xsYXBzZU1hcmdpbnMoY2hpbGQsIG1h
cmdpbkluZm8pOworICAgIGZsb2F0IGxvZ2ljYWxUb3BCZWZvcmVDbGVhciA9IGNvbGxhcHNlTWFy
Z2lucyhjaGlsZCwgbWFyZ2luSW5mbyk7CiAKICAgICAvLyBOb3cgY2hlY2sgZm9yIGNsZWFyLgot
ICAgIGludCBsb2dpY2FsVG9wQWZ0ZXJDbGVhciA9IGNsZWFyRmxvYXRzSWZOZWVkZWQoY2hpbGQs
IG1hcmdpbkluZm8sIG9sZFBvc01hcmdpbkJlZm9yZSwgb2xkTmVnTWFyZ2luQmVmb3JlLCBsb2dp
Y2FsVG9wQmVmb3JlQ2xlYXIpOworICAgIGZsb2F0IGxvZ2ljYWxUb3BBZnRlckNsZWFyID0gY2xl
YXJGbG9hdHNJZk5lZWRlZChjaGlsZCwgbWFyZ2luSW5mbywgb2xkUG9zTWFyZ2luQmVmb3JlLCBv
bGROZWdNYXJnaW5CZWZvcmUsIGxvZ2ljYWxUb3BCZWZvcmVDbGVhcik7CiAgICAgCiAgICAgYm9v
bCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCktPmlzUGFnaW5hdGVkKCk7CiAgICAg
aWYgKHBhZ2luYXRlZCkgewotICAgICAgICBpbnQgb2xkVG9wID0gbG9naWNhbFRvcEFmdGVyQ2xl
YXI7CisgICAgICAgIGZsb2F0IG9sZFRvcCA9IGxvZ2ljYWxUb3BBZnRlckNsZWFyOwogICAgICAg
ICAKICAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBoYXMgYSBwYWdlIG9yIGNvbHVtbiBicmVhayB2
YWx1ZSBvZiAiYmVmb3JlIiwgdGhlbiB3ZSBzaG91bGQgc2hpZnQgdG8gdGhlIHRvcCBvZiB0aGUg
bmV4dCBwYWdlLgogICAgICAgICBsb2dpY2FsVG9wQWZ0ZXJDbGVhciA9IGFwcGx5QmVmb3JlQnJl
YWsoY2hpbGQsIGxvZ2ljYWxUb3BBZnRlckNsZWFyKTsKICAgICAKICAgICAgICAgLy8gRm9yIHJl
cGxhY2VkIGVsZW1lbnRzIGFuZCBzY3JvbGxlZCBlbGVtZW50cywgd2Ugd2FudCB0byBzaGlmdCB0
aGVtIHRvIHRoZSBuZXh0IHBhZ2UgaWYgdGhleSBkb24ndCBmaXQgb24gdGhlIGN1cnJlbnQgb25l
LgotICAgICAgICBpbnQgbG9naWNhbFRvcEJlZm9yZVVuc3BsaXR0YWJsZUFkanVzdG1lbnQgPSBs
b2dpY2FsVG9wQWZ0ZXJDbGVhcjsKLSAgICAgICAgaW50IGxvZ2ljYWxUb3BBZnRlclVuc3BsaXR0
YWJsZUFkanVzdG1lbnQgPSBhZGp1c3RGb3JVbnNwbGl0dGFibGVDaGlsZChjaGlsZCwgbG9naWNh
bFRvcEFmdGVyQ2xlYXIpOworICAgICAgICBmbG9hdCBsb2dpY2FsVG9wQmVmb3JlVW5zcGxpdHRh
YmxlQWRqdXN0bWVudCA9IGxvZ2ljYWxUb3BBZnRlckNsZWFyOworICAgICAgICBmbG9hdCBsb2dp
Y2FsVG9wQWZ0ZXJVbnNwbGl0dGFibGVBZGp1c3RtZW50ID0gYWRqdXN0Rm9yVW5zcGxpdHRhYmxl
Q2hpbGQoY2hpbGQsIGxvZ2ljYWxUb3BBZnRlckNsZWFyKTsKICAgICAgICAgCi0gICAgICAgIGlu
dCBwYWdpbmF0aW9uU3RydXQgPSAwOwotICAgICAgICBpbnQgdW5zcGxpdHRhYmxlQWRqdXN0bWVu
dERlbHRhID0gbG9naWNhbFRvcEFmdGVyVW5zcGxpdHRhYmxlQWRqdXN0bWVudCAtIGxvZ2ljYWxU
b3BCZWZvcmVVbnNwbGl0dGFibGVBZGp1c3RtZW50OworICAgICAgICBmbG9hdCBwYWdpbmF0aW9u
U3RydXQgPSAwOworICAgICAgICBmbG9hdCB1bnNwbGl0dGFibGVBZGp1c3RtZW50RGVsdGEgPSBs
b2dpY2FsVG9wQWZ0ZXJVbnNwbGl0dGFibGVBZGp1c3RtZW50IC0gbG9naWNhbFRvcEJlZm9yZVVu
c3BsaXR0YWJsZUFkanVzdG1lbnQ7CiAgICAgICAgIGlmICh1bnNwbGl0dGFibGVBZGp1c3RtZW50
RGVsdGEpCiAgICAgICAgICAgICBwYWdpbmF0aW9uU3RydXQgPSB1bnNwbGl0dGFibGVBZGp1c3Rt
ZW50RGVsdGE7CiAgICAgICAgIGVsc2UgaWYgKGNoaWxkUmVuZGVyQmxvY2sgJiYgY2hpbGRSZW5k
ZXJCbG9jay0+cGFnaW5hdGlvblN0cnV0KCkpCkBAIC0yMDYzLDcgKzIwNjMsNyBAQAogICAgIGlm
IChjaGlsZFJlbmRlckJsb2NrICYmIGNoaWxkUmVuZGVyQmxvY2stPmNvbnRhaW5zRmxvYXRzKCkp
CiAgICAgICAgIG1heEZsb2F0TG9naWNhbEJvdHRvbSA9IG1heChtYXhGbG9hdExvZ2ljYWxCb3R0
b20sIGFkZE92ZXJoYW5naW5nRmxvYXRzKHRvUmVuZGVyQmxvY2soY2hpbGQpLCAtY2hpbGQtPmxv
Z2ljYWxMZWZ0KCksIC1jaGlsZC0+bG9naWNhbFRvcCgpLCAhY2hpbGROZWVkZWRMYXlvdXQpKTsK
IAotICAgIEludFNpemUgY2hpbGRPZmZzZXQoY2hpbGQtPngoKSAtIG9sZFJlY3QueCgpLCBjaGls
ZC0+eSgpIC0gb2xkUmVjdC55KCkpOworICAgIEZsb2F0U2l6ZSBjaGlsZE9mZnNldChjaGlsZC0+
eCgpIC0gb2xkUmVjdC54KCksIGNoaWxkLT55KCkgLSBvbGRSZWN0LnkoKSk7CiAgICAgaWYgKGNo
aWxkT2Zmc2V0LndpZHRoKCkgfHwgY2hpbGRPZmZzZXQuaGVpZ2h0KCkpIHsKICAgICAgICAgdmll
dygpLT5hZGRMYXlvdXREZWx0YShjaGlsZE9mZnNldCk7CiAKQEAgLTIwODEsMTIgKzIwODEsMTIg
QEAKIAogICAgIGlmIChwYWdpbmF0ZWQpIHsKICAgICAgICAgLy8gQ2hlY2sgZm9yIGFuIGFmdGVy
IHBhZ2UvY29sdW1uIGJyZWFrLgotICAgICAgICBpbnQgbmV3SGVpZ2h0ID0gYXBwbHlBZnRlckJy
ZWFrKGNoaWxkLCBsb2dpY2FsSGVpZ2h0KCksIG1hcmdpbkluZm8pOworICAgICAgICBmbG9hdCBu
ZXdIZWlnaHQgPSBhcHBseUFmdGVyQnJlYWsoY2hpbGQsIGxvZ2ljYWxIZWlnaHQoKSwgbWFyZ2lu
SW5mbyk7CiAgICAgICAgIGlmIChuZXdIZWlnaHQgIT0gaGVpZ2h0KCkpCiAgICAgICAgICAgICBz
ZXRMb2dpY2FsSGVpZ2h0KG5ld0hlaWdodCk7CiAgICAgfQogCi0gICAgQVNTRVJUKG9sZExheW91
dERlbHRhID09IHZpZXcoKS0+bGF5b3V0RGVsdGEoKSk7CisgICAgQVNTRVJUKG9sZExheW91dERl
bHRhLmlzUm91Z2hseUVxdWFsVG8odmlldygpLT5sYXlvdXREZWx0YSgpKSk7CiB9CiAKIHZvaWQg
UmVuZGVyQmxvY2s6OnNpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KCkKQEAgLTIyMzgsOSArMjIz
OCwxMCBAQAogICAgIH0KIH0KICAKLXZvaWQgUmVuZGVyQmxvY2s6OnBhaW50KFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCit2b2lkIFJlbmRlckJsb2Nr
OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQb2ludCYgcGFpbnRPZmZz
ZXQpCiB7Ci0gICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsg
bG9jYXRpb24oKTsKKy8vICAgIGZwcmludGYoc3RkZXJyLCAiTm9kZSAlcyAtIHBhaW50IHJlY3Qo
JWQsICVkLCAlZCwgJWQpIGF0IG9mZnNldCglZiwgJWYpXG4iLCBtX25vZGUtPm5vZGVOYW1lKCku
dXRmOCgpLmRhdGEoKSwgcGFpbnRJbmZvLnJlY3QueCgpLCBwYWludEluZm8ucmVjdC55KCksIHBh
aW50SW5mby5yZWN0LndpZHRoKCksIHBhaW50SW5mby5yZWN0LmhlaWdodCgpLCBwYWludE9mZnNl
dC54KCksIHBhaW50T2Zmc2V0LnkoKSk7CisgICAgRmxvYXRQb2ludCBhZGp1c3RlZFBhaW50T2Zm
c2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOwogICAgIAogICAgIFBhaW50UGhhc2UgcGhh
c2UgPSBwYWludEluZm8ucGhhc2U7CiAKQEAgLTIyNDgsNyArMjI0OSw3IEBACiAgICAgLy8gRklY
TUU6IENvdWxkIGVsaW1pbmF0ZSB0aGUgaXNSb290KCkgY2hlY2sgaWYgd2UgZml4IGJhY2tncm91
bmQgcGFpbnRpbmcgc28gdGhhdCB0aGUgUmVuZGVyVmlldwogICAgIC8vIHBhaW50cyB0aGUgcm9v
dCdzIGJhY2tncm91bmQuCiAgICAgaWYgKCFpc1Jvb3QoKSkgewotICAgICAgICBJbnRSZWN0IG92
ZXJmbG93Qm94ID0gdmlzdWFsT3ZlcmZsb3dSZWN0KCk7CisgICAgICAgIEZsb2F0UmVjdCBvdmVy
Zmxvd0JveCA9IHZpc3VhbE92ZXJmbG93UmVjdCgpOwogICAgICAgICBmbGlwRm9yV3JpdGluZ01v
ZGUob3ZlcmZsb3dCb3gpOwogICAgICAgICBvdmVyZmxvd0JveC5pbmZsYXRlKG1heGltYWxPdXRs
aW5lU2l6ZShwYWludEluZm8ucGhhc2UpKTsKICAgICAgICAgb3ZlcmZsb3dCb3gubW92ZUJ5KGFk
anVzdGVkUGFpbnRPZmZzZXQpOwpAQCAtMjI2OCw3ICsyMjY5LDcgQEAKICAgICAgICAgbGF5ZXIo
KS0+cGFpbnRPdmVyZmxvd0NvbnRyb2xzKHBhaW50SW5mby5jb250ZXh0LCBhZGp1c3RlZFBhaW50
T2Zmc2V0LCBwYWludEluZm8ucmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29s
dW1uUnVsZXMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNl
dCkKK3ZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29sdW1uUnVsZXMoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEZsb2F0UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIGlmIChwYWludEluZm8u
Y29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMjc2LDgg
KzIyNzcsOCBAQAogICAgIGNvbnN0IENvbG9yJiBydWxlQ29sb3IgPSBzdHlsZSgpLT52aXNpdGVk
RGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlQ29sb3IpOwogICAgIGJv
b2wgcnVsZVRyYW5zcGFyZW50ID0gc3R5bGUoKS0+Y29sdW1uUnVsZUlzVHJhbnNwYXJlbnQoKTsK
ICAgICBFQm9yZGVyU3R5bGUgcnVsZVN0eWxlID0gc3R5bGUoKS0+Y29sdW1uUnVsZVN0eWxlKCk7
Ci0gICAgaW50IHJ1bGVXaWR0aCA9IHN0eWxlKCktPmNvbHVtblJ1bGVXaWR0aCgpOwotICAgIGlu
dCBjb2xHYXAgPSBjb2x1bW5HYXAoKTsKKyAgICBmbG9hdCBydWxlV2lkdGggPSBzdHlsZSgpLT5j
b2x1bW5SdWxlV2lkdGgoKTsKKyAgICBmbG9hdCBjb2xHYXAgPSBjb2x1bW5HYXAoKTsKICAgICBi
b29sIHJlbmRlclJ1bGUgPSBydWxlU3R5bGUgPiBCSElEREVOICYmICFydWxlVHJhbnNwYXJlbnQg
JiYgcnVsZVdpZHRoIDw9IGNvbEdhcDsKICAgICBpZiAoIXJlbmRlclJ1bGUpCiAgICAgICAgIHJl
dHVybjsKQEAgLTIyODUsOSArMjI4Niw5IEBACiAgICAgLy8gV2UgbmVlZCB0byBkbyBtdWx0aXBs
ZSBwYXNzZXMsIGJyZWFraW5nIHVwIG91ciBjaGlsZCBwYWludGluZyBpbnRvIHN0cmlwcy4KICAg
ICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwogICAgIHVuc2lnbmVkIGNvbENv
dW50ID0gY29sdW1uQ291bnQoY29sSW5mbyk7Ci0gICAgaW50IGN1cnJMb2dpY2FsTGVmdE9mZnNl
dCA9IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IDAgOiBjb250ZW50TG9naWNh
bFdpZHRoKCk7Ci0gICAgaW50IHJ1bGVBZGQgPSBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQo
KTsKLSAgICBpbnQgcnVsZUxvZ2ljYWxMZWZ0ID0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpID8gMCA6IGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICBmbG9hdCBjdXJyTG9naWNh
bExlZnRPZmZzZXQgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyAwIDogY29u
dGVudExvZ2ljYWxXaWR0aCgpOworICAgIGZsb2F0IHJ1bGVBZGQgPSBsb2dpY2FsTGVmdE9mZnNl
dEZvckNvbnRlbnQoKTsKKyAgICBmbG9hdCBydWxlTG9naWNhbExlZnQgPSBzdHlsZSgpLT5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyAwIDogY29udGVudExvZ2ljYWxXaWR0aCgpOwogCiAgICAg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdXJyZW50Q1RNID0gcGFpbnRJbmZvLmNvbnRleHQtPmdl
dENUTSgpOwogICAgIGJvb2wgYW50aWFsaWFzID0gIWN1cnJlbnRDVE0uaXNJZGVudGl0eU9yVHJh
bnNsYXRpb25PckZsaXBwZWQoKTsKQEAgLTIyOTUsNyArMjI5Niw3IEBACiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHsKICAgICAgICAgSW50UmVjdCBjb2xSZWN0
ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogCi0gICAgICAgIGludCBpbmxpbmVEaXJlY3Rp
b25TaXplID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNvbFJlY3Qud2lkdGgoKSA6IGNv
bFJlY3QuaGVpZ2h0KCk7CisgICAgICAgIGZsb2F0IGlubGluZURpcmVjdGlvblNpemUgPSBpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpID8gY29sUmVjdC53aWR0aCgpIDogY29sUmVjdC5oZWlnaHQo
KTsKICAgICAgICAgCiAgICAgICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgcG9zaXRpb24uCiAgICAg
ICAgIGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKQEAgLTIzMDgsMTAg
KzIzMDksMTAgQEAKICAgICAgICAKICAgICAgICAgLy8gTm93IHBhaW50IHRoZSBjb2x1bW4gcnVs
ZS4KICAgICAgICAgaWYgKGkgPCBjb2xDb3VudCAtIDEpIHsKLSAgICAgICAgICAgIGludCBydWxl
TGVmdCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBwYWludE9mZnNldC54KCkgKyBydWxl
TG9naWNhbExlZnQgLSBydWxlV2lkdGggLyAyICsgcnVsZUFkZCA6IHBhaW50T2Zmc2V0LngoKSAr
IGJvcmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpOwotICAgICAgICAgICAgaW50IHJ1bGVS
aWdodCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBydWxlTGVmdCArIHJ1bGVXaWR0aCA6
IHJ1bGVMZWZ0ICsgY29udGVudFdpZHRoKCk7Ci0gICAgICAgICAgICBpbnQgcnVsZVRvcCA9IGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBwYWludE9mZnNldC55KCkgKyBib3JkZXJUb3AoKSAr
IHBhZGRpbmdUb3AoKSA6IHBhaW50T2Zmc2V0LnkoKSArIHJ1bGVMb2dpY2FsTGVmdCAtIHJ1bGVX
aWR0aCAvIDIgKyBydWxlQWRkOwotICAgICAgICAgICAgaW50IHJ1bGVCb3R0b20gPSBpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID8gcnVsZVRvcCArIGNvbnRlbnRIZWlnaHQoKSA6IHJ1bGVUb3Ag
KyBydWxlV2lkdGg7CisgICAgICAgICAgICBmbG9hdCBydWxlTGVmdCA9IGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBwYWludE9mZnNldC54KCkgKyBydWxlTG9naWNhbExlZnQgLSBydWxlV2lk
dGggLyAyICsgcnVsZUFkZCA6IHBhaW50T2Zmc2V0LngoKSArIGJvcmRlckJlZm9yZSgpICsgcGFk
ZGluZ0JlZm9yZSgpOworICAgICAgICAgICAgZmxvYXQgcnVsZVJpZ2h0ID0gaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IHJ1bGVMZWZ0ICsgcnVsZVdpZHRoIDogcnVsZUxlZnQgKyBjb250ZW50
V2lkdGgoKTsKKyAgICAgICAgICAgIGZsb2F0IHJ1bGVUb3AgPSBpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID8gcGFpbnRPZmZzZXQueSgpICsgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgOiBw
YWludE9mZnNldC55KCkgKyBydWxlTG9naWNhbExlZnQgLSBydWxlV2lkdGggLyAyICsgcnVsZUFk
ZDsKKyAgICAgICAgICAgIGZsb2F0IHJ1bGVCb3R0b20gPSBpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpID8gcnVsZVRvcCArIGNvbnRlbnRIZWlnaHQoKSA6IHJ1bGVUb3AgKyBydWxlV2lkdGg7CiAg
ICAgICAgICAgICBkcmF3TGluZUZvckJveFNpZGUocGFpbnRJbmZvLmNvbnRleHQsIHJ1bGVMZWZ0
LCBydWxlVG9wLCBydWxlUmlnaHQsIHJ1bGVCb3R0b20sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gQlNMZWZ0IDogQlNS
aWdodCwgcnVsZUNvbG9yLCBydWxlU3R5bGUsIDAsIDAsIGFudGlhbGlhcyk7CiAgICAgICAgIH0K
QEAgLTIzMjAsNyArMjMyMSw3IEBACiAgICAgfQogfQogCi12b2lkIFJlbmRlckJsb2NrOjpwYWlu
dENvbHVtbkNvbnRlbnRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFp
bnRPZmZzZXQsIGJvb2wgcGFpbnRpbmdGbG9hdHMpCit2b2lkIFJlbmRlckJsb2NrOjpwYWludENv
bHVtbkNvbnRlbnRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiBwYWlu
dE9mZnNldCwgYm9vbCBwYWludGluZ0Zsb2F0cykKIHsKICAgICAvLyBXZSBuZWVkIHRvIGRvIG11
bHRpcGxlIHBhc3NlcywgYnJlYWtpbmcgdXAgb3VyIGNoaWxkIHBhaW50aW5nIGludG8gc3RyaXBz
LgogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0OwpAQCAt
MjMyOCwxNCArMjMyOSwxNCBAQAogICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sdW1uQ291bnQo
Y29sSW5mbyk7CiAgICAgaWYgKCFjb2xDb3VudCkKICAgICAgICAgcmV0dXJuOwotICAgIGludCBj
dXJyTG9naWNhbFRvcE9mZnNldCA9IDA7CisgICAgZmxvYXQgY3VyckxvZ2ljYWxUb3BPZmZzZXQg
PSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7CiAgICAg
ICAgIC8vIEZvciBlYWNoIHJlY3QsIHdlIGNsaXAgdG8gdGhlIHJlY3QsIGFuZCB0aGVuIHdlIGFk
anVzdCBvdXIgY29vcmRzLgogICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2x1bW5SZWN0QXQo
Y29sSW5mbywgaSk7CiAgICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShjb2xSZWN0KTsKLSAgICAg
ICAgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0ID0gKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBj
b2xSZWN0LngoKSA6IGNvbFJlY3QueSgpKSAtIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgp
OworICAgICAgICBmbG9hdCBsb2dpY2FsTGVmdE9mZnNldCA9IChpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID8gY29sUmVjdC54KCkgOiBjb2xSZWN0LnkoKSkgLSBsb2dpY2FsTGVmdE9mZnNldEZv
ckNvbnRlbnQoKTsKICAgICAgICAgSW50U2l6ZSBvZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID8gSW50U2l6ZShsb2dpY2FsTGVmdE9mZnNldCwgY3VyckxvZ2ljYWxUb3BPZmZzZXQp
IDogSW50U2l6ZShjdXJyTG9naWNhbFRvcE9mZnNldCwgbG9naWNhbExlZnRPZmZzZXQpOwotICAg
ICAgICBjb2xSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CisgICAgICAgIGNvbFJlY3QubW92ZUJ5
KHJvdW5kZWRJbnRQb2ludChwYWludE9mZnNldCkpOwogICAgICAgICBQYWludEluZm8gaW5mbyhw
YWludEluZm8pOwogICAgICAgICBpbmZvLnJlY3QuaW50ZXJzZWN0KGNvbFJlY3QpOwogICAgICAg
ICAKQEAgLTIzNDcsNyArMjM0OCw3IEBACiAgICAgICAgICAgICBjb250ZXh0LT5jbGlwKGNvbFJl
Y3QpOwogCiAgICAgICAgICAgICAvLyBBZGp1c3Qgb3VyIHggYW5kIHkgd2hlbiBwYWludGluZy4K
LSAgICAgICAgICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCAr
IG9mZnNldDsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBh
aW50T2Zmc2V0ICsgb2Zmc2V0OwogICAgICAgICAgICAgaWYgKHBhaW50aW5nRmxvYXRzKQogICAg
ICAgICAgICAgICAgIHBhaW50RmxvYXRzKGluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQsIHBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uIHx8IHBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlVGV4dENsaXApOwogICAgICAgICAgICAgZWxzZQpAQCAtMjM2Miw3ICsyMzYzLDcg
QEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29udGVudHMoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKK3ZvaWQgUmVuZGVyQmxv
Y2s6OnBhaW50Q29udGVudHMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQm
IHBhaW50T2Zmc2V0KQogewogICAgIC8vIEF2b2lkIHBhaW50aW5nIGRlc2NlbmRhbnRzIG9mIHRo
ZSByb290IGVsZW1lbnQgd2hlbiBzdHlsZXNoZWV0cyBoYXZlbid0IGxvYWRlZC4gIFRoaXMgZWxp
bWluYXRlcyBGT1VDLgogICAgIC8vIEl0J3Mgb2sgbm90IHRvIGRyYXcsIGJlY2F1c2UgbGF0ZXIg
b24sIHdoZW4gYWxsIHRoZSBzdHlsZXNoZWV0cyBkbyBsb2FkLCB1cGRhdGVTdHlsZVNlbGVjdG9y
IG9uIHRoZSBEb2N1bWVudApAQCAtMjM3Niw3ICsyMzc3LDcgQEAKICAgICAgICAgcGFpbnRDaGls
ZHJlbihwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6cGFp
bnRDaGlsZHJlbihQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zm
c2V0KQordm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDaGlsZHJlbihQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgRmxvYXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgUGFpbnRQaGFzZSBuZXdQ
aGFzZSA9IChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxkT3V0bGluZXMpID8gUGFp
bnRQaGFzZU91dGxpbmUgOiBwYWludEluZm8ucGhhc2U7CiAgICAgbmV3UGhhc2UgPSAobmV3UGhh
c2UgPT0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kcykgPyBQYWludFBoYXNlQ2hpbGRC
bG9ja0JhY2tncm91bmQgOiBuZXdQaGFzZTsKQEAgLTI0MTMsNyArMjQxNCw3IEBACiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBJbnRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZv
cldyaXRpbmdNb2RlKGNoaWxkLCBwYWludE9mZnNldCwgUGFyZW50VG9DaGlsZEZsaXBwaW5nQWRq
dXN0bWVudCk7CisgICAgICAgIEZsb2F0UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5n
TW9kZShjaGlsZCwgcGFpbnRPZmZzZXQsIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQp
OwogICAgICAgICBpZiAoIWNoaWxkLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmICFjaGlsZC0+
aXNGbG9hdGluZygpKQogICAgICAgICAgICAgY2hpbGQtPnBhaW50KGluZm8sIGNoaWxkUG9pbnQp
OwogCkBAIC0yNDIyLDEzICsyNDIzLDEzIEBACiAgICAgICAgIGlmIChjaGVja0FmdGVyQWx3YXlz
CiAgICAgICAgICAgICAmJiAoYWJzb2x1dGVDaGlsZFkgKyBjaGlsZC0+aGVpZ2h0KCkpID4gcGFp
bnRJbmZvLnJlY3QueSgpCiAgICAgICAgICAgICAmJiAoYWJzb2x1dGVDaGlsZFkgKyBjaGlsZC0+
aGVpZ2h0KCkpIDwgcGFpbnRJbmZvLnJlY3QubWF4WSgpKSB7Ci0gICAgICAgICAgICB2aWV3KCkt
PnNldEJlc3RUcnVuY2F0ZWRBdChhYnNvbHV0ZUNoaWxkWSArIGNoaWxkLT5oZWlnaHQoKSArIG1h
eCgwLCBjaGlsZC0+Y29sbGFwc2VkTWFyZ2luQWZ0ZXIoKSksIHRoaXMsIHRydWUpOworICAgICAg
ICAgICAgdmlldygpLT5zZXRCZXN0VHJ1bmNhdGVkQXQoYWJzb2x1dGVDaGlsZFkgKyBjaGlsZC0+
aGVpZ2h0KCkgKyBtYXgoMC4wZiwgY2hpbGQtPmNvbGxhcHNlZE1hcmdpbkFmdGVyKCkpLCB0aGlz
LCB0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9p
ZCBSZW5kZXJCbG9jazo6cGFpbnRDYXJldChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0LCBDYXJldFR5cGUgdHlwZSkKK3ZvaWQgUmVuZGVyQmxvY2s6OnBh
aW50Q2FyZXQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIHBhaW50T2Zm
c2V0LCBDYXJldFR5cGUgdHlwZSkKIHsKICAgICAvLyBQYWludCB0aGUgY2FyZXQgaWYgdGhlIEZy
YW1lU2VsZWN0aW9uIHNheXMgc28gb3IgaWYgY2FyZXQgYnJvd3NpbmcgaXMgZW5hYmxlZAogICAg
IGJvb2wgY2FyZXRCcm93c2luZyA9IGZyYW1lKCktPnNldHRpbmdzKCkgJiYgZnJhbWUoKS0+c2V0
dGluZ3MoKS0+Y2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKQEAgLTI0NDUsNyArMjQ0Niw3IEBACiAg
ICAgaWYgKGNhcmV0UGFpbnRlciA9PSB0aGlzICYmIChpc0NvbnRlbnRFZGl0YWJsZSB8fCBjYXJl
dEJyb3dzaW5nKSkgewogICAgICAgICAvLyBDb252ZXJ0IHRoZSBwYWludGluZyBvZmZzZXQgaW50
byB0aGUgbG9jYWwgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhpcyByZW5kZXJlciwKICAgICAgICAg
Ly8gdG8gbWF0Y2ggdGhlIGxvY2FsQ2FyZXRSZWN0IGNvbXB1dGVkIGJ5IHRoZSBGcmFtZVNlbGVj
dGlvbgotICAgICAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7
CisgICAgICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0Owog
ICAgICAgICBvZmZzZXRGb3JDb250ZW50cyhhZGp1c3RlZFBhaW50T2Zmc2V0KTsKIAogICAgICAg
ICBpZiAodHlwZSA9PSBDdXJzb3JDYXJldCkKQEAgLTI0NTUsNyArMjQ1Niw3IEBACiAgICAgfQog
fQogCi12b2lkIFJlbmRlckJsb2NrOjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQordm9pZCBSZW5kZXJCbG9jazo6cGFpbnRPYmpl
Y3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIHBhaW50T2Zmc2V0KQog
ewogICAgIFBhaW50UGhhc2UgcGFpbnRQaGFzZSA9IHBhaW50SW5mby5waGFzZTsKIApAQCAtMjQ3
Nyw3ICsyNDc4LDcgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQWRqdXN0IG91ciBwYWlu
dGluZyBwb3NpdGlvbiBpZiB3ZSdyZSBpbnNpZGUgYSBzY3JvbGxlZCBsYXllciAoZS5nLiwgYW4g
b3ZlcmZsb3c6YXV0byBkaXYpLgotICAgIEludFBvaW50IHNjcm9sbGVkT2Zmc2V0ID0gcGFpbnRP
ZmZzZXQ7CisgICAgRmxvYXRQb2ludCBzY3JvbGxlZE9mZnNldCA9IHBhaW50T2Zmc2V0OwogICAg
IGlmIChoYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgc2Nyb2xsZWRPZmZzZXQubW92ZSgtbGF5
ZXIoKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCkpOwogCkBAIC0yNTA1LDcgKzI1MDYsNyBAQAog
CiAgICAgLy8gNS4gcGFpbnQgb3V0bGluZS4KICAgICBpZiAoKHBhaW50UGhhc2UgPT0gUGFpbnRQ
aGFzZU91dGxpbmUgfHwgcGFpbnRQaGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUpICYmIGhh
c091dGxpbmUoKSAmJiBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKLSAgICAgICAg
cGFpbnRPdXRsaW5lKHBhaW50SW5mby5jb250ZXh0LCBJbnRSZWN0KHBhaW50T2Zmc2V0LCBzaXpl
KCkpKTsKKyAgICAgICAgcGFpbnRPdXRsaW5lKHBhaW50SW5mby5jb250ZXh0LCBGbG9hdFJlY3Qo
cGFpbnRPZmZzZXQsIHNpemUoKSkpOwogCiAgICAgLy8gNi4gcGFpbnQgY29udGludWF0aW9uIG91
dGxpbmVzLgogICAgIGlmICgocGFpbnRQaGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBwYWlu
dFBoYXNlID09IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzKSkgewpAQCAtMjUzOSw3ICsyNTQwLDcg
QEAKICAgICB9CiB9CiAKLUludFBvaW50IFJlbmRlckJsb2NrOjpmbGlwRmxvYXRGb3JXcml0aW5n
TW9kZShjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQsIGNvbnN0IEludFBvaW50JiBwb2ludCkg
Y29uc3QKK0Zsb2F0UG9pbnQgUmVuZGVyQmxvY2s6OmZsaXBGbG9hdEZvcldyaXRpbmdNb2RlKGNv
bnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0
CiB7CiAgICAgaWYgKCFzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKQogICAg
ICAgICByZXR1cm4gcG9pbnQ7CkBAIC0yNTQ4LDExICsyNTQ5LDExIEBACiAgICAgLy8gaXQncyBn
b2luZyB0byBnZXQgYWRkZWQgYmFjayBpbi4gIFdlIGhpZGUgdGhpcyBjb21wbGljYXRpb24gaGVy
ZSBzbyB0aGF0IHRoZSBjYWxsaW5nIGNvZGUgbG9va3Mgbm9ybWFsIGZvciB0aGUgdW5mbGlwcGVk
CiAgICAgLy8gY2FzZS4KICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAg
ICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgpICsgaGVpZ2h0KCkgLSBjaGls
ZC0+cmVuZGVyZXIoKS0+aGVpZ2h0KCkgLSAyICogeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdN
YXJnaW4oY2hpbGQpKTsKLSAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpICsgd2lkdGgoKSAt
IGNoaWxkLT53aWR0aCgpIC0gMiAqIHhQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKGNo
aWxkKSwgcG9pbnQueSgpKTsKKyAgICAgICAgcmV0dXJuIEZsb2F0UG9pbnQocG9pbnQueCgpLCBw
b2ludC55KCkgKyBoZWlnaHQoKSAtIGNoaWxkLT5yZW5kZXJlcigpLT5oZWlnaHQoKSAtIDIgKiB5
UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihjaGlsZCkpOworICAgIHJldHVybiBGbG9h
dFBvaW50KHBvaW50LngoKSArIHdpZHRoKCkgLSBjaGlsZC0+d2lkdGgoKSAtIDIgKiB4UG9zaXRp
b25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihjaGlsZCksIHBvaW50LnkoKSk7CiB9CiAKLXZvaWQg
UmVuZGVyQmxvY2s6OnBhaW50RmxvYXRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQ
b2ludCYgcGFpbnRPZmZzZXQsIGJvb2wgcHJlc2VydmVQaGFzZSkKK3ZvaWQgUmVuZGVyQmxvY2s6
OnBhaW50RmxvYXRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiBwYWlu
dE9mZnNldCwgYm9vbCBwcmVzZXJ2ZVBoYXNlKQogewogICAgIGlmICghbV9mbG9hdGluZ09iamVj
dHMpCiAgICAgICAgIHJldHVybjsKQEAgLTI1NjUsNyArMjU2Niw3IEBACiAgICAgICAgIGlmIChy
LT5tX3Nob3VsZFBhaW50ICYmICFyLT5tX3JlbmRlcmVyLT5oYXNTZWxmUGFpbnRpbmdMYXllcigp
KSB7CiAgICAgICAgICAgICBQYWludEluZm8gY3VycmVudFBhaW50SW5mbyhwYWludEluZm8pOwog
ICAgICAgICAgICAgY3VycmVudFBhaW50SW5mby5waGFzZSA9IHByZXNlcnZlUGhhc2UgPyBwYWlu
dEluZm8ucGhhc2UgOiBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kOwotICAgICAgICAgICAgSW50
UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGbG9hdEZvcldyaXRpbmdNb2RlKHIsIEludFBvaW50KHBh
aW50T2Zmc2V0LngoKSArIHhQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpIC0gci0+
bV9yZW5kZXJlci0+eCgpLCBwYWludE9mZnNldC55KCkgKyB5UG9zaXRpb25Gb3JGbG9hdEluY2x1
ZGluZ01hcmdpbihyKSAtIHItPm1fcmVuZGVyZXItPnkoKSkpOworICAgICAgICAgICAgRmxvYXRQ
b2ludCBjaGlsZFBvaW50ID0gZmxpcEZsb2F0Rm9yV3JpdGluZ01vZGUociwgSW50UG9pbnQocGFp
bnRPZmZzZXQueCgpICsgeFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4ocikgLSByLT5t
X3JlbmRlcmVyLT54KCksIHBhaW50T2Zmc2V0LnkoKSArIHlQb3NpdGlvbkZvckZsb2F0SW5jbHVk
aW5nTWFyZ2luKHIpIC0gci0+bV9yZW5kZXJlci0+eSgpKSk7CiAgICAgICAgICAgICByLT5tX3Jl
bmRlcmVyLT5wYWludChjdXJyZW50UGFpbnRJbmZvLCBjaGlsZFBvaW50KTsKICAgICAgICAgICAg
IGlmICghcHJlc2VydmVQaGFzZSkgewogICAgICAgICAgICAgICAgIGN1cnJlbnRQYWludEluZm8u
cGhhc2UgPSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzOwpAQCAtMjU4MSw3ICsyNTgy
LDcgQEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnBhaW50RWxsaXBzaXNCb3hlcyhQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQordm9pZCBS
ZW5kZXJCbG9jazo6cGFpbnRFbGxpcHNpc0JveGVzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBGbG9hdFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQ
YWludFdpdGhpblJvb3QodGhpcykgfHwgIWZpcnN0TGluZUJveCgpKQogICAgICAgICByZXR1cm47
CkBAIC0yNjU4LDcgKzI2NTksNyBAQAogICAgIHJldHVybiBjb250aW51YXRpb25zLT5jb250YWlu
cyhmbG93KTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb250aW51YXRpb25PdXRsaW5l
cyhQYWludEluZm8mIGluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKK3ZvaWQgUmVu
ZGVyQmxvY2s6OnBhaW50Q29udGludWF0aW9uT3V0bGluZXMoUGFpbnRJbmZvJiBpbmZvLCBjb25z
dCBGbG9hdFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBDb250aW51YXRpb25PdXRsaW5lVGFi
bGVNYXAqIHRhYmxlID0gY29udGludWF0aW9uT3V0bGluZVRhYmxlKCk7CiAgICAgaWYgKHRhYmxl
LT5pc0VtcHR5KCkpCkBAIC0yNjY4LDcgKzI2NjksNyBAQAogICAgIGlmICghY29udGludWF0aW9u
cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50UG9pbnQgYWNjdW11bGF0ZWRQYWludE9mZnNl
dCA9IHBhaW50T2Zmc2V0OworICAgIEZsb2F0UG9pbnQgYWNjdW11bGF0ZWRQYWludE9mZnNldCA9
IHBhaW50T2Zmc2V0OwogICAgIC8vIFBhaW50IGVhY2ggY29udGludWF0aW9uIG91dGxpbmUuCiAg
ICAgTGlzdEhhc2hTZXQ8UmVuZGVySW5saW5lKj46Oml0ZXJhdG9yIGVuZCA9IGNvbnRpbnVhdGlv
bnMtPmVuZCgpOwogICAgIGZvciAoTGlzdEhhc2hTZXQ8UmVuZGVySW5saW5lKj46Oml0ZXJhdG9y
IGl0ID0gY29udGludWF0aW9ucy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBAIC0yNzI5
LDI3ICsyNzMwLDI3IEBACiAgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICBvZmZz
ZXRGcm9tUmVwYWludENvbnRhaW5lciAtPSBsYXllcigpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQo
KTsKIAotICAgIGludCBsYXN0VG9wID0gMDsKLSAgICBpbnQgbGFzdExlZnQgPSBsb2dpY2FsTGVm
dFNlbGVjdGlvbk9mZnNldCh0aGlzLCBsYXN0VG9wKTsKLSAgICBpbnQgbGFzdFJpZ2h0ID0gbG9n
aWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHRoaXMsIGxhc3RUb3ApOworICAgIGZsb2F0IGxhc3RU
b3AgPSAwOworICAgIGZsb2F0IGxhc3RMZWZ0ID0gbG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQo
dGhpcywgbGFzdFRvcCk7CisgICAgZmxvYXQgbGFzdFJpZ2h0ID0gbG9naWNhbFJpZ2h0U2VsZWN0
aW9uT2Zmc2V0KHRoaXMsIGxhc3RUb3ApOwogICAgIAotICAgIHJldHVybiBzZWxlY3Rpb25HYXBz
KHRoaXMsIG9mZnNldEZyb21SZXBhaW50Q29udGFpbmVyLCBJbnRTaXplKCksIGxhc3RUb3AsIGxh
c3RMZWZ0LCBsYXN0UmlnaHQpOworICAgIHJldHVybiBzZWxlY3Rpb25HYXBzKHRoaXMsIG9mZnNl
dEZyb21SZXBhaW50Q29udGFpbmVyLCBGbG9hdFNpemUoKSwgbGFzdFRvcCwgbGFzdExlZnQsIGxh
c3RSaWdodCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnBhaW50U2VsZWN0aW9uKFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCit2b2lkIFJlbmRlckJs
b2NrOjpwYWludFNlbGVjdGlvbihQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQb2lu
dCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaWYgKHNob3VsZFBhaW50U2VsZWN0aW9uR2FwcygpICYm
IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewotICAgICAgICBpbnQg
bGFzdFRvcCA9IDA7Ci0gICAgICAgIGludCBsYXN0TGVmdCA9IGxvZ2ljYWxMZWZ0U2VsZWN0aW9u
T2Zmc2V0KHRoaXMsIGxhc3RUb3ApOwotICAgICAgICBpbnQgbGFzdFJpZ2h0ID0gbG9naWNhbFJp
Z2h0U2VsZWN0aW9uT2Zmc2V0KHRoaXMsIGxhc3RUb3ApOworICAgICAgICBmbG9hdCBsYXN0VG9w
ID0gMDsKKyAgICAgICAgZmxvYXQgbGFzdExlZnQgPSBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNl
dCh0aGlzLCBsYXN0VG9wKTsKKyAgICAgICAgZmxvYXQgbGFzdFJpZ2h0ID0gbG9naWNhbFJpZ2h0
U2VsZWN0aW9uT2Zmc2V0KHRoaXMsIGxhc3RUb3ApOwogICAgICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBhaW50SW5mby5jb250ZXh0KTsKIAotICAgICAgICBJbnRS
ZWN0IGdhcFJlY3RzQm91bmRzID0gc2VsZWN0aW9uR2Fwcyh0aGlzLCBwYWludE9mZnNldCwgSW50
U2l6ZSgpLCBsYXN0VG9wLCBsYXN0TGVmdCwgbGFzdFJpZ2h0LCAmcGFpbnRJbmZvKTsKKyAgICAg
ICAgRmxvYXRSZWN0IGdhcFJlY3RzQm91bmRzID0gc2VsZWN0aW9uR2Fwcyh0aGlzLCByb3VuZGVk
SW50UG9pbnQocGFpbnRPZmZzZXQpLCBGbG9hdFNpemUoKSwgbGFzdFRvcCwgbGFzdExlZnQsIGxh
c3RSaWdodCwgJnBhaW50SW5mbyk7CiAgICAgICAgIGlmICghZ2FwUmVjdHNCb3VuZHMuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGxheWVyID0gZW5jbG9zaW5nTGF5
ZXIoKSkgewotICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzLm1vdmVCeSgtcGFpbnRPZmZz
ZXQpOworICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzLm1vdmVCeSgtcm91bmRlZEludFBv
aW50KHBhaW50T2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgaWYgKCFoYXNMYXllcigpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEludFJlY3QgbG9jYWxCb3VuZHMoZ2FwUmVjdHNCb3VuZHMpOwor
ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMoZ2FwUmVjdHNCb3VuZHMp
OwogICAgICAgICAgICAgICAgICAgICBmbGlwRm9yV3JpdGluZ01vZGUobG9jYWxCb3VuZHMpOwog
ICAgICAgICAgICAgICAgICAgICBnYXBSZWN0c0JvdW5kcyA9IGxvY2FsVG9Db250YWluZXJRdWFk
KEZsb2F0UmVjdChsb2NhbEJvdW5kcyksIGxheWVyLT5yZW5kZXJlcigpKS5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpOwogICAgICAgICAgICAgICAgICAgICBnYXBSZWN0c0JvdW5kcy5tb3ZlKGxheWVy
LT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKSk7CkBAIC0yNzYwLDcgKzI3NjEsNyBAQAogICAgIH0K
IH0KIAotc3RhdGljIHZvaWQgY2xpcE91dFBvc2l0aW9uZWRPYmplY3RzKGNvbnN0IFBhaW50SW5m
byogcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0LCBSZW5kZXJCbG9jazo6UG9zaXRp
b25lZE9iamVjdHNMaXN0SGFzaFNldCogcG9zaXRpb25lZE9iamVjdHMpCitzdGF0aWMgdm9pZCBj
bGlwT3V0UG9zaXRpb25lZE9iamVjdHMoY29uc3QgUGFpbnRJbmZvKiBwYWludEluZm8sIGNvbnN0
IEZsb2F0UG9pbnQmIG9mZnNldCwgUmVuZGVyQmxvY2s6OlBvc2l0aW9uZWRPYmplY3RzTGlzdEhh
c2hTZXQqIHBvc2l0aW9uZWRPYmplY3RzKQogewogICAgIGlmICghcG9zaXRpb25lZE9iamVjdHMp
CiAgICAgICAgIHJldHVybjsKQEAgLTI3NzIsMTkgKzI3NzMsMTkgQEAKICAgICB9CiB9CiAKLXN0
YXRpYyBpbnQgYmxvY2tEaXJlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29u
c3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaykKK3N0YXRpYyBmbG9hdCBibG9ja0RpcmVj
dGlvbk9mZnNldChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBGbG9hdFNpemUmIG9mZnNl
dEZyb21Sb290QmxvY2spCiB7CiAgICAgcmV0dXJuIHJvb3RCbG9jay0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCkgOiBvZmZzZXRGcm9tUm9v
dEJsb2NrLndpZHRoKCk7CiB9CiAKLXN0YXRpYyBpbnQgaW5saW5lRGlyZWN0aW9uT2Zmc2V0KFJl
bmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290QmxvY2sp
CitzdGF0aWMgZmxvYXQgaW5saW5lRGlyZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrKiByb290Qmxv
Y2ssIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaykKIHsKICAgICByZXR1cm4g
cm9vdEJsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gb2Zmc2V0RnJvbVJvb3RCbG9j
ay53aWR0aCgpIDogb2Zmc2V0RnJvbVJvb3RCbG9jay5oZWlnaHQoKTsKIH0KIAotSW50UmVjdCBS
ZW5kZXJCbG9jazo6bG9naWNhbFJlY3RUb1BoeXNpY2FsUmVjdChjb25zdCBJbnRQb2ludCYgcm9v
dEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgSW50UmVjdCYgbG9naWNhbFJlY3QpCitGbG9h
dFJlY3QgUmVuZGVyQmxvY2s6OmxvZ2ljYWxSZWN0VG9QaHlzaWNhbFJlY3QoY29uc3QgRmxvYXRQ
b2ludCYgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBsb2dpY2Fs
UmVjdCkKIHsKLSAgICBJbnRSZWN0IHJlc3VsdDsKKyAgICBGbG9hdFJlY3QgcmVzdWx0OwogICAg
IGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICByZXN1bHQgPSBsb2dpY2Fs
UmVjdDsKICAgICBlbHNlCkBAIC0yNzk0LDE0ICsyNzk1LDE0IEBACiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotR2FwUmVjdHMgUmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sq
IHJvb3RCbG9jaywgY29uc3QgSW50UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNv
bnN0IEludFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQmIGxhc3RMb2dpY2FsVG9wLCBpbnQmIGxhc3RMb2dpY2FsTGVmdCwg
aW50JiBsYXN0TG9naWNhbFJpZ2h0LCBjb25zdCBQYWludEluZm8qIHBhaW50SW5mbykKK0dhcFJl
Y3RzIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNv
bnN0IEZsb2F0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IEZsb2F0U2l6
ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZsb2F0JiBsYXN0TG9naWNhbFRvcCwgZmxvYXQmIGxhc3RMb2dpY2FsTGVmdCwgZmxvYXQm
IGxhc3RMb2dpY2FsUmlnaHQsIGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZvKQogewogICAgIC8v
IElNUE9SVEFOVDogQ2FsbGVycyBvZiB0aGlzIG1ldGhvZCB0aGF0IGludGVuZCBmb3IgcGFpbnRp
bmcgdG8gaGFwcGVuIG5lZWQgdG8gZG8gYSBzYXZlL3Jlc3RvcmUuCiAgICAgLy8gQ2xpcCBvdXQg
ZmxvYXRpbmcgYW5kIHBvc2l0aW9uZWQgb2JqZWN0cyB3aGVuIHBhaW50aW5nIHNlbGVjdGlvbiBn
YXBzLgogICAgIGlmIChwYWludEluZm8pIHsKICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0
IGNsaXAgb3V0IG92ZXJmbG93IGZvciBwb3NpdGlvbmVkIG9iamVjdHMuICBXZSBqdXN0IHN0aWNr
IHRvIHRoZSBib3JkZXIgYm94LgotICAgICAgICBJbnRSZWN0IGZsaXBwZWRCbG9ja1JlY3QgPSBJ
bnRSZWN0KG9mZnNldEZyb21Sb290QmxvY2sud2lkdGgoKSwgb2Zmc2V0RnJvbVJvb3RCbG9jay5o
ZWlnaHQoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOworICAgICAgICBGbG9hdFJlY3QgZmxpcHBlZEJs
b2NrUmVjdCA9IEludFJlY3Qob2Zmc2V0RnJvbVJvb3RCbG9jay53aWR0aCgpLCBvZmZzZXRGcm9t
Um9vdEJsb2NrLmhlaWdodCgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgICAgIHJvb3RCbG9j
ay0+ZmxpcEZvcldyaXRpbmdNb2RlKGZsaXBwZWRCbG9ja1JlY3QpOwogICAgICAgICBmbGlwcGVk
QmxvY2tSZWN0Lm1vdmVCeShyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uKTsKICAgICAgICAgY2xp
cE91dFBvc2l0aW9uZWRPYmplY3RzKHBhaW50SW5mbywgZmxpcHBlZEJsb2NrUmVjdC5sb2NhdGlv
bigpLCBtX3Bvc2l0aW9uZWRPYmplY3RzLmdldCgpKTsKQEAgLTI4NDksOCArMjg1MCw4IEBACiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmlubGluZVNlbGVj
dGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgSW50UG9pbnQmIHJvb3RCbG9j
a1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGxhc3RMb2dpY2Fs
VG9wLCBpbnQmIGxhc3RMb2dpY2FsTGVmdCwgaW50JiBsYXN0TG9naWNhbFJpZ2h0LCBjb25zdCBQ
YWludEluZm8qIHBhaW50SW5mbykKK0dhcFJlY3RzIFJlbmRlckJsb2NrOjppbmxpbmVTZWxlY3Rp
b25HYXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IEZsb2F0UG9pbnQmIHJvb3RCbG9j
a1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0JiBsYXN0TG9n
aWNhbFRvcCwgZmxvYXQmIGxhc3RMb2dpY2FsTGVmdCwgZmxvYXQmIGxhc3RMb2dpY2FsUmlnaHQs
IGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZvKQogewogICAgIEdhcFJlY3RzIHJlc3VsdDsKIApA
QCAtMjg3MywxNyArMjg3NCwxNyBAQAogCiAgICAgLy8gTm93IHBhaW50IHRoZSBnYXBzIGZvciB0
aGUgbGluZXMuCiAgICAgZm9yICg7IGN1cnIgJiYgY3Vyci0+aGFzU2VsZWN0ZWRDaGlsZHJlbigp
OyBjdXJyID0gY3Vyci0+bmV4dFJvb3RCb3goKSkgewotICAgICAgICBpbnQgc2VsVG9wID0gIGN1
cnItPnNlbGVjdGlvblRvcCgpOwotICAgICAgICBpbnQgc2VsSGVpZ2h0ID0gY3Vyci0+c2VsZWN0
aW9uSGVpZ2h0KCk7CisgICAgICAgIGZsb2F0IHNlbFRvcCA9ICBjdXJyLT5zZWxlY3Rpb25Ub3Ao
KTsKKyAgICAgICAgZmxvYXQgc2VsSGVpZ2h0ID0gY3Vyci0+c2VsZWN0aW9uSGVpZ2h0KCk7CiAK
ICAgICAgICAgaWYgKCFjb250YWluc1N0YXJ0ICYmICFsYXN0U2VsZWN0ZWRMaW5lICYmCiAgICAg
ICAgICAgICBzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvblN0YXJ0ICYmIHNlbGVjdGlvblN0
YXRlKCkgIT0gU2VsZWN0aW9uQm90aCkKICAgICAgICAgICAgIHJlc3VsdC51bml0ZUNlbnRlcihi
bG9ja1NlbGVjdGlvbkdhcChyb290QmxvY2ssIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIG9m
ZnNldEZyb21Sb290QmxvY2ssIGxhc3RMb2dpY2FsVG9wLCBsYXN0TG9naWNhbExlZnQsIGxhc3RM
b2dpY2FsUmlnaHQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbFRvcCwgcGFpbnRJbmZvKSk7CiAgICAgICAgIAotICAgICAgICBJbnRSZWN0IGxv
Z2ljYWxSZWN0KGN1cnItPmxvZ2ljYWxMZWZ0KCksIHNlbFRvcCwgY3Vyci0+bG9naWNhbFdpZHRo
KCksIHNlbFRvcCArIHNlbEhlaWdodCk7CisgICAgICAgIEZsb2F0UmVjdCBsb2dpY2FsUmVjdChj
dXJyLT5sb2dpY2FsTGVmdCgpLCBzZWxUb3AsIGN1cnItPmxvZ2ljYWxXaWR0aCgpLCBzZWxUb3Ag
KyBzZWxIZWlnaHQpOwogICAgICAgICBsb2dpY2FsUmVjdC5tb3ZlKGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBvZmZzZXRGcm9tUm9vdEJsb2NrIDogSW50U2l6ZShvZmZzZXRGcm9tUm9vdEJs
b2NrLmhlaWdodCgpLCBvZmZzZXRGcm9tUm9vdEJsb2NrLndpZHRoKCkpKTsKLSAgICAgICAgSW50
UmVjdCBwaHlzaWNhbFJlY3QgPSByb290QmxvY2stPmxvZ2ljYWxSZWN0VG9QaHlzaWNhbFJlY3Qo
cm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgbG9naWNhbFJlY3QpOworICAgICAgICBGbG9hdFJl
Y3QgcGh5c2ljYWxSZWN0ID0gcm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0KHJv
b3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGxvZ2ljYWxSZWN0KTsKICAgICAgICAgaWYgKCFwYWlu
dEluZm8gfHwgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgcGh5c2ljYWxSZWN0LnkoKSA8
IHBhaW50SW5mby0+cmVjdC5tYXhZKCkgJiYgcGh5c2ljYWxSZWN0Lm1heFkoKSA+IHBhaW50SW5m
by0+cmVjdC55KCkpCiAgICAgICAgICAgICB8fCAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
JiYgcGh5c2ljYWxSZWN0LngoKSA8IHBhaW50SW5mby0+cmVjdC5tYXhYKCkgJiYgcGh5c2ljYWxS
ZWN0Lm1heFgoKSA+IHBhaW50SW5mby0+cmVjdC54KCkpKQogICAgICAgICAgICAgcmVzdWx0LnVu
aXRlKGN1cnItPmxpbmVTZWxlY3Rpb25HYXAocm9vdEJsb2NrLCByb290QmxvY2tQaHlzaWNhbFBv
c2l0aW9uLCBvZmZzZXRGcm9tUm9vdEJsb2NrLCBzZWxUb3AsIHNlbEhlaWdodCwgcGFpbnRJbmZv
KSk7CkBAIC0yOTA0LDggKzI5MDUsOCBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUdhcFJl
Y3RzIFJlbmRlckJsb2NrOjpibG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9j
aywgY29uc3QgSW50UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IEludFNp
emUmIG9mZnNldEZyb21Sb290QmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCYgbGFzdExvZ2ljYWxUb3AsIGludCYgbGFzdExvZ2ljYWxMZWZ0LCBpbnQm
IGxhc3RMb2dpY2FsUmlnaHQsIGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZvKQorR2FwUmVjdHMg
UmVuZGVyQmxvY2s6OmJsb2NrU2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBj
b25zdCBGbG9hdFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBGbG9hdFNp
emUmIG9mZnNldEZyb21Sb290QmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZsb2F0JiBsYXN0TG9naWNhbFRvcCwgZmxvYXQmIGxhc3RMb2dpY2FsTGVmdCwg
ZmxvYXQmIGxhc3RMb2dpY2FsUmlnaHQsIGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZvKQogewog
ICAgIEdhcFJlY3RzIHJlc3VsdDsKIApAQCAtMjk2Niw1NCArMjk2Nyw1NCBAQAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLUludFJlY3QgUmVuZGVyQmxvY2s6OmJsb2NrU2VsZWN0aW9uR2FwKFJl
bmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IEludFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBv
c2l0aW9uLCBjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxhc3RMb2dpY2FsVG9wLCBpbnQgbGFzdExv
Z2ljYWxMZWZ0LCBpbnQgbGFzdExvZ2ljYWxSaWdodCwgaW50IGxvZ2ljYWxCb3R0b20sIGNvbnN0
IFBhaW50SW5mbyogcGFpbnRJbmZvKQorRmxvYXRSZWN0IFJlbmRlckJsb2NrOjpibG9ja1NlbGVj
dGlvbkdhcChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBGbG9hdFBvaW50JiByb290Qmxv
Y2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ss
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGxhc3RMb2dp
Y2FsVG9wLCBmbG9hdCBsYXN0TG9naWNhbExlZnQsIGZsb2F0IGxhc3RMb2dpY2FsUmlnaHQsIGZs
b2F0IGxvZ2ljYWxCb3R0b20sIGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZvKQogewotICAgIGlu
dCBsb2dpY2FsVG9wID0gbGFzdExvZ2ljYWxUb3A7Ci0gICAgaW50IGxvZ2ljYWxIZWlnaHQgPSBi
bG9ja0RpcmVjdGlvbk9mZnNldChyb290QmxvY2ssIG9mZnNldEZyb21Sb290QmxvY2spICsgbG9n
aWNhbEJvdHRvbSAtIGxvZ2ljYWxUb3A7CisgICAgZmxvYXQgbG9naWNhbFRvcCA9IGxhc3RMb2dp
Y2FsVG9wOworICAgIGZsb2F0IGxvZ2ljYWxIZWlnaHQgPSBibG9ja0RpcmVjdGlvbk9mZnNldChy
b290QmxvY2ssIG9mZnNldEZyb21Sb290QmxvY2spICsgbG9naWNhbEJvdHRvbSAtIGxvZ2ljYWxU
b3A7CiAgICAgaWYgKGxvZ2ljYWxIZWlnaHQgPD0gMCkKICAgICAgICAgcmV0dXJuIEludFJlY3Qo
KTsKIAogICAgIC8vIEdldCB0aGUgc2VsZWN0aW9uIG9mZnNldHMgZm9yIHRoZSBib3R0b20gb2Yg
dGhlIGdhcAotICAgIGludCBsb2dpY2FsTGVmdCA9IG1heChsYXN0TG9naWNhbExlZnQsIGxvZ2lj
YWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbEJvdHRvbSkpOwotICAgIGlu
dCBsb2dpY2FsUmlnaHQgPSBtaW4obGFzdExvZ2ljYWxSaWdodCwgbG9naWNhbFJpZ2h0U2VsZWN0
aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbEJvdHRvbSkpOwotICAgIGludCBsb2dpY2FsV2lk
dGggPSBsb2dpY2FsUmlnaHQgLSBsb2dpY2FsTGVmdDsKKyAgICBmbG9hdCBsb2dpY2FsTGVmdCA9
IG1heChsYXN0TG9naWNhbExlZnQsIGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9j
aywgbG9naWNhbEJvdHRvbSkpOworICAgIGZsb2F0IGxvZ2ljYWxSaWdodCA9IG1pbihsYXN0TG9n
aWNhbFJpZ2h0LCBsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2Fs
Qm90dG9tKSk7CisgICAgZmxvYXQgbG9naWNhbFdpZHRoID0gbG9naWNhbFJpZ2h0IC0gbG9naWNh
bExlZnQ7CiAgICAgaWYgKGxvZ2ljYWxXaWR0aCA8PSAwKQogICAgICAgICByZXR1cm4gSW50UmVj
dCgpOwogCi0gICAgSW50UmVjdCBnYXBSZWN0ID0gcm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5
c2ljYWxSZWN0KHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIEludFJlY3QobG9naWNhbExlZnQs
IGxvZ2ljYWxUb3AsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCkpOworICAgIEZsb2F0UmVj
dCBnYXBSZWN0ID0gcm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0KHJvb3RCbG9j
a1BoeXNpY2FsUG9zaXRpb24sIEZsb2F0UmVjdChsb2dpY2FsTGVmdCwgbG9naWNhbFRvcCwgbG9n
aWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSk7CiAgICAgaWYgKHBhaW50SW5mbykKICAgICAgICAg
cGFpbnRJbmZvLT5jb250ZXh0LT5maWxsUmVjdChnYXBSZWN0LCBzZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IoKSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKICAgICByZXR1cm4gZ2FwUmVjdDsKIH0K
IAotSW50UmVjdCBSZW5kZXJCbG9jazo6bG9naWNhbExlZnRTZWxlY3Rpb25HYXAoUmVuZGVyQmxv
Y2sqIHJvb3RCbG9jaywgY29uc3QgSW50UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24s
IGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHNlbE9iaiwgaW50IGxvZ2lj
YWxMZWZ0LCBpbnQgbG9naWNhbFRvcCwgaW50IGxvZ2ljYWxIZWlnaHQsIGNvbnN0IFBhaW50SW5m
byogcGFpbnRJbmZvKQorRmxvYXRSZWN0IFJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdFNlbGVjdGlv
bkdhcChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBGbG9hdFBvaW50JiByb290QmxvY2tQ
aHlzaWNhbFBvc2l0aW9uLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3Qq
IHNlbE9iaiwgZmxvYXQgbG9naWNhbExlZnQsIGZsb2F0IGxvZ2ljYWxUb3AsIGZsb2F0IGxvZ2lj
YWxIZWlnaHQsIGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZvKQogewotICAgIGludCByb290Qmxv
Y2tMb2dpY2FsVG9wID0gYmxvY2tEaXJlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBvZmZzZXRGcm9t
Um9vdEJsb2NrKSArIGxvZ2ljYWxUb3A7Ci0gICAgaW50IHJvb3RCbG9ja0xvZ2ljYWxMZWZ0ID0g
bWF4KGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCksIGxv
Z2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCArIGxvZ2ljYWxI
ZWlnaHQpKTsKLSAgICBpbnQgcm9vdEJsb2NrTG9naWNhbFJpZ2h0ID0gbWluKGlubGluZURpcmVj
dGlvbk9mZnNldChyb290QmxvY2ssIG9mZnNldEZyb21Sb290QmxvY2spICsgbG9naWNhbExlZnQs
IG1pbihsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9wKSwg
bG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCArIGxvZ2lj
YWxIZWlnaHQpKSk7Ci0gICAgaW50IHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCA9IHJvb3RCbG9ja0xv
Z2ljYWxSaWdodCAtIHJvb3RCbG9ja0xvZ2ljYWxMZWZ0OworICAgIGZsb2F0IHJvb3RCbG9ja0xv
Z2ljYWxUb3AgPSBibG9ja0RpcmVjdGlvbk9mZnNldChyb290QmxvY2ssIG9mZnNldEZyb21Sb290
QmxvY2spICsgbG9naWNhbFRvcDsKKyAgICBmbG9hdCByb290QmxvY2tMb2dpY2FsTGVmdCA9IG1h
eChsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3ApLCBsb2dp
Y2FsTGVmdFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVp
Z2h0KSk7CisgICAgZmxvYXQgcm9vdEJsb2NrTG9naWNhbFJpZ2h0ID0gbWluKGlubGluZURpcmVj
dGlvbk9mZnNldChyb290QmxvY2ssIG9mZnNldEZyb21Sb290QmxvY2spICsgbG9naWNhbExlZnQs
IG1pbihsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9wKSwg
bG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCArIGxvZ2lj
YWxIZWlnaHQpKSk7CisgICAgZmxvYXQgcm9vdEJsb2NrTG9naWNhbFdpZHRoID0gcm9vdEJsb2Nr
TG9naWNhbFJpZ2h0IC0gcm9vdEJsb2NrTG9naWNhbExlZnQ7CiAgICAgaWYgKHJvb3RCbG9ja0xv
Z2ljYWxXaWR0aCA8PSAwKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgSW50UmVj
dCBnYXBSZWN0ID0gcm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0KHJvb3RCbG9j
a1BoeXNpY2FsUG9zaXRpb24sIEludFJlY3Qocm9vdEJsb2NrTG9naWNhbExlZnQsIHJvb3RCbG9j
a0xvZ2ljYWxUb3AsIHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCkpOworICAg
IEZsb2F0UmVjdCBnYXBSZWN0ID0gcm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0
KHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIEZsb2F0UmVjdChyb290QmxvY2tMb2dpY2FsTGVm
dCwgcm9vdEJsb2NrTG9naWNhbFRvcCwgcm9vdEJsb2NrTG9naWNhbFdpZHRoLCBsb2dpY2FsSGVp
Z2h0KSk7CiAgICAgaWYgKHBhaW50SW5mbykKICAgICAgICAgcGFpbnRJbmZvLT5jb250ZXh0LT5m
aWxsUmVjdChnYXBSZWN0LCBzZWxPYmotPnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpLCBzZWxP
YmotPnN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgcmV0dXJuIGdhcFJlY3Q7CiB9CiAKLUlu
dFJlY3QgUmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodFNlbGVjdGlvbkdhcChSZW5kZXJCbG9jayog
cm9vdEJsb2NrLCBjb25zdCBJbnRQb2ludCYgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29u
c3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHNlbE9iaiwgaW50IGxvZ2ljYWxS
aWdodCwgaW50IGxvZ2ljYWxUb3AsIGludCBsb2dpY2FsSGVpZ2h0LCBjb25zdCBQYWludEluZm8q
IHBhaW50SW5mbykKK0Zsb2F0UmVjdCBSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0U2VsZWN0aW9u
R2FwKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IEZsb2F0UG9pbnQmIHJvb3RCbG9ja1Bo
eXNpY2FsUG9zaXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3Qq
IHNlbE9iaiwgZmxvYXQgbG9naWNhbFJpZ2h0LCBmbG9hdCBsb2dpY2FsVG9wLCBmbG9hdCBsb2dp
Y2FsSGVpZ2h0LCBjb25zdCBQYWludEluZm8qIHBhaW50SW5mbykKIHsKLSAgICBpbnQgcm9vdEJs
b2NrTG9naWNhbFRvcCA9IGJsb2NrRGlyZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgb2Zmc2V0RnJv
bVJvb3RCbG9jaykgKyBsb2dpY2FsVG9wOwotICAgIGludCByb290QmxvY2tMb2dpY2FsTGVmdCA9
IG1heChpbmxpbmVEaXJlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBvZmZzZXRGcm9tUm9vdEJsb2Nr
KSArIGxvZ2ljYWxSaWdodCwgbWF4KGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9j
aywgbG9naWNhbFRvcCksIGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9n
aWNhbFRvcCArIGxvZ2ljYWxIZWlnaHQpKSk7Ci0gICAgaW50IHJvb3RCbG9ja0xvZ2ljYWxSaWdo
dCA9IG1pbihsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dpY2FsVG9w
KSwgbG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRvcCArIGxv
Z2ljYWxIZWlnaHQpKTsKLSAgICBpbnQgcm9vdEJsb2NrTG9naWNhbFdpZHRoID0gcm9vdEJsb2Nr
TG9naWNhbFJpZ2h0IC0gcm9vdEJsb2NrTG9naWNhbExlZnQ7CisgICAgZmxvYXQgcm9vdEJsb2Nr
TG9naWNhbFRvcCA9IGJsb2NrRGlyZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgb2Zmc2V0RnJvbVJv
b3RCbG9jaykgKyBsb2dpY2FsVG9wOworICAgIGZsb2F0IHJvb3RCbG9ja0xvZ2ljYWxMZWZ0ID0g
bWF4KGlubGluZURpcmVjdGlvbk9mZnNldChyb290QmxvY2ssIG9mZnNldEZyb21Sb290QmxvY2sp
ICsgbG9naWNhbFJpZ2h0LCBtYXgobG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2Nr
LCBsb2dpY2FsVG9wKSwgbG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBsb2dp
Y2FsVG9wICsgbG9naWNhbEhlaWdodCkpKTsKKyAgICBmbG9hdCByb290QmxvY2tMb2dpY2FsUmln
aHQgPSBtaW4obG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbG9naWNhbFRv
cCksIGxvZ2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxvZ2ljYWxUb3AgKyBs
b2dpY2FsSGVpZ2h0KSk7CisgICAgZmxvYXQgcm9vdEJsb2NrTG9naWNhbFdpZHRoID0gcm9vdEJs
b2NrTG9naWNhbFJpZ2h0IC0gcm9vdEJsb2NrTG9naWNhbExlZnQ7CiAgICAgaWYgKHJvb3RCbG9j
a0xvZ2ljYWxXaWR0aCA8PSAwKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgSW50
UmVjdCBnYXBSZWN0ID0gcm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0KHJvb3RC
bG9ja1BoeXNpY2FsUG9zaXRpb24sIEludFJlY3Qocm9vdEJsb2NrTG9naWNhbExlZnQsIHJvb3RC
bG9ja0xvZ2ljYWxUb3AsIHJvb3RCbG9ja0xvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCkpOwor
ICAgIEZsb2F0UmVjdCBnYXBSZWN0ID0gcm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5c2ljYWxS
ZWN0KHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIEZsb2F0UmVjdChyb290QmxvY2tMb2dpY2Fs
TGVmdCwgcm9vdEJsb2NrTG9naWNhbFRvcCwgcm9vdEJsb2NrTG9naWNhbFdpZHRoLCBsb2dpY2Fs
SGVpZ2h0KSk7CiAgICAgaWYgKHBhaW50SW5mbykKICAgICAgICAgcGFpbnRJbmZvLT5jb250ZXh0
LT5maWxsUmVjdChnYXBSZWN0LCBzZWxPYmotPnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpLCBz
ZWxPYmotPnN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgcmV0dXJuIGdhcFJlY3Q7CkBAIC0z
MDMwLDkgKzMwMzEsOSBAQAogICAgICAgICAgICAgICAgKHN0YXRlID09IFJlbmRlck9iamVjdDo6
U2VsZWN0aW9uRW5kICYmICFsdHIpOwogfQogCi1pbnQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxMZWZ0
U2VsZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrKiByb290QmxvY2ssIGludCBwb3NpdGlvbikKK2Zs
b2F0IFJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldChSZW5kZXJCbG9jayog
cm9vdEJsb2NrLCBmbG9hdCBwb3NpdGlvbikKIHsKLSAgICBpbnQgbG9naWNhbExlZnQgPSBsb2dp
Y2FsTGVmdE9mZnNldEZvckxpbmUocG9zaXRpb24sIGZhbHNlKTsKKyAgICBmbG9hdCBsb2dpY2Fs
TGVmdCA9IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgZmFsc2UpOwogICAgIGlm
IChsb2dpY2FsTGVmdCA9PSBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoKSkgewogICAgICAg
ICBpZiAocm9vdEJsb2NrICE9IHRoaXMpCiAgICAgICAgICAgICAvLyBUaGUgYm9yZGVyIGNhbiBw
b3RlbnRpYWxseSBiZSBmdXJ0aGVyIGV4dGVuZGVkIGJ5IG91ciBjb250YWluaW5nQmxvY2soKS4K
QEAgLTMwNDgsOSArMzA0OSw5IEBACiAgICAgcmV0dXJuIGxvZ2ljYWxMZWZ0OwogfQogCi1pbnQg
UmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldChSZW5kZXJCbG9jayogcm9v
dEJsb2NrLCBpbnQgcG9zaXRpb24pCitmbG9hdCBSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0U2Vs
ZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrKiByb290QmxvY2ssIGZsb2F0IHBvc2l0aW9uKQogewot
ICAgIGludCBsb2dpY2FsUmlnaHQgPSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKHBvc2l0aW9u
LCBmYWxzZSk7CisgICAgZmxvYXQgbG9naWNhbFJpZ2h0ID0gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9y
TGluZShwb3NpdGlvbiwgZmFsc2UpOwogICAgIGlmIChsb2dpY2FsUmlnaHQgPT0gbG9naWNhbFJp
Z2h0T2Zmc2V0Rm9yQ29udGVudCgpKSB7CiAgICAgICAgIGlmIChyb290QmxvY2sgIT0gdGhpcykK
ICAgICAgICAgICAgIC8vIFRoZSBib3JkZXIgY2FuIHBvdGVudGlhbGx5IGJlIGZ1cnRoZXIgZXh0
ZW5kZWQgYnkgb3VyIGNvbnRhaW5pbmdCbG9jaygpLgpAQCAtMzE2NiwxMiArMzE2NywxMiBAQAog
ICAgICAgICBpZiAoaXQgIT0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCkpIHsKICAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwogICAgICAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5l
KCkpIHsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IGxvZ2ljYWxUb3BGb3JGbG9h
dChyKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEJvdHRvbSA9IGxvZ2ljYWxCb3R0b21G
b3JGbG9hdChyKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBsb2dpY2FsVG9wID0gbG9naWNhbFRv
cEZvckZsb2F0KHIpOworICAgICAgICAgICAgICAgIGZsb2F0IGxvZ2ljYWxCb3R0b20gPSBsb2dp
Y2FsQm90dG9tRm9yRmxvYXQocik7CiAKICAgICAgICAgICAgICAgICAvLyBGaXggZm9yIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDk5NS4KLSAgICAgICAgICAgICAg
ICBpZiAobG9naWNhbEJvdHRvbSA8IDAgfHwgbG9naWNhbEJvdHRvbSA8IGxvZ2ljYWxUb3AgfHwg
bG9naWNhbFRvcCA9PSBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKLSAgICAgICAgICAgICAg
ICAgICAgbG9naWNhbEJvdHRvbSA9IG51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworICAgICAg
ICAgICAgICAgIGlmIChsb2dpY2FsQm90dG9tIDwgMCB8fCBsb2dpY2FsQm90dG9tIDwgbG9naWNh
bFRvcCB8fCBsb2dpY2FsVG9wID09IG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpCisgICAg
ICAgICAgICAgICAgICAgIGxvZ2ljYWxCb3R0b20gPSBudW1lcmljX2xpbWl0czxmbG9hdD46Om1h
eCgpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAvLyBTcGVj
aWFsLWNhc2UgemVyby0gYW5kIGxlc3MtdGhhbi16ZXJvLWhlaWdodCBmbG9hdHM6IHRob3NlIGRv
bid0IHRvdWNoCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBsaW5lIHRoYXQgdGhleSdyZSBv
biwgYnV0IGl0IHN0aWxsIG5lZWRzIHRvIGJlIGRpcnRpZWQuIFRoaXMgaXMKQEAgLTMxOTUsNyAr
MzE5Niw3IEBACiAgICAgfQogfQogCi12b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09i
amVjdHNCZWxvdyhGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0LCBpbnQgbG9naWNhbE9mZnNldCkK
K3ZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0c0JlbG93KEZsb2F0aW5nT2Jq
ZWN0KiBsYXN0RmxvYXQsIGZsb2F0IGxvZ2ljYWxPZmZzZXQpCiB7CiAgICAgaWYgKCFtX2Zsb2F0
aW5nT2JqZWN0cykKICAgICAgICAgcmV0dXJuOwpAQCAtMzI0MCw3ICszMjQxLDcgQEAKICAgICAg
ICAgfQogICAgIH0KIAotICAgIGludCBsb2dpY2FsVG9wID0gbG9naWNhbEhlaWdodCgpOworICAg
IGZsb2F0IGxvZ2ljYWxUb3AgPSBsb2dpY2FsSGVpZ2h0KCk7CiAgICAgCiAgICAgLy8gVGhlIGZs
b2F0IGNhbm5vdCBzdGFydCBhYm92ZSB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBsYXN0IHBvc2l0
aW9uZWQgZmxvYXQuCiAgICAgaWYgKGxhc3RQbGFjZWRGbG9hdGluZ09iamVjdCkKQEAgLTMyNTYs
MTEgKzMyNTcsMTEgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIFJlbmRlckJv
eCogY2hpbGRCb3ggPSBmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKTsKLSAgICAgICAgaW50IGNo
aWxkTG9naWNhbExlZnRNYXJnaW4gPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkg
PyBtYXJnaW5TdGFydEZvckNoaWxkKGNoaWxkQm94KSA6IG1hcmdpbkVuZEZvckNoaWxkKGNoaWxk
Qm94KTsKKyAgICAgICAgZmxvYXQgY2hpbGRMb2dpY2FsTGVmdE1hcmdpbiA9IHN0eWxlKCktPmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1hcmdpblN0YXJ0Rm9yQ2hpbGQoY2hpbGRCb3gpIDog
bWFyZ2luRW5kRm9yQ2hpbGQoY2hpbGRCb3gpOwogCi0gICAgICAgIGludCByaWdodE9mZnNldCA9
IGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQoKTsgLy8gQ29uc3RhbnQgcGFydCBvZiByaWdo
dCBvZmZzZXQuCi0gICAgICAgIGludCBsZWZ0T2Zmc2V0ID0gbG9naWNhbExlZnRPZmZzZXRGb3JD
b250ZW50KCk7IC8vIENvbnN0YW50IHBhcnQgb2YgbGVmdCBvZmZzZXQuCi0gICAgICAgIGludCBm
bG9hdExvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxXaWR0aEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KTsg
Ly8gVGhlIHdpZHRoIHdlIGxvb2sgZm9yLgorICAgICAgICBmbG9hdCByaWdodE9mZnNldCA9IGxv
Z2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQoKTsgLy8gQ29uc3RhbnQgcGFydCBvZiByaWdodCBv
ZmZzZXQuCisgICAgICAgIGZsb2F0IGxlZnRPZmZzZXQgPSBsb2dpY2FsTGVmdE9mZnNldEZvckNv
bnRlbnQoKTsgLy8gQ29uc3RhbnQgcGFydCBvZiBsZWZ0IG9mZnNldC4KKyAgICAgICAgZmxvYXQg
ZmxvYXRMb2dpY2FsV2lkdGggPSBsb2dpY2FsV2lkdGhGb3JGbG9hdChmbG9hdGluZ09iamVjdCk7
IC8vIFRoZSB3aWR0aCB3ZSBsb29rIGZvci4KICAgICAgICAgaWYgKHJpZ2h0T2Zmc2V0IC0gbGVm
dE9mZnNldCA8IGZsb2F0TG9naWNhbFdpZHRoKQogICAgICAgICAgICAgZmxvYXRMb2dpY2FsV2lk
dGggPSByaWdodE9mZnNldCAtIGxlZnRPZmZzZXQ7IC8vIE5ldmVyIGxvb2sgZm9yIG1vcmUgdGhh
biB3aGF0IHdpbGwgYmUgYXZhaWxhYmxlLgogICAgICAgICAKQEAgLTMyNzEsMTkgKzMyNzIsMTkg
QEAKICAgICAgICAgaWYgKGNoaWxkQm94LT5zdHlsZSgpLT5jbGVhcigpICYgQ1JJR0hUKQogICAg
ICAgICAgICAgbG9naWNhbFRvcCA9IG1heChsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oRmxvYXRp
bmdPYmplY3Q6OkZsb2F0UmlnaHQpLCBsb2dpY2FsVG9wKTsKIAotICAgICAgICBpbnQgZmxvYXRM
b2dpY2FsTGVmdDsKKyAgICAgICAgZmxvYXQgZmxvYXRMb2dpY2FsTGVmdDsKICAgICAgICAgaWYg
KGNoaWxkQm94LT5zdHlsZSgpLT5mbG9hdGluZygpID09IEZMRUZUKSB7Ci0gICAgICAgICAgICBp
bnQgaGVpZ2h0UmVtYWluaW5nTGVmdCA9IDE7Ci0gICAgICAgICAgICBpbnQgaGVpZ2h0UmVtYWlu
aW5nUmlnaHQgPSAxOworICAgICAgICAgICAgZmxvYXQgaGVpZ2h0UmVtYWluaW5nTGVmdCA9IDE7
CisgICAgICAgICAgICBmbG9hdCBoZWlnaHRSZW1haW5pbmdSaWdodCA9IDE7CiAgICAgICAgICAg
ICBmbG9hdExvZ2ljYWxMZWZ0ID0gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKGxvZ2ljYWxUb3As
IGxlZnRPZmZzZXQsIGZhbHNlLCAmaGVpZ2h0UmVtYWluaW5nTGVmdCk7CiAgICAgICAgICAgICB3
aGlsZSAobG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShsb2dpY2FsVG9wLCByaWdodE9mZnNldCwg
ZmFsc2UsICZoZWlnaHRSZW1haW5pbmdSaWdodCkgLSBmbG9hdExvZ2ljYWxMZWZ0IDwgZmxvYXRM
b2dpY2FsV2lkdGgpIHsKICAgICAgICAgICAgICAgICBsb2dpY2FsVG9wICs9IG1pbihoZWlnaHRS
ZW1haW5pbmdMZWZ0LCBoZWlnaHRSZW1haW5pbmdSaWdodCk7CiAgICAgICAgICAgICAgICAgZmxv
YXRMb2dpY2FsTGVmdCA9IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShsb2dpY2FsVG9wLCBsZWZ0
T2Zmc2V0LCBmYWxzZSwgJmhlaWdodFJlbWFpbmluZ0xlZnQpOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZmxvYXRMb2dpY2FsTGVmdCA9IG1heCgwLCBmbG9hdExvZ2ljYWxMZWZ0KTsKKyAg
ICAgICAgICAgIGZsb2F0TG9naWNhbExlZnQgPSBtYXgoMC4wZiwgZmxvYXRMb2dpY2FsTGVmdCk7
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnQgaGVpZ2h0UmVtYWluaW5nTGVmdCA9
IDE7Ci0gICAgICAgICAgICBpbnQgaGVpZ2h0UmVtYWluaW5nUmlnaHQgPSAxOworICAgICAgICAg
ICAgZmxvYXQgaGVpZ2h0UmVtYWluaW5nTGVmdCA9IDE7CisgICAgICAgICAgICBmbG9hdCBoZWln
aHRSZW1haW5pbmdSaWdodCA9IDE7CiAgICAgICAgICAgICBmbG9hdExvZ2ljYWxMZWZ0ID0gbG9n
aWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShsb2dpY2FsVG9wLCByaWdodE9mZnNldCwgZmFsc2UsICZo
ZWlnaHRSZW1haW5pbmdSaWdodCk7CiAgICAgICAgICAgICB3aGlsZSAoZmxvYXRMb2dpY2FsTGVm
dCAtIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShsb2dpY2FsVG9wLCBsZWZ0T2Zmc2V0LCBmYWxz
ZSwgJmhlaWdodFJlbWFpbmluZ0xlZnQpIDwgZmxvYXRMb2dpY2FsV2lkdGgpIHsKICAgICAgICAg
ICAgICAgICBsb2dpY2FsVG9wICs9IG1pbihoZWlnaHRSZW1haW5pbmdMZWZ0LCBoZWlnaHRSZW1h
aW5pbmdSaWdodCk7CkBAIC0zMzA3LDcgKzMzMDgsNyBAQAogCiAgICAgICAgICAgICAvLyBJZiB3
ZSBhcmUgdW5zcGxpdHRhYmxlIGFuZCBkb24ndCBmaXQsIHRoZW4gd2UgbmVlZCB0byBtb3ZlIGRv
d24uCiAgICAgICAgICAgICAvLyBXZSBpbmNsdWRlIG91ciBtYXJnaW5zIGFzIHBhcnQgb2YgdGhl
IHVuc3BsaXR0YWJsZSBhcmVhLgotICAgICAgICAgICAgaW50IG5ld0xvZ2ljYWxUb3AgPSBhZGp1
c3RGb3JVbnNwbGl0dGFibGVDaGlsZChjaGlsZEJveCwgbG9naWNhbFRvcCwgdHJ1ZSk7CisgICAg
ICAgICAgICBmbG9hdCBuZXdMb2dpY2FsVG9wID0gYWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQo
Y2hpbGRCb3gsIGxvZ2ljYWxUb3AsIHRydWUpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAv
LyBTZWUgaWYgd2UgaGF2ZSBhIHBhZ2luYXRpb24gc3RydXQgdGhhdCBpcyBtYWtpbmcgdXMgbW92
ZSBkb3duIGZ1cnRoZXIuCiAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgYW4gdW5zcGxpdHRhYmxl
IGNoaWxkIGNhbid0IGFsc28gaGF2ZSBhIHBhZ2luYXRpb24gc3RydXQsIHNvIHRoaXMgaXMKQEAg
LTM0MjYsOSArMzQyNyw5IEBACiAvLyBlYWNoIGZsb2F0IGluZGl2aWR1YWxseSwgd2UnZCBqdXN0
IHdhbGsgYmFja3dhcmRzIHRocm91Z2ggdGhlICJsaW5lcyIgYW5kIHN0b3Agd2hlbiB3ZSBoaXQg
YSBsaW5lIHRoYXQgaXMgZnVsbHkgYWJvdmUKIC8vIHRoZSB2ZXJ0aWNhbCBvZmZzZXQgdGhhdCB3
ZSdkIGxpa2UgdG8gY2hlY2suICBDb21wdXRpbmcgdGhlICJsaW5lcyIgd291bGQgYmUgcmF0aGVy
IGNvbXBsaWNhdGVkLCBidXQgY291bGQgcmVwbGFjZSB0aGUgbGVmdAogLy8gb2JqZWN0cyBhbmQg
cmlnaHQgb2JqZWN0cyBjb3VudCBoYWNrIHRoYXQgaXMgY3VycmVudGx5IHVzZWQgaGVyZS4KLWlu
dCBSZW5kZXJCbG9jazo6bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKGludCBsb2dpY2FsVG9wLCBp
bnQgZml4ZWRPZmZzZXQsIGJvb2wgYXBwbHlUZXh0SW5kZW50LCBpbnQqIGhlaWdodFJlbWFpbmlu
ZykgY29uc3QKK2Zsb2F0IFJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoZmxv
YXQgbG9naWNhbFRvcCwgZmxvYXQgZml4ZWRPZmZzZXQsIGJvb2wgYXBwbHlUZXh0SW5kZW50LCBm
bG9hdCogaGVpZ2h0UmVtYWluaW5nKSBjb25zdAogewotICAgIGludCBsZWZ0ID0gZml4ZWRPZmZz
ZXQ7CisgICAgZmxvYXQgbGVmdCA9IGZpeGVkT2Zmc2V0OwogICAgIGlmIChtX2Zsb2F0aW5nT2Jq
ZWN0cyAmJiBtX2Zsb2F0aW5nT2JqZWN0cy0+aGFzTGVmdE9iamVjdHMoKSkgewogICAgICAgICBp
ZiAoaGVpZ2h0UmVtYWluaW5nKQogICAgICAgICAgICAgKmhlaWdodFJlbWFpbmluZyA9IDE7CkBA
IC0zNDYyLDkgKzM0NjMsOSBAQAogICAgIHJldHVybiBsZWZ0OwogfQogCi1pbnQgUmVuZGVyQmxv
Y2s6OmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoaW50IGxvZ2ljYWxUb3AsIGludCBmaXhlZE9m
ZnNldCwgYm9vbCBhcHBseVRleHRJbmRlbnQsIGludCogaGVpZ2h0UmVtYWluaW5nKSBjb25zdAor
ZmxvYXQgUmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoZmxvYXQgbG9naWNh
bFRvcCwgZmxvYXQgZml4ZWRPZmZzZXQsIGJvb2wgYXBwbHlUZXh0SW5kZW50LCBmbG9hdCogaGVp
Z2h0UmVtYWluaW5nKSBjb25zdAogewotICAgIGludCByaWdodCA9IGZpeGVkT2Zmc2V0OworICAg
IGZsb2F0IHJpZ2h0ID0gZml4ZWRPZmZzZXQ7CiAKICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMg
JiYgbV9mbG9hdGluZ09iamVjdHMtPmhhc1JpZ2h0T2JqZWN0cygpKSB7CiAgICAgICAgIGlmICho
ZWlnaHRSZW1haW5pbmcpCkBAIC0zNDk5LDM1ICszNTAwLDM1IEBACiAgICAgcmV0dXJuIHJpZ2h0
OwogfQogCi1pbnQgUmVuZGVyQmxvY2s6OmF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUoaW50
IHBvc2l0aW9uLCBib29sIGZpcnN0TGluZSkgY29uc3QKK2Zsb2F0IFJlbmRlckJsb2NrOjphdmFp
bGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lKGZsb2F0IHBvc2l0aW9uLCBib29sIGZpcnN0TGluZSkg
Y29uc3QKIHsKLSAgICBpbnQgcmVzdWx0ID0gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShwb3Np
dGlvbiwgZmlyc3RMaW5lKSAtIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwgZmly
c3RMaW5lKTsKKyAgICBmbG9hdCByZXN1bHQgPSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKHBv
c2l0aW9uLCBmaXJzdExpbmUpIC0gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBm
aXJzdExpbmUpOwogICAgIHJldHVybiAocmVzdWx0IDwgMCkgPyAwIDogcmVzdWx0OwogfQogCi1p
bnQgUmVuZGVyQmxvY2s6Om5leHRGbG9hdExvZ2ljYWxCb3R0b21CZWxvdyhpbnQgbG9naWNhbEhl
aWdodCkgY29uc3QKK2Zsb2F0IFJlbmRlckJsb2NrOjpuZXh0RmxvYXRMb2dpY2FsQm90dG9tQmVs
b3coZmxvYXQgbG9naWNhbEhlaWdodCkgY29uc3QKIHsKICAgICBpZiAoIW1fZmxvYXRpbmdPYmpl
Y3RzKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGludCBib3R0b20gPSBJTlRfTUFYOworICAg
IGZsb2F0IGJvdHRvbSA9IEZMVF9NQVg7CiAgICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5n
T2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIEZsb2F0aW5nT2JqZWN0
U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgZm9yIChGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwotICAgICAg
ICBpbnQgZmxvYXRCb3R0b20gPSBsb2dpY2FsQm90dG9tRm9yRmxvYXQocik7CisgICAgICAgIGZs
b2F0IGZsb2F0Qm90dG9tID0gbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpOwogICAgICAgICBpZiAo
ZmxvYXRCb3R0b20gPiBsb2dpY2FsSGVpZ2h0KQogICAgICAgICAgICAgYm90dG9tID0gbWluKGZs
b2F0Qm90dG9tLCBib3R0b20pOwogICAgIH0KIAotICAgIHJldHVybiBib3R0b20gPT0gSU5UX01B
WCA/IDAgOiBib3R0b207CisgICAgcmV0dXJuIGJvdHRvbSA9PSBGTFRfTUFYID8gMCA6IGJvdHRv
bTsKIH0KIAotaW50IFJlbmRlckJsb2NrOjpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oRmxvYXRp
bmdPYmplY3Q6OlR5cGUgZmxvYXRUeXBlKSBjb25zdAorZmxvYXQgUmVuZGVyQmxvY2s6Omxvd2Vz
dEZsb2F0TG9naWNhbEJvdHRvbShGbG9hdGluZ09iamVjdDo6VHlwZSBmbG9hdFR5cGUpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
aW50IGxvd2VzdEZsb2F0Qm90dG9tID0gMDsKKyAgICBmbG9hdCBsb3dlc3RGbG9hdEJvdHRvbSA9
IDA7CiAgICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGlu
Z09iamVjdHMtPnNldCgpOwogICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxv
YXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9y
IGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBAIC0z
NTM4LDE0ICszNTM5LDE0IEBACiAgICAgcmV0dXJuIGxvd2VzdEZsb2F0Qm90dG9tOwogfQogCi12
b2lkIFJlbmRlckJsb2NrOjptYXJrTGluZXNEaXJ0eUluQmxvY2tSYW5nZShpbnQgbG9naWNhbFRv
cCwgaW50IGxvZ2ljYWxCb3R0b20sIFJvb3RJbmxpbmVCb3gqIGhpZ2hlc3QpCit2b2lkIFJlbmRl
ckJsb2NrOjptYXJrTGluZXNEaXJ0eUluQmxvY2tSYW5nZShmbG9hdCBsb2dpY2FsVG9wLCBmbG9h
dCBsb2dpY2FsQm90dG9tLCBSb290SW5saW5lQm94KiBoaWdoZXN0KQogewogICAgIGlmIChsb2dp
Y2FsVG9wID49IGxvZ2ljYWxCb3R0b20pCiAgICAgICAgIHJldHVybjsKIAogICAgIFJvb3RJbmxp
bmVCb3gqIGxvd2VzdERpcnR5TGluZSA9IGxhc3RSb290Qm94KCk7CiAgICAgUm9vdElubGluZUJv
eCogYWZ0ZXJMb3dlc3QgPSBsb3dlc3REaXJ0eUxpbmU7Ci0gICAgd2hpbGUgKGxvd2VzdERpcnR5
TGluZSAmJiBsb3dlc3REaXJ0eUxpbmUtPmJsb2NrTG9naWNhbEhlaWdodCgpID49IGxvZ2ljYWxC
b3R0b20gJiYgbG9naWNhbEJvdHRvbSA8IG51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSB7Cisg
ICAgd2hpbGUgKGxvd2VzdERpcnR5TGluZSAmJiBsb3dlc3REaXJ0eUxpbmUtPmJsb2NrTG9naWNh
bEhlaWdodCgpID49IGxvZ2ljYWxCb3R0b20gJiYgbG9naWNhbEJvdHRvbSA8IG51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6bWF4KCkpIHsKICAgICAgICAgYWZ0ZXJMb3dlc3QgPSBsb3dlc3REaXJ0eUxp
bmU7CiAgICAgICAgIGxvd2VzdERpcnR5TGluZSA9IGxvd2VzdERpcnR5TGluZS0+cHJldlJvb3RC
b3goKTsKICAgICB9CkBAIC0zNjAyLDExICszNjAzLDExIEBACiAgICAgfQogCiAgICAgLy8gRmly
c3QgYWRkIGluIGZsb2F0cyBmcm9tIHRoZSBwYXJlbnQuCi0gICAgaW50IGxvZ2ljYWxUb3BPZmZz
ZXQgPSBsb2dpY2FsVG9wKCk7CisgICAgZmxvYXQgbG9naWNhbFRvcE9mZnNldCA9IGxvZ2ljYWxU
b3AoKTsKICAgICBpZiAocGFyZW50SGFzRmxvYXRzKQogICAgICAgICBhZGRJbnRydWRpbmdGbG9h
dHMocGFyZW50QmxvY2ssIHBhcmVudEJsb2NrLT5sb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQo
KSwgbG9naWNhbFRvcE9mZnNldCk7CiAgICAgCi0gICAgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0ID0g
MDsKKyAgICBmbG9hdCBsb2dpY2FsTGVmdE9mZnNldCA9IDA7CiAgICAgaWYgKHByZXYpCiAgICAg
ICAgIGxvZ2ljYWxUb3BPZmZzZXQgLT0gdG9SZW5kZXJCb3gocHJldiktPmxvZ2ljYWxUb3AoKTsK
ICAgICBlbHNlIHsKQEAgLTM2MjMsMTcgKzM2MjQsMTcgQEAKICAgICAgICAgYWRkSW50cnVkaW5n
RmxvYXRzKGJsb2NrLCBsb2dpY2FsTGVmdE9mZnNldCwgbG9naWNhbFRvcE9mZnNldCk7CiAKICAg
ICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewotICAgICAgICBpbnQgY2hhbmdlTG9naWNhbFRvcCA9
IG51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwotICAgICAgICBpbnQgY2hhbmdlTG9naWNhbEJv
dHRvbSA9IG51bWVyaWNfbGltaXRzPGludD46Om1pbigpOworICAgICAgICBmbG9hdCBjaGFuZ2VM
b2dpY2FsVG9wID0gbnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsKKyAgICAgICAgZmxvYXQg
Y2hhbmdlTG9naWNhbEJvdHRvbSA9IG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWluKCk7CiAgICAg
ICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RT
ZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAg
ICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5l
bmQoKTsKICAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZs
b2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwogICAgICAgICAgICAgICAgIEZsb2F0aW5nT2Jq
ZWN0KiBvbGRGbG9hdGluZ09iamVjdCA9IGZsb2F0TWFwLmdldChmLT5tX3JlbmRlcmVyKTsKLSAg
ICAgICAgICAgICAgICBpbnQgbG9naWNhbEJvdHRvbSA9IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChm
KTsKKyAgICAgICAgICAgICAgICBmbG9hdCBsb2dpY2FsQm90dG9tID0gbG9naWNhbEJvdHRvbUZv
ckZsb2F0KGYpOwogICAgICAgICAgICAgICAgIGlmIChvbGRGbG9hdGluZ09iamVjdCkgewotICAg
ICAgICAgICAgICAgICAgICBpbnQgb2xkTG9naWNhbEJvdHRvbSA9IGxvZ2ljYWxCb3R0b21Gb3JG
bG9hdChvbGRGbG9hdGluZ09iamVjdCk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IG9sZExv
Z2ljYWxCb3R0b20gPSBsb2dpY2FsQm90dG9tRm9yRmxvYXQob2xkRmxvYXRpbmdPYmplY3QpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAobG9naWNhbFdpZHRoRm9yRmxvYXQoZikgIT0gbG9naWNh
bFdpZHRoRm9yRmxvYXQob2xkRmxvYXRpbmdPYmplY3QpIHx8IGxvZ2ljYWxMZWZ0Rm9yRmxvYXQo
ZikgIT0gbG9naWNhbExlZnRGb3JGbG9hdChvbGRGbG9hdGluZ09iamVjdCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSAwOwogICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1heChjaGFuZ2VMb2dpY2FsQm90dG9tLCBtYXgo
bG9naWNhbEJvdHRvbSwgb2xkTG9naWNhbEJvdHRvbSkpOwpAQCAtMzY2OSwzMCArMzY3MCwzMCBA
QAogICAgIH0KIH0KIAotaW50IFJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyhSZW5k
ZXJCbG9jayogY2hpbGQsIGludCBsb2dpY2FsTGVmdE9mZnNldCwgaW50IGxvZ2ljYWxUb3BPZmZz
ZXQsIGJvb2wgbWFrZUNoaWxkUGFpbnRPdGhlckZsb2F0cykKK2Zsb2F0IFJlbmRlckJsb2NrOjph
ZGRPdmVyaGFuZ2luZ0Zsb2F0cyhSZW5kZXJCbG9jayogY2hpbGQsIGZsb2F0IGxvZ2ljYWxMZWZ0
T2Zmc2V0LCBmbG9hdCBsb2dpY2FsVG9wT2Zmc2V0LCBib29sIG1ha2VDaGlsZFBhaW50T3RoZXJG
bG9hdHMpCiB7CiAgICAgLy8gUHJldmVudCBmbG9hdHMgZnJvbSBiZWluZyBhZGRlZCB0byB0aGUg
Y2FudmFzIGJ5IHRoZSByb290IGVsZW1lbnQsIGUuZy4sIDxodG1sPi4KICAgICBpZiAoY2hpbGQt
Pmhhc092ZXJmbG93Q2xpcCgpIHx8ICFjaGlsZC0+Y29udGFpbnNGbG9hdHMoKSB8fCBjaGlsZC0+
aXNSb290KCkgfHwgY2hpbGQtPmhhc0NvbHVtbnMoKSB8fCBjaGlsZC0+aXNXcml0aW5nTW9kZVJv
b3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpbnQgY2hpbGRMb2dpY2FsVG9wID0gY2hp
bGQtPmxvZ2ljYWxUb3AoKTsKLSAgICBpbnQgbG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tID0gMDsK
KyAgICBmbG9hdCBjaGlsZExvZ2ljYWxUb3AgPSBjaGlsZC0+bG9naWNhbFRvcCgpOworICAgIGZs
b2F0IGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSA9IDA7CiAKICAgICAvLyBGbG9hdHMgdGhhdCB3
aWxsIHJlbWFpbiB0aGUgY2hpbGQncyByZXNwb25zaWJpbGl0eSB0byBwYWludCBzaG91bGQgZmFj
dG9yIGludG8gaXRzCiAgICAgLy8gb3ZlcmZsb3cuCiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBjaGlsZEVuZCA9IGNoaWxkLT5tX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuZW5kKCk7CiAg
ICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGNoaWxkSXQgPSBjaGlsZC0+bV9mbG9h
dGluZ09iamVjdHMtPnNldCgpLmJlZ2luKCk7IGNoaWxkSXQgIT0gY2hpbGRFbmQ7ICsrY2hpbGRJ
dCkgewogICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICpjaGlsZEl0OwotICAgICAgICBpbnQg
bG9naWNhbEJvdHRvbUZvckZsb2F0ID0gbWluKHRoaXMtPmxvZ2ljYWxCb3R0b21Gb3JGbG9hdChy
KSwgbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkgLSBjaGlsZExvZ2ljYWxUb3ApOwotICAgICAg
ICBpbnQgbG9naWNhbEJvdHRvbSA9IGNoaWxkTG9naWNhbFRvcCArIGxvZ2ljYWxCb3R0b21Gb3JG
bG9hdDsKKyAgICAgICAgZmxvYXQgbG9naWNhbEJvdHRvbUZvckZsb2F0ID0gbWluKHRoaXMtPmxv
Z2ljYWxCb3R0b21Gb3JGbG9hdChyKSwgbnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSAtIGNo
aWxkTG9naWNhbFRvcCk7CisgICAgICAgIGZsb2F0IGxvZ2ljYWxCb3R0b20gPSBjaGlsZExvZ2lj
YWxUb3AgKyBsb2dpY2FsQm90dG9tRm9yRmxvYXQ7CiAgICAgICAgIGxvd2VzdEZsb2F0TG9naWNh
bEJvdHRvbSA9IG1heChsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20sIGxvZ2ljYWxCb3R0b20pOwog
CiAgICAgICAgIGlmIChsb2dpY2FsQm90dG9tID4gbG9naWNhbEhlaWdodCgpKSB7CiAgICAgICAg
ICAgICAvLyBJZiB0aGUgb2JqZWN0IGlzIG5vdCBpbiB0aGUgbGlzdCwgd2UgYWRkIGl0IG5vdy4K
ICAgICAgICAgICAgIGlmICghY29udGFpbnNGbG9hdChyLT5tX3JlbmRlcmVyKSkgewotICAgICAg
ICAgICAgICAgIGludCBsZWZ0T2Zmc2V0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxv
Z2ljYWxMZWZ0T2Zmc2V0IDogbG9naWNhbFRvcE9mZnNldDsKLSAgICAgICAgICAgICAgICBpbnQg
dG9wT2Zmc2V0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvZ2ljYWxUb3BPZmZzZXQg
OiBsb2dpY2FsTGVmdE9mZnNldDsKLSAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZmxv
YXRpbmdPYmogPSBuZXcgRmxvYXRpbmdPYmplY3Qoci0+dHlwZSgpLCBJbnRSZWN0KHItPngoKSAt
IGxlZnRPZmZzZXQsIHItPnkoKSAtIHRvcE9mZnNldCwgci0+d2lkdGgoKSwgci0+aGVpZ2h0KCkp
KTsKKyAgICAgICAgICAgICAgICBmbG9hdCBsZWZ0T2Zmc2V0ID0gaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0IDogbG9naWNhbFRvcE9mZnNldDsKKyAgICAgICAg
ICAgICAgICBmbG9hdCB0b3BPZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9n
aWNhbFRvcE9mZnNldCA6IGxvZ2ljYWxMZWZ0T2Zmc2V0OworICAgICAgICAgICAgICAgIEZsb2F0
aW5nT2JqZWN0KiBmbG9hdGluZ09iaiA9IG5ldyBGbG9hdGluZ09iamVjdChyLT50eXBlKCksIEZs
b2F0UmVjdChyLT54KCkgLSBsZWZ0T2Zmc2V0LCByLT55KCkgLSB0b3BPZmZzZXQsIHItPndpZHRo
KCksIHItPmhlaWdodCgpKSk7CiAgICAgICAgICAgICAgICAgZmxvYXRpbmdPYmotPm1fcmVuZGVy
ZXIgPSByLT5tX3JlbmRlcmVyOwogCiAgICAgICAgICAgICAgICAgLy8gVGhlIG5lYXJlc3QgZW5j
bG9zaW5nIGxheWVyIGFsd2F5cyBwYWludHMgdGhlIGZsb2F0IChzbyB0aGF0IHppbmRleCBhbmQg
c3RhY2tpbmcKQEAgLTM3MzMsNyArMzczNCw3IEBACiAgICAgcmV0dXJuIGxvd2VzdEZsb2F0TG9n
aWNhbEJvdHRvbTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxvYXRzKFJl
bmRlckJsb2NrKiBwcmV2LCBpbnQgbG9naWNhbExlZnRPZmZzZXQsIGludCBsb2dpY2FsVG9wT2Zm
c2V0KQordm9pZCBSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxvYXRzKFJlbmRlckJsb2NrKiBw
cmV2LCBmbG9hdCBsb2dpY2FsTGVmdE9mZnNldCwgZmxvYXQgbG9naWNhbFRvcE9mZnNldCkKIHsK
ICAgICAvLyBJZiB0aGUgcGFyZW50IG9yIHByZXZpb3VzIHNpYmxpbmcgZG9lc24ndCBoYXZlIGFu
eSBmbG9hdHMgdG8gYWRkLCBkb24ndCBib3RoZXIuCiAgICAgaWYgKCFwcmV2LT5tX2Zsb2F0aW5n
T2JqZWN0cykKQEAgLTM3NDcsMTAgKzM3NDgsMTAgQEAKICAgICAgICAgRmxvYXRpbmdPYmplY3Qq
IHIgPSAqcHJldkl0OwogICAgICAgICBpZiAobG9naWNhbEJvdHRvbUZvckZsb2F0KHIpID4gbG9n
aWNhbFRvcE9mZnNldCkgewogICAgICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cyB8fCAh
bV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmNvbnRhaW5zKHIpKSB7Ci0gICAgICAgICAgICAgICAg
aW50IGxlZnRPZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9naWNhbExlZnRP
ZmZzZXQgOiBsb2dpY2FsVG9wT2Zmc2V0OwotICAgICAgICAgICAgICAgIGludCB0b3BPZmZzZXQg
PSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9naWNhbFRvcE9mZnNldCA6IGxvZ2ljYWxM
ZWZ0T2Zmc2V0OworICAgICAgICAgICAgICAgIGZsb2F0IGxlZnRPZmZzZXQgPSBpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gbG9naWNhbExlZnRPZmZzZXQgOiBsb2dpY2FsVG9wT2Zmc2V0Owor
ICAgICAgICAgICAgICAgIGZsb2F0IHRvcE9mZnNldCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBsb2dpY2FsVG9wT2Zmc2V0IDogbG9naWNhbExlZnRPZmZzZXQ7CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqID0gbmV3IEZs
b2F0aW5nT2JqZWN0KHItPnR5cGUoKSwgSW50UmVjdChyLT54KCkgLSBsZWZ0T2Zmc2V0LCByLT55
KCkgLSB0b3BPZmZzZXQsIHItPndpZHRoKCksIHItPmhlaWdodCgpKSk7CisgICAgICAgICAgICAg
ICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqID0gbmV3IEZsb2F0aW5nT2JqZWN0KHItPnR5
cGUoKSwgRmxvYXRSZWN0KHItPngoKSAtIGxlZnRPZmZzZXQsIHItPnkoKSAtIHRvcE9mZnNldCwg
ci0+d2lkdGgoKSwgci0+aGVpZ2h0KCkpKTsKIAogICAgICAgICAgICAgICAgIC8vIEFwcGx5aW5n
IHRoZSBjaGlsZCdzIG1hcmdpbiBtYWtlcyBubyBzZW5zZSBpbiB0aGUgY2FzZSB3aGVyZSB0aGUg
Y2hpbGQgd2FzIHBhc3NlZCBpbi4KICAgICAgICAgICAgICAgICAvLyBzaW5jZSB0aGlzIG1hcmdp
biB3YXMgYWRkZWQgYWxyZWFkeSB0aHJvdWdoIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIHxsb2dp
Y2FsTGVmdE9mZnNldHwgdmFyaWFibGUKQEAgLTM4MzQsNyArMzgzNSw3IEBACiAgICAgfQogfQog
Ci1pbnQgUmVuZGVyQmxvY2s6OmdldENsZWFyRGVsdGEoUmVuZGVyQm94KiBjaGlsZCwgaW50IHlQ
b3MpCitmbG9hdCBSZW5kZXJCbG9jazo6Z2V0Q2xlYXJEZWx0YShSZW5kZXJCb3gqIGNoaWxkLCBm
bG9hdCB5UG9zKQogewogICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gY29tcHV0ZSBjbGVhcmFu
Y2UgaWYgd2UgaGF2ZSBubyBmbG9hdHMuCiAgICAgaWYgKCFjb250YWluc0Zsb2F0cygpKQpAQCAt
Mzg0Miw3ICszODQzLDcgQEAKICAgICAKICAgICAvLyBBdCBsZWFzdCBvbmUgZmxvYXQgaXMgcHJl
c2VudC4gIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGUgY2xlYXJhbmNlIGNvbXB1dGF0aW9uLgogICAg
IGJvb2wgY2xlYXJTZXQgPSBjaGlsZC0+c3R5bGUoKS0+Y2xlYXIoKSAhPSBDTk9ORTsKLSAgICBp
bnQgYm90dG9tID0gMDsKKyAgICBmbG9hdCBib3R0b20gPSAwOwogICAgIHN3aXRjaCAoY2hpbGQt
PnN0eWxlKCktPmNsZWFyKCkpIHsKICAgICAgICAgY2FzZSBDTk9ORToKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMzg1OCw3ICszODU5LDcgQEAKICAgICB9CiAKICAgICAvLyBXZSBhbHNvIGNsZWFy
IGZsb2F0cyBpZiB3ZSBhcmUgdG9vIGJpZyB0byBzaXQgb24gdGhlIHNhbWUgbGluZSBhcyBhIGZs
b2F0IChhbmQgd2lzaCB0byBhdm9pZCBmbG9hdHMgYnkgZGVmYXVsdCkuCi0gICAgaW50IHJlc3Vs
dCA9IGNsZWFyU2V0ID8gbWF4KDAsIGJvdHRvbSAtIHlQb3MpIDogMDsKKyAgICBmbG9hdCByZXN1
bHQgPSBjbGVhclNldCA/IG1heCgwLjBmLCBib3R0b20gLSB5UG9zKSA6IDA7CiAgICAgaWYgKCFy
ZXN1bHQgJiYgY2hpbGQtPmF2b2lkc0Zsb2F0cygpKSB7CiAgICAgICAgIGludCB5ID0geVBvczsK
ICAgICAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTM4OTcsMTIgKzM4OTgsMTIgQEAKIAogYm9vbCBS
ZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNv
bnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0
aW9uKQogewotICAgIEludFBvaW50IGFkanVzdGVkTG9jYXRpb24oYWNjdW11bGF0ZWRPZmZzZXQg
KyBsb2NhdGlvbigpKTsKKyAgICBJbnRQb2ludCBhZGp1c3RlZExvY2F0aW9uKHJvdW5kZWRJbnRQ
b2ludChhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCkpKTsKICAgICBJbnRTaXplIGxvY2Fs
T2Zmc2V0ID0gdG9TaXplKGFkanVzdGVkTG9jYXRpb24pOwogCiAgICAgaWYgKCFpc1JlbmRlclZp
ZXcoKSkgewogICAgICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGRvIGFueXRoaW5nIGF0IGFs
bC4KLSAgICAgICAgSW50UmVjdCBvdmVyZmxvd0JveCA9IHZpc3VhbE92ZXJmbG93UmVjdCgpOwor
ICAgICAgICBJbnRSZWN0IG92ZXJmbG93Qm94ID0gZW5jbG9zaW5nSW50UmVjdCh2aXN1YWxPdmVy
Zmxvd1JlY3QoKSk7CiAgICAgICAgIG92ZXJmbG93Qm94Lm1vdmVCeShhZGp1c3RlZExvY2F0aW9u
KTsKICAgICAgICAgaWYgKCFvdmVyZmxvd0JveC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9p
bnQocG9pbnRJbkNvbnRhaW5lcikpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzk0
Myw3ICszOTQ0LDcgQEAKIAogICAgIC8vIE5vdyBoaXQgdGVzdCBvdXIgYmFja2dyb3VuZAogICAg
IGlmIChoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgaGl0VGVzdEFj
dGlvbiA9PSBIaXRUZXN0Q2hpbGRCbG9ja0JhY2tncm91bmQpIHsKLSAgICAgICAgSW50UmVjdCBi
b3VuZHNSZWN0KGFkanVzdGVkTG9jYXRpb24sIHNpemUoKSk7CisgICAgICAgIEludFJlY3QgYm91
bmRzUmVjdChlbmNsb3NpbmdJbnRSZWN0KGFkanVzdGVkTG9jYXRpb24sIHNpemUoKSkpOwogICAg
ICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGJvdW5kc1JlY3QuaW50ZXJzZWN0cyhy
ZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkgewogICAgICAgICAgICAgdXBk
YXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGZsaXBGb3JXcml0aW5nTW9kZShwb2ludEluQ29udGFp
bmVyIC0gbG9jYWxPZmZzZXQpKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0LmFkZE5vZGVUb1Jl
Y3RCYXNlZFRlc3RSZXN1bHQobm9kZSgpLCBwb2ludEluQ29udGFpbmVyLCBib3VuZHNSZWN0KSkK
QEAgLTM5NTksNyArMzk2MCw3IEBACiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW50UG9pbnQgYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3Vt
dWxhdGVkT2Zmc2V0OworICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxh
dGVkT2Zmc2V0OwogICAgIGlmIChpc1JlbmRlclZpZXcoKSkgewogICAgICAgICBhZGp1c3RlZExv
Y2F0aW9uICs9IHRvU2l6ZSh0b1JlbmRlclZpZXcodGhpcyktPmZyYW1lVmlldygpLT5zY3JvbGxQ
b3NpdGlvbigpKTsKICAgICB9CkBAIC0zOTcwLDkgKzM5NzEsOSBAQAogICAgICAgICAtLWl0Owog
ICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSAqaXQ7CiAgICAgICAgIGlm
IChmbG9hdGluZ09iamVjdC0+bV9zaG91bGRQYWludCAmJiAhZmxvYXRpbmdPYmplY3QtPm1fcmVu
ZGVyZXItPmhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsKLSAgICAgICAgICAgIGludCB4T2Zmc2V0
ID0geFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oZmxvYXRpbmdPYmplY3QpIC0gZmxv
YXRpbmdPYmplY3QtPm1fcmVuZGVyZXItPngoKTsKLSAgICAgICAgICAgIGludCB5T2Zmc2V0ID0g
eVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oZmxvYXRpbmdPYmplY3QpIC0gZmxvYXRp
bmdPYmplY3QtPm1fcmVuZGVyZXItPnkoKTsKLSAgICAgICAgICAgIEludFBvaW50IGNoaWxkUG9p
bnQgPSBmbGlwRmxvYXRGb3JXcml0aW5nTW9kZShmbG9hdGluZ09iamVjdCwgYWRqdXN0ZWRMb2Nh
dGlvbiArIEludFNpemUoeE9mZnNldCwgeU9mZnNldCkpOworICAgICAgICAgICAgZmxvYXQgeE9m
ZnNldCA9IHhQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKGZsb2F0aW5nT2JqZWN0KSAt
IGZsb2F0aW5nT2JqZWN0LT5tX3JlbmRlcmVyLT54KCk7CisgICAgICAgICAgICBmbG9hdCB5T2Zm
c2V0ID0geVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oZmxvYXRpbmdPYmplY3QpIC0g
ZmxvYXRpbmdPYmplY3QtPm1fcmVuZGVyZXItPnkoKTsKKyAgICAgICAgICAgIEludFBvaW50IGNo
aWxkUG9pbnQgPSByb3VuZGVkSW50UG9pbnQoZmxpcEZsb2F0Rm9yV3JpdGluZ01vZGUoZmxvYXRp
bmdPYmplY3QsIGFkanVzdGVkTG9jYXRpb24gKyBJbnRTaXplKHhPZmZzZXQsIHlPZmZzZXQpKSk7
CiAgICAgICAgICAgICBpZiAoZmxvYXRpbmdPYmplY3QtPm1fcmVuZGVyZXItPmhpdFRlc3QocmVx
dWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBjaGlsZFBvaW50KSkgewogICAgICAgICAg
ICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBwb2ludEluQ29udGFpbmVyIC0gdG9T
aXplKGNoaWxkUG9pbnQpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQwNjgs
MTAgKzQwNjksMTAgQEAKIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBnbyBvbiBSZW5k
ZXJPYmplY3QgYXMgYW4gaW5zdGFuY2UgbWV0aG9kLiBUaGVuCiAvLyBhbGwgY2FzZXMgaW4gd2hp
Y2ggcG9zaXRpb25Gb3JQb2ludCByZWN1cnMgY291bGQgY2FsbCB0aGlzIGluc3RlYWQgdG8KIC8v
IHByZXZlbnQgY3Jvc3NpbmcgZWRpdGFibGUgYm91bmRhcmllcy4gVGhpcyB3b3VsZCByZXF1aXJl
IG1hbnkgdGVzdHMuCi1zdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnRSZXNw
ZWN0aW5nRWRpdGluZ0JvdW5kYXJpZXMoUmVuZGVyQmxvY2sqIHBhcmVudCwgUmVuZGVyQm94KiBj
aGlsZCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5QYXJlbnRDb29yZGluYXRlcykKK3N0YXRpYyBW
aXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludFJlc3BlY3RpbmdFZGl0aW5nQm91bmRhcmll
cyhSZW5kZXJCbG9jayogcGFyZW50LCBSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludEluUGFyZW50Q29vcmRpbmF0ZXMpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3Jv
bmcgaWYgdGhlIGNoaWxkJ3Mgd3JpdGluZy1tb2RlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBwYXJl
bnQncy4KLSAgICBJbnRQb2ludCBwb2ludEluQ2hpbGRDb29yZGluYXRlcyhwb2ludEluUGFyZW50
Q29vcmRpbmF0ZXMgLSBjaGlsZC0+bG9jYXRpb24oKSk7CisgICAgSW50UG9pbnQgcG9pbnRJbkNo
aWxkQ29vcmRpbmF0ZXMocm91bmRlZEludFNpemUocG9pbnRJblBhcmVudENvb3JkaW5hdGVzIC0g
Y2hpbGQtPmxvY2F0aW9uKCkpKTsKIAogICAgIC8vIElmIHRoaXMgaXMgYW4gYW5vbnltb3VzIHJl
bmRlcmVyLCB3ZSBqdXN0IHJlY3VyIG5vcm1hbGx5CiAgICAgTm9kZSogY2hpbGROb2RlID0gY2hp
bGQtPm5vZGUoKTsKQEAgLTQxODAsOSArNDE4MSw5IEBACiAgICAgICAgICAgICByZXR1cm4gY3Jl
YXRlVmlzaWJsZVBvc2l0aW9uKGNhcmV0TWF4T2Zmc2V0KCksIERPV05TVFJFQU0pOwogICAgIH0g
CiAKLSAgICBJbnRQb2ludCBwb2ludEluQ29udGVudHMgPSBwb2ludDsKKyAgICBGbG9hdFBvaW50
IHBvaW50SW5Db250ZW50cyA9IHBvaW50OwogICAgIG9mZnNldEZvckNvbnRlbnRzKHBvaW50SW5D
b250ZW50cyk7Ci0gICAgSW50UG9pbnQgcG9pbnRJbkxvZ2ljYWxDb250ZW50cyhwb2ludEluQ29u
dGVudHMpOworICAgIEludFBvaW50IHBvaW50SW5Mb2dpY2FsQ29udGVudHMocm91bmRlZEludFBv
aW50KHBvaW50SW5Db250ZW50cykpOwogICAgIGlmICghaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSkKICAgICAgICAgcG9pbnRJbkxvZ2ljYWxDb250ZW50cyA9IHBvaW50SW5Mb2dpY2FsQ29udGVu
dHMudHJhbnNwb3NlZFBvaW50KCk7CiAKQEAgLTQyMDYsNyArNDIwNyw3IEBACiAgICAgcmV0dXJu
IFJlbmRlckJveDo6cG9zaXRpb25Gb3JQb2ludChwb2ludCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxv
Y2s6Om9mZnNldEZvckNvbnRlbnRzKEludFBvaW50JiBvZmZzZXQpIGNvbnN0Cit2b2lkIFJlbmRl
ckJsb2NrOjpvZmZzZXRGb3JDb250ZW50cyhGbG9hdFBvaW50JiBvZmZzZXQpIGNvbnN0CiB7CiAg
ICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICBvZmZzZXQgKz0gbGF5ZXIoKS0+c2Ny
b2xsZWRDb250ZW50T2Zmc2V0KCk7CkBAIC00MjE1LDcgKzQyMTYsNyBAQAogICAgICAgICBhZGp1
c3RQb2ludFRvQ29sdW1uQ29udGVudHMob2Zmc2V0KTsKIH0KIAotaW50IFJlbmRlckJsb2NrOjph
dmFpbGFibGVMb2dpY2FsV2lkdGgoKSBjb25zdAorZmxvYXQgUmVuZGVyQmxvY2s6OmF2YWlsYWJs
ZUxvZ2ljYWxXaWR0aCgpIGNvbnN0CiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBtdWx0aXBsZSBjb2x1
bW5zLCB0aGVuIHRoZSBhdmFpbGFibGUgbG9naWNhbCB3aWR0aCBpcyByZWR1Y2VkIHRvIG91ciBj
b2x1bW4gd2lkdGguCiAgICAgaWYgKGhhc0NvbHVtbnMoKSkKQEAgLTQyMjMsMTEgKzQyMjQsMTEg
QEAKICAgICByZXR1cm4gUmVuZGVyQm94OjphdmFpbGFibGVMb2dpY2FsV2lkdGgoKTsKIH0KIAot
aW50IFJlbmRlckJsb2NrOjpjb2x1bW5HYXAoKSBjb25zdAorZmxvYXQgUmVuZGVyQmxvY2s6OmNv
bHVtbkdhcCgpIGNvbnN0CiB7CiAgICAgaWYgKHN0eWxlKCktPmhhc05vcm1hbENvbHVtbkdhcCgp
KQotICAgICAgICByZXR1cm4gc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRQaXhl
bFNpemUoKTsgLy8gIjFlbSIgaXMgcmVjb21tZW5kZWQgYXMgdGhlIG5vcm1hbCBnYXAgc2V0dGlu
Zy4gTWF0Y2hlcyA8cD4gbWFyZ2lucy4KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzdHls
ZSgpLT5jb2x1bW5HYXAoKSk7CisgICAgICAgIHJldHVybiBzdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKS5jb21wdXRlZFNpemUoKTsgLy8gIjFlbSIgaXMgcmVjb21tZW5kZWQgYXMgdGhlIG5vcm1h
bCBnYXAgc2V0dGluZy4gTWF0Y2hlcyA8cD4gbWFyZ2lucy4KKyAgICByZXR1cm4gc3R5bGUoKS0+
Y29sdW1uR2FwKCk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNDb2x1bW5XaWR0aCgpCkBA
IC00MjYwLDcgKzQyNjEsNyBAQAogICAgIHNldERlc2lyZWRDb2x1bW5Db3VudEFuZFdpZHRoKGRl
c2lyZWRDb2x1bW5Db3VudCwgZGVzaXJlZENvbHVtbldpZHRoKTsKIH0KIAotdm9pZCBSZW5kZXJC
bG9jazo6c2V0RGVzaXJlZENvbHVtbkNvdW50QW5kV2lkdGgoaW50IGNvdW50LCBpbnQgd2lkdGgp
Cit2b2lkIFJlbmRlckJsb2NrOjpzZXREZXNpcmVkQ29sdW1uQ291bnRBbmRXaWR0aChpbnQgY291
bnQsIGZsb2F0IHdpZHRoKQogewogICAgIGJvb2wgZGVzdHJveUNvbHVtbnMgPSAhZmlyc3RDaGls
ZCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChjb3VudCA9PSAxICYmIHN0eWxlKCkt
Pmhhc0F1dG9Db2x1bW5XaWR0aCgpKQpAQCAtNDI4Nyw3ICs0Mjg4LDcgQEAKICAgICB9CiB9CiAK
LWludCBSZW5kZXJCbG9jazo6ZGVzaXJlZENvbHVtbldpZHRoKCkgY29uc3QKK2Zsb2F0IFJlbmRl
ckJsb2NrOjpkZXNpcmVkQ29sdW1uV2lkdGgoKSBjb25zdAogewogICAgIGlmICghaGFzQ29sdW1u
cygpKQogICAgICAgICByZXR1cm4gY29udGVudExvZ2ljYWxXaWR0aCgpOwpAQCAtNDMzMiw3ICs0
MzMzLDcgQEAKICAgICByZXR1cm4gSW50UmVjdChjb2xMb2dpY2FsVG9wLCBjb2xMb2dpY2FsTGVm
dCwgY29sTG9naWNhbEhlaWdodCwgY29sTG9naWNhbFdpZHRoKTsKIH0KIAotYm9vbCBSZW5kZXJC
bG9jazo6bGF5b3V0Q29sdW1ucyhib29sIGhhc1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0LCBp
bnQgcGFnZUxvZ2ljYWxIZWlnaHQsIExheW91dFN0YXRlTWFpbnRhaW5lciYgc3RhdGVQdXNoZXIp
Citib29sIFJlbmRlckJsb2NrOjpsYXlvdXRDb2x1bW5zKGJvb2wgaGFzU3BlY2lmaWVkUGFnZUxv
Z2ljYWxIZWlnaHQsIGZsb2F0IHBhZ2VMb2dpY2FsSGVpZ2h0LCBMYXlvdXRTdGF0ZU1haW50YWlu
ZXImIHN0YXRlUHVzaGVyKQogewogICAgIGlmICghaGFzQ29sdW1ucygpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC00MzQyLDggKzQzNDMsOCBAQAogICAgIENvbHVtbkluZm8qIGNvbEluZm8g
PSBjb2x1bW5JbmZvKCk7CiAgICAgaW50IGRlc2lyZWRDb2x1bW5Db3VudCA9IGNvbEluZm8tPmRl
c2lyZWRDb2x1bW5Db3VudCgpOwogICAgIGlmICghaGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWln
aHQpIHsKLSAgICAgICAgaW50IGNvbHVtbkhlaWdodCA9IHBhZ2VMb2dpY2FsSGVpZ2h0OwotICAg
ICAgICBpbnQgbWluQ29sdW1uQ291bnQgPSBjb2xJbmZvLT5mb3JjZWRCcmVha3MoKSArIDE7Cisg
ICAgICAgIGZsb2F0IGNvbHVtbkhlaWdodCA9IHBhZ2VMb2dpY2FsSGVpZ2h0OworICAgICAgICBm
bG9hdCBtaW5Db2x1bW5Db3VudCA9IGNvbEluZm8tPmZvcmNlZEJyZWFrcygpICsgMTsKICAgICAg
ICAgaWYgKG1pbkNvbHVtbkNvdW50ID49IGRlc2lyZWRDb2x1bW5Db3VudCkgewogICAgICAgICAg
ICAgLy8gVGhlIGZvcmNlZCBwYWdlIGJyZWFrcyBhcmUgaW4gY29udHJvbCBvZiB0aGUgYmFsYW5j
aW5nLiAgSnVzdCBzZXQgdGhlIGNvbHVtbiBoZWlnaHQgdG8gdGhlCiAgICAgICAgICAgICAvLyBt
YXhpbXVtIHBhZ2UgYnJlYWsgZGlzdGFuY2UuCkBAIC00Mzc2LDcgKzQzNzcsNyBAQAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0UG9pbnRUb0NvbHVtbkNv
bnRlbnRzKEludFBvaW50JiBwb2ludCkgY29uc3QKK3ZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdFBv
aW50VG9Db2x1bW5Db250ZW50cyhGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICAvLyBK
dXN0IGJhaWwgaWYgd2UgaGF2ZSBubyBjb2x1bW5zLgogICAgIGlmICghaGFzQ29sdW1ucygpKQpA
QCAtNDQ0Miw3ICs0NDQzLDcgQEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmFkanVz
dFJlY3RGb3JDb2x1bW5zKEludFJlY3QmIHIpIGNvbnN0Cit2b2lkIFJlbmRlckJsb2NrOjphZGp1
c3RSZWN0Rm9yQ29sdW1ucyhGbG9hdFJlY3QmIHIpIGNvbnN0CiB7CiAgICAgLy8gSnVzdCBiYWls
IGlmIHdlIGhhdmUgbm8gY29sdW1ucy4KICAgICBpZiAoIWhhc0NvbHVtbnMoKSkKQEAgLTQ0NTEs
MTkgKzQ0NTIsMTkgQEAKICAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygpOwog
CiAgICAgLy8gQmVnaW4gd2l0aCBhIHJlc3VsdCByZWN0IHRoYXQgaXMgZW1wdHkuCi0gICAgSW50
UmVjdCByZXN1bHQ7CisgICAgRmxvYXRSZWN0IHJlc3VsdDsKICAgICAKICAgICAvLyBEZXRlcm1p
bmUgd2hpY2ggY29sdW1ucyB3ZSBpbnRlcnNlY3QuCiAgICAgdW5zaWduZWQgY29sQ291bnQgPSBj
b2x1bW5Db3VudChjb2xJbmZvKTsKICAgICBpZiAoIWNvbENvdW50KQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgaW50IGxvZ2ljYWxMZWZ0ID0gbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50
KCk7Ci0gICAgaW50IGN1cnJMb2dpY2FsT2Zmc2V0ID0gMDsKKyAgICBmbG9hdCBsb2dpY2FsTGVm
dCA9IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpOworICAgIGZsb2F0IGN1cnJMb2dpY2Fs
T2Zmc2V0ID0gMDsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsr
KSB7Ci0gICAgICAgIEludFJlY3QgY29sUmVjdCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBpKTsK
LSAgICAgICAgSW50UmVjdCByZXBhaW50UmVjdCA9IHI7CisgICAgICAgIEZsb2F0UmVjdCBjb2xS
ZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOworICAgICAgICBGbG9hdFJlY3QgcmVwYWlu
dFJlY3QgPSByOwogICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewogICAg
ICAgICAgICAgaW50IGN1cnJYT2Zmc2V0ID0gY29sUmVjdC54KCkgLSBsb2dpY2FsTGVmdDsKICAg
ICAgICAgICAgIHJlcGFpbnRSZWN0Lm1vdmUoY3VyclhPZmZzZXQsIGN1cnJMb2dpY2FsT2Zmc2V0
KTsKQEAgLTQ0ODAsNDkgKzQ0ODEsNDkgQEAKICAgICByID0gcmVzdWx0OwogfQogCi1JbnRQb2lu
dCBSZW5kZXJCbG9jazo6ZmxpcEZvcldyaXRpbmdNb2RlSW5jbHVkaW5nQ29sdW1ucyhjb25zdCBJ
bnRQb2ludCYgcG9pbnQpIGNvbnN0CitGbG9hdFBvaW50IFJlbmRlckJsb2NrOjpmbGlwRm9yV3Jp
dGluZ01vZGVJbmNsdWRpbmdDb2x1bW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAog
ewogICAgIEFTU0VSVChoYXNDb2x1bW5zKCkpOwogICAgIGlmICghaGFzQ29sdW1ucygpIHx8ICFz
dHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gcG9p
bnQ7CiAgICAgQ29sdW1uSW5mbyogY29sSW5mbyA9IGNvbHVtbkluZm8oKTsKLSAgICBpbnQgY29s
dW1uTG9naWNhbEhlaWdodCA9IGNvbEluZm8tPmNvbHVtbkhlaWdodCgpOwotICAgIGludCBleHBh
bmRlZExvZ2ljYWxIZWlnaHQgPSBib3JkZXJCZWZvcmUoKSArIHBhZGRpbmdCZWZvcmUoKSArIGNv
bHVtbkNvdW50KGNvbEluZm8pICogY29sdW1uTG9naWNhbEhlaWdodCArIGJvcmRlckFmdGVyKCkg
KyBwYWRkaW5nQWZ0ZXIoKSArIHNjcm9sbGJhckxvZ2ljYWxIZWlnaHQoKTsKKyAgICBmbG9hdCBj
b2x1bW5Mb2dpY2FsSGVpZ2h0ID0gY29sSW5mby0+Y29sdW1uSGVpZ2h0KCk7CisgICAgZmxvYXQg
ZXhwYW5kZWRMb2dpY2FsSGVpZ2h0ID0gYm9yZGVyQmVmb3JlKCkgKyBwYWRkaW5nQmVmb3JlKCkg
KyBjb2x1bW5Db3VudChjb2xJbmZvKSAqIGNvbHVtbkxvZ2ljYWxIZWlnaHQgKyBib3JkZXJBZnRl
cigpICsgcGFkZGluZ0FmdGVyKCkgKyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCk7CiAgICAgaWYg
KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIHJldHVybiBJbnRQb2ludChwb2lu
dC54KCksIGV4cGFuZGVkTG9naWNhbEhlaWdodCAtIHBvaW50LnkoKSk7Ci0gICAgcmV0dXJuIElu
dFBvaW50KGV4cGFuZGVkTG9naWNhbEhlaWdodCAtIHBvaW50LngoKSwgcG9pbnQueSgpKTsKKyAg
ICAgICAgcmV0dXJuIEZsb2F0UG9pbnQocG9pbnQueCgpLCBleHBhbmRlZExvZ2ljYWxIZWlnaHQg
LSBwb2ludC55KCkpOworICAgIHJldHVybiBGbG9hdFBvaW50KGV4cGFuZGVkTG9naWNhbEhlaWdo
dCAtIHBvaW50LngoKSwgcG9pbnQueSgpKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6ZmxpcEZv
cldyaXRpbmdNb2RlSW5jbHVkaW5nQ29sdW1ucyhJbnRSZWN0JiByZWN0KSBjb25zdAordm9pZCBS
ZW5kZXJCbG9jazo6ZmxpcEZvcldyaXRpbmdNb2RlSW5jbHVkaW5nQ29sdW1ucyhGbG9hdFJlY3Qm
IHJlY3QpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc0NvbHVtbnMoKSk7CiAgICAgaWYgKCFoYXND
b2x1bW5zKCkgfHwgIXN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBDb2x1bW5JbmZvKiBjb2xJbmZvID0gY29sdW1uSW5mbygp
OwotICAgIGludCBjb2x1bW5Mb2dpY2FsSGVpZ2h0ID0gY29sSW5mby0+Y29sdW1uSGVpZ2h0KCk7
Ci0gICAgaW50IGV4cGFuZGVkTG9naWNhbEhlaWdodCA9IGJvcmRlckJlZm9yZSgpICsgcGFkZGlu
Z0JlZm9yZSgpICsgY29sdW1uQ291bnQoY29sSW5mbykgKiBjb2x1bW5Mb2dpY2FsSGVpZ2h0ICsg
Ym9yZGVyQWZ0ZXIoKSArIHBhZGRpbmdBZnRlcigpICsgc2Nyb2xsYmFyTG9naWNhbEhlaWdodCgp
OworICAgIGZsb2F0IGNvbHVtbkxvZ2ljYWxIZWlnaHQgPSBjb2xJbmZvLT5jb2x1bW5IZWlnaHQo
KTsKKyAgICBmbG9hdCBleHBhbmRlZExvZ2ljYWxIZWlnaHQgPSBib3JkZXJCZWZvcmUoKSArIHBh
ZGRpbmdCZWZvcmUoKSArIGNvbHVtbkNvdW50KGNvbEluZm8pICogY29sdW1uTG9naWNhbEhlaWdo
dCArIGJvcmRlckFmdGVyKCkgKyBwYWRkaW5nQWZ0ZXIoKSArIHNjcm9sbGJhckxvZ2ljYWxIZWln
aHQoKTsKICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmVjdC5z
ZXRZKGV4cGFuZGVkTG9naWNhbEhlaWdodCAtIHJlY3QubWF4WSgpKTsKICAgICBlbHNlCiAgICAg
ICAgIHJlY3Quc2V0WChleHBhbmRlZExvZ2ljYWxIZWlnaHQgLSByZWN0Lm1heFgoKSk7CiB9CiAK
LXZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdEZvckNvbHVtbnMoSW50U2l6ZSYgb2Zmc2V0LCBjb25z
dCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RGb3JDb2x1
bW5zKEZsb2F0U2l6ZSYgb2Zmc2V0LCBjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAg
ICAgaWYgKCFoYXNDb2x1bW5zKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIENvbHVtbkluZm8q
IGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7CiAKLSAgICBpbnQgbG9naWNhbExlZnQgPSBsb2dpY2Fs
TGVmdE9mZnNldEZvckNvbnRlbnQoKTsKKyAgICBmbG9hdCBsb2dpY2FsTGVmdCA9IGxvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yQ29udGVudCgpOwogICAgIHNpemVfdCBjb2xDb3VudCA9IGNvbHVtbkNvdW50
KGNvbEluZm8pOwotICAgIGludCBjb2xMb2dpY2FsV2lkdGggPSBjb2xJbmZvLT5kZXNpcmVkQ29s
dW1uV2lkdGgoKTsKLSAgICBpbnQgY29sTG9naWNhbEhlaWdodCA9IGNvbEluZm8tPmNvbHVtbkhl
aWdodCgpOworICAgIGZsb2F0IGNvbExvZ2ljYWxXaWR0aCA9IGNvbEluZm8tPmRlc2lyZWRDb2x1
bW5XaWR0aCgpOworICAgIGZsb2F0IGNvbExvZ2ljYWxIZWlnaHQgPSBjb2xJbmZvLT5jb2x1bW5I
ZWlnaHQoKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29sQ291bnQ7ICsraSkgewog
ICAgICAgICAvLyBDb21wdXRlIHRoZSBlZGdlcyBmb3IgYSBnaXZlbiBjb2x1bW4gaW4gdGhlIGJs
b2NrIHByb2dyZXNzaW9uIGRpcmVjdGlvbi4KLSAgICAgICAgSW50UmVjdCBzbGljZVJlY3QgPSBJ
bnRSZWN0KGxvZ2ljYWxMZWZ0LCBib3JkZXJCZWZvcmUoKSArIHBhZGRpbmdCZWZvcmUoKSArIGkg
KiBjb2xMb2dpY2FsSGVpZ2h0LCBjb2xMb2dpY2FsV2lkdGgsIGNvbExvZ2ljYWxIZWlnaHQpOwor
ICAgICAgICBGbG9hdFJlY3Qgc2xpY2VSZWN0ID0gRmxvYXRSZWN0KGxvZ2ljYWxMZWZ0LCBib3Jk
ZXJCZWZvcmUoKSArIHBhZGRpbmdCZWZvcmUoKSArIGkgKiBjb2xMb2dpY2FsSGVpZ2h0LCBjb2xM
b2dpY2FsV2lkdGgsIGNvbExvZ2ljYWxIZWlnaHQpOwogICAgICAgICBpZiAoIWlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICBzbGljZVJlY3QgPSBzbGljZVJlY3QudHJhbnNw
b3NlZFJlY3QoKTsKICAgICAgICAgCkBAIC00NzA2LDEwICs0NzA3LDkgQEAKICAgICB9CiB9CiAK
LXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVQcmVmZXJyZWRXaWR0aChpbnQmIHByZWZlcnJlZFdp
ZHRoLCBmbG9hdCYgcmVzdWx0KQorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZVByZWZlcnJlZFdp
ZHRoKGZsb2F0JiBwcmVmZXJyZWRXaWR0aCwgZmxvYXQmIHJlc3VsdCkKIHsKLSAgICBpbnQgc25h
cHBlZFJlc3VsdCA9IGNlaWxmKHJlc3VsdCk7Ci0gICAgcHJlZmVycmVkV2lkdGggPSBtYXgoc25h
cHBlZFJlc3VsdCwgcHJlZmVycmVkV2lkdGgpOworICAgIHByZWZlcnJlZFdpZHRoID0gbWF4KHJl
c3VsdCwgcHJlZmVycmVkV2lkdGgpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSW5s
aW5lUHJlZmVycmVkTG9naWNhbFdpZHRocygpCkBAIC00OTgyLDcgKzQ5ODIsNyBAQAogICAgIGJv
b2wgbm93cmFwID0gc3R5bGUoKS0+d2hpdGVTcGFjZSgpID09IE5PV1JBUDsKIAogICAgIFJlbmRl
ck9iamVjdCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7Ci0gICAgaW50IGZsb2F0TGVmdFdpZHRoID0g
MCwgZmxvYXRSaWdodFdpZHRoID0gMDsKKyAgICBmbG9hdCBmbG9hdExlZnRXaWR0aCA9IDAsIGZs
b2F0UmlnaHRXaWR0aCA9IDA7CiAgICAgd2hpbGUgKGNoaWxkKSB7CiAgICAgICAgIC8vIFBvc2l0
aW9uZWQgY2hpbGRyZW4gZG9uJ3QgYWZmZWN0IHRoZSBtaW4vbWF4IHdpZHRoCiAgICAgICAgIGlm
IChjaGlsZC0+aXNQb3NpdGlvbmVkKCkpIHsKQEAgLTQ5OTEsNyArNDk5MSw3IEBACiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoY2hpbGQtPmlzRmxvYXRpbmcoKSB8fCAoY2hpbGQtPmlzQm94KCkg
JiYgdG9SZW5kZXJCb3goY2hpbGQpLT5hdm9pZHNGbG9hdHMoKSkpIHsKLSAgICAgICAgICAgIGlu
dCBmbG9hdFRvdGFsV2lkdGggPSBmbG9hdExlZnRXaWR0aCArIGZsb2F0UmlnaHRXaWR0aDsKKyAg
ICAgICAgICAgIGZsb2F0IGZsb2F0VG90YWxXaWR0aCA9IGZsb2F0TGVmdFdpZHRoICsgZmxvYXRS
aWdodFdpZHRoOwogICAgICAgICAgICAgaWYgKGNoaWxkLT5zdHlsZSgpLT5jbGVhcigpICYgQ0xF
RlQpIHsKICAgICAgICAgICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heChm
bG9hdFRvdGFsV2lkdGgsIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKTsKICAgICAgICAgICAg
ICAgICBmbG9hdExlZnRXaWR0aCA9IDA7CkBAIC01MDE2LDcgKzUwMTYsNyBAQAogICAgICAgICAg
ICAgbWFyZ2luRW5kICs9IGVuZE1hcmdpbkxlbmd0aC52YWx1ZSgpOwogICAgICAgICBtYXJnaW4g
PSBtYXJnaW5TdGFydCArIG1hcmdpbkVuZDsKIAotICAgICAgICBpbnQgdyA9IGNoaWxkLT5taW5Q
cmVmZXJyZWRMb2dpY2FsV2lkdGgoKSArIG1hcmdpbjsKKyAgICAgICAgZmxvYXQgdyA9IGNoaWxk
LT5taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSArIG1hcmdpbjsKICAgICAgICAgbV9taW5QcmVm
ZXJyZWRMb2dpY2FsV2lkdGggPSBtYXgodywgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgpOwog
ICAgICAgICAKICAgICAgICAgLy8gSUUgaWdub3JlcyB0YWJsZXMgZm9yIGNhbGN1bGF0aW9uIG9m
IG5vd3JhcC4gTWFrZXMgc29tZSBzZW5zZS4KQEAgLTUwMzEsMTAgKzUwMzEsMTAgQEAKICAgICAg
ICAgICAgICAgICAvLyBtYXJnaW5zIG9mIHRoZSBvYmplY3QuICBGb3IgbmVnYXRpdmUgbWFyZ2lu
cywgd2Ugd2lsbCBhdHRlbXB0IHRvIG92ZXJsYXAgdGhlIGZsb2F0IGlmIHRoZSBuZWdhdGl2ZSBt
YXJnaW4KICAgICAgICAgICAgICAgICAvLyBpcyBzbWFsbGVyIHRoYW4gdGhlIGZsb2F0IHdpZHRo
LgogICAgICAgICAgICAgICAgIGJvb2wgbHRyID0gY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICAgICAgICAgICAgICBpbnQgbWFyZ2luTG9n
aWNhbExlZnQgPSBsdHIgPyBtYXJnaW5TdGFydCA6IG1hcmdpbkVuZDsKLSAgICAgICAgICAgICAg
ICBpbnQgbWFyZ2luTG9naWNhbFJpZ2h0ID0gbHRyID8gbWFyZ2luRW5kIDogbWFyZ2luU3RhcnQ7
Ci0gICAgICAgICAgICAgICAgaW50IG1heExlZnQgPSBtYXJnaW5Mb2dpY2FsTGVmdCA+IDAgPyBt
YXgoZmxvYXRMZWZ0V2lkdGgsIG1hcmdpbkxvZ2ljYWxMZWZ0KSA6IGZsb2F0TGVmdFdpZHRoICsg
bWFyZ2luTG9naWNhbExlZnQ7Ci0gICAgICAgICAgICAgICAgaW50IG1heFJpZ2h0ID0gbWFyZ2lu
TG9naWNhbFJpZ2h0ID4gMCA/IG1heChmbG9hdFJpZ2h0V2lkdGgsIG1hcmdpbkxvZ2ljYWxSaWdo
dCkgOiBmbG9hdFJpZ2h0V2lkdGggKyBtYXJnaW5Mb2dpY2FsUmlnaHQ7CisgICAgICAgICAgICAg
ICAgZmxvYXQgbWFyZ2luTG9naWNhbExlZnQgPSBsdHIgPyBtYXJnaW5TdGFydCA6IG1hcmdpbkVu
ZDsKKyAgICAgICAgICAgICAgICBmbG9hdCBtYXJnaW5Mb2dpY2FsUmlnaHQgPSBsdHIgPyBtYXJn
aW5FbmQgOiBtYXJnaW5TdGFydDsKKyAgICAgICAgICAgICAgICBmbG9hdCBtYXhMZWZ0ID0gbWFy
Z2luTG9naWNhbExlZnQgPiAwID8gbWF4KGZsb2F0TGVmdFdpZHRoLCBtYXJnaW5Mb2dpY2FsTGVm
dCkgOiBmbG9hdExlZnRXaWR0aCArIG1hcmdpbkxvZ2ljYWxMZWZ0OworICAgICAgICAgICAgICAg
IGZsb2F0IG1heFJpZ2h0ID0gbWFyZ2luTG9naWNhbFJpZ2h0ID4gMCA/IG1heChmbG9hdFJpZ2h0
V2lkdGgsIG1hcmdpbkxvZ2ljYWxSaWdodCkgOiBmbG9hdFJpZ2h0V2lkdGggKyBtYXJnaW5Mb2dp
Y2FsUmlnaHQ7CiAgICAgICAgICAgICAgICAgdyA9IGNoaWxkLT5tYXhQcmVmZXJyZWRMb2dpY2Fs
V2lkdGgoKSArIG1heExlZnQgKyBtYXhSaWdodDsKICAgICAgICAgICAgICAgICB3ID0gbWF4KHcs
IGZsb2F0TGVmdFdpZHRoICsgZmxvYXRSaWdodFdpZHRoKTsKICAgICAgICAgICAgIH0KQEAgLTUw
NzcsOCArNTA3Nyw4IEBACiAgICAgfQogCiAgICAgLy8gQWx3YXlzIG1ha2Ugc3VyZSB0aGVzZSB2
YWx1ZXMgYXJlIG5vbi1uZWdhdGl2ZS4KLSAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9
IG1heCgwLCBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCk7Ci0gICAgbV9tYXhQcmVmZXJyZWRM
b2dpY2FsV2lkdGggPSBtYXgoMCwgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgpOworICAgIG1f
bWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KDAuMGYsIG1fbWluUHJlZmVycmVkTG9naWNh
bFdpZHRoKTsKKyAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heCgwLjBmLCBtX21h
eFByZWZlcnJlZExvZ2ljYWxXaWR0aCk7CiAKICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0
aCA9IG1heChmbG9hdExlZnRXaWR0aCArIGZsb2F0UmlnaHRXaWR0aCwgbV9tYXhQcmVmZXJyZWRM
b2dpY2FsV2lkdGgpOwogfQpAQCAtNTA5Nyw3ICs1MDk3LDcgQEAKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWludCBSZW5kZXJCbG9jazo6bGluZUhlaWdodChib29sIGZpcnN0TGluZSwgTGluZURp
cmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUp
IGNvbnN0CitmbG9hdCBSZW5kZXJCbG9jazo6bGluZUhlaWdodChib29sIGZpcnN0TGluZSwgTGlu
ZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1v
ZGUpIGNvbnN0CiB7CiAgICAgLy8gSW5saW5lIGJsb2NrcyBhcmUgcmVwbGFjZWQgZWxlbWVudHMu
IE90aGVyd2lzZSwganVzdCBwYXNzIG9mZiB0bwogICAgIC8vIHRoZSBiYXNlIGNsYXNzLiAgSWYg
d2UncmUgYmVpbmcgcXVlcmllZCBhcyB0aG91Z2ggd2UncmUgdGhlIHJvb3QgbGluZQpAQCAtNTEx
OCw3ICs1MTE4LDcgQEAKICAgICByZXR1cm4gbV9saW5lSGVpZ2h0OwogfQogCi1pbnQgUmVuZGVy
QmxvY2s6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSwgYm9vbCBm
aXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGluZVBvc2l0aW9uTW9kZSBs
aW5lUG9zaXRpb25Nb2RlKSBjb25zdAorZmxvYXQgUmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRp
b24oRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rp
b25Nb2RlIGRpcmVjdGlvbiwgTGluZVBvc2l0aW9uTW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25z
dAogewogICAgIC8vIElubGluZSBibG9ja3MgYXJlIHJlcGxhY2VkIGVsZW1lbnRzLiBPdGhlcndp
c2UsIGp1c3QgcGFzcyBvZmYgdG8KICAgICAvLyB0aGUgYmFzZSBjbGFzcy4gIElmIHdlJ3JlIGJl
aW5nIHF1ZXJpZWQgYXMgdGhvdWdoIHdlJ3JlIHRoZSByb290IGxpbmUKQEAgLTUxNTQsNyArNTE1
NCw3IEBACiAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmFzY2VudChiYXNlbGluZVR5cGUpICsgKGxp
bmVIZWlnaHQoZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxpbmVQb3NpdGlvbk1vZGUpIC0gZm9udE1l
dHJpY3MuaGVpZ2h0KCkpIC8gMjsKIH0KIAotaW50IFJlbmRlckJsb2NrOjpmaXJzdExpbmVCb3hC
YXNlbGluZSgpIGNvbnN0CitmbG9hdCBSZW5kZXJCbG9jazo6Zmlyc3RMaW5lQm94QmFzZWxpbmUo
KSBjb25zdAogewogICAgIGlmICghaXNCbG9ja0Zsb3coKSB8fCAoaXNXcml0aW5nTW9kZVJvb3Qo
KSAmJiAhaXNSdWJ5UnVuKCkpKQogICAgICAgICByZXR1cm4gLTE7CkBAIC01MTc4LDcgKzUxNzgs
NyBAQAogICAgIHJldHVybiAtMTsKIH0KIAotaW50IFJlbmRlckJsb2NrOjpsYXN0TGluZUJveEJh
c2VsaW5lKCkgY29uc3QKK2Zsb2F0IFJlbmRlckJsb2NrOjpsYXN0TGluZUJveEJhc2VsaW5lKCkg
Y29uc3QKIHsKICAgICBpZiAoIWlzQmxvY2tGbG93KCkgfHwgKGlzV3JpdGluZ01vZGVSb290KCkg
JiYgIWlzUnVieVJ1bigpKSkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNTUzMywxMyArNTUzMywx
MyBAQAogICAgIHJldHVybiBjb3VudDsKIH0KIAotaW50IFJlbmRlckJsb2NrOjpoZWlnaHRGb3JM
aW5lQ291bnQoaW50IGwpCitmbG9hdCBSZW5kZXJCbG9jazo6aGVpZ2h0Rm9yTGluZUNvdW50KGlu
dCBsKQogewogICAgIGludCBjb3VudCA9IDA7CiAgICAgcmV0dXJuIGdldEhlaWdodEZvckxpbmVD
b3VudCh0aGlzLCBsLCB0cnVlLCBjb3VudCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmFkanVz
dEZvckJvcmRlckZpdChpbnQgeCwgaW50JiBsZWZ0LCBpbnQmIHJpZ2h0KSBjb25zdAordm9pZCBS
ZW5kZXJCbG9jazo6YWRqdXN0Rm9yQm9yZGVyRml0KGZsb2F0IHgsIGZsb2F0JiBsZWZ0LCBmbG9h
dCYgcmlnaHQpIGNvbnN0CiB7CiAgICAgLy8gV2UgZG9uJ3QgZGVhbCB3aXRoIHJlbGF0aXZlIHBv
c2l0aW9uaW5nLiAgT3VyIGFzc3VtcHRpb24gaXMgdGhhdCB5b3Ugc2hyaW5rIHRvIGZpdCB0aGUg
bGluZXMgd2l0aG91dCBhY2NvdW50aW5nCiAgICAgLy8gZm9yIGVpdGhlciBvdmVyZmxvdyBvciB0
cmFuc2xhdGlvbnMgdmlhIHJlbGF0aXZlIHBvc2l0aW9uaW5nLgpAQCAtNTU0Nyw5ICs1NTQ3LDkg
QEAKICAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKICAgICAgICAgICAgIGZvciAoUm9v
dElubGluZUJveCogYm94ID0gZmlyc3RSb290Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0Um9v
dEJveCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGJveC0+Zmlyc3RDaGlsZCgpKQotICAgICAg
ICAgICAgICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIHggKyBzdGF0aWNfY2FzdDxpbnQ+KGJveC0+
Zmlyc3RDaGlsZCgpLT54KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbGVmdCA9IG1pbihsZWZ0
LCB4ICsgYm94LT5maXJzdENoaWxkKCktPngoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGJveC0+
bGFzdENoaWxkKCkpCi0gICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWF4KHJpZ2h0LCB4ICsg
c3RhdGljX2Nhc3Q8aW50PihjZWlsZihib3gtPmxhc3RDaGlsZCgpLT5sb2dpY2FsUmlnaHQoKSkp
KTsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIHggKyBib3gtPmxhc3RD
aGlsZCgpLT5sb2dpY2FsUmlnaHQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgZWxzZSB7CkBAIC01NTczLDggKzU1NzMsOCBAQAogICAgICAgICAgICAgICAgIEZsb2F0aW5n
T2JqZWN0KiByID0gKml0OwogICAgICAgICAgICAgICAgIC8vIE9ubHkgZXhhbWluZSB0aGUgb2Jq
ZWN0IGlmIG91ciBtX3Nob3VsZFBhaW50IGZsYWcgaXMgc2V0LgogICAgICAgICAgICAgICAgIGlm
IChyLT5tX3Nob3VsZFBhaW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBmbG9hdExlZnQg
PSB4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSAtIHItPm1fcmVuZGVyZXItPngo
KTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGZsb2F0UmlnaHQgPSBmbG9hdExlZnQgKyByLT5t
X3JlbmRlcmVyLT53aWR0aCgpOworICAgICAgICAgICAgICAgICAgICBmbG9hdCBmbG9hdExlZnQg
PSB4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSAtIHItPm1fcmVuZGVyZXItPngo
KTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgZmxvYXRSaWdodCA9IGZsb2F0TGVmdCArIHIt
Pm1fcmVuZGVyZXItPndpZHRoKCk7CiAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBtaW4obGVm
dCwgZmxvYXRMZWZ0KTsKICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIGZs
b2F0UmlnaHQpOwogICAgICAgICAgICAgICAgIH0KQEAgLTU1ODMsMjQgKzU1ODMsMjQgQEAKICAg
ICB9CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmJvcmRlckZpdEFkanVzdChJbnRSZWN0JiByZWN0
KSBjb25zdAordm9pZCBSZW5kZXJCbG9jazo6Ym9yZGVyRml0QWRqdXN0KEZsb2F0UmVjdCYgcmVj
dCkgY29uc3QKIHsKICAgICBpZiAoc3R5bGUoKS0+Ym9yZGVyRml0KCkgPT0gQm9yZGVyRml0Qm9y
ZGVyKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXYWxrIGFueSBub3JtYWwgZmxvdyBsaW5l
cyB0byBzbnVnbHkgZml0LgotICAgIGludCBsZWZ0ID0gSU5UX01BWDsKLSAgICBpbnQgcmlnaHQg
PSBJTlRfTUlOOwotICAgIGludCBvbGRXaWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICBmbG9hdCBs
ZWZ0ID0gRkxUX01BWDsKKyAgICBmbG9hdCByaWdodCA9IEZMVF9NSU47CisgICAgZmxvYXQgb2xk
V2lkdGggPSByZWN0LndpZHRoKCk7CiAgICAgYWRqdXN0Rm9yQm9yZGVyRml0KDAsIGxlZnQsIHJp
Z2h0KTsKLSAgICBpZiAobGVmdCAhPSBJTlRfTUFYKSB7CisgICAgaWYgKGxlZnQgIT0gRkxUX01B
WCkgewogICAgICAgICBsZWZ0IC09IChib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpKTsKICAg
ICAgICAgaWYgKGxlZnQgPiAwKSB7CiAgICAgICAgICAgICByZWN0Lm1vdmUobGVmdCwgMCk7CiAg
ICAgICAgICAgICByZWN0LmV4cGFuZCgtbGVmdCwgMCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAg
aWYgKHJpZ2h0ICE9IElOVF9NSU4pIHsKKyAgICBpZiAocmlnaHQgIT0gRkxUX01JTikgewogICAg
ICAgICByaWdodCArPSAoYm9yZGVyUmlnaHQoKSArIHBhZGRpbmdSaWdodCgpKTsKICAgICAgICAg
aWYgKHJpZ2h0IDwgb2xkV2lkdGgpCiAgICAgICAgICAgICByZWN0LmV4cGFuZCgtKG9sZFdpZHRo
IC0gcmlnaHQpLCAwKTsKQEAgLTU2MjIsNyArNTYyMiw3IEBACiAgICAgfQogfQogCi12b2lkIFJl
bmRlckJsb2NrOjpzZXRNYXhNYXJnaW5CZWZvcmVWYWx1ZXMoaW50IHBvcywgaW50IG5lZykKK3Zv
aWQgUmVuZGVyQmxvY2s6OnNldE1heE1hcmdpbkJlZm9yZVZhbHVlcyhmbG9hdCBwb3MsIGZsb2F0
IG5lZykKIHsKICAgICBpZiAoIW1fcmFyZURhdGEpIHsKICAgICAgICAgaWYgKHBvcyA9PSBSZW5k
ZXJCbG9ja1JhcmVEYXRhOjpwb3NpdGl2ZU1hcmdpbkJlZm9yZURlZmF1bHQodGhpcykgJiYgbmVn
ID09IFJlbmRlckJsb2NrUmFyZURhdGE6Om5lZ2F0aXZlTWFyZ2luQmVmb3JlRGVmYXVsdCh0aGlz
KSkKQEAgLTU2MzMsNyArNTYzMyw3IEBACiAgICAgbV9yYXJlRGF0YS0+bV9tYXJnaW5zLnNldE5l
Z2F0aXZlTWFyZ2luQmVmb3JlKG5lZyk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnNldE1heE1h
cmdpbkFmdGVyVmFsdWVzKGludCBwb3MsIGludCBuZWcpCit2b2lkIFJlbmRlckJsb2NrOjpzZXRN
YXhNYXJnaW5BZnRlclZhbHVlcyhmbG9hdCBwb3MsIGZsb2F0IG5lZykKIHsKICAgICBpZiAoIW1f
cmFyZURhdGEpIHsKICAgICAgICAgaWYgKHBvcyA9PSBSZW5kZXJCbG9ja1JhcmVEYXRhOjpwb3Np
dGl2ZU1hcmdpbkFmdGVyRGVmYXVsdCh0aGlzKSAmJiBuZWcgPT0gUmVuZGVyQmxvY2tSYXJlRGF0
YTo6bmVnYXRpdmVNYXJnaW5BZnRlckRlZmF1bHQodGhpcykpCkBAIC01Njc3LDcgKzU2NzcsNyBA
QAogICAgICAgICBjb250aW51YXRpb24oKS0+YWJzb2x1dGVSZWN0cyhyZWN0cywgYWNjdW11bGF0
ZWRPZmZzZXQgLSB0b1NpemUobG9jYXRpb24oKSArCiAgICAgICAgICAgICAgICAgaW5saW5lRWxl
bWVudENvbnRpbnVhdGlvbigpLT5jb250YWluaW5nQmxvY2soKS0+bG9jYXRpb24oKSkpOwogICAg
IH0gZWxzZQotICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdChhY2N1bXVsYXRlZE9mZnNldCwg
c2l6ZSgpKSk7CisgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KGFjY3VtdWxh
dGVkT2Zmc2V0LCBzaXplKCkpKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6YWJzb2x1dGVRdWFk
cyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCkBAIC01Njk2LDcgKzU2OTYsNyBAQAogICAgICAg
ICBxdWFkcy5hcHBlbmQoUmVuZGVyQm94Ojpsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdCgw
LCAwLCB3aWR0aCgpLCBoZWlnaHQoKSkpKTsKIH0KIAotSW50UmVjdCBSZW5kZXJCbG9jazo6cmVj
dFdpdGhPdXRsaW5lRm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRh
aW5lciwgaW50IG91dGxpbmVXaWR0aCkKK0ludFJlY3QgUmVuZGVyQmxvY2s6OnJlY3RXaXRoT3V0
bGluZUZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGZs
b2F0IG91dGxpbmVXaWR0aCkKIHsKICAgICBJbnRSZWN0IHIoUmVuZGVyQm94OjpyZWN0V2l0aE91
dGxpbmVGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIG91dGxpbmVXaWR0aCkpOwogICAgIGlm
IChpc0Fub255bW91c0Jsb2NrQ29udGludWF0aW9uKCkpCkBAIC01ODM1LDcgKzU4MzUsNyBAQAog
ICAgIHJldHVybiBJbnRSZWN0KHgsIHksIGNhcmV0V2lkdGgsIGhlaWdodCk7CiB9CiAKLXZvaWQg
UmVuZGVyQmxvY2s6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNv
bnN0IEludFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0KQordm9pZCBSZW5kZXJCbG9jazo6YWRkRm9j
dXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgRmxvYXRQb2ludCYgYWRk
aXRpb25hbE9mZnNldCkKIHsKICAgICAvLyBGb3IgYmxvY2tzIGluc2lkZSBpbmxpbmVzLCB3ZSBn
byBhaGVhZCBhbmQgaW5jbHVkZSBtYXJnaW5zIHNvIHRoYXQgd2UgcnVuIHJpZ2h0IHVwIHRvIHRo
ZQogICAgIC8vIGlubGluZSBib3hlcyBhYm92ZSBhbmQgYmVsb3cgdXMgKHRodXMgZ2V0dGluZyBt
ZXJnZWQgd2l0aCB0aGVtIHRvIGZvcm0gYSBzaW5nbGUgaXJyZWd1bGFyCkBAIC01ODUzLDcgKzU4
NTMsNyBAQAogICAgICAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmVjdHMu
YXBwZW5kKHJlY3QpOwogICAgIH0gZWxzZSBpZiAod2lkdGgoKSAmJiBoZWlnaHQoKSkKLSAgICAg
ICAgcmVjdHMuYXBwZW5kKEludFJlY3QoYWRkaXRpb25hbE9mZnNldCwgc2l6ZSgpKSk7CisgICAg
ICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KGFkZGl0aW9uYWxPZmZzZXQsIHNpemUo
KSkpOwogCiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSAmJiAhaGFzQ29udHJvbENsaXAoKSkg
ewogICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGN1cnIgPSBmaXJzdFJvb3RCb3goKTsgY3Vy
cjsgY3VyciA9IGN1cnItPm5leHRSb290Qm94KCkpIHsKQEAgLTU5MzAsMTcgKzU5MzAsMTcgQEAK
ICAgICByZXR1cm4gbmV3Qm94OwogfQogCi1pbnQgUmVuZGVyQmxvY2s6Om5leHRQYWdlTG9naWNh
bFRvcChpbnQgbG9naWNhbE9mZnNldCkgY29uc3QKK2Zsb2F0IFJlbmRlckJsb2NrOjpuZXh0UGFn
ZUxvZ2ljYWxUb3AoZmxvYXQgbG9naWNhbE9mZnNldCkgY29uc3QKIHsKICAgICBMYXlvdXRTdGF0
ZSogbGF5b3V0U3RhdGUgPSB2aWV3KCktPmxheW91dFN0YXRlKCk7CiAgICAgaWYgKCFsYXlvdXRT
dGF0ZS0+bV9wYWdlTG9naWNhbEhlaWdodCkKICAgICAgICAgcmV0dXJuIGxvZ2ljYWxPZmZzZXQ7
CiAgICAgCiAgICAgLy8gVGhlIGxvZ2ljYWxPZmZzZXQgaXMgaW4gb3VyIGNvb3JkaW5hdGUgc3Bh
Y2UuICBXZSBjYW4gYWRkIGluIG91ciBwdXNoZWQgb2Zmc2V0LgotICAgIGludCBwYWdlTG9naWNh
bEhlaWdodCA9IGxheW91dFN0YXRlLT5tX3BhZ2VMb2dpY2FsSGVpZ2h0OwotICAgIEludFNpemUg
ZGVsdGEgPSBsYXlvdXRTdGF0ZS0+bV9sYXlvdXRPZmZzZXQgLSBsYXlvdXRTdGF0ZS0+bV9wYWdl
T2Zmc2V0OwotICAgIGludCBvZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZGVs
dGEuaGVpZ2h0KCkgOiBkZWx0YS53aWR0aCgpOwotICAgIGludCByZW1haW5pbmdMb2dpY2FsSGVp
Z2h0ID0gKHBhZ2VMb2dpY2FsSGVpZ2h0IC0gKG9mZnNldCArIGxvZ2ljYWxPZmZzZXQpICUgcGFn
ZUxvZ2ljYWxIZWlnaHQpICUgcGFnZUxvZ2ljYWxIZWlnaHQ7CisgICAgZmxvYXQgcGFnZUxvZ2lj
YWxIZWlnaHQgPSBsYXlvdXRTdGF0ZS0+bV9wYWdlTG9naWNhbEhlaWdodDsKKyAgICBGbG9hdFNp
emUgZGVsdGEgPSBsYXlvdXRTdGF0ZS0+bV9sYXlvdXRPZmZzZXQgLSBsYXlvdXRTdGF0ZS0+bV9w
YWdlT2Zmc2V0OworICAgIGZsb2F0IG9mZnNldCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBkZWx0YS5oZWlnaHQoKSA6IGRlbHRhLndpZHRoKCk7CisgICAgZmxvYXQgcmVtYWluaW5nTG9n
aWNhbEhlaWdodCA9IGZtb2QocGFnZUxvZ2ljYWxIZWlnaHQgLSBmbW9kKG9mZnNldCArIGxvZ2lj
YWxPZmZzZXQsIHBhZ2VMb2dpY2FsSGVpZ2h0KSwgcGFnZUxvZ2ljYWxIZWlnaHQpOwogICAgIHJl
dHVybiBsb2dpY2FsT2Zmc2V0ICsgcmVtYWluaW5nTG9naWNhbEhlaWdodDsKIH0KIApAQCAtNTk1
OCw3ICs1OTU4LDcgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW50IFJlbmRlckJsb2NrOjph
cHBseUJlZm9yZUJyZWFrKFJlbmRlckJveCogY2hpbGQsIGludCBsb2dpY2FsT2Zmc2V0KQorZmxv
YXQgUmVuZGVyQmxvY2s6OmFwcGx5QmVmb3JlQnJlYWsoUmVuZGVyQm94KiBjaGlsZCwgZmxvYXQg
bG9naWNhbE9mZnNldCkKIHsKICAgICAvLyBGSVhNRTogQWRkIHBhZ2UgYnJlYWsgY2hlY2tpbmcg
aGVyZSB3aGVuIHdlIHN1cHBvcnQgcHJpbnRpbmcuCiAgICAgYm9vbCBjaGVja0NvbHVtbkJyZWFr
cyA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+aXNQYWdpbmF0aW5nQ29sdW1ucygpOwpAQCAtNTk3
Miw3ICs1OTcyLDcgQEAKICAgICByZXR1cm4gbG9naWNhbE9mZnNldDsKIH0KIAotaW50IFJlbmRl
ckJsb2NrOjphcHBseUFmdGVyQnJlYWsoUmVuZGVyQm94KiBjaGlsZCwgaW50IGxvZ2ljYWxPZmZz
ZXQsIE1hcmdpbkluZm8mIG1hcmdpbkluZm8pCitmbG9hdCBSZW5kZXJCbG9jazo6YXBwbHlBZnRl
ckJyZWFrKFJlbmRlckJveCogY2hpbGQsIGZsb2F0IGxvZ2ljYWxPZmZzZXQsIE1hcmdpbkluZm8m
IG1hcmdpbkluZm8pCiB7CiAgICAgLy8gRklYTUU6IEFkZCBwYWdlIGJyZWFrIGNoZWNraW5nIGhl
cmUgd2hlbiB3ZSBzdXBwb3J0IHByaW50aW5nLgogICAgIGJvb2wgY2hlY2tDb2x1bW5CcmVha3Mg
PSB2aWV3KCktPmxheW91dFN0YXRlKCktPmlzUGFnaW5hdGluZ0NvbHVtbnMoKTsKQEAgLTU5ODcs
MjEgKzU5ODcsMjEgQEAKICAgICByZXR1cm4gbG9naWNhbE9mZnNldDsKIH0KIAotaW50IFJlbmRl
ckJsb2NrOjphZGp1c3RGb3JVbnNwbGl0dGFibGVDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBpbnQg
bG9naWNhbE9mZnNldCwgYm9vbCBpbmNsdWRlTWFyZ2lucykKK2Zsb2F0IFJlbmRlckJsb2NrOjph
ZGp1c3RGb3JVbnNwbGl0dGFibGVDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBmbG9hdCBsb2dpY2Fs
T2Zmc2V0LCBib29sIGluY2x1ZGVNYXJnaW5zKQogewogICAgIGJvb2wgaXNVbnNwbGl0dGFibGUg
PSBjaGlsZC0+aXNSZXBsYWNlZCgpIHx8IGNoaWxkLT5zY3JvbGxzT3ZlcmZsb3coKTsKICAgICBp
ZiAoIWlzVW5zcGxpdHRhYmxlKQogICAgICAgICByZXR1cm4gbG9naWNhbE9mZnNldDsKLSAgICBp
bnQgY2hpbGRMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodEZvckNoaWxkKGNoaWxkKSArIChp
bmNsdWRlTWFyZ2lucyA/IG1hcmdpbkJlZm9yZUZvckNoaWxkKGNoaWxkKSArIG1hcmdpbkFmdGVy
Rm9yQ2hpbGQoY2hpbGQpIDogMCk7CisgICAgZmxvYXQgY2hpbGRMb2dpY2FsSGVpZ2h0ID0gbG9n
aWNhbEhlaWdodEZvckNoaWxkKGNoaWxkKSArIChpbmNsdWRlTWFyZ2lucyA/IG1hcmdpbkJlZm9y
ZUZvckNoaWxkKGNoaWxkKSArIG1hcmdpbkFmdGVyRm9yQ2hpbGQoY2hpbGQpIDogMCk7CiAgICAg
TGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpOwogICAgIGlm
IChsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZvKQogICAgICAgICBsYXlvdXRTdGF0ZS0+bV9jb2x1
bW5JbmZvLT51cGRhdGVNaW5pbXVtQ29sdW1uSGVpZ2h0KGNoaWxkTG9naWNhbEhlaWdodCk7Ci0g
ICAgaW50IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gbGF5b3V0U3RhdGUtPm1fcGFnZUxvZ2ljYWxIZWln
aHQ7CisgICAgZmxvYXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSBsYXlvdXRTdGF0ZS0+bV9wYWdlTG9n
aWNhbEhlaWdodDsKICAgICBpZiAoIXBhZ2VMb2dpY2FsSGVpZ2h0IHx8IGNoaWxkTG9naWNhbEhl
aWdodCA+IHBhZ2VMb2dpY2FsSGVpZ2h0KQogICAgICAgICByZXR1cm4gbG9naWNhbE9mZnNldDsK
LSAgICBJbnRTaXplIGRlbHRhID0gbGF5b3V0U3RhdGUtPm1fbGF5b3V0T2Zmc2V0IC0gbGF5b3V0
U3RhdGUtPm1fcGFnZU9mZnNldDsKLSAgICBpbnQgb2Zmc2V0ID0gaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IGRlbHRhLmhlaWdodCgpIDogZGVsdGEud2lkdGgoKTsKLSAgICBpbnQgcmVtYWlu
aW5nTG9naWNhbEhlaWdodCA9IChwYWdlTG9naWNhbEhlaWdodCAtIChvZmZzZXQgKyBsb2dpY2Fs
T2Zmc2V0KSAlIHBhZ2VMb2dpY2FsSGVpZ2h0KSAlIHBhZ2VMb2dpY2FsSGVpZ2h0OworICAgIEZs
b2F0U2l6ZSBkZWx0YSA9IGxheW91dFN0YXRlLT5tX2xheW91dE9mZnNldCAtIGxheW91dFN0YXRl
LT5tX3BhZ2VPZmZzZXQ7CisgICAgZmxvYXQgb2Zmc2V0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSA/IGRlbHRhLmhlaWdodCgpIDogZGVsdGEud2lkdGgoKTsKKyAgICBmbG9hdCByZW1haW5p
bmdMb2dpY2FsSGVpZ2h0ID0gZm1vZChwYWdlTG9naWNhbEhlaWdodCAtIGZtb2Qob2Zmc2V0ICsg
bG9naWNhbE9mZnNldCwgcGFnZUxvZ2ljYWxIZWlnaHQpLCBwYWdlTG9naWNhbEhlaWdodCk7CiAg
ICAgaWYgKHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQgPCBjaGlsZExvZ2ljYWxIZWlnaHQpCiAgICAg
ICAgIHJldHVybiBsb2dpY2FsT2Zmc2V0ICsgcmVtYWluaW5nTG9naWNhbEhlaWdodDsKICAgICBy
ZXR1cm4gbG9naWNhbE9mZnNldDsKQEAgLTYwMjYsMjMgKzYwMjYsMjMgQEAKICAgICAvLyBUZWNo
bmljYWxseSBpZiB0aGUgbG9jYXRpb24gd2UgbW92ZSB0aGUgbGluZSB0byBoYXMgYSBkaWZmZXJl
bnQgbGluZSB3aWR0aCB0aGFuIG91ciBvbGQgcG9zaXRpb24sIHRoZW4gd2UgbmVlZCB0byBkaXJ0
eSB0aGUKICAgICAvLyBsaW5lIGFuZCBhbGwgZm9sbG93aW5nIGxpbmVzLgogICAgIExheW91dFN0
YXRlKiBsYXlvdXRTdGF0ZSA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKTsKLSAgICBpbnQgcGFnZUxv
Z2ljYWxIZWlnaHQgPSBsYXlvdXRTdGF0ZS0+bV9wYWdlTG9naWNhbEhlaWdodDsKKyAgICBmbG9h
dCBwYWdlTG9naWNhbEhlaWdodCA9IGxheW91dFN0YXRlLT5tX3BhZ2VMb2dpY2FsSGVpZ2h0Owog
ICAgIEludFJlY3QgbG9naWNhbFZpc3VhbE92ZXJmbG93ID0gbGluZUJveC0+bG9naWNhbFZpc3Vh
bE92ZXJmbG93UmVjdChsaW5lQm94LT5saW5lVG9wKCksIGxpbmVCb3gtPmxpbmVCb3R0b20oKSk7
Ci0gICAgaW50IGxvZ2ljYWxPZmZzZXQgPSBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cueSgpOwotICAg
IGludCBsaW5lSGVpZ2h0ID0gbG9naWNhbFZpc3VhbE92ZXJmbG93Lm1heFkoKSAtIGxvZ2ljYWxP
ZmZzZXQ7CisgICAgZmxvYXQgbG9naWNhbE9mZnNldCA9IGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy55
KCk7CisgICAgZmxvYXQgbGluZUhlaWdodCA9IGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy5tYXhZKCkg
LSBsb2dpY2FsT2Zmc2V0OwogICAgIGlmIChsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZvKQogICAg
ICAgICBsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZvLT51cGRhdGVNaW5pbXVtQ29sdW1uSGVpZ2h0
KGxpbmVIZWlnaHQpOwogICAgIGxvZ2ljYWxPZmZzZXQgKz0gZGVsdGE7CiAgICAgbGluZUJveC0+
c2V0UGFnaW5hdGlvblN0cnV0KDApOwogICAgIGlmICghcGFnZUxvZ2ljYWxIZWlnaHQgfHwgbGlu
ZUhlaWdodCA+IHBhZ2VMb2dpY2FsSGVpZ2h0KQogICAgICAgICByZXR1cm47Ci0gICAgSW50U2l6
ZSBvZmZzZXREZWx0YSA9IGxheW91dFN0YXRlLT5tX2xheW91dE9mZnNldCAtIGxheW91dFN0YXRl
LT5tX3BhZ2VPZmZzZXQ7Ci0gICAgaW50IG9mZnNldCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBvZmZzZXREZWx0YS5oZWlnaHQoKSA6IG9mZnNldERlbHRhLndpZHRoKCk7Ci0gICAgaW50
IHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQgPSBwYWdlTG9naWNhbEhlaWdodCAtIChvZmZzZXQgKyBs
b2dpY2FsT2Zmc2V0KSAlIHBhZ2VMb2dpY2FsSGVpZ2h0OworICAgIEZsb2F0U2l6ZSBvZmZzZXRE
ZWx0YSA9IGxheW91dFN0YXRlLT5tX2xheW91dE9mZnNldCAtIGxheW91dFN0YXRlLT5tX3BhZ2VP
ZmZzZXQ7CisgICAgZmxvYXQgb2Zmc2V0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG9m
ZnNldERlbHRhLmhlaWdodCgpIDogb2Zmc2V0RGVsdGEud2lkdGgoKTsKKyAgICBmbG9hdCByZW1h
aW5pbmdMb2dpY2FsSGVpZ2h0ID0gcGFnZUxvZ2ljYWxIZWlnaHQgLSBmbW9kKG9mZnNldCArIGxv
Z2ljYWxPZmZzZXQsIHBhZ2VMb2dpY2FsSGVpZ2h0KTsKICAgICBpZiAocmVtYWluaW5nTG9naWNh
bEhlaWdodCA8IGxpbmVIZWlnaHQpIHsKLSAgICAgICAgaW50IHRvdGFsTG9naWNhbEhlaWdodCA9
IGxpbmVIZWlnaHQgKyBtYXgoMCwgbG9naWNhbE9mZnNldCk7CisgICAgICAgIGZsb2F0IHRvdGFs
TG9naWNhbEhlaWdodCA9IGxpbmVIZWlnaHQgKyBtYXgoMC4wZiwgbG9naWNhbE9mZnNldCk7CiAg
ICAgICAgIGlmIChsaW5lQm94ID09IGZpcnN0Um9vdEJveCgpICYmIHRvdGFsTG9naWNhbEhlaWdo
dCA8IHBhZ2VMb2dpY2FsSGVpZ2h0ICYmICFpc1Bvc2l0aW9uZWQoKSAmJiAhaXNUYWJsZUNlbGwo
KSkKLSAgICAgICAgICAgIHNldFBhZ2luYXRpb25TdHJ1dChyZW1haW5pbmdMb2dpY2FsSGVpZ2h0
ICsgbWF4KDAsIGxvZ2ljYWxPZmZzZXQpKTsKKyAgICAgICAgICAgIHNldFBhZ2luYXRpb25TdHJ1
dChyZW1haW5pbmdMb2dpY2FsSGVpZ2h0ICsgbWF4KDAuMGYsIGxvZ2ljYWxPZmZzZXQpKTsKICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICBkZWx0YSArPSByZW1haW5pbmdMb2dpY2FsSGVpZ2h0
OwogICAgICAgICAgICAgbGluZUJveC0+c2V0UGFnaW5hdGlvblN0cnV0KHJlbWFpbmluZ0xvZ2lj
YWxIZWlnaHQpOwpAQCAtNjA1MCw3ICs2MDUwLDcgQEAKICAgICB9ICAKIH0KIAotaW50IFJlbmRl
ckJsb2NrOjpjb2xsYXBzZWRNYXJnaW5CZWZvcmVGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKSBj
b25zdAorZmxvYXQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlZE1hcmdpbkJlZm9yZUZvckNoaWxkKFJl
bmRlckJveCogY2hpbGQpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIGNoaWxkIGhhcyB0aGUgc2Ft
ZSBkaXJlY3Rpb25hbGl0eSBhcyB3ZSBkbywgdGhlbiB3ZSBjYW4ganVzdCByZXR1cm4gaXRzCiAg
ICAgLy8gY29sbGFwc2VkIG1hcmdpbi4KQEAgLTYwNjcsNyArNjA2Nyw3IEBACiAgICAgcmV0dXJu
IG1hcmdpbkJlZm9yZUZvckNoaWxkKGNoaWxkKTsKIH0KIAotaW50IFJlbmRlckJsb2NrOjpjb2xs
YXBzZWRNYXJnaW5BZnRlckZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpIGNvbnN0CitmbG9hdCBS
ZW5kZXJCbG9jazo6Y29sbGFwc2VkTWFyZ2luQWZ0ZXJGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxk
KSBjb25zdAogewogICAgIC8vIElmIHRoZSBjaGlsZCBoYXMgdGhlIHNhbWUgZGlyZWN0aW9uYWxp
dHkgYXMgd2UgZG8sIHRoZW4gd2UgY2FuIGp1c3QgcmV0dXJuIGl0cwogICAgIC8vIGNvbGxhcHNl
ZCBtYXJnaW4uCkBAIC02MDg0LDcgKzYwODQsNyBAQAogICAgIHJldHVybiBtYXJnaW5BZnRlckZv
ckNoaWxkKGNoaWxkKTsKIH0KIAotaW50IFJlbmRlckJsb2NrOjptYXJnaW5CZWZvcmVGb3JDaGls
ZChSZW5kZXJCb3hNb2RlbE9iamVjdCogY2hpbGQpIGNvbnN0CitmbG9hdCBSZW5kZXJCbG9jazo6
bWFyZ2luQmVmb3JlRm9yQ2hpbGQoUmVuZGVyQm94TW9kZWxPYmplY3QqIGNoaWxkKSBjb25zdAog
ewogICAgIHN3aXRjaCAoc3R5bGUoKS0+d3JpdGluZ01vZGUoKSkgewogICAgIGNhc2UgVG9wVG9C
b3R0b21Xcml0aW5nTW9kZToKQEAgLTYxMDAsNyArNjEwMCw3IEBACiAgICAgcmV0dXJuIGNoaWxk
LT5tYXJnaW5Ub3AoKTsKIH0KIAotaW50IFJlbmRlckJsb2NrOjptYXJnaW5BZnRlckZvckNoaWxk
KFJlbmRlckJveE1vZGVsT2JqZWN0KiBjaGlsZCkgY29uc3QKK2Zsb2F0IFJlbmRlckJsb2NrOjpt
YXJnaW5BZnRlckZvckNoaWxkKFJlbmRlckJveE1vZGVsT2JqZWN0KiBjaGlsZCkgY29uc3QKIHsK
ICAgICBzd2l0Y2ggKHN0eWxlKCktPndyaXRpbmdNb2RlKCkpIHsKICAgICBjYXNlIFRvcFRvQm90
dG9tV3JpdGluZ01vZGU6CkBAIC02MTE2LDE0ICs2MTE2LDE0IEBACiAgICAgcmV0dXJuIGNoaWxk
LT5tYXJnaW5Cb3R0b20oKTsKIH0KICAgICAKLWludCBSZW5kZXJCbG9jazo6bWFyZ2luU3RhcnRG
b3JDaGlsZChSZW5kZXJCb3hNb2RlbE9iamVjdCogY2hpbGQpIGNvbnN0CitmbG9hdCBSZW5kZXJC
bG9jazo6bWFyZ2luU3RhcnRGb3JDaGlsZChSZW5kZXJCb3hNb2RlbE9iamVjdCogY2hpbGQpIGNv
bnN0CiB7CiAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVy
biBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBjaGlsZC0+bWFyZ2luTGVmdCgp
IDogY2hpbGQtPm1hcmdpblJpZ2h0KCk7CiAgICAgcmV0dXJuIHN0eWxlKCktPmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSA/IGNoaWxkLT5tYXJnaW5Ub3AoKSA6IGNoaWxkLT5tYXJnaW5Cb3R0b20o
KTsKIH0KIAotaW50IFJlbmRlckJsb2NrOjptYXJnaW5FbmRGb3JDaGlsZChSZW5kZXJCb3hNb2Rl
bE9iamVjdCogY2hpbGQpIGNvbnN0CitmbG9hdCBSZW5kZXJCbG9jazo6bWFyZ2luRW5kRm9yQ2hp
bGQoUmVuZGVyQm94TW9kZWxPYmplY3QqIGNoaWxkKSBjb25zdAogewogICAgIGlmIChpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICByZXR1cm4gc3R5bGUoKS0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpID8gY2hpbGQtPm1hcmdpblJpZ2h0KCkgOiBjaGlsZC0+bWFyZ2luTGVmdCgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHAJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw3ICsxOTgsNyBAQAogICAg
ICAgICBSZW5kZXJMYXllciogcm9vdExheWVyID0gdmlldy0+bGF5ZXIoKTsKIAogICAgICAgICAv
LyBTdGFydCBieSBjbGlwcGluZyB0byB0aGUgdmlldydzIGJvdW5kcy4KLSAgICAgICAgSW50UmVj
dCBjbGlwcGluZ0JvdW5kcyA9IHZpZXctPmxheW91dE92ZXJmbG93UmVjdCgpOworICAgICAgICBJ
bnRSZWN0IGNsaXBwaW5nQm91bmRzID0gZW5jbG9zaW5nSW50UmVjdCh2aWV3LT5sYXlvdXRPdmVy
Zmxvd1JlY3QoKSk7CiAKICAgICAgICAgaWYgKG1fb3duaW5nTGF5ZXIgIT0gcm9vdExheWVyKQog
ICAgICAgICAgICAgY2xpcHBpbmdCb3VuZHMuaW50ZXJzZWN0KG1fb3duaW5nTGF5ZXItPmJhY2tn
cm91bmRDbGlwUmVjdChyb290TGF5ZXIsIHRydWUpKTsKQEAgLTQyMiw3ICs0MjIsNyBAQAogICAg
IH0KICAgICAKICAgICBpZiAobV9vd25pbmdMYXllci0+aGFzVHJhbnNmb3JtKCkpIHsKLSAgICAg
ICAgY29uc3QgSW50UmVjdCBib3JkZXJCb3ggPSB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Ym9y
ZGVyQm94UmVjdCgpOworICAgICAgICBjb25zdCBJbnRSZWN0IGJvcmRlckJveCA9IGVuY2xvc2lu
Z0ludFJlY3QodG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPmJvcmRlckJveFJlY3QoKSk7CiAKICAg
ICAgICAgLy8gR2V0IGxheW91dCBib3VuZHMgaW4gdGhlIGNvb3JkcyBvZiBjb21wQW5jZXN0b3Ig
dG8gbWF0Y2ggcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcy4KICAgICAgICAgSW50UmVjdCBsYXll
ckJvdW5kcyA9IEludFJlY3QoZGVsdGEsIGJvcmRlckJveC5zaXplKCkpOwpAQCAtMTAxOCw3ICsx
MDE4LDcgQEAKICAgICAgICAgY29udGVudHNSZWN0ID0gdmlkZW9SZW5kZXJlci0+dmlkZW9Cb3go
KTsKICAgICB9IGVsc2UKICNlbmRpZgotICAgICAgICBjb250ZW50c1JlY3QgPSB0b1JlbmRlckJv
eChyZW5kZXJlcigpKS0+Y29udGVudEJveFJlY3QoKTsKKyAgICAgICAgY29udGVudHNSZWN0ID0g
ZW5jbG9zaW5nSW50UmVjdCh0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Y29udGVudEJveFJlY3Qo
KSk7CiAKICAgICBJbnRTaXplIGNvbnRlbnRPZmZzZXQgPSBjb250ZW50T2Zmc2V0SW5Db21wb3N0
aW5nTGF5ZXIoKTsKICAgICBjb250ZW50c1JlY3QubW92ZShjb250ZW50T2Zmc2V0KTsKQEAgLTEw
OTksNyArMTA5OSw3IEBACiAgICAgSW50UmVjdCBsYXllckJvdW5kcywgZGFtYWdlUmVjdCwgY2xp
cFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdDsKICAgICBtX293bmluZ0xheWVyLT5jYWxjdWxhdGVS
ZWN0cyhyb290TGF5ZXIsIHBhaW50RGlydHlSZWN0LCBsYXllckJvdW5kcywgZGFtYWdlUmVjdCwg
Y2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdCk7CiAKLSAgICBJbnRQb2ludCBwYWludE9mZnNl
dCA9IHRvUG9pbnQobGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIG1fb3duaW5nTGF5ZXItPnJlbmRl
ckJveExvY2F0aW9uKCkpOworICAgIEZsb2F0UG9pbnQgcGFpbnRPZmZzZXQgPSB0b1BvaW50KGxh
eWVyQm91bmRzLmxvY2F0aW9uKCkgLSBtX293bmluZ0xheWVyLT5yZW5kZXJCb3hMb2NhdGlvbigp
KTsKIAogICAgIC8vIElmIHRoaXMgbGF5ZXIncyByZW5kZXJlciBpcyBhIGNoaWxkIG9mIHRoZSBw
YWludGluZ1Jvb3QsIHdlIHJlbmRlciB1bmNvbmRpdGlvbmFsbHksIHdoaWNoCiAgICAgLy8gaXMg
ZG9uZSBieSBwYXNzaW5nIGEgbmlsIHBhaW50aW5nUm9vdCBkb3duIHRvIG91ciByZW5kZXJlciAo
YXMgaWYgbm8gcGFpbnRpbmdSb290IHdhcyBldmVyIHNldCkuCkBAIC0xMjgxLDcgKzEyODEsNyBA
QAogICAgIGJvb2wgZGlkQW5pbWF0ZVRyYW5zZm9ybSA9IGZhbHNlOwogICAgIGJvb2wgZGlkQW5p
bWF0ZU9wYWNpdHkgPSBmYWxzZTsKICAgICAKLSAgICBpZiAoaGFzVHJhbnNmb3JtICYmIG1fZ3Jh
cGhpY3NMYXllci0+YWRkQW5pbWF0aW9uKHRyYW5zZm9ybVZlY3RvciwgdG9SZW5kZXJCb3gocmVu
ZGVyZXIoKSktPmJvcmRlckJveFJlY3QoKS5zaXplKCksIGFuaW0sIGtleWZyYW1lcy5hbmltYXRp
b25OYW1lKCksIHRpbWVPZmZzZXQpKSB7CisgICAgaWYgKGhhc1RyYW5zZm9ybSAmJiBtX2dyYXBo
aWNzTGF5ZXItPmFkZEFuaW1hdGlvbih0cmFuc2Zvcm1WZWN0b3IsIGV4cGFuZGVkSW50U2l6ZSh0
b1JlbmRlckJveChyZW5kZXJlcigpKS0+Ym9yZGVyQm94UmVjdCgpLnNpemUoKSksIGFuaW0sIGtl
eWZyYW1lcy5hbmltYXRpb25OYW1lKCksIHRpbWVPZmZzZXQpKSB7CiAgICAgICAgIGRpZEFuaW1h
dGVUcmFuc2Zvcm0gPSB0cnVlOwogICAgICAgICBjb21wb3NpdG9yKCktPmRpZFN0YXJ0QWNjZWxl
cmF0ZWRBbmltYXRpb24oQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pOwogICAgIH0KQEAgLTEz
MzEsNyArMTMzMSw3IEBACiAgICAgICAgICAgICBLZXlmcmFtZVZhbHVlTGlzdCB0cmFuc2Zvcm1W
ZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CiAgICAgICAgICAgICB0cmFu
c2Zvcm1WZWN0b3IuaW5zZXJ0KG5ldyBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSgwLCAmZnJvbVN0
eWxlLT50cmFuc2Zvcm0oKSkpOwogICAgICAgICAgICAgdHJhbnNmb3JtVmVjdG9yLmluc2VydChu
ZXcgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUoMSwgJnRvU3R5bGUtPnRyYW5zZm9ybSgpKSk7Ci0g
ICAgICAgICAgICBpZiAobV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24odHJhbnNmb3JtVmVj
dG9yLCB0b1JlbmRlckJveChyZW5kZXJlcigpKS0+Ym9yZGVyQm94UmVjdCgpLnNpemUoKSwgdHJh
bnNmb3JtQW5pbSwgR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24oQW5p
bWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSksIHRpbWVPZmZzZXQpKSB7CisgICAgICAgICAg
ICBpZiAobV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24odHJhbnNmb3JtVmVjdG9yLCBleHBh
bmRlZEludFNpemUodG9SZW5kZXJCb3gocmVuZGVyZXIoKSktPmJvcmRlckJveFJlY3QoKS5zaXpl
KCkpLCB0cmFuc2Zvcm1BbmltLCBHcmFwaGljc0xheWVyOjphbmltYXRpb25OYW1lRm9yVHJhbnNp
dGlvbihBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKSwgdGltZU9mZnNldCkpIHsKICAg
ICAgICAgICAgICAgICAvLyBUbyBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCB0cmFuc2Zvcm0gaXMg
dmlzaWJsZSB3aGVuIHRoZSBhbmltYXRpb24gZW5kcywgYWxzbyBzZXQgdGhlIGZpbmFsIG9wYWNp
dHkuCiAgICAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJUcmFuc2Zvcm0odG9TdHlsZSk7CiAgICAg
ICAgICAgICAgICAgZGlkQW5pbWF0ZVRyYW5zZm9ybSA9IHRydWU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2aXNp
b24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIwLDcgKzgyMCw3IEBACiAvLyBkdXJpbmcgYW4g
ZW50aXJlIGxpbmVib3ggdHJlZSBsYXlvdXQgcGFzcyAoYWthIGxheW91dElubGluZUNoaWxkcmVu
KS4KIGNsYXNzIExpbmVMYXlvdXRTdGF0ZSB7CiBwdWJsaWM6Ci0gICAgTGluZUxheW91dFN0YXRl
KGJvb2wgZnVsbExheW91dCwgaW50JiByZXBhaW50TG9naWNhbFRvcCwgaW50JiByZXBhaW50TG9n
aWNhbEJvdHRvbSkKKyAgICBMaW5lTGF5b3V0U3RhdGUoYm9vbCBmdWxsTGF5b3V0LCBmbG9hdCYg
cmVwYWludExvZ2ljYWxUb3AsIGZsb2F0JiByZXBhaW50TG9naWNhbEJvdHRvbSkKICAgICAgICAg
OiBtX2lzRnVsbExheW91dChmdWxsTGF5b3V0KQogICAgICAgICAsIG1fcmVwYWludExvZ2ljYWxU
b3AocmVwYWludExvZ2ljYWxUb3ApCiAgICAgICAgICwgbV9yZXBhaW50TG9naWNhbEJvdHRvbShy
ZXBhaW50TG9naWNhbEJvdHRvbSkKQEAgLTgzMCwxOCArODMwLDE4IEBACiAgICAgYm9vbCBpc0Z1
bGxMYXlvdXQoKSBjb25zdCB7IHJldHVybiBtX2lzRnVsbExheW91dDsgfQogCiAgICAgdm9pZCBz
ZXRSZXBhaW50UmFuZ2UoaW50IGxvZ2ljYWxIZWlnaHQpIHsgbV9yZXBhaW50TG9naWNhbFRvcCA9
IG1fcmVwYWludExvZ2ljYWxCb3R0b20gPSBsb2dpY2FsSGVpZ2h0OyB9Ci0gICAgdm9pZCB1cGRh
dGVSZXBhaW50UmFuZ2VGcm9tQm94KFJvb3RJbmxpbmVCb3gqIGJveCwgaW50IHBhZ2luYXRpb25E
ZWx0YSA9IDApCisgICAgdm9pZCB1cGRhdGVSZXBhaW50UmFuZ2VGcm9tQm94KFJvb3RJbmxpbmVC
b3gqIGJveCwgZmxvYXQgcGFnaW5hdGlvbkRlbHRhID0gMCkKICAgICB7Ci0gICAgICAgIG1fcmVw
YWludExvZ2ljYWxUb3AgPSBtaW4obV9yZXBhaW50TG9naWNhbFRvcCwgYm94LT5sb2dpY2FsVG9w
VmlzdWFsT3ZlcmZsb3coKSArIG1pbihwYWdpbmF0aW9uRGVsdGEsIDApKTsKLSAgICAgICAgbV9y
ZXBhaW50TG9naWNhbEJvdHRvbSA9IG1heChtX3JlcGFpbnRMb2dpY2FsQm90dG9tLCBib3gtPmxv
Z2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdygpICsgbWF4KHBhZ2luYXRpb25EZWx0YSwgMCkpOwor
ICAgICAgICBtX3JlcGFpbnRMb2dpY2FsVG9wID0gbWluKG1fcmVwYWludExvZ2ljYWxUb3AsIGJv
eC0+bG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KCkgKyBtaW4ocGFnaW5hdGlvbkRlbHRhLCAwLjBm
KSk7CisgICAgICAgIG1fcmVwYWludExvZ2ljYWxCb3R0b20gPSBtYXgobV9yZXBhaW50TG9naWNh
bEJvdHRvbSwgYm94LT5sb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3coKSArIG1heChwYWdpbmF0
aW9uRGVsdGEsIDAuMGYpKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzRnVsbExh
eW91dDsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBhIHJhbmdlIG9iamVjdCBpbnN0
ZWFkIG9mIHR3byBpbnRzPwotICAgIGludCYgbV9yZXBhaW50TG9naWNhbFRvcDsKLSAgICBpbnQm
IG1fcmVwYWludExvZ2ljYWxCb3R0b207CisgICAgZmxvYXQmIG1fcmVwYWludExvZ2ljYWxUb3A7
CisgICAgZmxvYXQmIG1fcmVwYWludExvZ2ljYWxCb3R0b207CiB9OwogCiBzdGF0aWMgdm9pZCBk
ZWxldGVMaW5lUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgUmVuZGVyQXJlbmEq
IGFyZW5hLCBSb290SW5saW5lQm94KiBzdGFydExpbmUsIFJvb3RJbmxpbmVCb3gqIHN0b3BMaW5l
ID0gMCkKQEAgLTg5Myw3ICs4OTMsNyBAQAogICAgIC8vIGlmIHdlIGRldGVybWluZSB0aGF0IHdl
J3JlIGFibGUgdG8gc3luY2hyb25pemUgYWZ0ZXIgaGFuZGxpbmcgYWxsIG91ciBkaXJ0eSBsaW5l
cy4KICAgICBJbmxpbmVJdGVyYXRvciBjbGVhbkxpbmVTdGFydDsKICAgICBCaWRpU3RhdHVzIGNs
ZWFuTGluZUJpZGlTdGF0dXM7Ci0gICAgaW50IGVuZExpbmVMb2dpY2FsVG9wID0gMDsKKyAgICBm
bG9hdCBlbmRMaW5lTG9naWNhbFRvcCA9IDA7CiAgICAgUm9vdElubGluZUJveCogZW5kTGluZSA9
IChsYXlvdXRTdGF0ZS5pc0Z1bGxMYXlvdXQoKSB8fCAhc3RhcnRMaW5lKSA/CiAgICAgICAgIDAg
OiBkZXRlcm1pbmVFbmRQb3NpdGlvbihzdGFydExpbmUsIGZsb2F0cywgZmxvYXRJbmRleCwgY2xl
YW5MaW5lU3RhcnQsIGNsZWFuTGluZUJpZGlTdGF0dXMsIGVuZExpbmVMb2dpY2FsVG9wKTsKIApA
QCAtMTEyMSw3ICsxMTIxLDcgQEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmxheW91
dElubGluZUNoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50JiByZXBhaW50TG9naWNh
bFRvcCwgaW50JiByZXBhaW50TG9naWNhbEJvdHRvbSkKK3ZvaWQgUmVuZGVyQmxvY2s6OmxheW91
dElubGluZUNoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgZmxvYXQmIHJlcGFpbnRMb2dp
Y2FsVG9wLCBmbG9hdCYgcmVwYWludExvZ2ljYWxCb3R0b20pCiB7CiAgICAgbV9vdmVyZmxvdy5j
bGVhcigpOwogCkBAIC0xMTg3LDkgKzExODcsOSBAQAogICAgIH0KIAogICAgIC8vIEV4cGFuZCB0
aGUgbGFzdCBsaW5lIHRvIGFjY29tbW9kYXRlIFJ1YnkgYW5kIGVtcGhhc2lzIG1hcmtzLgotICAg
IGludCBsYXN0TGluZUFubm90YXRpb25zQWRqdXN0bWVudCA9IDA7CisgICAgZmxvYXQgbGFzdExp
bmVBbm5vdGF0aW9uc0FkanVzdG1lbnQgPSAwOwogICAgIGlmIChsYXN0Um9vdEJveCgpKSB7Ci0g
ICAgICAgIGludCBsb3dlc3RBbGxvd2VkUG9zaXRpb24gPSBtYXgobGFzdFJvb3RCb3goKS0+bGlu
ZUJvdHRvbSgpLCBsb2dpY2FsSGVpZ2h0KCkgKyBwYWRkaW5nQWZ0ZXIoKSk7CisgICAgICAgIGZs
b2F0IGxvd2VzdEFsbG93ZWRQb3NpdGlvbiA9IG1heChsYXN0Um9vdEJveCgpLT5saW5lQm90dG9t
KCksIGxvZ2ljYWxIZWlnaHQoKSArIHBhZGRpbmdBZnRlcigpKTsKICAgICAgICAgaWYgKCFzdHls
ZSgpLT5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICBsYXN0TGluZUFu
bm90YXRpb25zQWRqdXN0bWVudCA9IGxhc3RSb290Qm94KCktPmNvbXB1dGVVbmRlckFubm90YXRp
b25BZGp1c3RtZW50KGxvd2VzdEFsbG93ZWRQb3NpdGlvbik7CiAgICAgICAgIGVsc2UKQEAgLTEy
MTgsNyArMTIxOCw3IEBACiAgICAgZm9yIChWZWN0b3I8UmVuZGVyQm94Kj46Oml0ZXJhdG9yIGl0
ID0gY2xlYW5MaW5lRmxvYXRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAg
UmVuZGVyQm94KiBmbG9hdGluZ0JveCA9ICppdDsKICAgICAgICAgZmxvYXRpbmdCb3gtPmxheW91
dElmTmVlZGVkKCk7Ci0gICAgICAgIEludFNpemUgbmV3U2l6ZShmbG9hdGluZ0JveC0+d2lkdGgo
KSArIGZsb2F0aW5nQm94LT5tYXJnaW5MZWZ0KCkgKyBmbG9hdGluZ0JveC0+bWFyZ2luUmlnaHQo
KSwgZmxvYXRpbmdCb3gtPmhlaWdodCgpICsgZmxvYXRpbmdCb3gtPm1hcmdpblRvcCgpICsgZmxv
YXRpbmdCb3gtPm1hcmdpbkJvdHRvbSgpKTsKKyAgICAgICAgRmxvYXRTaXplIG5ld1NpemUoZmxv
YXRpbmdCb3gtPndpZHRoKCkgKyBmbG9hdGluZ0JveC0+bWFyZ2luTGVmdCgpICsgZmxvYXRpbmdC
b3gtPm1hcmdpblJpZ2h0KCksIGZsb2F0aW5nQm94LT5oZWlnaHQoKSArIGZsb2F0aW5nQm94LT5t
YXJnaW5Ub3AoKSArIGZsb2F0aW5nQm94LT5tYXJnaW5Cb3R0b20oKSk7CiAgICAgICAgIEFTU0VS
VChmbG9hdEluZGV4IDwgZmxvYXRzLnNpemUoKSk7CiAgICAgICAgIGlmIChmbG9hdHNbZmxvYXRJ
bmRleF0ub2JqZWN0ICE9IGZsb2F0aW5nQm94KSB7CiAgICAgICAgICAgICBlbmNvdW50ZXJlZE5l
d0Zsb2F0ID0gdHJ1ZTsKQEAgLTEyMjYsMTAgKzEyMjYsMTAgQEAKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChmbG9hdHNbZmxvYXRJbmRleF0ucmVjdC5zaXplKCkgIT0gbmV3U2l6ZSkgewotICAg
ICAgICAgICAgaW50IGZsb2F0VG9wID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGZsb2F0
c1tmbG9hdEluZGV4XS5yZWN0LnkoKSA6IGZsb2F0c1tmbG9hdEluZGV4XS5yZWN0LngoKTsKLSAg
ICAgICAgICAgIGludCBmbG9hdEhlaWdodCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBt
YXgoZmxvYXRzW2Zsb2F0SW5kZXhdLnJlY3QuaGVpZ2h0KCksIG5ld1NpemUuaGVpZ2h0KCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogbWF4KGZsb2F0c1tmbG9hdEluZGV4XS5yZWN0LndpZHRoKCksIG5ld1NpemUud2lk
dGgoKSk7Ci0gICAgICAgICAgICBmbG9hdEhlaWdodCA9IG1pbihmbG9hdEhlaWdodCwgbnVtZXJp
Y19saW1pdHM8aW50Pjo6bWF4KCkgLSBmbG9hdFRvcCk7CisgICAgICAgICAgICBmbG9hdCBmbG9h
dFRvcCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmbG9hdHNbZmxvYXRJbmRleF0ucmVj
dC55KCkgOiBmbG9hdHNbZmxvYXRJbmRleF0ucmVjdC54KCk7CisgICAgICAgICAgICBmbG9hdCBm
bG9hdEhlaWdodCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBtYXgoZmxvYXRzW2Zsb2F0
SW5kZXhdLnJlY3QuaGVpZ2h0KCksIG5ld1NpemUuaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAg
OiBtYXgoZmxvYXRzW2Zsb2F0SW5kZXhdLnJlY3Qud2lkdGgoKSwgbmV3U2l6ZS53aWR0aCgpKTsK
KyAgICAgICAgICAgIGZsb2F0SGVpZ2h0ID0gbWluKGZsb2F0SGVpZ2h0LCBudW1lcmljX2xpbWl0
czxmbG9hdD46Om1heCgpIC0gZmxvYXRUb3ApOwogICAgICAgICAgICAgbGluZS0+bWFya0RpcnR5
KCk7CiAgICAgICAgICAgICBtYXJrTGluZXNEaXJ0eUluQmxvY2tSYW5nZShsaW5lLT5ibG9ja0xv
Z2ljYWxIZWlnaHQoKSwgZmxvYXRUb3AgKyBmbG9hdEhlaWdodCwgbGluZSk7CiAgICAgICAgICAg
ICBmbG9hdHNbZmxvYXRJbmRleF0ucmVjdC5zZXRTaXplKG5ld1NpemUpOwpAQCAtMTM1NSw3ICsx
MzU1LDcgQEAKICAgICByZXR1cm4gY3VycjsKIH0KIAotUm9vdElubGluZUJveCogUmVuZGVyQmxv
Y2s6OmRldGVybWluZUVuZFBvc2l0aW9uKFJvb3RJbmxpbmVCb3gqIHN0YXJ0TGluZSwgVmVjdG9y
PEZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMsIHNpemVfdCBmbG9hdEluZGV4LCBJbmxpbmVJdGVyYXRv
ciYgY2xlYW5MaW5lU3RhcnQsIEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlTdGF0dXMsIGludCYg
bG9naWNhbFRvcCkKK1Jvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVFbmRQb3Np
dGlvbihSb290SW5saW5lQm94KiBzdGFydExpbmUsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxv
YXRzLCBzaXplX3QgZmxvYXRJbmRleCwgSW5saW5lSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LCBC
aWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzLCBmbG9hdCYgbG9naWNhbFRvcCkKIHsKICAg
ICBSb290SW5saW5lQm94KiBsYXN0ID0gMDsKICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGN1cnIg
PSBzdGFydExpbmUtPm5leHRSb290Qm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0Um9vdEJv
eCgpKSB7CkBAIC0xMzkwLDI0ICsxMzkwLDI0IEBACiAgICAgcmV0dXJuIGxhc3Q7CiB9CiAKLWJv
b2wgUmVuZGVyQmxvY2s6Om1hdGNoZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3Rh
dGUsIGNvbnN0IElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IElubGluZUl0ZXJh
dG9yJiBlbmRMaW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMmIGVuZExpbmVTdGF0dXMsIFJvb3RJ
bmxpbmVCb3gqJiBlbmRMaW5lLCBpbnQmIGVuZExvZ2ljYWxUb3ApCitib29sIFJlbmRlckJsb2Nr
OjptYXRjaGVkRW5kTGluZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBJbmxp
bmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBjb25zdCBJbmxpbmVJdGVyYXRvciYgZW5kTGluZVN0
YXJ0LCBjb25zdCBCaWRpU3RhdHVzJiBlbmRMaW5lU3RhdHVzLCBSb290SW5saW5lQm94KiYgZW5k
TGluZSwgZmxvYXQmIGVuZExvZ2ljYWxUb3ApCiB7CiAgICAgaWYgKHJlc29sdmVyLnBvc2l0aW9u
KCkgPT0gZW5kTGluZVN0YXJ0KSB7CiAgICAgICAgIGlmIChyZXNvbHZlci5zdGF0dXMoKSAhPSBl
bmRMaW5lU3RhdHVzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGludCBk
ZWx0YSA9IGxvZ2ljYWxIZWlnaHQoKSAtIGVuZExvZ2ljYWxUb3A7CisgICAgICAgIGZsb2F0IGRl
bHRhID0gbG9naWNhbEhlaWdodCgpIC0gZW5kTG9naWNhbFRvcDsKICAgICAgICAgaWYgKCFkZWx0
YSB8fCAhbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
ICAgICAvLyBTZWUgaWYgYW55IGZsb2F0cyBlbmQgaW4gdGhlIHJhbmdlIGFsb25nIHdoaWNoIHdl
IHdhbnQgdG8gc2hpZnQgdGhlIGxpbmVzIHZlcnRpY2FsbHkuCi0gICAgICAgIGludCBsb2dpY2Fs
VG9wID0gbWluKGxvZ2ljYWxIZWlnaHQoKSwgZW5kTG9naWNhbFRvcCk7CisgICAgICAgIGZsb2F0
IGxvZ2ljYWxUb3AgPSBtaW4obG9naWNhbEhlaWdodCgpLCBlbmRMb2dpY2FsVG9wKTsKIAogICAg
ICAgICBSb290SW5saW5lQm94KiBsYXN0TGluZSA9IGVuZExpbmU7CiAgICAgICAgIHdoaWxlIChS
b290SW5saW5lQm94KiBuZXh0TGluZSA9IGxhc3RMaW5lLT5uZXh0Um9vdEJveCgpKQogICAgICAg
ICAgICAgbGFzdExpbmUgPSBuZXh0TGluZTsKIAotICAgICAgICBpbnQgbG9naWNhbEJvdHRvbSA9
IGxhc3RMaW5lLT5ibG9ja0xvZ2ljYWxIZWlnaHQoKSArIGFicyhkZWx0YSk7CisgICAgICAgIGZs
b2F0IGxvZ2ljYWxCb3R0b20gPSBsYXN0TGluZS0+YmxvY2tMb2dpY2FsSGVpZ2h0KCkgKyBhYnMo
ZGVsdGEpOwogCiAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9
IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKQEAgLTE0MzUsMTAgKzE0MzUsMTAg
QEAKICAgICAgICAgICAgIGlmIChyZXN1bHQpCiAgICAgICAgICAgICAgICAgZW5kTG9naWNhbFRv
cCA9IGxpbmUtPmJsb2NrTG9naWNhbEhlaWdodCgpOwogCi0gICAgICAgICAgICBpbnQgZGVsdGEg
PSBsb2dpY2FsSGVpZ2h0KCkgLSBlbmRMb2dpY2FsVG9wOworICAgICAgICAgICAgZmxvYXQgZGVs
dGEgPSBsb2dpY2FsSGVpZ2h0KCkgLSBlbmRMb2dpY2FsVG9wOwogICAgICAgICAgICAgaWYgKGRl
bHRhICYmIG1fZmxvYXRpbmdPYmplY3RzKSB7CiAgICAgICAgICAgICAgICAgLy8gU2VlIGlmIGFu
eSBmbG9hdHMgZW5kIGluIHRoZSByYW5nZSBhbG9uZyB3aGljaCB3ZSB3YW50IHRvIHNoaWZ0IHRo
ZSBsaW5lcyB2ZXJ0aWNhbGx5LgotICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gbWlu
KGxvZ2ljYWxIZWlnaHQoKSwgZW5kTG9naWNhbFRvcCk7CisgICAgICAgICAgICAgICAgZmxvYXQg
bG9naWNhbFRvcCA9IG1pbihsb2dpY2FsSGVpZ2h0KCksIGVuZExvZ2ljYWxUb3ApOwogCiAgICAg
ICAgICAgICAgICAgUm9vdElubGluZUJveCogbGFzdExpbmUgPSBlbmRMaW5lOwogICAgICAgICAg
ICAgICAgIHdoaWxlIChSb290SW5saW5lQm94KiBuZXh0TGluZSA9IGxhc3RMaW5lLT5uZXh0Um9v
dEJveCgpKQpAQCAtMTY2Nyw3ICsxNjY3LDcgQEAKIHByaXZhdGU6CiAgICAgdm9pZCBjb21wdXRl
QXZhaWxhYmxlV2lkdGhGcm9tTGVmdEFuZFJpZ2h0KCkKICAgICB7Ci0gICAgICAgIG1fYXZhaWxh
YmxlV2lkdGggPSBtYXgoMCwgbV9yaWdodCAtIG1fbGVmdCkgKyBtX292ZXJoYW5nV2lkdGg7Cisg
ICAgICAgIG1fYXZhaWxhYmxlV2lkdGggPSBtYXgoMC4wZiwgbV9yaWdodCAtIG1fbGVmdCkgKyBt
X292ZXJoYW5nV2lkdGg7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTY3NSw4ICsxNjc1LDggQEAK
ICAgICBmbG9hdCBtX3VuY29tbWl0dGVkV2lkdGg7CiAgICAgZmxvYXQgbV9jb21taXR0ZWRXaWR0
aDsKICAgICBmbG9hdCBtX292ZXJoYW5nV2lkdGg7IC8vIFRoZSBhbW91bnQgYnkgd2hpY2ggfG1f
YXZhaWxhYmxlV2lkdGh8IGhhcyBiZWVuIGluZmxhdGVkIHRvIGFjY291bnQgZm9yIHBvc3NpYmxl
IGNvbnRyYWN0aW9uIGR1ZSB0byBydWJ5IG92ZXJoYW5nLgotICAgIGludCBtX2xlZnQ7Ci0gICAg
aW50IG1fcmlnaHQ7CisgICAgZmxvYXQgbV9sZWZ0OworICAgIGZsb2F0IG1fcmlnaHQ7CiAgICAg
ZmxvYXQgbV9hdmFpbGFibGVXaWR0aDsKICAgICBib29sIG1faXNGaXJzdExpbmU7CiB9OwpAQCAt
MTcyMyw4ICsxNzIzLDggQEAKICAgICBBU1NFUlQoIW1fY29tbWl0dGVkV2lkdGgpOwogICAgIEFT
U0VSVCghZml0c09uTGluZSgpKTsKIAotICAgIGludCBmbG9hdExvZ2ljYWxCb3R0b207Ci0gICAg
aW50IGxhc3RGbG9hdExvZ2ljYWxCb3R0b20gPSBtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0KCk7Cisg
ICAgZmxvYXQgZmxvYXRMb2dpY2FsQm90dG9tOworICAgIGZsb2F0IGxhc3RGbG9hdExvZ2ljYWxC
b3R0b20gPSBtX2Jsb2NrLT5sb2dpY2FsSGVpZ2h0KCk7CiAgICAgZmxvYXQgbmV3TGluZVdpZHRo
ID0gbV9hdmFpbGFibGVXaWR0aDsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBmbG9hdExv
Z2ljYWxCb3R0b20gPSBtX2Jsb2NrLT5uZXh0RmxvYXRMb2dpY2FsQm90dG9tQmVsb3cobGFzdEZs
b2F0TG9naWNhbEJvdHRvbSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElu
bGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5s
aW5lQm94LmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jv
b3RJbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTggKzQ3LDE4IEBACiAKICAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0UG9zaXRpb24oZmxvYXQgZHgsIGZsb2F0IGR5KTsKIAotICAgIGlu
dCBsaW5lVG9wKCkgY29uc3QgeyByZXR1cm4gbV9saW5lVG9wOyB9Ci0gICAgaW50IGxpbmVCb3R0
b20oKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3R0b207IH0KKyAgICBmbG9hdCBsaW5lVG9wKCkg
Y29uc3QgeyByZXR1cm4gbV9saW5lVG9wOyB9CisgICAgZmxvYXQgbGluZUJvdHRvbSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGluZUJvdHRvbTsgfQogCi0gICAgaW50IHBhZ2luYXRpb25TdHJ1dCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGFnaW5hdGlvblN0cnV0OyB9CisgICAgZmxvYXQgcGFnaW5hdGlvblN0
cnV0KCkgY29uc3QgeyByZXR1cm4gbV9wYWdpbmF0aW9uU3RydXQ7IH0KICAgICB2b2lkIHNldFBh
Z2luYXRpb25TdHJ1dChpbnQgcykgeyBtX3BhZ2luYXRpb25TdHJ1dCA9IHM7IH0KIAotICAgIGlu
dCBzZWxlY3Rpb25Ub3AoKSBjb25zdDsKLSAgICBpbnQgc2VsZWN0aW9uQm90dG9tKCkgY29uc3Q7
Ci0gICAgaW50IHNlbGVjdGlvbkhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1heCgwLCBzZWxlY3Rp
b25Cb3R0b20oKSAtIHNlbGVjdGlvblRvcCgpKTsgfQorICAgIGZsb2F0IHNlbGVjdGlvblRvcCgp
IGNvbnN0OworICAgIGZsb2F0IHNlbGVjdGlvbkJvdHRvbSgpIGNvbnN0OworICAgIGZsb2F0IHNl
bGVjdGlvbkhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1heCgwLjBmLCBzZWxlY3Rpb25Cb3R0b20o
KSAtIHNlbGVjdGlvblRvcCgpKTsgfQogCi0gICAgaW50IGFsaWduQm94ZXNJbkJsb2NrRGlyZWN0
aW9uKGludCBoZWlnaHRPZkJsb2NrLCBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCYs
IFZlcnRpY2FsUG9zaXRpb25DYWNoZSYpOwotICAgIHZvaWQgc2V0TGluZVRvcEJvdHRvbVBvc2l0
aW9ucyhpbnQgdG9wLCBpbnQgYm90dG9tKTsKKyAgICBmbG9hdCBhbGlnbkJveGVzSW5CbG9ja0Rp
cmVjdGlvbihmbG9hdCBoZWlnaHRPZkJsb2NrLCBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250
c01hcCYsIFZlcnRpY2FsUG9zaXRpb25DYWNoZSYpOworICAgIHZvaWQgc2V0TGluZVRvcEJvdHRv
bVBvc2l0aW9ucyhmbG9hdCB0b3AsIGZsb2F0IGJvdHRvbSk7CiAKICAgICB2aXJ0dWFsIFJlbmRl
ckxpbmVCb3hMaXN0KiByZW5kZXJlckxpbmVCb3hlcygpIGNvbnN0OwogCkBAIC02OSw3ICs2OSw3
IEBACiAgICAgdW5zaWduZWQgbGluZUJyZWFrUG9zKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQnJl
YWtQb3M7IH0KICAgICB2b2lkIHNldExpbmVCcmVha1Bvcyh1bnNpZ25lZCBwKSB7IG1fbGluZUJy
ZWFrUG9zID0gcDsgfQogCi0gICAgaW50IGJsb2NrTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0
dXJuIG1fYmxvY2tMb2dpY2FsSGVpZ2h0OyB9CisgICAgZmxvYXQgYmxvY2tMb2dpY2FsSGVpZ2h0
KCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0xvZ2ljYWxIZWlnaHQ7IH0KICAgICB2b2lkIHNldEJs
b2NrTG9naWNhbEhlaWdodChpbnQgaCkgeyBtX2Jsb2NrTG9naWNhbEhlaWdodCA9IGg7IH0KIAog
ICAgIGJvb2wgZW5kc1dpdGhCcmVhaygpIGNvbnN0IHsgcmV0dXJuIG1fZW5kc1dpdGhCcmVhazsg
fQpAQCAtODMsMTkgKzgzLDE5IEBACiAKICAgICBFbGxpcHNpc0JveCogZWxsaXBzaXNCb3goKSBj
b25zdDsKIAotICAgIHZvaWQgcGFpbnRFbGxpcHNpc0JveChQYWludEluZm8mLCBjb25zdCBJbnRQ
b2ludCYsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSkgY29uc3Q7CisgICAgdm9pZCBwYWlu
dEVsbGlwc2lzQm94KFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgbGluZVRvcCwg
aW50IGxpbmVCb3R0b20pIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGNsZWFyVHJ1bmNhdGlv
bigpOwogCi0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUgYmFz
ZWxpbmVUeXBlKSBjb25zdCB7IHJldHVybiBib3hNb2RlbE9iamVjdCgpLT5iYXNlbGluZVBvc2l0
aW9uKGJhc2VsaW5lVHlwZSwgbV9maXJzdExpbmUsIGlzSG9yaXpvbnRhbCgpID8gSG9yaXpvbnRh
bExpbmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcyk7IH0KLSAg
ICB2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gYm94TW9kZWxPYmplY3Qo
KS0+bGluZUhlaWdodChtX2ZpcnN0TGluZSwgaXNIb3Jpem9udGFsKCkgPyBIb3Jpem9udGFsTGlu
ZSA6IFZlcnRpY2FsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKTsgfQorICAgIHZp
cnR1YWwgZmxvYXQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlKSBj
b25zdCB7IHJldHVybiBib3hNb2RlbE9iamVjdCgpLT5iYXNlbGluZVBvc2l0aW9uKGJhc2VsaW5l
VHlwZSwgbV9maXJzdExpbmUsIGlzSG9yaXpvbnRhbCgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0
aWNhbExpbmUsIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcyk7IH0KKyAgICB2aXJ0dWFsIGZs
b2F0IGxpbmVIZWlnaHQoKSBjb25zdCB7IHJldHVybiBib3hNb2RlbE9iamVjdCgpLT5saW5lSGVp
Z2h0KG1fZmlyc3RMaW5lLCBpc0hvcml6b250YWwoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGlj
YWxMaW5lLCBQb3NpdGlvbk9mSW50ZXJpb3JMaW5lQm94ZXMpOyB9CiAKICNpZiBQTEFURk9STShN
QUMpCiAgICAgdm9pZCBhZGRIaWdobGlnaHRPdmVyZmxvdygpOwotICAgIHZvaWQgcGFpbnRDdXN0
b21IaWdobGlnaHQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBBdG9taWNTdHJp
bmcmIGhpZ2hsaWdodFR5cGUpOworICAgIHZvaWQgcGFpbnRDdXN0b21IaWdobGlnaHQoUGFpbnRJ
bmZvJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEF0b21pY1N0cmluZyYgaGlnaGxpZ2h0VHlw
ZSk7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJ
bnRQb2ludCYsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7CisgICAgdmlydHVhbCB2b2lk
IHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgbGluZVRvcCwgaW50IGxp
bmVCb3R0b20pOwogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwg
Y29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgbGluZVRvcCwgaW50IGxpbmVC
b3R0b20pOwogCiAgICAgYm9vbCBoYXNTZWxlY3RlZENoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4g
bV9oYXNTZWxlY3RlZENoaWxkcmVuT3JDYW5IYXZlTGVhZGluZ0V4cGFuc2lvbjsgfQpAQCAtMTA1
LDcgKzEwNSw3IEBACiAgICAgSW5saW5lQm94KiBmaXJzdFNlbGVjdGVkQm94KCk7CiAgICAgSW5s
aW5lQm94KiBsYXN0U2VsZWN0ZWRCb3goKTsKIAotICAgIEdhcFJlY3RzIGxpbmVTZWxlY3Rpb25H
YXAoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgSW50UG9pbnQmIHJvb3RCbG9ja1BoeXNp
Y2FsUG9zaXRpb24sIGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssIGludCBzZWxU
b3AsIGludCBzZWxIZWlnaHQsIGNvbnN0IFBhaW50SW5mbyopOworICAgIEdhcFJlY3RzIGxpbmVT
ZWxlY3Rpb25HYXAoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgRmxvYXRQb2ludCYgcm9v
dEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXRGcm9tUm9vdEJs
b2NrLCBmbG9hdCBzZWxUb3AsIGZsb2F0IHNlbEhlaWdodCwgY29uc3QgUGFpbnRJbmZvKik7CiAK
ICAgICBSZW5kZXJCbG9jayogYmxvY2soKSBjb25zdDsKIApAQCAtMTMzLDcgKzEzMyw3IEBACiAK
ICAgICBJbnRSZWN0IHBhZGRlZExheW91dE92ZXJmbG93UmVjdChpbnQgZW5kUGFkZGluZykgY29u
c3Q7CiAKLSAgICB2b2lkIGFzY2VudEFuZERlc2NlbnRGb3JCb3goSW5saW5lQm94KiwgR2x5cGhP
dmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAmLCBpbnQmIGFzY2VudCwgaW50JiBkZXNjZW50LCBi
b29sJiBhZmZlY3RzQXNjZW50LCBib29sJiBhZmZlY3RzRGVzY2VudCkgY29uc3Q7CisgICAgdm9p
ZCBhc2NlbnRBbmREZXNjZW50Rm9yQm94KElubGluZUJveCosIEdseXBoT3ZlcmZsb3dBbmRGYWxs
YmFja0ZvbnRzTWFwJiwgZmxvYXQmIGFzY2VudCwgZmxvYXQmIGRlc2NlbnQsIGJvb2wmIGFmZmVj
dHNBc2NlbnQsIGJvb2wmIGFmZmVjdHNEZXNjZW50KSBjb25zdDsKICAgICBpbnQgdmVydGljYWxQ
b3NpdGlvbkZvckJveChJbmxpbmVCb3gqLCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmKTsKICAgICBi
b29sIGluY2x1ZGVMZWFkaW5nRm9yQm94KElubGluZUJveCopIGNvbnN0OwogICAgIGJvb2wgaW5j
bHVkZUZvbnRGb3JCb3goSW5saW5lQm94KikgY29uc3Q7CkBAIC0xNDIsMTkgKzE0MiwxOSBAQAog
ICAgIGJvb2wgZml0c1RvR2x5cGhzKCkgY29uc3Q7CiAgICAgYm9vbCBpbmNsdWRlc1Jvb3RMaW5l
Qm94Rm9udE9yTGVhZGluZygpIGNvbnN0OwogICAgIAotICAgIGludCBsb2dpY2FsVG9wVmlzdWFs
T3ZlcmZsb3coKSBjb25zdAorICAgIGZsb2F0IGxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdygpIGNv
bnN0CiAgICAgewogICAgICAgICByZXR1cm4gSW5saW5lRmxvd0JveDo6bG9naWNhbFRvcFZpc3Vh
bE92ZXJmbG93KGxpbmVUb3AoKSk7CiAgICAgfQotICAgIGludCBsb2dpY2FsQm90dG9tVmlzdWFs
T3ZlcmZsb3coKSBjb25zdAorICAgIGZsb2F0IGxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdygp
IGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gSW5saW5lRmxvd0JveDo6bG9naWNhbEJvdHRv
bVZpc3VhbE92ZXJmbG93KGxpbmVCb3R0b20oKSk7CiAgICAgfQotICAgIGludCBsb2dpY2FsVG9w
TGF5b3V0T3ZlcmZsb3coKSBjb25zdAorICAgIGZsb2F0IGxvZ2ljYWxUb3BMYXlvdXRPdmVyZmxv
dygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gSW5saW5lRmxvd0JveDo6bG9naWNhbFRv
cExheW91dE92ZXJmbG93KGxpbmVUb3AoKSk7CiAgICAgfQotICAgIGludCBsb2dpY2FsQm90dG9t
TGF5b3V0T3ZlcmZsb3coKSBjb25zdAorICAgIGZsb2F0IGxvZ2ljYWxCb3R0b21MYXlvdXRPdmVy
ZmxvdygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gSW5saW5lRmxvd0JveDo6bG9naWNh
bEJvdHRvbUxheW91dE92ZXJmbG93KGxpbmVCb3R0b20oKSk7CiAgICAgfQpAQCAtMTc2LDE3ICsx
NzYsMTcgQEAKICAgICB1bnNpZ25lZCBtX2xpbmVCcmVha1BvczsKICAgICBSZWZQdHI8QmlkaUNv
bnRleHQ+IG1fbGluZUJyZWFrQ29udGV4dDsKIAotICAgIGludCBtX2xpbmVUb3A7Ci0gICAgaW50
IG1fbGluZUJvdHRvbTsKKyAgICBmbG9hdCBtX2xpbmVUb3A7CisgICAgZmxvYXQgbV9saW5lQm90
dG9tOwogCi0gICAgaW50IG1fcGFnaW5hdGlvblN0cnV0OworICAgIGZsb2F0IG1fcGFnaW5hdGlv
blN0cnV0OwogCiAgICAgLy8gRmxvYXRzIGhhbmdpbmcgb2ZmIHRoZSBsaW5lIGFyZSBwdXNoZWQg
aW50byB0aGlzIHZlY3RvciBkdXJpbmcgbGF5b3V0LiBJdCBpcyBvbmx5CiAgICAgLy8gZ29vZCBm
b3IgYXMgbG9uZyBhcyB0aGUgbGluZSBoYXMgbm90IGJlZW4gbWFya2VkIGRpcnR5LgogICAgIE93
blB0cjxWZWN0b3I8UmVuZGVyQm94Kj4gPiBtX2Zsb2F0czsKIAogICAgIC8vIFRoZSBsb2dpY2Fs
IGhlaWdodCBvZiB0aGUgYmxvY2sgYXQgdGhlIGVuZCBvZiB0aGlzIGxpbmUuICBUaGlzIGlzIHdo
ZXJlIHRoZSBuZXh0IGxpbmUgc3RhcnRzLgotICAgIGludCBtX2Jsb2NrTG9naWNhbEhlaWdodDsK
KyAgICBmbG9hdCBtX2Jsb2NrTG9naWNhbEhlaWdodDsKIAogICAgIC8vIFdoZXRoZXIgb3Igbm90
IHRoaXMgbGluZSB1c2VzIGFscGhhYmV0aWMgb3IgaWRlb2dyYXBoaWMgYmFzZWxpbmVzIGJ5IGRl
ZmF1bHQuCiAgICAgdW5zaWduZWQgbV9iYXNlbGluZVR5cGUgOiAxOyAvLyBGb250QmFzZWxpbmUK
QEAgLTIwMCw3ICsyMDAsNyBAQAogICAgIFdURjo6VW5pY29kZTo6RGlyZWN0aW9uIG1fbGluZUJy
ZWFrQmlkaVN0YXR1c0xhc3QgOiA1OwogfTsKIAotaW5saW5lIHZvaWQgUm9vdElubGluZUJveDo6
c2V0TGluZVRvcEJvdHRvbVBvc2l0aW9ucyhpbnQgdG9wLCBpbnQgYm90dG9tKSAKK2lubGluZSB2
b2lkIFJvb3RJbmxpbmVCb3g6OnNldExpbmVUb3BCb3R0b21Qb3NpdGlvbnMoZmxvYXQgdG9wLCBm
bG9hdCBib3R0b20pIAogeyAKICAgICBtX2xpbmVUb3AgPSB0b3A7IAogICAgIG1fbGluZUJvdHRv
bSA9IGJvdHRvbTsgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRz
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmllbGRz
ZXQuaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RmllbGRzZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsOCBAQAogICAgIHZpcnR1YWwg
Ym9vbCBhdm9pZHNGbG9hdHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBi
b29sIHN0cmV0Y2hlc1RvTWluSW50cmluc2ljTG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZv
JiwgY29uc3QgSW50UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRNYXNrKFBhaW50SW5m
byYsIGNvbnN0IEludFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Qm94RGVjb3JhdGlv
bnMoUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dE1hc2soUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRQb2ludCYpOwogfTsKIAogaW5saW5lIFJlbmRl
ckZpZWxkc2V0KiB0b1JlbmRlckZpZWxkc2V0KFJlbmRlck9iamVjdCogb2JqZWN0KQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHJl
dmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2Vj
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NCw3ICsyNTQsNyBAQAogCiB2b2lkIFJlbmRl
clRhYmxlU2VjdGlvbjo6c2V0Q2VsbExvZ2ljYWxXaWR0aHMoKQogewotICAgIFZlY3RvcjxpbnQ+
JiBjb2x1bW5Qb3MgPSB0YWJsZSgpLT5jb2x1bW5Qb3NpdGlvbnMoKTsKKyAgICBWZWN0b3I8Zmxv
YXQ+JiBjb2x1bW5Qb3MgPSB0YWJsZSgpLT5jb2x1bW5Qb3NpdGlvbnMoKTsKIAogICAgIExheW91
dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCkpOwogICAgIApAQCAtODY0LDcgKzg2
NCw3IEBACiAgICAgbV9vdXRlckJvcmRlckVuZCA9IGNhbGNPdXRlckJvcmRlckVuZCgpOwogfQog
Ci1pbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpmaXJzdExpbmVCb3hCYXNlbGluZSgpIGNvbnN0Citm
bG9hdCBSZW5kZXJUYWJsZVNlY3Rpb246OmZpcnN0TGluZUJveEJhc2VsaW5lKCkgY29uc3QKIHsK
ICAgICBpZiAoIW1fZ3JpZFJvd3MpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTg3OSwxMyArODc5
LDEzIEBACiAgICAgICAgIENlbGxTdHJ1Y3QmIGNzID0gZmlyc3RSb3ctPmF0KGkpOwogICAgICAg
ICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBjcy5wcmltYXJ5Q2VsbCgpOwogICAgICAgICBpZiAo
Y2VsbCkKLSAgICAgICAgICAgIGZpcnN0TGluZUJhc2VsaW5lID0gbWF4KGZpcnN0TGluZUJhc2Vs
aW5lLCBjZWxsLT5sb2dpY2FsVG9wKCkgKyBjZWxsLT5wYWRkaW5nQmVmb3JlKCkgKyBjZWxsLT5i
b3JkZXJCZWZvcmUoKSArIGNlbGwtPmNvbnRlbnRMb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICAg
ICAgZmlyc3RMaW5lQmFzZWxpbmUgPSBtYXgoKGZsb2F0KWZpcnN0TGluZUJhc2VsaW5lLCBjZWxs
LT5sb2dpY2FsVG9wKCkgKyBjZWxsLT5wYWRkaW5nQmVmb3JlKCkgKyBjZWxsLT5ib3JkZXJCZWZv
cmUoKSArIGNlbGwtPmNvbnRlbnRMb2dpY2FsSGVpZ2h0KCkpOwogICAgIH0KIAogICAgIHJldHVy
biBmaXJzdExpbmVCYXNlbGluZTsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCit2b2lk
IFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZs
b2F0UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIC8vIHB1dCB0aGlzIGJhY2sgaW4gd2hlbiBh
bGwgbGF5b3V0IHRlc3RzIGNhbiBoYW5kbGUgaXQKICAgICAvLyBBU1NFUlQoIW5lZWRzTGF5b3V0
KCkpOwpAQCAtODk5LDcgKzg5OSw3IEBACiAgICAgaWYgKCF0b3RhbFJvd3MgfHwgIXRvdGFsQ29s
cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9
IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKKyAgICBGbG9hdFBvaW50IGFkanVzdGVkUGFpbnRP
ZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CiAKICAgICBQYWludFBoYXNlIHBoYXNl
ID0gcGFpbnRJbmZvLnBoYXNlOwogICAgIGJvb2wgcHVzaGVkQ2xpcCA9IHB1c2hDb250ZW50c0Ns
aXAocGFpbnRJbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKQEAgLTkxMyw5ICs5MTMsOSBAQAog
ICAgIHJldHVybiBlbGVtMS0+cm93KCkgPCBlbGVtMi0+cm93KCk7CiB9CiAKLXZvaWQgUmVuZGVy
VGFibGVTZWN0aW9uOjpwYWludENlbGwoUmVuZGVyVGFibGVDZWxsKiBjZWxsLCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQordm9pZCBSZW5kZXJUYWJs
ZVNlY3Rpb246OnBhaW50Q2VsbChSZW5kZXJUYWJsZUNlbGwqIGNlbGwsIFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiBwYWludE9mZnNldCkKIHsKLSAgICBJbnRQb2ludCBj
ZWxsUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGUoY2VsbCwgcGFpbnRPZmZzZXQsIFBhcmVudFRv
Q2hpbGRGbGlwcGluZ0FkanVzdG1lbnQpOworICAgIEZsb2F0UG9pbnQgY2VsbFBvaW50ID0gZmxp
cEZvcldyaXRpbmdNb2RlKGNlbGwsIHBhaW50T2Zmc2V0LCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdB
ZGp1c3RtZW50KTsKICAgICBQYWludFBoYXNlIHBhaW50UGhhc2UgPSBwYWludEluZm8ucGhhc2U7
CiAgICAgUmVuZGVyVGFibGVSb3cqIHJvdyA9IHRvUmVuZGVyVGFibGVSb3coY2VsbC0+cGFyZW50
KCkpOwogCkBAIC05NDcsNyArOTQ3LDcgQEAKICAgICAgICAgY2VsbC0+cGFpbnQocGFpbnRJbmZv
LCBjZWxsUG9pbnQpOwogfQogCi12b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3Qo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKK3ZvaWQg
UmVuZGVyVGFibGVTZWN0aW9uOjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgRmxvYXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgLy8gQ2hlY2sgd2hpY2ggcm93cyBh
bmQgY29scyBhcmUgdmlzaWJsZSBhbmQgb25seSBwYWludCB0aGVzZS4KICAgICAvLyBGSVhNRTog
Q291bGQgdXNlIGEgYmluYXJ5IHNlYXJjaCBoZXJlLgpAQCAtOTYwLDcgKzk2MCw3IEBACiAgICAg
dW5zaWduZWQgc3RhcnRyb3cgPSAwOwogICAgIHVuc2lnbmVkIGVuZHJvdyA9IHRvdGFsUm93czsK
IAotICAgIEludFJlY3QgbG9jYWxSZXBhaW50UmVjdCA9IHBhaW50SW5mby5yZWN0OworICAgIEZs
b2F0UmVjdCBsb2NhbFJlcGFpbnRSZWN0ID0gcGFpbnRJbmZvLnJlY3Q7CiAgICAgbG9jYWxSZXBh
aW50UmVjdC5tb3ZlQnkoLXBhaW50T2Zmc2V0KTsKICAgICBpZiAoc3R5bGUoKS0+aXNGbGlwcGVk
QmxvY2tzV3JpdGluZ01vZGUoKSkgewogICAgICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSkKQEAgLTk5NSw3ICs5OTUsNyBAQAogICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgUlRMLgogICAgIGlmICghbV9oYXNPdmVyZmxvd2luZ0NlbGwgJiYgc3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpKSB7CiAgICAgICAgIGludCBzdGFydCA9IChzdHlsZSgpLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpID8gbG9jYWxSZXBhaW50UmVjdC54KCkgOiBsb2NhbFJlcGFp
bnRSZWN0LnkoKSkgLSBvczsKLSAgICAgICAgVmVjdG9yPGludD4mIGNvbHVtblBvcyA9IHRhYmxl
KCktPmNvbHVtblBvc2l0aW9ucygpOworICAgICAgICBWZWN0b3I8ZmxvYXQ+JiBjb2x1bW5Qb3Mg
PSB0YWJsZSgpLT5jb2x1bW5Qb3NpdGlvbnMoKTsKICAgICAgICAgc3RhcnRjb2wgPSBzdGQ6Omxv
d2VyX2JvdW5kKGNvbHVtblBvcy5iZWdpbigpLCBjb2x1bW5Qb3MuZW5kKCksIHN0YXJ0KSAtIGNv
bHVtblBvcy5iZWdpbigpOwogICAgICAgICBpZiAoKHN0YXJ0Y29sID09IGNvbHVtblBvcy5zaXpl
KCkpIHx8IChzdGFydGNvbCA+IDAgJiYgKGNvbHVtblBvc1tzdGFydGNvbF0gPiBzdGFydCkpKQog
ICAgICAgICAgICAgLS1zdGFydGNvbDsKQEAgLTExNDksNyArMTE0OSw3IEBACiAKICAgICAvLyBU
YWJsZSBzZWN0aW9ucyBjYW5ub3QgZXZlciBiZSBoaXQgdGVzdGVkLiAgRWZmZWN0aXZlbHkgdGhl
eSBkbyBub3QgZXhpc3QuCiAgICAgLy8gSnVzdCBmb3J3YXJkIHRvIG91ciBjaGlsZHJlbiBhbHdh
eXMuCi0gICAgSW50UG9pbnQgYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsg
bG9jYXRpb24oKTsKKyAgICBJbnRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gcm91bmRlZEludFBv
aW50KGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKSk7CiAKICAgICBpZiAoaGFzT3ZlcmZs
b3dDbGlwKCkgJiYgIW92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRMb2NhdGlvbikuaW50ZXJzZWN0
cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTE4Nyw3ICsxMTg3LDcgQEAKICAgICAvLyBOb3cgc2V0IGhpdFJvdyB0byB0
aGUgaW5kZXggb2YgdGhlIGhpdCByb3csIG9yIDAuCiAgICAgdW5zaWduZWQgaGl0Um93ID0gbmV4
dFJvdyA+IDAgPyBuZXh0Um93IC0gMSA6IDA7CiAKLSAgICBWZWN0b3I8aW50PiYgY29sdW1uUG9z
ID0gdGFibGUoKS0+Y29sdW1uUG9zaXRpb25zKCk7CisgICAgVmVjdG9yPGZsb2F0PiYgY29sdW1u
UG9zID0gdGFibGUoKS0+Y29sdW1uUG9zaXRpb25zKCk7CiAgICAgaW50IG9mZnNldEluUm93RGly
ZWN0aW9uID0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvY2F0aW9uLngo
KSA6IGxvY2F0aW9uLnkoKTsKICAgICBpZiAoIXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSkKICAgICAgICAgb2Zmc2V0SW5Sb3dEaXJlY3Rpb24gPSBjb2x1bW5Qb3NbY29sdW1uUG9z
LnNpemUoKSAtIDFdIC0gb2Zmc2V0SW5Sb3dEaXJlY3Rpb247CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcAkocmV2aXNpb24gODg0OTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjksOCArNjksOCBAQAogICAgICAgICAgICAgICAgIGlmIChjZWxsLT5jb2xTcGFuKCkg
PT0gMSkgewogICAgICAgICAgICAgICAgICAgICAvLyBBIGNlbGwgb3JpZ2luYXRlcyBpbiB0aGlz
IGNvbHVtbi4gIEVuc3VyZSB3ZSBoYXZlCiAgICAgICAgICAgICAgICAgICAgIC8vIGEgbWluL21h
eCB3aWR0aCBvZiBhdCBsZWFzdCAxcHggZm9yIHRoaXMgY29sdW1uIG5vdy4KLSAgICAgICAgICAg
ICAgICAgICAgY29sdW1uTGF5b3V0Lm1pbkxvZ2ljYWxXaWR0aCA9IG1heChjb2x1bW5MYXlvdXQu
bWluTG9naWNhbFdpZHRoLCBjZWxsSGFzQ29udGVudCA/IDEgOiAwKTsKLSAgICAgICAgICAgICAg
ICAgICAgY29sdW1uTGF5b3V0Lm1heExvZ2ljYWxXaWR0aCA9IG1heChjb2x1bW5MYXlvdXQubWF4
TG9naWNhbFdpZHRoLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uTGF5b3V0Lm1pbkxv
Z2ljYWxXaWR0aCA9IG1heChjb2x1bW5MYXlvdXQubWluTG9naWNhbFdpZHRoLCBjZWxsSGFzQ29u
dGVudCA/IDEuMGYgOiAwLjBmKTsKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uTGF5b3V0Lm1h
eExvZ2ljYWxXaWR0aCA9IG1heChjb2x1bW5MYXlvdXQubWF4TG9naWNhbFdpZHRoLCAxLjBmKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwtPnByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0
eSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC0+Y29tcHV0ZVByZWZlcnJlZExvZ2lj
YWxXaWR0aHMoKTsKICAgICAgICAgICAgICAgICAgICAgY29sdW1uTGF5b3V0Lm1pbkxvZ2ljYWxX
aWR0aCA9IG1heChjZWxsLT5taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSwgY29sdW1uTGF5b3V0
Lm1pbkxvZ2ljYWxXaWR0aCk7CkBAIC0xMTksOCArMTE5LDggQEAKICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKCFlZmZDb2wgfHwgc2VjdGlvbi0+cHJpbWFyeUNlbGxBdChpLCBlZmZDb2wgLSAx
KSAhPSBjZWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgc3Bhbm5pbmcgY2VsbCBv
cmlnaW5hdGVzIGluIHRoaXMgY29sdW1uLiAgRW5zdXJlIHdlIGhhdmUKICAgICAgICAgICAgICAg
ICAgICAgLy8gYSBtaW4vbWF4IHdpZHRoIG9mIGF0IGxlYXN0IDFweCBmb3IgdGhpcyBjb2x1bW4g
bm93LgotICAgICAgICAgICAgICAgICAgICBjb2x1bW5MYXlvdXQubWluTG9naWNhbFdpZHRoID0g
bWF4KGNvbHVtbkxheW91dC5taW5Mb2dpY2FsV2lkdGgsIGNlbGxIYXNDb250ZW50ID8gMSA6IDAp
OwotICAgICAgICAgICAgICAgICAgICBjb2x1bW5MYXlvdXQubWF4TG9naWNhbFdpZHRoID0gbWF4
KGNvbHVtbkxheW91dC5tYXhMb2dpY2FsV2lkdGgsIDEpOworICAgICAgICAgICAgICAgICAgICBj
b2x1bW5MYXlvdXQubWluTG9naWNhbFdpZHRoID0gbWF4KGNvbHVtbkxheW91dC5taW5Mb2dpY2Fs
V2lkdGgsIGNlbGxIYXNDb250ZW50ID8gMS4wZiA6IDAuMGYpOworICAgICAgICAgICAgICAgICAg
ICBjb2x1bW5MYXlvdXQubWF4TG9naWNhbFdpZHRoID0gbWF4KGNvbHVtbkxheW91dC5tYXhMb2dp
Y2FsV2lkdGgsIDEuMGYpOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnRTcGFuQ2VsbChjZWxs
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0yNzUsNyArMjc1LDcgQEAK
ICAgVGhpcyBtZXRob2QgdGFrZXMgY2FyZSBvZiBjb2xzcGFucy4KICAgZWZmV2lkdGggaXMgdGhl
IHNhbWUgYXMgd2lkdGggZm9yIGNlbGxzIHdpdGhvdXQgY29sc3BhbnMuIElmIHdlIGhhdmUgY29s
c3BhbnMsIHRoZXkgZ2V0IG1vZGlmaWVkLgogICovCi1pbnQgQXV0b1RhYmxlTGF5b3V0OjpjYWxj
RWZmZWN0aXZlTG9naWNhbFdpZHRoKCkKK2Zsb2F0IEF1dG9UYWJsZUxheW91dDo6Y2FsY0VmZmVj
dGl2ZUxvZ2ljYWxXaWR0aCgpCiB7CiAgICAgZmxvYXQgbWF4TG9naWNhbFdpZHRoID0gMDsKIApA
QCAtMzAxLDE2ICszMDEsMTYgQEAKIAogICAgICAgICBpbnQgZWZmQ29sID0gbV90YWJsZS0+Y29s
VG9FZmZDb2woY2VsbC0+Y29sKCkpOwogICAgICAgICBzaXplX3QgbGFzdENvbCA9IGVmZkNvbDsK
LSAgICAgICAgaW50IGNlbGxNaW5Mb2dpY2FsV2lkdGggPSBjZWxsLT5taW5QcmVmZXJyZWRMb2dp
Y2FsV2lkdGgoKSArIHNwYWNpbmdJblJvd0RpcmVjdGlvbjsKKyAgICAgICAgZmxvYXQgY2VsbE1p
bkxvZ2ljYWxXaWR0aCA9IGNlbGwtPm1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpICsgc3BhY2lu
Z0luUm93RGlyZWN0aW9uOwogICAgICAgICBmbG9hdCBjZWxsTWF4TG9naWNhbFdpZHRoID0gY2Vs
bC0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgKyBzcGFjaW5nSW5Sb3dEaXJlY3Rpb247CiAg
ICAgICAgIGZsb2F0IHRvdGFsUGVyY2VudCA9IDA7Ci0gICAgICAgIGludCBzcGFuTWluTG9naWNh
bFdpZHRoID0gMDsKKyAgICAgICAgZmxvYXQgc3Bhbk1pbkxvZ2ljYWxXaWR0aCA9IDA7CiAgICAg
ICAgIGZsb2F0IHNwYW5NYXhMb2dpY2FsV2lkdGggPSAwOwogICAgICAgICBib29sIGFsbENvbHNB
cmVQZXJjZW50ID0gdHJ1ZTsKICAgICAgICAgYm9vbCBhbGxDb2xzQXJlRml4ZWQgPSB0cnVlOwog
ICAgICAgICBib29sIGhhdmVBdXRvID0gZmFsc2U7CiAgICAgICAgIGJvb2wgc3Bhbkhhc0VtcHR5
Q2VsbHNPbmx5ID0gdHJ1ZTsKLSAgICAgICAgaW50IGZpeGVkV2lkdGggPSAwOworICAgICAgICBm
bG9hdCBmaXhlZFdpZHRoID0gMDsKICAgICAgICAgd2hpbGUgKGxhc3RDb2wgPCBuRWZmQ29scyAm
JiBzcGFuID4gMCkgewogICAgICAgICAgICAgTGF5b3V0JiBjb2x1bW5MYXlvdXQgPSBtX2xheW91
dFN0cnVjdFtsYXN0Q29sXTsKICAgICAgICAgICAgIHN3aXRjaCAoY29sdW1uTGF5b3V0LmxvZ2lj
YWxXaWR0aC50eXBlKCkpIHsKQEAgLTM4OSw3ICszODksNyBAQAogICAgICAgICBpZiAoY2VsbE1p
bkxvZ2ljYWxXaWR0aCA+IHNwYW5NaW5Mb2dpY2FsV2lkdGgpIHsKICAgICAgICAgICAgIGlmIChh
bGxDb2xzQXJlRml4ZWQpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBvcyA9IGVm
ZkNvbDsgZml4ZWRXaWR0aCA+IDAgJiYgcG9zIDwgbGFzdENvbDsgKytwb3MpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaW50IGNlbGxMb2dpY2FsV2lkdGggPSBtYXgobV9sYXlvdXRTdHJ1Y3RbcG9z
XS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGgsIGNlbGxNaW5Mb2dpY2FsV2lkdGggKiBtX2xheW91
dFN0cnVjdFtwb3NdLmxvZ2ljYWxXaWR0aC52YWx1ZSgpIC8gZml4ZWRXaWR0aCk7CisgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IGNlbGxMb2dpY2FsV2lkdGggPSBtYXgobV9sYXlvdXRTdHJ1Y3Rb
cG9zXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGgsIGNlbGxNaW5Mb2dpY2FsV2lkdGggKiBtX2xh
eW91dFN0cnVjdFtwb3NdLmxvZ2ljYWxXaWR0aC5jYWxjRmxvYXRWYWx1ZSgwKSAvIGZpeGVkV2lk
dGgpOwogICAgICAgICAgICAgICAgICAgICBmaXhlZFdpZHRoIC09IG1fbGF5b3V0U3RydWN0W3Bv
c10ubG9naWNhbFdpZHRoLnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgIGNlbGxNaW5Mb2dp
Y2FsV2lkdGggLT0gY2VsbExvZ2ljYWxXaWR0aDsKICAgICAgICAgICAgICAgICAgICAgbV9sYXlv
dXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGggPSBjZWxsTG9naWNhbFdpZHRo
OwpAQCAtNDAxLDcgKzQwMSw3IEBACiAgICAgICAgICAgICAgICAgLy8gR2l2ZSBtaW4gdG8gdmFy
aWFibGUgZmlyc3QsIHRvIGZpeGVkIHNlY29uZCwgYW5kIHRvIG90aGVycyB0aGlyZC4KICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBvcyA9IGVmZkNvbDsgcmVtYWluaW5nTWF4TG9naWNh
bFdpZHRoID49IDAgJiYgcG9zIDwgbGFzdENvbDsgKytwb3MpIHsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fbGF5b3V0U3RydWN0W3Bvc10ubG9naWNhbFdpZHRoLmlzRml4ZWQoKSAmJiBoYXZl
QXV0byAmJiBmaXhlZFdpZHRoIDw9IGNlbGxNaW5Mb2dpY2FsV2lkdGgpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBjb2xNaW5Mb2dpY2FsV2lkdGggPSBtYXgobV9sYXlvdXRTdHJ1Y3Rb
cG9zXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGgsIG1fbGF5b3V0U3RydWN0W3Bvc10ubG9naWNh
bFdpZHRoLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgY29sTWluTG9n
aWNhbFdpZHRoID0gbWF4KG1fbGF5b3V0U3RydWN0W3Bvc10uZWZmZWN0aXZlTWluTG9naWNhbFdp
ZHRoLCBtX2xheW91dFN0cnVjdFtwb3NdLmxvZ2ljYWxXaWR0aC5jYWxjRmxvYXRWYWx1ZSgwKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZFdpZHRoIC09IG1fbGF5b3V0U3RydWN0W3Bv
c10ubG9naWNhbFdpZHRoLnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5p
bmdNaW5Mb2dpY2FsV2lkdGggLT0gbV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNaW5Mb2dp
Y2FsV2lkdGg7CiAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdNYXhMb2dpY2FsV2lk
dGggLT0gbV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNYXhMb2dpY2FsV2lkdGg7CkBAIC00
MTIsNyArNDEyLDcgQEAKIAogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgcG9zID0gZWZm
Q29sOyByZW1haW5pbmdNYXhMb2dpY2FsV2lkdGggPj0gMCAmJiBwb3MgPCBsYXN0Q29sICYmIHJl
bWFpbmluZ01pbkxvZ2ljYWxXaWR0aCA8IGNlbGxNaW5Mb2dpY2FsV2lkdGg7ICsrcG9zKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghKG1fbGF5b3V0U3RydWN0W3Bvc10ubG9naWNhbFdpZHRo
LmlzRml4ZWQoKSAmJiBoYXZlQXV0byAmJiBmaXhlZFdpZHRoIDw9IGNlbGxNaW5Mb2dpY2FsV2lk
dGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sTWluTG9naWNhbFdpZHRoID0g
bWF4KG1fbGF5b3V0U3RydWN0W3Bvc10uZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoLCBzdGF0aWNf
Y2FzdDxpbnQ+KHJlbWFpbmluZ01heExvZ2ljYWxXaWR0aCA/IGNlbGxNaW5Mb2dpY2FsV2lkdGgg
KiBzdGF0aWNfY2FzdDxmbG9hdD4obV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNYXhMb2dp
Y2FsV2lkdGgpIC8gcmVtYWluaW5nTWF4TG9naWNhbFdpZHRoIDogY2VsbE1pbkxvZ2ljYWxXaWR0
aCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgY29sTWluTG9naWNhbFdpZHRoID0g
bWF4KG1fbGF5b3V0U3RydWN0W3Bvc10uZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoLCAocmVtYWlu
aW5nTWF4TG9naWNhbFdpZHRoID8gY2VsbE1pbkxvZ2ljYWxXaWR0aCAqIChtX2xheW91dFN0cnVj
dFtwb3NdLmVmZmVjdGl2ZU1heExvZ2ljYWxXaWR0aCkgLyByZW1haW5pbmdNYXhMb2dpY2FsV2lk
dGggOiBjZWxsTWluTG9naWNhbFdpZHRoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb2xN
aW5Mb2dpY2FsV2lkdGggPSBtaW4obV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNaW5Mb2dp
Y2FsV2lkdGggKyAoY2VsbE1pbkxvZ2ljYWxXaWR0aCAtIHJlbWFpbmluZ01pbkxvZ2ljYWxXaWR0
aCksIGNvbE1pbkxvZ2ljYWxXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5p
bmdNYXhMb2dpY2FsV2lkdGggLT0gbV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNYXhMb2dp
Y2FsV2lkdGg7CiAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdNaW5Mb2dpY2FsV2lk
dGggLT0gbV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGg7CkBAIC00
MjUsNyArNDI1LDcgQEAKICAgICAgICAgaWYgKCFjZWxsTG9naWNhbFdpZHRoLmlzUGVyY2VudCgp
KSB7CiAgICAgICAgICAgICBpZiAoY2VsbE1heExvZ2ljYWxXaWR0aCA+IHNwYW5NYXhMb2dpY2Fs
V2lkdGgpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBvcyA9IGVmZkNvbDsgc3Bh
bk1heExvZ2ljYWxXaWR0aCA+PSAwICYmIHBvcyA8IGxhc3RDb2w7ICsrcG9zKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGludCBjb2xNYXhMb2dpY2FsV2lkdGggPSBtYXgobV9sYXlvdXRTdHJ1Y3Rb
cG9zXS5lZmZlY3RpdmVNYXhMb2dpY2FsV2lkdGgsIHN0YXRpY19jYXN0PGludD4oc3Bhbk1heExv
Z2ljYWxXaWR0aCA/IGNlbGxNYXhMb2dpY2FsV2lkdGggKiBzdGF0aWNfY2FzdDxmbG9hdD4obV9s
YXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVNYXhMb2dpY2FsV2lkdGgpIC8gc3Bhbk1heExvZ2lj
YWxXaWR0aCA6IGNlbGxNYXhMb2dpY2FsV2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW50
IGNvbE1heExvZ2ljYWxXaWR0aCA9IG1heChtX2xheW91dFN0cnVjdFtwb3NdLmVmZmVjdGl2ZU1h
eExvZ2ljYWxXaWR0aCwgKHNwYW5NYXhMb2dpY2FsV2lkdGggPyBjZWxsTWF4TG9naWNhbFdpZHRo
ICogKG1fbGF5b3V0U3RydWN0W3Bvc10uZWZmZWN0aXZlTWF4TG9naWNhbFdpZHRoKSAvIHNwYW5N
YXhMb2dpY2FsV2lkdGggOiBjZWxsTWF4TG9naWNhbFdpZHRoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIHNwYW5NYXhMb2dpY2FsV2lkdGggLT0gbV9sYXlvdXRTdHJ1Y3RbcG9zXS5lZmZlY3RpdmVN
YXhMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICAgICAgICAgIGNlbGxNYXhMb2dpY2FsV2lkdGgg
LT0gY29sTWF4TG9naWNhbFdpZHRoOwogICAgICAgICAgICAgICAgICAgICBtX2xheW91dFN0cnVj
dFtwb3NdLmVmZmVjdGl2ZU1heExvZ2ljYWxXaWR0aCA9IGNvbE1heExvZ2ljYWxXaWR0aDsKQEAg
LTUzNiwyMSArNTM2LDIxIEBACiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbkVmZkNv
bHM7ICsraSkgewogICAgICAgICAgICAgTGVuZ3RoJiBsb2dpY2FsV2lkdGggPSBtX2xheW91dFN0
cnVjdFtpXS5lZmZlY3RpdmVMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICBpZiAobG9naWNhbFdp
ZHRoLmlzUGVyY2VudCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IGNlbGxMb2dpY2FsV2lkdGgg
PSBtYXgobV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoLCBsb2dpY2Fs
V2lkdGguY2FsY01pblZhbHVlKHRhYmxlTG9naWNhbFdpZHRoKSk7CisgICAgICAgICAgICAgICAg
ZmxvYXQgY2VsbExvZ2ljYWxXaWR0aCA9IG1heChtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVN
aW5Mb2dpY2FsV2lkdGgsIGxvZ2ljYWxXaWR0aC5jYWxjTWluVmFsdWUodGFibGVMb2dpY2FsV2lk
dGgpKTsKICAgICAgICAgICAgICAgICBhdmFpbGFibGUgKz0gbV9sYXlvdXRTdHJ1Y3RbaV0uY29t
cHV0ZWRMb2dpY2FsV2lkdGggLSBjZWxsTG9naWNhbFdpZHRoOwogICAgICAgICAgICAgICAgIG1f
bGF5b3V0U3RydWN0W2ldLmNvbXB1dGVkTG9naWNhbFdpZHRoID0gY2VsbExvZ2ljYWxXaWR0aDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAodG90YWxQZXJjZW50ID4gMTAw
KSB7CiAgICAgICAgICAgICAvLyByZW1vdmUgb3ZlcmFsbG9jYXRlZCBzcGFjZSBmcm9tIHRoZSBs
YXN0IGNvbHVtbnMKLSAgICAgICAgICAgIGludCBleGNlc3MgPSB0YWJsZUxvZ2ljYWxXaWR0aCAq
ICh0b3RhbFBlcmNlbnQgLSAxMDApIC8gMTAwOworICAgICAgICAgICAgZmxvYXQgZXhjZXNzID0g
dGFibGVMb2dpY2FsV2lkdGggKiAodG90YWxQZXJjZW50IC0gMTAwKSAvIDEwMDsKICAgICAgICAg
ICAgIGZvciAoaW50IGkgPSBuRWZmQ29scyAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKG1fbGF5b3V0U3RydWN0W2ldLmVmZmVjdGl2ZUxvZ2ljYWxXaWR0aC5pc1BlcmNl
bnQoKSkgewotICAgICAgICAgICAgICAgICAgICBpbnQgY2VsbExvZ2ljYWxXaWR0aCA9IG1fbGF5
b3V0U3RydWN0W2ldLmNvbXB1dGVkTG9naWNhbFdpZHRoOwotICAgICAgICAgICAgICAgICAgICBp
bnQgcmVkdWN0aW9uID0gbWluKGNlbGxMb2dpY2FsV2lkdGgsICBleGNlc3MpOworICAgICAgICAg
ICAgICAgICAgICBmbG9hdCBjZWxsTG9naWNhbFdpZHRoID0gbV9sYXlvdXRTdHJ1Y3RbaV0uY29t
cHV0ZWRMb2dpY2FsV2lkdGg7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IHJlZHVjdGlvbiA9
IG1pbihjZWxsTG9naWNhbFdpZHRoLCAgZXhjZXNzKTsKICAgICAgICAgICAgICAgICAgICAgLy8g
dGhlIGxpbmVzIGJlbG93IG1pZ2h0IGxvb2sgaW5jb25zaXN0ZW50LCBidXQgdGhhdCdzIHRoZSB3
YXkgaXQncyBoYW5kbGVkIGluIG1vemlsbGEKICAgICAgICAgICAgICAgICAgICAgZXhjZXNzIC09
IHJlZHVjdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgaW50IG5ld0xvZ2ljYWxXaWR0aCA9IG1h
eChtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGgsIGNlbGxMb2dpY2Fs
V2lkdGggLSByZWR1Y3Rpb24pOworICAgICAgICAgICAgICAgICAgICBmbG9hdCBuZXdMb2dpY2Fs
V2lkdGggPSBtYXgobV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoLCBj
ZWxsTG9naWNhbFdpZHRoIC0gcmVkdWN0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgYXZhaWxh
YmxlICs9IGNlbGxMb2dpY2FsV2lkdGggLSBuZXdMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICAg
ICAgICAgIG1fbGF5b3V0U3RydWN0W2ldLmNvbXB1dGVkTG9naWNhbFdpZHRoID0gbmV3TG9naWNh
bFdpZHRoOwogICAgICAgICAgICAgICAgIH0KQEAgLTU2Miw3ICs1NjIsNyBAQAogICAgIGlmIChh
dmFpbGFibGUgPiAwKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbkVmZkNvbHM7
ICsraSkgewogICAgICAgICAgICAgTGVuZ3RoJiBsb2dpY2FsV2lkdGggPSBtX2xheW91dFN0cnVj
dFtpXS5lZmZlY3RpdmVMb2dpY2FsV2lkdGg7Ci0gICAgICAgICAgICBpZiAobG9naWNhbFdpZHRo
LmlzRml4ZWQoKSAmJiBsb2dpY2FsV2lkdGgudmFsdWUoKSA+IG1fbGF5b3V0U3RydWN0W2ldLmNv
bXB1dGVkTG9naWNhbFdpZHRoKSB7CisgICAgICAgICAgICBpZiAobG9naWNhbFdpZHRoLmlzRml4
ZWQoKSAmJiBsb2dpY2FsV2lkdGguY2FsY0Zsb2F0VmFsdWUoMCkgPiBtX2xheW91dFN0cnVjdFtp
XS5jb21wdXRlZExvZ2ljYWxXaWR0aCkgewogICAgICAgICAgICAgICAgIGF2YWlsYWJsZSArPSBt
X2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0aCAtIGxvZ2ljYWxXaWR0aC52YWx1
ZSgpOwogICAgICAgICAgICAgICAgIG1fbGF5b3V0U3RydWN0W2ldLmNvbXB1dGVkTG9naWNhbFdp
ZHRoID0gbG9naWNhbFdpZHRoLnZhbHVlKCk7CiAgICAgICAgICAgICB9CkBAIC01NzUsNyArNTc1
LDcgQEAKICAgICAgICAgICAgIExlbmd0aCYgbG9naWNhbFdpZHRoID0gbV9sYXlvdXRTdHJ1Y3Rb
aV0uZWZmZWN0aXZlTG9naWNhbFdpZHRoOwogICAgICAgICAgICAgaWYgKGxvZ2ljYWxXaWR0aC5p
c1JlbGF0aXZlKCkgJiYgbG9naWNhbFdpZHRoLnZhbHVlKCkgIT0gMCkgewogICAgICAgICAgICAg
ICAgIC8vIHdpZHRoPTAqIGdldHMgZWZmTWluV2lkdGguCi0gICAgICAgICAgICAgICAgaW50IGNl
bGxMb2dpY2FsV2lkdGggPSBsb2dpY2FsV2lkdGgudmFsdWUoKSAqIHRhYmxlTG9naWNhbFdpZHRo
IC8gdG90YWxSZWxhdGl2ZTsKKyAgICAgICAgICAgICAgICBmbG9hdCBjZWxsTG9naWNhbFdpZHRo
ID0gbG9naWNhbFdpZHRoLmNhbGNGbG9hdFZhbHVlKDApICogdGFibGVMb2dpY2FsV2lkdGggLyB0
b3RhbFJlbGF0aXZlOwogICAgICAgICAgICAgICAgIGF2YWlsYWJsZSArPSBtX2xheW91dFN0cnVj
dFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0aCAtIGNlbGxMb2dpY2FsV2lkdGg7CiAgICAgICAgICAg
ICAgICAgbV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGggPSBjZWxsTG9naWNh
bFdpZHRoOwogICAgICAgICAgICAgfQpAQCAtNTg4LDcgKzU4OCw3IEBACiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbkVmZkNvbHM7ICsraSkgewogICAgICAgICAgICAgTGVuZ3RoJiBs
b2dpY2FsV2lkdGggPSBtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVMb2dpY2FsV2lkdGg7CiAg
ICAgICAgICAgICBpZiAobG9naWNhbFdpZHRoLmlzQXV0bygpICYmIHRvdGFsQXV0byAmJiAhbV9s
YXlvdXRTdHJ1Y3RbaV0uZW1wdHlDZWxsc09ubHkpIHsKLSAgICAgICAgICAgICAgICBpbnQgY2Vs
bExvZ2ljYWxXaWR0aCA9IG1heChtX2xheW91dFN0cnVjdFtpXS5jb21wdXRlZExvZ2ljYWxXaWR0
aCwgc3RhdGljX2Nhc3Q8aW50PihhdmFpbGFibGUgKiBzdGF0aWNfY2FzdDxmbG9hdD4obV9sYXlv
dXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTWF4TG9naWNhbFdpZHRoKSAvIHRvdGFsQXV0bykpOworICAg
ICAgICAgICAgICAgIGZsb2F0IGNlbGxMb2dpY2FsV2lkdGggPSBtYXgobV9sYXlvdXRTdHJ1Y3Rb
aV0uY29tcHV0ZWRMb2dpY2FsV2lkdGgsIChhdmFpbGFibGUgKiAobV9sYXlvdXRTdHJ1Y3RbaV0u
ZWZmZWN0aXZlTWF4TG9naWNhbFdpZHRoKSAvIHRvdGFsQXV0bykpOwogICAgICAgICAgICAgICAg
IGF2YWlsYWJsZSAtPSBjZWxsTG9naWNhbFdpZHRoOwogICAgICAgICAgICAgICAgIHRvdGFsQXV0
byAtPSBtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVNYXhMb2dpY2FsV2lkdGg7CiAgICAgICAg
ICAgICAgICAgbV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRMb2dpY2FsV2lkdGggPSBjZWxsTG9n
aWNhbFdpZHRoOwpAQCAtNjAxLDcgKzYwMSw3IEBACiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbkVmZkNvbHM7ICsraSkgewogICAgICAgICAgICAgTGVuZ3RoJiBsb2dpY2FsV2lkdGgg
PSBtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVMb2dpY2FsV2lkdGg7CiAgICAgICAgICAgICBp
ZiAobG9naWNhbFdpZHRoLmlzRml4ZWQoKSkgewotICAgICAgICAgICAgICAgIGludCBjZWxsTG9n
aWNhbFdpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihhdmFpbGFibGUgKiBzdGF0aWNfY2FzdDxmbG9h
dD4obV9sYXlvdXRTdHJ1Y3RbaV0uZWZmZWN0aXZlTWF4TG9naWNhbFdpZHRoKSAvIHRvdGFsRml4
ZWQpOworICAgICAgICAgICAgICAgIGludCBjZWxsTG9naWNhbFdpZHRoID0gKGF2YWlsYWJsZSAq
IChtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVNYXhMb2dpY2FsV2lkdGgpIC8gdG90YWxGaXhl
ZCk7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIC09IGNlbGxMb2dpY2FsV2lkdGg7CiAgICAg
ICAgICAgICAgICAgdG90YWxGaXhlZCAtPSBtX2xheW91dFN0cnVjdFtpXS5lZmZlY3RpdmVNYXhM
b2dpY2FsV2lkdGg7CiAgICAgICAgICAgICAgICAgbV9sYXlvdXRTdHJ1Y3RbaV0uY29tcHV0ZWRM
b2dpY2FsV2lkdGggKz0gY2VsbExvZ2ljYWxXaWR0aDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkocmV2aXNpb24gODg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzUsNyArMTM1LDcgQEAKICAgICByZXBhaW50KCk7CiB9CiAKLXZv
aWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCit2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpwYWlu
dChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7
CiAgICAgaWYgKHBsdWdpbkNyYXNoZWRPcldhc01pc3NpbmcoKSkgewogICAgICAgICBSZW5kZXJS
ZXBsYWNlZDo6cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CkBAIC0xNDUsNyArMTQ1LDcg
QEAKICAgICBSZW5kZXJQYXJ0OjpwYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKIH0KIAot
dm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQordm9pZCBSZW5kZXJFbWJlZGRlZE9i
amVjdDo6cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQb2lu
dCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaWYgKCFwbHVnaW5DcmFzaGVkT3JXYXNNaXNzaW5nKCkp
CiAgICAgICAgIHJldHVybjsKQEAgLTE4MCw3ICsxODAsNyBAQAogICAgIGNvbnRleHQtPmRyYXdC
aWRpVGV4dChmb250LCBydW4sIEZsb2F0UG9pbnQobGFiZWxYLCBsYWJlbFkpKTsKIH0KIAotYm9v
bCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6Z2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkoY29uc3Qg
SW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBGbG9hdFJlY3QmIGNvbnRlbnRSZWN0LCBQYXRo
JiBwYXRoLCBGbG9hdFJlY3QmIHJlcGxhY2VtZW50VGV4dFJlY3QsIEZvbnQmIGZvbnQsIFRleHRS
dW4mIHJ1biwgZmxvYXQmIHRleHRXaWR0aCkKK2Jvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6Omdl
dFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KGNvbnN0IEZsb2F0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBGbG9hdFJlY3QmIGNvbnRlbnRSZWN0LCBQYXRoJiBwYXRoLCBGbG9hdFJlY3QmIHJlcGxh
Y2VtZW50VGV4dFJlY3QsIEZvbnQmIGZvbnQsIFRleHRSdW4mIHJ1biwgZmxvYXQmIHRleHRXaWR0
aCkKIHsKICAgICBjb250ZW50UmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7CiAgICAgY29udGVudFJl
Y3QubW92ZUJ5KGFjY3VtdWxhdGVkT2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UcmFuc2Zvcm1TdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UcmFuc2Zvcm1TdGF0ZS5oCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMiArNTQs
MTIgQEAKICAgICAgICAgICAgIG1fbGFzdFBsYW5hclF1YWQgPSAqcXVhZDsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCBtb3ZlKGNvbnN0IEludFNpemUmIHMsIFRyYW5zZm9ybUFjY3VtdWxhdGlvbiBh
Y2N1bXVsYXRlID0gRmxhdHRlblRyYW5zZm9ybSkKKyAgICB2b2lkIG1vdmUoY29uc3QgRmxvYXRT
aXplJiBzLCBUcmFuc2Zvcm1BY2N1bXVsYXRpb24gYWNjdW11bGF0ZSA9IEZsYXR0ZW5UcmFuc2Zv
cm0pCiAgICAgewogICAgICAgICBtb3ZlKHMud2lkdGgoKSwgcy5oZWlnaHQoKSwgYWNjdW11bGF0
ZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgbW92ZShpbnQgeCwgaW50IHksIFRyYW5zZm9ybUFj
Y3VtdWxhdGlvbiA9IEZsYXR0ZW5UcmFuc2Zvcm0pOworICAgIHZvaWQgbW92ZShmbG9hdCB4LCBm
bG9hdCB5LCBUcmFuc2Zvcm1BY2N1bXVsYXRpb24gPSBGbGF0dGVuVHJhbnNmb3JtKTsKICAgICB2
b2lkIGFwcGx5VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtRnJvbUNv
bnRhaW5lciwgVHJhbnNmb3JtQWNjdW11bGF0aW9uID0gRmxhdHRlblRyYW5zZm9ybSk7CiAgICAg
dm9pZCBhcHBseVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3Jt
RnJvbUNvbnRhaW5lciwgVHJhbnNmb3JtQWNjdW11bGF0aW9uID0gRmxhdHRlblRyYW5zZm9ybSk7
CiAgICAgdm9pZCBmbGF0dGVuKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cklubGluZS5oCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTkgKzM5LDE5IEBACiAKICAgICB2
aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCA9IDApOwogCi0gICAgdmlydHVhbCBpbnQgbWFyZ2luTGVmdCgpIGNvbnN0
OwotICAgIHZpcnR1YWwgaW50IG1hcmdpblJpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQg
bWFyZ2luVG9wKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbWFyZ2luQm90dG9tKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBpbnQgbWFyZ2luQmVmb3JlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQg
bWFyZ2luQWZ0ZXIoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBtYXJnaW5TdGFydCgpIGNvbnN0
OwotICAgIHZpcnR1YWwgaW50IG1hcmdpbkVuZCgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQg
bWFyZ2luTGVmdCgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgbWFyZ2luUmlnaHQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGZsb2F0IG1hcmdpblRvcCgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxv
YXQgbWFyZ2luQm90dG9tKCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBtYXJnaW5CZWZvcmUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IG1hcmdpbkFmdGVyKCkgY29uc3Q7CisgICAgdmly
dHVhbCBmbG9hdCBtYXJnaW5TdGFydCgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgbWFyZ2lu
RW5kKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50
UmVjdD4mLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpOwogICAgIHZpcnR1YWwg
dm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CiAKLSAgICB2aXJ0dWFsIElu
dFNpemUgb2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRQb2ludCYp
IGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRTaXplIG9mZnNldEZyb21Db250YWluZXIoUmVuZGVy
T2JqZWN0KiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogCiAgICAgSW50UmVjdCBsaW5lc0Jv
dW5kaW5nQm94KCkgY29uc3Q7CiAgICAgSW50UmVjdCBsaW5lc1Zpc3VhbE92ZXJmbG93Qm91bmRp
bmdCb3goKSBjb25zdDsKQEAgLTc1LDggKzc1LDggQEAKICAgICAKICAgICBJbnRTaXplIHJlbGF0
aXZlUG9zaXRpb25lZElubGluZU9mZnNldChjb25zdCBSZW5kZXJCb3gqIGNoaWxkKSBjb25zdDsK
IAotICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBj
b25zdCBJbnRQb2ludCYpOwotICAgIHZvaWQgcGFpbnRPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEludFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZl
Y3RvcjxJbnRSZWN0PiYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIHBhaW50T3V0bGlu
ZShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50Jik7CiAKICAgICB1c2luZyBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6Y29udGludWF0aW9uOwogICAgIHVzaW5nIFJlbmRlckJveE1vZGVs
T2JqZWN0OjpzZXRDb250aW51YXRpb247CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICBJbnRSZWN0
IGN1bGxlZElubGluZVZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goKSBjb25zdDsKICAgICBJbmxp
bmVCb3gqIGN1bGxlZElubGluZUZpcnN0TGluZUJveCgpIGNvbnN0OwogICAgIElubGluZUJveCog
Y3VsbGVkSW5saW5lTGFzdExpbmVCb3goKSBjb25zdDsKLSAgICB2b2lkIGN1bGxlZElubGluZUFi
c29sdXRlUmVjdHMoY29uc3QgUmVuZGVySW5saW5lKiBjb250YWluZXIsIFZlY3RvcjxJbnRSZWN0
PiYsIGNvbnN0IEludFNpemUmKTsKKyAgICB2b2lkIGN1bGxlZElubGluZUFic29sdXRlUmVjdHMo
Y29uc3QgUmVuZGVySW5saW5lKiBjb250YWluZXIsIFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IEZs
b2F0U2l6ZSYpOwogICAgIHZvaWQgY3VsbGVkSW5saW5lQWJzb2x1dGVRdWFkcyhjb25zdCBSZW5k
ZXJJbmxpbmUqIGNvbnRhaW5lciwgVmVjdG9yPEZsb2F0UXVhZD4mKTsKIAogICAgIHZvaWQgYWRk
Q2hpbGRUb0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3Qq
IGJlZm9yZUNoaWxkKTsKQEAgLTExNSwzOCArMTE1LDM4IEBACiAKICAgICB2aXJ0dWFsIHZvaWQg
bGF5b3V0KCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfSAvLyBEbyBub3RoaW5nIGZvciBsYXlv
dXQoKQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50
Jik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQm
KTsKIAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3Qg
SW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHZpcnR1
YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QgeyByZXR1cm4gaXNSZWxQb3NpdGlvbmVkKCkg
fHwgaXNUcmFuc3BhcmVudCgpIHx8IGhhc01hc2soKTsgfQogCi0gICAgdmlydHVhbCBpbnQgb2Zm
c2V0TGVmdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IG9mZnNldFRvcCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgaW50IG9mZnNldFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbGluZXNCb3VuZGluZ0Jv
eCgpLndpZHRoKCk7IH0KLSAgICB2aXJ0dWFsIGludCBvZmZzZXRIZWlnaHQoKSBjb25zdCB7IHJl
dHVybiBsaW5lc0JvdW5kaW5nQm94KCkuaGVpZ2h0KCk7IH0KKyAgICB2aXJ0dWFsIGZsb2F0IG9m
ZnNldExlZnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IG9mZnNldFRvcCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgZmxvYXQgb2Zmc2V0V2lkdGgoKSBjb25zdCB7IHJldHVybiBsaW5lc0JvdW5k
aW5nQm94KCkud2lkdGgoKTsgfQorICAgIHZpcnR1YWwgZmxvYXQgb2Zmc2V0SGVpZ2h0KCkgY29u
c3QgeyByZXR1cm4gbGluZXNCb3VuZGluZ0JveCgpLmhlaWdodCgpOyB9CiAKLSAgICB2aXJ0dWFs
IEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIpOworICAgIHZpcnR1YWwgRmxvYXRSZWN0IGNsaXBwZWRPdmVy
Zmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVy
KTsKICAgICB2aXJ0dWFsIEludFJlY3QgcmVjdFdpdGhPdXRsaW5lRm9yUmVwYWludChSZW5kZXJC
b3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgaW50IG91dGxpbmVXaWR0aCk7Ci0gICAg
dmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCog
cmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVjdCwgYm9vbCBmaXhlZCk7CisgICAgdmlydHVh
bCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lciwgRmxvYXRSZWN0JiByZWN0LCBib29sIGZpeGVkKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBtYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29u
dGFpbmVyLCBib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJikg
Y29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIG1hcEFic29sdXRlVG9Mb2NhbFBvaW50KGJvb2wgZml4
ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcywgVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsKIAogICAgIHZp
cnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKTsK
IAotICAgIHZpcnR1YWwgSW50UmVjdCBib3JkZXJCb3VuZGluZ0JveCgpIGNvbnN0CisgICAgdmly
dHVhbCBGbG9hdFJlY3QgYm9yZGVyQm91bmRpbmdCb3goKSBjb25zdAogICAgIHsKLSAgICAgICAg
SW50UmVjdCBib3VuZGluZ0JveCA9IGxpbmVzQm91bmRpbmdCb3goKTsKLSAgICAgICAgcmV0dXJu
IEludFJlY3QoMCwgMCwgYm91bmRpbmdCb3gud2lkdGgoKSwgYm91bmRpbmdCb3guaGVpZ2h0KCkp
OworICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSBsaW5lc0JvdW5kaW5nQm94KCk7Cisg
ICAgICAgIHJldHVybiBGbG9hdFJlY3QoMCwgMCwgYm91bmRpbmdCb3gud2lkdGgoKSwgYm91bmRp
bmdCb3guaGVpZ2h0KCkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgSW5saW5lRmxvd0JveCogY3Jl
YXRlSW5saW5lRmxvd0JveCgpOyAvLyBTdWJjbGFzc2VkIGJ5IFNWRyBhbmQgUnVieQogCiAgICAg
dmlydHVhbCB2b2lkIGRpcnR5TGluZXNGcm9tQ2hhbmdlZENoaWxkKFJlbmRlck9iamVjdCogY2hp
bGQpIHsgbV9saW5lQm94ZXMuZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQodGhpcywgY2hpbGQp
OyB9CiAKLSAgICB2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGly
ZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJv
b2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0
aW9uT25Db250YWluaW5nTGluZSkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBsaW5lSGVpZ2h0
KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBv
c2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBiYXNlbGlu
ZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2Rl
LCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdDsKICAg
ICAKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRCZWNhbWVOb25JbmxpbmUoUmVuZGVyT2JqZWN0KiBj
aGlsZCk7CiAKQEAgLTE2Miw3ICsxNjIsNyBAQAogICAgIAogICAgIHN0YXRpYyBSZW5kZXJJbmxp
bmUqIGNsb25lSW5saW5lKFJlbmRlcklubGluZSogc3JjKTsKIAotICAgIHZvaWQgcGFpbnRPdXRs
aW5lRm9yTGluZShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJl
Y3QmIHByZXZMaW5lLCBjb25zdCBJbnRSZWN0JiB0aGlzTGluZSwKKyAgICB2b2lkIHBhaW50T3V0
bGluZUZvckxpbmUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IElu
dFJlY3QmIHByZXZMaW5lLCBjb25zdCBJbnRSZWN0JiB0aGlzTGluZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgbmV4dExpbmUsIGNvbnN0IENvbG9yKTsKICAg
ICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGludWF0aW9uQmVmb3JlKFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lk
Z2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lk
Z2V0LmNwcAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyV2lkZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDcgKzIwNSw3IEBACiAgICAgICAg
IC8vIHN0eWxlIHBvaW50ZXIpLgogICAgICAgICBpZiAoc3R5bGUoKSkgewogICAgICAgICAgICAg
aWYgKCFuZWVkc0xheW91dCgpKQotICAgICAgICAgICAgICAgIHNldFdpZGdldEdlb21ldHJ5KElu
dFJlY3QobG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQoY29udGVudEJveFJlY3QoKSkpLmJv
dW5kaW5nQm94KCkpLCBjb250ZW50Qm94UmVjdCgpLnNpemUoKSk7CisgICAgICAgICAgICAgICAg
c2V0V2lkZ2V0R2VvbWV0cnkoSW50UmVjdChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChj
b250ZW50Qm94UmVjdCgpKSkuYm91bmRpbmdCb3goKSksIGV4cGFuZGVkSW50U2l6ZShjb250ZW50
Qm94UmVjdCgpLnNpemUoKSkpOwogICAgICAgICAgICAgaWYgKHN0eWxlKCktPnZpc2liaWxpdHko
KSAhPSBWSVNJQkxFKQogICAgICAgICAgICAgICAgIG1fd2lkZ2V0LT5oaWRlKCk7CiAgICAgICAg
ICAgICBlbHNlIHsKQEAgLTI0NywxMiArMjQ3LDEyIEBACiAgICAgICAgIG1fd2lkZ2V0LT5ub3Rp
ZnlXaWRnZXQobm90aWZpY2F0aW9uKTsKIH0KIAotdm9pZCBSZW5kZXJXaWRnZXQ6OnBhaW50KFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCit2b2lkIFJl
bmRlcldpZGdldDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQm
IHBhaW50T2Zmc2V0KQogewogICAgIGlmICghc2hvdWxkUGFpbnQocGFpbnRJbmZvLCBwYWludE9m
ZnNldCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZz
ZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CisgICAgRmxvYXRQb2ludCBhZGp1c3RlZFBh
aW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOwogCiAgICAgaWYgKGhhc0JveERl
Y29yYXRpb25zKCkgJiYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCB8
fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbikpCiAgICAgICAgIHBhaW50
Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKQEAgLTI3MSwx
NCArMjcxLDE0IEBACiAjZW5kaWYKIAogICAgIGlmIChzdHlsZSgpLT5oYXNCb3JkZXJSYWRpdXMo
KSkgewotICAgICAgICBJbnRSZWN0IGJvcmRlclJlY3QgPSBJbnRSZWN0KGFkanVzdGVkUGFpbnRP
ZmZzZXQsIHNpemUoKSk7CisgICAgICAgIEZsb2F0UmVjdCBib3JkZXJSZWN0ID0gRmxvYXRSZWN0
KGFkanVzdGVkUGFpbnRPZmZzZXQsIHNpemUoKSk7CiAKICAgICAgICAgaWYgKGJvcmRlclJlY3Qu
aXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIFB1c2ggYSBjbGlw
IGlmIHdlIGhhdmUgYSBib3JkZXIgcmFkaXVzLCBzaW5jZSB3ZSB3YW50IHRvIHJvdW5kIHRoZSBm
b3JlZ3JvdW5kIGNvbnRlbnQgdGhhdCBnZXRzIHBhaW50ZWQuCiAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT5zYXZlKCk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVj
dENsaXAoc3R5bGUoKS0+Z2V0Um91bmRlZEJvcmRlckZvcihib3JkZXJSZWN0KSk7CisgICAgICAg
IHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoc3R5bGUoKS0+Z2V0Um91bmRl
ZEJvcmRlckZvcihlbmNsb3NpbmdJbnRSZWN0KGJvcmRlclJlY3QpKSk7CiAgICAgfQogCiAgICAg
aWYgKG1fd2lkZ2V0KSB7CkBAIC0zNDIsNyArMzQyLDcgQEAKICAgICBpZiAoIW1fd2lkZ2V0IHx8
ICFub2RlKCkpIC8vIENoZWNrIHRoZSBub2RlIGluIGNhc2UgZGVzdHJveSgpIGhhcyBiZWVuIGNh
bGxlZC4KICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50UmVjdCBjb250ZW50Qm94ID0gY29udGVu
dEJveFJlY3QoKTsKKyAgICBJbnRSZWN0IGNvbnRlbnRCb3ggPSBlbmNsb3NpbmdJbnRSZWN0KGNv
bnRlbnRCb3hSZWN0KCkpOwogICAgIEludFJlY3QgYWJzb2x1dGVDb250ZW50Qm94ID0gSW50UmVj
dChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChjb250ZW50Qm94KSkuYm91bmRpbmdCb3go
KSk7CiAgICAgYm9vbCBib3VuZHNDaGFuZ2VkID0gc2V0V2lkZ2V0R2VvbWV0cnkoYWJzb2x1dGVD
b250ZW50Qm94LCBjb250ZW50Qm94LnNpemUoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkocmV2aXNpb24g
ODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRy
b2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsMTEgKzE2NSwxMSBAQAogCiBpbnQgUmVuZGVy
RmlsZVVwbG9hZENvbnRyb2w6Om1heEZpbGVuYW1lV2lkdGgoKSBjb25zdAogewotICAgIHJldHVy
biBtYXgoMCwgY29udGVudFdpZHRoKCkgLSBub2RlV2lkdGgodXBsb2FkQnV0dG9uKCkpIC0gYWZ0
ZXJCdXR0b25TcGFjaW5nCisgICAgcmV0dXJuIG1heCgwLjBmLCBjb250ZW50V2lkdGgoKSAtIG5v
ZGVXaWR0aCh1cGxvYWRCdXR0b24oKSkgLSBhZnRlckJ1dHRvblNwYWNpbmcKICAgICAgICAgLSAo
bV9maWxlQ2hvb3Nlci0+aWNvbigpID8gaWNvbldpZHRoICsgaWNvbkZpbGVuYW1lU3BhY2luZyA6
IDApKTsKIH0KIAotdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplY3QoUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKK3ZvaWQgUmVu
ZGVyRmlsZVVwbG9hZENvbnRyb2w6OnBhaW50T2JqZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBGbG9hdFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBpZiAoc3R5bGUoKS0+dmlzaWJp
bGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gODg0OTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NTcsMTEgKzQ1NywxMSBAQAogCiB2b2lkIFJlbmRlclRleHRDb250cm9sOjpo
aXRJbm5lclRleHRFbGVtZW50KEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQm
IHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkKIHsK
LSAgICBJbnRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0ZWRPZmZzZXQgKyBsb2Nh
dGlvbigpOworICAgIEludFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSByb3VuZGVkSW50UG9pbnQo
YWNjdW11bGF0ZWRPZmZzZXQgKyBsb2NhdGlvbigpKTsKICAgICBIVE1MRWxlbWVudCogaW5uZXJU
ZXh0ID0gaW5uZXJUZXh0RWxlbWVudCgpOwogICAgIHJlc3VsdC5zZXRJbm5lck5vZGUoaW5uZXJU
ZXh0KTsKICAgICByZXN1bHQuc2V0SW5uZXJOb25TaGFyZWROb2RlKGlubmVyVGV4dCk7Ci0gICAg
cmVzdWx0LnNldExvY2FsUG9pbnQocG9pbnRJbkNvbnRhaW5lciAtIHRvU2l6ZShhZGp1c3RlZExv
Y2F0aW9uICsgaW5uZXJUZXh0LT5yZW5kZXJCb3goKS0+bG9jYXRpb24oKSkpOworICAgIHJlc3Vs
dC5zZXRMb2NhbFBvaW50KHJvdW5kZWRJbnRQb2ludChwb2ludEluQ29udGFpbmVyIC0gdG9TaXpl
KGFkanVzdGVkTG9jYXRpb24gKyBpbm5lclRleHQtPnJlbmRlckJveCgpLT5sb2NhdGlvbigpKSkp
OwogfQogCiB2b2lkIFJlbmRlclRleHRDb250cm9sOjpmb3J3YXJkRXZlbnQoRXZlbnQqIGV2ZW50
KQpAQCAtNTkxLDEwICs1OTEsMTAgQEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyVGV4dENvbnRy
b2w6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IEludFBv
aW50JiBhZGRpdGlvbmFsT2Zmc2V0KQordm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6YWRkRm9jdXNS
aW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgRmxvYXRQb2ludCYgYWRkaXRp
b25hbE9mZnNldCkKIHsKICAgICBpZiAoIXNpemUoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJlY3Rz
LmFwcGVuZChJbnRSZWN0KGFkZGl0aW9uYWxPZmZzZXQsIHNpemUoKSkpOworICAgICAgICByZWN0
cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVjdChhZGRpdGlvbmFsT2Zmc2V0LCBzaXplKCkpKTsKIH0K
IAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6dXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGJv
b2wgcGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUsIGJvb2wgcGxhY2Vob2xkZXJWYWx1ZUNoYW5n
ZWQpCkBAIC02MDUsNyArNjA1LDcgQEAKICAgICAgICAgcmVwYWludCgpOwogfQogCi12b2lkIFJl
bmRlclRleHRDb250cm9sOjpwYWludFBsYWNlaG9sZGVyKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCit2b2lkIFJlbmRlclRleHRDb250cm9sOjpwYWlu
dFBsYWNlaG9sZGVyKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiBwYWlu
dE9mZnNldCkKIHsKICAgICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAg
ICAgICAgIHJldHVybjsKQEAgLTY0MCw3ICs2NDAsNyBAQAogICAgIH0KIH0KIAotdm9pZCBSZW5k
ZXJUZXh0Q29udHJvbDo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFBvaW50JiBwYWludE9mZnNldCkKK3ZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnBhaW50T2JqZWN0
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiBwYWludE9mZnNldCkKIHsg
ICAgCiAgICAgaWYgKG1fcGxhY2Vob2xkZXJWaXNpYmxlICYmIHBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlRm9yZWdyb3VuZCkKICAgICAgICAgcGFpbnRQbGFjZWhvbGRlcihwYWludEluZm8s
IHBhaW50T2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5l
Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGlu
ZUJveC5jcHAJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jv
b3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50RWxsaXBzaXNCb3go
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgaW50IGxp
bmVUb3AsIGludCBsaW5lQm90dG9tKSBjb25zdAordm9pZCBSb290SW5saW5lQm94OjpwYWludEVs
bGlwc2lzQm94KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiBwYWludE9m
ZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKSBjb25zdAogewogICAgIGlmIChoYXNF
bGxpcHNpc0JveCgpICYmIHBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QocmVuZGVyZXIo
KSkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUKICAgICAg
ICAgICAgICYmIHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKQEAgLTE1
Nyw3ICsxNTcsNyBAQAogICAgIHNldE92ZXJmbG93RnJvbUxvZ2ljYWxSZWN0cyhpbmZsYXRlZFJl
Y3QsIGluZmxhdGVkUmVjdCwgbGluZVRvcCgpLCBsaW5lQm90dG9tKCkpOwogfQogCi12b2lkIFJv
b3RJbmxpbmVCb3g6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEF0b21pY1N0cmluZyYgaGlnaGxpZ2h0
VHlwZSkKK3ZvaWQgUm9vdElubGluZUJveDo6cGFpbnRDdXN0b21IaWdobGlnaHQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBBdG9taWNT
dHJpbmcmIGhpZ2hsaWdodFR5cGUpCiB7CiAgICAgaWYgKCFwYWludEluZm8uc2hvdWxkUGFpbnRX
aXRoaW5Sb290KHJlbmRlcmVyKCkpIHx8IHJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHko
KSAhPSBWSVNJQkxFIHx8IHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTc4LDcgKzE3OCw3IEBACiAKICNlbmRpZgogCi12b2lkIFJv
b3RJbmxpbmVCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYg
cGFpbnRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSkKK3ZvaWQgUm9vdElubGlu
ZUJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIHBhaW50
T2Zmc2V0LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pCiB7CiAgICAgSW5saW5lRmxvd0Jv
eDo6cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCwgbGluZVRvcCwgbGluZUJvdHRvbSk7CiAg
ICAgcGFpbnRFbGxpcHNpc0JveChwYWludEluZm8sIHBhaW50T2Zmc2V0LCBsaW5lVG9wLCBsaW5l
Qm90dG9tKTsKQEAgLTIyMCw3ICsyMjAsNyBAQAogICAgIH0KIH0KIAotaW50IFJvb3RJbmxpbmVC
b3g6OmFsaWduQm94ZXNJbkJsb2NrRGlyZWN0aW9uKGludCBoZWlnaHRPZkJsb2NrLCBHbHlwaE92
ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCYgdGV4dEJveERhdGFNYXAsIFZlcnRpY2FsUG9zaXRp
b25DYWNoZSYgdmVydGljYWxQb3NpdGlvbkNhY2hlKQorZmxvYXQgUm9vdElubGluZUJveDo6YWxp
Z25Cb3hlc0luQmxvY2tEaXJlY3Rpb24oZmxvYXQgaGVpZ2h0T2ZCbG9jaywgR2x5cGhPdmVyZmxv
d0FuZEZhbGxiYWNrRm9udHNNYXAmIHRleHRCb3hEYXRhTWFwLCBWZXJ0aWNhbFBvc2l0aW9uQ2Fj
aGUmIHZlcnRpY2FsUG9zaXRpb25DYWNoZSkKIHsKICNpZiBFTkFCTEUoU1ZHKQogICAgIC8vIFNW
RyB3aWxsIGhhbmRsZSB2ZXJ0aWNhbCBhbGlnbm1lbnQgb24gaXRzIG93bi4KQEAgLTIyOCwxMCAr
MjI4LDEwIEBACiAgICAgICAgIHJldHVybiAwOwogI2VuZGlmCiAKLSAgICBpbnQgbWF4UG9zaXRp
b25Ub3AgPSAwOwotICAgIGludCBtYXhQb3NpdGlvbkJvdHRvbSA9IDA7Ci0gICAgaW50IG1heEFz
Y2VudCA9IDA7Ci0gICAgaW50IG1heERlc2NlbnQgPSAwOworICAgIGZsb2F0IG1heFBvc2l0aW9u
VG9wID0gMDsKKyAgICBmbG9hdCBtYXhQb3NpdGlvbkJvdHRvbSA9IDA7CisgICAgZmxvYXQgbWF4
QXNjZW50ID0gMDsKKyAgICBmbG9hdCBtYXhEZXNjZW50ID0gMDsKICAgICBib29sIHNldE1heEFz
Y2VudCA9IGZhbHNlOwogICAgIGJvb2wgc2V0TWF4RGVzY2VudCA9IGZhbHNlOwogCkBAIC0yNDYs
MTEgKzI0NiwxMSBAQAogICAgIGlmIChtYXhBc2NlbnQgKyBtYXhEZXNjZW50IDwgbWF4KG1heFBv
c2l0aW9uVG9wLCBtYXhQb3NpdGlvbkJvdHRvbSkpCiAgICAgICAgIGFkanVzdE1heEFzY2VudEFu
ZERlc2NlbnQobWF4QXNjZW50LCBtYXhEZXNjZW50LCBtYXhQb3NpdGlvblRvcCwgbWF4UG9zaXRp
b25Cb3R0b20pOwogCi0gICAgaW50IG1heEhlaWdodCA9IG1heEFzY2VudCArIG1heERlc2NlbnQ7
Ci0gICAgaW50IGxpbmVUb3AgPSBoZWlnaHRPZkJsb2NrOwotICAgIGludCBsaW5lQm90dG9tID0g
aGVpZ2h0T2ZCbG9jazsKLSAgICBpbnQgbGluZVRvcEluY2x1ZGluZ01hcmdpbnMgPSBoZWlnaHRP
ZkJsb2NrOwotICAgIGludCBsaW5lQm90dG9tSW5jbHVkaW5nTWFyZ2lucyA9IGhlaWdodE9mQmxv
Y2s7CisgICAgZmxvYXQgbWF4SGVpZ2h0ID0gbWF4QXNjZW50ICsgbWF4RGVzY2VudDsKKyAgICBm
bG9hdCBsaW5lVG9wID0gaGVpZ2h0T2ZCbG9jazsKKyAgICBmbG9hdCBsaW5lQm90dG9tID0gaGVp
Z2h0T2ZCbG9jazsKKyAgICBmbG9hdCBsaW5lVG9wSW5jbHVkaW5nTWFyZ2lucyA9IGhlaWdodE9m
QmxvY2s7CisgICAgZmxvYXQgbGluZUJvdHRvbUluY2x1ZGluZ01hcmdpbnMgPSBoZWlnaHRPZkJs
b2NrOwogICAgIGJvb2wgc2V0TGluZVRvcCA9IGZhbHNlOwogICAgIGJvb2wgaGFzQW5ub3RhdGlv
bnNCZWZvcmUgPSBmYWxzZTsKICAgICBib29sIGhhc0Fubm90YXRpb25zQWZ0ZXIgPSBmYWxzZTsK
QEAgLTI2OCw3ICsyNjgsNyBAQAogICAgICAgICBoZWlnaHRPZkJsb2NrICs9IGFubm90YXRpb25z
QWRqdXN0bWVudDsKICAgICB9CiAKLSAgICBtYXhIZWlnaHQgPSBtYXgoMCwgbWF4SGVpZ2h0KTsK
KyAgICBtYXhIZWlnaHQgPSBtYXgoMC4wZiwgbWF4SGVpZ2h0KTsKIAogICAgIHJldHVybiBoZWln
aHRPZkJsb2NrICsgbWF4SGVpZ2h0OwogfQpAQCAtMzA0LDggKzMwNCw4IEBACiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotR2FwUmVjdHMgUm9vdElubGluZUJveDo6bGluZVNlbGVjdGlvbkdhcChS
ZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBJbnRQb2ludCYgcm9vdEJsb2NrUGh5c2ljYWxQ
b3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaywgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZWxUb3AsIGludCBzZWxIZWlnaHQs
IGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZvKQorR2FwUmVjdHMgUm9vdElubGluZUJveDo6bGlu
ZVNlbGVjdGlvbkdhcChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBGbG9hdFBvaW50JiBy
b290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldEZyb21Sb290
QmxvY2ssIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBz
ZWxUb3AsIGZsb2F0IHNlbEhlaWdodCwgY29uc3QgUGFpbnRJbmZvKiBwYWludEluZm8pCiB7CiAg
ICAgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBsaW5lU3RhdGUgPSBzZWxlY3Rpb25TdGF0
ZSgpOwogCkBAIC0zMzYsOSArMzM2LDkgQEAKICAgICAgICAgYm9vbCBpc1ByZXZpb3VzQm94U2Vs
ZWN0ZWQgPSBmaXJzdEJveC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVj
dGlvbk5vbmU7CiAgICAgICAgIGZvciAoSW5saW5lQm94KiBib3ggPSBmaXJzdEJveC0+bmV4dExl
YWZDaGlsZCgpOyBib3g7IGJveCA9IGJveC0+bmV4dExlYWZDaGlsZCgpKSB7CiAgICAgICAgICAg
ICBpZiAoYm94LT5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9u
ZSkgewotICAgICAgICAgICAgICAgIEludFJlY3QgbG9naWNhbFJlY3QobGFzdExvZ2ljYWxMZWZ0
LCBzZWxUb3AsIGJveC0+bG9naWNhbExlZnQoKSAtIGxhc3RMb2dpY2FsTGVmdCwgc2VsSGVpZ2h0
KTsKKyAgICAgICAgICAgICAgICBGbG9hdFJlY3QgbG9naWNhbFJlY3QobGFzdExvZ2ljYWxMZWZ0
LCBzZWxUb3AsIGJveC0+bG9naWNhbExlZnQoKSAtIGxhc3RMb2dpY2FsTGVmdCwgc2VsSGVpZ2h0
KTsKICAgICAgICAgICAgICAgICBsb2dpY2FsUmVjdC5tb3ZlKHJlbmRlcmVyKCktPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyBvZmZzZXRGcm9tUm9vdEJsb2NrIDogSW50U2l6ZShvZmZzZXRG
cm9tUm9vdEJsb2NrLmhlaWdodCgpLCBvZmZzZXRGcm9tUm9vdEJsb2NrLndpZHRoKCkpKTsKLSAg
ICAgICAgICAgICAgICBJbnRSZWN0IGdhcFJlY3QgPSByb290QmxvY2stPmxvZ2ljYWxSZWN0VG9Q
aHlzaWNhbFJlY3Qocm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgbG9naWNhbFJlY3QpOworICAg
ICAgICAgICAgICAgIEZsb2F0UmVjdCBnYXBSZWN0ID0gcm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRv
UGh5c2ljYWxSZWN0KHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGxvZ2ljYWxSZWN0KTsKICAg
ICAgICAgICAgICAgICBpZiAoaXNQcmV2aW91c0JveFNlbGVjdGVkICYmIGdhcFJlY3Qud2lkdGgo
KSA+IDAgJiYgZ2FwUmVjdC5oZWlnaHQoKSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KHBhaW50SW5mbyAmJiBib3gtPnBhcmVudCgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmls
aXR5KCkgPT0gVklTSUJMRSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50SW5mby0+Y29u
dGV4dC0+ZmlsbFJlY3QoZ2FwUmVjdCwgYm94LT5wYXJlbnQoKS0+cmVuZGVyZXIoKS0+c2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCksIGJveC0+cGFyZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCkt
PmNvbG9yU3BhY2UoKSk7CkBAIC0zOTYsOSArMzk2LDkgQEAKICAgICByZXR1cm4gMDsKIH0KIAot
aW50IFJvb3RJbmxpbmVCb3g6OnNlbGVjdGlvblRvcCgpIGNvbnN0CitmbG9hdCBSb290SW5saW5l
Qm94OjpzZWxlY3Rpb25Ub3AoKSBjb25zdAogewotICAgIGludCBzZWxlY3Rpb25Ub3AgPSBtX2xp
bmVUb3A7CisgICAgZmxvYXQgc2VsZWN0aW9uVG9wID0gbV9saW5lVG9wOwogCiAgICAgaWYgKG1f
aGFzQW5ub3RhdGlvbnNCZWZvcmUpCiAgICAgICAgIHNlbGVjdGlvblRvcCAtPSAhcmVuZGVyZXIo
KS0+c3R5bGUoKS0+aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gY29tcHV0ZU92ZXJBbm5v
dGF0aW9uQWRqdXN0bWVudChtX2xpbmVUb3ApIDogY29tcHV0ZVVuZGVyQW5ub3RhdGlvbkFkanVz
dG1lbnQobV9saW5lVG9wKTsKQEAgLTQwNiwxNSArNDA2LDE1IEBACiAgICAgaWYgKHJlbmRlcmVy
KCktPnN0eWxlKCktPmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJu
IHNlbGVjdGlvblRvcDsKIAotICAgIGludCBwcmV2Qm90dG9tID0gcHJldlJvb3RCb3goKSA/IHBy
ZXZSb290Qm94KCktPnNlbGVjdGlvbkJvdHRvbSgpIDogYmxvY2soKS0+Ym9yZGVyQmVmb3JlKCkg
KyBibG9jaygpLT5wYWRkaW5nQmVmb3JlKCk7CisgICAgZmxvYXQgcHJldkJvdHRvbSA9IHByZXZS
b290Qm94KCkgPyBwcmV2Um9vdEJveCgpLT5zZWxlY3Rpb25Cb3R0b20oKSA6IGJsb2NrKCktPmJv
cmRlckJlZm9yZSgpICsgYmxvY2soKS0+cGFkZGluZ0JlZm9yZSgpOwogICAgIGlmIChwcmV2Qm90
dG9tIDwgc2VsZWN0aW9uVG9wICYmIGJsb2NrKCktPmNvbnRhaW5zRmxvYXRzKCkpIHsKICAgICAg
ICAgLy8gVGhpcyBsaW5lIGhhcyBhY3R1YWxseSBiZWVuIG1vdmVkIGZ1cnRoZXIgZG93biwgcHJv
YmFibHkgZnJvbSBhIGxhcmdlIGxpbmUtaGVpZ2h0LCBidXQgcG9zc2libHkgYmVjYXVzZSB0aGUK
ICAgICAgICAgLy8gbGluZSB3YXMgZm9yY2VkIHRvIGNsZWFyIGZsb2F0cy4gIElmIHNvLCBsZXQn
cyBjaGVjayB0aGUgb2Zmc2V0cywgYW5kIG9ubHkgYmUgd2lsbGluZyB0byB1c2UgdGhlIHByZXZp
b3VzCiAgICAgICAgIC8vIGxpbmUncyBib3R0b20gaWYgdGhlIG9mZnNldHMgYXJlIGdyZWF0ZXIg
b24gYm90aCBzaWRlcy4KLSAgICAgICAgaW50IHByZXZMZWZ0ID0gYmxvY2soKS0+bG9naWNhbExl
ZnRPZmZzZXRGb3JMaW5lKHByZXZCb3R0b20sIGZhbHNlKTsKLSAgICAgICAgaW50IHByZXZSaWdo
dCA9IGJsb2NrKCktPmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUocHJldkJvdHRvbSwgZmFsc2Up
OwotICAgICAgICBpbnQgbmV3TGVmdCA9IGJsb2NrKCktPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGlu
ZShzZWxlY3Rpb25Ub3AsIGZhbHNlKTsKLSAgICAgICAgaW50IG5ld1JpZ2h0ID0gYmxvY2soKS0+
bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShzZWxlY3Rpb25Ub3AsIGZhbHNlKTsKKyAgICAgICAg
ZmxvYXQgcHJldkxlZnQgPSBibG9jaygpLT5sb2dpY2FsTGVmdE9mZnNldEZvckxpbmUocHJldkJv
dHRvbSwgZmFsc2UpOworICAgICAgICBmbG9hdCBwcmV2UmlnaHQgPSBibG9jaygpLT5sb2dpY2Fs
UmlnaHRPZmZzZXRGb3JMaW5lKHByZXZCb3R0b20sIGZhbHNlKTsKKyAgICAgICAgZmxvYXQgbmV3
TGVmdCA9IGJsb2NrKCktPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShzZWxlY3Rpb25Ub3AsIGZh
bHNlKTsKKyAgICAgICAgZmxvYXQgbmV3UmlnaHQgPSBibG9jaygpLT5sb2dpY2FsUmlnaHRPZmZz
ZXRGb3JMaW5lKHNlbGVjdGlvblRvcCwgZmFsc2UpOwogICAgICAgICBpZiAocHJldkxlZnQgPiBu
ZXdMZWZ0IHx8IHByZXZSaWdodCA8IG5ld1JpZ2h0KQogICAgICAgICAgICAgcmV0dXJuIHNlbGVj
dGlvblRvcDsKICAgICB9CkBAIC00MjIsOSArNDIyLDkgQEAKICAgICByZXR1cm4gcHJldkJvdHRv
bTsKIH0KIAotaW50IFJvb3RJbmxpbmVCb3g6OnNlbGVjdGlvbkJvdHRvbSgpIGNvbnN0CitmbG9h
dCBSb290SW5saW5lQm94OjpzZWxlY3Rpb25Cb3R0b20oKSBjb25zdAogewotICAgIGludCBzZWxl
Y3Rpb25Cb3R0b20gPSBtX2xpbmVCb3R0b207CisgICAgZmxvYXQgc2VsZWN0aW9uQm90dG9tID0g
bV9saW5lQm90dG9tOwogCiAgICAgaWYgKG1faGFzQW5ub3RhdGlvbnNBZnRlcikKICAgICAgICAg
c2VsZWN0aW9uQm90dG9tICs9ICFyZW5kZXJlcigpLT5zdHlsZSgpLT5pc0ZsaXBwZWRMaW5lc1dy
aXRpbmdNb2RlKCkgPyBjb21wdXRlVW5kZXJBbm5vdGF0aW9uQWRqdXN0bWVudChtX2xpbmVCb3R0
b20pIDogY29tcHV0ZU92ZXJBbm5vdGF0aW9uQWRqdXN0bWVudChtX2xpbmVCb3R0b20pOwpAQCAt
NDMyLDE1ICs0MzIsMTUgQEAKICAgICBpZiAoIXJlbmRlcmVyKCktPnN0eWxlKCktPmlzRmxpcHBl
ZExpbmVzV3JpdGluZ01vZGUoKSB8fCAhbmV4dFJvb3RCb3goKSkKICAgICAgICAgcmV0dXJuIHNl
bGVjdGlvbkJvdHRvbTsKIAotICAgIGludCBuZXh0VG9wID0gbmV4dFJvb3RCb3goKS0+c2VsZWN0
aW9uVG9wKCk7CisgICAgZmxvYXQgbmV4dFRvcCA9IG5leHRSb290Qm94KCktPnNlbGVjdGlvblRv
cCgpOwogICAgIGlmIChuZXh0VG9wID4gc2VsZWN0aW9uQm90dG9tICYmIGJsb2NrKCktPmNvbnRh
aW5zRmxvYXRzKCkpIHsKICAgICAgICAgLy8gVGhlIG5leHQgbGluZSBoYXMgYWN0dWFsbHkgYmVl
biBtb3ZlZCBmdXJ0aGVyIG92ZXIsIHByb2JhYmx5IGZyb20gYSBsYXJnZSBsaW5lLWhlaWdodCwg
YnV0IHBvc3NpYmx5IGJlY2F1c2UgdGhlCiAgICAgICAgIC8vIGxpbmUgd2FzIGZvcmNlZCB0byBj
bGVhciBmbG9hdHMuICBJZiBzbywgbGV0J3MgY2hlY2sgdGhlIG9mZnNldHMsIGFuZCBvbmx5IGJl
IHdpbGxpbmcgdG8gdXNlIHRoZSBuZXh0CiAgICAgICAgIC8vIGxpbmUncyB0b3AgaWYgdGhlIG9m
ZnNldHMgYXJlIGdyZWF0ZXIgb24gYm90aCBzaWRlcy4KLSAgICAgICAgaW50IG5leHRMZWZ0ID0g
YmxvY2soKS0+bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKG5leHRUb3AsIGZhbHNlKTsKLSAgICAg
ICAgaW50IG5leHRSaWdodCA9IGJsb2NrKCktPmxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUobmV4
dFRvcCwgZmFsc2UpOwotICAgICAgICBpbnQgbmV3TGVmdCA9IGJsb2NrKCktPmxvZ2ljYWxMZWZ0
T2Zmc2V0Rm9yTGluZShzZWxlY3Rpb25Cb3R0b20sIGZhbHNlKTsKLSAgICAgICAgaW50IG5ld1Jp
Z2h0ID0gYmxvY2soKS0+bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShzZWxlY3Rpb25Cb3R0b20s
IGZhbHNlKTsKKyAgICAgICAgZmxvYXQgbmV4dExlZnQgPSBibG9jaygpLT5sb2dpY2FsTGVmdE9m
ZnNldEZvckxpbmUobmV4dFRvcCwgZmFsc2UpOworICAgICAgICBmbG9hdCBuZXh0UmlnaHQgPSBi
bG9jaygpLT5sb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKG5leHRUb3AsIGZhbHNlKTsKKyAgICAg
ICAgZmxvYXQgbmV3TGVmdCA9IGJsb2NrKCktPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShzZWxl
Y3Rpb25Cb3R0b20sIGZhbHNlKTsKKyAgICAgICAgZmxvYXQgbmV3UmlnaHQgPSBibG9jaygpLT5s
b2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKHNlbGVjdGlvbkJvdHRvbSwgZmFsc2UpOwogICAgICAg
ICBpZiAobmV4dExlZnQgPiBuZXdMZWZ0IHx8IG5leHRSaWdodCA8IG5ld1JpZ2h0KQogICAgICAg
ICAgICAgcmV0dXJuIHNlbGVjdGlvbkJvdHRvbTsKICAgICB9CkBAIC01NDgsNyArNTQ4LDcgQEAK
ICAgICByZXR1cm4gbGluZUxheW91dE92ZXJmbG93OwogfQogCi1zdGF0aWMgdm9pZCBzZXRBc2Nl
bnRBbmREZXNjZW50KGludCYgYXNjZW50LCBpbnQmIGRlc2NlbnQsIGludCBuZXdBc2NlbnQsIGlu
dCBuZXdEZXNjZW50LCBib29sJiBhc2NlbnREZXNjZW50U2V0KQorc3RhdGljIHZvaWQgc2V0QXNj
ZW50QW5kRGVzY2VudChmbG9hdCYgYXNjZW50LCBmbG9hdCYgZGVzY2VudCwgZmxvYXQgbmV3QXNj
ZW50LCBmbG9hdCBuZXdEZXNjZW50LCBib29sJiBhc2NlbnREZXNjZW50U2V0KQogewogICAgIGlm
ICghYXNjZW50RGVzY2VudFNldCkgewogICAgICAgICBhc2NlbnREZXNjZW50U2V0ID0gdHJ1ZTsK
QEAgLTU2MCw3ICs1NjAsNyBAQAogICAgIH0KIH0KIAotdm9pZCBSb290SW5saW5lQm94Ojphc2Nl
bnRBbmREZXNjZW50Rm9yQm94KElubGluZUJveCogYm94LCBHbHlwaE92ZXJmbG93QW5kRmFsbGJh
Y2tGb250c01hcCYgdGV4dEJveERhdGFNYXAsIGludCYgYXNjZW50LCBpbnQmIGRlc2NlbnQsCit2
b2lkIFJvb3RJbmxpbmVCb3g6OmFzY2VudEFuZERlc2NlbnRGb3JCb3goSW5saW5lQm94KiBib3gs
IEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJiB0ZXh0Qm94RGF0YU1hcCwgZmxvYXQm
IGFzY2VudCwgZmxvYXQmIGRlc2NlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCYgYWZmZWN0c0FzY2VudCwgYm9vbCYgYWZmZWN0c0Rlc2NlbnQpIGNv
bnN0CiB7CiAgICAgYm9vbCBhc2NlbnREZXNjZW50U2V0ID0gZmFsc2U7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMzMg
KzQ5LDMzIEBACiAgICAgCiAgICAgYm9vbCBjb2xsYXBzZUJvcmRlcnMoKSBjb25zdCB7IHJldHVy
biBzdHlsZSgpLT5ib3JkZXJDb2xsYXBzZSgpOyB9CiAKLSAgICBpbnQgYm9yZGVyU3RhcnQoKSBj
b25zdCB7IHJldHVybiBtX2JvcmRlclN0YXJ0OyB9Ci0gICAgaW50IGJvcmRlckVuZCgpIGNvbnN0
IHsgcmV0dXJuIG1fYm9yZGVyRW5kOyB9Ci0gICAgaW50IGJvcmRlckJlZm9yZSgpIGNvbnN0Owot
ICAgIGludCBib3JkZXJBZnRlcigpIGNvbnN0OworICAgIGZsb2F0IGJvcmRlclN0YXJ0KCkgY29u
c3QgeyByZXR1cm4gbV9ib3JkZXJTdGFydDsgfQorICAgIGZsb2F0IGJvcmRlckVuZCgpIGNvbnN0
IHsgcmV0dXJuIG1fYm9yZGVyRW5kOyB9CisgICAgZmxvYXQgYm9yZGVyQmVmb3JlKCkgY29uc3Q7
CisgICAgZmxvYXQgYm9yZGVyQWZ0ZXIoKSBjb25zdDsKIAotICAgIGludCBib3JkZXJMZWZ0KCkg
Y29uc3QKKyAgICBmbG9hdCBib3JkZXJMZWZ0KCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChz
dHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIHN0
eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGJvcmRlclN0YXJ0KCkgOiBib3JkZXJF
bmQoKTsKICAgICAgICAgcmV0dXJuIHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2Rl
KCkgPyBib3JkZXJBZnRlcigpIDogYm9yZGVyQmVmb3JlKCk7CiAgICAgfQogCi0gICAgaW50IGJv
cmRlclJpZ2h0KCkgY29uc3QKKyAgICBmbG9hdCBib3JkZXJSaWdodCgpIGNvbnN0CiAgICAgewog
ICAgICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAg
ICAgIHJldHVybiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBib3JkZXJFbmQo
KSA6IGJvcmRlclN0YXJ0KCk7CiAgICAgICAgIHJldHVybiBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9j
a3NXcml0aW5nTW9kZSgpID8gYm9yZGVyQmVmb3JlKCkgOiBib3JkZXJBZnRlcigpOwogICAgIH0K
IAotICAgIGludCBib3JkZXJUb3AoKSBjb25zdAorICAgIGZsb2F0IGJvcmRlclRvcCgpIGNvbnN0
CiAgICAgewogICAgICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkK
ICAgICAgICAgICAgIHJldHVybiBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgp
ID8gYm9yZGVyQWZ0ZXIoKSA6IGJvcmRlckJlZm9yZSgpOwogICAgICAgICByZXR1cm4gc3R5bGUo
KS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gYm9yZGVyU3RhcnQoKSA6IGJvcmRlckVuZCgp
OwogICAgIH0KIAotICAgIGludCBib3JkZXJCb3R0b20oKSBjb25zdAorICAgIGZsb2F0IGJvcmRl
ckJvdHRvbSgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSkKICAgICAgICAgICAgIHJldHVybiBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9j
a3NXcml0aW5nTW9kZSgpID8gYm9yZGVyQmVmb3JlKCkgOiBib3JkZXJBZnRlcigpOwpAQCAtODQs
NDEgKzg0LDQxIEBACiAKICAgICBjb25zdCBDb2xvciBiZ0NvbG9yKCkgY29uc3QgeyByZXR1cm4g
c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KTsgfQogCi0gICAgaW50IG91dGVyQm9yZGVyQmVmb3JlKCkgY29uc3Q7Ci0gICAgaW50IG91dGVy
Qm9yZGVyQWZ0ZXIoKSBjb25zdDsKLSAgICBpbnQgb3V0ZXJCb3JkZXJTdGFydCgpIGNvbnN0Owot
ICAgIGludCBvdXRlckJvcmRlckVuZCgpIGNvbnN0OworICAgIGZsb2F0IG91dGVyQm9yZGVyQmVm
b3JlKCkgY29uc3Q7CisgICAgZmxvYXQgb3V0ZXJCb3JkZXJBZnRlcigpIGNvbnN0OworICAgIGZs
b2F0IG91dGVyQm9yZGVyU3RhcnQoKSBjb25zdDsKKyAgICBmbG9hdCBvdXRlckJvcmRlckVuZCgp
IGNvbnN0OwogCi0gICAgaW50IG91dGVyQm9yZGVyTGVmdCgpIGNvbnN0CisgICAgZmxvYXQgb3V0
ZXJCb3JkZXJMZWZ0KCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChzdHlsZSgpLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIHN0eWxlKCktPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSA/IG91dGVyQm9yZGVyU3RhcnQoKSA6IG91dGVyQm9yZGVyRW5kKCk7
CiAgICAgICAgIHJldHVybiBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpID8g
b3V0ZXJCb3JkZXJBZnRlcigpIDogb3V0ZXJCb3JkZXJCZWZvcmUoKTsKICAgICB9CiAKLSAgICBp
bnQgb3V0ZXJCb3JkZXJSaWdodCgpIGNvbnN0CisgICAgZmxvYXQgb3V0ZXJCb3JkZXJSaWdodCgp
IGNvbnN0CiAgICAgewogICAgICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSkKICAgICAgICAgICAgIHJldHVybiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgPyBvdXRlckJvcmRlckVuZCgpIDogb3V0ZXJCb3JkZXJTdGFydCgpOwogICAgICAgICByZXR1
cm4gc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSA/IG91dGVyQm9yZGVyQmVm
b3JlKCkgOiBvdXRlckJvcmRlckFmdGVyKCk7CiAgICAgfQogCi0gICAgaW50IG91dGVyQm9yZGVy
VG9wKCkgY29uc3QKKyAgICBmbG9hdCBvdXRlckJvcmRlclRvcCgpIGNvbnN0CiAgICAgewogICAg
ICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgICAg
IHJldHVybiBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpID8gb3V0ZXJCb3Jk
ZXJBZnRlcigpIDogb3V0ZXJCb3JkZXJCZWZvcmUoKTsKICAgICAgICAgcmV0dXJuIHN0eWxlKCkt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG91dGVyQm9yZGVyU3RhcnQoKSA6IG91dGVyQm9y
ZGVyRW5kKCk7CiAgICAgfQogCi0gICAgaW50IG91dGVyQm9yZGVyQm90dG9tKCkgY29uc3QKKyAg
ICBmbG9hdCBvdXRlckJvcmRlckJvdHRvbSgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoc3R5
bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgICAgIHJldHVybiBzdHls
ZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpID8gb3V0ZXJCb3JkZXJCZWZvcmUoKSA6
IG91dGVyQm9yZGVyQWZ0ZXIoKTsKICAgICAgICAgcmV0dXJuIHN0eWxlKCktPmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSA/IG91dGVyQm9yZGVyRW5kKCkgOiBvdXRlckJvcmRlclN0YXJ0KCk7CiAg
ICAgfQogCi0gICAgaW50IGNhbGNCb3JkZXJTdGFydCgpIGNvbnN0OwotICAgIGludCBjYWxjQm9y
ZGVyRW5kKCkgY29uc3Q7CisgICAgZmxvYXQgY2FsY0JvcmRlclN0YXJ0KCkgY29uc3Q7CisgICAg
ZmxvYXQgY2FsY0JvcmRlckVuZCgpIGNvbnN0OwogICAgIHZvaWQgcmVjYWxjQm9yZGVyc0luUm93
RGlyZWN0aW9uKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBj
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOwpAQCAtMTM5LDcgKzEzOSw3IEBA
CiAgICAgfTsKIAogICAgIFZlY3RvcjxDb2x1bW5TdHJ1Y3Q+JiBjb2x1bW5zKCkgeyByZXR1cm4g
bV9jb2x1bW5zOyB9Ci0gICAgVmVjdG9yPGludD4mIGNvbHVtblBvc2l0aW9ucygpIHsgcmV0dXJu
IG1fY29sdW1uUG9zOyB9CisgICAgVmVjdG9yPGZsb2F0PiYgY29sdW1uUG9zaXRpb25zKCkgeyBy
ZXR1cm4gbV9jb2x1bW5Qb3M7IH0KICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIGhlYWRlcigpIGNv
bnN0IHsgcmV0dXJuIG1faGVhZDsgfQogICAgIFJlbmRlclRhYmxlU2VjdGlvbiogZm9vdGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9mb290OyB9CiAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBmaXJzdEJv
ZHkoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0Qm9keTsgfQpAQCAtMTY2LDcgKzE2Niw3IEBACiAg
ICAgICAgIHJldHVybiBjOwogICAgIH0KIAotICAgIGludCBib3JkZXJzUGFkZGluZ0FuZFNwYWNp
bmdJblJvd0RpcmVjdGlvbigpIGNvbnN0CisgICAgZmxvYXQgYm9yZGVyc1BhZGRpbmdBbmRTcGFj
aW5nSW5Sb3dEaXJlY3Rpb24oKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGJvcmRlclN0
YXJ0KCkgKyBib3JkZXJFbmQoKSArCiAgICAgICAgICAgICAgICAoY29sbGFwc2VCb3JkZXJzKCkg
PyAwIDogKHBhZGRpbmdTdGFydCgpICsgcGFkZGluZ0VuZCgpICsgKG51bUVmZkNvbHMoKSArIDEp
ICogaEJvcmRlclNwYWNpbmcoKSkpOwpAQCAtMjE0LDE1ICsyMTQsMTUgQEAKIAogICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QqIG9sZENoaWxkKTsKIAotICAgIHZpcnR1
YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwotICAgIHZpcnR1YWwg
dm9pZCBwYWludE9iamVjdChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwotICAgIHZpcnR1
YWwgdm9pZCBwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50TWFzayhQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYp
OworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBGbG9hdFBvaW50Jik7
CisgICAgdmlydHVhbCB2b2lkIHBhaW50T2JqZWN0KFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9p
bnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mLCBj
b25zdCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50TWFzayhQYWludEluZm8m
LCBjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZp
cnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogICAgIHZpcnR1YWwg
Ym9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxh
dGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKICAgICAKLSAgICB2aXJ0dWFsIGludCBmaXJzdExp
bmVCb3hCYXNlbGluZSgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgZmlyc3RMaW5lQm94QmFz
ZWxpbmUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgUmVuZGVyQmxvY2sqIGZpcnN0TGluZUJsb2Nr
KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZpcnN0TGV0dGVyKCk7CkBAIC0yMzEs
MTcgKzIzMSwxNyBAQAogCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVMb2dpY2FsV2lkdGgoKTsK
IAotICAgIHZpcnR1YWwgSW50UmVjdCBvdmVyZmxvd0NsaXBSZWN0KGNvbnN0IEludFBvaW50JiBs
b2NhdGlvbiwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Ny
b2xsYmFyU2l6ZSk7CisgICAgdmlydHVhbCBJbnRSZWN0IG92ZXJmbG93Q2xpcFJlY3QoY29uc3Qg
RmxvYXRQb2ludCYgbG9jYXRpb24sIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdu
b3JlT3ZlcmxheVNjcm9sbGJhclNpemUpOwogCiAgICAgdmlydHVhbCB2b2lkIGFkZE92ZXJmbG93
RnJvbUNoaWxkcmVuKCk7CiAKLSAgICB2b2lkIHN1YnRyYWN0Q2FwdGlvblJlY3QoSW50UmVjdCYp
IGNvbnN0OworICAgIHZvaWQgc3VidHJhY3RDYXB0aW9uUmVjdChGbG9hdFJlY3QmKSBjb25zdDsK
IAogICAgIHZvaWQgcmVjYWxjQ2FwdGlvbihSZW5kZXJCbG9jayopIGNvbnN0OwogICAgIHZvaWQg
cmVjYWxjU2VjdGlvbnMoKSBjb25zdDsKICAgICB2b2lkIGFkanVzdExvZ2ljYWxIZWlnaHRGb3JD
YXB0aW9uKCk7CiAKLSAgICBtdXRhYmxlIFZlY3RvcjxpbnQ+IG1fY29sdW1uUG9zOworICAgIG11
dGFibGUgVmVjdG9yPGZsb2F0PiBtX2NvbHVtblBvczsKICAgICBtdXRhYmxlIFZlY3RvcjxDb2x1
bW5TdHJ1Y3Q+IG1fY29sdW1uczsKIAogICAgIG11dGFibGUgUmVuZGVyQmxvY2sqIG1fY2FwdGlv
bjsKQEAgLTI1OCw4ICsyNTgsOCBAQAogICAgIAogICAgIHNob3J0IG1faFNwYWNpbmc7CiAgICAg
c2hvcnQgbV92U3BhY2luZzsKLSAgICBpbnQgbV9ib3JkZXJTdGFydDsKLSAgICBpbnQgbV9ib3Jk
ZXJFbmQ7CisgICAgZmxvYXQgbV9ib3JkZXJTdGFydDsKKyAgICBmbG9hdCBtX2JvcmRlckVuZDsK
IH07CiAKIGlubGluZSBSZW5kZXJUYWJsZSogdG9SZW5kZXJUYWJsZShSZW5kZXJPYmplY3QqIG9i
amVjdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lv
biA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Niw4ICs3Niw4IEBACiAgICAgYm9vbCBiZWluZ0Rlc3Ryb3llZCgpIGNv
bnN0IHsgcmV0dXJuIG1fYmVpbmdEZXN0cm95ZWQ7IH0KIAogICAgIC8vIFRoZXNlIHR3byBmdW5j
dGlvbnMgYXJlIG92ZXJyaWRkZW4gZm9yIGlubGluZS1ibG9jay4KLSAgICB2aXJ0dWFsIGludCBs
aW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9u
TW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQg
YmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0
aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29u
c3Q7CisgICAgdmlydHVhbCBmbG9hdCBsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGly
ZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkg
Y29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwg
Ym9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9z
aXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdDsKIAogICAgIFJlbmRlckxpbmVCb3hMaXN0KiBs
aW5lQm94ZXMoKSB7IHJldHVybiAmbV9saW5lQm94ZXM7IH0KICAgICBjb25zdCBSZW5kZXJMaW5l
Qm94TGlzdCogbGluZUJveGVzKCkgY29uc3QgeyByZXR1cm4gJm1fbGluZUJveGVzOyB9CkBAIC05
MCw3ICs5MCw3IEBACiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3
Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKICAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0Qmxv
Y2soYm9vbCByZWxheW91dENoaWxkcmVuLCBpbnQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBmbG9hdCBw
YWdlTG9naWNhbEhlaWdodCA9IDApOwogCiAgICAgdm9pZCBpbnNlcnRQb3NpdGlvbmVkT2JqZWN0
KFJlbmRlckJveCopOwogICAgIHZvaWQgcmVtb3ZlUG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gq
KTsKQEAgLTExNSwxOCArMTE1LDE4IEBACiAgICAgYm9vbCBjb250YWluc0Zsb2F0cygpIHsgcmV0
dXJuIG1fZmxvYXRpbmdPYmplY3RzICYmICFtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuaXNFbXB0
eSgpOyB9CiAgICAgYm9vbCBjb250YWluc0Zsb2F0KFJlbmRlckJveCopOwogCi0gICAgaW50IGF2
YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUoaW50IHBvc2l0aW9uLCBib29sIGZpcnN0TGluZSkg
Y29uc3Q7Ci0gICAgaW50IGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoaW50IHBvc2l0aW9uLCBi
b29sIGZpcnN0TGluZSkgY29uc3QgeyByZXR1cm4gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShw
b3NpdGlvbiwgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudCgpLCBmaXJzdExpbmUpOyB9Ci0g
ICAgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShpbnQgcG9zaXRpb24sIGJvb2wgZmlyc3RM
aW5lKSBjb25zdCB7IHJldHVybiBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUocG9zaXRpb24sIGxv
Z2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpLCBmaXJzdExpbmUpOyB9Ci0gICAgaW50IHN0YXJ0
T2Zmc2V0Rm9yTGluZShpbnQgcG9zaXRpb24sIGJvb2wgZmlyc3RMaW5lKSBjb25zdCB7IHJldHVy
biBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsb2dpY2FsTGVmdE9mZnNldEZv
ckxpbmUocG9zaXRpb24sIGZpcnN0TGluZSkgOiBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKHBv
c2l0aW9uLCBmaXJzdExpbmUpOyB9CisgICAgZmxvYXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9y
TGluZShmbG9hdCBwb3NpdGlvbiwgYm9vbCBmaXJzdExpbmUpIGNvbnN0OworICAgIGZsb2F0IGxv
Z2ljYWxSaWdodE9mZnNldEZvckxpbmUoZmxvYXQgcG9zaXRpb24sIGJvb2wgZmlyc3RMaW5lKSBj
b25zdCB7IHJldHVybiBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBsb2dpY2Fs
UmlnaHRPZmZzZXRGb3JDb250ZW50KCksIGZpcnN0TGluZSk7IH0KKyAgICBmbG9hdCBsb2dpY2Fs
TGVmdE9mZnNldEZvckxpbmUoZmxvYXQgcG9zaXRpb24sIGJvb2wgZmlyc3RMaW5lKSBjb25zdCB7
IHJldHVybiBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUocG9zaXRpb24sIGxvZ2ljYWxMZWZ0T2Zm
c2V0Rm9yQ29udGVudCgpLCBmaXJzdExpbmUpOyB9CisgICAgZmxvYXQgc3RhcnRPZmZzZXRGb3JM
aW5lKGZsb2F0IHBvc2l0aW9uLCBib29sIGZpcnN0TGluZSkgY29uc3QgeyByZXR1cm4gc3R5bGUo
KS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKHBv
c2l0aW9uLCBmaXJzdExpbmUpIDogbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShwb3NpdGlvbiwg
Zmlyc3RMaW5lKTsgfQogCiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQ
b2ludChjb25zdCBJbnRQb2ludCYpOwogICAgIAogICAgIC8vIEJsb2NrIGZsb3dzIHN1YmNsYXNz
IGF2YWlsYWJsZVdpZHRoIHRvIGhhbmRsZSBtdWx0aSBjb2x1bW4gbGF5b3V0IChzaHJpbmtpbmcg
dGhlIHdpZHRoIGF2YWlsYWJsZSB0byBjaGlsZHJlbiB3aGVuIGxheWluZyBvdXQuKQotICAgIHZp
cnR1YWwgaW50IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxv
YXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoKCkgY29uc3Q7CiAKLSAgICBJbnRQb2ludCBmbGlwRm9y
V3JpdGluZ01vZGVJbmNsdWRpbmdDb2x1bW5zKGNvbnN0IEludFBvaW50JikgY29uc3Q7Ci0gICAg
dm9pZCBmbGlwRm9yV3JpdGluZ01vZGVJbmNsdWRpbmdDb2x1bW5zKEludFJlY3QmKSBjb25zdDsK
KyAgICBGbG9hdFBvaW50IGZsaXBGb3JXcml0aW5nTW9kZUluY2x1ZGluZ0NvbHVtbnMoY29uc3Qg
RmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZvaWQgZmxpcEZvcldyaXRpbmdNb2RlSW5jbHVkaW5n
Q29sdW1ucyhGbG9hdFJlY3QmKSBjb25zdDsKIAogICAgIFJvb3RJbmxpbmVCb3gqIGZpcnN0Um9v
dEJveCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFJvb3RJbmxpbmVCb3gqPihmaXJzdExp
bmVCb3goKSk7IH0KICAgICBSb290SW5saW5lQm94KiBsYXN0Um9vdEJveCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PFJvb3RJbmxpbmVCb3gqPihsYXN0TGluZUJveCgpKTsgfQpAQCAtMTM0
LDIxICsxMzQsMjEgQEAKICAgICBib29sIGNvbnRhaW5zTm9uWmVyb0JpZGlMZXZlbCgpIGNvbnN0
OwogCiAgICAgR2FwUmVjdHMgc2VsZWN0aW9uR2FwUmVjdHNGb3JSZXBhaW50KFJlbmRlckJveE1v
ZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsKLSAgICBJbnRSZWN0IGxvZ2ljYWxMZWZ0U2Vs
ZWN0aW9uR2FwKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IEludFBvaW50JiByb290Qmxv
Y2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBzZWxPYmos
IGludCBsb2dpY2FsTGVmdCwgaW50IGxvZ2ljYWxUb3AsIGludCBsb2dpY2FsSGVpZ2h0LCBjb25z
dCBQYWludEluZm8qKTsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSaWdodFNlbGVjdGlvbkdhcChSZW5k
ZXJCbG9jayogcm9vdEJsb2NrLCBjb25zdCBJbnRQb2ludCYgcm9vdEJsb2NrUGh5c2ljYWxQb3Np
dGlvbiwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHNlbE9iaiwgaW50IGxvZ2ljYWxS
aWdodCwgaW50IGxvZ2ljYWxUb3AsIGludCBsb2dpY2FsSGVpZ2h0LCBjb25zdCBQYWludEluZm8q
KTsKKyAgICBGbG9hdFJlY3QgbG9naWNhbExlZnRTZWxlY3Rpb25HYXAoUmVuZGVyQmxvY2sqIHJv
b3RCbG9jaywgY29uc3QgRmxvYXRQb2ludCYgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29u
c3QgRmxvYXRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBzZWxPYmosIGZsb2F0IGxvZ2ljYWxMZWZ0LCBm
bG9hdCBsb2dpY2FsVG9wLCBmbG9hdCBsb2dpY2FsSGVpZ2h0LCBjb25zdCBQYWludEluZm8qKTsK
KyAgICBGbG9hdFJlY3QgbG9naWNhbFJpZ2h0U2VsZWN0aW9uR2FwKFJlbmRlckJsb2NrKiByb290
QmxvY2ssIGNvbnN0IEZsb2F0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0
IEZsb2F0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHNlbE9iaiwgZmxvYXQgbG9naWNhbFJpZ2h0LCBm
bG9hdCBsb2dpY2FsVG9wLCBmbG9hdCBsb2dpY2FsSGVpZ2h0LCBjb25zdCBQYWludEluZm8qKTsK
ICAgICB2b2lkIGdldFNlbGVjdGlvbkdhcEluZm8oU2VsZWN0aW9uU3RhdGUsIGJvb2wmIGxlZnRH
YXAsIGJvb2wmIHJpZ2h0R2FwKTsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0VG9QaHlzaWNhbFJl
Y3QoY29uc3QgSW50UG9pbnQmIHBoeXNpY2FsUG9zaXRpb24sIGNvbnN0IEludFJlY3QmIGxvZ2lj
YWxSZWN0KTsKKyAgICBGbG9hdFJlY3QgbG9naWNhbFJlY3RUb1BoeXNpY2FsUmVjdChjb25zdCBG
bG9hdFBvaW50JiBwaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBGbG9hdFJlY3QmIGxvZ2ljYWxSZWN0
KTsKICAgICAgICAgCiAgICAgLy8gSGVscGVyIG1ldGhvZHMgZm9yIGNvbXB1dGluZyBsaW5lIGNv
dW50cyBhbmQgaGVpZ2h0cyBmb3IgbGluZSBjb3VudHMuCiAgICAgUm9vdElubGluZUJveCogbGlu
ZUF0SW5kZXgoaW50KTsKICAgICBpbnQgbGluZUNvdW50KCk7Ci0gICAgaW50IGhlaWdodEZvckxp
bmVDb3VudChpbnQpOworICAgIGZsb2F0IGhlaWdodEZvckxpbmVDb3VudChpbnQpOwogICAgIHZv
aWQgY2xlYXJUcnVuY2F0aW9uKCk7CiAKLSAgICB2b2lkIGFkanVzdFJlY3RGb3JDb2x1bW5zKElu
dFJlY3QmKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0Rm9yQ29sdW1ucyhJbnRTaXpl
JiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICB2b2lkIGFkanVzdFJlY3RGb3JDb2x1bW5z
KEZsb2F0UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RGb3JDb2x1bW5zKEZs
b2F0U2l6ZSYsIGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAKICAgICB2b2lkIGFkZENvbnRpbnVh
dGlvbldpdGhPdXRsaW5lKFJlbmRlcklubGluZSopOwogICAgIGJvb2wgcGFpbnRzQ29udGludWF0
aW9uT3V0bGluZShSZW5kZXJJbmxpbmUqKTsKQEAgLTE3Nyw3MSArMTc3LDcxIEBACiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciA9
IFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24gfCBUZXh0UnVuOjpGb3JiaWRMZWFkaW5n
RXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3MgPSBEZWZhdWx0VGV4dFJ1bkZsYWdzKTsKIAogICAgIENv
bHVtbkluZm8qIGNvbHVtbkluZm8oKSBjb25zdDsKLSAgICBpbnQgY29sdW1uR2FwKCkgY29uc3Q7
CisgICAgZmxvYXQgY29sdW1uR2FwKCkgY29uc3Q7CiAgICAgCiAgICAgLy8gVGhlc2UgdHdvIGZ1
bmN0aW9ucyB0YWtlIHRoZSBDb2x1bW5JbmZvKiB0byBhdm9pZCByZXBlYXRlZCBsb29rdXBzIG9m
IHRoZSBpbmZvIGluIHRoZSBnbG9iYWwgSGFzaE1hcC4KICAgICB1bnNpZ25lZCBjb2x1bW5Db3Vu
dChDb2x1bW5JbmZvKikgY29uc3Q7CiAgICAgSW50UmVjdCBjb2x1bW5SZWN0QXQoQ29sdW1uSW5m
byosIHVuc2lnbmVkKSBjb25zdDsKIAotICAgIGludCBwYWdpbmF0aW9uU3RydXQoKSBjb25zdCB7
IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9wYWdpbmF0aW9uU3RydXQgOiAwOyB9
CisgICAgZmxvYXQgcGFnaW5hdGlvblN0cnV0KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/
IG1fcmFyZURhdGEtPm1fcGFnaW5hdGlvblN0cnV0IDogMDsgfQogICAgIHZvaWQgc2V0UGFnaW5h
dGlvblN0cnV0KGludCk7CiAgICAgCiAgICAgLy8gVGhlIHBhZ2UgbG9naWNhbCBvZmZzZXQgaXMg
dGhlIG9iamVjdCdzIG9mZnNldCBmcm9tIHRoZSB0b3Agb2YgdGhlIHBhZ2UgaW4gdGhlIHBhZ2Ug
cHJvZ3Jlc3Npb24KICAgICAvLyBkaXJlY3Rpb24gKHNvIGFuIHgtb2Zmc2V0IGluIHZlcnRpY2Fs
IHRleHQgYW5kIGEgeS1vZmZzZXQgZm9yIGhvcml6b250YWwgdGV4dCkuCi0gICAgaW50IHBhZ2VM
b2dpY2FsT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1f
cGFnZUxvZ2ljYWxPZmZzZXQgOiAwOyB9CisgICAgZmxvYXQgcGFnZUxvZ2ljYWxPZmZzZXQoKSBj
b25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9wYWdlTG9naWNhbE9mZnNl
dCA6IDA7IH0KICAgICB2b2lkIHNldFBhZ2VMb2dpY2FsT2Zmc2V0KGludCk7CiAKICAgICAvLyBB
Y2Nlc3NvcnMgZm9yIGxvZ2ljYWwgd2lkdGgvaGVpZ2h0IGFuZCBtYXJnaW5zIGluIHRoZSBjb250
YWluaW5nIGJsb2NrJ3MgYmxvY2stZmxvdyBkaXJlY3Rpb24uCiAgICAgZW51bSBBcHBseUxheW91
dERlbHRhTW9kZSB7IEFwcGx5TGF5b3V0RGVsdGEsIERvTm90QXBwbHlMYXlvdXREZWx0YSB9Owot
ICAgIGludCBsb2dpY2FsV2lkdGhGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKSB7IHJldHVybiBp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPndpZHRoKCkgOiBjaGlsZC0+aGVpZ2h0
KCk7IH0KLSAgICBpbnQgbG9naWNhbEhlaWdodEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpIHsg
cmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+aGVpZ2h0KCkgOiBjaGls
ZC0+d2lkdGgoKTsgfQotICAgIGludCBsb2dpY2FsVG9wRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGls
ZCkgeyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNoaWxkLT55KCkgOiBjaGls
ZC0+eCgpOyB9Ci0gICAgdm9pZCBzZXRMb2dpY2FsTGVmdEZvckNoaWxkKFJlbmRlckJveCogY2hp
bGQsIGludCBsb2dpY2FsTGVmdCwgQXBwbHlMYXlvdXREZWx0YU1vZGUgPSBEb05vdEFwcGx5TGF5
b3V0RGVsdGEpOwotICAgIHZvaWQgc2V0TG9naWNhbFRvcEZvckNoaWxkKFJlbmRlckJveCogY2hp
bGQsIGludCBsb2dpY2FsVG9wLCBBcHBseUxheW91dERlbHRhTW9kZSA9IERvTm90QXBwbHlMYXlv
dXREZWx0YSk7Ci0gICAgaW50IG1hcmdpbkJlZm9yZUZvckNoaWxkKFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiBjaGlsZCkgY29uc3Q7Ci0gICAgaW50IG1hcmdpbkFmdGVyRm9yQ2hpbGQoUmVuZGVyQm94
TW9kZWxPYmplY3QqIGNoaWxkKSBjb25zdDsKLSAgICBpbnQgbWFyZ2luU3RhcnRGb3JDaGlsZChS
ZW5kZXJCb3hNb2RlbE9iamVjdCogY2hpbGQpIGNvbnN0OwotICAgIGludCBtYXJnaW5FbmRGb3JD
aGlsZChSZW5kZXJCb3hNb2RlbE9iamVjdCogY2hpbGQpIGNvbnN0OworICAgIGZsb2F0IGxvZ2lj
YWxXaWR0aEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpIHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBjaGlsZC0+d2lkdGgoKSA6IGNoaWxkLT5oZWlnaHQoKTsgfQorICAgIGZs
b2F0IGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKSB7IHJldHVybiBpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPmhlaWdodCgpIDogY2hpbGQtPndpZHRoKCk7
IH0KKyAgICBmbG9hdCBsb2dpY2FsVG9wRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCkgeyByZXR1
cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNoaWxkLT55KCkgOiBjaGlsZC0+eCgpOyB9
CisgICAgdm9pZCBzZXRMb2dpY2FsTGVmdEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQsIGZsb2F0
IGxvZ2ljYWxMZWZ0LCBBcHBseUxheW91dERlbHRhTW9kZSA9IERvTm90QXBwbHlMYXlvdXREZWx0
YSk7CisgICAgdm9pZCBzZXRMb2dpY2FsVG9wRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgZmxv
YXQgbG9naWNhbFRvcCwgQXBwbHlMYXlvdXREZWx0YU1vZGUgPSBEb05vdEFwcGx5TGF5b3V0RGVs
dGEpOworICAgIGZsb2F0IG1hcmdpbkJlZm9yZUZvckNoaWxkKFJlbmRlckJveE1vZGVsT2JqZWN0
KiBjaGlsZCkgY29uc3Q7CisgICAgZmxvYXQgbWFyZ2luQWZ0ZXJGb3JDaGlsZChSZW5kZXJCb3hN
b2RlbE9iamVjdCogY2hpbGQpIGNvbnN0OworICAgIGZsb2F0IG1hcmdpblN0YXJ0Rm9yQ2hpbGQo
UmVuZGVyQm94TW9kZWxPYmplY3QqIGNoaWxkKSBjb25zdDsKKyAgICBmbG9hdCBtYXJnaW5FbmRG
b3JDaGlsZChSZW5kZXJCb3hNb2RlbE9iamVjdCogY2hpbGQpIGNvbnN0OwogICAgIHZvaWQgc2V0
TWFyZ2luU3RhcnRGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBpbnQpOwogICAgIHZvaWQgc2V0
TWFyZ2luRW5kRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgaW50KTsKICAgICB2b2lkIHNldE1h
cmdpbkJlZm9yZUZvckNoaWxkKFJlbmRlckJveCogY2hpbGQsIGludCk7CiAgICAgdm9pZCBzZXRN
YXJnaW5BZnRlckZvckNoaWxkKFJlbmRlckJveCogY2hpbGQsIGludCk7Ci0gICAgaW50IGNvbGxh
cHNlZE1hcmdpbkJlZm9yZUZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpIGNvbnN0OwotICAgIGlu
dCBjb2xsYXBzZWRNYXJnaW5BZnRlckZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpIGNvbnN0Owor
ICAgIGZsb2F0IGNvbGxhcHNlZE1hcmdpbkJlZm9yZUZvckNoaWxkKFJlbmRlckJveCogY2hpbGQp
IGNvbnN0OworICAgIGZsb2F0IGNvbGxhcHNlZE1hcmdpbkFmdGVyRm9yQ2hpbGQoUmVuZGVyQm94
KiBjaGlsZCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRmlyc3RMZXR0ZXIoKTsK
IAogICAgIGNsYXNzIE1hcmdpblZhbHVlcyB7CiAgICAgcHVibGljOgotICAgICAgICBNYXJnaW5W
YWx1ZXMoaW50IGJlZm9yZVBvcywgaW50IGJlZm9yZU5lZywgaW50IGFmdGVyUG9zLCBpbnQgYWZ0
ZXJOZWcpCisgICAgICAgIE1hcmdpblZhbHVlcyhmbG9hdCBiZWZvcmVQb3MsIGZsb2F0IGJlZm9y
ZU5lZywgZmxvYXQgYWZ0ZXJQb3MsIGZsb2F0IGFmdGVyTmVnKQogICAgICAgICAgICAgOiBtX3Bv
c2l0aXZlTWFyZ2luQmVmb3JlKGJlZm9yZVBvcykKICAgICAgICAgICAgICwgbV9uZWdhdGl2ZU1h
cmdpbkJlZm9yZShiZWZvcmVOZWcpCiAgICAgICAgICAgICAsIG1fcG9zaXRpdmVNYXJnaW5BZnRl
cihhZnRlclBvcykKICAgICAgICAgICAgICwgbV9uZWdhdGl2ZU1hcmdpbkFmdGVyKGFmdGVyTmVn
KQogICAgICAgICB7IH0KICAgICAgICAgCi0gICAgICAgIGludCBwb3NpdGl2ZU1hcmdpbkJlZm9y
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpdmVNYXJnaW5CZWZvcmU7IH0KLSAgICAgICAgaW50
IG5lZ2F0aXZlTWFyZ2luQmVmb3JlKCkgY29uc3QgeyByZXR1cm4gbV9uZWdhdGl2ZU1hcmdpbkJl
Zm9yZTsgfQotICAgICAgICBpbnQgcG9zaXRpdmVNYXJnaW5BZnRlcigpIGNvbnN0IHsgcmV0dXJu
IG1fcG9zaXRpdmVNYXJnaW5BZnRlcjsgfQotICAgICAgICBpbnQgbmVnYXRpdmVNYXJnaW5BZnRl
cigpIGNvbnN0IHsgcmV0dXJuIG1fbmVnYXRpdmVNYXJnaW5BZnRlcjsgfQorICAgICAgICBmbG9h
dCBwb3NpdGl2ZU1hcmdpbkJlZm9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpdmVNYXJnaW5C
ZWZvcmU7IH0KKyAgICAgICAgZmxvYXQgbmVnYXRpdmVNYXJnaW5CZWZvcmUoKSBjb25zdCB7IHJl
dHVybiBtX25lZ2F0aXZlTWFyZ2luQmVmb3JlOyB9CisgICAgICAgIGZsb2F0IHBvc2l0aXZlTWFy
Z2luQWZ0ZXIoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aXZlTWFyZ2luQWZ0ZXI7IH0KKyAgICAg
ICAgZmxvYXQgbmVnYXRpdmVNYXJnaW5BZnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fbmVnYXRpdmVN
YXJnaW5BZnRlcjsgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBzZXRQb3NpdGl2ZU1hcmdpbkJl
Zm9yZShpbnQgcG9zKSB7IG1fcG9zaXRpdmVNYXJnaW5CZWZvcmUgPSBwb3M7IH0KLSAgICAgICAg
dm9pZCBzZXROZWdhdGl2ZU1hcmdpbkJlZm9yZShpbnQgbmVnKSB7IG1fbmVnYXRpdmVNYXJnaW5C
ZWZvcmUgPSBuZWc7IH0KLSAgICAgICAgdm9pZCBzZXRQb3NpdGl2ZU1hcmdpbkFmdGVyKGludCBw
b3MpIHsgbV9wb3NpdGl2ZU1hcmdpbkFmdGVyID0gcG9zOyB9Ci0gICAgICAgIHZvaWQgc2V0TmVn
YXRpdmVNYXJnaW5BZnRlcihpbnQgbmVnKSB7IG1fbmVnYXRpdmVNYXJnaW5BZnRlciA9IG5lZzsg
fQorICAgICAgICB2b2lkIHNldFBvc2l0aXZlTWFyZ2luQmVmb3JlKGZsb2F0IHBvcykgeyBtX3Bv
c2l0aXZlTWFyZ2luQmVmb3JlID0gcG9zOyB9CisgICAgICAgIHZvaWQgc2V0TmVnYXRpdmVNYXJn
aW5CZWZvcmUoZmxvYXQgbmVnKSB7IG1fbmVnYXRpdmVNYXJnaW5CZWZvcmUgPSBuZWc7IH0KKyAg
ICAgICAgdm9pZCBzZXRQb3NpdGl2ZU1hcmdpbkFmdGVyKGZsb2F0IHBvcykgeyBtX3Bvc2l0aXZl
TWFyZ2luQWZ0ZXIgPSBwb3M7IH0KKyAgICAgICAgdm9pZCBzZXROZWdhdGl2ZU1hcmdpbkFmdGVy
KGZsb2F0IG5lZykgeyBtX25lZ2F0aXZlTWFyZ2luQWZ0ZXIgPSBuZWc7IH0KICAgICAKICAgICBw
cml2YXRlOgotICAgICAgICBpbnQgbV9wb3NpdGl2ZU1hcmdpbkJlZm9yZTsKLSAgICAgICAgaW50
IG1fbmVnYXRpdmVNYXJnaW5CZWZvcmU7Ci0gICAgICAgIGludCBtX3Bvc2l0aXZlTWFyZ2luQWZ0
ZXI7Ci0gICAgICAgIGludCBtX25lZ2F0aXZlTWFyZ2luQWZ0ZXI7CisgICAgICAgIGZsb2F0IG1f
cG9zaXRpdmVNYXJnaW5CZWZvcmU7CisgICAgICAgIGZsb2F0IG1fbmVnYXRpdmVNYXJnaW5CZWZv
cmU7CisgICAgICAgIGZsb2F0IG1fcG9zaXRpdmVNYXJnaW5BZnRlcjsKKyAgICAgICAgZmxvYXQg
bV9uZWdhdGl2ZU1hcmdpbkFmdGVyOwogICAgIH07CiAgICAgTWFyZ2luVmFsdWVzIG1hcmdpblZh
bHVlc0ZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpOwogCiAgICAgdmlydHVhbCB2b2lkIHNjcm9s
bGJhcnNDaGFuZ2VkKGJvb2wgLypob3Jpem9udGFsU2Nyb2xsYmFyQ2hhbmdlZCovLCBib29sIC8q
dmVydGljYWxTY3JvbGxiYXJDaGFuZ2VkKi8pIHsgfTsKIAotICAgIGludCBsb2dpY2FsUmlnaHRP
ZmZzZXRGb3JDb250ZW50KCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSA/IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkgKyBhdmFpbGFibGVMb2dpY2FsV2lkdGgo
KSA6IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpICsgYXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7
IH0KLSAgICBpbnQgbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KCkgY29uc3QgeyByZXR1cm4g
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkg
OiBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKTsgfQorICAgIGZsb2F0IGxvZ2ljYWxSaWdodE9m
ZnNldEZvckNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ID8gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSArIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgp
IDogYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgKyBhdmFpbGFibGVMb2dpY2FsV2lkdGgoKTsg
fQorICAgIGZsb2F0IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpIGNvbnN0IHsgcmV0dXJu
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgp
IDogYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7IH0KIAogI2lmbmRlZiBOREVCVUcKICAgICB2
b2lkIHNob3dMaW5lVHJlZUFuZE1hcmsoY29uc3QgSW5saW5lQm94KiA9IDAsIGNvbnN0IGNoYXIq
ID0gMCwgY29uc3QgSW5saW5lQm94KiA9IDAsIGNvbnN0IGNoYXIqID0gMCwgY29uc3QgUmVuZGVy
T2JqZWN0KiA9IDApIGNvbnN0OwpAQCAtMjcxLDEzICsyNzEsMTMgQEAKICAgICB9CiAgICAgdm9p
ZCBtb3ZlQ2hpbGRyZW5UbyhSZW5kZXJCbG9jayogdG8sIFJlbmRlck9iamVjdCogc3RhcnRDaGls
ZCwgUmVuZGVyT2JqZWN0KiBlbmRDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgYm9v
bCBmdWxsUmVtb3ZlSW5zZXJ0ID0gZmFsc2UpOwogICAgIAotICAgIGludCBtYXhQb3NpdGl2ZU1h
cmdpbkJlZm9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX21h
cmdpbnMucG9zaXRpdmVNYXJnaW5CZWZvcmUoKSA6IFJlbmRlckJsb2NrUmFyZURhdGE6OnBvc2l0
aXZlTWFyZ2luQmVmb3JlRGVmYXVsdCh0aGlzKTsgfQotICAgIGludCBtYXhOZWdhdGl2ZU1hcmdp
bkJlZm9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX21hcmdp
bnMubmVnYXRpdmVNYXJnaW5CZWZvcmUoKSA6IFJlbmRlckJsb2NrUmFyZURhdGE6Om5lZ2F0aXZl
TWFyZ2luQmVmb3JlRGVmYXVsdCh0aGlzKTsgfQotICAgIGludCBtYXhQb3NpdGl2ZU1hcmdpbkFm
dGVyKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fbWFyZ2lucy5w
b3NpdGl2ZU1hcmdpbkFmdGVyKCkgOiBSZW5kZXJCbG9ja1JhcmVEYXRhOjpwb3NpdGl2ZU1hcmdp
bkFmdGVyRGVmYXVsdCh0aGlzKTsgfQotICAgIGludCBtYXhOZWdhdGl2ZU1hcmdpbkFmdGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fbWFyZ2lucy5uZWdhdGl2
ZU1hcmdpbkFmdGVyKCkgOiBSZW5kZXJCbG9ja1JhcmVEYXRhOjpuZWdhdGl2ZU1hcmdpbkFmdGVy
RGVmYXVsdCh0aGlzKTsgfQorICAgIGZsb2F0IG1heFBvc2l0aXZlTWFyZ2luQmVmb3JlKCkgY29u
c3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fbWFyZ2lucy5wb3NpdGl2ZU1h
cmdpbkJlZm9yZSgpIDogUmVuZGVyQmxvY2tSYXJlRGF0YTo6cG9zaXRpdmVNYXJnaW5CZWZvcmVE
ZWZhdWx0KHRoaXMpOyB9CisgICAgZmxvYXQgbWF4TmVnYXRpdmVNYXJnaW5CZWZvcmUoKSBjb25z
dCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9tYXJnaW5zLm5lZ2F0aXZlTWFy
Z2luQmVmb3JlKCkgOiBSZW5kZXJCbG9ja1JhcmVEYXRhOjpuZWdhdGl2ZU1hcmdpbkJlZm9yZURl
ZmF1bHQodGhpcyk7IH0KKyAgICBmbG9hdCBtYXhQb3NpdGl2ZU1hcmdpbkFmdGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fbWFyZ2lucy5wb3NpdGl2ZU1hcmdp
bkFmdGVyKCkgOiBSZW5kZXJCbG9ja1JhcmVEYXRhOjpwb3NpdGl2ZU1hcmdpbkFmdGVyRGVmYXVs
dCh0aGlzKTsgfQorICAgIGZsb2F0IG1heE5lZ2F0aXZlTWFyZ2luQWZ0ZXIoKSBjb25zdCB7IHJl
dHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9tYXJnaW5zLm5lZ2F0aXZlTWFyZ2luQWZ0
ZXIoKSA6IFJlbmRlckJsb2NrUmFyZURhdGE6Om5lZ2F0aXZlTWFyZ2luQWZ0ZXJEZWZhdWx0KHRo
aXMpOyB9CiAgICAgCi0gICAgdm9pZCBzZXRNYXhNYXJnaW5CZWZvcmVWYWx1ZXMoaW50IHBvcywg
aW50IG5lZyk7Ci0gICAgdm9pZCBzZXRNYXhNYXJnaW5BZnRlclZhbHVlcyhpbnQgcG9zLCBpbnQg
bmVnKTsKKyAgICB2b2lkIHNldE1heE1hcmdpbkJlZm9yZVZhbHVlcyhmbG9hdCBwb3MsIGZsb2F0
IG5lZyk7CisgICAgdm9pZCBzZXRNYXhNYXJnaW5BZnRlclZhbHVlcyhmbG9hdCBwb3MsIGZsb2F0
IG5lZyk7CiAKICAgICB2b2lkIGluaXRNYXhNYXJnaW5WYWx1ZXMoKQogICAgIHsKQEAgLTI5Miwx
MSArMjkyLDExIEBACiAKICAgICB2b2lkIGxheW91dFBvc2l0aW9uZWRPYmplY3RzKGJvb2wgcmVs
YXlvdXRDaGlsZHJlbik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29u
c3QgSW50UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwg
Y29uc3QgSW50UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29u
c3QgRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludE9iamVjdChQYWludEluZm8m
LCBjb25zdCBGbG9hdFBvaW50Jik7CiAKLSAgICBpbnQgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGlu
ZShpbnQgcG9zaXRpb24sIGludCBmaXhlZE9mZnNldCwgYm9vbCBhcHBseVRleHRJbmRlbnQgPSB0
cnVlLCBpbnQqIGxvZ2ljYWxIZWlnaHRSZW1haW5pbmcgPSAwKSBjb25zdDsKLSAgICBpbnQgbG9n
aWNhbExlZnRPZmZzZXRGb3JMaW5lKGludCBwb3NpdGlvbiwgaW50IGZpeGVkT2Zmc2V0LCBib29s
IGFwcGx5VGV4dEluZGVudCA9IHRydWUsIGludCogbG9naWNhbEhlaWdodFJlbWFpbmluZyA9IDAp
IGNvbnN0OworICAgIGZsb2F0IGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoZmxvYXQgcG9zaXRp
b24sIGZsb2F0IGZpeGVkT2Zmc2V0LCBib29sIGFwcGx5VGV4dEluZGVudCA9IHRydWUsIGZsb2F0
KiBsb2dpY2FsSGVpZ2h0UmVtYWluaW5nID0gMCkgY29uc3Q7CisgICAgZmxvYXQgbG9naWNhbExl
ZnRPZmZzZXRGb3JMaW5lKGZsb2F0IHBvc2l0aW9uLCBmbG9hdCBmaXhlZE9mZnNldCwgYm9vbCBh
cHBseVRleHRJbmRlbnQgPSB0cnVlLCBmbG9hdCogbG9naWNhbEhlaWdodFJlbWFpbmluZyA9IDAp
IGNvbnN0OwogCiAgICAgdmlydHVhbCBFVGV4dEFsaWduIHRleHRBbGlnbm1lbnRGb3JMaW5lKGJv
b2wgZW5kc1dpdGhTb2Z0QnJlYWspIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbmxp
bmVEaXJlY3Rpb25MaW5lQm91bmRzKGludCAvKiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ICov
LCBmbG9hdCYgLyogbG9naWNhbExlZnQgKi8sIGZsb2F0JiAvKiBsb2dpY2FsV2lkdGggKi8pIGNv
bnN0IHsgfQpAQCAtMzA1LDggKzMwNSw4IEBACiAKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKIAotICAgIHZpcnR1YWwgaW50IGZpcnN0TGluZUJveEJh
c2VsaW5lKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbGFzdExpbmVCb3hCYXNlbGluZSgpIGNv
bnN0OworICAgIHZpcnR1YWwgZmxvYXQgZmlyc3RMaW5lQm94QmFzZWxpbmUoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGZsb2F0IGxhc3RMaW5lQm94QmFzZWxpbmUoKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVIaXRUZXN0UmVzdWx0KEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2lu
dCYpOwogCkBAIC0zMjYsMjEgKzMyNiwyMSBAQAogICAgIGJvb2wgc2ltcGxpZmllZExheW91dCgp
OwogICAgIHZvaWQgc2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXQoKTsKIAotICAgIHZvaWQgY29t
cHV0ZU92ZXJmbG93KGludCBvbGRDbGllbnRBZnRlckVkZ2UsIGJvb2wgcmVjb21wdXRlRmxvYXRz
ID0gZmFsc2UpOworICAgIHZvaWQgY29tcHV0ZU92ZXJmbG93KGZsb2F0IG9sZENsaWVudEFmdGVy
RWRnZSwgYm9vbCByZWNvbXB1dGVGbG9hdHMgPSBmYWxzZSk7CiAgICAgdmlydHVhbCB2b2lkIGFk
ZE92ZXJmbG93RnJvbUNoaWxkcmVuKCk7CiAgICAgdm9pZCBhZGRPdmVyZmxvd0Zyb21GbG9hdHMo
KTsKICAgICB2b2lkIGFkZE92ZXJmbG93RnJvbVBvc2l0aW9uZWRPYmplY3RzKCk7CiAgICAgdm9p
ZCBhZGRPdmVyZmxvd0Zyb21CbG9ja0NoaWxkcmVuKCk7CiAgICAgdm9pZCBhZGRPdmVyZmxvd0Zy
b21JbmxpbmVDaGlsZHJlbigpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3Rz
KFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IEludFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIGFk
ZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKIAog
I2lmIEVOQUJMRShTVkcpCiAgICAgLy8gT25seSB1c2VkIGJ5IFJlbmRlclNWR1RleHQsIHdoaWNo
IGV4cGxpY2l0ZWx5IG92ZXJyaWRlcyBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soKSwgZG8gTk9U
IHVzZSBmb3IgYW55dGhpbmcgZWxzZS4KICAgICB2b2lkIGZvcmNlTGF5b3V0SW5saW5lQ2hpbGRy
ZW4oKQogICAgIHsKLSAgICAgICAgaW50IHJlcGFpbnRMb2dpY2FsVG9wID0gMDsKLSAgICAgICAg
aW50IHJlcGFpbnRMb2dpY2FsQm90dG9tID0gMDsKKyAgICAgICAgZmxvYXQgcmVwYWludExvZ2lj
YWxUb3AgPSAwOworICAgICAgICBmbG9hdCByZXBhaW50TG9naWNhbEJvdHRvbSA9IDA7CiAgICAg
ICAgIGxheW91dElubGluZUNoaWxkcmVuKHRydWUsIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50
TG9naWNhbEJvdHRvbSk7CiAgICAgfQogI2VuZGlmCkBAIC0zNjcsMTYgKzM2NywxNiBAQAogICAg
IAogICAgIHZpcnR1YWwgYm9vbCBpc1NlbGZDb2xsYXBzaW5nQmxvY2soKSBjb25zdDsKIAotICAg
IHZpcnR1YWwgaW50IGNvbGxhcHNlZE1hcmdpbkJlZm9yZSgpIGNvbnN0IHsgcmV0dXJuIG1heFBv
c2l0aXZlTWFyZ2luQmVmb3JlKCkgLSBtYXhOZWdhdGl2ZU1hcmdpbkJlZm9yZSgpOyB9Ci0gICAg
dmlydHVhbCBpbnQgY29sbGFwc2VkTWFyZ2luQWZ0ZXIoKSBjb25zdCB7IHJldHVybiBtYXhQb3Np
dGl2ZU1hcmdpbkFmdGVyKCkgLSBtYXhOZWdhdGl2ZU1hcmdpbkFmdGVyKCk7IH0KKyAgICB2aXJ0
dWFsIGZsb2F0IGNvbGxhcHNlZE1hcmdpbkJlZm9yZSgpIGNvbnN0IHsgcmV0dXJuIG1heFBvc2l0
aXZlTWFyZ2luQmVmb3JlKCkgLSBtYXhOZWdhdGl2ZU1hcmdpbkJlZm9yZSgpOyB9CisgICAgdmly
dHVhbCBmbG9hdCBjb2xsYXBzZWRNYXJnaW5BZnRlcigpIGNvbnN0IHsgcmV0dXJuIG1heFBvc2l0
aXZlTWFyZ2luQWZ0ZXIoKSAtIG1heE5lZ2F0aXZlTWFyZ2luQWZ0ZXIoKTsgfQogCiAgICAgdmly
dHVhbCB2b2lkIHJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cyhib29sIHBhaW50QWxsRGVzY2VuZGFu
dHMpOwogCi0gICAgdm9pZCBsYXlvdXRCbG9ja0NoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJl
biwgaW50JiBtYXhGbG9hdExvZ2ljYWxCb3R0b20pOwotICAgIHZvaWQgbGF5b3V0SW5saW5lQ2hp
bGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBpbnQmIHJlcGFpbnRMb2dpY2FsVG9wLCBpbnQm
IHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKKyAgICB2b2lkIGxheW91dEJsb2NrQ2hpbGRyZW4oYm9v
bCByZWxheW91dENoaWxkcmVuLCBmbG9hdCYgbWF4RmxvYXRMb2dpY2FsQm90dG9tKTsKKyAgICB2
b2lkIGxheW91dElubGluZUNoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgZmxvYXQmIHJl
cGFpbnRMb2dpY2FsVG9wLCBmbG9hdCYgcmVwYWludExvZ2ljYWxCb3R0b20pOwogICAgIEJpZGlS
dW4qIGhhbmRsZVRyYWlsaW5nU3BhY2VzKEJpZGlSdW5MaXN0PEJpZGlSdW4+JiwgQmlkaUNvbnRl
eHQqKTsKIAotICAgIHZpcnR1YWwgdm9pZCBib3JkZXJGaXRBZGp1c3QoSW50UmVjdCYpIGNvbnN0
OyAvLyBTaHJpbmsgdGhlIGJveCBpbiB3aGljaCB0aGUgYm9yZGVyIHBhaW50cyBpZiBib3JkZXIt
Zml0IGlzIHNldC4KKyAgICB2aXJ0dWFsIHZvaWQgYm9yZGVyRml0QWRqdXN0KEZsb2F0UmVjdCYp
IGNvbnN0OyAvLyBTaHJpbmsgdGhlIGJveCBpbiB3aGljaCB0aGUgYm9yZGVyIHBhaW50cyBpZiBi
b3JkZXItZml0IGlzIHNldC4KIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVCZWZvcmVBZnRlckNv
bnRlbnQoUHNldWRvSWQpOwogCkBAIC0zODgsMTMgKzM4OCwxMyBAQAogICAgIHN0cnVjdCBGbG9h
dFdpdGhSZWN0IHsKICAgICAgICAgRmxvYXRXaXRoUmVjdChSZW5kZXJCb3gqIGYpCiAgICAgICAg
ICAgICA6IG9iamVjdChmKQotICAgICAgICAgICAgLCByZWN0KEludFJlY3QoZi0+eCgpIC0gZi0+
bWFyZ2luTGVmdCgpLCBmLT55KCkgLSBmLT5tYXJnaW5Ub3AoKSwgZi0+d2lkdGgoKSArIGYtPm1h
cmdpbkxlZnQoKSArIGYtPm1hcmdpblJpZ2h0KCksIGYtPmhlaWdodCgpICsgZi0+bWFyZ2luVG9w
KCkgKyBmLT5tYXJnaW5Cb3R0b20oKSkpCisgICAgICAgICAgICAsIHJlY3QoRmxvYXRSZWN0KGYt
PngoKSAtIGYtPm1hcmdpbkxlZnQoKSwgZi0+eSgpIC0gZi0+bWFyZ2luVG9wKCksIGYtPndpZHRo
KCkgKyBmLT5tYXJnaW5MZWZ0KCkgKyBmLT5tYXJnaW5SaWdodCgpLCBmLT5oZWlnaHQoKSArIGYt
Pm1hcmdpblRvcCgpICsgZi0+bWFyZ2luQm90dG9tKCkpKQogICAgICAgICAgICAgLCBldmVySGFk
TGF5b3V0KGYtPm1fZXZlckhhZExheW91dCkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAg
ICAgUmVuZGVyQm94KiBvYmplY3Q7Ci0gICAgICAgIEludFJlY3QgcmVjdDsKKyAgICAgICAgRmxv
YXRSZWN0IHJlY3Q7CiAgICAgICAgIGJvb2wgZXZlckhhZExheW91dDsKICAgICB9OwogCkBAIC00
MTUsNyArNDE1LDcgQEAKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgRmxvYXRpbmdP
YmplY3QoVHlwZSB0eXBlLCBjb25zdCBJbnRSZWN0JiBmcmFtZVJlY3QpCisgICAgICAgIEZsb2F0
aW5nT2JqZWN0KFR5cGUgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiBmcmFtZVJlY3QpCiAgICAgICAg
ICAgICA6IG1fcmVuZGVyZXIoMCkKICAgICAgICAgICAgICwgbV9vcmlnaW5hdGluZ0xpbmUoMCkK
ICAgICAgICAgICAgICwgbV9mcmFtZVJlY3QoZnJhbWVSZWN0KQpAQCAtNDMzLDYwICs0MzMsNjAg
QEAKICAgICAgICAgYm9vbCBpc1BsYWNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNQbGFjZWQ7IH0K
ICAgICAgICAgdm9pZCBzZXRJc1BsYWNlZChib29sIHBsYWNlZCA9IHRydWUpIHsgbV9pc1BsYWNl
ZCA9IHBsYWNlZDsgfQogCi0gICAgICAgIGludCB4KCkgY29uc3QgeyBBU1NFUlQoaXNQbGFjZWQo
KSk7IHJldHVybiBtX2ZyYW1lUmVjdC54KCk7IH0KLSAgICAgICAgaW50IG1heFgoKSBjb25zdCB7
IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0Lm1heFgoKTsgfQotICAgICAg
ICBpbnQgeSgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9mcmFtZVJlY3Qu
eSgpOyB9Ci0gICAgICAgIGludCBtYXhZKCkgY29uc3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJl
dHVybiBtX2ZyYW1lUmVjdC5tYXhZKCk7IH0KLSAgICAgICAgaW50IHdpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZVJlY3Qud2lkdGgoKTsgfQotICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9mcmFtZVJlY3QuaGVpZ2h0KCk7IH0KKyAgICAgICAgZmxvYXQgeCgpIGNvbnN0
IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9mcmFtZVJlY3QueCgpOyB9CisgICAgICAg
IGZsb2F0IG1heFgoKSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVS
ZWN0Lm1heFgoKTsgfQorICAgICAgICBmbG9hdCB5KCkgY29uc3QgeyBBU1NFUlQoaXNQbGFjZWQo
KSk7IHJldHVybiBtX2ZyYW1lUmVjdC55KCk7IH0KKyAgICAgICAgZmxvYXQgbWF4WSgpIGNvbnN0
IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9mcmFtZVJlY3QubWF4WSgpOyB9CisgICAg
ICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3Qud2lkdGgoKTsgfQor
ICAgICAgICBmbG9hdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC5oZWlnaHQo
KTsgfQogCi0gICAgICAgIHZvaWQgc2V0WChpbnQgeCkgeyBtX2ZyYW1lUmVjdC5zZXRYKHgpOyB9
Ci0gICAgICAgIHZvaWQgc2V0WShpbnQgeSkgeyBtX2ZyYW1lUmVjdC5zZXRZKHkpOyB9Ci0gICAg
ICAgIHZvaWQgc2V0V2lkdGgoaW50IHdpZHRoKSB7IG1fZnJhbWVSZWN0LnNldFdpZHRoKHdpZHRo
KTsgfQotICAgICAgICB2b2lkIHNldEhlaWdodChpbnQgaGVpZ2h0KSB7IG1fZnJhbWVSZWN0LnNl
dEhlaWdodChoZWlnaHQpOyB9CisgICAgICAgIHZvaWQgc2V0WChmbG9hdCB4KSB7IG1fZnJhbWVS
ZWN0LnNldFgoeCk7IH0KKyAgICAgICAgdm9pZCBzZXRZKGZsb2F0IHkpIHsgbV9mcmFtZVJlY3Qu
c2V0WSh5KTsgfQorICAgICAgICB2b2lkIHNldFdpZHRoKGZsb2F0IHdpZHRoKSB7IG1fZnJhbWVS
ZWN0LnNldFdpZHRoKHdpZHRoKTsgfQorICAgICAgICB2b2lkIHNldEhlaWdodChmbG9hdCBoZWln
aHQpIHsgbV9mcmFtZVJlY3Quc2V0SGVpZ2h0KGhlaWdodCk7IH0KIAotICAgICAgICBjb25zdCBJ
bnRSZWN0JiBmcmFtZVJlY3QoKSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1f
ZnJhbWVSZWN0OyB9Ci0gICAgICAgIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIGZy
YW1lUmVjdCkgeyBtX2ZyYW1lUmVjdCA9IGZyYW1lUmVjdDsgfQorICAgICAgICBjb25zdCBGbG9h
dFJlY3QmIGZyYW1lUmVjdCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9m
cmFtZVJlY3Q7IH0KKyAgICAgICAgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBm
cmFtZVJlY3QpIHsgbV9mcmFtZVJlY3QgPSBmcmFtZVJlY3Q7IH0KIAogICAgICAgICBSZW5kZXJC
b3gqIG1fcmVuZGVyZXI7CiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIG1fb3JpZ2luYXRpbmdMaW5l
OwotICAgICAgICBJbnRSZWN0IG1fZnJhbWVSZWN0OwotICAgICAgICBpbnQgbV9wYWdpbmF0aW9u
U3RydXQ7CisgICAgICAgIEZsb2F0UmVjdCBtX2ZyYW1lUmVjdDsKKyAgICAgICAgZmxvYXQgbV9w
YWdpbmF0aW9uU3RydXQ7CiAgICAgICAgIHVuc2lnbmVkIG1fdHlwZSA6IDI7IC8vIFR5cGUgKGxl
ZnQgb3IgcmlnaHQgYWxpZ25lZCkKICAgICAgICAgYm9vbCBtX3Nob3VsZFBhaW50IDogMTsKICAg
ICAgICAgYm9vbCBtX2lzRGVzY2VuZGFudCA6IDE7CiAgICAgICAgIGJvb2wgbV9pc1BsYWNlZCA6
IDE7CiAgICAgfTsKIAotICAgIEludFBvaW50IGZsaXBGbG9hdEZvcldyaXRpbmdNb2RlKGNvbnN0
IEZsb2F0aW5nT2JqZWN0KiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICBGbG9hdFBvaW50
IGZsaXBGbG9hdEZvcldyaXRpbmdNb2RlKGNvbnN0IEZsb2F0aW5nT2JqZWN0KiwgY29uc3QgRmxv
YXRQb2ludCYpIGNvbnN0OwogCi0gICAgaW50IGxvZ2ljYWxUb3BGb3JGbG9hdChjb25zdCBGbG9h
dGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBjaGlsZC0+eSgpIDogY2hpbGQtPngoKTsgfQotICAgIGludCBsb2dpY2FsQm90dG9tRm9y
RmxvYXQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPm1heFkoKSA6IGNoaWxkLT5tYXhYKCk7IH0KLSAg
ICBpbnQgbG9naWNhbExlZnRGb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNv
bnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+eCgpIDogY2hp
bGQtPnkoKTsgfQotICAgIGludCBsb2dpY2FsUmlnaHRGb3JGbG9hdChjb25zdCBGbG9hdGluZ09i
amVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBj
aGlsZC0+bWF4WCgpIDogY2hpbGQtPm1heFkoKTsgfQotICAgIGludCBsb2dpY2FsV2lkdGhGb3JG
bG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+d2lkdGgoKSA6IGNoaWxkLT5oZWlnaHQoKTsgfQot
ICAgIHZvaWQgc2V0TG9naWNhbFRvcEZvckZsb2F0KEZsb2F0aW5nT2JqZWN0KiBjaGlsZCwgaW50
IGxvZ2ljYWxUb3ApCisgICAgZmxvYXQgbG9naWNhbFRvcEZvckZsb2F0KGNvbnN0IEZsb2F0aW5n
T2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/
IGNoaWxkLT55KCkgOiBjaGlsZC0+eCgpOyB9CisgICAgZmxvYXQgbG9naWNhbEJvdHRvbUZvckZs
b2F0KGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IGNoaWxkLT5tYXhZKCkgOiBjaGlsZC0+bWF4WCgpOyB9CisgICAg
ZmxvYXQgbG9naWNhbExlZnRGb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNv
bnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+eCgpIDogY2hp
bGQtPnkoKTsgfQorICAgIGZsb2F0IGxvZ2ljYWxSaWdodEZvckZsb2F0KGNvbnN0IEZsb2F0aW5n
T2JqZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/
IGNoaWxkLT5tYXhYKCkgOiBjaGlsZC0+bWF4WSgpOyB9CisgICAgZmxvYXQgbG9naWNhbFdpZHRo
Rm9yRmxvYXQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPndpZHRoKCkgOiBjaGlsZC0+aGVpZ2h0KCk7
IH0KKyAgICB2b2lkIHNldExvZ2ljYWxUb3BGb3JGbG9hdChGbG9hdGluZ09iamVjdCogY2hpbGQs
IGZsb2F0IGxvZ2ljYWxUb3ApCiAgICAgewogICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkKICAgICAgICAgICAgIGNoaWxkLT5zZXRZKGxvZ2ljYWxUb3ApOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBjaGlsZC0+c2V0WChsb2dpY2FsVG9wKTsKICAgICB9Ci0gICAgdm9p
ZCBzZXRMb2dpY2FsTGVmdEZvckZsb2F0KEZsb2F0aW5nT2JqZWN0KiBjaGlsZCwgaW50IGxvZ2lj
YWxMZWZ0KQorICAgIHZvaWQgc2V0TG9naWNhbExlZnRGb3JGbG9hdChGbG9hdGluZ09iamVjdCog
Y2hpbGQsIGZsb2F0IGxvZ2ljYWxMZWZ0KQogICAgIHsKICAgICAgICAgaWYgKGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICBjaGlsZC0+c2V0WChsb2dpY2FsTGVmdCk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIGNoaWxkLT5zZXRZKGxvZ2ljYWxMZWZ0KTsKICAgICB9
Ci0gICAgdm9pZCBzZXRMb2dpY2FsSGVpZ2h0Rm9yRmxvYXQoRmxvYXRpbmdPYmplY3QqIGNoaWxk
LCBpbnQgbG9naWNhbEhlaWdodCkKKyAgICB2b2lkIHNldExvZ2ljYWxIZWlnaHRGb3JGbG9hdChG
bG9hdGluZ09iamVjdCogY2hpbGQsIGZsb2F0IGxvZ2ljYWxIZWlnaHQpCiAgICAgewogICAgICAg
ICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgICAgIGNoaWxkLT5zZXRI
ZWlnaHQobG9naWNhbEhlaWdodCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNoaWxkLT5z
ZXRXaWR0aChsb2dpY2FsSGVpZ2h0KTsKICAgICB9Ci0gICAgdm9pZCBzZXRMb2dpY2FsV2lkdGhG
b3JGbG9hdChGbG9hdGluZ09iamVjdCogY2hpbGQsIGludCBsb2dpY2FsV2lkdGgpCisgICAgdm9p
ZCBzZXRMb2dpY2FsV2lkdGhGb3JGbG9hdChGbG9hdGluZ09iamVjdCogY2hpbGQsIGZsb2F0IGxv
Z2ljYWxXaWR0aCkKICAgICB7CiAgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KQogICAgICAgICAgICAgY2hpbGQtPnNldFdpZHRoKGxvZ2ljYWxXaWR0aCk7CkBAIC00OTQsNyAr
NDk0LDcgQEAKICAgICAgICAgICAgIGNoaWxkLT5zZXRIZWlnaHQobG9naWNhbFdpZHRoKTsKICAg
ICB9CiAKLSAgICBpbnQgeFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oY29uc3QgRmxv
YXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdAorICAgIGZsb2F0IHhQb3NpdGlvbkZvckZsb2F0SW5j
bHVkaW5nTWFyZ2luKGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBjaGlsZCkgY29uc3QKICAgICB7CiAg
ICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAgICAgICAgICAgcmV0dXJu
IGNoaWxkLT54KCkgKyBjaGlsZC0+cmVuZGVyZXIoKS0+bWFyZ2luTGVmdCgpOwpAQCAtNTAyLDcg
KzUwMiw3IEBACiAgICAgICAgICAgICByZXR1cm4gY2hpbGQtPngoKSArIG1hcmdpbkJlZm9yZUZv
ckNoaWxkKGNoaWxkLT5yZW5kZXJlcigpKTsKICAgICB9CiAgICAgICAgIAotICAgIGludCB5UG9z
aXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQp
IGNvbnN0CisgICAgZmxvYXQgeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oY29uc3Qg
RmxvYXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICByZXR1cm4gY2hpbGQtPnkoKSArIG1hcmdp
bkJlZm9yZUZvckNoaWxkKGNoaWxkLT5yZW5kZXJlcigpKTsKQEAgLTUzOSw4ICs1MzksOCBAQAog
CiAgICAgdm9pZCBjaGVja0Zsb2F0c0luQ2xlYW5MaW5lKFJvb3RJbmxpbmVCb3gqLCBWZWN0b3I8
RmxvYXRXaXRoUmVjdD4mLCBzaXplX3QmIGZsb2F0SW5kZXgsIGJvb2wmIGVuY291bnRlcmVkTmV3
RmxvYXQsIGJvb2wmIGRpcnRpZWRCeUZsb2F0KTsKICAgICBSb290SW5saW5lQm94KiBkZXRlcm1p
bmVTdGFydFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYsIExpbmVJbmZvJiwgSW5saW5lQmlkaVJl
c29sdmVyJiwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+JiwgdW5zaWduZWQmIG51bUNsZWFuRmxvYXRz
LCBib29sJiB1c2VSZXBhaW50Qm91bmRzKTsKLSAgICBSb290SW5saW5lQm94KiBkZXRlcm1pbmVF
bmRQb3NpdGlvbihSb290SW5saW5lQm94KiBzdGFydEJveCwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+
Jiwgc2l6ZV90IGZsb2F0SW5kZXgsIElubGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwgQmlk
aVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cywgaW50JiB5UG9zKTsKLSAgICBib29sIG1hdGNo
ZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYsIGNvbnN0IElubGluZUJpZGlSZXNvbHZlciYsIGNv
bnN0IElubGluZUl0ZXJhdG9yJiBlbmRMaW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMmIGVuZExp
bmVTdGF0dXMsIFJvb3RJbmxpbmVCb3gqJiBlbmRMaW5lLCBpbnQmIGVuZFlQb3MpOworICAgIFJv
b3RJbmxpbmVCb3gqIGRldGVybWluZUVuZFBvc2l0aW9uKFJvb3RJbmxpbmVCb3gqIHN0YXJ0Qm94
LCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mLCBzaXplX3QgZmxvYXRJbmRleCwgSW5saW5lSXRlcmF0
b3ImIGNsZWFuTGluZVN0YXJ0LCBCaWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzLCBmbG9h
dCYgeVBvcyk7CisgICAgYm9vbCBtYXRjaGVkRW5kTGluZShMaW5lTGF5b3V0U3RhdGUmLCBjb25z
dCBJbmxpbmVCaWRpUmVzb2x2ZXImLCBjb25zdCBJbmxpbmVJdGVyYXRvciYgZW5kTGluZVN0YXJ0
LCBjb25zdCBCaWRpU3RhdHVzJiBlbmRMaW5lU3RhdHVzLCBSb290SW5saW5lQm94KiYgZW5kTGlu
ZSwgZmxvYXQmIGVuZFlQb3MpOwogCiAgICAgUm9vdElubGluZUJveCogY29uc3RydWN0TGluZShC
aWRpUnVuTGlzdDxCaWRpUnVuPiYsIGNvbnN0IExpbmVJbmZvJik7CiAgICAgSW5saW5lRmxvd0Jv
eCogY3JlYXRlTGluZUJveGVzKFJlbmRlck9iamVjdCosIGNvbnN0IExpbmVJbmZvJiwgSW5saW5l
Qm94KiBjaGlsZEJveCk7CkBAIC01NTksMzQgKzU1OSwzNCBAQAogCiAgICAgLy8gRW5kIG9mIGZ1
bmN0aW9ucyBkZWZpbmVkIGluIFJlbmRlckJsb2NrTGluZUxheW91dC5jcHAuCiAKLSAgICB2b2lk
IHBhaW50RmxvYXRzKFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50JiwgYm9vbCBwcmVzZXJ2ZVBo
YXNlID0gZmFsc2UpOwotICAgIHZvaWQgcGFpbnRDb250ZW50cyhQYWludEluZm8mLCBjb25zdCBJ
bnRQb2ludCYpOwotICAgIHZvaWQgcGFpbnRDb2x1bW5Db250ZW50cyhQYWludEluZm8mLCBjb25z
dCBJbnRQb2ludCYsIGJvb2wgcGFpbnRGbG9hdHMgPSBmYWxzZSk7Ci0gICAgdm9pZCBwYWludENv
bHVtblJ1bGVzKFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7Ci0gICAgdm9pZCBwYWludENo
aWxkcmVuKFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7Ci0gICAgdm9pZCBwYWludEVsbGlw
c2lzQm94ZXMoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKLSAgICB2b2lkIHBhaW50U2Vs
ZWN0aW9uKFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7Ci0gICAgdm9pZCBwYWludENhcmV0
KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50JiwgQ2FyZXRUeXBlKTsKKyAgICB2b2lkIHBhaW50
RmxvYXRzKFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIHByZXNlcnZlUGhhc2Ug
PSBmYWxzZSk7CisgICAgdm9pZCBwYWludENvbnRlbnRzKFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0
UG9pbnQmKTsKKyAgICB2b2lkIHBhaW50Q29sdW1uQ29udGVudHMoUGFpbnRJbmZvJiwgY29uc3Qg
RmxvYXRQb2ludCYsIGJvb2wgcGFpbnRGbG9hdHMgPSBmYWxzZSk7CisgICAgdm9pZCBwYWludENv
bHVtblJ1bGVzKFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIHBhaW50
Q2hpbGRyZW4oUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZvaWQgcGFpbnRF
bGxpcHNpc0JveGVzKFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIHBh
aW50U2VsZWN0aW9uKFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIHBh
aW50Q2FyZXQoUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRQb2ludCYsIENhcmV0VHlwZSk7CiAKICAg
ICBGbG9hdGluZ09iamVjdCogaW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94Kik7CiAgICAg
dm9pZCByZW1vdmVGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqKTsKLSAgICB2b2lkIHJlbW92ZUZs
b2F0aW5nT2JqZWN0c0JlbG93KEZsb2F0aW5nT2JqZWN0KiwgaW50IGxvZ2ljYWxPZmZzZXQpOwor
ICAgIHZvaWQgcmVtb3ZlRmxvYXRpbmdPYmplY3RzQmVsb3coRmxvYXRpbmdPYmplY3QqLCBmbG9h
dCBsb2dpY2FsT2Zmc2V0KTsKICAgICAKICAgICAvLyBDYWxsZWQgZnJvbSBsaW5lV2lkdGgsIHRv
IHBvc2l0aW9uIHRoZSBmbG9hdHMgYWRkZWQgaW4gdGhlIGxhc3QgbGluZS4KICAgICAvLyBSZXR1
cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgaXQgaGFzIHBvc2l0aW9uZWQgYW55IGZsb2F0cy4KICAg
ICBib29sIHBvc2l0aW9uTmV3RmxvYXRzKCk7CiAKICAgICB2b2lkIGNsZWFyRmxvYXRzKCk7Ci0g
ICAgaW50IGdldENsZWFyRGVsdGEoUmVuZGVyQm94KiBjaGlsZCwgaW50IHlQb3MpOworICAgIGZs
b2F0IGdldENsZWFyRGVsdGEoUmVuZGVyQm94KiBjaGlsZCwgZmxvYXQgeVBvcyk7CiAKICAgICB2
aXJ0dWFsIGJvb2wgYXZvaWRzRmxvYXRzKCkgY29uc3Q7CiAKICAgICBib29sIGhhc092ZXJoYW5n
aW5nRmxvYXRzKCkgeyByZXR1cm4gcGFyZW50KCkgJiYgIWhhc0NvbHVtbnMoKSAmJiBjb250YWlu
c0Zsb2F0cygpICYmIGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSgpID4gbG9naWNhbEhlaWdodCgp
OyB9Ci0gICAgdm9pZCBhZGRJbnRydWRpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIHByZXYsIGludCB4
b2Zmc2V0LCBpbnQgeW9mZnNldCk7Ci0gICAgaW50IGFkZE92ZXJoYW5naW5nRmxvYXRzKFJlbmRl
ckJsb2NrKiBjaGlsZCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBib29sIG1ha2VDaGlsZFBh
aW50T3RoZXJGbG9hdHMpOworICAgIHZvaWQgYWRkSW50cnVkaW5nRmxvYXRzKFJlbmRlckJsb2Nr
KiBwcmV2LCBmbG9hdCB4b2Zmc2V0LCBmbG9hdCB5b2Zmc2V0KTsKKyAgICBmbG9hdCBhZGRPdmVy
aGFuZ2luZ0Zsb2F0cyhSZW5kZXJCbG9jayogY2hpbGQsIGZsb2F0IHhvZmZzZXQsIGZsb2F0IHlv
ZmZzZXQsIGJvb2wgbWFrZUNoaWxkUGFpbnRPdGhlckZsb2F0cyk7CiAKLSAgICBpbnQgbG93ZXN0
RmxvYXRMb2dpY2FsQm90dG9tKEZsb2F0aW5nT2JqZWN0OjpUeXBlID0gRmxvYXRpbmdPYmplY3Q6
OkZsb2F0Qm90aCkgY29uc3Q7Ci0gICAgaW50IG5leHRGbG9hdExvZ2ljYWxCb3R0b21CZWxvdyhp
bnQpIGNvbnN0OworICAgIGZsb2F0IGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbShGbG9hdGluZ09i
amVjdDo6VHlwZSA9IEZsb2F0aW5nT2JqZWN0OjpGbG9hdEJvdGgpIGNvbnN0OworICAgIGZsb2F0
IG5leHRGbG9hdExvZ2ljYWxCb3R0b21CZWxvdyhmbG9hdCkgY29uc3Q7CiAgICAgCiAgICAgdmly
dHVhbCBib29sIGhpdFRlc3RDb2x1bW5zKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogICAgIHZpcnR1YWwgYm9vbCBoaXRU
ZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCwgSGl0VGVzdEFjdGlvbik7CkBAIC02MDEsNDUgKzYwMSw0NSBAQAogICAgIC8vIGNoaWxk
cmVuLgogICAgIHZpcnR1YWwgUmVuZGVyQmxvY2sqIGZpcnN0TGluZUJsb2NrKCkgY29uc3Q7CiAK
LSAgICB2aXJ0dWFsIEludFJlY3QgcmVjdFdpdGhPdXRsaW5lRm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgaW50IG91dGxpbmVXaWR0aCk7CisgICAgdmly
dHVhbCBJbnRSZWN0IHJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIHJlcGFpbnRDb250YWluZXIsIGZsb2F0IG91dGxpbmVXaWR0aCk7CiAgICAgdmlydHVhbCBS
ZW5kZXJTdHlsZSogb3V0bGluZVN0eWxlRm9yUmVwYWludCgpIGNvbnN0OwogICAgIAogICAgIHZp
cnR1YWwgUmVuZGVyT2JqZWN0KiBob3ZlckFuY2VzdG9yKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZURyYWdTdGF0ZShib29sIGRyYWdPbik7CiAgICAgdmlydHVhbCB2b2lkIGNoaWxk
QmVjYW1lTm9uSW5saW5lKFJlbmRlck9iamVjdCogY2hpbGQpOwogCi0gICAgdmlydHVhbCBJbnRS
ZWN0IHNlbGVjdGlvblJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyLCBib29sIC8qY2xpcFRvVmlzaWJsZUNvbnRlbnQqLykKKyAgICB2aXJ0dWFsIEZs
b2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVw
YWludENvbnRhaW5lciwgYm9vbCAvKmNsaXBUb1Zpc2libGVDb250ZW50Ki8pCiAgICAgewogICAg
ICAgICByZXR1cm4gc2VsZWN0aW9uR2FwUmVjdHNGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIp
OwogICAgIH0KICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUGFpbnRTZWxlY3Rpb25HYXBzKCkgY29u
c3Q7CiAgICAgYm9vbCBpc1NlbGVjdGlvblJvb3QoKSBjb25zdDsKLSAgICBHYXBSZWN0cyBzZWxl
Y3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IEludFBvaW50JiByb290Qmxv
Y2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBsYXN0TG9naWNhbFRvcCwgaW50JiBsYXN0
TG9naWNhbExlZnQsIGludCYgbGFzdExvZ2ljYWxSaWdodCwgY29uc3QgUGFpbnRJbmZvKiA9IDAp
OwotICAgIEdhcFJlY3RzIGlubGluZVNlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9j
aywgY29uc3QgSW50UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IEludFNp
emUmIG9mZnNldEZyb21Sb290QmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQm
IGxhc3RMb2dpY2FsVG9wLCBpbnQmIGxhc3RMb2dpY2FsTGVmdCwgaW50JiBsYXN0TG9naWNhbFJp
Z2h0LCBjb25zdCBQYWludEluZm8qKTsKLSAgICBHYXBSZWN0cyBibG9ja1NlbGVjdGlvbkdhcHMo
UmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgSW50UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2Fs
UG9zaXRpb24sIGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQmIGxhc3RMb2dpY2FsVG9wLCBpbnQmIGxhc3RMb2dpY2FsTGVm
dCwgaW50JiBsYXN0TG9naWNhbFJpZ2h0LCBjb25zdCBQYWludEluZm8qKTsKLSAgICBJbnRSZWN0
IGJsb2NrU2VsZWN0aW9uR2FwKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IEludFBvaW50
JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9v
dEJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxhc3RMb2dpY2FsVG9w
LCBpbnQgbGFzdExvZ2ljYWxMZWZ0LCBpbnQgbGFzdExvZ2ljYWxSaWdodCwgaW50IGxvZ2ljYWxC
b3R0b20sIGNvbnN0IFBhaW50SW5mbyopOwotICAgIGludCBsb2dpY2FsTGVmdFNlbGVjdGlvbk9m
ZnNldChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBpbnQgcG9zaXRpb24pOwotICAgIGludCBsb2dp
Y2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IHBvc2l0
aW9uKTsKKyAgICBHYXBSZWN0cyBzZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ss
IGNvbnN0IEZsb2F0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IEZsb2F0
U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZs
b2F0JiBsYXN0TG9naWNhbFRvcCwgZmxvYXQmIGxhc3RMb2dpY2FsTGVmdCwgZmxvYXQmIGxhc3RM
b2dpY2FsUmlnaHQsIGNvbnN0IFBhaW50SW5mbyogPSAwKTsKKyAgICBHYXBSZWN0cyBpbmxpbmVT
ZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IEZsb2F0UG9pbnQmIHJv
b3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RC
bG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0JiBsYXN0TG9naWNhbFRvcCwg
ZmxvYXQmIGxhc3RMb2dpY2FsTGVmdCwgZmxvYXQmIGxhc3RMb2dpY2FsUmlnaHQsIGNvbnN0IFBh
aW50SW5mbyopOworICAgIEdhcFJlY3RzIGJsb2NrU2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayog
cm9vdEJsb2NrLCBjb25zdCBGbG9hdFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBj
b25zdCBGbG9hdFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmbG9hdCYgbGFzdExvZ2ljYWxUb3AsIGZsb2F0JiBsYXN0TG9naWNhbExlZnQsIGZs
b2F0JiBsYXN0TG9naWNhbFJpZ2h0LCBjb25zdCBQYWludEluZm8qKTsKKyAgICBGbG9hdFJlY3Qg
YmxvY2tTZWxlY3Rpb25HYXAoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgRmxvYXRQb2lu
dCYgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXRGcm9t
Um9vdEJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAgbGFzdExv
Z2ljYWxUb3AsIGZsb2F0IGxhc3RMb2dpY2FsTGVmdCwgZmxvYXQgbGFzdExvZ2ljYWxSaWdodCwg
ZmxvYXQgbG9naWNhbEJvdHRvbSwgY29uc3QgUGFpbnRJbmZvKik7CisgICAgZmxvYXQgbG9naWNh
bExlZnRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgZmxvYXQgcG9zaXRp
b24pOworICAgIGZsb2F0IGxvZ2ljYWxSaWdodFNlbGVjdGlvbk9mZnNldChSZW5kZXJCbG9jayog
cm9vdEJsb2NrLCBmbG9hdCBwb3NpdGlvbik7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGFic29s
dXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0KTsKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYp
OwogCi0gICAgaW50IGRlc2lyZWRDb2x1bW5XaWR0aCgpIGNvbnN0OworICAgIGZsb2F0IGRlc2ly
ZWRDb2x1bW5XaWR0aCgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGRlc2lyZWRDb2x1bW5Db3VudCgp
IGNvbnN0OwotICAgIHZvaWQgc2V0RGVzaXJlZENvbHVtbkNvdW50QW5kV2lkdGgoaW50IGNvdW50
LCBpbnQgd2lkdGgpOworICAgIHZvaWQgc2V0RGVzaXJlZENvbHVtbkNvdW50QW5kV2lkdGgoaW50
IGNvdW50LCBmbG9hdCB3aWR0aCk7CiAKLSAgICB2b2lkIHBhaW50Q29udGludWF0aW9uT3V0bGlu
ZXMoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICB2b2lkIHBhaW50Q29udGludWF0
aW9uT3V0bGluZXMoUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRQb2ludCYpOwogCiAgICAgdmlydHVh
bCBJbnRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9mZnNldCwgaW50
KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKTsKIAotICAgIHZvaWQgYWRqdXN0UG9pbnRUb0Nv
bHVtbkNvbnRlbnRzKEludFBvaW50JikgY29uc3Q7Ci0gICAgdm9pZCBhZGp1c3RGb3JCb3JkZXJG
aXQoaW50IHgsIGludCYgbGVmdCwgaW50JiByaWdodCkgY29uc3Q7IC8vIEhlbHBlciBmdW5jdGlv
biBmb3IgYm9yZGVyRml0QWRqdXN0CisgICAgdm9pZCBhZGp1c3RQb2ludFRvQ29sdW1uQ29udGVu
dHMoRmxvYXRQb2ludCYpIGNvbnN0OworICAgIHZvaWQgYWRqdXN0Rm9yQm9yZGVyRml0KGZsb2F0
IHgsIGZsb2F0JiBsZWZ0LCBmbG9hdCYgcmlnaHQpIGNvbnN0OyAvLyBIZWxwZXIgZnVuY3Rpb24g
Zm9yIGJvcmRlckZpdEFkanVzdAogCi0gICAgdm9pZCBtYXJrTGluZXNEaXJ0eUluQmxvY2tSYW5n
ZShpbnQgbG9naWNhbFRvcCwgaW50IGxvZ2ljYWxCb3R0b20sIFJvb3RJbmxpbmVCb3gqIGhpZ2hl
c3QgPSAwKTsKKyAgICB2b2lkIG1hcmtMaW5lc0RpcnR5SW5CbG9ja1JhbmdlKGZsb2F0IGxvZ2lj
YWxUb3AsIGZsb2F0IGxvZ2ljYWxCb3R0b20sIFJvb3RJbmxpbmVCb3gqIGhpZ2hlc3QgPSAwKTsK
IAogICAgIHZvaWQgbmV3TGluZShFQ2xlYXIpOwogCkBAIC02NDcsMTAgKzY0NywxMCBAQAogICAg
IFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKGNvbnN0
IEludFBvaW50Jik7CiAKICAgICAvLyBBZGp1c3QgZnJvbSBwYWludGluZyBvZmZzZXRzIHRvIHRo
ZSBsb2NhbCBjb29yZHMgb2YgdGhpcyByZW5kZXJlcgotICAgIHZvaWQgb2Zmc2V0Rm9yQ29udGVu
dHMoSW50UG9pbnQmKSBjb25zdDsKKyAgICB2b2lkIG9mZnNldEZvckNvbnRlbnRzKEZsb2F0UG9p
bnQmKSBjb25zdDsKIAogICAgIHZvaWQgY2FsY0NvbHVtbldpZHRoKCk7Ci0gICAgYm9vbCBsYXlv
dXRDb2x1bW5zKGJvb2wgaGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQsIGludCBwYWdlTG9n
aWNhbEhlaWdodCwgTGF5b3V0U3RhdGVNYWludGFpbmVyJik7CisgICAgYm9vbCBsYXlvdXRDb2x1
bW5zKGJvb2wgaGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQsIGZsb2F0IHBhZ2VMb2dpY2Fs
SGVpZ2h0LCBMYXlvdXRTdGF0ZU1haW50YWluZXImKTsKICAgICB2b2lkIG1ha2VDaGlsZHJlbkFu
b255bW91c0NvbHVtbkJsb2NrcyhSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBSZW5kZXJCbG9j
ayogbmV3QmxvY2tCb3gsIFJlbmRlck9iamVjdCogbmV3Q2hpbGQpOwogCiAgICAgYm9vbCBleHBh
bmRzVG9FbmNsb3NlT3ZlcmhhbmdpbmdGbG9hdHMoKSBjb25zdDsKQEAgLTY5NCwxMSArNjk0LDEx
IEBACiAgICAgICAgIGJvb2wgbV9kZXRlcm1pbmVkTWFyZ2luQmVmb3JlUXVpcmsgOiAxOwogCiAg
ICAgICAgIC8vIFRoZXNlIGZsYWdzIHRyYWNrIHRoZSBwcmV2aW91cyBtYXhpbWFsIHBvc2l0aXZl
IGFuZCBuZWdhdGl2ZSBtYXJnaW5zLgotICAgICAgICBpbnQgbV9wb3NpdGl2ZU1hcmdpbjsKLSAg
ICAgICAgaW50IG1fbmVnYXRpdmVNYXJnaW47CisgICAgICAgIGZsb2F0IG1fcG9zaXRpdmVNYXJn
aW47CisgICAgICAgIGZsb2F0IG1fbmVnYXRpdmVNYXJnaW47CiAKICAgICBwdWJsaWM6Ci0gICAg
ICAgIE1hcmdpbkluZm8oUmVuZGVyQmxvY2sqIGIsIGludCBiZWZvcmVCb3JkZXJQYWRkaW5nLCBp
bnQgYWZ0ZXJCb3JkZXJQYWRkaW5nKTsKKyAgICAgICAgTWFyZ2luSW5mbyhSZW5kZXJCbG9jayog
YiwgZmxvYXQgYmVmb3JlQm9yZGVyUGFkZGluZywgZmxvYXQgYWZ0ZXJCb3JkZXJQYWRkaW5nKTsK
IAogICAgICAgICB2b2lkIHNldEF0QmVmb3JlU2lkZU9mQmxvY2soYm9vbCBiKSB7IG1fYXRCZWZv
cmVTaWRlT2ZCbG9jayA9IGI7IH0KICAgICAgICAgdm9pZCBzZXRBdEFmdGVyU2lkZU9mQmxvY2so
Ym9vbCBiKSB7IG1fYXRBZnRlclNpZGVPZkJsb2NrID0gYjsgfQpAQCAtNzA2LDEyICs3MDYsMTIg
QEAKICAgICAgICAgdm9pZCBzZXRNYXJnaW5CZWZvcmVRdWlyayhib29sIGIpIHsgbV9tYXJnaW5C
ZWZvcmVRdWlyayA9IGI7IH0KICAgICAgICAgdm9pZCBzZXRNYXJnaW5BZnRlclF1aXJrKGJvb2wg
YikgeyBtX21hcmdpbkFmdGVyUXVpcmsgPSBiOyB9CiAgICAgICAgIHZvaWQgc2V0RGV0ZXJtaW5l
ZE1hcmdpbkJlZm9yZVF1aXJrKGJvb2wgYikgeyBtX2RldGVybWluZWRNYXJnaW5CZWZvcmVRdWly
ayA9IGI7IH0KLSAgICAgICAgdm9pZCBzZXRQb3NpdGl2ZU1hcmdpbihpbnQgcCkgeyBtX3Bvc2l0
aXZlTWFyZ2luID0gcDsgfQotICAgICAgICB2b2lkIHNldE5lZ2F0aXZlTWFyZ2luKGludCBuKSB7
IG1fbmVnYXRpdmVNYXJnaW4gPSBuOyB9Ci0gICAgICAgIHZvaWQgc2V0UG9zaXRpdmVNYXJnaW5J
ZkxhcmdlcihpbnQgcCkgeyBpZiAocCA+IG1fcG9zaXRpdmVNYXJnaW4pIG1fcG9zaXRpdmVNYXJn
aW4gPSBwOyB9Ci0gICAgICAgIHZvaWQgc2V0TmVnYXRpdmVNYXJnaW5JZkxhcmdlcihpbnQgbikg
eyBpZiAobiA+IG1fbmVnYXRpdmVNYXJnaW4pIG1fbmVnYXRpdmVNYXJnaW4gPSBuOyB9CisgICAg
ICAgIHZvaWQgc2V0UG9zaXRpdmVNYXJnaW4oZmxvYXQgcCkgeyBtX3Bvc2l0aXZlTWFyZ2luID0g
cDsgfQorICAgICAgICB2b2lkIHNldE5lZ2F0aXZlTWFyZ2luKGZsb2F0IG4pIHsgbV9uZWdhdGl2
ZU1hcmdpbiA9IG47IH0KKyAgICAgICAgdm9pZCBzZXRQb3NpdGl2ZU1hcmdpbklmTGFyZ2VyKGZs
b2F0IHApIHsgaWYgKHAgPiBtX3Bvc2l0aXZlTWFyZ2luKSBtX3Bvc2l0aXZlTWFyZ2luID0gcDsg
fQorICAgICAgICB2b2lkIHNldE5lZ2F0aXZlTWFyZ2luSWZMYXJnZXIoZmxvYXQgbikgeyBpZiAo
biA+IG1fbmVnYXRpdmVNYXJnaW4pIG1fbmVnYXRpdmVNYXJnaW4gPSBuOyB9CiAKLSAgICAgICAg
dm9pZCBzZXRNYXJnaW4oaW50IHAsIGludCBuKSB7IG1fcG9zaXRpdmVNYXJnaW4gPSBwOyBtX25l
Z2F0aXZlTWFyZ2luID0gbjsgfQorICAgICAgICB2b2lkIHNldE1hcmdpbihmbG9hdCBwLCBmbG9h
dCBuKSB7IG1fcG9zaXRpdmVNYXJnaW4gPSBwOyBtX25lZ2F0aXZlTWFyZ2luID0gbjsgfQogCiAg
ICAgICAgIGJvb2wgYXRCZWZvcmVTaWRlT2ZCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYXRCZWZv
cmVTaWRlT2ZCbG9jazsgfQogICAgICAgICBib29sIGNhbkNvbGxhcHNlV2l0aE1hcmdpbkJlZm9y
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXRCZWZvcmVTaWRlT2ZCbG9jayAmJiBtX2NhbkNvbGxhcHNl
TWFyZ2luQmVmb3JlV2l0aENoaWxkcmVuOyB9CkBAIC03MjIsMjMgKzcyMiwyMyBAQAogICAgICAg
ICBib29sIGRldGVybWluZWRNYXJnaW5CZWZvcmVRdWlyaygpIGNvbnN0IHsgcmV0dXJuIG1fZGV0
ZXJtaW5lZE1hcmdpbkJlZm9yZVF1aXJrOyB9CiAgICAgICAgIGJvb2wgbWFyZ2luQmVmb3JlUXVp
cmsoKSBjb25zdCB7IHJldHVybiBtX21hcmdpbkJlZm9yZVF1aXJrOyB9CiAgICAgICAgIGJvb2wg
bWFyZ2luQWZ0ZXJRdWlyaygpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2luQWZ0ZXJRdWlyazsgfQot
ICAgICAgICBpbnQgcG9zaXRpdmVNYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aXZlTWFy
Z2luOyB9Ci0gICAgICAgIGludCBuZWdhdGl2ZU1hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbmVn
YXRpdmVNYXJnaW47IH0KLSAgICAgICAgaW50IG1hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9z
aXRpdmVNYXJnaW4gLSBtX25lZ2F0aXZlTWFyZ2luOyB9CisgICAgICAgIGZsb2F0IHBvc2l0aXZl
TWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGl2ZU1hcmdpbjsgfQorICAgICAgICBmbG9h
dCBuZWdhdGl2ZU1hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbmVnYXRpdmVNYXJnaW47IH0KKyAg
ICAgICAgZmxvYXQgbWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGl2ZU1hcmdpbiAtIG1f
bmVnYXRpdmVNYXJnaW47IH0KICAgICB9OwogCi0gICAgdm9pZCBsYXlvdXRCbG9ja0NoaWxkKFJl
bmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mLCBpbnQmIHByZXZpb3VzRmxvYXRMb2dpY2FsQm90
dG9tLCBpbnQmIG1heEZsb2F0TG9naWNhbEJvdHRvbSk7CisgICAgdm9pZCBsYXlvdXRCbG9ja0No
aWxkKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mLCBmbG9hdCYgcHJldmlvdXNGbG9hdExv
Z2ljYWxCb3R0b20sIGZsb2F0JiBtYXhGbG9hdExvZ2ljYWxCb3R0b20pOwogICAgIHZvaWQgYWRq
dXN0UG9zaXRpb25lZEJsb2NrKFJlbmRlckJveCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mKTsK
ICAgICB2b2lkIGFkanVzdEZsb2F0aW5nQmxvY2soY29uc3QgTWFyZ2luSW5mbyYpOwogICAgIGJv
b2wgaGFuZGxlU3BlY2lhbENoaWxkKFJlbmRlckJveCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8m
KTsKICAgICBib29sIGhhbmRsZUZsb2F0aW5nQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgY29uc3Qg
TWFyZ2luSW5mbyYpOwogICAgIGJvb2wgaGFuZGxlUG9zaXRpb25lZENoaWxkKFJlbmRlckJveCog
Y2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mKTsKICAgICBib29sIGhhbmRsZVJ1bkluQ2hpbGQoUmVu
ZGVyQm94KiBjaGlsZCk7Ci0gICAgaW50IGNvbGxhcHNlTWFyZ2lucyhSZW5kZXJCb3gqIGNoaWxk
LCBNYXJnaW5JbmZvJik7Ci0gICAgaW50IGNsZWFyRmxvYXRzSWZOZWVkZWQoUmVuZGVyQm94KiBj
aGlsZCwgTWFyZ2luSW5mbyYsIGludCBvbGRUb3BQb3NNYXJnaW4sIGludCBvbGRUb3BOZWdNYXJn
aW4sIGludCB5UG9zKTsKLSAgICBpbnQgZXN0aW1hdGVMb2dpY2FsVG9wUG9zaXRpb24oUmVuZGVy
Qm94KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYpOworICAgIGZsb2F0IGNvbGxhcHNlTWFyZ2lu
cyhSZW5kZXJCb3gqIGNoaWxkLCBNYXJnaW5JbmZvJik7CisgICAgZmxvYXQgY2xlYXJGbG9hdHNJ
Zk5lZWRlZChSZW5kZXJCb3gqIGNoaWxkLCBNYXJnaW5JbmZvJiwgZmxvYXQgb2xkVG9wUG9zTWFy
Z2luLCBmbG9hdCBvbGRUb3BOZWdNYXJnaW4sIGZsb2F0IHlQb3MpOworICAgIGZsb2F0IGVzdGlt
YXRlTG9naWNhbFRvcFBvc2l0aW9uKFJlbmRlckJveCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8m
KTsKICAgICB2b2lkIGRldGVybWluZUxvZ2ljYWxMZWZ0UG9zaXRpb25Gb3JDaGlsZChSZW5kZXJC
b3gqIGNoaWxkKTsKLSAgICB2b2lkIGhhbmRsZUFmdGVyU2lkZU9mQmxvY2soaW50IHRvcCwgaW50
IGJvdHRvbSwgTWFyZ2luSW5mbyYpOworICAgIHZvaWQgaGFuZGxlQWZ0ZXJTaWRlT2ZCbG9jayhm
bG9hdCB0b3AsIGZsb2F0IGJvdHRvbSwgTWFyZ2luSW5mbyYpOwogICAgIHZvaWQgc2V0Q29sbGFw
c2VkQm90dG9tTWFyZ2luKGNvbnN0IE1hcmdpbkluZm8mKTsKICAgICAvLyBFbmQgaGVscGVyIGZ1
bmN0aW9ucyBhbmQgc3RydWN0cyB1c2VkIGJ5IGxheW91dEJsb2NrQ2hpbGRyZW4uCiAKQEAgLTc0
NywxMCArNzQ3LDEwIEBACiAgICAgdm9pZCBsYXlvdXRSdW5zQW5kRmxvYXRzKExpbmVMYXlvdXRT
dGF0ZSYsIGJvb2wgaGFzSW5saW5lQ2hpbGQsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYpOwogCiAg
ICAgLy8gUGFnaW5hdGlvbiByb3V0aW5lcy4KLSAgICBpbnQgbmV4dFBhZ2VMb2dpY2FsVG9wKGlu
dCBsb2dpY2FsT2Zmc2V0KSBjb25zdDsgLy8gUmV0dXJucyB0aGUgdG9wIG9mIHRoZSBuZXh0IHBh
Z2UgZm9sbG93aW5nIGxvZ2ljYWxPZmZzZXQuCi0gICAgaW50IGFwcGx5QmVmb3JlQnJlYWsoUmVu
ZGVyQm94KiBjaGlsZCwgaW50IGxvZ2ljYWxPZmZzZXQpOyAvLyBJZiB0aGUgY2hpbGQgaGFzIGEg
YmVmb3JlIGJyZWFrLCB0aGVuIHJldHVybiBhIG5ldyB5UG9zIHRoYXQgc2hpZnRzIHRvIHRoZSB0
b3Agb2YgdGhlIG5leHQgcGFnZS9jb2x1bW4uCi0gICAgaW50IGFwcGx5QWZ0ZXJCcmVhayhSZW5k
ZXJCb3gqIGNoaWxkLCBpbnQgbG9naWNhbE9mZnNldCwgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbyk7
IC8vIElmIHRoZSBjaGlsZCBoYXMgYW4gYWZ0ZXIgYnJlYWssIHRoZW4gcmV0dXJuIGEgbmV3IG9m
ZnNldCB0aGF0IHNoaWZ0cyB0byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UvY29sdW1uLgotICAg
IGludCBhZGp1c3RGb3JVbnNwbGl0dGFibGVDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBpbnQgbG9n
aWNhbE9mZnNldCwgYm9vbCBpbmNsdWRlTWFyZ2lucyA9IGZhbHNlKTsgLy8gSWYgdGhlIGNoaWxk
IGlzIHVuc3BsaXR0YWJsZSBhbmQgY2FuJ3QgZml0IG9uIHRoZSBjdXJyZW50IHBhZ2UsIHJldHVy
biB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UvY29sdW1uLgorICAgIGZsb2F0IG5leHRQYWdlTG9n
aWNhbFRvcChmbG9hdCBsb2dpY2FsT2Zmc2V0KSBjb25zdDsgLy8gUmV0dXJucyB0aGUgdG9wIG9m
IHRoZSBuZXh0IHBhZ2UgZm9sbG93aW5nIGxvZ2ljYWxPZmZzZXQuCisgICAgZmxvYXQgYXBwbHlC
ZWZvcmVCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBmbG9hdCBsb2dpY2FsT2Zmc2V0KTsgLy8gSWYg
dGhlIGNoaWxkIGhhcyBhIGJlZm9yZSBicmVhaywgdGhlbiByZXR1cm4gYSBuZXcgeVBvcyB0aGF0
IHNoaWZ0cyB0byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UvY29sdW1uLgorICAgIGZsb2F0IGFw
cGx5QWZ0ZXJCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBmbG9hdCBsb2dpY2FsT2Zmc2V0LCBNYXJn
aW5JbmZvJiBtYXJnaW5JbmZvKTsgLy8gSWYgdGhlIGNoaWxkIGhhcyBhbiBhZnRlciBicmVhaywg
dGhlbiByZXR1cm4gYSBuZXcgb2Zmc2V0IHRoYXQgc2hpZnRzIHRvIHRoZSB0b3Agb2YgdGhlIG5l
eHQgcGFnZS9jb2x1bW4uCisgICAgZmxvYXQgYWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoUmVu
ZGVyQm94KiBjaGlsZCwgZmxvYXQgbG9naWNhbE9mZnNldCwgYm9vbCBpbmNsdWRlTWFyZ2lucyA9
IGZhbHNlKTsgLy8gSWYgdGhlIGNoaWxkIGlzIHVuc3BsaXR0YWJsZSBhbmQgY2FuJ3QgZml0IG9u
IHRoZSBjdXJyZW50IHBhZ2UsIHJldHVybiB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UvY29sdW1u
LgogICAgIHZvaWQgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihSb290SW5saW5lQm94
KiwgaW50JiBkZWx0YU9mZnNldCk7IC8vIENvbXB1dGVzIGEgZGVsdGFPZmZzZXQgdmFsdWUgdGhh
dCBwdXQgYSBsaW5lIGF0IHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZSBpZiBpdCBkb2Vzbid0IGZp
dCBvbiB0aGUgY3VycmVudCBwYWdlLgogCiAgICAgc3RydWN0IEZsb2F0aW5nT2JqZWN0SGFzaEZ1
bmN0aW9ucyB7CkBAIC04MDAsMjcgKzgwMCwyNyBAQAogICAgICAgICB7IAogICAgICAgICB9CiAK
LSAgICAgICAgc3RhdGljIGludCBwb3NpdGl2ZU1hcmdpbkJlZm9yZURlZmF1bHQoY29uc3QgUmVu
ZGVyQmxvY2sqIGJsb2NrKQorICAgICAgICBzdGF0aWMgZmxvYXQgcG9zaXRpdmVNYXJnaW5CZWZv
cmVEZWZhdWx0KGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaykKICAgICAgICAgeyAKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1heChibG9jay0+bWFyZ2luQmVmb3JlKCksIDApOworICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWF4KGJsb2NrLT5tYXJnaW5CZWZvcmUoKSwgMC4wZik7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyBpbnQgbmVnYXRpdmVNYXJnaW5CZWZvcmVEZWZh
dWx0KGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaykKKyAgICAgICAgc3RhdGljIGZsb2F0IG5lZ2F0
aXZlTWFyZ2luQmVmb3JlRGVmYXVsdChjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCiAgICAgICAg
IHsgCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptYXgoLWJsb2NrLT5tYXJnaW5CZWZvcmUoKSwg
MCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYXgoLWJsb2NrLT5tYXJnaW5CZWZvcmUoKSwg
MC4wZik7CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGljIGludCBwb3NpdGl2ZU1hcmdpbkFmdGVy
RGVmYXVsdChjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCisgICAgICAgIHN0YXRpYyBmbG9hdCBw
b3NpdGl2ZU1hcmdpbkFmdGVyRGVmYXVsdChjb25zdCBSZW5kZXJCbG9jayogYmxvY2spCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heChibG9jay0+bWFyZ2luQWZ0ZXIoKSwg
MCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYXgoYmxvY2stPm1hcmdpbkFmdGVyKCksIDAu
MGYpOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBpbnQgbmVnYXRpdmVNYXJnaW5BZnRlckRl
ZmF1bHQoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQorICAgICAgICBzdGF0aWMgZmxvYXQgbmVn
YXRpdmVNYXJnaW5BZnRlckRlZmF1bHQoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYXgoLWJsb2NrLT5tYXJnaW5BZnRlcigpLCAw
KTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heCgtYmxvY2stPm1hcmdpbkFmdGVyKCksIDAu
MGYpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBNYXJnaW5WYWx1ZXMgbV9tYXJnaW5z
OwotICAgICAgICBpbnQgbV9wYWdpbmF0aW9uU3RydXQ7Ci0gICAgICAgIGludCBtX3BhZ2VMb2dp
Y2FsT2Zmc2V0OworICAgICAgICBmbG9hdCBtX3BhZ2luYXRpb25TdHJ1dDsKKyAgICAgICAgZmxv
YXQgbV9wYWdlTG9naWNhbE9mZnNldDsKICAgICAgfTsKIAogICAgIE93blB0cjxSZW5kZXJCbG9j
a1JhcmVEYXRhPiBtX3JhcmVEYXRhOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZpZWxkc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmllbGRzZXQuY3BwCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCwxMiArMTE4
LDEyIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUmVuZGVyRmllbGRzZXQ6OnBhaW50Qm94
RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9m
ZnNldCkKK3ZvaWQgUmVuZGVyRmllbGRzZXQ6OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIGlmICgh
cGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCh0aGlzKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgSW50UmVjdCBwYWludFJlY3QocGFpbnRPZmZzZXQsIHNpemUoKSk7CisgICAgSW50UmVj
dCBwYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludE9mZnNldCwgc2l6ZSgpKSk7CiAgICAg
UmVuZGVyQm94KiBsZWdlbmQgPSBmaW5kTGVnZW5kKCk7CiAgICAgaWYgKCFsZWdlbmQpCiAgICAg
ICAgIHJldHVybiBSZW5kZXJCbG9jazo6cGFpbnRCb3hEZWNvcmF0aW9ucyhwYWludEluZm8sIHBh
aW50T2Zmc2V0KTsKQEAgLTE1NiwyNCArMTU2LDI0IEBACiAgICAgLy8gY2FzZXMgdGhlIGxlZ2Vu
ZCBpcyBlbWJlZGRlZCBpbiB0aGUgcmlnaHQgYW5kIGJvdHRvbSBib3JkZXJzIHJlc3BlY3RpdmVs
eS4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcyMzYK
ICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewotICAgICAgICBp
bnQgY2xpcFRvcCA9IHBhaW50UmVjdC55KCk7Ci0gICAgICAgIGludCBjbGlwSGVpZ2h0ID0gbWF4
KHN0YXRpY19jYXN0PGludD4oc3R5bGUoKS0+Ym9yZGVyVG9wV2lkdGgoKSksIGxlZ2VuZC0+aGVp
Z2h0KCkpOwotICAgICAgICBncmFwaGljc0NvbnRleHQtPmNsaXBPdXQoSW50UmVjdChwYWludFJl
Y3QueCgpICsgbGVnZW5kLT54KCksIGNsaXBUb3AsIGxlZ2VuZC0+d2lkdGgoKSwgY2xpcEhlaWdo
dCkpOworICAgICAgICBmbG9hdCBjbGlwVG9wID0gcGFpbnRSZWN0LnkoKTsKKyAgICAgICAgZmxv
YXQgY2xpcEhlaWdodCA9IG1heCgoZmxvYXQpc3R5bGUoKS0+Ym9yZGVyVG9wV2lkdGgoKSwgbGVn
ZW5kLT5oZWlnaHQoKSk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcE91dChlbmNsb3Np
bmdJbnRSZWN0KEZsb2F0UmVjdChwYWludFJlY3QueCgpICsgbGVnZW5kLT54KCksIGNsaXBUb3As
IGxlZ2VuZC0+d2lkdGgoKSwgY2xpcEhlaWdodCkpKTsKICAgICB9IGVsc2UgewotICAgICAgICBp
bnQgY2xpcExlZnQgPSBwYWludFJlY3QueCgpOwotICAgICAgICBpbnQgY2xpcFdpZHRoID0gbWF4
KHN0YXRpY19jYXN0PGludD4oc3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCkpLCBsZWdlbmQtPndp
ZHRoKCkpOwotICAgICAgICBncmFwaGljc0NvbnRleHQtPmNsaXBPdXQoSW50UmVjdChjbGlwTGVm
dCwgcGFpbnRSZWN0LnkoKSArIGxlZ2VuZC0+eSgpLCBjbGlwV2lkdGgsIGxlZ2VuZC0+aGVpZ2h0
KCkpKTsKKyAgICAgICAgZmxvYXQgY2xpcExlZnQgPSBwYWludFJlY3QueCgpOworICAgICAgICBm
bG9hdCBjbGlwV2lkdGggPSBtYXgoKGZsb2F0KXN0eWxlKCktPmJvcmRlckxlZnRXaWR0aCgpLCBs
ZWdlbmQtPndpZHRoKCkpOworICAgICAgICBncmFwaGljc0NvbnRleHQtPmNsaXBPdXQoZW5jbG9z
aW5nSW50UmVjdChGbG9hdFJlY3QoY2xpcExlZnQsIHBhaW50UmVjdC55KCkgKyBsZWdlbmQtPnko
KSwgY2xpcFdpZHRoLCBsZWdlbmQtPmhlaWdodCgpKSkpOwogICAgIH0KIAogICAgIHBhaW50Qm9y
ZGVyKHBhaW50SW5mby5jb250ZXh0LCBwYWludFJlY3QsIHN0eWxlKCkpOwogfQogCi12b2lkIFJl
bmRlckZpZWxkc2V0OjpwYWludE1hc2soUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBv
aW50JiBwYWludE9mZnNldCkKK3ZvaWQgUmVuZGVyRmllbGRzZXQ6OnBhaW50TWFzayhQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaWYg
KHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8IHBhaW50SW5mby5waGFzZSAhPSBQ
YWludFBoYXNlTWFzaykKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50UmVjdCBwYWludFJlY3Qg
PSBJbnRSZWN0KHBhaW50T2Zmc2V0LCBzaXplKCkpOworICAgIEZsb2F0UmVjdCBwYWludFJlY3Qg
PSBGbG9hdFJlY3QocGFpbnRPZmZzZXQsIHNpemUoKSk7CiAgICAgUmVuZGVyQm94KiBsZWdlbmQg
PSBmaW5kTGVnZW5kKCk7CiAgICAgaWYgKCFsZWdlbmQpCiAgICAgICAgIHJldHVybiBSZW5kZXJC
bG9jazo6cGFpbnRNYXNrKHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiA4ODQ5NikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzMiw3ICsyMzIsNyBAQAogICAgIHJldHVybiBtX2J1dHRvblRleHQgPyBtX2J1dHRv
blRleHQtPnRleHQoKSA6IDA7CiB9CiAKLUludFJlY3QgUmVuZGVyTWVudUxpc3Q6OmNvbnRyb2xD
bGlwUmVjdChjb25zdCBJbnRQb2ludCYgYWRkaXRpb25hbE9mZnNldCkgY29uc3QKK0ludFJlY3Qg
UmVuZGVyTWVudUxpc3Q6OmNvbnRyb2xDbGlwUmVjdChjb25zdCBGbG9hdFBvaW50JiBhZGRpdGlv
bmFsT2Zmc2V0KSBjb25zdAogewogICAgIC8vIENsaXAgdG8gdGhlIGludGVyc2VjdGlvbiBvZiB0
aGUgY29udGVudCBib3ggYW5kIHRoZSBjb250ZW50IGJveCBmb3IgdGhlIGlubmVyIGJveAogICAg
IC8vIFRoaXMgd2lsbCBsZWF2ZSByb29tIGZvciB0aGUgYXJyb3dzIHdoaWNoIHNpdCBpbiB0aGUg
aW5uZXIgYm94IHBhZGRpbmcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuY3BwCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDcgKzE2NCw3IEBACiAgICAgfQogfQog
Ci12b2lkIFJlbmRlclZpZXc6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQ
b2ludCYgcGFpbnRPZmZzZXQpCit2b2lkIFJlbmRlclZpZXc6OnBhaW50KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICAvLyBJZiB3ZSBl
dmVyIHJlcXVpcmUgbGF5b3V0IGJ1dCByZWNlaXZlIGEgcGFpbnQgYW55d2F5LCBzb21ldGhpbmcg
aGFzIGdvbmUgaG9ycmlibHkgd3JvbmcuCiAgICAgQVNTRVJUKCFuZWVkc0xheW91dCgpKTsKQEAg
LTE4NCw3ICsxODQsNyBAQAogICAgICAgICAmJiAhaXNDb21wb3NpdGVkKG9iamVjdCk7CiB9CiAg
ICAgCi12b2lkIFJlbmRlclZpZXc6OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFBvaW50JikKK3ZvaWQgUmVuZGVyVmlldzo6cGFpbnRCb3hEZWNvcmF0
aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQb2ludCYpCiB7CiAgICAgLy8g
Q2hlY2sgdG8gc2VlIGlmIHdlIGFyZSBlbmNsb3NlZCBieSBhIGxheWVyIHRoYXQgcmVxdWlyZXMg
Y29tcGxleCBwYWludGluZyBydWxlcy4gIElmIHNvLCB3ZSBjYW5ub3QgYmxpdAogICAgIC8vIHdo
ZW4gc2Nyb2xsaW5nLCBhbmQgd2UgbmVlZCB0byB1c2Ugc2xvdyByZXBhaW50cy4gIEV4YW1wbGVz
IG9mIGxheWVycyB0aGF0IHJlcXVpcmUgdGhpcyBhcmUgdHJhbnNwYXJlbnQgbGF5ZXJzLApAQCAt
Mjk1LDcgKzI5NSw3IEBACiAjZW5kaWYKIH0KIAotdm9pZCBSZW5kZXJWaWV3Ojpjb21wdXRlUmVj
dEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJl
Y3QmIHJlY3QsIGJvb2wgZml4ZWQpCit2b2lkIFJlbmRlclZpZXc6OmNvbXB1dGVSZWN0Rm9yUmVw
YWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgRmxvYXRSZWN0JiBy
ZWN0LCBib29sIGZpeGVkKQogewogICAgIC8vIElmIGEgY29udGFpbmVyIHdhcyBzcGVjaWZpZWQs
IGFuZCB3YXMgbm90IDAgb3IgdGhlIFJlbmRlclZpZXcsCiAgICAgLy8gdGhlbiB3ZSBzaG91bGQg
aGF2ZSBmb3VuZCBpdCBieSBub3cuCkBAIC03MzksNyArNzM5LDcgQEAKICAgICB9CiAKICAgICAv
LyBQcmVmZXIgdGhlIHdpZGVzdCBvYmplY3QgdGhhdCB0cmllcyB0byBtb3ZlIHRoZSBwYWdpbmF0
aW9uIHBvaW50Ci0gICAgSW50UmVjdCBib3VuZGluZ0JveCA9IGZvclJlbmRlcmVyLT5ib3JkZXJC
b3VuZGluZ0JveCgpOworICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IGZvclJlbmRlcmVyLT5i
b3JkZXJCb3VuZGluZ0JveCgpOwogICAgIGlmIChib3VuZGluZ0JveC53aWR0aCgpID4gbV9sZWdh
Y3lQcmludGluZy5tX3RydW5jYXRvcldpZHRoKSB7CiAgICAgICAgIG1fbGVnYWN5UHJpbnRpbmcu
bV90cnVuY2F0b3JXaWR0aCA9IGJvdW5kaW5nQm94LndpZHRoKCk7CiAgICAgICAgIG1fbGVnYWN5
UHJpbnRpbmcubV9iZXN0VHJ1bmNhdGVkQXQgPSB5OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0dhcFJlY3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0dhcFJlY3RzLmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0dhcFJlY3RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDIzICsyMywyMyBAQAogI2lmbmRlZiBH
YXBSZWN0c19oCiAjZGVmaW5lIEdhcFJlY3RzX2gKIAotI2luY2x1ZGUgIkludFJlY3QuaCIKKyNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgc3RydWN0
IEdhcFJlY3RzIHsKLSAgICAgICAgY29uc3QgSW50UmVjdCYgbGVmdCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGVmdDsgfQotICAgICAgICBjb25zdCBJbnRSZWN0JiBjZW50ZXIoKSBjb25zdCB7IHJldHVy
biBtX2NlbnRlcjsgfQotICAgICAgICBjb25zdCBJbnRSZWN0JiByaWdodCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmlnaHQ7IH0KKyAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBsZWZ0KCkgY29uc3QgeyBy
ZXR1cm4gbV9sZWZ0OyB9CisgICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgY2VudGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9jZW50ZXI7IH0KKyAgICAgICAgY29uc3QgRmxvYXRSZWN0JiByaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmlnaHQ7IH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgdW5pdGVMZWZ0
KGNvbnN0IEludFJlY3QmIHIpIHsgbV9sZWZ0LnVuaXRlKHIpOyB9Ci0gICAgICAgIHZvaWQgdW5p
dGVDZW50ZXIoY29uc3QgSW50UmVjdCYgcikgeyBtX2NlbnRlci51bml0ZShyKTsgfQotICAgICAg
ICB2b2lkIHVuaXRlUmlnaHQoY29uc3QgSW50UmVjdCYgcikgeyBtX3JpZ2h0LnVuaXRlKHIpOyB9
CisgICAgICAgIHZvaWQgdW5pdGVMZWZ0KGNvbnN0IEZsb2F0UmVjdCYgcikgeyBtX2xlZnQudW5p
dGUocik7IH0KKyAgICAgICAgdm9pZCB1bml0ZUNlbnRlcihjb25zdCBGbG9hdFJlY3QmIHIpIHsg
bV9jZW50ZXIudW5pdGUocik7IH0KKyAgICAgICAgdm9pZCB1bml0ZVJpZ2h0KGNvbnN0IEZsb2F0
UmVjdCYgcikgeyBtX3JpZ2h0LnVuaXRlKHIpOyB9CiAgICAgICAgIHZvaWQgdW5pdGUoY29uc3Qg
R2FwUmVjdHMmIG8pIHsgdW5pdGVMZWZ0KG8ubGVmdCgpKTsgdW5pdGVDZW50ZXIoby5jZW50ZXIo
KSk7IHVuaXRlUmlnaHQoby5yaWdodCgpKTsgfQogCi0gICAgICAgIG9wZXJhdG9yIEludFJlY3Qo
KSBjb25zdAorICAgICAgICBvcGVyYXRvciBGbG9hdFJlY3QoKSBjb25zdAogICAgICAgICB7Ci0g
ICAgICAgICAgICBJbnRSZWN0IHJlc3VsdCA9IG1fbGVmdDsKKyAgICAgICAgICAgIEZsb2F0UmVj
dCByZXN1bHQgPSBtX2xlZnQ7CiAgICAgICAgICAgICByZXN1bHQudW5pdGUobV9jZW50ZXIpOwog
ICAgICAgICAgICAgcmVzdWx0LnVuaXRlKG1fcmlnaHQpOwogICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKQEAgLTUyLDkgKzUyLDkgQEAKICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEdh
cFJlY3RzJiBvdGhlcikgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIEludFJlY3QgbV9sZWZ0OwotICAgICAgICBJbnRSZWN0IG1fY2VudGVyOwot
ICAgICAgICBJbnRSZWN0IG1fcmlnaHQ7CisgICAgICAgIEZsb2F0UmVjdCBtX2xlZnQ7CisgICAg
ICAgIEZsb2F0UmVjdCBtX2NlbnRlcjsKKyAgICAgICAgRmxvYXRSZWN0IG1fcmlnaHQ7CiAgICAg
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0xheW91dFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTGF5b3V0U3RhdGUuY3BwCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1MYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoTGF5b3V0
U3RhdGUqIHByZXYsIFJlbmRlckJveCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIG9mZnNldCwg
aW50IHBhZ2VMb2dpY2FsSGVpZ2h0LCBib29sIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCwgQ29s
dW1uSW5mbyogY29sdW1uSW5mbykKK0xheW91dFN0YXRlOjpMYXlvdXRTdGF0ZShMYXlvdXRTdGF0
ZSogcHJldiwgUmVuZGVyQm94KiByZW5kZXJlciwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZs
b2F0IHBhZ2VMb2dpY2FsSGVpZ2h0LCBib29sIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCwgQ29s
dW1uSW5mbyogY29sdW1uSW5mbykKICAgICA6IG1fY29sdW1uSW5mbyhjb2x1bW5JbmZvKQogICAg
ICwgbV9uZXh0KHByZXYpCiAjaWZuZGVmIE5ERUJVRwpAQCAtNjksNyArNjksNyBAQAogCiAgICAg
aWYgKHJlbmRlcmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBSZW5kZXJMYXllciog
bGF5ZXIgPSByZW5kZXJlci0+bGF5ZXIoKTsKLSAgICAgICAgSW50UmVjdCBjbGlwUmVjdCh0b1Bv
aW50KG1fcGFpbnRPZmZzZXQpICsgcmVuZGVyZXItPnZpZXcoKS0+bGF5b3V0RGVsdGEoKSwgbGF5
ZXItPnNpemUoKSk7CisgICAgICAgIEludFJlY3QgY2xpcFJlY3QoZW5jbG9zaW5nSW50UmVjdCh0
b1BvaW50KG1fcGFpbnRPZmZzZXQpICsgcmVuZGVyZXItPnZpZXcoKS0+bGF5b3V0RGVsdGEoKSwg
RmxvYXRTaXplKGxheWVyLT5zaXplKCkpKSk7CiAgICAgICAgIGlmIChtX2NsaXBwZWQpCiAgICAg
ICAgICAgICBtX2NsaXBSZWN0LmludGVyc2VjdChjbGlwUmVjdCk7CiAgICAgICAgIGVsc2UgewpA
QCAtMTAyLDYgKzEwMiw3IEBACiAgICAgICAgIG1fY29sdW1uSW5mbyA9IG1fbmV4dC0+bV9jb2x1
bW5JbmZvOwogCiAgICAgbV9sYXlvdXREZWx0YSA9IG1fbmV4dC0+bV9sYXlvdXREZWx0YTsKKyAg
ICBBU1NFUlQobV9sYXlvdXREZWx0YS5oZWlnaHQoKSA+IC0xMDAwMCAmJiBtX2xheW91dERlbHRh
LmhlaWdodCgpIDwgMTAwMDAgJiYgbV9sYXlvdXREZWx0YS53aWR0aCgpID4gLTEwMDAwICYmIG1f
bGF5b3V0RGVsdGEud2lkdGgoKSA8IDEwMDAwKTsgCiAgICAgCiAgICAgLy8gRklYTUU6IDxodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ0Mz4gQXBwbHkgY29udHJvbCBj
bGlwIGlmIHByZXNlbnQuCiB9CkBAIC0xMjMsNyArMTI0LDcgQEAKICAgICBpZiAoY29udGFpbmVy
LT5oYXNPdmVyZmxvd0NsaXAoKSkgewogICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSB0b1Jl
bmRlckJveE1vZGVsT2JqZWN0KGNvbnRhaW5lciktPmxheWVyKCk7CiAgICAgICAgIG1fY2xpcHBl
ZCA9IHRydWU7Ci0gICAgICAgIG1fY2xpcFJlY3QgPSBJbnRSZWN0KHRvUG9pbnQobV9wYWludE9m
ZnNldCksIGxheWVyLT5zaXplKCkpOworICAgICAgICBtX2NsaXBSZWN0ID0gSW50UmVjdChlbmNs
b3NpbmdJbnRSZWN0KHRvUG9pbnQobV9wYWludE9mZnNldCksIEZsb2F0U2l6ZShsYXllci0+c2l6
ZSgpKSkpOwogICAgICAgICBtX3BhaW50T2Zmc2V0IC09IGxheWVyLT5zY3JvbGxlZENvbnRlbnRP
ZmZzZXQoKTsKICAgICB9CiB9CkBAIC0xNjIsMTIgKzE2MywxMiBAQAogICAgIG1fY29sdW1uSW5m
byA9IG1fbmV4dC0+bV9jb2x1bW5JbmZvOwogfQogCi1pbnQgTGF5b3V0U3RhdGU6OnBhZ2VMb2dp
Y2FsT2Zmc2V0KGludCBjaGlsZExvZ2ljYWxPZmZzZXQpIGNvbnN0CitmbG9hdCBMYXlvdXRTdGF0
ZTo6cGFnZUxvZ2ljYWxPZmZzZXQoZmxvYXQgY2hpbGRMb2dpY2FsT2Zmc2V0KSBjb25zdAogewog
ICAgIHJldHVybiBtX2xheW91dE9mZnNldC5oZWlnaHQoKSArIGNoaWxkTG9naWNhbE9mZnNldCAt
IG1fcGFnZU9mZnNldC5oZWlnaHQoKTsKIH0KIAotdm9pZCBMYXlvdXRTdGF0ZTo6YWRkRm9yY2Vk
Q29sdW1uQnJlYWsoaW50IGNoaWxkTG9naWNhbE9mZnNldCkKK3ZvaWQgTGF5b3V0U3RhdGU6OmFk
ZEZvcmNlZENvbHVtbkJyZWFrKGZsb2F0IGNoaWxkTG9naWNhbE9mZnNldCkKIHsKICAgICBpZiAo
IW1fY29sdW1uSW5mbyB8fCBtX2NvbHVtbkluZm8tPmNvbHVtbkhlaWdodCgpKQogICAgICAgICBy
ZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2Vy
LmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RNYXJrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQAogCiAgICAgdmlydHVh
bCBib29sIGlzTGlzdE1hcmtlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1
YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOworICAgIHZpcnR1YWwg
dm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBGbG9hdFBvaW50Jik7CiAKICAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0KCk7CiAKQEAgLTU4LDE0ICs1OCwxNCBAQAogCiAgICAgdmlydHVhbCBJbmxp
bmVCb3gqIGNyZWF0ZUlubGluZUJveCgpOwogCi0gICAgdmlydHVhbCBpbnQgbGluZUhlaWdodChi
b29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3Np
dGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9z
aXRpb24oRm9udEJhc2VsaW5lLCBib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExp
bmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0OworICAgIHZp
cnR1YWwgZmxvYXQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUs
IExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0OworICAg
IHZpcnR1YWwgZmxvYXQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RM
aW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250
YWluaW5nTGluZSkgY29uc3Q7CiAKICAgICBib29sIGlzSW1hZ2UoKSBjb25zdDsKICAgICBib29s
IGlzVGV4dCgpIGNvbnN0IHsgcmV0dXJuICFpc0ltYWdlKCk7IH0KIAogICAgIHZpcnR1YWwgdm9p
ZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSk7Ci0gICAgdmlydHVhbCBJbnRSZWN0
IHNlbGVjdGlvblJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29u
dGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSk7CisgICAgdmlydHVhbCBG
bG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJl
cGFpbnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKTsKICAgICB2
aXJ0dWFsIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgdm9pZCB1cGRhdGVNYXJnaW5zKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvQXV0b1RhYmxlTGF5b3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0F1dG9UYWJsZUxheW91dC5oCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIs
NyBAQAogICAgIHZvaWQgZnVsbFJlY2FsYygpOwogICAgIHZvaWQgcmVjYWxjQ29sdW1uKGludCBl
ZmZDb2wpOwogCi0gICAgaW50IGNhbGNFZmZlY3RpdmVMb2dpY2FsV2lkdGgoKTsKKyAgICBmbG9h
dCBjYWxjRWZmZWN0aXZlTG9naWNhbFdpZHRoKCk7CiAKICAgICB2b2lkIGluc2VydFNwYW5DZWxs
KFJlbmRlclRhYmxlQ2VsbCopOwogCkBAIC01OSwxMSArNTksMTEgQEAKIAogICAgICAgICBMZW5n
dGggbG9naWNhbFdpZHRoOwogICAgICAgICBMZW5ndGggZWZmZWN0aXZlTG9naWNhbFdpZHRoOwot
ICAgICAgICBpbnQgbWluTG9naWNhbFdpZHRoOwotICAgICAgICBpbnQgbWF4TG9naWNhbFdpZHRo
OwotICAgICAgICBpbnQgZWZmZWN0aXZlTWluTG9naWNhbFdpZHRoOwotICAgICAgICBpbnQgZWZm
ZWN0aXZlTWF4TG9naWNhbFdpZHRoOwotICAgICAgICBpbnQgY29tcHV0ZWRMb2dpY2FsV2lkdGg7
CisgICAgICAgIGZsb2F0IG1pbkxvZ2ljYWxXaWR0aDsKKyAgICAgICAgZmxvYXQgbWF4TG9naWNh
bFdpZHRoOworICAgICAgICBmbG9hdCBlZmZlY3RpdmVNaW5Mb2dpY2FsV2lkdGg7CisgICAgICAg
IGZsb2F0IGVmZmVjdGl2ZU1heExvZ2ljYWxXaWR0aDsKKyAgICAgICAgZmxvYXQgY29tcHV0ZWRM
b2dpY2FsV2lkdGg7CiAgICAgICAgIGJvb2wgZW1wdHlDZWxsc09ubHk7CiAgICAgfTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgJKHJldmlzaW9uIDg4
NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDExICszNSwxMSBAQAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCBsYXlvdXQoKTsKIAotICAgIHZpcnR1YWwgSW50U2l6ZSBpbnRyaW5zaWNTaXplKCkgY29uc3Q7
CisgICAgdmlydHVhbCBGbG9hdFNpemUgaW50cmluc2ljU2l6ZSgpIGNvbnN0OwogCi0gICAgdmly
dHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRo
ID0gdHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhl
aWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IG1pbmltdW1SZXBsYWNlZEhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGZsb2F0IGNvbXB1dGVSZXBsYWNlZExvZ2lj
YWxXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCA9IHRydWUpIGNvbnN0OworICAgIHZpcnR1YWwg
ZmxvYXQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwg
ZmxvYXQgbWluaW11bVJlcGxhY2VkSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAg
dmlydHVhbCB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlKTsKIApAQCAtNDcs
MTIgKzQ3LDEyIEBACiAKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZm
ZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCi0gICAgdm9pZCBzZXRJbnRy
aW5zaWNTaXplKGNvbnN0IEludFNpemUmKTsKKyAgICB2b2lkIHNldEludHJpbnNpY1NpemUoY29u
c3QgRmxvYXRTaXplJik7CiAgICAgdmlydHVhbCB2b2lkIGludHJpbnNpY1NpemVDaGFuZ2VkKCk7
CiAgICAgdm9pZCBzZXRIYXNJbnRyaW5zaWNTaXplKCkgeyBtX2hhc0ludHJpbnNpY1NpemUgPSB0
cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9p
bnQmKTsKLSAgICBib29sIHNob3VsZFBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7
CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmKTsK
KyAgICBib29sIHNob3VsZFBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKICAg
ICBJbnRSZWN0IGxvY2FsU2VsZWN0aW9uUmVjdChib29sIGNoZWNrV2hldGhlclNlbGVjdGVkID0g
dHJ1ZSkgY29uc3Q7IC8vIFRoaXMgaXMgaW4gbG9jYWwgY29vcmRpbmF0ZXMsIGJ1dCBpdCdzIGEg
cGh5c2ljYWwgcmVjdCAoc28gdGhlIHRvcCBsZWZ0IGNvcm5lciBpcyBwaHlzaWNhbCB0b3AgbGVm
dCkuCiAKIHByaXZhdGU6CkBAIC02MiwyMSArNjIsMjEgQEAKIAogICAgIHZpcnR1YWwgdm9pZCBj
b21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogCi0gICAgaW50IGNhbGNBc3BlY3RSYXRp
b0xvZ2ljYWxXaWR0aCgpIGNvbnN0OwotICAgIGludCBjYWxjQXNwZWN0UmF0aW9Mb2dpY2FsSGVp
Z2h0KCkgY29uc3Q7CisgICAgZmxvYXQgY2FsY0FzcGVjdFJhdGlvTG9naWNhbFdpZHRoKCkgY29u
c3Q7CisgICAgZmxvYXQgY2FsY0FzcGVjdFJhdGlvTG9naWNhbEhlaWdodCgpIGNvbnN0OwogCi0g
ICAgdmlydHVhbCB2b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQm
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZXBsYWNlZChQYWludEluZm8mLCBjb25zdCBG
bG9hdFBvaW50JikgeyB9CiAKLSAgICB2aXJ0dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVj
dEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpOworICAg
IHZpcnR1YWwgRmxvYXRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJv
eE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsKIAogICAgIHZpcnR1YWwgdW5zaWduZWQg
Y2FyZXRNYXhSZW5kZXJlZE9mZnNldCgpIGNvbnN0OwogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0
aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKICAgICAKICAgICB2aXJ0dWFs
IGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAg
dmlydHVhbCBJbnRSZWN0IHNlbGVjdGlvblJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSk7
CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQg
PSB0cnVlKTsKIAotICAgIEludFNpemUgbV9pbnRyaW5zaWNTaXplOworICAgIEZsb2F0U2l6ZSBt
X2ludHJpbnNpY1NpemU7CiAgICAgYm9vbCBtX2hhc0ludHJpbnNpY1NpemU7CiB9OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA4
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjE1LDcgKzIxNSw3IEBACiBpbnQgUmVuZGVyTGlzdEJveDo6bnVtVmlz
aWJsZUl0ZW1zKCkgY29uc3QKIHsKICAgICAvLyBPbmx5IGNvdW50IGZ1bGx5IHZpc2libGUgcm93
cy4gQnV0IGRvbid0IHJldHVybiAwIGV2ZW4gaWYgb25seSBwYXJ0IG9mIGEgcm93IHNob3dzLgot
ICAgIHJldHVybiBtYXgoMSwgKGNvbnRlbnRIZWlnaHQoKSArIHJvd1NwYWNpbmcpIC8gaXRlbUhl
aWdodCgpKTsKKyAgICByZXR1cm4gbWF4KDEuMGYsIChjb250ZW50SGVpZ2h0KCkgKyByb3dTcGFj
aW5nKSAvIGl0ZW1IZWlnaHQoKSk7CiB9CiAKIGludCBSZW5kZXJMaXN0Qm94OjpudW1JdGVtcygp
IGNvbnN0CkBAIC0yNDcsMTkgKzI0NywxOSBAQAogICAgIH0KIH0KIAotaW50IFJlbmRlckxpc3RC
b3g6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSwgYm9vbCBmaXJz
dExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGxpbmVEaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUg
bGluZVBvc2l0aW9uTW9kZSkgY29uc3QKK2Zsb2F0IFJlbmRlckxpc3RCb3g6OmJhc2VsaW5lUG9z
aXRpb24oRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJl
Y3Rpb25Nb2RlIGxpbmVEaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUgbGluZVBvc2l0aW9uTW9k
ZSkgY29uc3QKIHsKICAgICByZXR1cm4gUmVuZGVyQm94OjpiYXNlbGluZVBvc2l0aW9uKGJhc2Vs
aW5lVHlwZSwgZmlyc3RMaW5lLCBsaW5lRGlyZWN0aW9uLCBsaW5lUG9zaXRpb25Nb2RlKSAtIGJh
c2VsaW5lQWRqdXN0bWVudDsKIH0KIAotSW50UmVjdCBSZW5kZXJMaXN0Qm94OjppdGVtQm91bmRp
bmdCb3hSZWN0KGNvbnN0IEludFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0LCBpbnQgaW5kZXgpCitJ
bnRSZWN0IFJlbmRlckxpc3RCb3g6Oml0ZW1Cb3VuZGluZ0JveFJlY3QoY29uc3QgRmxvYXRQb2lu
dCYgYWRkaXRpb25hbE9mZnNldCwgaW50IGluZGV4KQogewogICAgIHJldHVybiBJbnRSZWN0KGFk
ZGl0aW9uYWxPZmZzZXQueCgpICsgYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSwKICAgICAg
ICAgICAgICAgICAgICBhZGRpdGlvbmFsT2Zmc2V0LnkoKSArIGJvcmRlclRvcCgpICsgcGFkZGlu
Z1RvcCgpICsgaXRlbUhlaWdodCgpICogKGluZGV4IC0gbV9pbmRleE9mZnNldCksCiAgICAgICAg
ICAgICAgICAgICAgY29udGVudFdpZHRoKCksIGl0ZW1IZWlnaHQoKSk7CiB9CiAgICAgCi12b2lk
IFJlbmRlckxpc3RCb3g6OnBhaW50T2JqZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRQb2ludCYgcGFpbnRPZmZzZXQpCit2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50T2JqZWN0KFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiBwYWludE9mZnNldCkKIHsKICAg
ICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJldHVybjsK
QEAgLTMwMiw3ICszMDIsNyBAQAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJMaXN0Qm94OjphZGRG
b2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBJbnRQb2ludCYgYWRk
aXRpb25hbE9mZnNldCkKK3ZvaWQgUmVuZGVyTGlzdEJveDo6YWRkRm9jdXNSaW5nUmVjdHMoVmVj
dG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgRmxvYXRQb2ludCYgYWRkaXRpb25hbE9mZnNldCkK
IHsKICAgICBpZiAoIWlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGZyYW1lKCkpKQogICAgICAg
ICByZXR1cm4gUmVuZGVyQmxvY2s6OmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBhZGRpdGlvbmFs
T2Zmc2V0KTsKQEAgLTMyOCw3ICszMjgsNyBAQAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJMaXN0
Qm94OjpwYWludFNjcm9sbGJhcihQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQm
IHBhaW50T2Zmc2V0KQordm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludFNjcm9sbGJhcihQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaWYg
KG1fdkJhcikgewogICAgICAgICBJbnRSZWN0IHNjcm9sbFJlY3QocGFpbnRPZmZzZXQueCgpICsg
d2lkdGgoKSAtIGJvcmRlclJpZ2h0KCkgLSBtX3ZCYXItPndpZHRoKCksCkBAIC0zNTksNyArMzU5
LDcgQEAKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCi12b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50
SXRlbUZvcmVncm91bmQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWlu
dE9mZnNldCwgaW50IGxpc3RJbmRleCkKK3ZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9y
ZWdyb3VuZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQb2ludCYgcGFpbnRPZmZz
ZXQsIGludCBsaXN0SW5kZXgpCiB7CiAgICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENh
Y2hlUHVyZ2VQcmV2ZW50ZXI7CiAKQEAgLTM5Nyw3ICszOTcsNyBAQAogICAgIGNvbnN0IFVDaGFy
KiBzdHJpbmcgPSBpdGVtVGV4dC5jaGFyYWN0ZXJzKCk7CiAgICAgVGV4dFJ1biB0ZXh0UnVuKHN0
cmluZywgbGVuZ3RoLCBmYWxzZSwgMCwgMCwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lv
biwgaXRlbVN0eWxlLT5kaXJlY3Rpb24oKSwgaXRlbVN0eWxlLT51bmljb2RlQmlkaSgpID09IE92
ZXJyaWRlKTsKICAgICBGb250IGl0ZW1Gb250ID0gc3R5bGUoKS0+Zm9udCgpOwotICAgIEludFJl
Y3QgciA9IGl0ZW1Cb3VuZGluZ0JveFJlY3QocGFpbnRPZmZzZXQsIGxpc3RJbmRleCk7CisgICAg
SW50UmVjdCByID0gaXRlbUJvdW5kaW5nQm94UmVjdChyb3VuZGVkSW50UG9pbnQocGFpbnRPZmZz
ZXQpLCBsaXN0SW5kZXgpOwogICAgIHIubW92ZShpdGVtT2Zmc2V0Rm9yQWxpZ25tZW50KHRleHRS
dW4sIGl0ZW1TdHlsZSwgaXRlbUZvbnQsIHIpKTsKIAogICAgIGlmIChpc09wdGlvbkdyb3VwRWxl
bWVudChlbGVtZW50KSkgewpAQCAtNDEyLDcgKzQxMiw3IEBACiAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT5kcmF3QmlkaVRleHQoaXRlbUZvbnQsIHRleHRSdW4sIHIubG9jYXRpb24oKSk7CiB9
CiAKLXZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZChQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBpbnQgbGlzdEluZGV4KQordm9p
ZCBSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1CYWNrZ3JvdW5kKFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBGbG9hdFBvaW50JiBwYWludE9mZnNldCwgaW50IGxpc3RJbmRleCkKIHsKICAgICBT
ZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KG5vZGUoKSkpOwogICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHNl
bGVjdC0+bGlzdEl0ZW1zKCk7CkBAIC00MzEsNyArNDMxLDcgQEAKICAgICAvLyBEcmF3IHRoZSBi
YWNrZ3JvdW5kIGZvciB0aGlzIGxpc3QgYm94IGl0ZW0KICAgICBpZiAoIWVsZW1lbnQtPnJlbmRl
clN0eWxlKCkgfHwgZWxlbWVudC0+cmVuZGVyU3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IEhJRERF
TikgewogICAgICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBlbGVtZW50LT5yZW5kZXJTdHls
ZSgpID8gZWxlbWVudC0+cmVuZGVyU3R5bGUoKS0+Y29sb3JTcGFjZSgpIDogc3R5bGUoKS0+Y29s
b3JTcGFjZSgpOwotICAgICAgICBJbnRSZWN0IGl0ZW1SZWN0ID0gaXRlbUJvdW5kaW5nQm94UmVj
dChwYWludE9mZnNldCwgbGlzdEluZGV4KTsKKyAgICAgICAgSW50UmVjdCBpdGVtUmVjdCA9IGl0
ZW1Cb3VuZGluZ0JveFJlY3Qocm91bmRlZEludFBvaW50KHBhaW50T2Zmc2V0KSwgbGlzdEluZGV4
KTsKICAgICAgICAgaXRlbVJlY3QuaW50ZXJzZWN0KGNvbnRyb2xDbGlwUmVjdChwYWludE9mZnNl
dCkpOwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJlY3QoaXRlbVJlY3QsIGJhY2tD
b2xvciwgY29sb3JTcGFjZSk7CiAgICAgfQpAQCAtNjI3LDQyICs2MjcsNDIgQEAKICAgICByZXR1
cm4gc3R5bGUoKS0+Zm9udE1ldHJpY3MoKS5oZWlnaHQoKSArIHJvd1NwYWNpbmc7CiB9CiAKLWlu
dCBSZW5kZXJMaXN0Qm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29uc3QKK2Zsb2F0IFJl
bmRlckxpc3RCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSBjb25zdAogewogICAgIHJldHVy
biBtX3ZCYXIgJiYgIW1fdkJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgPyBtX3ZCYXItPndpZHRo
KCkgOiAwOwogfQogCiAvLyBGSVhNRTogV2UgaWdub3JlIHBhZGRpbmcgaW4gdGhlIHZlcnRpY2Fs
IGRpcmVjdGlvbiBhcyBmYXIgYXMgdGhlc2UgdmFsdWVzIGFyZSBjb25jZXJuZWQsIHNpbmNlIHRo
YXQncwogLy8gaG93IHRoZSBjb250cm9sIGN1cnJlbnRseSBwYWludHMuCi1pbnQgUmVuZGVyTGlz
dEJveDo6c2Nyb2xsV2lkdGgoKSBjb25zdAorZmxvYXQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsV2lk
dGgoKSBjb25zdAogewogICAgIC8vIFRoZXJlIGlzIG5vIGhvcml6b250YWwgc2Nyb2xsaW5nIGFs
bG93ZWQuCiAgICAgcmV0dXJuIGNsaWVudFdpZHRoKCk7CiB9CiAKLWludCBSZW5kZXJMaXN0Qm94
OjpzY3JvbGxIZWlnaHQoKSBjb25zdAorZmxvYXQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsSGVpZ2h0
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbWF4KGNsaWVudEhlaWdodCgpLCBsaXN0SGVpZ2h0KCkp
OworICAgIHJldHVybiBtYXgoY2xpZW50SGVpZ2h0KCksIChmbG9hdClsaXN0SGVpZ2h0KCkpOwog
fQogCi1pbnQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsTGVmdCgpIGNvbnN0CitmbG9hdCBSZW5kZXJM
aXN0Qm94OjpzY3JvbGxMZWZ0KCkgY29uc3QKIHsKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBS
ZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxMZWZ0KGludCkKK3ZvaWQgUmVuZGVyTGlzdEJveDo6c2V0
U2Nyb2xsTGVmdChmbG9hdCkKIHsKIH0KIAotaW50IFJlbmRlckxpc3RCb3g6OnNjcm9sbFRvcCgp
IGNvbnN0CitmbG9hdCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb3AoKSBjb25zdAogewogICAgIHJl
dHVybiBtX2luZGV4T2Zmc2V0ICogaXRlbUhlaWdodCgpOwogfQogCi12b2lkIFJlbmRlckxpc3RC
b3g6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wKQordm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRTY3Jv
bGxUb3AoZmxvYXQgbmV3VG9wKQogewogICAgIC8vIERldGVybWluZSBhbiBpbmRleCBhbmQgc2Ny
b2xsIHRvIGl0LiAgICAKLSAgICBpbnQgaW5kZXggPSBuZXdUb3AgLyBpdGVtSGVpZ2h0KCk7Cisg
ICAgZmxvYXQgaW5kZXggPSBuZXdUb3AgLyBpdGVtSGVpZ2h0KCk7CiAgICAgaWYgKGluZGV4IDwg
MCB8fCBpbmRleCA+PSBudW1JdGVtcygpIHx8IGluZGV4ID09IG1faW5kZXhPZmZzZXQpCiAgICAg
ICAgIHJldHVybjsKICAgICAKQEAgLTY3NSw3ICs2NzUsNyBAQAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gdG9TZWxlY3RFbGVt
ZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKS0+bGlzdEl0ZW1zKCk7CiAgICAgaW50
IHNpemUgPSBudW1JdGVtcygpOwotICAgIEludFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1
bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCk7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRMb2NhdGlv
biA9IHJvdW5kZWRJbnRQb2ludChhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCkpOwogCiAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgaWYgKGl0ZW1Cb3Vu
ZGluZ0JveFJlY3QoYWRqdXN0ZWRMb2NhdGlvbiwgaSkuY29udGFpbnMocG9pbnRJbkNvbnRhaW5l
cikpIHsKQEAgLTY5MiwxMSArNjkyLDExIEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUludFJl
Y3QgUmVuZGVyTGlzdEJveDo6Y29udHJvbENsaXBSZWN0KGNvbnN0IEludFBvaW50JiBhZGRpdGlv
bmFsT2Zmc2V0KSBjb25zdAorSW50UmVjdCBSZW5kZXJMaXN0Qm94Ojpjb250cm9sQ2xpcFJlY3Qo
Y29uc3QgRmxvYXRQb2ludCYgYWRkaXRpb25hbE9mZnNldCkgY29uc3QKIHsKLSAgICBJbnRSZWN0
IGNsaXBSZWN0ID0gY29udGVudEJveFJlY3QoKTsKKyAgICBGbG9hdFJlY3QgY2xpcFJlY3QgPSBj
b250ZW50Qm94UmVjdCgpOwogICAgIGNsaXBSZWN0Lm1vdmVCeShhZGRpdGlvbmFsT2Zmc2V0KTsK
LSAgICByZXR1cm4gY2xpcFJlY3Q7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoY2xpcFJl
Y3QpOwogfQogCiBib29sIFJlbmRlckxpc3RCb3g6OmlzQWN0aXZlKCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24gODg0OTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTUsOSArMjE1LDkgQEAKIAogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdC
bG9jaygpOwogCi0gICAgaW50IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCA9IGNvbnRhaW5pbmdCbG9j
a0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKTsKKyAgICBmbG9hdCBhdmFpbGFibGVMb2dpY2FsV2lk
dGggPSBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50KCk7CiAgICAgYm9vbCBo
YXNQZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2NrID0gY2ItPnN0eWxlKCktPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkgIT0gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKLSAg
ICBpbnQgY29udGFpbmVyV2lkdGhJbklubGluZURpcmVjdGlvbiA9IGhhc1BlcnBlbmRpY3VsYXJD
b250YWluaW5nQmxvY2sgPyBwZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdo
dCgpIDogYXZhaWxhYmxlTG9naWNhbFdpZHRoOworICAgIGZsb2F0IGNvbnRhaW5lcldpZHRoSW5J
bmxpbmVEaXJlY3Rpb24gPSBoYXNQZXJwZW5kaWN1bGFyQ29udGFpbmluZ0Jsb2NrID8gcGVycGVu
ZGljdWxhckNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHQoKSA6IGF2YWlsYWJsZUxvZ2ljYWxX
aWR0aDsKIAogICAgIExlbmd0aFR5cGUgbG9naWNhbFdpZHRoVHlwZSA9IHN0eWxlKCktPmxvZ2lj
YWxXaWR0aCgpLnR5cGUoKTsKICAgICBpZiAobG9naWNhbFdpZHRoVHlwZSA+IFJlbGF0aXZlICYm
IHN0eWxlKCktPmxvZ2ljYWxXaWR0aCgpLmlzUG9zaXRpdmUoKSkgewpAQCAtMjI2LDE0ICsyMjYs
MTQgQEAKICAgICAgICAgc2V0TG9naWNhbFdpZHRoKG1heChtaW5QcmVmZXJyZWRMb2dpY2FsV2lk
dGgoKSwgbG9naWNhbFdpZHRoKCkpKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBTdWJ0cmFj
dCBvdXQgYW55IGZpeGVkIG1hcmdpbnMgZnJvbSBvdXIgYXZhaWxhYmxlIHdpZHRoIGZvciBhdXRv
IHdpZHRoIHRhYmxlcy4KLSAgICAgICAgaW50IG1hcmdpblRvdGFsID0gMDsKKyAgICAgICAgZmxv
YXQgbWFyZ2luVG90YWwgPSAwOwogICAgICAgICBpZiAoIXN0eWxlKCktPm1hcmdpblN0YXJ0KCku
aXNBdXRvKCkpCiAgICAgICAgICAgICBtYXJnaW5Ub3RhbCArPSBzdHlsZSgpLT5tYXJnaW5TdGFy
dCgpLmNhbGNWYWx1ZShhdmFpbGFibGVMb2dpY2FsV2lkdGgpOwogICAgICAgICBpZiAoIXN0eWxl
KCktPm1hcmdpbkVuZCgpLmlzQXV0bygpKQogICAgICAgICAgICAgbWFyZ2luVG90YWwgKz0gc3R5
bGUoKS0+bWFyZ2luRW5kKCkuY2FsY1ZhbHVlKGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7CiAgICAg
ICAgICAgICAKICAgICAgICAgLy8gU3VidHJhY3Qgb3V0IG91ciBtYXJnaW5zIHRvIGdldCB0aGUg
YXZhaWxhYmxlIGNvbnRlbnQgd2lkdGguCi0gICAgICAgIGludCBhdmFpbGFibGVDb250ZW50TG9n
aWNhbFdpZHRoID0gbWF4KDAsIGNvbnRhaW5lcldpZHRoSW5JbmxpbmVEaXJlY3Rpb24gLSBtYXJn
aW5Ub3RhbCk7CisgICAgICAgIGZsb2F0IGF2YWlsYWJsZUNvbnRlbnRMb2dpY2FsV2lkdGggPSBt
YXgoMC4wZiwgY29udGFpbmVyV2lkdGhJbklubGluZURpcmVjdGlvbiAtIG1hcmdpblRvdGFsKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIEVuc3VyZSB3ZSBhcmVuJ3QgYmlnZ2VyIHRoYW4gb3VyIG1h
eCB3aWR0aCBvciBzbWFsbGVyIHRoYW4gb3VyIG1pbiB3aWR0aC4KICAgICAgICAgc2V0TG9naWNh
bFdpZHRoKG1pbihhdmFpbGFibGVDb250ZW50TG9naWNhbFdpZHRoLCBtYXhQcmVmZXJyZWRMb2dp
Y2FsV2lkdGgoKSkpOwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAgICAgc2V0Q2VsbExvZ2ljYWxXaWR0
aHMoKTsKIAogICAgIGludCB0b3RhbFNlY3Rpb25Mb2dpY2FsSGVpZ2h0ID0gMDsKLSAgICBpbnQg
b2xkVGFibGVMb2dpY2FsVG9wID0gbV9jYXB0aW9uID8gbV9jYXB0aW9uLT5sb2dpY2FsSGVpZ2h0
KCkgKyBtX2NhcHRpb24tPm1hcmdpbkJlZm9yZSgpICsgbV9jYXB0aW9uLT5tYXJnaW5BZnRlcigp
IDogMDsKKyAgICBmbG9hdCBvbGRUYWJsZUxvZ2ljYWxUb3AgPSBtX2NhcHRpb24gPyBtX2NhcHRp
b24tPmxvZ2ljYWxIZWlnaHQoKSArIG1fY2FwdGlvbi0+bWFyZ2luQmVmb3JlKCkgKyBtX2NhcHRp
b24tPm1hcmdpbkFmdGVyKCkgOiAwOwogCiAgICAgYm9vbCBjb2xsYXBzaW5nID0gY29sbGFwc2VC
b3JkZXJzKCk7CiAKQEAgLTQ1MSwxNCArNDUxLDE0IEBACiAgICAgfQogfQogCi12b2lkIFJlbmRl
clRhYmxlOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50
T2Zmc2V0KQordm9pZCBSZW5kZXJUYWJsZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEZsb2F0UG9pbnQmIHBhaW50T2Zmc2V0KQogewotICAgIEludFBvaW50IGFkanVzdGVkUGFp
bnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CisgICAgRmxvYXRQb2ludCBhZGp1
c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOwogCiAgICAgUGFpbnRQ
aGFzZSBwYWludFBoYXNlID0gcGFpbnRJbmZvLnBoYXNlOwogCiAgICAgaWYgKCFpc1Jvb3QoKSkg
ewotICAgICAgICBJbnRSZWN0IG92ZXJmbG93Qm94ID0gdmlzdWFsT3ZlcmZsb3dSZWN0KCk7Cisg
ICAgICAgIEZsb2F0UmVjdCBvdmVyZmxvd0JveCA9IHZpc3VhbE92ZXJmbG93UmVjdCgpOwogICAg
ICAgICBmbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dCb3gpOwogICAgICAgICBvdmVyZmxvd0Jv
eC5pbmZsYXRlKG1heGltYWxPdXRsaW5lU2l6ZShwYWludEluZm8ucGhhc2UpKTsKICAgICAgICAg
b3ZlcmZsb3dCb3gubW92ZUJ5KGFkanVzdGVkUGFpbnRPZmZzZXQpOwpAQCAtNDcyLDcgKzQ3Miw3
IEBACiAgICAgICAgIHBvcENvbnRlbnRzQ2xpcChwYWludEluZm8sIHBhaW50UGhhc2UsIGFkanVz
dGVkUGFpbnRPZmZzZXQpOwogfQogCi12b2lkIFJlbmRlclRhYmxlOjpwYWludE9iamVjdChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQordm9pZCBSZW5k
ZXJUYWJsZTo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9p
bnQmIHBhaW50T2Zmc2V0KQogewogICAgIFBhaW50UGhhc2UgcGFpbnRQaGFzZSA9IHBhaW50SW5m
by5waGFzZTsKICAgICBpZiAoKHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3Vu
ZCB8fCBwYWludFBoYXNlID09IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgaGFz
Qm94RGVjb3JhdGlvbnMoKSAmJiBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKQEAg
LTQ5Nyw3ICs0OTcsNyBAQAogCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RD
aGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBp
ZiAoY2hpbGQtPmlzQm94KCkgJiYgIXRvUmVuZGVyQm94KGNoaWxkKS0+aGFzU2VsZlBhaW50aW5n
TGF5ZXIoKSAmJiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkgfHwgY2hpbGQgPT0gbV9jYXB0aW9u
KSkgewotICAgICAgICAgICAgSW50UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9k
ZSh0b1JlbmRlckJveChjaGlsZCksIHBhaW50T2Zmc2V0LCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdB
ZGp1c3RtZW50KTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JX
cml0aW5nTW9kZSh0b1JlbmRlckJveChjaGlsZCksIHBhaW50T2Zmc2V0LCBQYXJlbnRUb0NoaWxk
RmxpcHBpbmdBZGp1c3RtZW50KTsKICAgICAgICAgICAgIGNoaWxkLT5wYWludChpbmZvLCBjaGls
ZFBvaW50KTsKICAgICAgICAgfQogICAgIH0KQEAgLTUxOSw3ICs1MTksNyBAQAogICAgICAgICAg
ICAgbV9jdXJyZW50Qm9yZGVyID0gJmJvcmRlclN0eWxlc1tpXTsKICAgICAgICAgICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpCiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlU2VjdGlv
bigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEludFBvaW50IGNoaWxkUG9pbnQgPSBmbGlwRm9y
V3JpdGluZ01vZGUodG9SZW5kZXJUYWJsZVNlY3Rpb24oY2hpbGQpLCBwYWludE9mZnNldCwgUGFy
ZW50VG9DaGlsZEZsaXBwaW5nQWRqdXN0bWVudCk7CisgICAgICAgICAgICAgICAgICAgIEZsb2F0
UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZSh0b1JlbmRlclRhYmxlU2VjdGlv
bihjaGlsZCksIHBhaW50T2Zmc2V0LCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsK
ICAgICAgICAgICAgICAgICAgICAgY2hpbGQtPnBhaW50KGluZm8sIGNoaWxkUG9pbnQpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTI4LDEwICs1MjgsMTAgQEAKIAogICAgIC8v
IFBhaW50IG91dGxpbmUuCiAgICAgaWYgKChwYWludFBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5l
IHx8IHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSAmJiBoYXNPdXRsaW5lKCkg
JiYgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCi0gICAgICAgIHBhaW50T3V0bGlu
ZShwYWludEluZm8uY29udGV4dCwgSW50UmVjdChwYWludE9mZnNldCwgc2l6ZSgpKSk7CisgICAg
ICAgIHBhaW50T3V0bGluZShwYWludEluZm8uY29udGV4dCwgRmxvYXRSZWN0KHBhaW50T2Zmc2V0
LCBzaXplKCkpKTsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZTo6c3VidHJhY3RDYXB0aW9uUmVjdChJ
bnRSZWN0JiByZWN0KSBjb25zdAordm9pZCBSZW5kZXJUYWJsZTo6c3VidHJhY3RDYXB0aW9uUmVj
dChGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2NhcHRpb24pCiAgICAgICAg
IHJldHVybjsKQEAgLTU0OSwxMiArNTQ5LDEyIEBACiAgICAgfQogfQogCi12b2lkIFJlbmRlclRh
YmxlOjpwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQ
b2ludCYgcGFpbnRPZmZzZXQpCit2b2lkIFJlbmRlclRhYmxlOjpwYWludEJveERlY29yYXRpb25z
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiBwYWludE9mZnNldCkKIHsK
ICAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QodGhpcykpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEludFJlY3QgcmVjdChwYWludE9mZnNldCwgc2l6ZSgpKTsKKyAgICBG
bG9hdFJlY3QgcmVjdChwYWludE9mZnNldCwgc2l6ZSgpKTsKICAgICBzdWJ0cmFjdENhcHRpb25S
ZWN0KHJlY3QpOwogCiAgICAgcGFpbnRCb3hTaGFkb3cocGFpbnRJbmZvLmNvbnRleHQsIHJlY3Qs
IHN0eWxlKCksIE5vcm1hbCk7CkBAIC01NzIsMTIgKzU3MiwxMiBAQAogICAgICAgICBwYWludEJv
cmRlcihwYWludEluZm8uY29udGV4dCwgcmVjdCwgc3R5bGUoKSk7CiB9CiAKLXZvaWQgUmVuZGVy
VGFibGU6OnBhaW50TWFzayhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBh
aW50T2Zmc2V0KQordm9pZCBSZW5kZXJUYWJsZTo6cGFpbnRNYXNrKFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBGbG9hdFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBpZiAoc3R5bGUoKS0+
dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgfHwgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VN
YXNrKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRSZWN0IHJlY3QocGFpbnRPZmZzZXQsIHNp
emUoKSk7CisgICAgRmxvYXRSZWN0IHJlY3QocGFpbnRPZmZzZXQsIHNpemUoKSk7CiAgICAgc3Vi
dHJhY3RDYXB0aW9uUmVjdChyZWN0KTsKIAogICAgIHBhaW50TWFza0ltYWdlcyhwYWludEluZm8s
IHJlY3QpOwpAQCAtNTkwLDcgKzU5MCwxMSBAQAogICAgIHJlY2FsY1NlY3Rpb25zSWZOZWVkZWQo
KTsKICAgICByZWNhbGNCb3JkZXJzSW5Sb3dEaXJlY3Rpb24oKTsKIAotICAgIG1fdGFibGVMYXlv
dXQtPmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKG1fbWluUHJlZmVycmVkTG9naWNhbFdp
ZHRoLCBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCk7CisgICAgaW50IHNuYXBwZWRNaW5XaWR0
aCA9IG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoOworICAgIGludCBzbmFwcGVkTWF4V2lkdGgg
PSBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aDsKKyAgICBtX3RhYmxlTGF5b3V0LT5jb21wdXRl
UHJlZmVycmVkTG9naWNhbFdpZHRocyhzbmFwcGVkTWluV2lkdGgsIHNuYXBwZWRNYXhXaWR0aCk7
CisgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBzbmFwcGVkTWluV2lkdGg7CisgICAg
bV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBzbmFwcGVkTWF4V2lkdGg7CiAKICAgICBpZiAo
bV9jYXB0aW9uKQogICAgICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heChtX21p
blByZWZlcnJlZExvZ2ljYWxXaWR0aCwgbV9jYXB0aW9uLT5taW5QcmVmZXJyZWRMb2dpY2FsV2lk
dGgoKSk7CkBAIC03ODIsNyArNzg2LDcgQEAKICAgICBtX25lZWRzU2VjdGlvblJlY2FsYyA9IGZh
bHNlOwogfQogCi1pbnQgUmVuZGVyVGFibGU6OmNhbGNCb3JkZXJTdGFydCgpIGNvbnN0CitmbG9h
dCBSZW5kZXJUYWJsZTo6Y2FsY0JvcmRlclN0YXJ0KCkgY29uc3QKIHsKICAgICBpZiAoY29sbGFw
c2VCb3JkZXJzKCkpIHsKICAgICAgICAgLy8gRGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgY2VsbCBv
ZiB0aGUgZmlyc3Qgcm93LiBTZWUgdGhlIENTUyAyLjEgc3BlYywgc2VjdGlvbiAxNy42LjIuCkBA
IC04MzksNyArODQzLDcgQEAKICAgICByZXR1cm4gUmVuZGVyQmxvY2s6OmJvcmRlclN0YXJ0KCk7
CiB9CiAKLWludCBSZW5kZXJUYWJsZTo6Y2FsY0JvcmRlckVuZCgpIGNvbnN0CitmbG9hdCBSZW5k
ZXJUYWJsZTo6Y2FsY0JvcmRlckVuZCgpIGNvbnN0CiB7CiAgICAgaWYgKGNvbGxhcHNlQm9yZGVy
cygpKSB7CiAgICAgICAgIC8vIERldGVybWluZWQgYnkgdGhlIGxhc3QgY2VsbCBvZiB0aGUgZmly
c3Qgcm93LiBTZWUgdGhlIENTUyAyLjEgc3BlYywgc2VjdGlvbiAxNy42LjIuCkBAIC05MDMsMjUg
KzkwNywyNSBAQAogICAgIG1fYm9yZGVyRW5kID0gY2FsY0JvcmRlckVuZCgpOwogfQogCi1pbnQg
UmVuZGVyVGFibGU6OmJvcmRlckJlZm9yZSgpIGNvbnN0CitmbG9hdCBSZW5kZXJUYWJsZTo6Ym9y
ZGVyQmVmb3JlKCkgY29uc3QKIHsKICAgICBpZiAoY29sbGFwc2VCb3JkZXJzKCkpCiAgICAgICAg
IHJldHVybiBvdXRlckJvcmRlckJlZm9yZSgpOwogICAgIHJldHVybiBSZW5kZXJCbG9jazo6Ym9y
ZGVyQmVmb3JlKCk7CiB9CiAKLWludCBSZW5kZXJUYWJsZTo6Ym9yZGVyQWZ0ZXIoKSBjb25zdAor
ZmxvYXQgUmVuZGVyVGFibGU6OmJvcmRlckFmdGVyKCkgY29uc3QKIHsKICAgICBpZiAoY29sbGFw
c2VCb3JkZXJzKCkpCiAgICAgICAgIHJldHVybiBvdXRlckJvcmRlckFmdGVyKCk7CiAgICAgcmV0
dXJuIFJlbmRlckJsb2NrOjpib3JkZXJBZnRlcigpOwogfQogCi1pbnQgUmVuZGVyVGFibGU6Om91
dGVyQm9yZGVyQmVmb3JlKCkgY29uc3QKK2Zsb2F0IFJlbmRlclRhYmxlOjpvdXRlckJvcmRlckJl
Zm9yZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFjb2xsYXBzZUJvcmRlcnMoKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgaW50IGJvcmRlcldpZHRoID0gMDsKKyAgICBmbG9hdCBib3JkZXJXaWR0aCA9
IDA7CiAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiB0b3BTZWN0aW9uOwogICAgIGlmIChtX2hlYWQp
CiAgICAgICAgIHRvcFNlY3Rpb24gPSBtX2hlYWQ7CkBAIC05NDAsMTUgKzk0NCwxNSBAQAogICAg
IGlmICh0Yi5zdHlsZSgpID09IEJISURERU4pCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICh0
Yi5zdHlsZSgpID4gQkhJRERFTikKLSAgICAgICAgYm9yZGVyV2lkdGggPSBtYXgoYm9yZGVyV2lk
dGgsIHN0YXRpY19jYXN0PGludD4odGIud2lkdGgoKSAvIDIpKTsKKyAgICAgICAgYm9yZGVyV2lk
dGggPSBtYXgoYm9yZGVyV2lkdGgsIHRiLndpZHRoKCkgLyAyLjBmKTsKICAgICByZXR1cm4gYm9y
ZGVyV2lkdGg7CiB9CiAKLWludCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJBZnRlcigpIGNvbnN0
CitmbG9hdCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJBZnRlcigpIGNvbnN0CiB7CiAgICAgaWYg
KCFjb2xsYXBzZUJvcmRlcnMoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaW50IGJvcmRlcldp
ZHRoID0gMDsKKyAgICBmbG9hdCBib3JkZXJXaWR0aCA9IDA7CiAgICAgUmVuZGVyVGFibGVTZWN0
aW9uKiBib3R0b21TZWN0aW9uOwogICAgIGlmIChtX2Zvb3QpCiAgICAgICAgIGJvdHRvbVNlY3Rp
b24gPSBtX2Zvb3Q7CkBAIC05NjYsMTYgKzk3MCwxNiBAQAogICAgIGlmICh0Yi5zdHlsZSgpID09
IEJISURERU4pCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICh0Yi5zdHlsZSgpID4gQkhJRERF
TikKLSAgICAgICAgYm9yZGVyV2lkdGggPSBtYXgoYm9yZGVyV2lkdGgsIHN0YXRpY19jYXN0PGlu
dD4oKHRiLndpZHRoKCkgKyAxKSAvIDIpKTsKKyAgICAgICAgYm9yZGVyV2lkdGggPSBtYXgoYm9y
ZGVyV2lkdGgsICh0Yi53aWR0aCgpICsgMSkgLyAyLjBmKTsKICAgICByZXR1cm4gYm9yZGVyV2lk
dGg7CiB9CiAKLWludCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJTdGFydCgpIGNvbnN0CitmbG9h
dCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJTdGFydCgpIGNvbnN0CiB7CiAgICAgaWYgKCFjb2xs
YXBzZUJvcmRlcnMoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpbnQgYm9yZGVyV2lkdGgg
PSAwOworICAgIGZsb2F0IGJvcmRlcldpZHRoID0gMDsKIAogICAgIGNvbnN0IEJvcmRlclZhbHVl
JiB0YiA9IHN0eWxlKCktPmJvcmRlclN0YXJ0KCk7CiAgICAgaWYgKHRiLnN0eWxlKCkgPT0gQkhJ
RERFTikKQEAgLTk4Nyw3ICs5OTEsNyBAQAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9
IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAg
ICAgICAgaWYgKCFjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpbnQgc3cgPSB0b1JlbmRlclRhYmxlU2VjdGlvbihjaGlsZCktPm91dGVyQm9y
ZGVyU3RhcnQoKTsKKyAgICAgICAgZmxvYXQgc3cgPSB0b1JlbmRlclRhYmxlU2VjdGlvbihjaGls
ZCktPm91dGVyQm9yZGVyU3RhcnQoKTsKICAgICAgICAgaWYgKHN3ID09IC0xKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIGVsc2UKQEAgLTEwMDAsMTIgKzEwMDQsMTIgQEAKICAgICBy
ZXR1cm4gYm9yZGVyV2lkdGg7CiB9CiAKLWludCBSZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJFbmQo
KSBjb25zdAorZmxvYXQgUmVuZGVyVGFibGU6Om91dGVyQm9yZGVyRW5kKCkgY29uc3QKIHsKICAg
ICBpZiAoIWNvbGxhcHNlQm9yZGVycygpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGludCBi
b3JkZXJXaWR0aCA9IDA7CisgICAgZmxvYXQgYm9yZGVyV2lkdGggPSAwOwogCiAgICAgY29uc3Qg
Qm9yZGVyVmFsdWUmIHRiID0gc3R5bGUoKS0+Ym9yZGVyRW5kKCk7CiAgICAgaWYgKHRiLnN0eWxl
KCkgPT0gQkhJRERFTikKQEAgLTEwMTcsNyArMTAyMSw3IEBACiAgICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkgewogICAgICAgICBpZiAoIWNoaWxkLT5pc1RhYmxlU2VjdGlvbigpKQogICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGludCBzdyA9IHRvUmVuZGVyVGFibGVTZWN0aW9uKGNoaWxk
KS0+b3V0ZXJCb3JkZXJFbmQoKTsKKyAgICAgICAgZmxvYXQgc3cgPSB0b1JlbmRlclRhYmxlU2Vj
dGlvbihjaGlsZCktPm91dGVyQm9yZGVyRW5kKCk7CiAgICAgICAgIGlmIChzdyA9PSAtMSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBlbHNlCkBAIC0xMTUzLDcgKzExNTcsNyBAQAog
ewogfQogCi1pbnQgUmVuZGVyVGFibGU6OmZpcnN0TGluZUJveEJhc2VsaW5lKCkgY29uc3QKK2Zs
b2F0IFJlbmRlclRhYmxlOjpmaXJzdExpbmVCb3hCYXNlbGluZSgpIGNvbnN0CiB7CiAgICAgaWYg
KGlzV3JpdGluZ01vZGVSb290KCkpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTExNzAsNyArMTE3
NCw3IEBACiAgICAgcmV0dXJuIGZpcnN0Tm9uRW1wdHlTZWN0aW9uLT5sb2dpY2FsVG9wKCkgKyBm
aXJzdE5vbkVtcHR5U2VjdGlvbi0+Zmlyc3RMaW5lQm94QmFzZWxpbmUoKTsKIH0KIAotSW50UmVj
dCBSZW5kZXJUYWJsZTo6b3ZlcmZsb3dDbGlwUmVjdChjb25zdCBJbnRQb2ludCYgbG9jYXRpb24s
IE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkKK0ludFJlY3QgUmVuZGVy
VGFibGU6Om92ZXJmbG93Q2xpcFJlY3QoY29uc3QgRmxvYXRQb2ludCYgbG9jYXRpb24sIE92ZXJs
YXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkKIHsKICAgICBJbnRSZWN0IHJlY3Qg
PSBSZW5kZXJCbG9jazo6b3ZlcmZsb3dDbGlwUmVjdChsb2NhdGlvbiwgcmVsZXZhbmN5KTsKICAg
ICAKQEAgLTExOTUsMTMgKzExOTksMTMgQEAKIAogYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBhY3Rpb24pCiB7Ci0gICAgSW50UG9pbnQgYWRqdXN0
ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKTsKKyAgICBGbG9hdFBv
aW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNldCArIGxvY2F0aW9uKCk7CiAK
ICAgICAvLyBDaGVjayBraWRzIGZpcnN0LgogICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwg
b3ZlcmZsb3dDbGlwUmVjdChhZGp1c3RlZExvY2F0aW9uKS5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0
Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKSB7CiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJs
aW5nKCkpIHsKICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNCb3goKSAmJiAhdG9SZW5kZXJCb3go
Y2hpbGQpLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24o
KSB8fCBjaGlsZCA9PSBtX2NhcHRpb24pKSB7Ci0gICAgICAgICAgICAgICAgSW50UG9pbnQgY2hp
bGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZSh0b1JlbmRlckJveChjaGlsZCksIGFkanVzdGVk
TG9jYXRpb24sIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQpOworICAgICAgICAgICAg
ICAgIEludFBvaW50IGNoaWxkUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGUodG9SZW5kZXJCb3go
Y2hpbGQpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRMb2NhdGlvbiksIFBhcmVudFRvQ2hpbGRG
bGlwcGluZ0FkanVzdG1lbnQpOwogICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+bm9kZUF0UG9p
bnQocmVxdWVzdCwgcmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBjaGlsZFBvaW50LCBhY3Rpb24p
KSB7CiAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCB0b1Bv
aW50KHBvaW50SW5Db250YWluZXIgLSBjaGlsZFBvaW50KSk7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMTIxMSw5ICsxMjE1LDkgQEAKICAgICB9CiAKICAgICAvLyBDaGVj
ayBvdXIgYm91bmRzIG5leHQuCi0gICAgSW50UmVjdCBib3VuZHNSZWN0ID0gSW50UmVjdChhZGp1
c3RlZExvY2F0aW9uLCBzaXplKCkpOworICAgIEZsb2F0UmVjdCBib3VuZHNSZWN0ID0gRmxvYXRS
ZWN0KGFkanVzdGVkTG9jYXRpb24sIHNpemUoKSk7CiAgICAgaWYgKHZpc2libGVUb0hpdFRlc3Rp
bmcoKSAmJiAoYWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgYWN0aW9uID09IEhp
dFRlc3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgYm91bmRzUmVjdC5pbnRlcnNlY3RzKHJlc3Vs
dC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKSB7Ci0gICAgICAgIHVwZGF0ZUhpdFRl
c3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRhaW5lciAtIHRv
U2l6ZShhZGp1c3RlZExvY2F0aW9uKSkpOworICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJl
c3VsdCwgcm91bmRlZEludFBvaW50KGZsaXBGb3JXcml0aW5nTW9kZShwb2ludEluQ29udGFpbmVy
IC0gdG9TaXplKGFkanVzdGVkTG9jYXRpb24pKSkpOwogICAgICAgICBpZiAoIXJlc3VsdC5hZGRO
b2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KG5vZGUoKSwgcG9pbnRJbkNvbnRhaW5lciwgYm91bmRz
UmVjdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTA0LDE2ICsxMDQsMTYgQEAKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NlbGVjdGlvbkZv
cmVncm91bmRDb2xvcnMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmlydHVhbCBi
b29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lk
IGFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBG
bG9hdFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCi0gICAgdmlydHVh
bCBib29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9u
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpOwogICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAogI2lmIEVOQUJMRShQUk9HUkVTU19U
QUcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlz
dC5jcHAJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpbmVCb3hMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDcgKzE0Niw3IEBACiAgICAg
ICAgIGN1cnItPmRpcnR5TGluZUJveGVzKCk7CiB9CiAKLWJvb2wgUmVuZGVyTGluZUJveExpc3Q6
OnJhbmdlSW50ZXJzZWN0c1JlY3QoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyLCBpbnQg
bG9naWNhbFRvcCwgaW50IGxvZ2ljYWxCb3R0b20sIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0
IEludFBvaW50JiBvZmZzZXQpIGNvbnN0Citib29sIFJlbmRlckxpbmVCb3hMaXN0OjpyYW5nZUlu
dGVyc2VjdHNSZWN0KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciwgaW50IGxvZ2ljYWxU
b3AsIGludCBsb2dpY2FsQm90dG9tLCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFBv
aW50JiBvZmZzZXQpIGNvbnN0CiB7CiAgICAgUmVuZGVyQm94KiBibG9jazsKICAgICBpZiAocmVu
ZGVyZXItPmlzQm94KCkpCkBAIC0xNzEsNyArMTcxLDcgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBSZW5kZXJMaW5lQm94TGlzdDo6YW55TGluZUludGVyc2VjdHNSZWN0KFJlbmRlckJv
eE1vZGVsT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50UG9p
bnQmIG9mZnNldCwgYm9vbCB1c2VQcmludFJlY3QsIGludCBvdXRsaW5lU2l6ZSkgY29uc3QKK2Jv
b2wgUmVuZGVyTGluZUJveExpc3Q6OmFueUxpbmVJbnRlcnNlY3RzUmVjdChSZW5kZXJCb3hNb2Rl
bE9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0UG9pbnQm
IG9mZnNldCwgYm9vbCB1c2VQcmludFJlY3QsIGludCBvdXRsaW5lU2l6ZSkgY29uc3QKIHsKICAg
ICAvLyBXZSBjYW4gY2hlY2sgdGhlIGZpcnN0IGJveCBhbmQgbGFzdCBib3ggYW5kIGF2b2lkIHBh
aW50aW5nL2hpdCB0ZXN0aW5nIGlmIHdlIGRvbid0CiAgICAgLy8gaW50ZXJzZWN0LiAgVGhpcyBp
cyBhIHF1aWNrIHNob3J0LWNpcmN1aXQgdGhhdCB3ZSBjYW4gdGFrZSB0byBhdm9pZCB3YWxraW5n
IGFueSBsaW5lcy4KQEAgLTE3OSwyOCArMTc5LDI4IEBACiAgICAgLy8gaWYgc29tZSBsaW5lIGlu
IHRoZSBtaWRkbGUgaGFzIGEgaHVnZSBvdmVyZmxvdywgaXQgbWlnaHQgYWN0dWFsbHkgZXh0ZW5k
IGJlbG93IHRoZSBsYXN0IGxpbmUuCiAgICAgUm9vdElubGluZUJveCogZmlyc3RSb290Qm94ID0g
Zmlyc3RMaW5lQm94KCktPnJvb3QoKTsKICAgICBSb290SW5saW5lQm94KiBsYXN0Um9vdEJveCA9
IGxhc3RMaW5lQm94KCktPnJvb3QoKTsKLSAgICBpbnQgZmlyc3RMaW5lVG9wID0gZmlyc3RMaW5l
Qm94KCktPmxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdyhmaXJzdFJvb3RCb3gtPmxpbmVUb3AoKSk7
CisgICAgZmxvYXQgZmlyc3RMaW5lVG9wID0gZmlyc3RMaW5lQm94KCktPmxvZ2ljYWxUb3BWaXN1
YWxPdmVyZmxvdyhmaXJzdFJvb3RCb3gtPmxpbmVUb3AoKSk7CiAgICAgaWYgKHVzZVByaW50UmVj
dCAmJiAhZmlyc3RMaW5lQm94KCktPnBhcmVudCgpKQogICAgICAgICBmaXJzdExpbmVUb3AgPSBt
aW4oZmlyc3RMaW5lVG9wLCBmaXJzdExpbmVCb3goKS0+cm9vdCgpLT5saW5lVG9wKCkpOwotICAg
IGludCBsYXN0TGluZUJvdHRvbSA9IGxhc3RMaW5lQm94KCktPmxvZ2ljYWxCb3R0b21WaXN1YWxP
dmVyZmxvdyhsYXN0Um9vdEJveC0+bGluZUJvdHRvbSgpKTsKKyAgICBmbG9hdCBsYXN0TGluZUJv
dHRvbSA9IGxhc3RMaW5lQm94KCktPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyhsYXN0Um9v
dEJveC0+bGluZUJvdHRvbSgpKTsKICAgICBpZiAodXNlUHJpbnRSZWN0ICYmICFsYXN0TGluZUJv
eCgpLT5wYXJlbnQoKSkKICAgICAgICAgbGFzdExpbmVCb3R0b20gPSBtYXgobGFzdExpbmVCb3R0
b20sIGxhc3RMaW5lQm94KCktPnJvb3QoKS0+bGluZUJvdHRvbSgpKTsKLSAgICBpbnQgbG9naWNh
bFRvcCA9IGZpcnN0TGluZVRvcCAtIG91dGxpbmVTaXplOwotICAgIGludCBsb2dpY2FsQm90dG9t
ID0gb3V0bGluZVNpemUgKyBsYXN0TGluZUJvdHRvbTsKKyAgICBmbG9hdCBsb2dpY2FsVG9wID0g
Zmlyc3RMaW5lVG9wIC0gb3V0bGluZVNpemU7CisgICAgZmxvYXQgbG9naWNhbEJvdHRvbSA9IG91
dGxpbmVTaXplICsgbGFzdExpbmVCb3R0b207CiAgICAgCiAgICAgcmV0dXJuIHJhbmdlSW50ZXJz
ZWN0c1JlY3QocmVuZGVyZXIsIGxvZ2ljYWxUb3AsIGxvZ2ljYWxCb3R0b20sIHJlY3QsIG9mZnNl
dCk7CiB9CiAKLWJvb2wgUmVuZGVyTGluZUJveExpc3Q6OmxpbmVJbnRlcnNlY3RzRGlydHlSZWN0
KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciwgSW5saW5lRmxvd0JveCogYm94LCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIG9mZnNldCkgY29uc3QKK2Jv
b2wgUmVuZGVyTGluZUJveExpc3Q6OmxpbmVJbnRlcnNlY3RzRGlydHlSZWN0KFJlbmRlckJveE1v
ZGVsT2JqZWN0KiByZW5kZXJlciwgSW5saW5lRmxvd0JveCogYm94LCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KSBjb25zdAogewogICAgIFJvb3RJ
bmxpbmVCb3gqIHJvb3QgPSBib3gtPnJvb3QoKTsKLSAgICBpbnQgbG9naWNhbFRvcCA9IG1pbihi
b3gtPmxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdyhyb290LT5saW5lVG9wKCkpLCByb290LT5zZWxl
Y3Rpb25Ub3AoKSkgLSByZW5kZXJlci0+bWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFz
ZSk7Ci0gICAgaW50IGxvZ2ljYWxCb3R0b20gPSBib3gtPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVy
Zmxvdyhyb290LT5saW5lQm90dG9tKCkpICsgcmVuZGVyZXItPm1heGltYWxPdXRsaW5lU2l6ZShw
YWludEluZm8ucGhhc2UpOworICAgIGZsb2F0IGxvZ2ljYWxUb3AgPSBtaW4oYm94LT5sb2dpY2Fs
VG9wVmlzdWFsT3ZlcmZsb3cocm9vdC0+bGluZVRvcCgpKSwgcm9vdC0+c2VsZWN0aW9uVG9wKCkp
IC0gcmVuZGVyZXItPm1heGltYWxPdXRsaW5lU2l6ZShwYWludEluZm8ucGhhc2UpOworICAgIGZs
b2F0IGxvZ2ljYWxCb3R0b20gPSBib3gtPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyhyb290
LT5saW5lQm90dG9tKCkpICsgcmVuZGVyZXItPm1heGltYWxPdXRsaW5lU2l6ZShwYWludEluZm8u
cGhhc2UpOwogICAgIAogICAgIHJldHVybiByYW5nZUludGVyc2VjdHNSZWN0KHJlbmRlcmVyLCBs
b2dpY2FsVG9wLCBsb2dpY2FsQm90dG9tLCBwYWludEluZm8ucmVjdCwgb2Zmc2V0KTsKIH0KIAot
dm9pZCBSZW5kZXJMaW5lQm94TGlzdDo6cGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRl
cmVyLCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KSBj
b25zdAordm9pZCBSZW5kZXJMaW5lQm94TGlzdDo6cGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlbmRlcmVyLCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQb2ludCYgcGFpbnRP
ZmZzZXQpIGNvbnN0CiB7CiAgICAgLy8gT25seSBwYWludCBkdXJpbmcgdGhlIGZvcmVncm91bmQv
c2VsZWN0aW9uIHBoYXNlcy4KICAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VG
b3JlZ3JvdW5kICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlU2VsZWN0aW9uICYmIHBh
aW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlT3V0bGluZSAKQEAgLTIxOCw3ICsyMTgsNyBAQAog
ICAgIC8vIE5TVmlld3MuICBEbyBub3QgYWRkIGFueSBtb3JlIGNvZGUgZm9yIHRoaXMuCiAgICAg
UmVuZGVyVmlldyogdiA9IHJlbmRlcmVyLT52aWV3KCk7CiAgICAgYm9vbCB1c2VQcmludFJlY3Qg
PSAhdi0+cHJpbnRSZWN0KCkuaXNFbXB0eSgpOwotICAgIGludCBvdXRsaW5lU2l6ZSA9IHJlbmRl
cmVyLT5tYXhpbWFsT3V0bGluZVNpemUocGFpbnRJbmZvLnBoYXNlKTsKKyAgICBmbG9hdCBvdXRs
aW5lU2l6ZSA9IHJlbmRlcmVyLT5tYXhpbWFsT3V0bGluZVNpemUocGFpbnRJbmZvLnBoYXNlKTsK
ICAgICBpZiAoIWFueUxpbmVJbnRlcnNlY3RzUmVjdChyZW5kZXJlciwgcGFpbnRJbmZvLnJlY3Qs
IHBhaW50T2Zmc2V0LCB1c2VQcmludFJlY3QsIG91dGxpbmVTaXplKSkKICAgICAgICAgcmV0dXJu
OwogCkBAIC0yMzUsOCArMjM1LDggQEAKICAgICAgICAgICAgIC8vIGZvciBlbWJlZGRlZCB2aWV3
cyBpbnNpZGUgQXBwS2l0LiAgQXBwS2l0IGlzIGluY2FwYWJsZSBvZiBwYWdpbmF0aW5nIHZlcnRp
Y2FsCiAgICAgICAgICAgICAvLyB0ZXh0IHBhZ2VzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlYWwg
d2l0aCB2ZXJ0aWNhbCBsaW5lcyBhdCBhbGwgaGVyZS4KICAgICAgICAgICAgIFJvb3RJbmxpbmVC
b3gqIHJvb3QgPSBjdXJyLT5yb290KCk7Ci0gICAgICAgICAgICBpbnQgdG9wRm9yUGFnaW5hdGlv
bkNoZWNrID0gY3Vyci0+bG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KHJvb3QtPmxpbmVUb3AoKSk7
Ci0gICAgICAgICAgICBpbnQgYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNrID0gY3Vyci0+bG9naWNh
bExlZnRWaXN1YWxPdmVyZmxvdygpOworICAgICAgICAgICAgZmxvYXQgdG9wRm9yUGFnaW5hdGlv
bkNoZWNrID0gY3Vyci0+bG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KHJvb3QtPmxpbmVUb3AoKSk7
CisgICAgICAgICAgICBmbG9hdCBib3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2sgPSBjdXJyLT5sb2dp
Y2FsTGVmdFZpc3VhbE92ZXJmbG93KCk7CiAgICAgICAgICAgICBpZiAoIWN1cnItPnBhcmVudCgp
KSB7CiAgICAgICAgICAgICAgICAgLy8gV2UncmUgYSByb290IGJveC4gIFVzZSBsaW5lVG9wIGFu
ZCBsaW5lQm90dG9tIGFzIHdlbGwgaGVyZS4KICAgICAgICAgICAgICAgICB0b3BGb3JQYWdpbmF0
aW9uQ2hlY2sgPSBtaW4odG9wRm9yUGFnaW5hdGlvbkNoZWNrLCByb290LT5saW5lVG9wKCkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgJKHJldmlzaW9uIDg4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDcgKzM5LDcgQEAKICAgICB7CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHBh
aW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50JiwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90
dG9tKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRQb2lu
dCYsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7CiAgICAgdmlydHVhbCBib29sIG5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBv
aW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQs
IGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7CiAgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0
ZShSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHMpIHsgbV9zZWxlY3Rpb25TdGF0ZSA9IHM7
IH0KICAgICBJbnRSZWN0IHNlbGVjdGlvblJlY3QoKTsKQEAgLTQ3LDcgKzQ3LDcgQEAKIHByaXZh
dGU6CiAgICAgdmlydHVhbCBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0K
ICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUo
KSB7IHJldHVybiBtX3NlbGVjdGlvblN0YXRlOyB9Ci0gICAgdm9pZCBwYWludFNlbGVjdGlvbihH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRQb2ludCYsIFJlbmRlclN0eWxlKiwgY29uc3QgRm9u
dCYpOworICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxv
YXRQb2ludCYsIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYpOwogCiAgICAgaW50IG1faGVpZ2h0
OwogICAgIEF0b21pY1N0cmluZyBtX3N0cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsNyArMzY3LDcgQEAK
ICAgICByZXR1cm4gdHJ1ZTsgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0aGUgYXBwZWFyYW5jZSwgc28g
bGV0IHRoZSBub3JtYWwgYmFja2dyb3VuZC9ib3JkZXIgcGFpbnQuCiB9CiAKLWJvb2wgUmVuZGVy
VGhlbWU6OnBhaW50Qm9yZGVyT25seShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnRCb3Jk
ZXJPbmx5KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEZsb2F0UmVjdCYgcikKIHsKICAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDE4LDcgKzQxOCw3IEBACiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lOjpwYWludERlY29yYXRpb25zKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHIpCitib29sIFJlbmRlclRoZW1lOjpwYWludERlY29yYXRpb25zKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgcikKIHsKICAgICBp
ZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtNjA5LDcgKzYwOSw3IEBACiAgICAgcmV0dXJuIHBsYXRmb3JtSW5hY3RpdmVT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKTsKIH0KIAotaW50IFJlbmRlclRoZW1lOjpiYXNlbGlu
ZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK2Zsb2F0IFJlbmRlclRoZW1l
OjpiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKIHsKICAgICBp
ZiAoIW8tPmlzQm94KCkpCiAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5oCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDcgKzQzLDcgQEAKICAgICAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBy
ZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckhUTUxDYW52YXMiOyB9Ci0gICAgdmly
dHVhbCB2b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRSZXBsYWNlZChQYWludEluZm8mLCBjb25zdCBGbG9hdFBvaW50
Jik7CiAgICAgdmlydHVhbCB2b2lkIGludHJpbnNpY1NpemVDaGFuZ2VkKCkgeyBjYW52YXNTaXpl
Q2hhbmdlZCgpOyB9CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0lubGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHSW5saW5lLmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsOCAr
NDUsOCBAQAogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7
CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBj
b25zdDsKIAotICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWlu
dChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7Ci0gICAgdmlydHVhbCB2
b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENv
bnRhaW5lciwgSW50UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxzZSk7CisgICAgdmlydHVhbCBGbG9h
dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250YWluZXIpOworICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFp
bnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEZsb2F0UmVjdCYsIGJv
b2wgZml4ZWQgPSBmYWxzZSk7CiAgICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIo
UmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgdXNlVHJhbnNmb3Jt
cywgYm9vbCBmaXhlZCwgVHJhbnNmb3JtU3RhdGUmKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQg
YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDg4
NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgU1ZHUm9vdElubGluZUJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFBvaW50JiwgaW50LCBpbnQpCit2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OnBhaW50KFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiwgaW50LCBpbnQpCiB7CiAgICAg
QVNTRVJUKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBwYWludElu
Zm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbik7CiAgICAgQVNTRVJUKCFwYWludEluZm8u
Y29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAJKHJl
dmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdI
aWRkZW5Db250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAgICAg
c2V0TmVlZHNMYXlvdXQoZmFsc2UpOyAgICAKIH0KIAotdm9pZCBSZW5kZXJTVkdIaWRkZW5Db250
YWluZXI6OnBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50JikKK3ZvaWQgUmVuZGVyU1ZH
SGlkZGVuQ29udGFpbmVyOjpwYWludChQYWludEluZm8mLCBjb25zdCBGbG9hdFBvaW50JikKIHsK
ICAgICAvLyBUaGlzIHN1YnRyZWUgZG9lcyBub3QgcGFpbnQuCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5j
cHAJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdGb3JlaWduT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQAog
ewogfQogCi12b2lkIFJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6OnBhaW50KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRQb2ludCYpCit2b2lkIFJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JikKIHsKICAgICBpZiAo
cGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtNjYsMTIgKzY2LDEyIEBACiAgICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPmVuZFRy
YW5zcGFyZW5jeUxheWVyKCk7CiB9CiAKLUludFJlY3QgUmVuZGVyU1ZHRm9yZWlnbk9iamVjdDo6
Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIpCitGbG9hdFJlY3QgUmVuZGVyU1ZHRm9yZWlnbk9iamVjdDo6Y2xpcHBlZE92
ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWlu
ZXIpCiB7CiAgICAgcmV0dXJuIFNWR1JlbmRlclN1cHBvcnQ6OmNsaXBwZWRPdmVyZmxvd1JlY3RG
b3JSZXBhaW50KHRoaXMsIHJlcGFpbnRDb250YWluZXIpOwogfQogCi12b2lkIFJlbmRlclNWR0Zv
cmVpZ25PYmplY3Q6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCog
cmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4ZWQpCit2b2lk
IFJlbmRlclNWR0ZvcmVpZ25PYmplY3Q6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgRmxvYXRSZWN0JiByZXBhaW50UmVjdCwgYm9v
bCBmaXhlZCkKIHsKICAgICBTVkdSZW5kZXJTdXBwb3J0Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQo
dGhpcywgcmVwYWludENvbnRhaW5lciwgcmVwYWludFJlY3QsIGZpeGVkKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5j
cHAJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBACiAjZW5k
aWYKIH0KIAotdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRQb2ludCYpCit2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmKQogewogICAgIGlmIChwYWludElu
Zm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMzks
NyArMTM5LDcgQEAKIH0KIAogLy8gYWRkRm9jdXNSaW5nUmVjdHMgaXMgY2FsbGVkIGZyb20gcGFp
bnRPdXRsaW5lIGFuZCBuZWVkcyB0byBiZSBpbiB0aGUgc2FtZSBjb29yZGluYXRlcyBhcyB0aGUg
cGFpbnRPdWxpbmUgY2FsbAotdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmFkZEZvY3VzUmluZ1Jl
Y3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IEludFBvaW50JikKK3ZvaWQgUmVuZGVy
U1ZHQ29udGFpbmVyOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBj
b25zdCBGbG9hdFBvaW50JikKIHsKICAgICBJbnRSZWN0IHBhaW50UmVjdEluUGFyZW50ID0gZW5j
bG9zaW5nSW50UmVjdChsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkubWFwUmVjdChyZXBhaW50UmVj
dEluTG9jYWxDb29yZGluYXRlcygpKSk7CiAgICAgaWYgKCFwYWludFJlY3RJblBhcmVudC5pc0Vt
cHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dC
b3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGlu
ZUZsb3dCb3guaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR0lubGluZUZsb3dCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQAog
ICAgIHZvaWQgc2V0TG9naWNhbEhlaWdodChpbnQgaCkgeyBtX2xvZ2ljYWxIZWlnaHQgPSBoOyB9
CiAKICAgICB2b2lkIHBhaW50U2VsZWN0aW9uQmFja2dyb3VuZChQYWludEluZm8mKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmLCBpbnQgbGluZVRv
cCwgaW50IGxpbmVCb3R0b20pOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBj
b25zdCBGbG9hdFBvaW50JiwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKIAogICAgIHZp
cnR1YWwgSW50UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAkocmV2aXNpb24g
ODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3LDcgQEAKICAgICB9CiB9CiAKLXZvaWQgUmVu
ZGVyU1ZHUGF0aDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JikK
K3ZvaWQgUmVuZGVyU1ZHUGF0aDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZs
b2F0UG9pbnQmKQogewogICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxl
ZCgpIHx8IHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURERU4gfHwgbV9wYXRoLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjM2LDcgKzIzNiw3IEBACiAKIC8vIFRoaXMgbWV0aG9k
IGlzIGNhbGxlZCBmcm9tIGluc2lkZSBwYWludE91dGxpbmUoKSBzaW5jZSB3ZSBjYWxsIHBhaW50
T3V0bGluZSgpCiAvLyB3aGlsZSB0cmFuc2Zvcm1lZCB0byBvdXIgY29vcmQgc3lzdGVtLCByZXR1
cm4gbG9jYWwgY29vcmRzCi12b2lkIFJlbmRlclNWR1BhdGg6OmFkZEZvY3VzUmluZ1JlY3RzKFZl
Y3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IEludFBvaW50JikgCit2b2lkIFJlbmRlclNWR1Bh
dGg6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IEZsb2F0
UG9pbnQmKSAKIHsKICAgICBJbnRSZWN0IHJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHJlcGFpbnRS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwogICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyLmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEs
OSArNDEsOSBAQAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdIaWRkZW5Db250YWlu
ZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFp
bnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJ
bmZvJiwgY29uc3QgRmxvYXRQb2ludCYpOwogICAgIAotICAgIHZpcnR1YWwgSW50UmVjdCBjbGlw
cGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCopIHsgcmV0dXJu
IEludFJlY3QoKTsgfQorICAgIHZpcnR1YWwgRmxvYXRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RG
b3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KikgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOwogCiAg
ICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFj
dGlvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0dyYWRp
ZW50U3RvcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHR3JhZGllbnRTdG9wLmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdHcmFkaWVudFN0b3AuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNyArNDMsNyBAQAogICAgIC8vIFRoaXMgb3ZlcnJpZGVzIGFyZSBuZWVkZWQgdG8gcHJldmVu
dCBBU1NFUlRzIG9uIDxzdmc+PHN0b3AgLz48L3N2Zz4KICAgICAvLyBSZW5kZXJPYmplY3QncyBk
ZWZhdWx0IGltcGxlbWVudGF0aW9ucyBBU1NFUlRfTk9UX1JFQUNIRUQoKQogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQwMAotICAgIHZpcnR1YWwgSW50
UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCop
IHsgcmV0dXJuIEludFJlY3QoKTsgfQorICAgIHZpcnR1YWwgRmxvYXRSZWN0IGNsaXBwZWRPdmVy
Zmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KikgeyByZXR1cm4gRmxvYXRS
ZWN0KCk7IH0KICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0
IHsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CiAgICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91
bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQogICAgIHZpcnR1YWwgRmxv
YXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gRmxv
YXRSZWN0KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
U3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJTdXBwb3J0LmNwcAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Mywx
MiArNTMsMTIgQEAKIAogICAgIC8vIFBhc3Mgb3VyIGxvY2FsIHBhaW50IHJlY3QgdG8gY29tcHV0
ZVJlY3RGb3JSZXBhaW50KCkgd2hpY2ggd2lsbAogICAgIC8vIG1hcCB0byBwYXJlbnQgY29vcmRz
IGFuZCByZWN1cnNlIHVwIHRoZSBwYXJlbnQgY2hhaW4uCi0gICAgSW50UmVjdCByZXBhaW50UmVj
dCA9IGVuY2xvc2luZ0ludFJlY3Qob2JqZWN0LT5yZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpKTsKKyAgICBGbG9hdFJlY3QgcmVwYWludFJlY3QgPSBvYmplY3QtPnJlcGFpbnRSZWN0SW5M
b2NhbENvb3JkaW5hdGVzKCk7CiAgICAgb2JqZWN0LT5jb21wdXRlUmVjdEZvclJlcGFpbnQocmVw
YWludENvbnRhaW5lciwgcmVwYWludFJlY3QpOwotICAgIHJldHVybiByZXBhaW50UmVjdDsKKyAg
ICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChyZXBhaW50UmVjdCk7CiB9CiAKLXZvaWQgU1ZHUmVu
ZGVyU3VwcG9ydDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlck9iamVjdCogb2JqZWN0LCBS
ZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVwYWludFJl
Y3QsIGJvb2wgZml4ZWQpCit2b2lkIFNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1dGVSZWN0Rm9yUmVw
YWludChSZW5kZXJPYmplY3QqIG9iamVjdCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRD
b250YWluZXIsIEZsb2F0UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4ZWQpCiB7CiAgICAgY29u
c3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gb2JqZWN0LT5zdHlsZSgpLT5zdmdTdHlsZSgp
OwogICAgIGlmIChjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cgPSBzdmdTdHlsZS0+c2hhZG93KCkp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxv
d0JveC5jcHAJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdJbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQAog
ICAgIH0KIH0KIAotdm9pZCBTVkdJbmxpbmVGbG93Qm94OjpwYWludChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UG9pbnQmLCBpbnQsIGludCkKK3ZvaWQgU1ZHSW5saW5lRmxvd0JveDo6
cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQsIGludCkK
IHsKICAgICBBU1NFUlQocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8
IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uKTsKICAgICBBU1NFUlQoIXBh
aW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAJKHJldmlzaW9uIDg4NDk2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsNyBAQAogICAgIFJlbmRlclNWR01vZGVsT2JqZWN0
Ojp1cGRhdGVGcm9tRWxlbWVudCgpOwogfQogCi12b2lkIFJlbmRlclNWR0ltYWdlOjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmKQordm9pZCBSZW5kZXJTVkdJbWFn
ZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmKQogewogICAg
IGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8IHN0eWxlKCktPnZp
c2liaWxpdHkoKSA9PSBISURERU4gfHwgIW1faW1hZ2VSZXNvdXJjZS0+aGFzSW1hZ2UoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTc5LDcgKzE3OSw3IEBACiAgICAgcmVwYWludCgpOwogfQogCi12
b2lkIFJlbmRlclNWR0ltYWdlOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJl
Y3RzLCBjb25zdCBJbnRQb2ludCYpCit2b2lkIFJlbmRlclNWR0ltYWdlOjphZGRGb2N1c1JpbmdS
ZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBGbG9hdFBvaW50JikKIHsKICAgICAv
LyB0aGlzIGlzIGNhbGxlZCBmcm9tIHBhaW50KCkgYWZ0ZXIgdGhlIGxvY2FsVHJhbnNmb3JtIGhh
cyBhbHJlYWR5IGJlZW4gYXBwbGllZAogICAgIEludFJlY3QgY29udGVudFJlY3QgPSBlbmNsb3Np
bmdJbnRSZWN0KHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCShyZXZpc2lvbiA4
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgyLDEyICs4MiwxMiBAQAogICAgIHJldHVybiB0b1JlbmRlclNW
R1RleHQoc3RhcnQpOwogfQogCi1JbnRSZWN0IFJlbmRlclNWR1RleHQ6OmNsaXBwZWRPdmVyZmxv
d1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKQor
RmxvYXRSZWN0IFJlbmRlclNWR1RleHQ6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJl
bmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKQogewogICAgIHJldHVybiBTVkdS
ZW5kZXJTdXBwb3J0OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludCh0aGlzLCByZXBhaW50
Q29udGFpbmVyKTsKIH0KIAotdm9pZCBSZW5kZXJTVkdUZXh0Ojpjb21wdXRlUmVjdEZvclJlcGFp
bnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmIHJlcGFp
bnRSZWN0LCBib29sIGZpeGVkKQordm9pZCBSZW5kZXJTVkdUZXh0Ojpjb21wdXRlUmVjdEZvclJl
cGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEZsb2F0UmVjdCYg
cmVwYWludFJlY3QsIGJvb2wgZml4ZWQpCiB7CiAgICAgU1ZHUmVuZGVyU3VwcG9ydDo6Y29tcHV0
ZVJlY3RGb3JSZXBhaW50KHRoaXMsIHJlcGFpbnRDb250YWluZXIsIHJlcGFpbnRSZWN0LCBmaXhl
ZCk7CiB9CkBAIC0yMjksNyArMjI5LDcgQEAKICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29s
dXRlUXVhZChzdHJva2VCb3VuZGluZ0JveCgpKSk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHVGV4dDo6
cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JikKK3ZvaWQgUmVuZGVy
U1ZHVGV4dDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UG9pbnQmKQog
ewogICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Zv
cmVpZ25PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ZvcmVpZ25PYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMzcsMTAgKzM3LDEwIEBACiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5h
bWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHRm9yZWlnbk9iamVjdCI7IH0KIAotICAgIHZp
cnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOworICAgIHZpcnR1
YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBGbG9hdFBvaW50Jik7CiAKLSAgICB2aXJ0
dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIpOwotICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZv
clJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3Qm
LCBib29sIGZpeGVkID0gZmFsc2UpOworICAgIHZpcnR1YWwgRmxvYXRSZWN0IGNsaXBwZWRPdmVy
Zmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVy
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVs
T2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBGbG9hdFJlY3QmLCBib29sIGZpeGVkID0gZmFsc2Up
OwogCiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaAkocmV2aXNpb24gODg0OTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAgICAgY29uc3QgUmVuZGVyT2JqZWN0Q2hp
bGRMaXN0KiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9CiAgICAgUmVu
ZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9CiAK
LSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRQb2ludCYpOwogICAg
IHZpcnR1YWwgdm9pZCBzZXROZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSB7IG1fbmVlZHNCb3VuZGFy
aWVzVXBkYXRlID0gdHJ1ZTsgfQogCiBwcm90ZWN0ZWQ6CkBAIC01MSw3ICs1MSw3IEBACiAKICAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5n
UmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgRmxvYXRQb2ludCYp
OwogCiAgICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJl
dHVybiBtX29iamVjdEJvdW5kaW5nQm94OyB9CiAgICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tl
Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZUJvdW5kaW5nQm94OyB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAkocmV2aXNp
b24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtNTksMTAgKzU5LDEwIEBACiAgICAgdmlydHVhbCBjb25zdCBj
aGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1Jvb3QiOyB9CiAKICAg
ICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKLSAgICB2aXJ0
dWFsIGludCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGgg
PSB0cnVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVp
Z2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lk
dGgoYm9vbCBpbmNsdWRlTWF4V2lkdGggPSB0cnVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0
IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQg
bGF5b3V0KCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBv
aW50Jik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9p
bnQmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CiAgICAgdmlydHVhbCB2b2lkIHN0
eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHls
ZSk7CkBAIC04MCw4ICs4MCw4IEBACiAKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50
SW5Db250YWluZXIsIGNvbnN0IEludFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFj
dGlvbik7CiAKLSAgICB2aXJ0dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFp
bnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpOwotICAgIHZpcnR1YWwg
dm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRD
b250YWluZXIsIEludFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGZpeGVkKTsKKyAgICB2aXJ0dWFs
IEZsb2F0UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lcik7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9y
UmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgRmxvYXRSZWN0
JiByZXBhaW50UmVjdCwgYm9vbCBmaXhlZCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgbWFwTG9jYWxU
b0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCB1
c2VUcmFuc2Zvcm1zLCBib29sIGZpeGVkLCBUcmFuc2Zvcm1TdGF0ZSYpIGNvbnN0OwogCkBAIC05
Miw3ICs5Miw3IEBACiAKICAgICBJbnRTaXplIHBhcmVudE9yaWdpblRvQm9yZGVyQm94KCkgY29u
c3Q7CiAgICAgSW50U2l6ZSBib3JkZXJPcmlnaW5Ub0NvbnRlbnRCb3goKSBjb25zdDsKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gbG9jYWxUb1JlcGFpbnRDb250YWluZXJUcmFuc2Zvcm0oY29uc3QgSW50
UG9pbnQmIHBhcmVudE9yaWdpbkluQ29udGFpbmVyKSBjb25zdDsKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gbG9jYWxUb1JlcGFpbnRDb250YWluZXJUcmFuc2Zvcm0oY29uc3QgRmxvYXRQb2ludCYgcGFy
ZW50T3JpZ2luSW5Db250YWluZXIpIGNvbnN0OwogICAgIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRv
Qm9yZGVyQm94VHJhbnNmb3JtKCkgY29uc3Q7CiAKICAgICBSZW5kZXJPYmplY3RDaGlsZExpc3Qg
bV9jaGlsZHJlbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5l
VGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdJbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDMs
NyArMjQzLDcgQEAKICAgICBBU1NFUlQoIW1fcGFpbnRpbmdSZXNvdXJjZSk7CiB9CiAKLXZvaWQg
U1ZHSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBv
aW50JiwgaW50LCBpbnQpCit2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiwgaW50LCBpbnQpCiB7CiAgICAgQVNTRVJUKHBh
aW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QocmVuZGVyZXIoKSkpOwogICAgIEFTU0VSVChw
YWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2VTZWxlY3Rpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAkocmV2aXNpb24gODg0OTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDggKzUxLDggQEAKIAogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJl
c0xheWVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgSW50UmVjdCBj
bGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lcik7Ci0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYsIGJvb2wgZml4ZWQg
PSBmYWxzZSk7CisgICAgdmlydHVhbCBGbG9hdFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJl
cGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpOworICAgIHZpcnR1
YWwgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIsIEZsb2F0UmVjdCYsIGJvb2wgZml4ZWQgPSBmYWxzZSk7CiAgICAgdmlydHVh
bCBJbnRSZWN0IG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiBy
ZXBhaW50Q29udGFpbmVyLCBJbnRQb2ludCopIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGFi
c29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UGF0aC5oCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw4ICs2MCw4IEBACiAgICAgdmly
dHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1Bh
dGgiOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0gICAgdmlydHVhbCB2b2lkIHBh
aW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIGFkZEZv
Y3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IEludFBvaW50Jik7CisgICAgdmly
dHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgRmxvYXRQ
b2ludCYpOwogCiAgICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVu
dCwgSGl0VGVzdEFjdGlvbik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0lubGluZS5jcHAJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NywxMiArNjcsMTIgQEAKICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiB9CiAKLUludFJlY3Qg
UmVuZGVyU1ZHSW5saW5lOjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikKK0Zsb2F0UmVjdCBSZW5kZXJTVkdJbmxpbmU6
OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBh
aW50Q29udGFpbmVyKQogewogICAgIHJldHVybiBTVkdSZW5kZXJTdXBwb3J0OjpjbGlwcGVkT3Zl
cmZsb3dSZWN0Rm9yUmVwYWludCh0aGlzLCByZXBhaW50Q29udGFpbmVyKTsKIH0KIAotdm9pZCBS
ZW5kZXJTVkdJbmxpbmU6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4ZWQpCit2
b2lkIFJlbmRlclNWR0lubGluZTo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVs
T2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBGbG9hdFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGZp
eGVkKQogewogICAgIFNWR1JlbmRlclN1cHBvcnQ6OmNvbXB1dGVSZWN0Rm9yUmVwYWludCh0aGlz
LCByZXBhaW50Q29udGFpbmVyLCByZXBhaW50UmVjdCwgZml4ZWQpOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0LmgJKHJldmlzaW9u
IDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJTdXBwb3J0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAKIAogICAgIC8vIEltcG9ydGFudCBm
dW5jdGlvbnMgdXNlZCBieSBuZWFybHkgYWxsIFNWRyByZW5kZXJlcnMgY2VudHJhbGl6aW5nIGNv
b3JkaW5hdGUgdHJhbnNmb3JtYXRpb25zIC8gcmVwYWludCByZWN0IGNhbGN1bGF0aW9ucwogICAg
IHN0YXRpYyBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlck9iamVj
dCosIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsKLSAgICBzdGF0aWMg
dm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyQm94TW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmLCBib29sIGZpeGVkKTsKKyAgICBzdGF0
aWMgdm9pZCBjb21wdXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEZsb2F0UmVjdCYsIGJvb2wgZml4ZWQpOwogICAg
IHN0YXRpYyB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0KiwgUmVu
ZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgdXNlVHJhbnNmb3Jtcywg
Ym9vbCBmaXhlZCwgVHJhbnNmb3JtU3RhdGUmKTsKIAogICAgIC8vIFNoYXJlZCBiZXR3ZWVuIFNW
RyByZW5kZXJlcnMgYW5kIHJlc291cmNlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDgsOSArMTQ4LDkgQEAKICAgICB9CiB9CiAKLWludCBSZW5kZXJTVkdSb290Ojpjb21wdXRl
UmVwbGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGgpIGNvbnN0CitmbG9hdCBS
ZW5kZXJTVkdSb290Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4
V2lkdGgpIGNvbnN0CiB7Ci0gICAgaW50IHJlcGxhY2VkV2lkdGggPSBSZW5kZXJCb3g6OmNvbXB1
dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChpbmNsdWRlTWF4V2lkdGgpOworICAgIGZsb2F0IHJlcGxh
Y2VkV2lkdGggPSBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChpbmNsdWRl
TWF4V2lkdGgpOwogICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUoKSAmJiBub2RlKCktPmRvY3VtZW50
KCkgPyBub2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCkgOiAwOwogICAgIGlmICghZnJhbWUpCiAg
ICAgICAgIHJldHVybiBjb21wdXRlSW50cmluc2ljV2lkdGgocmVwbGFjZWRXaWR0aCk7CkBAIC0x
ODksOSArMTg5LDkgQEAKICAgICByZXR1cm4gb3duZXJSZW5kZXJlci0+Y29tcHV0ZVJlcGxhY2Vk
TG9naWNhbFdpZHRoUmVzcGVjdGluZ01pbk1heFdpZHRoKG93bmVyUmVuZGVyZXItPmNvbXB1dGVS
ZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKG93bmVyV2lkdGgpLCBpbmNsdWRlTWF4V2lkdGgpOwog
fQogCi1pbnQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpIGNv
bnN0CitmbG9hdCBSZW5kZXJTVkdSb290Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkg
Y29uc3QKIHsKLSAgICBpbnQgcmVwbGFjZWRIZWlnaHQgPSBSZW5kZXJCb3g6OmNvbXB1dGVSZXBs
YWNlZExvZ2ljYWxIZWlnaHQoKTsKKyAgICBmbG9hdCByZXBsYWNlZEhlaWdodCA9IFJlbmRlckJv
eDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpOwogCiAgICAgRnJhbWUqIGZyYW1lID0g
bm9kZSgpICYmIG5vZGUoKS0+ZG9jdW1lbnQoKSA/IG5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUo
KSA6IDA7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTI2MiwxMyArMjYyLDEzIEBACiAjZW5kaWYKIH0K
IAotdm9pZCBSZW5kZXJTVkdSb290OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UG9pbnQmIHBhaW50T2Zmc2V0KQordm9pZCBSZW5kZXJTVkdSb290OjpwYWludChQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaWYg
KHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGJvb2wgaXNWaXNpYmxlID0gc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEU7
Ci0gICAgSW50UG9pbnQgYm9yZGVyQm94T3JpZ2luSW5Db250YWluZXIgPSBwYWludE9mZnNldCAr
IHBhcmVudE9yaWdpblRvQm9yZGVyQm94KCk7CisgICAgRmxvYXRQb2ludCBib3JkZXJCb3hPcmln
aW5JbkNvbnRhaW5lciA9IHBhaW50T2Zmc2V0ICsgcGFyZW50T3JpZ2luVG9Cb3JkZXJCb3goKTsK
IAogICAgIGlmIChoYXNCb3hEZWNvcmF0aW9ucygpICYmIChwYWludEluZm8ucGhhc2UgPT0gUGFp
bnRQaGFzZUJsb2NrQmFja2dyb3VuZCB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUNo
aWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBpc1Zpc2libGUpCiAgICAgICAgIHBhaW50Qm94RGVjb3Jh
dGlvbnMocGFpbnRJbmZvLCBib3JkZXJCb3hPcmlnaW5JbkNvbnRhaW5lcik7CkBAIC0zMDgsNyAr
MzA4LDcgQEAKICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiAKICAgICBp
ZiAoKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBwYWludEluZm8ucGhh
c2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSAmJiBzdHlsZSgpLT5vdXRsaW5lV2lkdGgoKSAm
JiBpc1Zpc2libGUpCi0gICAgICAgIHBhaW50T3V0bGluZShwYWludEluZm8uY29udGV4dCwgSW50
UmVjdChib3JkZXJCb3hPcmlnaW5JbkNvbnRhaW5lciwgc2l6ZSgpKSk7CisgICAgICAgIHBhaW50
T3V0bGluZShwYWludEluZm8uY29udGV4dCwgRmxvYXRSZWN0KGJvcmRlckJveE9yaWdpbkluQ29u
dGFpbmVyLCBzaXplKCkpKTsKIH0KIAogdm9pZCBSZW5kZXJTVkdSb290OjpkZXN0cm95KCkKQEAg
LTM3OCw3ICszNzgsNyBAQAogICAgIHJldHVybiBJbnRTaXplKGJvcmRlckxlZnQoKSArIHBhZGRp
bmdMZWZ0KCksIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpKTsKIH0KIAotQWZmaW5lVHJhbnNm
b3JtIFJlbmRlclNWR1Jvb3Q6OmxvY2FsVG9SZXBhaW50Q29udGFpbmVyVHJhbnNmb3JtKGNvbnN0
IEludFBvaW50JiBwYXJlbnRPcmlnaW5JbkNvbnRhaW5lcikgY29uc3QKK0FmZmluZVRyYW5zZm9y
bSBSZW5kZXJTVkdSb290Ojpsb2NhbFRvUmVwYWludENvbnRhaW5lclRyYW5zZm9ybShjb25zdCBG
bG9hdFBvaW50JiBwYXJlbnRPcmlnaW5JbkNvbnRhaW5lcikgY29uc3QKIHsKICAgICByZXR1cm4g
QWZmaW5lVHJhbnNmb3JtOjp0cmFuc2xhdGlvbihwYXJlbnRPcmlnaW5JbkNvbnRhaW5lci54KCks
IHBhcmVudE9yaWdpbkluQ29udGFpbmVyLnkoKSkgKiBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCk7
CiB9CkBAIC0zOTIsMTIgKzM5MiwxMiBAQAogICAgIHJldHVybiBtX2xvY2FsVG9QYXJlbnRUcmFu
c2Zvcm07CiB9CiAKLUludFJlY3QgUmVuZGVyU1ZHUm9vdDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZv
clJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpCitGbG9hdFJl
Y3QgUmVuZGVyU1ZHUm9vdDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpCiB7CiAgICAgcmV0dXJuIFNWR1JlbmRlclN1
cHBvcnQ6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHRoaXMsIHJlcGFpbnRDb250YWlu
ZXIpOwogfQogCi12b2lkIFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYgcmVwYWludFJlY3Qs
IGJvb2wgZml4ZWQpCit2b2lkIFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChS
ZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgRmxvYXRSZWN0JiByZXBhaW50
UmVjdCwgYm9vbCBmaXhlZCkKIHsKICAgICAvLyBBcHBseSBvdXIgbG9jYWwgdHJhbnNmb3JtcyAo
ZXhjZXB0IGZvciB4L3kgdHJhbnNsYXRpb24pLCB0aGVuIG91ciBzaGFkb3csIAogICAgIC8vIGFu
ZCB0aGVuIGNhbGwgUmVuZGVyQm94J3MgbWV0aG9kIHRvIGhhbmRsZSBhbGwgdGhlIG5vcm1hbCBD
U1MgQm94IG1vZGVsIGJpdHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0ltYWdlLmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMiArNTcs
MTIgQEAKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0KICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBh
aW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5k
aW5nQm94OyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPElu
dFJlY3Q+JiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5n
UmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgRmxvYXRQb2ludCYpOwogCiAgICAgdmlydHVh
bCB2b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gMCk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBh
aW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKIAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRGbG9h
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50SW5QYXJlbnQsIEhpdFRlc3RBY3Rpb24pOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAko
cmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R01vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTIgKzQzLDEyIEBACiB7CiB9
CiAKLUludFJlY3QgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JS
ZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKQorRmxvYXRSZWN0
IFJlbmRlclNWR01vZGVsT2JqZWN0OjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikKIHsKICAgICByZXR1cm4gU1ZHUmVu
ZGVyU3VwcG9ydDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQodGhpcywgcmVwYWludENv
bnRhaW5lcik7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OmNvbXB1dGVSZWN0Rm9y
UmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYg
cmVwYWludFJlY3QsIGJvb2wgZml4ZWQpCit2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0Ojpjb21w
dXRlUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIs
IEZsb2F0UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgZml4ZWQpCiB7CiAgICAgU1ZHUmVuZGVyU3Vw
cG9ydDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHRoaXMsIHJlcGFpbnRDb250YWluZXIsIHJlcGFp
bnRSZWN0LCBmaXhlZCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1RleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RleHQuaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBA
QAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJS
ZW5kZXJTVkdUZXh0IjsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1RleHQoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3Qg
SW50UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgRmxv
YXRQb2ludCYpOwogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwg
Y29uc3QgSW50UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2
aXJ0dWFsIGJvb2wgbm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludEluUGFyZW50LCBIaXRUZXN0QWN0aW9u
KTsKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IElu
dFBvaW50Jik7CkBAIC02Miw4ICs2Miw4IEBACiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVR
dWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOwogCi0gICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRP
dmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1v
ZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNl
KTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChS
ZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7CisgICAgdmlydHVhbCB2b2lk
IGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRh
aW5lciwgRmxvYXRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNlKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBtYXBMb2NhbFRvQ29udGFpbmVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyLCBib29sIHVzZVRyYW5zZm9ybXMsIGJvb2wgZml4ZWQsIFRyYW5zZm9ybVN0YXRlJikgY29u
c3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJv
eC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElu
bGluZUJveC5oCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUm9vdElubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBACiAg
ICAgdmlydHVhbCBpbnQgdmlydHVhbExvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2xv
Z2ljYWxIZWlnaHQ7IH0KICAgICB2b2lkIHNldExvZ2ljYWxIZWlnaHQoaW50IGhlaWdodCkgeyBt
X2xvZ2ljYWxIZWlnaHQgPSBoZWlnaHQ7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWlu
dEluZm8mLCBjb25zdCBJbnRQb2ludCYsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQg
bGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwogCiAgICAgdm9pZCBjb21wdXRlUGVyQ2hhcmFjdGVy
TGF5b3V0SW5mb3JtYXRpb24oKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdJbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDcgKzQ2LDcgQEAKICAgICB2aXJ0dWFsIGZsb2F0IHBvc2l0aW9uRm9yT2Zmc2V0KGludCBv
ZmZzZXQpIGNvbnN0OwogCiAgICAgdm9pZCBwYWludFNlbGVjdGlvbkJhY2tncm91bmQoUGFpbnRJ
bmZvJik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50
JiwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRv
bSk7CiAgICAgdmlydHVhbCBJbnRSZWN0IHNlbGVjdGlvblJlY3QoaW50IHN0YXJ0UG9zaXRpb24s
IGludCBlbmRQb3NpdGlvbik7CiAKICAgICBib29sIG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0Zy
YWdtZW50Q29vcmRpbmF0ZXMoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50JiBzdGFydFBvc2l0
aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCwx
MiArOTQsMTIgQEAKICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKIH0K
IAotdm9pZCBSZW5kZXJSZXBsYWNlZDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFBvaW50JiBwYWludE9mZnNldCkKK3ZvaWQgUmVuZGVyUmVwbGFjZWQ6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBp
ZiAoIXNob3VsZFBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsg
bG9jYXRpb24oKTsKKyAgICBGbG9hdFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9m
ZnNldCArIGxvY2F0aW9uKCk7CiAgICAgCiAgICAgaWYgKGhhc0JveERlY29yYXRpb25zKCkgJiYg
KHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBwYWludEluZm8ucGhh
c2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbikpIAogICAgICAgICBwYWludEJveERlY29yYXRpb25z
KHBhaW50SW5mbywgYWRqdXN0ZWRQYWludE9mZnNldCk7CkBAIC0xMDksNyArMTA5LDcgQEAKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEludFJlY3QgcGFpbnRSZWN0ID0gSW50UmVjdChh
ZGp1c3RlZFBhaW50T2Zmc2V0LCBzaXplKCkpOworICAgIEZsb2F0UmVjdCBwYWludFJlY3QgPSBG
bG9hdFJlY3QoYWRqdXN0ZWRQYWludE9mZnNldCwgc2l6ZSgpKTsKICAgICBpZiAoKHBhaW50SW5m
by5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQ
aGFzZVNlbGZPdXRsaW5lKSAmJiBzdHlsZSgpLT5vdXRsaW5lV2lkdGgoKSkKICAgICAgICAgcGFp
bnRPdXRsaW5lKHBhaW50SW5mby5jb250ZXh0LCBwYWludFJlY3QpOwogICAgIApAQCAtMTI4LDE0
ICsxMjgsMTQgQEAKIAogICAgIGJvb2wgY29tcGxldGVseUNsaXBwZWRPdXQgPSBmYWxzZTsKICAg
ICBpZiAoc3R5bGUoKS0+aGFzQm9yZGVyUmFkaXVzKCkpIHsKLSAgICAgICAgSW50UmVjdCBib3Jk
ZXJSZWN0ID0gSW50UmVjdChhZGp1c3RlZFBhaW50T2Zmc2V0LCBzaXplKCkpOworICAgICAgICBG
bG9hdFJlY3QgYm9yZGVyUmVjdCA9IEZsb2F0UmVjdChhZGp1c3RlZFBhaW50T2Zmc2V0LCBzaXpl
KCkpOwogCiAgICAgICAgIGlmIChib3JkZXJSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNv
bXBsZXRlbHlDbGlwcGVkT3V0ID0gdHJ1ZTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAv
LyBQdXNoIGEgY2xpcCBpZiB3ZSBoYXZlIGEgYm9yZGVyIHJhZGl1cywgc2luY2Ugd2Ugd2FudCB0
byByb3VuZCB0aGUgZm9yZWdyb3VuZCBjb250ZW50IHRoYXQgZ2V0cyBwYWludGVkLgogICAgICAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoc3R5bGUoKS0+Z2V0Um91bmRlZEJvcmRlckZvcihw
YWludFJlY3QpKTsKKyAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVj
dENsaXAoc3R5bGUoKS0+Z2V0Um91bmRlZEJvcmRlckZvcihlbmNsb3NpbmdJbnRSZWN0KHBhaW50
UmVjdCkpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTQ5LDEzICsxNDksMTMgQEAKICAgICAv
LyBUaGUgc2VsZWN0aW9uIHRpbnQgbmV2ZXIgZ2V0cyBjbGlwcGVkIGJ5IGJvcmRlci1yYWRpdXMg
cm91bmRpbmcsIHNpbmNlIHdlIHdhbnQgaXQgdG8gcnVuIHJpZ2h0IHVwIHRvIHRoZSBlZGdlcyBv
ZgogICAgIC8vIHN1cnJvdW5kaW5nIGNvbnRlbnQuCiAgICAgaWYgKGRyYXdTZWxlY3Rpb25UaW50
KSB7Ci0gICAgICAgIEludFJlY3Qgc2VsZWN0aW9uUGFpbnRpbmdSZWN0ID0gbG9jYWxTZWxlY3Rp
b25SZWN0KCk7CisgICAgICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25QYWludGluZ1JlY3QgPSBsb2Nh
bFNlbGVjdGlvblJlY3QoKTsKICAgICAgICAgc2VsZWN0aW9uUGFpbnRpbmdSZWN0Lm1vdmVCeShh
ZGp1c3RlZFBhaW50T2Zmc2V0KTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0
KHNlbGVjdGlvblBhaW50aW5nUmVjdCwgc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCksIHN0eWxl
KCktPmNvbG9yU3BhY2UoKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5maWxsUmVjdChl
bmNsb3NpbmdJbnRSZWN0KHNlbGVjdGlvblBhaW50aW5nUmVjdCksIHNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcigpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCkpOwogICAgIH0KIH0KIAotYm9vbCBSZW5k
ZXJSZXBsYWNlZDo6c2hvdWxkUGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBv
aW50JiBwYWludE9mZnNldCkKK2Jvb2wgUmVuZGVyUmVwbGFjZWQ6OnNob3VsZFBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBp
ZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kICYmIHBhaW50SW5mby5w
aGFzZSAhPSBQYWludFBoYXNlT3V0bGluZSAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFz
ZVNlbGZPdXRsaW5lIAogICAgICAgICAgICAgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhh
c2VTZWxlY3Rpb24gJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VNYXNrKQpAQCAtMTY4
LDcgKzE2OCw3IEBACiAgICAgaWYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0
ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOworICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQYWlu
dE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKIAogICAgIC8vIEVhcmx5IGV4aXQg
aWYgdGhlIGVsZW1lbnQgdG91Y2hlcyB0aGUgZWRnZXMuCiAgICAgaW50IHRvcCA9IGFkanVzdGVk
UGFpbnRPZmZzZXQueSgpICsgbWluWVZpc3VhbE92ZXJmbG93KCk7CkBAIC0xODksOSArMTg5LDkg
QEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW50IFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVw
bGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGgpIGNvbnN0CitmbG9hdCBSZW5k
ZXJSZXBsYWNlZDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdp
ZHRoKSBjb25zdAogewotICAgIGludCBsb2dpY2FsV2lkdGg7CisgICAgZmxvYXQgbG9naWNhbFdp
ZHRoOwogICAgIC8vIEZJWE1FOiBTaG91bGRuJ3QgdGhpcyB1c2Ugc3R5bGUoKS0+bG9naWNhbFdp
ZHRoKCksIHNpbWlsYXIgdG8gd2hhdCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgZG9l
cz8KICAgICBpZiAoc3R5bGUoKS0+d2lkdGgoKS5pc1NwZWNpZmllZCgpKQogICAgICAgICBsb2dp
Y2FsV2lkdGggPSBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGhVc2luZyhzdHlsZSgpLT5sb2dp
Y2FsV2lkdGgoKSk7CkBAIC0yMDMsNyArMjAzLDcgQEAKICAgICByZXR1cm4gY29tcHV0ZVJlcGxh
Y2VkTG9naWNhbFdpZHRoUmVzcGVjdGluZ01pbk1heFdpZHRoKGxvZ2ljYWxXaWR0aCwgaW5jbHVk
ZU1heFdpZHRoKTsKIH0KIAotaW50IFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFjZWRMb2dp
Y2FsSGVpZ2h0KCkgY29uc3QKK2Zsb2F0IFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFjZWRM
b2dpY2FsSGVpZ2h0KCkgY29uc3QKIHsKICAgICBpbnQgbG9naWNhbEhlaWdodDsKICAgICBpZiAo
c3R5bGUoKS0+bG9naWNhbEhlaWdodCgpLmlzU3BlY2lmaWVkKCkpCkBAIC0yMTYsNyArMjE2LDcg
QEAKICAgICByZXR1cm4gY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFJlc3BlY3RpbmdNaW5N
YXhIZWlnaHQobG9naWNhbEhlaWdodCk7CiB9CiAKLWludCBSZW5kZXJSZXBsYWNlZDo6Y2FsY0Fz
cGVjdFJhdGlvTG9naWNhbFdpZHRoKCkgY29uc3QKK2Zsb2F0IFJlbmRlclJlcGxhY2VkOjpjYWxj
QXNwZWN0UmF0aW9Mb2dpY2FsV2lkdGgoKSBjb25zdAogewogICAgIGludCBpbnRyaW5zaWNXaWR0
aCA9IGludHJpbnNpY0xvZ2ljYWxXaWR0aCgpOwogICAgIGludCBpbnRyaW5zaWNIZWlnaHQgPSBp
bnRyaW5zaWNMb2dpY2FsSGVpZ2h0KCk7CkBAIC0yMjUsNyArMjI1LDcgQEAKICAgICByZXR1cm4g
UmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgKiBpbnRyaW5zaWNXaWR0
aCAvIGludHJpbnNpY0hlaWdodDsKIH0KIAotaW50IFJlbmRlclJlcGxhY2VkOjpjYWxjQXNwZWN0
UmF0aW9Mb2dpY2FsSGVpZ2h0KCkgY29uc3QKK2Zsb2F0IFJlbmRlclJlcGxhY2VkOjpjYWxjQXNw
ZWN0UmF0aW9Mb2dpY2FsSGVpZ2h0KCkgY29uc3QKIHsKICAgICBpbnQgaW50cmluc2ljV2lkdGgg
PSBpbnRyaW5zaWNMb2dpY2FsV2lkdGgoKTsKICAgICBpbnQgaW50cmluc2ljSGVpZ2h0ID0gaW50
cmluc2ljTG9naWNhbEhlaWdodCgpOwpAQCAtMjM4LDExICsyMzgsMTEgQEAKIHsKICAgICBBU1NF
UlQocHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KCkpOwogCi0gICAgaW50IGJvcmRlckFuZFBh
ZGRpbmcgPSBib3JkZXJBbmRQYWRkaW5nV2lkdGgoKTsKKyAgICBmbG9hdCBib3JkZXJBbmRQYWRk
aW5nID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7CiAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2Fs
V2lkdGggPSBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoZmFsc2UpICsgYm9yZGVyQW5kUGFk
ZGluZzsKIAogICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgp
LT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKQotICAgICAgICBtX21heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1pbihtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCwgc3R5
bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICsgKHN0eWxlKCktPmJveFNpemluZygpID09IENPTlRF
TlRfQk9YID8gYm9yZGVyQW5kUGFkZGluZyA6IDApKTsKKyAgICAgICAgbV9tYXhQcmVmZXJyZWRM
b2dpY2FsV2lkdGggPSBtaW4obV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgsIHN0eWxlKCktPm1h
eFdpZHRoKCkudmFsdWUoKSArIChzdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCA/
IGJvcmRlckFuZFBhZGRpbmcgOiAwLjBmKSk7CiAKICAgICBpZiAoc3R5bGUoKS0+d2lkdGgoKS5p
c1BlcmNlbnQoKSB8fCBzdHlsZSgpLT5oZWlnaHQoKS5pc1BlcmNlbnQoKQogICAgICAgICB8fCBz
dHlsZSgpLT5tYXhXaWR0aCgpLmlzUGVyY2VudCgpIHx8IHN0eWxlKCktPm1heEhlaWdodCgpLmlz
UGVyY2VudCgpCkBAIC0yOTAsMTggKzI5MCwxOCBAQAogICAgIHJldHVybiBSZW5kZXJCb3g6OnBv
c2l0aW9uRm9yUG9pbnQocG9pbnQpOwogfQogCi1JbnRSZWN0IFJlbmRlclJlcGxhY2VkOjpzZWxl
Y3Rpb25SZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
ciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkKK0Zsb2F0UmVjdCBSZW5kZXJSZXBsYWNlZDo6
c2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250
YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpCiB7CiAgICAgQVNTRVJUKCFuZWVkc0xh
eW91dCgpKTsKIAogICAgIGlmICghaXNTZWxlY3RlZCgpKQogICAgICAgICByZXR1cm4gSW50UmVj
dCgpOwogICAgIAotICAgIEludFJlY3QgcmVjdCA9IGxvY2FsU2VsZWN0aW9uUmVjdCgpOworICAg
IEZsb2F0UmVjdCByZWN0ID0gbG9jYWxTZWxlY3Rpb25SZWN0KCk7CiAgICAgaWYgKGNsaXBUb1Zp
c2libGVDb250ZW50KQogICAgICAgICBjb21wdXRlUmVjdEZvclJlcGFpbnQocmVwYWludENvbnRh
aW5lciwgcmVjdCk7CiAgICAgZWxzZQotICAgICAgICByZWN0ID0gbG9jYWxUb0NvbnRhaW5lclF1
YWQoRmxvYXRSZWN0KHJlY3QpLCByZXBhaW50Q29udGFpbmVyKS5lbmNsb3NpbmdCb3VuZGluZ0Jv
eCgpOworICAgICAgICByZWN0ID0gbG9jYWxUb0NvbnRhaW5lclF1YWQocmVjdCwgcmVwYWludENv
bnRhaW5lcikuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKICAgICAKICAgICByZXR1cm4gcmVjdDsK
IH0KQEAgLTM1NSwzNyArMzU1LDQwIEBACiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1JbnRTaXpl
IFJlbmRlclJlcGxhY2VkOjppbnRyaW5zaWNTaXplKCkgY29uc3QKK0Zsb2F0U2l6ZSBSZW5kZXJS
ZXBsYWNlZDo6aW50cmluc2ljU2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW50cmluc2lj
U2l6ZTsKIH0KIAotdm9pZCBSZW5kZXJSZXBsYWNlZDo6c2V0SW50cmluc2ljU2l6ZShjb25zdCBJ
bnRTaXplJiBzaXplKQordm9pZCBSZW5kZXJSZXBsYWNlZDo6c2V0SW50cmluc2ljU2l6ZShjb25z
dCBGbG9hdFNpemUmIHNpemUpCiB7CiAgICAgQVNTRVJUKG1faGFzSW50cmluc2ljU2l6ZSk7CiAg
ICAgbV9pbnRyaW5zaWNTaXplID0gc2l6ZTsKIH0KIAotSW50UmVjdCBSZW5kZXJSZXBsYWNlZDo6
Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIpCitGbG9hdFJlY3QgUmVuZGVyUmVwbGFjZWQ6OmNsaXBwZWRPdmVyZmxvd1Jl
Y3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKQogewog
ICAgIGlmIChzdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSAmJiAhZW5jbG9zaW5nTGF5
ZXIoKS0+aGFzVmlzaWJsZUNvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAog
ICAgIC8vIFRoZSBzZWxlY3Rpb25SZWN0IGNhbiBwcm9qZWN0IG91dHNpZGUgb2YgdGhlIG92ZXJm
bG93UmVjdCwgc28gdGFrZSB0aGVpciB1bmlvbgogICAgIC8vIGZvciByZXBhaW50aW5nIHRvIGF2
b2lkIHNlbGVjdGlvbiBwYWludGluZyBnbGl0Y2hlcy4KLSAgICBJbnRSZWN0IHIgPSB1bmlvblJl
Y3QobG9jYWxTZWxlY3Rpb25SZWN0KGZhbHNlKSwgdmlzdWFsT3ZlcmZsb3dSZWN0KCkpOworICAg
IEZsb2F0UmVjdCByID0gdW5pb25SZWN0KGxvY2FsU2VsZWN0aW9uUmVjdChmYWxzZSksIGVuY2xv
c2luZ0ludFJlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KCkpKTsKIAogICAgIFJlbmRlclZpZXcqIHYg
PSB2aWV3KCk7CiAgICAgaWYgKHYpIHsKICAgICAgICAgLy8gRklYTUU6IGxheW91dERlbHRhIG5l
ZWRzIHRvIGJlIGFwcGxpZWQgaW4gcGFydHMgYmVmb3JlL2FmdGVyIHRyYW5zZm9ybXMgYW5kCiAg
ICAgICAgIC8vIHJlcGFpbnQgY29udGFpbmVycy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzMzA4Ci0gICAgICAgIHIubW92ZSh2LT5sYXlvdXREZWx0YSgpKTsKKyAg
ICAgICAgci5tb3ZlKHJvdW5kZWRJbnRTaXplKHYtPmxheW91dERlbHRhKCkpKTsKICAgICB9CiAK
ICAgICBpZiAoc3R5bGUoKSkgewotICAgICAgICBpZiAoc3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgp
KQorICAgICAgICBpZiAoc3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpKSB7CisgICAgICAgICAgICBJ
bnRSZWN0IGV4cGFuZGVkUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qocik7CiAgICAgICAgICAgICAv
LyBUaGUgdGhlbWUgbWF5IHdpc2ggdG8gaW5mbGF0ZSB0aGUgcmVjdCB1c2VkIHdoZW4gcmVwYWlu
dGluZy4KLSAgICAgICAgICAgIHRoZW1lKCktPmFkanVzdFJlcGFpbnRSZWN0KHRoaXMsIHIpOwor
ICAgICAgICAgICAgdGhlbWUoKS0+YWRqdXN0UmVwYWludFJlY3QodGhpcywgZXhwYW5kZWRSZWN0
KTsKKyAgICAgICAgICAgIHIgPSBleHBhbmRlZFJlY3Q7CisgICAgICAgIH0KICAgICAgICAgaWYg
KHYpCiAgICAgICAgICAgICByLmluZmxhdGUoc3R5bGUoKS0+b3V0bGluZVNpemUoKSk7CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwCShyZXZpc2lv
biA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAKIAogdm9pZCBSZW5kZXJNZWRpYTo6bGF5b3V0
KCkKIHsKLSAgICBJbnRTaXplIG9sZFNpemUgPSBjb250ZW50Qm94UmVjdCgpLnNpemUoKTsKKyAg
ICBGbG9hdFNpemUgb2xkU2l6ZSA9IGNvbnRlbnRCb3hSZWN0KCkuc2l6ZSgpOwogCiAgICAgUmVu
ZGVySW1hZ2U6OmxheW91dCgpOwogCkBAIC02NSw3ICs2NSw3IEBACiAgICAgaWYgKCFjb250cm9s
c1JlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRTaXplIG5ld1NpemUgPSBjb250
ZW50Qm94UmVjdCgpLnNpemUoKTsKKyAgICBGbG9hdFNpemUgbmV3U2l6ZSA9IGNvbnRlbnRCb3hS
ZWN0KCkuc2l6ZSgpOwogICAgIGlmIChuZXdTaXplID09IG9sZFNpemUgJiYgIWNvbnRyb2xzUmVu
ZGVyZXItPm5lZWRzTGF5b3V0KCkpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDE0ICs2Mywx
NCBAQAogCiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1l
VmlldzsgfQogCi0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJC
b3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UmVjdCYsIGJvb2wgZml4ZWQgPSBm
YWxzZSk7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgRmxvYXRSZWN0JiwgYm9vbCBmaXhlZCA9IGZh
bHNlKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVwYWludFZpZXdSZWN0YW5nbGUoY29uc3QgSW50UmVj
dCYsIGJvb2wgaW1tZWRpYXRlID0gZmFsc2UpOwogICAgIC8vIFJlcGFpbnQgdGhlIHZpZXcsIGFu
ZCBhbGwgY29tcG9zaXRlZCBsYXllcnMgdGhhdCBpbnRlcnNlY3QgdGhlIGdpdmVuIGFic29sdXRl
IHJlY3RhbmdsZS4KICAgICAvLyBGSVhNRTogaWRlYWxseSB3ZSdkIG5ldmVyIGhhdmUgdG8gZG8g
dGhpcywgaWYgYWxsIHJlcGFpbnRzIGFyZSBjb250YWluZXItcmVsYXRpdmUuCiAgICAgdmlydHVh
bCB2b2lkIHJlcGFpbnRSZWN0YW5nbGVJblZpZXdBbmRDb21wb3NpdGVkTGF5ZXJzKGNvbnN0IElu
dFJlY3QmLCBib29sIGltbWVkaWF0ZSA9IGZhbHNlKTsKIAotICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludEJv
eERlY29yYXRpb25zKFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CisgICAgdmlydHVhbCB2
b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mLCBjb25zdCBGbG9hdFBvaW50Jik7CiAK
ICAgICBlbnVtIFNlbGVjdGlvblJlcGFpbnRNb2RlIHsgUmVwYWludE5ld1hPUk9sZCwgUmVwYWlu
dE5ld01pbnVzT2xkIH07CiAgICAgdm9pZCBzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZWN0KiBzdGFy
dCwgaW50IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGVuZCwgaW50IGVuZFBvcywgU2VsZWN0aW9u
UmVwYWludE1vZGUgPSBSZXBhaW50TmV3WE9ST2xkKTsKQEAgLTEwMywxMSArMTAzLDExIEBACiAg
ICAgLy8gbGF5b3V0RGVsdGEgaXMgdXNlZCB0cmFuc2llbnRseSBkdXJpbmcgbGF5b3V0IHRvIHN0
b3JlIGhvdyBmYXIgYW4gb2JqZWN0IGhhcyBtb3ZlZCBmcm9tIGl0cwogICAgIC8vIGxhc3QgbGF5
b3V0IGxvY2F0aW9uLCBpbiBvcmRlciB0byByZXBhaW50IGNvcnJlY3RseS4KICAgICAvLyBJZiB3
ZSdyZSBkb2luZyBhIGZ1bGwgcmVwYWludCBtX2xheW91dFN0YXRlIHdpbGwgYmUgMCwgYnV0IGlu
IHRoYXQgY2FzZSBsYXlvdXREZWx0YSBkb2Vzbid0IG1hdHRlci4KLSAgICBJbnRTaXplIGxheW91
dERlbHRhKCkgY29uc3QKKyAgICBGbG9hdFNpemUgbGF5b3V0RGVsdGEoKSBjb25zdAogICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fbGF5b3V0U3RhdGUgPyBtX2xheW91dFN0YXRlLT5tX2xheW91dERl
bHRhIDogSW50U2l6ZSgpOworICAgICAgICByZXR1cm4gbV9sYXlvdXRTdGF0ZSA/IG1fbGF5b3V0
U3RhdGUtPm1fbGF5b3V0RGVsdGEgOiBGbG9hdFNpemUoKTsKICAgICB9Ci0gICAgdm9pZCBhZGRM
YXlvdXREZWx0YShjb25zdCBJbnRTaXplJiBkZWx0YSkgCisgICAgdm9pZCBhZGRMYXlvdXREZWx0
YShjb25zdCBGbG9hdFNpemUmIGRlbHRhKSAKICAgICB7CiAgICAgICAgIGlmIChtX2xheW91dFN0
YXRlKQogICAgICAgICAgICAgbV9sYXlvdXRTdGF0ZS0+bV9sYXlvdXREZWx0YSArPSBkZWx0YTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiA4ODQ5
NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNjEsOSArMjYxLDkgQEAKICAgICBib29sIGhpdFRlc3RPdmVyZmxvd0NvbnRyb2xz
KEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCk7CiAgICAgSW50U2l6
ZSBvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50JiBhYnNvbHV0ZVBvaW50KSBj
b25zdDsKIAotICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGlu
Z092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsKLSAgICB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVj
dCk7Ci0gICAgdm9pZCBwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UG9p
bnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAgICB2b2lkIHBhaW50T3ZlcmZsb3dD
b250cm9scyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgSW50UmVj
dCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsKKyAg
ICB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9p
bnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAgICB2b2lkIHBhaW50UmVzaXplcihH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdl
UmVjdCk7CiAKICAgICB2b2lkIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwogCkBAIC0z
MDMsMTMgKzMwMywxMyBAQAogCiAgICAgdm9pZCB1cGRhdGVUcmFuc2Zvcm0oKTsKIAotICAgIHZv
aWQgcmVsYXRpdmVQb3NpdGlvbk9mZnNldChpbnQmIHJlbFgsIGludCYgcmVsWSkgY29uc3QgeyBy
ZWxYICs9IG1fcmVsYXRpdmVPZmZzZXQud2lkdGgoKTsgcmVsWSArPSBtX3JlbGF0aXZlT2Zmc2V0
LmhlaWdodCgpOyB9CisgICAgdm9pZCByZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KGZsb2F0JiByZWxY
LCBmbG9hdCYgcmVsWSkgY29uc3QgeyByZWxYICs9IG1fcmVsYXRpdmVPZmZzZXQud2lkdGgoKTsg
cmVsWSArPSBtX3JlbGF0aXZlT2Zmc2V0LmhlaWdodCgpOyB9CiAgICAgY29uc3QgSW50U2l6ZSYg
cmVsYXRpdmVQb3NpdGlvbk9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVsYXRpdmVPZmZzZXQ7
IH0KIAogICAgIHZvaWQgY2xlYXJDbGlwUmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50cygpOwogICAg
IHZvaWQgY2xlYXJDbGlwUmVjdHMoKTsKIAotICAgIHZvaWQgYWRkQmxvY2tTZWxlY3Rpb25HYXBz
Qm91bmRzKGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIGFkZEJsb2NrU2VsZWN0aW9uR2Fwc0Jv
dW5kcyhjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIGNsZWFyQmxvY2tTZWxlY3Rpb25HYXBz
Qm91bmRzKCk7CiAgICAgdm9pZCByZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7CiAKQEAgLTQ1
OSw3ICs0NTksNyBAQAogICAgIHZvaWQgc2V0Rmlyc3RDaGlsZChSZW5kZXJMYXllciogZmlyc3Qp
IHsgbV9maXJzdCA9IGZpcnN0OyB9CiAgICAgdm9pZCBzZXRMYXN0Q2hpbGQoUmVuZGVyTGF5ZXIq
IGxhc3QpIHsgbV9sYXN0ID0gbGFzdDsgfQogCi0gICAgSW50UG9pbnQgcmVuZGVyQm94TG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLT5pc0JveCgpID8gdG9SZW5kZXJCb3gocmVu
ZGVyZXIoKSktPmxvY2F0aW9uKCkgOiBJbnRQb2ludCgpOyB9CisgICAgRmxvYXRQb2ludCByZW5k
ZXJCb3hMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCktPmlzQm94KCkgPyB0b1Jl
bmRlckJveChyZW5kZXJlcigpKS0+bG9jYXRpb24oKSA6IEludFBvaW50KCk7IH0KICAgICBpbnQg
cmVuZGVyQm94WCgpIGNvbnN0IHsgcmV0dXJuIHJlbmRlckJveExvY2F0aW9uKCkueCgpOyB9CiAg
ICAgaW50IHJlbmRlckJveFkoKSBjb25zdCB7IHJldHVybiByZW5kZXJCb3hMb2NhdGlvbigpLnko
KTsgfQogCkBAIC02OTksNyArNjk5LDcgQEAKIAogICAgIGJvb2wgbV9jb250YWluc0RpcnR5T3Zl
cmxheVNjcm9sbGJhcnMgOiAxOwogCi0gICAgSW50UG9pbnQgbV9jYWNoZWRPdmVybGF5U2Nyb2xs
YmFyT2Zmc2V0OworICAgIEZsb2F0UG9pbnQgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0
OwogCiAgICAgUmVuZGVyTWFycXVlZSogbV9tYXJxdWVlOyAvLyBVc2VkIGJ5IGxheWVycyB3aXRo
IG92ZXJmbG93Om1hcnF1ZWUKICAgICAKQEAgLTcxNyw3ICs3MTcsNyBAQAogICAgIFJlbmRlclNj
cm9sbGJhclBhcnQqIG1fcmVzaXplcjsKIAogcHJpdmF0ZToKLSAgICBJbnRSZWN0IG1fYmxvY2tT
ZWxlY3Rpb25HYXBzQm91bmRzOworICAgIEZsb2F0UmVjdCBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0Jv
dW5kczsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBPd25QdHI8UmVu
ZGVyTGF5ZXJCYWNraW5nPiBtX2JhY2tpbmc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTGF5b3V0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGF5b3V0U3RhdGUuaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTGF5b3V0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmlu
ZSBMYXlvdXRTdGF0ZV9oCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiSW50U2l6
ZS5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgewogICAgIH0K
IAotICAgIExheW91dFN0YXRlKExheW91dFN0YXRlKiwgUmVuZGVyQm94KiwgY29uc3QgSW50U2l6
ZSYgb2Zmc2V0LCBpbnQgcGFnZUhlaWdodCwgYm9vbCBwYWdlSGVpZ2h0Q2hhbmdlZCwgQ29sdW1u
SW5mbyopOworICAgIExheW91dFN0YXRlKExheW91dFN0YXRlKiwgUmVuZGVyQm94KiwgY29uc3Qg
RmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IHBhZ2VIZWlnaHQsIGJvb2wgcGFnZUhlaWdodENoYW5n
ZWQsIENvbHVtbkluZm8qKTsKICAgICBMYXlvdXRTdGF0ZShSZW5kZXJPYmplY3QqKTsKIAogICAg
IHZvaWQgZGVzdHJveShSZW5kZXJBcmVuYSopOwpAQCAtNjksOSArNjksOSBAQAogICAgIAogICAg
IC8vIFRoZSBwYWdlIGxvZ2ljYWwgb2Zmc2V0IGlzIHRoZSBvYmplY3QncyBvZmZzZXQgZnJvbSB0
aGUgdG9wIG9mIHRoZSBwYWdlIGluIHRoZSBwYWdlIHByb2dyZXNzaW9uCiAgICAgLy8gZGlyZWN0
aW9uIChzbyBhbiB4LW9mZnNldCBpbiB2ZXJ0aWNhbCB0ZXh0IGFuZCBhIHktb2Zmc2V0IGZvciBo
b3Jpem9udGFsIHRleHQpLgotICAgIGludCBwYWdlTG9naWNhbE9mZnNldChpbnQgY2hpbGRMb2dp
Y2FsT2Zmc2V0KSBjb25zdDsKKyAgICBmbG9hdCBwYWdlTG9naWNhbE9mZnNldChmbG9hdCBjaGls
ZExvZ2ljYWxPZmZzZXQpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRGb3JjZWRDb2x1bW5CcmVhayhp
bnQgY2hpbGRMb2dpY2FsT2Zmc2V0KTsKKyAgICB2b2lkIGFkZEZvcmNlZENvbHVtbkJyZWFrKGZs
b2F0IGNoaWxkTG9naWNhbE9mZnNldCk7CiAgICAgCiAgICAgYm9vbCBwYWdlTG9naWNhbEhlaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUxvZ2ljYWxIZWlnaHQ7IH0KICAgICBib29sIHBhZ2VM
b2dpY2FsSGVpZ2h0Q2hhbmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZUxvZ2ljYWxIZWlnaHRD
aGFuZ2VkOyB9CkBAIC04MywxNSArODMsMTUgQEAKIHB1YmxpYzoKICAgICBib29sIG1fY2xpcHBl
ZDsKICAgICBJbnRSZWN0IG1fY2xpcFJlY3Q7Ci0gICAgSW50U2l6ZSBtX3BhaW50T2Zmc2V0OyAv
LyB4L3kgb2Zmc2V0IGZyb20gY29udGFpbmVyLiAgSW5jbHVkZXMgcmVsYXRpdmUgcG9zaXRpb25p
bmcgYW5kIHNjcm9sbCBvZmZzZXRzLgotICAgIEludFNpemUgbV9sYXlvdXRPZmZzZXQ7IC8vIHgv
eSBvZmZzZXQgZnJvbSBjb250YWluZXIuICBEb2VzIG5vdCBpbmNsdWRlIHJlbGF0aXZlIHBvc2l0
aW9uaW5nIG9yIHNjcm9sbCBvZmZzZXRzLgotICAgIEludFNpemUgbV9sYXlvdXREZWx0YTsgLy8g
VHJhbnNpZW50IG9mZnNldCBmcm9tIHRoZSBmaW5hbCBwb3NpdGlvbiBvZiB0aGUgb2JqZWN0Cisg
ICAgRmxvYXRTaXplIG1fcGFpbnRPZmZzZXQ7IC8vIHgveSBvZmZzZXQgZnJvbSBjb250YWluZXIu
ICBJbmNsdWRlcyByZWxhdGl2ZSBwb3NpdGlvbmluZyBhbmQgc2Nyb2xsIG9mZnNldHMuCisgICAg
RmxvYXRTaXplIG1fbGF5b3V0T2Zmc2V0OyAvLyB4L3kgb2Zmc2V0IGZyb20gY29udGFpbmVyLiAg
RG9lcyBub3QgaW5jbHVkZSByZWxhdGl2ZSBwb3NpdGlvbmluZyBvciBzY3JvbGwgb2Zmc2V0cy4K
KyAgICBGbG9hdFNpemUgbV9sYXlvdXREZWx0YTsgLy8gVHJhbnNpZW50IG9mZnNldCBmcm9tIHRo
ZSBmaW5hbCBwb3NpdGlvbiBvZiB0aGUgb2JqZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB1c2VkIHRvIGVuc3VyZSB0aGF0IHJlcGFpbnRzIGhhcHBlbiBpbiB0aGUgY29ycmVjdCBw
bGFjZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB0b3RhbCBkZWx0
YSBhY2N1bXVsYXRlZCBmcm9tIHRoZSByb290LgogCi0gICAgaW50IG1fcGFnZUxvZ2ljYWxIZWln
aHQ7IC8vIFRoZSBjdXJyZW50IHBhZ2UgaGVpZ2h0IGZvciB0aGUgcGFnaW5hdGlvbiBtb2RlbCB0
aGF0IGVuY2xvc2VzIHVzLgorICAgIGZsb2F0IG1fcGFnZUxvZ2ljYWxIZWlnaHQ7IC8vIFRoZSBj
dXJyZW50IHBhZ2UgaGVpZ2h0IGZvciB0aGUgcGFnaW5hdGlvbiBtb2RlbCB0aGF0IGVuY2xvc2Vz
IHVzLgogICAgIGJvb2wgbV9wYWdlTG9naWNhbEhlaWdodENoYW5nZWQ7IC8vIElmIG91ciBwYWdl
IGhlaWdodCBoYXMgY2hhbmdlZCwgdGhpcyB3aWxsIGZvcmNlIGFsbCBibG9ja3MgdG8gcmVsYXlv
dXQuCi0gICAgSW50U2l6ZSBtX3BhZ2VPZmZzZXQ7IC8vIFRoZSBvZmZzZXQgb2YgdGhlIHN0YXJ0
IG9mIHRoZSBmaXJzdCBwYWdlIGluIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBwYWdpbmF0aW9uIG1v
ZGVsLgorICAgIEZsb2F0U2l6ZSBtX3BhZ2VPZmZzZXQ7IC8vIFRoZSBvZmZzZXQgb2YgdGhlIHN0
YXJ0IG9mIHRoZSBmaXJzdCBwYWdlIGluIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBwYWdpbmF0aW9u
IG1vZGVsLgogICAgIENvbHVtbkluZm8qIG1fY29sdW1uSW5mbzsgLy8gSWYgdGhlIGVuY2xvc2lu
ZyBwYWdpbmF0aW9uIG1vZGVsIGlzIGEgY29sdW1uIG1vZGVsLCB0aGVuIHRoaXMgd2lsbCBzdG9y
ZSBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIGVhc3kgcmV0cmlldmFsL21hbmlwdWxhdGlvbi4KIAog
ICAgIExheW91dFN0YXRlKiBtX25leHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUmVwbGljYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJSZXBsaWNhLmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJlcGxpY2EuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQAogICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJl
ZExvZ2ljYWxXaWR0aHMoKTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwg
Y29uc3QgRmxvYXRQb2ludCYpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1JlcGxp
Y2EoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVDb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVDb2wuaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBA
QAogICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0
dWFsIEludFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIpOworICAgIHZpcnR1YWwgRmxvYXRSZWN0IGNsaXBwZWRP
dmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFp
bmVyKTsKICAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciwgY29u
c3QgSW50UmVjdCogPSAwKTsKIAogICAgIFJlbmRlclRhYmxlKiB0YWJsZSgpIGNvbnN0OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklGcmFtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklGcmFtZS5jcHAJKHJldmlzaW9uIDg4
NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklGcmFtZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gc3Rh
dGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KCkpOwogICAgICAgICBpZiAoIXZpZXcpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGludCBib3JkZXIgPSBib3JkZXJUb3AoKSArIGJvcmRl
ckJvdHRvbSgpOworICAgICAgICBmbG9hdCBib3JkZXIgPSBib3JkZXJUb3AoKSArIGJvcmRlckJv
dHRvbSgpOwogICAgICAgICBzZXRIZWlnaHQobWF4KGhlaWdodCgpLCB2aWV3LT5jb250ZW50c0hl
aWdodCgpICsgYm9yZGVyKSk7CiAgICAgfQogfQpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICBG
cmFtZVZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQoKSk7CiAgICAg
ICAgIGlmICghdmlldykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaW50IGJvcmRlciA9
IGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCk7CisgICAgICAgIGZsb2F0IGJvcmRlciA9IGJv
cmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCk7CiAgICAgICAgIHNldFdpZHRoKG1heCh3aWR0aCgp
LCB2aWV3LT5jb250ZW50c1dpZHRoKCkgKyBib3JkZXIpKTsKICAgICB9CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAJKHJldmlzaW9uIDg4NDk2KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODAsNyArODAsNyBAQAogCiB2b2lkIFJlbmRlclZpZGVvOjp1cGRhdGVJbnRyaW5zaWNTaXpl
KCkKIHsKLSAgICBJbnRTaXplIHNpemUgPSBjYWxjdWxhdGVJbnRyaW5zaWNTaXplKCk7CisgICAg
RmxvYXRTaXplIHNpemUgPSBjYWxjdWxhdGVJbnRyaW5zaWNTaXplKCk7CiAgICAgc2l6ZS5zY2Fs
ZShzdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwogCiAgICAgLy8gTmV2ZXIgc2V0IHRoZSBlbGVt
ZW50IHNpemUgdG8gemVybyB3aGVuIGluIGEgbWVkaWEgZG9jdW1lbnQuCkBAIC05NSw3ICs5NSw3
IEBACiAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiB9CiAgICAgCi1JbnRTaXplIFJlbmRlclZp
ZGVvOjpjYWxjdWxhdGVJbnRyaW5zaWNTaXplKCkKK0Zsb2F0U2l6ZSBSZW5kZXJWaWRlbzo6Y2Fs
Y3VsYXRlSW50cmluc2ljU2l6ZSgpCiB7CiAgICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8gPSB2
aWRlb0VsZW1lbnQoKTsKICAgICAKQEAgLTE1MSwzMiArMTUxLDMyIEBACiAgICAgaWYgKG1fY2Fj
aGVkSW1hZ2VTaXplLmlzRW1wdHkoKSAmJiB2aWRlb0VsZW1lbnQoKS0+c2hvdWxkRGlzcGxheVBv
c3RlckltYWdlKCkpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKLSAgICBJbnRTaXplIGVs
ZW1lbnRTaXplOworICAgIEZsb2F0U2l6ZSBlbGVtZW50U2l6ZTsKICAgICBpZiAodmlkZW9FbGVt
ZW50KCktPnNob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSgpKQogICAgICAgICBlbGVtZW50U2l6ZSA9
IG1fY2FjaGVkSW1hZ2VTaXplOwogICAgIGVsc2UKICAgICAgICAgZWxlbWVudFNpemUgPSBpbnRy
aW5zaWNTaXplKCk7CiAKLSAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gY29udGVudEJveFJlY3Qo
KTsKKyAgICBGbG9hdFJlY3QgY29udGVudFJlY3QgPSBjb250ZW50Qm94UmVjdCgpOwogICAgIGlm
IChlbGVtZW50U2l6ZS5pc0VtcHR5KCkgfHwgY29udGVudFJlY3QuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gSW50UmVjdCgpOwogCi0gICAgSW50UmVjdCByZW5kZXJCb3ggPSBjb250ZW50UmVj
dDsKLSAgICBpbnQgcmF0aW8gPSByZW5kZXJCb3gud2lkdGgoKSAqIGVsZW1lbnRTaXplLmhlaWdo
dCgpIC0gcmVuZGVyQm94LmhlaWdodCgpICogZWxlbWVudFNpemUud2lkdGgoKTsKKyAgICBGbG9h
dFJlY3QgcmVuZGVyQm94ID0gY29udGVudFJlY3Q7CisgICAgZmxvYXQgcmF0aW8gPSByZW5kZXJC
b3gud2lkdGgoKSAqIGVsZW1lbnRTaXplLmhlaWdodCgpIC0gcmVuZGVyQm94LmhlaWdodCgpICog
ZWxlbWVudFNpemUud2lkdGgoKTsKICAgICBpZiAocmF0aW8gPiAwKSB7Ci0gICAgICAgIGludCBu
ZXdXaWR0aCA9IHJlbmRlckJveC5oZWlnaHQoKSAqIGVsZW1lbnRTaXplLndpZHRoKCkgLyBlbGVt
ZW50U2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgZmxvYXQgbmV3V2lkdGggPSByZW5kZXJCb3guaGVp
Z2h0KCkgKiBlbGVtZW50U2l6ZS53aWR0aCgpIC8gZWxlbWVudFNpemUuaGVpZ2h0KCk7CiAgICAg
ICAgIC8vIEp1c3QgZmlsbCB0aGUgd2hvbGUgYXJlYSBpZiB0aGUgZGlmZmVyZW5jZSBpcyBvbmUg
cGl4ZWwgb3IgbGVzcyAoaW4gYm90aCBzaWRlcykKICAgICAgICAgaWYgKHJlbmRlckJveC53aWR0
aCgpIC0gbmV3V2lkdGggPiAyKQogICAgICAgICAgICAgcmVuZGVyQm94LnNldFdpZHRoKG5ld1dp
ZHRoKTsKICAgICAgICAgcmVuZGVyQm94Lm1vdmUoKGNvbnRlbnRSZWN0LndpZHRoKCkgLSByZW5k
ZXJCb3gud2lkdGgoKSkgLyAyLCAwKTsKICAgICB9IGVsc2UgaWYgKHJhdGlvIDwgMCkgewotICAg
ICAgICBpbnQgbmV3SGVpZ2h0ID0gcmVuZGVyQm94LndpZHRoKCkgKiBlbGVtZW50U2l6ZS5oZWln
aHQoKSAvIGVsZW1lbnRTaXplLndpZHRoKCk7CisgICAgICAgIGZsb2F0IG5ld0hlaWdodCA9IHJl
bmRlckJveC53aWR0aCgpICogZWxlbWVudFNpemUuaGVpZ2h0KCkgLyBlbGVtZW50U2l6ZS53aWR0
aCgpOwogICAgICAgICBpZiAocmVuZGVyQm94LmhlaWdodCgpIC0gbmV3SGVpZ2h0ID4gMikKICAg
ICAgICAgICAgIHJlbmRlckJveC5zZXRIZWlnaHQobmV3SGVpZ2h0KTsKICAgICAgICAgcmVuZGVy
Qm94Lm1vdmUoMCwgKGNvbnRlbnRSZWN0LmhlaWdodCgpIC0gcmVuZGVyQm94LmhlaWdodCgpKSAv
IDIpOwogICAgIH0KIAotICAgIHJldHVybiByZW5kZXJCb3g7CisgICAgcmV0dXJuIGVuY2xvc2lu
Z0ludFJlY3QocmVuZGVyQm94KTsKIH0KIAogYm9vbCBSZW5kZXJWaWRlbzo6c2hvdWxkRGlzcGxh
eVZpZGVvKCkgY29uc3QKQEAgLTE4NCw3ICsxODQsNyBAQAogICAgIHJldHVybiAhdmlkZW9FbGVt
ZW50KCktPnNob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSgpOwogfQogCi12b2lkIFJlbmRlclZpZGVv
OjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFp
bnRPZmZzZXQpCit2b2lkIFJlbmRlclZpZGVvOjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBGbG9hdFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBNZWRpYVBsYXll
ciogbWVkaWFQbGF5ZXIgPSBtZWRpYUVsZW1lbnQoKS0+cGxheWVyKCk7CiAgICAgYm9vbCBkaXNw
bGF5aW5nUG9zdGVyID0gdmlkZW9FbGVtZW50KCktPnNob3VsZERpc3BsYXlQb3N0ZXJJbWFnZSgp
OwpAQCAtMTk4LDcgKzE5OCw3IEBACiAgICAgSW50UmVjdCByZWN0ID0gdmlkZW9Cb3goKTsKICAg
ICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICByZWN0Lm1vdmVCeShw
YWludE9mZnNldCk7CisgICAgcmVjdC5tb3ZlQnkocm91bmRlZEludFBvaW50KHBhaW50T2Zmc2V0
KSk7CiAKICAgICBpZiAoZGlzcGxheWluZ1Bvc3RlcikKICAgICAgICAgcGFpbnRJbnRvUmVjdChw
YWludEluZm8uY29udGV4dCwgcmVjdCk7CkBAIC0yNDksMTcgKzI0OSwxNyBAQAogICAgIG1lZGlh
UGxheWVyLT5zZXRWaXNpYmxlKHRydWUpOwogfQogCi1pbnQgUmVuZGVyVmlkZW86OmNvbXB1dGVS
ZXBsYWNlZExvZ2ljYWxXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCkgY29uc3QKK2Zsb2F0IFJl
bmRlclZpZGVvOjpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lk
dGgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFjZWRM
b2dpY2FsV2lkdGgoaW5jbHVkZU1heFdpZHRoKTsKIH0KIAotaW50IFJlbmRlclZpZGVvOjpjb21w
dXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3QKK2Zsb2F0IFJlbmRlclZpZGVvOjpjb21w
dXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3QKIHsKICAgICByZXR1cm4gUmVuZGVyUmVw
bGFjZWQ6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoKTsKIH0KIAotaW50IFJlbmRlclZp
ZGVvOjptaW5pbXVtUmVwbGFjZWRIZWlnaHQoKSBjb25zdCAKK2Zsb2F0IFJlbmRlclZpZGVvOjpt
aW5pbXVtUmVwbGFjZWRIZWlnaHQoKSBjb25zdCAKIHsKICAgICByZXR1cm4gUmVuZGVyUmVwbGFj
ZWQ6Om1pbmltdW1SZXBsYWNlZEhlaWdodCgpOyAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZS5oCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw4ICs3Nyw4IEBACiAg
ICAgLy8gdGV4dCBvZiBhIGJ1dHRvbiwgaXMgYWx3YXlzIHJlbmRlcmVkIGJ5IHRoZSBlbmdpbmUg
aXRzZWxmLiAgVGhlIGJvb2xlYW4gcmV0dXJuIHZhbHVlIGluZGljYXRlcwogICAgIC8vIHdoZXRo
ZXIgdGhlIENTUyBib3JkZXIvYmFja2dyb3VuZCBzaG91bGQgYWxzbyBiZSBwYWludGVkLgogICAg
IGJvb2wgcGFpbnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwotICAgIGJvb2wgcGFpbnRCb3JkZXJPbmx5KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICBib29sIHBhaW50RGVjb3JhdGlvbnMoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIGJvb2wgcGFp
bnRCb3JkZXJPbmx5KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0
UmVjdCYpOworICAgIGJvb2wgcGFpbnREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKTsKIAogICAgIC8vIFRoZSByZW1haW5pbmcgbWV0
aG9kcyBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHBvcnRp
b24gb2YgdGhlIHRoZW1lLCBlLmcuLAogICAgIC8vIFJlbmRlclRoZW1lTWFjLmNwcCBmb3IgTWFj
IE9TIFguCkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgLy8gQSBtZXRob2QgdG8gb2J0YWluIHRoZSBi
YXNlbGluZSBwb3NpdGlvbiBmb3IgYSAibGVhZiIgY29udHJvbC4gIFRoaXMgd2lsbCBvbmx5IGJl
IHVzZWQgaWYgYSBiYXNlbGluZQogICAgIC8vIHBvc2l0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVk
IGJ5IGV4YW1pbmluZyBjaGlsZCBjb250ZW50LiBDaGVja2JveGVzIGFuZCByYWRpbyBidXR0b25z
IGFyZSBleGFtcGxlcyBvZgogICAgIC8vIGNvbnRyb2xzIHRoYXQgbmVlZCB0byBkbyB0aGlzLgot
ICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KikgY29u
c3Q7CisgICAgdmlydHVhbCBmbG9hdCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVj
dCopIGNvbnN0OwogCiAgICAgLy8gQSBtZXRob2QgZm9yIGFza2luZyBpZiBhIGNvbnRyb2wgaXMg
YSBjb250YWluZXIgb3Igbm90LiAgTGVhZiBjb250cm9scyBoYXZlIHRvIGhhdmUgc29tZSBzcGVj
aWFsIGJlaGF2aW9yIChsaWtlCiAgICAgLy8gdGhlIGJhc2VsaW5lIHBvc2l0aW9uIEFQSSBhYm92
ZSkuCkBAIC0yMzgsMTYgKzIzOCwxNiBAQAogI2VuZGlmCiAKICAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBGbG9hdFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7
IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
bnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0
UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAogI2lmIEVOQUJMRShNRVRFUl9UQUcpCiAgICAgdmly
dHVhbCB2b2lkIGFkanVzdE1ldGVyU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZsZXhpYmxlQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZsZXhpYmxlQm94LmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcg
QEAKICAgICB2b2lkIGNhbGNIb3Jpem9udGFsUHJlZldpZHRocygpOwogICAgIHZvaWQgY2FsY1Zl
cnRpY2FsUHJlZldpZHRocygpOwogCi0gICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2NrKGJvb2wg
cmVsYXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VIZWlnaHQpOworICAgIHZpcnR1YWwgdm9pZCBsYXlv
dXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGZsb2F0IHBhZ2VIZWlnaHQpOwogICAgIHZv
aWQgbGF5b3V0SG9yaXpvbnRhbEJveChib29sIHJlbGF5b3V0Q2hpbGRyZW4pOwogICAgIHZvaWQg
bGF5b3V0VmVydGljYWxCb3goYm9vbCByZWxheW91dENoaWxkcmVuKTsKIApAQCAtNTAsNyArNTAs
NyBAQAogICAgIHZpcnR1YWwgYm9vbCBpc0ZsZXhpbmdDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJu
IG1fZmxleGluZ0NoaWxkcmVuOyB9CiAgICAgdmlydHVhbCBib29sIGlzU3RyZXRjaGluZ0NoaWxk
cmVuKCkgY29uc3QgeyByZXR1cm4gbV9zdHJldGNoaW5nQ2hpbGRyZW47IH0KIAotICAgIHZvaWQg
cGxhY2VDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBJbnRQb2ludCYgbG9jYXRpb24pOwor
ICAgIHZvaWQgcGxhY2VDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBGbG9hdFBvaW50JiBs
b2NhdGlvbik7CiAKIHByb3RlY3RlZDoKICAgICBpbnQgYWxsb3dlZENoaWxkRmxleChSZW5kZXJC
b3gqIGNoaWxkLCBib29sIGV4cGFuZGluZywgdW5zaWduZWQgZ3JvdXApOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIuY3BwCShyZXZpc2lvbiA4ODQ5NikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDEzICs0NiwxMyBAQAogdm9pZCBSZW5kZXJNZXRlcjo6Y29tcHV0ZUxvZ2ljYWxXaWR0aCgp
CiB7CiAgICAgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbFdpZHRoKCk7Ci0gICAgc2V0V2lkdGgo
dGhlbWUoKS0+bWV0ZXJTaXplRm9yQm91bmRzKHRoaXMsIGZyYW1lUmVjdCgpKS53aWR0aCgpKTsK
KyAgICBzZXRXaWR0aCh0aGVtZSgpLT5tZXRlclNpemVGb3JCb3VuZHModGhpcywgcm91bmRlZElu
dFJlY3QoZnJhbWVSZWN0KCkpKS53aWR0aCgpKTsKIH0KIAogdm9pZCBSZW5kZXJNZXRlcjo6Y29t
cHV0ZUxvZ2ljYWxIZWlnaHQoKQogewogICAgIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWln
aHQoKTsKLSAgICBzZXRIZWlnaHQodGhlbWUoKS0+bWV0ZXJTaXplRm9yQm91bmRzKHRoaXMsIGZy
YW1lUmVjdCgpKS5oZWlnaHQoKSk7CisgICAgc2V0SGVpZ2h0KHRoZW1lKCktPm1ldGVyU2l6ZUZv
ckJvdW5kcyh0aGlzLCByb3VuZGVkSW50UmVjdChmcmFtZVJlY3QoKSkpLmhlaWdodCgpKTsKIH0K
IAogZG91YmxlIFJlbmRlck1ldGVyOjp2YWx1ZVJhdGlvKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmNwcAkocmV2aXNpb24gODg0OTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBUcmFu
c2Zvcm1TdGF0ZTo6bW92ZShpbnQgeCwgaW50IHksIFRyYW5zZm9ybUFjY3VtdWxhdGlvbiBhY2N1
bXVsYXRlKQordm9pZCBUcmFuc2Zvcm1TdGF0ZTo6bW92ZShmbG9hdCB4LCBmbG9hdCB5LCBUcmFu
c2Zvcm1BY2N1bXVsYXRpb24gYWNjdW11bGF0ZSkKIHsKICAgICBpZiAobV9hY2N1bXVsYXRpbmdU
cmFuc2Zvcm0gJiYgbV9hY2N1bXVsYXRlZFRyYW5zZm9ybSkgewogICAgICAgICAvLyBJZiB3ZSdy
ZSBhY2N1bXVsYXRpbmcgaW50byBhbiBleGlzdGluZyB0cmFuc2Zvcm0sIGFwcGx5IHRoZSB0cmFu
c2xhdGlvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bE11bHRpTGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbE11bHRpTGluZS5oCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw3ICs0NSw3IEBACiAgICAgdmlydHVhbCBmbG9hdCBnZXRBdmdDaGFyV2lkdGgoQXRv
bWljU3RyaW5nIGZhbWlseSk7CiAgICAgdmlydHVhbCBpbnQgcHJlZmVycmVkQ29udGVudFdpZHRo
KGZsb2F0IGNoYXJXaWR0aCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdENvbnRyb2xI
ZWlnaHRCYXNlZE9uTGluZUhlaWdodChpbnQgbGluZUhlaWdodCk7Ci0gICAgdmlydHVhbCBpbnQg
YmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0
aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29u
c3Q7CisgICAgdmlydHVhbCBmbG9hdCBiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9v
bCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRp
b25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9t
RWxlbWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBjYWNoZVNlbGVjdGlvbihpbnQgc3RhcnQsIGlu
dCBlbmQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGUuY3BwCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5Nyw3ICs2OTcsNyBAQAog
ICAgIHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX2NvbnRlbnQgPSBDb250ZW50RGF0
YTo6Y3JlYXRlKHF1b3RlKTsKIH0KIAotdm9pZCBSZW5kZXJTdHlsZTo6YXBwbHlUcmFuc2Zvcm0o
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94
U2l6ZSwgQXBwbHlUcmFuc2Zvcm1PcmlnaW4gYXBwbHlPcmlnaW4pIGNvbnN0Cit2b2lkIFJlbmRl
clN0eWxlOjphcHBseVRyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBj
b25zdCBGbG9hdFNpemUmIGJvcmRlckJveFNpemUsIEFwcGx5VHJhbnNmb3JtT3JpZ2luIGFwcGx5
T3JpZ2luKSBjb25zdAogewogICAgIC8vIHRyYW5zZm9ybS1vcmlnaW4gYnJhY2tldHMgdGhlIHRy
YW5zZm9ybSB3aXRoIHRyYW5zbGF0ZSBvcGVyYXRpb25zLgogICAgIC8vIE9wdGltaXplIGZvciB0
aGUgY2FzZSB3aGVyZSB0aGUgb25seSB0cmFuc2Zvcm0gaXMgYSB0cmFuc2xhdGlvbiwgc2luY2Ug
dGhlIHRyYW5zZm9ybS1vcmlnaW4gaXMgaXJyZWxldmFudApAQCAtMTA2Myw3ICsxMDYzLDcgQEAK
ICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyU3R5bGU6OmdldFNoYWRvd0hvcml6b250YWxFeHRlbnQo
Y29uc3QgU2hhZG93RGF0YSogc2hhZG93LCBpbnQgJmxlZnQsIGludCAmcmlnaHQpIGNvbnN0Cit2
b2lkIFJlbmRlclN0eWxlOjpnZXRTaGFkb3dIb3Jpem9udGFsRXh0ZW50KGNvbnN0IFNoYWRvd0Rh
dGEqIHNoYWRvdywgZmxvYXQgJmxlZnQsIGZsb2F0ICZyaWdodCkgY29uc3QKIHsKICAgICBsZWZ0
ID0gMDsKICAgICByaWdodCA9IDA7CkBAIC0xMDczLDEyICsxMDczLDEyIEBACiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgaW50IGJsdXJBbmRTcHJlYWQgPSBzaGFkb3ctPmJsdXIoKSAr
IHNoYWRvdy0+c3ByZWFkKCk7CiAKLSAgICAgICAgbGVmdCA9IG1pbihsZWZ0LCBzaGFkb3ctPngo
KSAtIGJsdXJBbmRTcHJlYWQpOwotICAgICAgICByaWdodCA9IG1heChyaWdodCwgc2hhZG93LT54
KCkgKyBibHVyQW5kU3ByZWFkKTsKKyAgICAgICAgbGVmdCA9IG1pbihsZWZ0LCAoZmxvYXQpc2hh
ZG93LT54KCkgLSBibHVyQW5kU3ByZWFkKTsKKyAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIChm
bG9hdClzaGFkb3ctPngoKSArIGJsdXJBbmRTcHJlYWQpOwogICAgIH0KIH0KIAotdm9pZCBSZW5k
ZXJTdHlsZTo6Z2V0U2hhZG93VmVydGljYWxFeHRlbnQoY29uc3QgU2hhZG93RGF0YSogc2hhZG93
LCBpbnQgJnRvcCwgaW50ICZib3R0b20pIGNvbnN0Cit2b2lkIFJlbmRlclN0eWxlOjpnZXRTaGFk
b3dWZXJ0aWNhbEV4dGVudChjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3csIGZsb2F0ICZ0b3AsIGZs
b2F0ICZib3R0b20pIGNvbnN0CiB7CiAgICAgdG9wID0gMDsKICAgICBib3R0b20gPSAwOwpAQCAt
MTA4OCw4ICsxMDg4LDggQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpbnQgYmx1
ckFuZFNwcmVhZCA9IHNoYWRvdy0+Ymx1cigpICsgc2hhZG93LT5zcHJlYWQoKTsKIAotICAgICAg
ICB0b3AgPSBtaW4odG9wLCBzaGFkb3ctPnkoKSAtIGJsdXJBbmRTcHJlYWQpOwotICAgICAgICBi
b3R0b20gPSBtYXgoYm90dG9tLCBzaGFkb3ctPnkoKSArIGJsdXJBbmRTcHJlYWQpOworICAgICAg
ICB0b3AgPSBtaW4odG9wLCAoZmxvYXQpc2hhZG93LT55KCkgLSBibHVyQW5kU3ByZWFkKTsKKyAg
ICAgICAgYm90dG9tID0gbWF4KGJvdHRvbSwgKGZsb2F0KXNoYWRvdy0+eSgpICsgYmx1ckFuZFNw
cmVhZCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjUyLDEwICs2NTIs
MTAgQEAKIAogICAgIGNvbnN0IFNoYWRvd0RhdGEqIHRleHRTaGFkb3coKSBjb25zdCB7IHJldHVy
biByYXJlSW5oZXJpdGVkRGF0YS0+dGV4dFNoYWRvdy5nZXQoKTsgfQogICAgIHZvaWQgZ2V0VGV4
dFNoYWRvd0V4dGVudChpbnQmIHRvcCwgaW50JiByaWdodCwgaW50JiBib3R0b20sIGludCYgbGVm
dCkgY29uc3QgeyBnZXRTaGFkb3dFeHRlbnQodGV4dFNoYWRvdygpLCB0b3AsIHJpZ2h0LCBib3R0
b20sIGxlZnQpOyB9Ci0gICAgdm9pZCBnZXRUZXh0U2hhZG93SG9yaXpvbnRhbEV4dGVudChpbnQm
IGxlZnQsIGludCYgcmlnaHQpIGNvbnN0IHsgZ2V0U2hhZG93SG9yaXpvbnRhbEV4dGVudCh0ZXh0
U2hhZG93KCksIGxlZnQsIHJpZ2h0KTsgfQotICAgIHZvaWQgZ2V0VGV4dFNoYWRvd1ZlcnRpY2Fs
RXh0ZW50KGludCYgdG9wLCBpbnQmIGJvdHRvbSkgY29uc3QgeyBnZXRTaGFkb3dWZXJ0aWNhbEV4
dGVudCh0ZXh0U2hhZG93KCksIHRvcCwgYm90dG9tKTsgfQotICAgIHZvaWQgZ2V0VGV4dFNoYWRv
d0lubGluZURpcmVjdGlvbkV4dGVudChpbnQmIGxvZ2ljYWxMZWZ0LCBpbnQmIGxvZ2ljYWxSaWdo
dCkgeyBnZXRTaGFkb3dJbmxpbmVEaXJlY3Rpb25FeHRlbnQodGV4dFNoYWRvdygpLCBsb2dpY2Fs
TGVmdCwgbG9naWNhbFJpZ2h0KTsgfQotICAgIHZvaWQgZ2V0VGV4dFNoYWRvd0Jsb2NrRGlyZWN0
aW9uRXh0ZW50KGludCYgbG9naWNhbFRvcCwgaW50JiBsb2dpY2FsQm90dG9tKSB7IGdldFNoYWRv
d0Jsb2NrRGlyZWN0aW9uRXh0ZW50KHRleHRTaGFkb3coKSwgbG9naWNhbFRvcCwgbG9naWNhbEJv
dHRvbSk7IH0KKyAgICB2b2lkIGdldFRleHRTaGFkb3dIb3Jpem9udGFsRXh0ZW50KGZsb2F0JiBs
ZWZ0LCBmbG9hdCYgcmlnaHQpIGNvbnN0IHsgZ2V0U2hhZG93SG9yaXpvbnRhbEV4dGVudCh0ZXh0
U2hhZG93KCksIGxlZnQsIHJpZ2h0KTsgfQorICAgIHZvaWQgZ2V0VGV4dFNoYWRvd1ZlcnRpY2Fs
RXh0ZW50KGZsb2F0JiB0b3AsIGZsb2F0JiBib3R0b20pIGNvbnN0IHsgZ2V0U2hhZG93VmVydGlj
YWxFeHRlbnQodGV4dFNoYWRvdygpLCB0b3AsIGJvdHRvbSk7IH0KKyAgICB2b2lkIGdldFRleHRT
aGFkb3dJbmxpbmVEaXJlY3Rpb25FeHRlbnQoZmxvYXQmIGxvZ2ljYWxMZWZ0LCBmbG9hdCYgbG9n
aWNhbFJpZ2h0KSB7IGdldFNoYWRvd0lubGluZURpcmVjdGlvbkV4dGVudCh0ZXh0U2hhZG93KCks
IGxvZ2ljYWxMZWZ0LCBsb2dpY2FsUmlnaHQpOyB9CisgICAgdm9pZCBnZXRUZXh0U2hhZG93Qmxv
Y2tEaXJlY3Rpb25FeHRlbnQoZmxvYXQmIGxvZ2ljYWxUb3AsIGZsb2F0JiBsb2dpY2FsQm90dG9t
KSB7IGdldFNoYWRvd0Jsb2NrRGlyZWN0aW9uRXh0ZW50KHRleHRTaGFkb3coKSwgbG9naWNhbFRv
cCwgbG9naWNhbEJvdHRvbSk7IH0KIAogICAgIGZsb2F0IHRleHRTdHJva2VXaWR0aCgpIGNvbnN0
IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U3Ryb2tlV2lkdGg7IH0KICAgICBDb2xv
clNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2xvclNwYWNl
PihyYXJlSW5oZXJpdGVkRGF0YS0+Y29sb3JTcGFjZSk7IH0KQEAgLTY3MiwxMCArNjcyLDEwIEBA
CiAKICAgICBjb25zdCBTaGFkb3dEYXRhKiBib3hTaGFkb3coKSBjb25zdCB7IHJldHVybiByYXJl
Tm9uSW5oZXJpdGVkRGF0YS0+bV9ib3hTaGFkb3cuZ2V0KCk7IH0KICAgICB2b2lkIGdldEJveFNo
YWRvd0V4dGVudChpbnQmIHRvcCwgaW50JiByaWdodCwgaW50JiBib3R0b20sIGludCYgbGVmdCkg
Y29uc3QgeyBnZXRTaGFkb3dFeHRlbnQoYm94U2hhZG93KCksIHRvcCwgcmlnaHQsIGJvdHRvbSwg
bGVmdCk7IH0KLSAgICB2b2lkIGdldEJveFNoYWRvd0hvcml6b250YWxFeHRlbnQoaW50JiBsZWZ0
LCBpbnQmIHJpZ2h0KSBjb25zdCB7IGdldFNoYWRvd0hvcml6b250YWxFeHRlbnQoYm94U2hhZG93
KCksIGxlZnQsIHJpZ2h0KTsgfQotICAgIHZvaWQgZ2V0Qm94U2hhZG93VmVydGljYWxFeHRlbnQo
aW50JiB0b3AsIGludCYgYm90dG9tKSBjb25zdCB7IGdldFNoYWRvd1ZlcnRpY2FsRXh0ZW50KGJv
eFNoYWRvdygpLCB0b3AsIGJvdHRvbSk7IH0KLSAgICB2b2lkIGdldEJveFNoYWRvd0lubGluZURp
cmVjdGlvbkV4dGVudChpbnQmIGxvZ2ljYWxMZWZ0LCBpbnQmIGxvZ2ljYWxSaWdodCkgeyBnZXRT
aGFkb3dJbmxpbmVEaXJlY3Rpb25FeHRlbnQoYm94U2hhZG93KCksIGxvZ2ljYWxMZWZ0LCBsb2dp
Y2FsUmlnaHQpOyB9Ci0gICAgdm9pZCBnZXRCb3hTaGFkb3dCbG9ja0RpcmVjdGlvbkV4dGVudChp
bnQmIGxvZ2ljYWxUb3AsIGludCYgbG9naWNhbEJvdHRvbSkgeyBnZXRTaGFkb3dCbG9ja0RpcmVj
dGlvbkV4dGVudChib3hTaGFkb3coKSwgbG9naWNhbFRvcCwgbG9naWNhbEJvdHRvbSk7IH0KKyAg
ICB2b2lkIGdldEJveFNoYWRvd0hvcml6b250YWxFeHRlbnQoZmxvYXQmIGxlZnQsIGZsb2F0JiBy
aWdodCkgY29uc3QgeyBnZXRTaGFkb3dIb3Jpem9udGFsRXh0ZW50KGJveFNoYWRvdygpLCBsZWZ0
LCByaWdodCk7IH0KKyAgICB2b2lkIGdldEJveFNoYWRvd1ZlcnRpY2FsRXh0ZW50KGZsb2F0JiB0
b3AsIGZsb2F0JiBib3R0b20pIGNvbnN0IHsgZ2V0U2hhZG93VmVydGljYWxFeHRlbnQoYm94U2hh
ZG93KCksIHRvcCwgYm90dG9tKTsgfQorICAgIHZvaWQgZ2V0Qm94U2hhZG93SW5saW5lRGlyZWN0
aW9uRXh0ZW50KGZsb2F0JiBsb2dpY2FsTGVmdCwgZmxvYXQmIGxvZ2ljYWxSaWdodCkgeyBnZXRT
aGFkb3dJbmxpbmVEaXJlY3Rpb25FeHRlbnQoYm94U2hhZG93KCksIGxvZ2ljYWxMZWZ0LCBsb2dp
Y2FsUmlnaHQpOyB9CisgICAgdm9pZCBnZXRCb3hTaGFkb3dCbG9ja0RpcmVjdGlvbkV4dGVudChm
bG9hdCYgbG9naWNhbFRvcCwgZmxvYXQmIGxvZ2ljYWxCb3R0b20pIHsgZ2V0U2hhZG93QmxvY2tE
aXJlY3Rpb25FeHRlbnQoYm94U2hhZG93KCksIGxvZ2ljYWxUb3AsIGxvZ2ljYWxCb3R0b20pOyB9
CiAKICAgICBTdHlsZVJlZmxlY3Rpb24qIGJveFJlZmxlY3QoKSBjb25zdCB7IHJldHVybiByYXJl
Tm9uSW5oZXJpdGVkRGF0YS0+bV9ib3hSZWZsZWN0LmdldCgpOyB9CiAgICAgRUJveFNpemluZyBi
b3hTaXppbmcoKSBjb25zdCB7IHJldHVybiBtX2JveC0+Ym94U2l6aW5nKCk7IH0KQEAgLTczNCw3
ICs3MzQsNyBAQAogICAgIGJvb2wgaGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCkgY29uc3Qg
eyByZXR1cm4gaGFzVHJhbnNmb3JtKCkgfHwgcHJlc2VydmVzM0QoKSB8fCBoYXNQZXJzcGVjdGl2
ZSgpOyB9CiAKICAgICBlbnVtIEFwcGx5VHJhbnNmb3JtT3JpZ2luIHsgSW5jbHVkZVRyYW5zZm9y
bU9yaWdpbiwgRXhjbHVkZVRyYW5zZm9ybU9yaWdpbiB9OwotICAgIHZvaWQgYXBwbHlUcmFuc2Zv
cm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplLCBB
cHBseVRyYW5zZm9ybU9yaWdpbiA9IEluY2x1ZGVUcmFuc2Zvcm1PcmlnaW4pIGNvbnN0OworICAg
IHZvaWQgYXBwbHlUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFNp
emUmIGJvcmRlckJveFNpemUsIEFwcGx5VHJhbnNmb3JtT3JpZ2luID0gSW5jbHVkZVRyYW5zZm9y
bU9yaWdpbikgY29uc3Q7CiAgICAgdm9pZCBzZXRQYWdlU2NhbGVUcmFuc2Zvcm0oZmxvYXQpOwog
CiAgICAgYm9vbCBoYXNNYXNrKCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEt
Pm1fbWFzay5oYXNJbWFnZSgpIHx8IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX21hc2tCb3hJbWFn
ZS5oYXNJbWFnZSgpOyB9CkBAIC0xMzM1LDEzICsxMzM1LDEzIEBACiBwcml2YXRlOgogICAgIHZv
aWQgaW5oZXJpdFVuaWNvZGVCaWRpRnJvbShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50KSB7IG5v
bmluaGVyaXRlZF9mbGFncy5fdW5pY29kZUJpZGkgPSBwYXJlbnQtPm5vbmluaGVyaXRlZF9mbGFn
cy5fdW5pY29kZUJpZGk7IH0KICAgICB2b2lkIGdldFNoYWRvd0V4dGVudChjb25zdCBTaGFkb3dE
YXRhKiwgaW50JiB0b3AsIGludCYgcmlnaHQsIGludCYgYm90dG9tLCBpbnQmIGxlZnQpIGNvbnN0
OwotICAgIHZvaWQgZ2V0U2hhZG93SG9yaXpvbnRhbEV4dGVudChjb25zdCBTaGFkb3dEYXRhKiwg
aW50JiBsZWZ0LCBpbnQmIHJpZ2h0KSBjb25zdDsKLSAgICB2b2lkIGdldFNoYWRvd1ZlcnRpY2Fs
RXh0ZW50KGNvbnN0IFNoYWRvd0RhdGEqLCBpbnQmIHRvcCwgaW50JiBib3R0b20pIGNvbnN0Owot
ICAgIHZvaWQgZ2V0U2hhZG93SW5saW5lRGlyZWN0aW9uRXh0ZW50KGNvbnN0IFNoYWRvd0RhdGEq
IHNoYWRvdywgaW50JiBsb2dpY2FsTGVmdCwgaW50JiBsb2dpY2FsUmlnaHQpIGNvbnN0CisgICAg
dm9pZCBnZXRTaGFkb3dIb3Jpem9udGFsRXh0ZW50KGNvbnN0IFNoYWRvd0RhdGEqLCBmbG9hdCYg
bGVmdCwgZmxvYXQmIHJpZ2h0KSBjb25zdDsKKyAgICB2b2lkIGdldFNoYWRvd1ZlcnRpY2FsRXh0
ZW50KGNvbnN0IFNoYWRvd0RhdGEqLCBmbG9hdCYgdG9wLCBmbG9hdCYgYm90dG9tKSBjb25zdDsK
KyAgICB2b2lkIGdldFNoYWRvd0lubGluZURpcmVjdGlvbkV4dGVudChjb25zdCBTaGFkb3dEYXRh
KiBzaGFkb3csIGZsb2F0JiBsb2dpY2FsTGVmdCwgZmxvYXQmIGxvZ2ljYWxSaWdodCkgY29uc3QK
ICAgICB7CiAgICAgICAgIHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZ2V0U2hh
ZG93SG9yaXpvbnRhbEV4dGVudChzaGFkb3csIGxvZ2ljYWxMZWZ0LCBsb2dpY2FsUmlnaHQpIDog
Z2V0U2hhZG93VmVydGljYWxFeHRlbnQoc2hhZG93LCBsb2dpY2FsTGVmdCwgbG9naWNhbFJpZ2h0
KTsKICAgICB9Ci0gICAgdm9pZCBnZXRTaGFkb3dCbG9ja0RpcmVjdGlvbkV4dGVudChjb25zdCBT
aGFkb3dEYXRhKiBzaGFkb3csIGludCYgbG9naWNhbFRvcCwgaW50JiBsb2dpY2FsQm90dG9tKSBj
b25zdAorICAgIHZvaWQgZ2V0U2hhZG93QmxvY2tEaXJlY3Rpb25FeHRlbnQoY29uc3QgU2hhZG93
RGF0YSogc2hhZG93LCBmbG9hdCYgbG9naWNhbFRvcCwgZmxvYXQmIGxvZ2ljYWxCb3R0b20pIGNv
bnN0CiAgICAgewogICAgICAgICByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGdl
dFNoYWRvd1ZlcnRpY2FsRXh0ZW50KHNoYWRvdywgbG9naWNhbFRvcCwgbG9naWNhbEJvdHRvbSkg
OiBnZXRTaGFkb3dIb3Jpem9udGFsRXh0ZW50KHNoYWRvdywgbG9naWNhbFRvcCwgbG9naWNhbEJv
dHRvbSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxp
Y2EuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBs
aWNhLmNwcAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVwbGljYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEyICs2MCwxMiBAQAogICAgIHNl
dFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7CiB9CiAKLXZvaWQgUmVuZGVyUmVw
bGljYTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9m
ZnNldCkKK3ZvaWQgUmVuZGVyUmVwbGljYTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEZsb2F0UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIGlmIChwYWludEluZm8ucGhhc2Ug
IT0gUGFpbnRQaGFzZUZvcmVncm91bmQgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VN
YXNrKQogICAgICAgICByZXR1cm47CiAgCi0gICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNl
dCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKKyAgICBGbG9hdFBvaW50IGFkanVzdGVkUGFp
bnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CiAKICAgICBpZiAocGFpbnRJbmZv
LnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQogICAgICAgICAvLyBUdXJuIGFyb3VuZCBh
bmQgcGFpbnQgdGhlIHBhcmVudCBsYXllci4gVXNlIHRlbXBvcmFyeSBjbGlwUmVjdHMsIHNvIHRo
YXQgdGhlIGxheWVyIGRvZXNuJ3QgZW5kIHVwIGNhY2hpbmcgY2xpcCByZWN0cwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uaAkocmV2aXNpb24gODg0OTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDcgKzUxLDcgQEAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQmVmb3JlQWZ0ZXJDb250ZW50
KFBzZXVkb0lkKTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNDb250cm9sQ2xpcCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIEludFJlY3QgY29udHJvbENsaXBSZWN0KGNvbnN0
IEludFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRSZWN0IGNvbnRyb2xDbGlwUmVjdChj
b25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAKICAgICB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5n
Jik7CiAgICAgU3RyaW5nIHRleHQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHQuaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxMyArOTYsMTMgQEAKIAogICAg
IHZpcnR1YWwgYm9vbCBjYW5CZVNlbGVjdGlvbkxlYWYoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHMpOwot
ICAgIHZpcnR1YWwgSW50UmVjdCBzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2Rl
bE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCA9IHRy
dWUpOworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JSZXBhaW50KFJlbmRl
ckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250
ZW50ID0gdHJ1ZSk7CiAgICAgdmlydHVhbCBJbnRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJv
eCosIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKTsKIAot
ICAgIHZpcnR1YWwgaW50IG1hcmdpbkxlZnQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5tYXJn
aW5MZWZ0KCkuY2FsY01pblZhbHVlKDApOyB9Ci0gICAgdmlydHVhbCBpbnQgbWFyZ2luUmlnaHQo
KSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5tYXJnaW5SaWdodCgpLmNhbGNNaW5WYWx1ZSgwKTsg
fQorICAgIHZpcnR1YWwgZmxvYXQgbWFyZ2luTGVmdCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCkt
Pm1hcmdpbkxlZnQoKS5jYWxjTWluVmFsdWUoMCk7IH0KKyAgICB2aXJ0dWFsIGZsb2F0IG1hcmdp
blJpZ2h0KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+bWFyZ2luUmlnaHQoKS5jYWxjTWluVmFs
dWUoMCk7IH0KIAotICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVw
YWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7CisgICAgdmlydHVh
bCBGbG9hdFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIpOwogCiAgICAgSW5saW5lVGV4dEJveCogZmlyc3RUZXh0
Qm94KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdFRleHRCb3g7IH0KICAgICBJbmxpbmVUZXh0Qm94
KiBsYXN0VGV4dEJveCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFRleHRCb3g7IH0KQEAgLTE0Nyw3
ICsxNDcsNyBAQAogICAgIC8vIGNhbGxlcnMgd2l0aCBhIFJlbmRlck9iamVjdCogY2FuIGNvbnRp
bnVlIHRvIHVzZSBsZW5ndGgoKS4KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIHRleHRMZW5ndGgoKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGNvbnN0IEludFBvaW50JikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZp
cnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBGbG9hdFBvaW50JikgeyBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQm
LCBIaXRUZXN0QWN0aW9uKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9s
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxv
YWRDb250cm9sLmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcg
QEAKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwogICAgIHZpcnR1YWwg
dm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwotICAgIHZpcnR1YWwgdm9pZCBw
YWludE9iamVjdChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOworICAgIHZpcnR1YWwgdm9p
ZCBwYWludE9iamVjdChQYWludEluZm8mLCBjb25zdCBGbG9hdFBvaW50Jik7CiAKICAgICB2aXJ0
dWFsIGJvb2wgcmVxdWlyZXNGb3JjZWRTdHlsZVJlY2FsY1Byb3BhZ2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2wuaAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2wuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsOSArOTAsOSBAQAog
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVMZWZ0b3ZlckFub255bW91c0Jsb2NrKFJlbmRlckJsb2Nr
KikgeyB9CiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGF2b2lkc0Zsb2F0cygpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgY29uc3Qg
SW50UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgY29u
c3QgRmxvYXRQb2ludCYpOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0
cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBJbnRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBh
ZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBGbG9hdFBvaW50Jik7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgY2FuQmVQcm9ncmFtYXRpY2FsbHlTY3JvbGxlZCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KIApAQCAtMTA4LDcgKzEwOCw3IEBACiAgICAgdmlydHVhbCBpbnQgdGV4
dEJsb2NrSW5zZXRSaWdodCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCB0ZXh0QmxvY2tJ
bnNldFRvcCgpIGNvbnN0ID0gMDsKIAotICAgIHZvaWQgcGFpbnRQbGFjZWhvbGRlcihQYWludElu
Zm8mLCBjb25zdCBJbnRQb2ludCYpOworICAgIHZvaWQgcGFpbnRQbGFjZWhvbGRlcihQYWludElu
Zm8mLCBjb25zdCBGbG9hdFBvaW50Jik7CiAKICAgICBib29sIG1fbGFzdENoYW5nZVdhc1VzZXJF
ZGl0OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzU2
LDcgKzEzNTYsNyBAQAogICAgICAgICByZXR1cm4gcGx1Z2luUmVuZGVyZXItPmhhc0xheWVyKCkg
JiYgcGx1Z2luUmVuZGVyZXItPmxheWVyKCktPmlzQ29tcG9zaXRlZCgpOwogCiAgICAgLy8gRG9u
J3QgZ28gaW50byBjb21wb3NpdGluZyBtb2RlIGlmIGhlaWdodCBvciB3aWR0aCBhcmUgemVybywg
b3Igc2l6ZSBpcyAxeDEuCi0gICAgSW50UmVjdCBjb250ZW50Qm94ID0gcGx1Z2luUmVuZGVyZXIt
PmNvbnRlbnRCb3hSZWN0KCk7CisgICAgRmxvYXRSZWN0IGNvbnRlbnRCb3ggPSBwbHVnaW5SZW5k
ZXJlci0+Y29udGVudEJveFJlY3QoKTsKICAgICByZXR1cm4gY29udGVudEJveC5oZWlnaHQoKSAq
IGNvbnRlbnRCb3gud2lkdGgoKSA+IDE7CiB9CiAKQEAgLTEzODEsNyArMTM4MSw3IEBACiAgICAg
ICAgIHJldHVybiBmcmFtZVJlbmRlcmVyLT5oYXNMYXllcigpICYmIGZyYW1lUmVuZGVyZXItPmxh
eWVyKCktPmlzQ29tcG9zaXRlZCgpOwogICAgIAogICAgIC8vIERvbid0IGdvIGludG8gY29tcG9z
aXRpbmcgbW9kZSBpZiBoZWlnaHQgb3Igd2lkdGggYXJlIHplcm8uCi0gICAgSW50UmVjdCBjb250
ZW50Qm94ID0gZnJhbWVSZW5kZXJlci0+Y29udGVudEJveFJlY3QoKTsKKyAgICBGbG9hdFJlY3Qg
Y29udGVudEJveCA9IGZyYW1lUmVuZGVyZXItPmNvbnRlbnRCb3hSZWN0KCk7CiAgICAgcmV0dXJu
IGNvbnRlbnRCb3guaGVpZ2h0KCkgKiBjb250ZW50Qm94LndpZHRoKCkgPiAwOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCShyZXZpc2lvbiA4ODQ5NikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTI2
LDcgKzEyNiw3IEBACiAgICAgICAgICAgICBhZGp1c3RQb3NpdGlvbihkZWx0YSwgMCk7CiAgICAg
fQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jiwg
aW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFp
bnRJbmZvJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7
CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBJbnRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7CiAK
ICAgICBJbmxpbmVCb3gqIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQ7IH0KQEAgLTI1NCw5
ICsyNTQsOSBAQAogICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJl
dHVybiBjZWlsZihsb2dpY2FsUmlnaHQoKSk7IH0KIAogICAgIC8vIFRoZSBsb2dpY2FsVG9wWyBw
b3NpdGlvbiBpcyB0aGUgdG9wIGVkZ2Ugb2YgdGhlIGxpbmUgYm94IGluIGEgaG9yaXpvbnRhbCBs
aW5lIGFuZCB0aGUgbGVmdCBlZGdlIGluIGEgdmVydGljYWwgbGluZS4KLSAgICBpbnQgbG9naWNh
bFRvcCgpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbCgpID8gbV90b3BMZWZ0LnkoKSA6IG1f
dG9wTGVmdC54KCk7IH0KLSAgICBpbnQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGxv
Z2ljYWxUb3AoKSArIGxvZ2ljYWxIZWlnaHQoKTsgfQotICAgIHZvaWQgc2V0TG9naWNhbFRvcChp
bnQgdG9wKQorICAgIGZsb2F0IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250
YWwoKSA/IG1fdG9wTGVmdC55KCkgOiBtX3RvcExlZnQueCgpOyB9CisgICAgZmxvYXQgbG9naWNh
bEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxUb3AoKSArIGxvZ2ljYWxIZWlnaHQoKTsg
fQorICAgIHZvaWQgc2V0TG9naWNhbFRvcChmbG9hdCB0b3ApCiAgICAgewogICAgICAgICBpZiAo
aXNIb3Jpem9udGFsKCkpCiAgICAgICAgICAgICBzZXRZKHRvcCk7CkBAIC0yNzMsOCArMjczLDgg
QEAKIAogICAgIEZsb2F0UmVjdCBsb2dpY2FsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gaXNI
b3Jpem9udGFsKCkgPyBJbnRSZWN0KG1fdG9wTGVmdC54KCksIG1fdG9wTGVmdC55KCksIG1fbG9n
aWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KCkpIDogSW50UmVjdChtX3RvcExlZnQueSgpLCBtX3Rv
cExlZnQueCgpLCBtX2xvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCgpKTsgfQogCi0gICAgdmly
dHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlKSBjb25z
dCB7IHJldHVybiBib3hNb2RlbE9iamVjdCgpLT5iYXNlbGluZVBvc2l0aW9uKGJhc2VsaW5lVHlw
ZSwgbV9maXJzdExpbmUsIGlzSG9yaXpvbnRhbCgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNh
bExpbmUsIFBvc2l0aW9uT25Db250YWluaW5nTGluZSk7IH0KLSAgICB2aXJ0dWFsIGludCBsaW5l
SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gYm94TW9kZWxPYmplY3QoKS0+bGluZUhlaWdodChtX2Zp
cnN0TGluZSwgaXNIb3Jpem9udGFsKCkgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSwg
UG9zaXRpb25PbkNvbnRhaW5pbmdMaW5lKTsgfQorICAgIHZpcnR1YWwgZmxvYXQgYmFzZWxpbmVQ
b3NpdGlvbihGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlKSBjb25zdCB7IHJldHVybiBib3hNb2Rl
bE9iamVjdCgpLT5iYXNlbGluZVBvc2l0aW9uKGJhc2VsaW5lVHlwZSwgbV9maXJzdExpbmUsIGlz
SG9yaXpvbnRhbCgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9uT25D
b250YWluaW5nTGluZSk7IH0KKyAgICB2aXJ0dWFsIGZsb2F0IGxpbmVIZWlnaHQoKSBjb25zdCB7
IHJldHVybiBib3hNb2RlbE9iamVjdCgpLT5saW5lSGVpZ2h0KG1fZmlyc3RMaW5lLCBpc0hvcml6
b250YWwoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lLCBQb3NpdGlvbk9uQ29udGFp
bmluZ0xpbmUpOyB9CiAgICAgCiAgICAgdmlydHVhbCBpbnQgY2FyZXRNaW5PZmZzZXQoKSBjb25z
dDsKICAgICB2aXJ0dWFsIGludCBjYXJldE1heE9mZnNldCgpIGNvbnN0OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5oCShyZXZpc2lvbiA4
ODQ5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBj
b25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckRldGFpbHNNYXJr
ZXIiOyB9CiAgICAgdmlydHVhbCBib29sIGlzRGV0YWlsc01hcmtlcigpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9p
bnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRQb2lu
dCYpOwogCiAgICAgYm9vbCBpc09wZW4oKSBjb25zdDsKICAgICBQYXRoIGdldENhbm9uaWNhbFBh
dGgoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNl
bGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVD
ZWxsLmgJKHJldmlzaW9uIDg4NDk2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NywyNCArNTcsMjQgQEAKIAogICAgIHZv
aWQgdXBkYXRlTG9naWNhbFdpZHRoKGludCk7CiAKLSAgICB2aXJ0dWFsIGludCBib3JkZXJMZWZ0
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgYm9yZGVyUmlnaHQoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGludCBib3JkZXJUb3AoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBib3JkZXJCb3R0b20o
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBib3JkZXJTdGFydCgpIGNvbnN0OwotICAgIHZpcnR1
YWwgaW50IGJvcmRlckVuZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGJvcmRlckJlZm9yZSgp
IGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGJvcmRlckFmdGVyKCkgY29uc3Q7CisgICAgdmlydHVh
bCBmbG9hdCBib3JkZXJMZWZ0KCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBib3JkZXJSaWdo
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgYm9yZGVyVG9wKCkgY29uc3Q7CisgICAgdmly
dHVhbCBmbG9hdCBib3JkZXJCb3R0b20oKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IGJvcmRl
clN0YXJ0KCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBib3JkZXJFbmQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGZsb2F0IGJvcmRlckJlZm9yZSgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQg
Ym9yZGVyQWZ0ZXIoKSBjb25zdDsKIAotICAgIGludCBib3JkZXJIYWxmTGVmdChib29sIG91dGVy
KSBjb25zdDsKLSAgICBpbnQgYm9yZGVySGFsZlJpZ2h0KGJvb2wgb3V0ZXIpIGNvbnN0OwotICAg
IGludCBib3JkZXJIYWxmVG9wKGJvb2wgb3V0ZXIpIGNvbnN0OwotICAgIGludCBib3JkZXJIYWxm
Qm90dG9tKGJvb2wgb3V0ZXIpIGNvbnN0OworICAgIGZsb2F0IGJvcmRlckhhbGZMZWZ0KGJvb2wg
b3V0ZXIpIGNvbnN0OworICAgIGZsb2F0IGJvcmRlckhhbGZSaWdodChib29sIG91dGVyKSBjb25z
dDsKKyAgICBmbG9hdCBib3JkZXJIYWxmVG9wKGJvb2wgb3V0ZXIpIGNvbnN0OworICAgIGZsb2F0
IGJvcmRlckhhbGZCb3R0b20oYm9vbCBvdXRlcikgY29uc3Q7CiAKLSAgICBpbnQgYm9yZGVySGFs
ZlN0YXJ0KGJvb2wgb3V0ZXIpIGNvbnN0OwotICAgIGludCBib3JkZXJIYWxmRW5kKGJvb2wgb3V0
ZXIpIGNvbnN0OwotICAgIGludCBib3JkZXJIYWxmQmVmb3JlKGJvb2wgb3V0ZXIpIGNvbnN0Owot
ICAgIGludCBib3JkZXJIYWxmQWZ0ZXIoYm9vbCBvdXRlcikgY29uc3Q7CisgICAgZmxvYXQgYm9y
ZGVySGFsZlN0YXJ0KGJvb2wgb3V0ZXIpIGNvbnN0OworICAgIGZsb2F0IGJvcmRlckhhbGZFbmQo
Ym9vbCBvdXRlcikgY29uc3Q7CisgICAgZmxvYXQgYm9yZGVySGFsZkJlZm9yZShib29sIG91dGVy
KSBjb25zdDsKKyAgICBmbG9hdCBib3JkZXJIYWxmQWZ0ZXIoYm9vbCBvdXRlcikgY29uc3Q7CiAK
ICAgICBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBjb2xsYXBzZWRTdGFydEJvcmRlcigpIGNvbnN0Owog
ICAgIENvbGxhcHNlZEJvcmRlclZhbHVlIGNvbGxhcHNlZEVuZEJvcmRlcigpIGNvbnN0OwpAQCAt
OTQsOSArOTQsOSBAQAogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCi0gICAgdmlydHVh
bCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CisgICAgdmlydHVhbCB2
b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKIAotICAgIHZvaWQgcGFp
bnRCYWNrZ3JvdW5kc0JlaGluZENlbGwoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmLCBSZW5k
ZXJPYmplY3QqIGJhY2tncm91bmRPYmplY3QpOworICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kc0Jl
aGluZENlbGwoUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRQb2ludCYsIFJlbmRlck9iamVjdCogYmFj
a2dyb3VuZE9iamVjdCk7CiAKICAgICBpbnQgY2VsbEJhc2VsaW5lUG9zaXRpb24oKSBjb25zdDsK
IApAQCAtMTA4LDE2ICsxMDgsMTYgQEAKICAgICBpbnQgaW50cmluc2ljUGFkZGluZ0JlZm9yZSgp
IGNvbnN0IHsgcmV0dXJuIG1faW50cmluc2ljUGFkZGluZ0JlZm9yZTsgfQogICAgIGludCBpbnRy
aW5zaWNQYWRkaW5nQWZ0ZXIoKSBjb25zdCB7IHJldHVybiBtX2ludHJpbnNpY1BhZGRpbmdBZnRl
cjsgfQogCi0gICAgdmlydHVhbCBpbnQgcGFkZGluZ1RvcChib29sIGluY2x1ZGVJbnRyaW5zaWNQ
YWRkaW5nID0gdHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgcGFkZGluZ0JvdHRvbShib29s
IGluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nID0gdHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQg
cGFkZGluZ0xlZnQoYm9vbCBpbmNsdWRlSW50cmluc2ljUGFkZGluZyA9IHRydWUpIGNvbnN0Owot
ICAgIHZpcnR1YWwgaW50IHBhZGRpbmdSaWdodChib29sIGluY2x1ZGVJbnRyaW5zaWNQYWRkaW5n
ID0gdHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBwYWRkaW5nVG9wKGJvb2wgaW5jbHVk
ZUludHJpbnNpY1BhZGRpbmcgPSB0cnVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IHBhZGRp
bmdCb3R0b20oYm9vbCBpbmNsdWRlSW50cmluc2ljUGFkZGluZyA9IHRydWUpIGNvbnN0OworICAg
IHZpcnR1YWwgZmxvYXQgcGFkZGluZ0xlZnQoYm9vbCBpbmNsdWRlSW50cmluc2ljUGFkZGluZyA9
IHRydWUpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgcGFkZGluZ1JpZ2h0KGJvb2wgaW5jbHVk
ZUludHJpbnNpY1BhZGRpbmcgPSB0cnVlKSBjb25zdDsKICAgICAKICAgICAvLyBGSVhNRTogRm9y
IG5vdyB3ZSBqdXN0IGFzc3VtZSB0aGUgY2VsbCBoYXMgdGhlIHNhbWUgYmxvY2sgZmxvdyBkaXJl
Y3Rpb24gYXMgdGhlIHRhYmxlLiAgSXQncyBsaWtlbHkgd2UnbGwKICAgICAvLyBjcmVhdGUgYW4g
ZXh0cmEgYW5vbnltb3VzIFJlbmRlckJsb2NrIHRvIGhhbmRsZSBtaXhpbmcgZGlyZWN0aW9uYWxp
dHkgYW55d2F5LCBpbiB3aGljaCBjYXNlIHdlIGNhbiBsb2NrCiAgICAgLy8gdGhlIGJsb2NrIGZs
b3cgZGlyZWN0aW9uYWxpdHkgb2YgdGhlIGNlbGxzIHRvIHRoZSB0YWJsZSdzIGRpcmVjdGlvbmFs
aXR5LgotICAgIHZpcnR1YWwgaW50IHBhZGRpbmdCZWZvcmUoYm9vbCBpbmNsdWRlSW50cmluc2lj
UGFkZGluZyA9IHRydWUpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBhZGRpbmdBZnRlcihib29s
IGluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nID0gdHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9h
dCBwYWRkaW5nQmVmb3JlKGJvb2wgaW5jbHVkZUludHJpbnNpY1BhZGRpbmcgPSB0cnVlKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGZsb2F0IHBhZGRpbmdBZnRlcihib29sIGluY2x1ZGVJbnRyaW5zaWNQ
YWRkaW5nID0gdHJ1ZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0T3ZlcnJpZGVTaXpl
KGludCk7CiAgICAgdm9pZCBzZXRPdmVycmlkZVNpemVGcm9tUm93SGVpZ2h0KGludCk7CkBAIC0x
NDIsMTQgKzE0MiwxNCBAQAogCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVMb2dpY2FsV2lkdGgo
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGNv
bnN0IEludFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50TWFzayhQYWludEluZm8mLCBj
b25zdCBJbnRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludEJveERlY29yYXRpb25zKFBh
aW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRNYXNr
KFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKIAotICAgIHZpcnR1YWwgSW50U2l6ZSBv
ZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7
Ci0gICAgdmlydHVhbCBJbnRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KFJlbmRl
ckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29t
cHV0ZVJlY3RGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVy
LCBJbnRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIEZsb2F0U2l6ZSBv
ZmZzZXRGcm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCosIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChS
ZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcik7CisgICAgdmlydHVhbCB2b2lk
IGNvbXB1dGVSZWN0Rm9yUmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRh
aW5lciwgRmxvYXRSZWN0JiwgYm9vbCBmaXhlZCA9IGZhbHNlKTsKIAotICAgIHZvaWQgcGFpbnRD
b2xsYXBzZWRCb3JkZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgIHZv
aWQgcGFpbnRDb2xsYXBzZWRCb3JkZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0
Jik7CiAKICAgICBpbnQgbV9yb3c7CiAgICAgaW50IG1fY29sdW1uOwpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0OTEs
OCArNTQ5MSw4IEBACiAgICAgICAgICAgICAvLyA8bGVuZ3RoPnsyfQogICAgICAgICAgICAgaWYg
KCFDU1NQcmltaXRpdmVWYWx1ZTo6aXNVbml0VHlwZUxlbmd0aCh0eXBlMSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgd2lkdGggPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUw
LT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSks
IEZpeGVkKTsKLSAgICAgICAgICAgIGhlaWdodCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZTEtPmNv
bXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlKSwgRml4
ZWQpOworICAgICAgICAgICAgd2lkdGggPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUwLT5jb21wdXRl
TGVuZ3RoRmxvYXQoc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCBmYWxzZSksIEZpeGVkKTsK
KyAgICAgICAgICAgIGhlaWdodCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZTEtPmNvbXB1dGVMZW5n
dGhGbG9hdChzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIGZhbHNlKSwgRml4ZWQpOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gPHBhZ2Utc2l6ZT4gPG9yaWVudGF0aW9uPgog
ICAgICAgICAgICAgLy8gVGhlIHZhbHVlIG9yZGVyIGlzIGd1YXJhbnRlZWQuIFNlZSBDU1NQYXJz
ZXI6OnBhcnNlU2l6ZVBhcmFtZXRlci4KQEAgLTU1MTAsNyArNTUxMCw3IEBACiAgICAgICAgIGlm
IChDU1NQcmltaXRpdmVWYWx1ZTo6aXNVbml0VHlwZUxlbmd0aCh0eXBlKSkgewogICAgICAgICAg
ICAgLy8gPGxlbmd0aD4KICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9SRVNP
TFZFRDsKLSAgICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVl
LT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSks
IEZpeGVkKTsKKyAgICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gTGVuZ3RoKHByaW1pdGl2ZVZh
bHVlLT5jb21wdXRlTGVuZ3RoRmxvYXQoc3R5bGUoKSwgbV9yb290RWxlbWVudFN0eWxlLCBmYWxz
ZSksIEZpeGVkKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICh0eXBlICE9IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAt
NTgxOSw3ICs1ODE5LDcgQEAKICAgICBMZW5ndGggbDsKICAgICBpbnQgdHlwZSA9IHByaW1pdGl2
ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCk7CiAgICAgaWYgKENTU1ByaW1pdGl2ZVZhbHVlOjppc1Vu
aXRUeXBlTGVuZ3RoKHR5cGUpKQotICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5j
b21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9v
bUZhY3RvciksIEZpeGVkKTsKKyAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29t
cHV0ZUxlbmd0aEZsb2F0KHN0eWxlKCksIG1fcm9vdEVsZW1lbnRTdHlsZSwgem9vbUZhY3Rvciwg
ZmFsc2UpLCBGaXhlZCk7CiAgICAgZWxzZSBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1BFUkNFTlRBR0UpCiAgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERv
dWJsZVZhbHVlKCksIFBlcmNlbnQpOwogICAgIGVsc2UKQEAgLTU4NDMsNyArNTg0Myw3IEBACiAg
ICAgTGVuZ3RoIGw7CiAgICAgaW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlw
ZSgpOwogICAgIGlmIChDU1NQcmltaXRpdmVWYWx1ZTo6aXNVbml0VHlwZUxlbmd0aCh0eXBlKSkK
LSAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxl
bmd0aChzdHlsZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IpLCBGaXhlZCk7Cisg
ICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhGbG9hdChzdHls
ZSgpLCBtX3Jvb3RFbGVtZW50U3R5bGUsIHpvb21GYWN0b3IsIGZhbHNlKSwgRml4ZWQpOwogICAg
IGVsc2UgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQogICAg
ICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50
KTsKICAgICBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gODg0OTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDQ0LDcgKzQ0NCw3IEBACiAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogfQogCi1zdGF0aWMg
SW50UmVjdCBzaXppbmdCb3goUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3N0YXRpYyBGbG9hdFJl
Y3Qgc2l6aW5nQm94KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAgaWYgKCFyZW5kZXJl
ci0+aXNCb3goKSkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKQEAgLTQ2Myw3ICs0NjMsNyBA
QAogICAgIGlmICghcmVuZGVyZXIgfHwgc3R5bGUtPnRyYW5zZm9ybSgpLm9wZXJhdGlvbnMoKS5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZUNhY2hlLT5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKICAgICAKLSAgICBJbnRSZWN0IGJveCA9IHNpemlu
Z0JveChyZW5kZXJlcik7CisgICAgRmxvYXRSZWN0IGJveCA9IHNpemluZ0JveChyZW5kZXJlcik7
CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CiAgICAgc3R5bGUtPmFwcGx5
VHJhbnNmb3JtKHRyYW5zZm9ybSwgYm94LnNpemUoKSwgUmVuZGVyU3R5bGU6OkV4Y2x1ZGVUcmFu
c2Zvcm1PcmlnaW4pOwpAQCAtMTU1Niw3ICsxNTU2LDcgQEAKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFBlcnNwZWN0aXZlT3JpZ2luOiB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFs
dWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAg
ICAgICAgICAgaWYgKHJlbmRlcmVyKSB7Ci0gICAgICAgICAgICAgICAgSW50UmVjdCBib3ggPSBz
aXppbmdCb3gocmVuZGVyZXIpOworICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBib3ggPSBzaXpp
bmdCb3gocmVuZGVyZXIpOwogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0
ZWRQaXhlbFZhbHVlKHN0eWxlLT5wZXJzcGVjdGl2ZU9yaWdpblgoKS5jYWxjTWluVmFsdWUoYm94
LndpZHRoKCkpLCBzdHlsZS5nZXQoKSwgcHJpbWl0aXZlVmFsdWVDYWNoZSkpOwogICAgICAgICAg
ICAgICAgIGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT5wZXJzcGVj
dGl2ZU9yaWdpblkoKS5jYWxjTWluVmFsdWUoYm94LmhlaWdodCgpKSwgc3R5bGUuZ2V0KCksIHBy
aW1pdGl2ZVZhbHVlQ2FjaGUpKTsKICAgICAgICAgICAgIH0KQEAgLTE2MDAsNyArMTYwMCw3IEBA
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW46IHsKICAgICAg
ICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNw
YWNlU2VwYXJhdGVkKCk7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIpIHsKLSAgICAgICAgICAg
ICAgICBJbnRSZWN0IGJveCA9IHNpemluZ0JveChyZW5kZXJlcik7CisgICAgICAgICAgICAgICAg
RmxvYXRSZWN0IGJveCA9IHNpemluZ0JveChyZW5kZXJlcik7CiAgICAgICAgICAgICAgICAgbGlz
dC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPnRyYW5zZm9ybU9yaWdpblgo
KS5jYWxjTWluVmFsdWUoYm94LndpZHRoKCkpLCBzdHlsZS5nZXQoKSwgcHJpbWl0aXZlVmFsdWVD
YWNoZSkpOwogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZh
bHVlKHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5ZKCkuY2FsY01pblZhbHVlKGJveC5oZWlnaHQoKSks
IHN0eWxlLmdldCgpLCBwcmltaXRpdmVWYWx1ZUNhY2hlKSk7CiAgICAgICAgICAgICAgICAgaWYg
KHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5aKCkgIT0gMCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZUFwcGx5UHJvcGVydHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZUFwcGx5UHJvcGVydHkuY3BwCShyZXZpc2lvbiA4ODQ5NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZUFwcGx5UHJvcGVydHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjksNyArMjI5LDcgQEAKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpbnQgdHlwZSA9
IHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCk7CiAgICAgICAgICAgICBpZiAoQ1NTUHJp
bWl0aXZlVmFsdWU6OmlzVW5pdFR5cGVMZW5ndGgodHlwZSkpCi0gICAgICAgICAgICAgICAgKHNl
bGVjdG9yLT5zdHlsZSgpLT4qbV9zZXR0ZXIpKExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0
ZUxlbmd0aEludEZvckxlbmd0aChzZWxlY3Rvci0+c3R5bGUoKSwgc2VsZWN0b3ItPnJvb3RFbGVt
ZW50U3R5bGUoKSwgc2VsZWN0b3ItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSksIEZpeGVkLCBw
cmltaXRpdmVWYWx1ZS0+aXNRdWlya1ZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICAoc2VsZWN0
b3ItPnN0eWxlKCktPiptX3NldHRlcikoTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVu
Z3RoRmxvYXQoc2VsZWN0b3ItPnN0eWxlKCksIHNlbGVjdG9yLT5yb290RWxlbWVudFN0eWxlKCks
IHNlbGVjdG9yLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCksIGZhbHNlKSwgRml4ZWQsIHByaW1p
dGl2ZVZhbHVlLT5pc1F1aXJrVmFsdWUoKSkpOwogICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCiAgICAgICAgICAgICAgICAgKHNl
bGVjdG9yLT5zdHlsZSgpLT4qbV9zZXR0ZXIpKExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91
YmxlVmFsdWUoKSwgUGVyY2VudCkpOwogICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100367</attachid>
            <date>2011-07-11 15:17:43 -0700</date>
            <delta_ts>2012-02-07 10:32:01 -0800</delta_ts>
            <desc>Patch switching LayoutUnit int -&gt; float. Do not review.</desc>
            <filename>p</filename>
            <type>text/plain</type>
            <size>1177</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oICAocmV2aXNpb24gOTA3
ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaCAgKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDM0ICs0MSwzNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVk
ZWYgaW50IExheW91dFVuaXQ7Ci10eXBlZGVmIEludFBvaW50IExheW91dFBvaW50OwotdHlwZWRl
ZiBJbnRTaXplIExheW91dFNpemU7Ci10eXBlZGVmIEludFJlY3QgTGF5b3V0UmVjdDsKK3R5cGVk
ZWYgZmxvYXQgTGF5b3V0VW5pdDsKK3R5cGVkZWYgRmxvYXRQb2ludCBMYXlvdXRQb2ludDsKK3R5
cGVkZWYgRmxvYXRTaXplIExheW91dFNpemU7Cit0eXBlZGVmIEZsb2F0UmVjdCBMYXlvdXRSZWN0
OwogCiBpbmxpbmUgTGF5b3V0UmVjdCBlbmNsb3NpbmdMYXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIHsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChyZWN0KTsKKyAgICByZXR1
cm4gcmVjdDsKIH0KIAogaW5saW5lIExheW91dFBvaW50IHJvdW5kZWRMYXlvdXRQb2ludChjb25z
dCBGbG9hdFBvaW50JiBwKQogewotICAgIHJldHVybiByb3VuZGVkSW50UG9pbnQocCk7CisgICAg
cmV0dXJuIHA7CiB9CiAKIGlubGluZSBMYXlvdXRQb2ludCBmbG9vcmVkTGF5b3V0UG9pbnQoY29u
c3QgRmxvYXRQb2ludCYgcCkKIHsKLSAgICByZXR1cm4gZmxvb3JlZEludFBvaW50KHApOworICAg
IHJldHVybiBwOwogfQogCiBpbmxpbmUgTGF5b3V0UG9pbnQgZmxvb3JlZExheW91dFBvaW50KGNv
bnN0IEZsb2F0U2l6ZSYgcykKIHsKLSAgICByZXR1cm4gZmxvb3JlZEludFBvaW50KHMpOworICAg
IHJldHVybiBMYXlvdXRQb2ludChzLndpZHRoKCksIHMuaGVpZ2h0KCkpOwogfQogCiBpbmxpbmUg
TGF5b3V0VW5pdCByb3VuZGVkTGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
bHJvdW5kZih2YWx1ZSk7CisgICAgcmV0dXJuIHZhbHVlOwogfQogCiBpbmxpbmUgTGF5b3V0U2l6
ZSB0b0xheW91dFNpemUoY29uc3QgTGF5b3V0UG9pbnQmIHApCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139264</attachid>
            <date>2012-04-27 13:47:01 -0700</date>
            <delta_ts>2012-04-27 14:29:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60318-20120427134700.patch</filename>
            <type>text/plain</type>
            <size>64559</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMTE1NDg4KQorKysgU291cmNlL1dURi93dGYvUGxh
dGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtODA3LDYgKzgwNywxMCBAQAogI2RlZmluZSBFTkFC
TEVfR0xPQkFMX0ZBU1RNQUxMT0NfTkVXIDEKICNlbmRpZgogCisjaWYgIWRlZmluZWQoRU5BQkxF
X1NVQlBJWEVMX0xBWU9VVCkKKyNkZWZpbmUgRU5BQkxFX1NVQlBJWEVMX0xBWU9VVCAwCisjZW5k
aWYKKwogI2RlZmluZSBFTkFCTEVfREVCVUdfV0lUSF9CUkVBS1BPSU5UIDAKICNkZWZpbmUgRU5B
QkxFX1NBTVBMSU5HX0NPVU5URVJTIDAKICNkZWZpbmUgRU5BQkxFX1NBTVBMSU5HX0ZMQUdTIDAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBACisyMDEyLTA0LTIzICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4gYW5kIEVtaWwgQSBFa2x1bmQgPGVhZUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgW21ldGFdIFN3aXRjaCBhd2F5IGZyb20gaW50ZWdlcnMgcmVw
cmVzZW50aW5nIHBpeGVscyBmb3IgbGF5b3V0L2V2ZW50IGhhbmRsaW5nL3JlbmRlcmluZworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMTgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTd2FwcGluZyB0aGUg
TGF5b3V0VW5pdCBiYWNrZW5kIHRvIEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyb20gaW50LgorICAg
ICAgICAKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgaXMgYSBuZXcgdHlwZSB0aGF0IHVz
ZXMgYW4gaW50ZWdlciB0byByZXByZXNlbnQgYSBmcmFjdGlvbiBvZiBhIHBpeGVsLgorICAgICAg
ICBXZSdyZSBhbHNvIGFkZGluZyBhIGZlYXR1cmUgZmxhZyAtLSBFTkFCTEVfU1VCUElYRUxfTEFZ
T1VUIC0tIHRoYXQgdG9nZ2xlcyB0aGlzIGZyYWN0aW9uCisgICAgICAgIGJldHdlZW4gMS8xIGFu
ZCAxLzYwLiBJbml0aWFsbHksIGFsbCBwbGF0Zm9ybXMgd2lsbCBkZWZhdWx0IHRvIHN1YnBpeGVs
IGxheW91dCBiZWluZyBvZmYsCisgICAgICAgIHNvIEZyYWN0aW9uYWxMYXlvdXRVbml0cyB3aWxs
IGVmZmVjdGl2ZWx5IGNvbnRpbnVlIHRvIGFjdCBhcyBpbnRlZ2Vycy4KKyAgICAgICAgCisgICAg
ICAgIFdpdGggRU5BQkxFX1NVQlBJWEVMX0xBWU9VVCB0dXJuZWQgb24sIEZyYWN0aW9uYWxMYXlv
dXRVbml0cyBhY2N1bXVsYXRlIGVycm9yIGZyb20gc3ViLXBpeGVsCisgICAgICAgIENTUyB2YWx1
ZXMgYW5kIGFwcGxpZWQgem9vbWluZywgYW5kIHBhaW50aW5nIHVzZXMgcGl4ZWwtc25hcHBpbmcg
dG8gYWxpZ24gdGhlc2UgdmFsdWVzCisgICAgICAgIHRvIHBpeGVscy4gU2VlIGh0dHA6Ly90cmFj
LndlYmtpdC5vcmcvd2lraS9MYXlvdXRVbml0IGZvciBkZXRhaWxzLgorCisgICAgICAgIEluIGEg
bnVtYmVyIG9mIHByZXZpb3VzIHBhdGNoZXMsIExheW91dFVuaXRzIHdlcmUgcGx1bWJlZCB0aHJv
dWdob3V0IHRoZSByZW5kZXJpbmcgdHJlZQorICAgICAgICB0byBwcmVwYXJlIGZvciB0aGlzIGNo
YW5nZS4gVGhpcyBpbmNsdWRlZCBhIG51bWJlciBvZiBmdW5jdGlvbnMgaW4gTGF5b3V0VHlwZXMu
aCBhbmQKKyAgICAgICAgdGhlIEludFJlY3QvUG9pbnQvU2l6ZSBjbGFzc2VzIHRoYXQgd2VyZSBl
ZmZlY3RpdmVseSBuby1vcHMgd2hpbGUgTGF5b3V0VW5pdHMgd2VyZQorICAgICAgICBpbnRlZ2Vy
cy4gU3Vic2VxdWVudCBwYXRjaGVzIHdpbGwgcmVtb3ZlIHVubmVjZXNzYXJ5IHZlcnNpb25zIG9m
IHRoZXNlIGZ1bmN0aW9uczsgc2VlCisgICAgICAgIGh0dHA6Ly93ZWJraXQub3JnL2IvODQ2MTYg
Zm9yIHRyYWNraW5nIHRoZXNlIGNoYW5nZXMuCisKKyAgICAgICAgVGVzdHM6IGZhc3Qvc3ViLXBp
eGVsL2NsaWVudC13aWR0aC1oZWlnaHQtc25hcHBpbmcuaHRtbAorICAgICAgICAgICAgICAgZmFz
dC9zdWItcGl4ZWwvbGF5b3V0LWJveGVzLXdpdGgtem9vbS5odG1sCisgICAgICAgICAgICAgICBm
YXN0L3N1Yi1waXhlbC9zaXplLW9mLWJveC13aXRoLXpvb20uaHRtbAorCisgICAgICAgICogV2Vi
Q29yZS5leHAuaW46IFVwZGF0aW5nIGZ1bmN0aW9uIHNpZ25hdHVyZXMgdGhhdCBleHBvc2UgRnJh
Y3Rpb25hbExheW91dFVuaXRzLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajogQWRkaW5nIG1pc3NpbmcgRnJhY3Rpb25hbExheW91dFBvaW50LmggaGVhZGVyLgor
ICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6em9vbUFkanVzdGVkUGl4ZWxWYWx1ZSk6IFVzaW5nIGFkanVzdEZsb2F0Rm9yQWJz
b2x1dGVab29tIGluc3RlYWQgb2YgaW50CisgICAgICAgIHRvIG1ha2UgdXNlIG9mIGV4dHJhIHBy
ZWNpc2lvbiBiZWZvcmUgcmV0dXJuaW5nIHRoZSBwaXhlbCB2YWx1ZS4KKyAgICAgICAgKiBjc3Mv
Q1NTUHJpbWl0aXZlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFs
dWU6OmNvbXB1dGVMZW5ndGgpOiBObyBsb25nZXIgcm91bmRzIGZvciBpbXByZWNpc2UgY29udmVy
c2lvbgorICAgICAgICB3aGVuIHN1Yi1waXhlbCBsYXlvdXQgaXMgZW5hYmxlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpjdXN0b21Dc3NUZXh0KTogUmV0dXJuaW5nIGlu
dGVnZXIgdmFsdWVzIGZvciBwaXhlbHMuCisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6YWRqdXN0Rm9yTG9jYWxab29tKTogVXNpbmcgcm91bmRpbmcgaW5zdGVh
ZCBvZiBpbmNyZW1lbnRpbmcgdGhlIHZhbHVlIGJlZm9yZQorICAgICAgICBhZGp1c3RpbmcgdG8g
YWNjb3VudCBmb3IgdHJ1bmNhdGlvbiB3aGVuIHN1Yi1waXhlbCBsYXlvdXQgaXMgZW5hYmxlZC4K
KyAgICAgICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRpc3RhbmNlRGF0YUZvck5vZGUpOiBVc2luZyBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6YWJzIGlu
c3RlYWQgb2Ygc3RkOjphYnMuCisgICAgICAgICogcGxhdGZvcm0vRnJhY3Rpb25hbExheW91dFVu
aXQuaDogQWRkaW5nIHNvbWUgbWlzc2luZyBvcGVyYXRvcnMgYW5kIGEgZmxhZyBhcm91bmQgdGhl
CisgICAgICAgIGNvbnN0YW50IGRlbm9taW5hdG9yIHRvIHN3aXRjaCBpdCBiZXR3ZWVuIDEvMSBh
bmQgMS82MCBkZXBlbmRpbmcgb24gdGhlIGZlYXR1cmUgZmxhZy4KKyAgICAgICAgKiBwbGF0Zm9y
bS9MZW5ndGguaDogQ2hhbmdpbmcgdGhlIGRlZmF1bHQgdHlwZSBmb3IgdmFsdWUgdG8gZmxvYXQs
IGFuZCBhZGRpbmcgaW50VmFsdWUKKyAgICAgICAgc2luY2UgdGhpcyBtb3JlIGNsb3NlbHkgbWF0
Y2hlcyB1c2FnZSBpbiBhIHN1Yi1waXhlbCBsYXlvdXQgd29ybGQuCisgICAgICAgICogcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46
OnBhaW50KTogVXNpbmcgbWluaW11bUludFZhbHVlRm9yTGVuZ3RoIGluIHRoaXMgcGxhdGZvcm0g
Y29kZQorICAgICAgICBpbnN0ZWFkIG9mIExheW91dFVuaXRzLgorICAgICAgICAqIHJlbmRlcmlu
Zy9JbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnBs
YWNlQm94ZXNJbkJsb2NrRGlyZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0VHlw
ZXMuaDogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBhY3R1YWwgc3dpdGNoIGZvciBjaGFuZ2luZyBM
YXlvdXRVbml0cworICAgICAgICB0byBiZSBGcmFjdGlvbmFsTGF5b3V0VW5pdHMuIEFsc28gdXBk
YXRpbmcgc3R1YiBtZXRob2RzIHdpdGggdGhlaXIgcHJvcGVyIGltcGxlbWVudGF0aW9ucy4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUGFpbnRJbmZvLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWludElu
Zm86OmluZmluaXRlUmVjdCk6IEVuc3VyaW5nIHRoZSBpbmZpbml0ZVJlY3QgZG9lc24ndCBvdmVy
ZmxvdyB0aGUKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgYm91bmRzLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmNoZWNrUGFnaW5hdGlvbkFuZEZsb2F0c0F0RW5kTGluZSk6IFN3aXRjaCB0
bworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCdzIGFicyBmdW5jdGlvbiBpbnN0ZWFkIG9m
IHN0ZDo6YWJzLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3VsYXRlQmFja2dy
b3VuZEltYWdlR2VvbWV0cnkpOiBBZGQgcm91bmRpbmcgZm9yCisgICAgICAgIHNldHRpbmcgdGhl
IHBoYXNlIG9mIHRoZSBiYWNrZ3JvdW5kIGdlb21ldHJ5IGJlZm9yZSBhcHBseWluZyBtb2R1bG8g
ZnJvbSB0aGUgdGlsZSBzaXplLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVk
RmxleGlibGVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGVwcmVjYXRlZEZsZXhp
YmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJveCk6IFN0b3AgYXBwbHlpbmcgZmxleCB3aGVuCisgICAg
ICAgIHdlIGhhdmUgbGVzcyB0aGFuIGEgcGl4ZWwgdG8gZGlzdHJpYnV0ZS4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGluZUJveExpc3Q6OnJhbmdlSW50ZXJzZWN0c1JlY3QpOiBVc2luZyBGcmFjdGlvbmFsTGF5b3V0
VW5pdDo6YWJzCisgICAgICAgIGluc3RlYWQgb2Ygc3RkOjphYnMuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnJl
cGFpbnRBZnRlckxheW91dElmTmVlZGVkKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZSk6IFJlbW92aW5nIHVubmVjZXNzYXJ5IGFk
anVzdEZvckFic29sdXRlWm9vbSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9i
amVjdDo6b3V0bGluZVNpemUpOiBPdXRsaW5lcyByZW1haW4gaW50cy4KKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
Q2VsbDo6c3R5bGVPckNvbExvZ2ljYWxXaWR0aCk6IEJ1aWxkIGZpeC4gVXNpbmcgZmxvYXRzIGJl
Y2F1c2UKKyAgICAgICAgY29sV2lkdGhTdW0gaXMgYSBMZW5ndGggd2hpY2ggdXNlcyBmbG9hdHMu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvbik6IEV4cGxpY2l0IHRlbXBsYXRpemF0aW9uCisgICAgICAgIGZvciBtYXguCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOiBBZGRpbmcgY29kZSB0byBt
aW5pbWl6ZSB0ZXN0IGV4cGVjdGF0aW9uIGNodXJuLiBJdAorICAgICAgICBtYXkgYmUgd29ydGgg
b3V0cHV0dGluZyBmbG9hdCB2YWx1ZXMgaW4gdGVzdCBleHBlY3RhdGlvbnMsIGJ1dCB0aGlzIGlz
bid0IGRvbmUgd2l0aAorICAgICAgICB0aGUgaW5saW5lIGJveCB0cmVlIHlldCwgZWl0aGVyLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0Lmg6CisgICAgICAgIChXZWJDb3Jl
KTogQWRkaW5nIGEgRnJhY3Rpb25hbExheW91dFBvaW50IG9wZXJhdG9yLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0
Ojp1cGRhdGVXaWRnZXRHZW9tZXRyeSk6IEFkZGluZyBtaXNzaW5nIHBpeGVsIHNuYXBwaW5nLCBh
bmQgc3dpdGNoaW5nCisgICAgICAgIGFic29sdXRlQ29udGVudEJveCB0byBhbiBJbnRSZWN0LCBh
cyB0aGlzIGlzIHdoYXQgYm91bmRpbmdCb3ggcmV0dXJucy4KKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVQb3Np
dGlvbkFuZFN0eWxlKTogQWRkaW5nIGFuIGVuY2xvc2luZ0ludFJlY3QgZm9yIGNvbnNpc3RlbmN5
IHdpdGggb2xkIHJlc3VsdHMuCisKIDIwMTItMDQtMjcgIEFsZXhhbmRydSBDaGljdWxpdGEgIDxh
Y2hpY3VAYWRvYmUuY29tPgogCiAgICAgICAgIFtDU1MgU2hhZGVyc10gSW1wbGVtZW50IENTUyBB
bmltYXRpb25zIGFuZCBUcmFuc2l0aW9ucyBmb3IgQ1NTIFNoYWRlcnMKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluCShyZXZpc2lvbiAxMTU0ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMjIwLDcgKzIyMCw4IEBAIF9fWk43V2ViQ29yZTExTWVt
b3J5Q2FjaGUxM3NldENhcGFjaXRpZXMKIF9fWk43V2ViQ29yZTExTWVtb3J5Q2FjaGUxNGV2aWN0
UmVzb3VyY2VzRXYKIF9fWk43V2ViQ29yZTExTWVtb3J5Q2FjaGUxOWdldE9yaWdpbnNXaXRoQ2Fj
aGVFUk4zV1RGN0hhc2hTZXRJTlMxXzZSZWZQdHJJTlNfMTRTZWN1cml0eU9yaWdpbkVFRU5TXzE4
U2VjdXJpdHlPcmlnaW5IYXNoRU5TMV8xMEhhc2hUcmFpdHNJUzVfRUVFRQogX19aTjdXZWJDb3Jl
MTFNZW1vcnlDYWNoZTI1cmVtb3ZlUmVzb3VyY2VzV2l0aE9yaWdpbkVQTlNfMTRTZWN1cml0eU9y
aWdpbkUKLV9fWk43V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTlzY3JvbGxSZWN0VG9WaXNpYmxlRVJL
TlNfN0ludFJlY3RFUktOU18xNVNjcm9sbEFsaWdubWVudEVTNl8KK19fWk43V2ViQ29yZTExUmVu
ZGVyTGF5ZXIxOXNjcm9sbFJlY3RUb1Zpc2libGVFUktOU18yMEZyYWN0aW9uYWxMYXlvdXRSZWN0
RVJLTlNfMTVTY3JvbGxBbGlnbm1lbnRFUzZfCitfX1pON1dlYkNvcmUxMlJlbmRlck9iamVjdDE5
c2Nyb2xsUmVjdFRvVmlzaWJsZUVSS05TXzIwRnJhY3Rpb25hbExheW91dFJlY3RFUktOU18xNVNj
cm9sbEFsaWdubWVudEVTNl8KIF9fWk43V2ViQ29yZTExVVJMV2l0aERhdGFFUDZOU0RhdGFQNU5T
VVJMCiBfX1pON1dlYkNvcmUxMWdsb2JhbFBvaW50RVJLOF9OU1BvaW50UDhOU1dpbmRvdwogX19a
TjdXZWJDb3JlMTFtZW1vcnlDYWNoZUV2CkBAIC0yMzgsNyArMjM5LDcgQEAgX19aTjdXZWJDb3Jl
MTJFdmVudEhhbmRsZXIxNHNjcm9sbE92ZXJmbAogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIx
NWhhbmRsZUFjY2Vzc0tleUVSS05TXzIxUGxhdGZvcm1LZXlib2FyZEV2ZW50RQogX19aTjdXZWJD
b3JlMTJFdmVudEhhbmRsZXIxNmhhbmRsZVdoZWVsRXZlbnRFUktOU18xOFBsYXRmb3JtV2hlZWxF
dmVudEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTdzY3JvbGxSZWN1cnNpdmVseUVOU18x
NVNjcm9sbERpcmVjdGlvbkVOU18xN1Njcm9sbEdyYW51bGFyaXR5RVBOU180Tm9kZUUKLV9fWk43
V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBoaXRUZXN0UmVzdWx0QXRQb2ludEVSS05TXzhJbnRQb2lu
dEViYk5TXzE3SGl0VGVzdFNjcm9sbGJhcnNFalJLTlNfN0ludFNpemVFCitfX1pON1dlYkNvcmUx
MkV2ZW50SGFuZGxlcjIwaGl0VGVzdFJlc3VsdEF0UG9pbnRFUktOU18yMUZyYWN0aW9uYWxMYXlv
dXRQb2ludEViYk5TXzE3SGl0VGVzdFNjcm9sbGJhcnNFalJLTlNfMjBGcmFjdGlvbmFsTGF5b3V0
U2l6ZUUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjFoYW5kbGVNb3VzZVByZXNzRXZlbnRF
UktOU18xOFBsYXRmb3JtTW91c2VFdmVudEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjNo
YW5kbGVNb3VzZVJlbGVhc2VFdmVudEVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQogX19aTjdX
ZWJDb3JlMTJFdmVudEhhbmRsZXIyNGxvZ2ljYWxTY3JvbGxSZWN1cnNpdmVseUVOU18yMlNjcm9s
bExvZ2ljYWxEaXJlY3Rpb25FTlNfMTdTY3JvbGxHcmFudWxhcml0eUVQTlNfNE5vZGVFCkBAIC0y
NjgsNyArMjY5LDcgQEAgX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQ5c3Bvb2xQYWdlRVJOUwog
X19aTjdXZWJDb3JlMTJQcmludENvbnRleHQ5c3Bvb2xSZWN0RVJOU18xNUdyYXBoaWNzQ29udGV4
dEVSS05TXzdJbnRSZWN0RQogX19aTjdXZWJDb3JlMTJQcmludENvbnRleHRDMUVQTlNfNUZyYW1l
RQogX19aTjdXZWJDb3JlMTJQcmludENvbnRleHREMUV2Ci1fX1pON1dlYkNvcmUxMlJlbmRlck9i
amVjdDE2cmVwYWludFJlY3RhbmdsZUVSS05TXzdJbnRSZWN0RWIKK19fWk43V2ViQ29yZTEyUmVu
ZGVyT2JqZWN0MTZyZXBhaW50UmVjdGFuZ2xlRVJLTlNfMjBGcmFjdGlvbmFsTGF5b3V0UmVjdEVi
CiBfX1pON1dlYkNvcmUxMlJlbmRlcldpZGdldDI4cmVzdW1lV2lkZ2V0SGllcmFyY2h5VXBkYXRl
c0V2CiBfX1pON1dlYkNvcmUxMlJlbmRlcldpZGdldDI5c3VzcGVuZFdpZGdldEhpZXJhcmNoeVVw
ZGF0ZXNFdgogX19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXIxMHdyYXBDRkRhdGFFUEs4X19DRkRh
dGEKQEAgLTUyOCw2ICs1MjksNyBAQCBfX1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtO
U181UmFuCiBfX1pON1dlYkNvcmUxNmRlbGV0ZUFsbENvb2tpZXNFdgogX19aTjdXZWJDb3JlMTZl
bmNsb3NpbmdJbnRSZWN0RVJLN19OU1JlY3QKIF9fWk43V2ViQ29yZTE2ZW5jbG9zaW5nSW50UmVj
dEVSS05TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNvcmUxNmVuY2xvc2luZ0ludFJlY3RFUktOU18y
MEZyYWN0aW9uYWxMYXlvdXRSZWN0RQogX19aTjdXZWJDb3JlMTZpc0VuZE9mUGFyYWdyYXBoRVJL
TlNfMTVWaXNpYmxlUG9zaXRpb25FTlNfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVFCiBf
X1pON1dlYkNvcmUxNmlzVXNlclZpc2libGVVUkxFUDhOU1N0cmluZwogX19aTjdXZWJDb3JlMTZz
Y3JpcHROYW1lVG9Db2RlRVJLTjNXVEY2U3RyaW5nRQpAQCAtNjA2LDYgKzYwOCw3IEBAIF9fWk43
V2ViQ29yZTE5VGV4dFJlc291cmNlRGVjb2RlcjZkZWNvZGUKIF9fWk43V2ViQ29yZTE5VGV4dFJl
c291cmNlRGVjb2RlckMxRVJLTjNXVEY2U3RyaW5nRVJLTlNfMTJUZXh0RW5jb2RpbmdFYgogX19a
TjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVyRDFFdgogX19aTjdXZWJDb3JlMTlhcHBsaWNh
dGlvbklzU2FmYXJpRXYKK19fWk43V2ViQ29yZTE5cGl4ZWxTbmFwcGVkSW50UmVjdEVSS05TXzIw
RnJhY3Rpb25hbExheW91dFJlY3RFCiBfX1pON1dlYkNvcmUyMERpY3RhdGlvbkFsdGVybmF0aXZl
QzFFamp5CiBfX1pON1dlYkNvcmUyMERpY3RhdGlvbkFsdGVybmF0aXZlQzFFdgogX19aTjdXZWJD
b3JlMjBEaXNwbGF5U2xlZXBEaXNhYmxlckMxRVBLYwpAQCAtODM5LDggKzg0Miw4IEBAIF9fWk43
V2ViQ29yZTVGcmFtZTEzcmFuZ2VGb3JQb2ludEVSS05TXzgKIF9fWk43V2ViQ29yZTVGcmFtZTE0
ZnJhbWVGb3JXaWRnZXRFUEtOU182V2lkZ2V0RQogX19aTjdXZWJDb3JlNUZyYW1lMTdzZXRQYWdl
Wm9vbUZhY3RvckVmCiBfX1pON1dlYkNvcmU1RnJhbWUxN3NldFRleHRab29tRmFjdG9yRWYKLV9f
Wk43V2ViQ29yZTVGcmFtZTIzdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnRFUktOU184SW50UG9pbnRF
CiBfX1pON1dlYkNvcmU1RnJhbWUyNHNlYXJjaEZvckxhYmVsc0Fib3ZlQ2VsbEVQTlNfMTdSZWd1
bGFyRXhwcmVzc2lvbkVQTlNfMjBIVE1MVGFibGVDZWxsRWxlbWVudEVQbQorX19aTjdXZWJDb3Jl
NUZyYW1lMjN2aXNpYmxlUG9zaXRpb25Gb3JQb2ludEVSS05TXzhJbnRQb2ludEUKIF9fWk43V2Vi
Q29yZTVGcmFtZTI1c2V0UGFnZUFuZFRleHRab29tRmFjdG9yc0VmZgogX19aTjdXZWJDb3JlNUZy
YW1lMjdyZXNpemVQYWdlUmVjdHNLZWVwaW5nUmF0aW9FUktOU185RmxvYXRTaXplRVMzXwogX19a
TjdXZWJDb3JlNUZyYW1lNmNyZWF0ZUVQTlNfNFBhZ2VFUE5TXzIxSFRNTEZyYW1lT3duZXJFbGVt
ZW50RVBOU18xN0ZyYW1lTG9hZGVyQ2xpZW50RQpAQCAtODU1LDcgKzg1OCw2IEBAIF9fWk43V2Vi
Q29yZTVSYW5nZTE0aXNQb2ludEluUmFuZ2VFUE5TXzQKIF9fWk43V2ViQ29yZTVSYW5nZTZjcmVh
dGVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfOERvY3VtZW50RUVFTlMyX0lOU180Tm9kZUVFRWlTNl9p
CiBfX1pON1dlYkNvcmU1UmFuZ2U2c2V0RW5kRU4zV1RGMTBQYXNzUmVmUHRySU5TXzROb2RlRUVF
aVJpCiBfX1pON1dlYkNvcmU1UmFuZ2U4c2V0U3RhcnRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5v
ZGVFRUVpUmkKLV9fWk43V2ViQ29yZTVSYW5nZTl0ZXh0UmVjdHNFUk4zV1RGNlZlY3RvcklOU183
SW50UmVjdEVMbTBFRUViUE5TMF8yMFJhbmdlSW5GaXhlZFBvc2l0aW9uRQogX19aTjdXZWJDb3Jl
NVJhbmdlRDFFdgogX19aTjdXZWJDb3JlNkNocm9tZTE2c2V0U3RhdHVzYmFyVGV4dEVQTlNfNUZy
YW1lRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlNkNocm9tZTVwcmludEVQTlNfNUZyYW1l
RQpAQCAtMTA2MiwxMCArMTA2NCwxMSBAQCBfX1pON1dlYkNvcmU4b3BlbkZpbGVFUktOM1dURjZT
dHJpbmdFTlNfCiBfX1pON1dlYkNvcmU4dG9TdHJpbmdFUktOM1dURjZWZWN0b3JJTlNfMTFQcm94
eVNlcnZlckVMbTBFRUUKIF9fWk43V2ViQ29yZTlET01XaW5kb3czMGRpc3BhdGNoQWxsUGVuZGlu
Z1VubG9hZEV2ZW50c0V2CiBfX1pON1dlYkNvcmU5RE9NV2luZG93MzZkaXNwYXRjaEFsbFBlbmRp
bmdCZWZvcmVVbmxvYWRFdmVudHNFdgotX19aTjdXZWJDb3JlOUZsb2F0UmVjdEMxRVJLNkNHUmVj
dAogX19aTjdXZWJDb3JlOUZsb2F0UmVjdEMxRVJLN19OU1JlY3QKK19fWk43V2ViQ29yZTlGbG9h
dFJlY3RDMUVSS05TXzIwRnJhY3Rpb25hbExheW91dFJlY3RFCiBfX1pON1dlYkNvcmU5RmxvYXRS
ZWN0QzFFUktOU183SW50UmVjdEUKIF9fWk43V2ViQ29yZTlGbG9hdFNpemVDMUVSS05TXzdJbnRT
aXplRQorX19aTjdXZWJDb3JlOUZsb2F0U2l6ZUMxRVJLTlNfMjBGcmFjdGlvbmFsTGF5b3V0U2l6
ZUUKIF9fWk43V2ViQ29yZTlGb250Q2FjaGUxM2ZvbnREYXRhQ291bnRFdgogX19aTjdXZWJDb3Jl
OUZvbnRDYWNoZTIxaW5hY3RpdmVGb250RGF0YUNvdW50RXYKIF9fWk43V2ViQ29yZTlGb250Q2Fj
aGUyMXB1cmdlSW5hY3RpdmVGb250RGF0YUVpCkBAIC0xMDc2LDEwICsxMDc5LDggQEAgX19aTjdX
ZWJDb3JlOUZyYW1lVHJlZTljbGVhck5hbWVFdgogX19aTjdXZWJDb3JlOUZyYW1lVmlldzExZm9y
Y2VMYXlvdXRFYgogX19aTjdXZWJDb3JlOUZyYW1lVmlldzEyc2V0TWVkaWFUeXBlRVJLTjNXVEY2
U3RyaW5nRQogX19aTjdXZWJDb3JlOUZyYW1lVmlldzE0YWRqdXN0Vmlld1NpemVFdgotX19aTjdX
ZWJDb3JlOUZyYW1lVmlldzE0c2V0TWFyZ2luV2lkdGhFaQogX19aTjdXZWJDb3JlOUZyYW1lVmll
dzE0c2V0TmVlZHNMYXlvdXRFdgogX19aTjdXZWJDb3JlOUZyYW1lVmlldzE0c2V0VHJhbnNwYXJl
bnRFYgotX19aTjdXZWJDb3JlOUZyYW1lVmlldzE1c2V0TWFyZ2luSGVpZ2h0RWkKIF9fWk43V2Vi
Q29yZTlGcmFtZVZpZXcxNnNldFBhaW50QmVoYXZpb3JFagogX19aTjdXZWJDb3JlOUZyYW1lVmll
dzE3YWRkU2Nyb2xsYWJsZUFyZWFFUE5TXzE0U2Nyb2xsYWJsZUFyZWFFCiBfX1pON1dlYkNvcmU5
RnJhbWVWaWV3MTdwYWludENvbnRyb2xUaW50c0V2CkBAIC0xNTExLDYgKzE1MTIsOCBAQCBfX1pO
SzdXZWJDb3JlOFBvc2l0aW9uMjVsZWFkaW5nV2hpdGVzcGFjCiBfX1pOSzdXZWJDb3JlOFBvc2l0
aW9uMjZ0cmFpbGluZ1doaXRlc3BhY2VQb3NpdGlvbkVOU185RUFmZmluaXR5RWIKIF9fWk5LN1dl
YkNvcmU4UG9zaXRpb244dXBzdHJlYW1FTlNfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVF
CiBfX1pOSzdXZWJDb3JlOURPTVdpbmRvdzI3cGVuZGluZ1VubG9hZEV2ZW50TGlzdGVuZXJzRXYK
K19fWk5LN1dlYkNvcmU1UmFuZ2U5dGV4dFF1YWRzRVJOM1dURjZWZWN0b3JJTlNfOUZsb2F0UXVh
ZEVMbTBFRUViUE5TMF8yMFJhbmdlSW5GaXhlZFBvc2l0aW9uRQorX19aTks3V2ViQ29yZTlGbG9h
dFNpemU2aXNaZXJvRXYKIF9fWk5LN1dlYkNvcmU5RmxvYXRRdWFkMTFib3VuZGluZ0JveEV2CiBf
X1pOSzdXZWJDb3JlOUZsb2F0UmVjdDEwaW50ZXJzZWN0c0VSS1MwXwogX19aTks3V2ViQ29yZTlG
bG9hdFJlY3RjdjdfTlNSZWN0RXYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNTEzMCw2ICs1MTMwLDcgQEAKIAkJQjhEQkRCNEMxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNl
bGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEI4REJEQjQ4MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmgg
Ki87IH07CiAJCUI4REJEQjREMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25D
b21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEI4REJEQjQ5MTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNw
cCAqLzsgfTsKIAkJQjhEQkRCNEUxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEI4REJEQjRBMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmgg
Ki87IH07CisJCUJBQjFDMDZBMTRGQzM2NzkwMDQyMzNGQyAvKiBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEZD
RTU0MTRFQzc5RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQUNGMjkwMTEzQjJBMEQ1
MDA3ODFGOTAgLyogTGF5b3V0VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJBQ0YyOTAwMTNCMkEwRDUwMDc4MUY5MCAvKiBMYXlvdXRUeXBlcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMDBG
MDA0MEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwRUZGRTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmls
ZS5oICovOyB9OwogCQlCQzAwRjAwNTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDBFRkZGMEUwQTE4
NTUwMEZEMDRFMyAvKiBET01GaWxlLm1tICovOyB9OwpAQCAtMjI4MDgsNiArMjI4MDksNyBAQAog
CQkJCTY1NkQzNzNBMEFEQkE1REUwMEE0NTU0RCAvKiBGb3JtU3RhdGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQxODg1QjkzMTFCNkZEQTYwMDMzODNCQiAvKiBGb3JtU3VibWlzc2lvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTM1QzQ3NkQwOUFDNEQ2MzAwQTZBQUI0IC8qIEZvdW5kYXRpb25FeHRy
YXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUJBQjFDMDZBMTRGQzM2NzkwMDQyMzNGQyAvKiBGcmFj
dGlvbmFsTGF5b3V0UG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NEZDRkUxMTRFRjI1MDkw
MDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0
RkNFNUQxNEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDRGQ0U1MjE0RUM3OUJDMDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFVu
aXQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MjAsOSArNTIwLDkgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVl
Rm9yTmluZQogICAgIHJldHVybiBjcmVhdGVCb3JkZXJJbWFnZVZhbHVlKGltYWdlVmFsdWUsIGlt
YWdlU2xpY2VzLCBib3JkZXJTbGljZXMsIG91dHNldCwgcmVwZWF0KTsKIH0KIAotaW5saW5lIHN0
YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVl
KGludCB2YWx1ZSwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQoraW5saW5lIHN0YXRpYyBQYXNz
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKGRvdWJsZSB2
YWx1ZSwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewotICAgIHJldHVybiBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVWYWx1ZShhZGp1c3RGb3JBYnNvbHV0ZVpvb20odmFsdWUsIHN0eWxlKSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZVZhbHVlKGFkanVzdEZsb2F0Rm9yQWJzb2x1dGVab29tKHZhbHVlLCBzdHlsZSksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUFgpOwogfQogCiBpbmxpbmUgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHpvb21BZGp1c3RlZE51bWJlclZhbHVlKGRvdWJsZSB2YWx1ZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2
ZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZl
VmFsdWUuY3BwCShyZXZpc2lvbiAxMTU0ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJp
bWl0aXZlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzEsNyArNDMxLDExIEBAIHRlbXBs
YXRlPD4gdW5zaWduZWQgQ1NTUHJpbWl0aXZlVmFsdWU6OmMKIAogdGVtcGxhdGU8PiBMZW5ndGgg
Q1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGgoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5k
ZXJTdHlsZSogcm9vdFN0eWxlLCBmbG9hdCBtdWx0aXBsaWVyLCBib29sIGNvbXB1dGluZ0ZvbnRT
aXplKQogewotICAgIHJldHVybiBMZW5ndGgocm91bmRGb3JJbXByZWNpc2VDb252ZXJzaW9uPGlu
dD4oY29tcHV0ZUxlbmd0aERvdWJsZShzdHlsZSwgcm9vdFN0eWxlLCBtdWx0aXBsaWVyLCBjb21w
dXRpbmdGb250U2l6ZSkpLCBGaXhlZCk7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAg
ICByZXR1cm4gTGVuZ3RoKHN0YXRpY19jYXN0PGZsb2F0Pihjb21wdXRlTGVuZ3RoRG91YmxlKHN0
eWxlLCByb290U3R5bGUsIG11bHRpcGxpZXIsIGNvbXB1dGluZ0ZvbnRTaXplKSksIEZpeGVkKTsK
KyNlbHNlCisgICAgcmV0dXJuIExlbmd0aChyb3VuZEZvckltcHJlY2lzZUNvbnZlcnNpb248Zmxv
YXQ+KGNvbXB1dGVMZW5ndGhEb3VibGUoc3R5bGUsIHJvb3RTdHlsZSwgbXVsdGlwbGllciwgY29t
cHV0aW5nRm9udFNpemUpKSwgRml4ZWQpOworI2VuZGlmCiB9CiAKIHRlbXBsYXRlPD4gc2hvcnQg
Q1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGgoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5k
ZXJTdHlsZSogcm9vdFN0eWxlLCBmbG9hdCBtdWx0aXBsaWVyLCBib29sIGNvbXB1dGluZ0ZvbnRT
aXplKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgJKHJldmlzaW9u
IDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MiwxNSArNDIsMjYgQEAgY2xhc3MgQ1NTV3JhcFNoYXBlOwogCiBzdHJ1
Y3QgTGVuZ3RoOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCByb3VuZEZvckltcHJl
Y2lzZUNvbnZlcnNpb24oZG91YmxlIHZhbHVlKQotewogICAgIC8vIERpbWVuc2lvbiBjYWxjdWxh
dGlvbnMgYXJlIGltcHJlY2lzZSwgb2Z0ZW4gcmVzdWx0aW5nIGluIHZhbHVlcyBvZiBlLmcuCiAg
ICAgLy8gNDQuOTk5OTguICBXZSBuZWVkIHRvIGdvIGFoZWFkIGFuZCByb3VuZCBpZiB3ZSdyZSBy
ZWFsbHkgY2xvc2UgdG8gdGhlCiAgICAgLy8gbmV4dCBpbnRlZ2VyIHZhbHVlLgordGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIFQgcm91bmRGb3JJbXByZWNpc2VDb252ZXJzaW9uKGRvdWJsZSB2
YWx1ZSkKK3sKICAgICB2YWx1ZSArPSAodmFsdWUgPCAwKSA/IC0wLjAxIDogKzAuMDE7CiAgICAg
cmV0dXJuICgodmFsdWUgPiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKSkgfHwgKHZhbHVl
IDwgc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWluKCkpKSA/IDAgOiBzdGF0aWNfY2FzdDxUPih2
YWx1ZSk7CiB9CiAKK3RlbXBsYXRlPD4gaW5saW5lIGZsb2F0IHJvdW5kRm9ySW1wcmVjaXNlQ29u
dmVyc2lvbihkb3VibGUgdmFsdWUpCit7CisgICAgZG91YmxlIGNlaWxlZFZhbHVlID0gY2VpbCh2
YWx1ZSk7CisgICAgZG91YmxlIHByb3hpbWl0eVRvTmV4dEludCA9IGNlaWxlZFZhbHVlIC0gdmFs
dWU7CisgICAgaWYgKHByb3hpbWl0eVRvTmV4dEludCA8PSAwLjAxICYmIHZhbHVlID4gMCkKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihjZWlsZWRWYWx1ZSk7CisgICAgaWYgKHBy
b3hpbWl0eVRvTmV4dEludCA+PSAwLjk5ICYmIHZhbHVlIDwgMCkKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGZsb2F0PihmbG9vcih2YWx1ZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4odmFsdWUpOworfQorCiBjbGFzcyBDU1NQcmltaXRpdmVWYWx1ZSA6IHB1YmxpYyBDU1NW
YWx1ZSB7CiBwdWJsaWM6CiAgICAgZW51bSBVbml0VHlwZXMgewpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAkocmV2aXNpb24gMTE1NDg4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTMsMTAgKzM1MywxNCBAQCBzdGF0aWMgaW50IGFkanVz
dEZvckxvY2FsWm9vbShMYXlvdXRVbml0CiAgICAgZmxvYXQgem9vbUZhY3RvciA9IGxvY2FsWm9v
bUZvclJlbmRlcmVyKHJlbmRlcmVyKTsKICAgICBpZiAoem9vbUZhY3RvciA9PSAxKQogICAgICAg
ICByZXR1cm4gdmFsdWU7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICByZXR1cm4g
bHJvdW5kZih2YWx1ZSAvIHpvb21GYWN0b3IpOworI2Vsc2UKICAgICAvLyBOZWVkZWQgYmVjYXVz
ZSBjb21wdXRlTGVuZ3RoSW50IHRydW5jYXRlcyAocmF0aGVyIHRoYW4gcm91bmRzKSB3aGVuIHNj
YWxpbmcgdXAuCiAgICAgaWYgKHpvb21GYWN0b3IgPiAxKQogICAgICAgICB2YWx1ZSsrOwogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlIC8gem9vbUZhY3Rvcik7CisjZW5kaWYKIH0K
IAogaW50IEVsZW1lbnQ6Om9mZnNldExlZnQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9T
cGF0aWFsTmF2aWdhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9T
cGF0aWFsTmF2aWdhdGlvbi5jcHAJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDUsMTkgKzY0
NSwxOSBAQCB2b2lkIGRpc3RhbmNlRGF0YUZvck5vZGUoRm9jdXNEaXJlY3Rpb24gCiAgICAgc3dp
dGNoIChkaXJlY3Rpb24pIHsKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKICAgICAgICAg
c2FtZUF4aXNEaXN0YW5jZSA9IGV4aXRQb2ludC54KCkgLSBlbnRyeVBvaW50LngoKTsKLSAgICAg
ICAgb3RoZXJBeGlzRGlzdGFuY2UgPSBhYnMoZXhpdFBvaW50LnkoKSAtIGVudHJ5UG9pbnQueSgp
KTsKKyAgICAgICAgb3RoZXJBeGlzRGlzdGFuY2UgPSAoZXhpdFBvaW50LnkoKSAtIGVudHJ5UG9p
bnQueSgpKS5hYnMoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVw
OgogICAgICAgICBzYW1lQXhpc0Rpc3RhbmNlID0gZXhpdFBvaW50LnkoKSAtIGVudHJ5UG9pbnQu
eSgpOwotICAgICAgICBvdGhlckF4aXNEaXN0YW5jZSA9IGFicyhleGl0UG9pbnQueCgpIC0gZW50
cnlQb2ludC54KCkpOworICAgICAgICBvdGhlckF4aXNEaXN0YW5jZSA9IChleGl0UG9pbnQueCgp
IC0gZW50cnlQb2ludC54KCkpLmFicygpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZvY3Vz
RGlyZWN0aW9uUmlnaHQ6CiAgICAgICAgIHNhbWVBeGlzRGlzdGFuY2UgPSBlbnRyeVBvaW50Lngo
KSAtIGV4aXRQb2ludC54KCk7Ci0gICAgICAgIG90aGVyQXhpc0Rpc3RhbmNlID0gYWJzKGVudHJ5
UG9pbnQueSgpIC0gZXhpdFBvaW50LnkoKSk7CisgICAgICAgIG90aGVyQXhpc0Rpc3RhbmNlID0g
KGVudHJ5UG9pbnQueSgpIC0gZXhpdFBvaW50LnkoKSkuYWJzKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgogICAgICAgICBzYW1lQXhpc0Rpc3RhbmNlID0g
ZW50cnlQb2ludC55KCkgLSBleGl0UG9pbnQueSgpOwotICAgICAgICBvdGhlckF4aXNEaXN0YW5j
ZSA9IGFicyhlbnRyeVBvaW50LngoKSAtIGV4aXRQb2ludC54KCkpOworICAgICAgICBvdGhlckF4
aXNEaXN0YW5jZSA9IChlbnRyeVBvaW50LngoKSAtIGV4aXRQb2ludC54KCkpLmFicygpOwogICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZyYWN0aW9uYWxMYXlvdXRVbml0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJhY3Rpb25hbExheW91dFVuaXQu
aAkocmV2aXNpb24gMTE1NDg4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJhY3Rpb25h
bExheW91dFVuaXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsMTEgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKIHN0YXRpYyBjb25z
dCBpbnQga0ZpeGVkUG9pbnREZW5vbWluYXRvciA9IDYwOworI2Vsc2UKK3N0YXRpYyBjb25zdCBp
bnQga0ZpeGVkUG9pbnREZW5vbWluYXRvciA9IDE7CisjZW5kaWYKIGNvbnN0IGludCBpbnRNYXhG
b3JMYXlvdXRVbml0ID0gSU5UX01BWCAvIGtGaXhlZFBvaW50RGVub21pbmF0b3I7CiBjb25zdCBp
bnQgaW50TWluRm9yTGF5b3V0VW5pdCA9IC1pbnRNYXhGb3JMYXlvdXRVbml0OwogCkBAIC02Nyw2
ICs3MSwxMiBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgZG91YmxlKCkgY29uc3QgeyByZXR1cm4g
dG9Eb3VibGUoKTsgfQogICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
OyB9CiAKKyAgICBpbmxpbmUgRnJhY3Rpb25hbExheW91dFVuaXQgb3BlcmF0b3IrKyhpbnQpCisg
ICAgeworICAgICAgICBtX3ZhbHVlICs9IGtGaXhlZFBvaW50RGVub21pbmF0b3I7CisgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICB9CisKICAgICBpbmxpbmUgaW50IHJhd1ZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZTsgfQogICAgIGlubGluZSB2b2lkIHNldFJhd1ZhbHVlKGludCB2YWx1
ZSkgeyBtX3ZhbHVlID0gdmFsdWU7IH0KICAgICBpbmxpbmUgdm9pZCBzZXRSYXdWYWx1ZShsb25n
IGxvbmcgdmFsdWUpCkBAIC0zODgsNiArMzk4LDExIEBAIGlubGluZSBmbG9hdCBvcGVyYXRvci8o
Y29uc3QgZmxvYXQgYSwgY28KICAgICByZXR1cm4gYSAvIGIudG9GbG9hdCgpOwogfQogCitpbmxp
bmUgZG91YmxlIG9wZXJhdG9yLyhjb25zdCBkb3VibGUgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGIpCit7CisgICAgcmV0dXJuIGEgLyBiLnRvRG91YmxlKCk7Cit9CisKIGlubGluZSBG
cmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvci8oY29uc3QgaW50IGEsIGNvbnN0IEZyYWN0aW9u
YWxMYXlvdXRVbml0JiBiKQogewogICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdChhKSAv
IGI7CkBAIC00MzAsNiArNDQ1LDExIEBAIGlubGluZSBmbG9hdCBvcGVyYXRvcisoY29uc3QgZmxv
YXQgYSwgY28KICAgICByZXR1cm4gYSArIGIudG9GbG9hdCgpOwogfQogCitpbmxpbmUgZG91Ymxl
IG9wZXJhdG9yKyhjb25zdCBkb3VibGUgYSwgY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGIp
Cit7CisgICAgcmV0dXJuIGEgKyBiLnRvRG91YmxlKCk7Cit9CisKIGlubGluZSBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBvcGVyYXRvci0oY29uc3QgRnJhY3Rpb25hbExheW91dFVuaXQmIGEsIGNvbnN0
IEZyYWN0aW9uYWxMYXlvdXRVbml0JiBiKQogewogICAgIEZyYWN0aW9uYWxMYXlvdXRVbml0IHJl
dHVyblZhbDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCShyZXZpc2lvbiAxMTU0ODgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguaAkod29ya2luZyBjb3B5KQpAQCAt
MTA5LDcgKzEwOSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAg
ICAgCi0gICAgaW50IHZhbHVlKCkgY29uc3QKKyAgICBmbG9hdCB2YWx1ZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gZ2V0RmxvYXRWYWx1ZSgpOworICAgIH0KKworICAgIGludCBpbnRW
YWx1ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaXNDYWxjdWxhdGVkKCkpIHsKICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTE4LDEzICsxMjMsNiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBnZXRJbnRWYWx1ZSgpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBX
aGVuIHdlIHN3aXRjaCB0byBzdWItcGl4ZWwgbGF5b3V0LCB2YWx1ZSB3aWxsIHJldHVybiBmbG9h
dCBieSBkZWZhdWx0LCBhbmQgdGhpcyB3aWxsIGluaGVyaXQKLSAgICAvLyB0aGUgY3VycmVudCBp
bXBsZW1lbnRhdGlvbiBvZiB2YWx1ZSgpLgotICAgIGludCBpbnRWYWx1ZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gdmFsdWUoKTsKLSAgICB9Ci0KICAgICBmbG9hdCBwZXJjZW50KCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCh0eXBlKCkgPT0gUGVyY2VudCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRnJhY3Rpb25h
bExheW91dFJlY3QuY3BwCShyZXZpc2lvbiAxMTU0ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0UmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzOSw5ICsxMzksMTMgQEAgSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IEZyYWN0aW9u
YQogCiBGcmFjdGlvbmFsTGF5b3V0UmVjdCBlbmNsb3NpbmdGcmFjdGlvbmFsTGF5b3V0UmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKICAg
ICByZXR1cm4gRnJhY3Rpb25hbExheW91dFJlY3QocmVjdC54KCksIHJlY3QueSgpLAogICAgICAg
ICAgICAgICAgICAgICAgcmVjdC5tYXhYKCkgLSByZWN0LngoKSArIEZyYWN0aW9uYWxMYXlvdXRV
bml0OjplcHNpbG9uKCksCiAgICAgICAgICAgICAgICAgICAgICByZWN0Lm1heFkoKSAtIHJlY3Qu
eSgpICsgRnJhY3Rpb25hbExheW91dFVuaXQ6OmVwc2lsb24oKSk7CisjZWxzZQorICAgIHJldHVy
biBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOworI2VuZGlmCiB9CiAKIEludFJlY3QgcGl4ZWxTbmFw
cGVkSW50UmVjdChjb25zdCBGcmFjdGlvbmFsTGF5b3V0UmVjdCYgcmVjdCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCShyZXZpc2lvbiAxMTU0
ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzM3LDcgKzczNyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRN
ZWRpYVZvbHVtZVNsaWQKICAgICBpZiAoIW8tPmlzU2xpZGVyKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIEludFJlY3QgYiA9IHRvUmVuZGVyQm94KG8pLT5jb250ZW50Qm94UmVjdCgp
OworICAgIEludFJlY3QgYiA9IHBpeGVsU25hcHBlZEludFJlY3QodG9SZW5kZXJCb3gobyktPmNv
bnRlbnRCb3hSZWN0KCkpOwogCiAgICAgLy8gUG9zaXRpb24gdGhlIG91dGVyIHJlY3RhbmdsZQog
ICAgIGludCB0b3AgPSByLnkoKSArIGIueSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NTUsNyArNjU1LDcgQEAgdm9pZCBQb3B1cE1lbnVXaW46OnBhaW50KGNvbnN0IEludFJlY3QmIAog
ICAgICAgICBpZiAoaXRlbVN0eWxlLmlzVmlzaWJsZSgpKSB7CiAgICAgICAgICAgICBpbnQgdGV4
dFggPSBtYXg8aW50PigwLCBjbGllbnQoKS0+Y2xpZW50UGFkZGluZ0xlZnQoKSAtIGNsaWVudCgp
LT5jbGllbnRJbnNldExlZnQoKSk7CiAgICAgICAgICAgICBpZiAoUmVuZGVyVGhlbWU6OmRlZmF1
bHRUaGVtZSgpLT5wb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpICYmIGl0ZW1TdHlsZS50
ZXh0RGlyZWN0aW9uKCkgPT0gTFRSKQotICAgICAgICAgICAgICAgIHRleHRYICs9IG1pbmltdW1W
YWx1ZUZvckxlbmd0aChpdGVtU3R5bGUudGV4dEluZGVudCgpLCBpdGVtUmVjdC53aWR0aCgpKTsK
KyAgICAgICAgICAgICAgICB0ZXh0WCArPSBtaW5pbXVtSW50VmFsdWVGb3JMZW5ndGgoaXRlbVN0
eWxlLnRleHRJbmRlbnQoKSwgaXRlbVJlY3Qud2lkdGgoKSk7CiAgICAgICAgICAgICBpbnQgdGV4
dFkgPSBpdGVtUmVjdC55KCkgKyBpdGVtRm9udC5mb250TWV0cmljcygpLmFzY2VudCgpICsgKGl0
ZW1SZWN0LmhlaWdodCgpIC0gaXRlbUZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSkgLyAyOwog
ICAgICAgICAgICAgY29udGV4dC5kcmF3QmlkaVRleHQoaXRlbUZvbnQsIHRleHRSdW4sIEludFBv
aW50KHRleHRYLCB0ZXh0WSkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxMTU0ODgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5NCw3
ICs1OTQsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNJbkJsb2NrRGlyCiAgICAg
Ym9vbCBpc1Jvb3RCb3ggPSBpc1Jvb3RJbmxpbmVCb3goKTsKICAgICBpZiAoaXNSb290Qm94KSB7
CiAgICAgICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IHJlbmRlcmVyKCktPnN0
eWxlKGlzRmlyc3RMaW5lU3R5bGUoKSktPmZvbnRNZXRyaWNzKCk7Ci0gICAgICAgIHNldExvZ2lj
YWxUb3AodG9wICsgbWF4QXNjZW50IC0gZm9udE1ldHJpY3MuYXNjZW50KGJhc2VsaW5lVHlwZSkp
OworICAgICAgICBzZXRMb2dpY2FsVG9wKCh0b3AgKyBtYXhBc2NlbnQgLSBmb250TWV0cmljcy5h
c2NlbnQoYmFzZWxpbmVUeXBlKSkucm91bmQoKSk7CiAgICAgfQogCiAgICAgTGF5b3V0VW5pdCBh
ZGp1c3RtZW50Rm9yQ2hpbGRyZW5XaXRoU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSA9IDA7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAkocmV2aXNpb24gMTE1NDg4
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDExMCArMzcsOTcgQEAKICNkZWZpbmUgTGF5b3V0VHlwZXNfaAogCiAjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIKKyNpbmNs
dWRlICJGcmFjdGlvbmFsTGF5b3V0VW5pdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNs
dWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBpbnQgTGF5b3V0VW5pdDsKLXR5cGVkZWYg
SW50UG9pbnQgTGF5b3V0UG9pbnQ7Ci10eXBlZGVmIEludFNpemUgTGF5b3V0U2l6ZTsKLXR5cGVk
ZWYgSW50UmVjdCBMYXlvdXRSZWN0OwotCi0jZGVmaW5lIE1BWF9MQVlPVVRfVU5JVCBJTlRfTUFY
Ci0jZGVmaW5lIE1JTl9MQVlPVVRfVU5JVCBJTlRfTUlOCi0jZGVmaW5lIFpFUk9fTEFZT1VUX1VO
SVQgMAordHlwZWRlZiBGcmFjdGlvbmFsTGF5b3V0VW5pdCBMYXlvdXRVbml0OwordHlwZWRlZiBG
cmFjdGlvbmFsTGF5b3V0UG9pbnQgTGF5b3V0UG9pbnQ7Cit0eXBlZGVmIEZyYWN0aW9uYWxMYXlv
dXRTaXplIExheW91dFNpemU7Cit0eXBlZGVmIEZyYWN0aW9uYWxMYXlvdXRSZWN0IExheW91dFJl
Y3Q7CisKKyNkZWZpbmUgTUFYX0xBWU9VVF9VTklUIExheW91dFVuaXQ6Om1heCgpCisjZGVmaW5l
IE1JTl9MQVlPVVRfVU5JVCBMYXlvdXRVbml0OjptaW4oKQorI2RlZmluZSBaRVJPX0xBWU9VVF9V
TklUIExheW91dFVuaXQoMCkKIAotaW5saW5lIExheW91dFJlY3QgZW5jbG9zaW5nTGF5b3V0UmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitpbmxpbmUgRnJhY3Rpb25hbExheW91dFJlY3QgZW5j
bG9zaW5nTGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIGVu
Y2xvc2luZ0ludFJlY3QocmVjdCk7CiB9CiAKLWlubGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZElu
dFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKK2lubGluZSBMYXlvdXRTaXplIHJvdW5kZWRM
YXlvdXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgcykKIHsKLSAgICByZXR1cm4gcmVjdDsKKyNpZiBF
TkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShz
KTsKKyNlbHNlCisgICAgcmV0dXJuIHJvdW5kZWRJbnRTaXplKHMpOworI2VuZGlmCiB9CiAKIGlu
bGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3QoTGF5b3V0VW5pdCBsZWZ0LCBMYXlvdXRV
bml0IHRvcCwgTGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5pdCBoZWlnaHQpCiB7Ci0gICAgcmV0
dXJuIEludFJlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotaW5saW5lIEludFJl
Y3QgcGl4ZWxTbmFwcGVkSW50UmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIGNvbnN0
IExheW91dFNpemUmIHNpemUpCi17Ci0gICAgcmV0dXJuIEludFJlY3QobG9jYXRpb24sIHNpemUp
OworICAgIHJldHVybiBJbnRSZWN0KGxlZnQucm91bmQoKSwgdG9wLnJvdW5kKCksIHNuYXBTaXpl
VG9QaXhlbCh3aWR0aCwgbGVmdCksIHNuYXBTaXplVG9QaXhlbChoZWlnaHQsIHRvcCkpOwogfQog
CiBpbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0RnJvbUVkZ2VzKExheW91dFVuaXQg
bGVmdCwgTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgcmlnaHQsIExheW91dFVuaXQgYm90dG9t
KQogewotICAgIHJldHVybiBJbnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20g
LSB0b3ApOwotfQotCi1pbmxpbmUgaW50IHNuYXBTaXplVG9QaXhlbChMYXlvdXRVbml0IHNpemUs
IExheW91dFVuaXQgbG9jYXRpb24pIAotewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0g
ICAgcmV0dXJuIHNpemU7Ci19Ci0KLWlubGluZSBJbnRTaXplIHBpeGVsU25hcHBlZEludFNpemUo
TGF5b3V0U2l6ZSBzaXplLCBMYXlvdXRQb2ludCBsb2NhdGlvbikKLXsKLSAgICBVTlVTRURfUEFS
QU0obG9jYXRpb24pOwotICAgIHJldHVybiBzaXplOwotfQotCi1pbmxpbmUgSW50U2l6ZSByb3Vu
ZGVkSW50U2l6ZShjb25zdCBMYXlvdXRTaXplJiBzKQotewotICAgIHJldHVybiBzOwotfQotCi1p
bmxpbmUgTGF5b3V0U2l6ZSByb3VuZGVkTGF5b3V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHMpCi17
Ci0gICAgcmV0dXJuIHJvdW5kZWRJbnRTaXplKHMpOwotfQotCi1pbmxpbmUgSW50UG9pbnQgcm91
bmRlZEludFBvaW50KGNvbnN0IExheW91dFBvaW50JiBwKQotewotICAgIHJldHVybiBwOworICAg
IHJldHVybiBJbnRSZWN0KGxlZnQucm91bmQoKSwgdG9wLnJvdW5kKCksIHNuYXBTaXplVG9QaXhl
bChyaWdodCAtIGxlZnQsIGxlZnQpLCBzbmFwU2l6ZVRvUGl4ZWwoYm90dG9tIC0gdG9wLCB0b3Ap
KTsKIH0KIAogaW5saW5lIExheW91dFBvaW50IHJvdW5kZWRMYXlvdXRQb2ludChjb25zdCBGbG9h
dFBvaW50JiBwKQogeworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgcmV0dXJuIEZy
YWN0aW9uYWxMYXlvdXRQb2ludChwKTsKKyNlbHNlCiAgICAgcmV0dXJuIHJvdW5kZWRJbnRQb2lu
dChwKTsKKyNlbmRpZgogfQogCiBpbmxpbmUgTGF5b3V0UG9pbnQgZmxvb3JlZExheW91dFBvaW50
KGNvbnN0IEZsb2F0UG9pbnQmIHApCiB7Ci0gICAgcmV0dXJuIGZsb29yZWRJbnRQb2ludChwKTsK
KyAgICByZXR1cm4gTGF5b3V0UG9pbnQocC54KCksIHAueSgpKTsKIH0KIAogaW5saW5lIExheW91
dFBvaW50IGZsb29yZWRMYXlvdXRQb2ludChjb25zdCBGbG9hdFNpemUmIHMpCiB7Ci0gICAgcmV0
dXJuIGZsb29yZWRJbnRQb2ludChzKTsKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQocy53aWR0aCgp
LCBzLmhlaWdodCgpKTsKIH0KIAogaW5saW5lIExheW91dFNpemUgZmxvb3JlZExheW91dFNpemUo
Y29uc3QgRmxvYXRQb2ludCYgcCkKIHsKLSAgICByZXR1cm4gTGF5b3V0U2l6ZShzdGF0aWNfY2Fz
dDxpbnQ+KHAueCgpKSwgc3RhdGljX2Nhc3Q8aW50PihwLnkoKSkpOworICAgIHJldHVybiBMYXlv
dXRTaXplKHAueCgpLCBwLnkoKSk7CiB9CiAKIGlubGluZSBpbnQgcm91bmRUb0ludChMYXlvdXRV
bml0IHZhbHVlKQogewotICAgIHJldHVybiB2YWx1ZTsKKyAgICByZXR1cm4gdmFsdWUucm91bmQo
KTsKIH0KIAogaW5saW5lIGludCBmbG9vclRvSW50KExheW91dFVuaXQgdmFsdWUpCiB7Ci0gICAg
cmV0dXJuIHZhbHVlOworICAgIHJldHVybiB2YWx1ZS50b0ludCgpOwogfQogCiBpbmxpbmUgTGF5
b3V0VW5pdCByb3VuZGVkTGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbHJv
dW5kZih2YWx1ZSk7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFVuaXQodmFsdWUpOworI2Vsc2UKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50Pihscm91bmRmKHZhbHVlKSk7CisjZW5kaWYKIH0KIAogaW5saW5lIExheW91dFVuaXQgY2Vp
bGVkTGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkKIHsKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VU
KQorICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0VW5pdCh2YWx1ZSk7CisjZWxzZQogICAgIHJl
dHVybiBjZWlsZih2YWx1ZSk7CisjZW5kaWYKIH0KIAogaW5saW5lIExheW91dFNpemUgdG9MYXlv
dXRTaXplKGNvbnN0IExheW91dFBvaW50JiBwKQpAQCAtMTU1LDIyICsxNDIsMjIgQEAgaW5saW5l
IExheW91dFBvaW50IHRvTGF5b3V0UG9pbnQoY29uc3QgTAogCiBpbmxpbmUgTGF5b3V0VW5pdCBs
YXlvdXRNb2QoY29uc3QgTGF5b3V0VW5pdCYgbnVtZXJhdG9yLCBjb25zdCBMYXlvdXRVbml0JiBk
ZW5vbWluYXRvcikKIHsKLSAgICByZXR1cm4gbnVtZXJhdG9yICUgZGVub21pbmF0b3I7CisgICAg
cmV0dXJuIG51bWVyYXRvci50b0ludCgpICUgZGVub21pbmF0b3IudG9JbnQoKTsKIH0KIAogaW5s
aW5lIExheW91dFVuaXQgY2xhbXBUb0xheW91dFVuaXQoZG91YmxlIHZhbHVlKQogewotICAgIHJl
dHVybiBjbGFtcFRvSW50ZWdlcih2YWx1ZSk7CisgICAgcmV0dXJuIGNsYW1wVG88RnJhY3Rpb25h
bExheW91dFVuaXQ+KHZhbHVlLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWluKCksIEZyYWN0aW9u
YWxMYXlvdXRVbml0OjptYXgoKSk7CiB9CiAKLWlubGluZSBib29sIGlzSW50ZWdlclZhbHVlKGNv
bnN0IExheW91dFVuaXQpCitpbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KExheW91
dFBvaW50IGxvY2F0aW9uLCBMYXlvdXRTaXplIHNpemUpCiB7Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIEludFJlY3Qocm91bmRlZEludFBvaW50KGxvY2F0aW9uKSwgcGl4ZWxTbmFwcGVk
SW50U2l6ZShzaXplLCBsb2NhdGlvbikpOwogfQogCi1pbmxpbmUgTGF5b3V0VW5pdCBib3VuZGVk
TXVsdGlwbHkoY29uc3QgTGF5b3V0VW5pdCYgYSwgY29uc3QgTGF5b3V0VW5pdCYgYikKK2lubGlu
ZSBib29sIGlzSW50ZWdlclZhbHVlKGNvbnN0IExheW91dFVuaXQgdmFsdWUpCiB7Ci0gICAgcmV0
dXJuIGEgKiBiOworICAgIHJldHVybiB2YWx1ZS5mbG9vcigpID09IHZhbHVlOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRJ
bmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhaW50SW5mby5o
CShyZXZpc2lvbiAxMTU0ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRJbmZv
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDkgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJMYXlvdXRUeXBlcy5o
IgogI2luY2x1ZGUgIlBhaW50UGhhc2UuaCIKKyNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KIApAQCAtOTYsNyAr
OTgsNyBAQCBzdHJ1Y3QgUGFpbnRJbmZvIHsKICAgICB9CiAjZW5kaWYKIAotICAgIHN0YXRpYyBJ
bnRSZWN0IGluZmluaXRlUmVjdCgpIHsgcmV0dXJuIEludFJlY3QoSU5UX01JTiAvIDIsIElOVF9N
SU4gLyAyLCBJTlRfTUFYLCBJTlRfTUFYKTsgfQorICAgIHN0YXRpYyBJbnRSZWN0IGluZmluaXRl
UmVjdCgpIHsgcmV0dXJuIEludFJlY3QoTGF5b3V0UmVjdDo6aW5maW5pdGVSZWN0KCkpOyB9CiAK
ICAgICAvLyBGSVhNRTogSW50cm9kdWNlIHNldHRlcnMvZ2V0dGVycyBhdCBzb21lIHBvaW50LiBS
ZXF1aXJlcyBhIGxvdCBvZiBjaGFuZ2VzIHRocm91Z2hvdXQgcmVuZGVyaW5nLy4KICAgICBHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2aXNpb24gMTE1NDg4KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3NTcsNyArMTc1Nyw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmNoZWNrUGFnaW5h
dGlvbkFuZEZsb2EKICAgICB3aGlsZSAoUm9vdElubGluZUJveCogbmV4dExpbmUgPSBsYXN0TGlu
ZS0+bmV4dFJvb3RCb3goKSkKICAgICAgICAgbGFzdExpbmUgPSBuZXh0TGluZTsKIAotICAgIExh
eW91dFVuaXQgbG9naWNhbEJvdHRvbSA9IGxhc3RMaW5lLT5saW5lQm90dG9tV2l0aExlYWRpbmco
KSArIGFicyhsaW5lRGVsdGEpOworICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSA9IGxhc3RM
aW5lLT5saW5lQm90dG9tV2l0aExlYWRpbmcoKSArIGxpbmVEZWx0YS5hYnMoKTsKIAogICAgIGNv
bnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5n
T2JqZWN0U2V0LmVuZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMTU0ODgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjM3LDEzICsxMjM3LDEzIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGF0
ZUJhY2sKIAogICAgIExheW91dFVuaXQgeFBvc2l0aW9uID0gbWluaW11bVZhbHVlRm9yTGVuZ3Ro
KGZpbGxMYXllci0+eFBvc2l0aW9uKCksIHBvc2l0aW9uaW5nQXJlYVNpemUud2lkdGgoKSAtIGdl
b21ldHJ5LnRpbGVTaXplKCkud2lkdGgoKSwgcmVuZGVyVmlldywgdHJ1ZSk7CiAgICAgaWYgKGJh
Y2tncm91bmRSZXBlYXRYID09IFJlcGVhdEZpbGwpCi0gICAgICAgIGdlb21ldHJ5LnNldFBoYXNl
WChnZW9tZXRyeS50aWxlU2l6ZSgpLndpZHRoKCkgPyBnZW9tZXRyeS50aWxlU2l6ZSgpLndpZHRo
KCkgLSAoeFBvc2l0aW9uICsgbGVmdCkgJSBnZW9tZXRyeS50aWxlU2l6ZSgpLndpZHRoKCkgOiAw
KTsKKyAgICAgICAgZ2VvbWV0cnkuc2V0UGhhc2VYKGdlb21ldHJ5LnRpbGVTaXplKCkud2lkdGgo
KSA/IGdlb21ldHJ5LnRpbGVTaXplKCkud2lkdGgoKSAtIGxyb3VuZCh4UG9zaXRpb24gKyBsZWZ0
KSAlIGdlb21ldHJ5LnRpbGVTaXplKCkud2lkdGgoKSA6IDApOwogICAgIGVsc2UKICAgICAgICAg
Z2VvbWV0cnkuc2V0Tm9SZXBlYXRYKHhQb3NpdGlvbiArIGxlZnQpOwogCiAgICAgTGF5b3V0VW5p
dCB5UG9zaXRpb24gPSBtaW5pbXVtVmFsdWVGb3JMZW5ndGgoZmlsbExheWVyLT55UG9zaXRpb24o
KSwgcG9zaXRpb25pbmdBcmVhU2l6ZS5oZWlnaHQoKSAtIGdlb21ldHJ5LnRpbGVTaXplKCkuaGVp
Z2h0KCksIHJlbmRlclZpZXcsIHRydWUpOwogICAgIGlmIChiYWNrZ3JvdW5kUmVwZWF0WSA9PSBS
ZXBlYXRGaWxsKQotICAgICAgICBnZW9tZXRyeS5zZXRQaGFzZVkoZ2VvbWV0cnkudGlsZVNpemUo
KS5oZWlnaHQoKSA/IGdlb21ldHJ5LnRpbGVTaXplKCkuaGVpZ2h0KCkgLSAoeVBvc2l0aW9uICsg
dG9wKSAlIGdlb21ldHJ5LnRpbGVTaXplKCkuaGVpZ2h0KCkgOiAwKTsKKyAgICAgICAgZ2VvbWV0
cnkuc2V0UGhhc2VZKGdlb21ldHJ5LnRpbGVTaXplKCkuaGVpZ2h0KCkgPyBnZW9tZXRyeS50aWxl
U2l6ZSgpLmhlaWdodCgpIC0gbHJvdW5kKHlQb3NpdGlvbiArIHRvcCkgJSBnZW9tZXRyeS50aWxl
U2l6ZSgpLmhlaWdodCgpIDogMCk7CiAgICAgZWxzZSAKICAgICAgICAgZ2VvbWV0cnkuc2V0Tm9S
ZXBlYXRZKHlQb3NpdGlvbiArIHRvcCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCShyZXZpc2lv
biAxMTU0ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZs
ZXhpYmxlQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEzLDcgKzgxMyw3IEBAIHZvaWQgUmVu
ZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94OjpsYXlvdXQKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9IHdoaWxlIChncm91cFJlbWFpbmluZ1NwYWNlKTsKKyAgICAgICAg
ICAgICAgICB9IHdoaWxlIChncm91cFJlbWFpbmluZ1NwYWNlID49IDEpOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICAvLyBXZSBkaWRuJ3QgZmluZCBhbnkgY2hpbGRyZW4gdGhhdCBjb3Vs
ZCBncm93LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJv
eExpc3QuY3BwCShyZXZpc2lvbiAxMTU0ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGluZUJveExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1LDcgQEAg
Ym9vbCBSZW5kZXJMaW5lQm94TGlzdDo6cmFuZ2VJbnRlcnNlY3RzUgogICAgICAgICBibG9jayA9
IHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsKICAgICBMYXlvdXRVbml0IHBoeXNpY2FsU3Rh
cnQgPSBibG9jay0+ZmxpcEZvcldyaXRpbmdNb2RlKGxvZ2ljYWxUb3ApOwogICAgIExheW91dFVu
aXQgcGh5c2ljYWxFbmQgPSBibG9jay0+ZmxpcEZvcldyaXRpbmdNb2RlKGxvZ2ljYWxCb3R0b20p
OwotICAgIExheW91dFVuaXQgcGh5c2ljYWxFeHRlbnQgPSBhYnMocGh5c2ljYWxFbmQgLSBwaHlz
aWNhbFN0YXJ0KTsKKyAgICBMYXlvdXRVbml0IHBoeXNpY2FsRXh0ZW50ID0gKHBoeXNpY2FsRW5k
IC0gcGh5c2ljYWxTdGFydCkuYWJzKCk7CiAgICAgcGh5c2ljYWxTdGFydCA9IG1pbihwaHlzaWNh
bFN0YXJ0LCBwaHlzaWNhbEVuZCk7CiAgICAgCiAgICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgpLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTE1NDg4KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MjksNyArMTQy
OSw3IEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk4KICAgICAvLyB0
d28gcmVjdGFuZ2xlcyAoYnV0IHR5cGljYWxseSBvbmx5IG9uZSkuCiAgICAgUmVuZGVyU3R5bGUq
IG91dGxpbmVTdHlsZSA9IG91dGxpbmVTdHlsZUZvclJlcGFpbnQoKTsKICAgICBMYXlvdXRVbml0
IG93ID0gb3V0bGluZVN0eWxlLT5vdXRsaW5lU2l6ZSgpOwotICAgIExheW91dFVuaXQgd2lkdGgg
PSBhYnMobmV3T3V0bGluZUJveC53aWR0aCgpIC0gb2xkT3V0bGluZUJveC53aWR0aCgpKTsKKyAg
ICBMYXlvdXRVbml0IHdpZHRoID0gKG5ld091dGxpbmVCb3gud2lkdGgoKSAtIG9sZE91dGxpbmVC
b3gud2lkdGgoKSkuYWJzKCk7CiAgICAgaWYgKHdpZHRoKSB7CiAgICAgICAgIExheW91dFVuaXQg
c2hhZG93TGVmdDsKICAgICAgICAgTGF5b3V0VW5pdCBzaGFkb3dSaWdodDsKQEAgLTE0NDgsNyAr
MTQ0OCw3IEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk4KICAgICAg
ICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCByaWdodFJlY3Qp
OwogICAgICAgICB9CiAgICAgfQotICAgIExheW91dFVuaXQgaGVpZ2h0ID0gYWJzKG5ld091dGxp
bmVCb3guaGVpZ2h0KCkgLSBvbGRPdXRsaW5lQm94LmhlaWdodCgpKTsKKyAgICBMYXlvdXRVbml0
IGhlaWdodCA9IChuZXdPdXRsaW5lQm94LmhlaWdodCgpIC0gb2xkT3V0bGluZUJveC5oZWlnaHQo
KSkuYWJzKCk7CiAgICAgaWYgKGhlaWdodCkgewogICAgICAgICBMYXlvdXRVbml0IHNoYWRvd1Rv
cDsKICAgICAgICAgTGF5b3V0VW5pdCBzaGFkb3dCb3R0b207CkBAIC0yNjkxLDcgKzI2OTEsNyBA
QCBib29sIFJlbmRlck9iamVjdDo6d2lsbFJlbmRlckltYWdlKENhY2hlCiAgICAgcmV0dXJuICFk
b2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpICYmICFkb2N1bWVudCgpLT52aWV3KCktPmlzT2Zmc2Ny
ZWVuKCk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyT2JqZWN0OjptYXhpbWFsT3V0bGluZVNpemUo
UGFpbnRQaGFzZSBwKSBjb25zdAoraW50IFJlbmRlck9iamVjdDo6bWF4aW1hbE91dGxpbmVTaXpl
KFBhaW50UGhhc2UgcCkgY29uc3QKIHsKICAgICBpZiAocCAhPSBQYWludFBoYXNlT3V0bGluZSAm
JiBwICE9IFBhaW50UGhhc2VTZWxmT3V0bGluZSAmJiBwICE9IFBhaW50UGhhc2VDaGlsZE91dGxp
bmVzKQogICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzc2LDcgKzc3Niw3IEBAIHB1Ymxp
YzoKICAgICBib29sIGhhc1JlZmxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2JpdGZpZWxkcy5o
YXNSZWZsZWN0aW9uKCk7IH0KIAogICAgIC8vIEFwcGxpZWQgYXMgYSAic2xvcCIgdG8gZGlydHkg
cmVjdCBjaGVja3MgZHVyaW5nIHRoZSBvdXRsaW5lIHBhaW50aW5nIHBoYXNlJ3MgZGlydHktcmVj
dCBjaGVja3MuCi0gICAgTGF5b3V0VW5pdCBtYXhpbWFsT3V0bGluZVNpemUoUGFpbnRQaGFzZSkg
Y29uc3Q7CisgICAgaW50IG1heGltYWxPdXRsaW5lU2l6ZShQYWludFBoYXNlKSBjb25zdDsKIAog
ICAgIGVudW0gU2VsZWN0aW9uU3RhdGUgewogICAgICAgICBTZWxlY3Rpb25Ob25lLCAvLyBUaGUg
b2JqZWN0IGlzIG5vdCBzZWxlY3RlZC4KQEAgLTExNzcsMTEgKzExNzcsNiBAQCBpbmxpbmUgaW50
IGFkanVzdEZvckFic29sdXRlWm9vbShpbnQgdmFsCiAgICAgcmV0dXJuIGFkanVzdEZvckFic29s
dXRlWm9vbSh2YWx1ZSwgcmVuZGVyZXItPnN0eWxlKCkpOwogfQogCi1pbmxpbmUgaW50IGFkanVz
dEZvckFic29sdXRlWm9vbShGcmFjdGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSwgUmVuZGVyT2JqZWN0
KiByZW5kZXJlcikKLXsKLSAgICByZXR1cm4gYWRqdXN0Rm9yQWJzb2x1dGVab29tKHZhbHVlLmZs
b29yKCksIHJlbmRlcmVyLT5zdHlsZSgpKTsKLX0KLQogaW5saW5lIHZvaWQgYWRqdXN0RmxvYXRR
dWFkRm9yQWJzb2x1dGVab29tKEZsb2F0UXVhZCYgcXVhZCwgUmVuZGVyT2JqZWN0KiByZW5kZXJl
cikKIHsKICAgICBmbG9hdCB6b29tID0gcmVuZGVyZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3Bw
CShyZXZpc2lvbiAxMTU0ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDcgKzE0Myw3IEBAIExlbmd0aCBSZW5k
ZXJUYWJsZUNlbGw6OnN0eWxlT3JDb2xMb2dpY2EKICAgICAgICAgLy8gUGVyY2VudGFnZXMgZG9u
J3QgbmVlZCB0byBiZSBoYW5kbGVkIHNpbmNlIHRoZXkncmUgYWx3YXlzIHRyZWF0ZWQgdGhpcyB3
YXkgKGV2ZW4gd2hlbiBzcGVjaWZpZWQgb24gdGhlIGNlbGxzKS4KICAgICAgICAgLy8gU2VlIEJ1
Z3ppbGxhIGJ1ZyA4MTI2IGZvciBkZXRhaWxzLgogICAgICAgICBpZiAoY29sV2lkdGhTdW0uaXNG
aXhlZCgpICYmIGNvbFdpZHRoU3VtLnZhbHVlKCkgPiAwKQotICAgICAgICAgICAgY29sV2lkdGhT
dW0gPSBMZW5ndGgobWF4KDAsIGNvbFdpZHRoU3VtLnZhbHVlKCkgLSBib3JkZXJBbmRQYWRkaW5n
TG9naWNhbFdpZHRoKCkpLCBGaXhlZCk7CisgICAgICAgICAgICBjb2xXaWR0aFN1bSA9IExlbmd0
aChtYXgoMC4wZiwgY29sV2lkdGhTdW0udmFsdWUoKSAtIGJvcmRlckFuZFBhZGRpbmdMb2dpY2Fs
V2lkdGgoKSksIEZpeGVkKTsKICAgICAgICAgcmV0dXJuIGNvbFdpZHRoU3VtOwogICAgIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWEuY3BwCShyZXZpc2lvbiAxMTU0ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODMsNyAr
MjgzLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRTZWFyYwogICAgIExh
eW91dFJlY3QgaW5wdXRDb250ZW50Qm94ID0gaW5wdXRSZW5kZXJCb3gtPmNvbnRlbnRCb3hSZWN0
KCk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBidXR0b24gc3RheXMgc3F1YXJlIGFu
ZCB3aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94LgotICAgIExheW91dFVuaXQgY2FuY2VsQnV0
dG9uU2l6ZSA9IHN0ZDo6bWluKGlucHV0Q29udGVudEJveC53aWR0aCgpLCBzdGQ6Om1pbihpbnB1
dENvbnRlbnRCb3guaGVpZ2h0KCksIHIuaGVpZ2h0KCkpKTsKKyAgICBMYXlvdXRVbml0IGNhbmNl
bEJ1dHRvblNpemUgPSBzdGQ6Om1pbihpbnB1dENvbnRlbnRCb3gud2lkdGgoKSwgc3RkOjptaW48
TGF5b3V0VW5pdD4oaW5wdXRDb250ZW50Qm94LmhlaWdodCgpLCByLmhlaWdodCgpKSk7CiAgICAg
Ly8gQ2FsY3VsYXRlIGNhbmNlbCBidXR0b24ncyBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUg
aW5wdXQgZWxlbWVudC4KICAgICAvLyBDZW50ZXIgdGhlIGJ1dHRvbiB2ZXJ0aWNhbGx5LiAgUm91
bmQgdXAgdGhvdWdoLCBzbyBpZiBpdCBoYXMgdG8gYmUgb25lIHBpeGVsIG9mZi1jZW50ZXIsIGl0
IHdpbGwKICAgICAvLyBiZSBvbmUgcGl4ZWwgY2xvc2VyIHRvIHRoZSBib3R0b20gb2YgdGhlIGZp
ZWxkLiAgVGhpcyB0ZW5kcyB0byBsb29rIGJldHRlciB3aXRoIHRoZSB0ZXh0LgpAQCAtMzI2LDcg
KzMyNiw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmMKICAgICBM
YXlvdXRSZWN0IGlucHV0Q29udGVudEJveCA9IGlucHV0UmVuZGVyQm94LT5jb250ZW50Qm94UmVj
dCgpOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiBzdGF5cyBzcXVh
cmUgYW5kIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3guCi0gICAgTGF5b3V0VW5pdCBtYWdu
aWZpZXJTaXplID0gc3RkOjptaW4oaW5wdXRDb250ZW50Qm94LndpZHRoKCksIHN0ZDo6bWluKGlu
cHV0Q29udGVudEJveC5oZWlnaHQoKSwgci5oZWlnaHQoKSkpOworICAgIExheW91dFVuaXQgbWFn
bmlmaWVyU2l6ZSA9IHN0ZDo6bWluKGlucHV0Q29udGVudEJveC53aWR0aCgpLCBzdGQ6Om1pbjxM
YXlvdXRVbml0PihpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCksIHIuaGVpZ2h0KCkpKTsKICAgICAv
LyBDYWxjdWxhdGUgZGVjb3JhdGlvbidzIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSBpbnB1
dCBlbGVtZW50LgogICAgIC8vIENlbnRlciB0aGUgZGVjb3JhdGlvbiB2ZXJ0aWNhbGx5LiAgUm91
bmQgdXAgdGhvdWdoLCBzbyBpZiBpdCBoYXMgdG8gYmUgb25lIHBpeGVsIG9mZi1jZW50ZXIsIGl0
IHdpbGwKICAgICAvLyBiZSBvbmUgcGl4ZWwgY2xvc2VyIHRvIHRoZSBib3R0b20gb2YgdGhlIGZp
ZWxkLiAgVGhpcyB0ZW5kcyB0byBsb29rIGJldHRlciB3aXRoIHRoZSB0ZXh0LgpAQCAtMzYxLDcg
KzM2MSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmMKICAgICBM
YXlvdXRSZWN0IGlucHV0Q29udGVudEJveCA9IGlucHV0UmVuZGVyQm94LT5jb250ZW50Qm94UmVj
dCgpOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiB3aWxsIGZpdCBp
biBpdHMgcGFyZW50J3MgYm94LgotICAgIExheW91dFVuaXQgbWFnbmlmaWVySGVpZ2h0ID0gc3Rk
OjptaW4oaW5wdXRDb250ZW50Qm94LmhlaWdodCgpLCByLmhlaWdodCgpKTsKKyAgICBMYXlvdXRV
bml0IG1hZ25pZmllckhlaWdodCA9IHN0ZDo6bWluPExheW91dFVuaXQ+KGlucHV0Q29udGVudEJv
eC5oZWlnaHQoKSwgci5oZWlnaHQoKSk7CiAgICAgTGF5b3V0VW5pdCBtYWduaWZpZXJXaWR0aCA9
IHN0ZDo6bWluPExheW91dFVuaXQ+KGlucHV0Q29udGVudEJveC53aWR0aCgpLCBtYWduaWZpZXJI
ZWlnaHQgKiBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uV2lkdGggLyBkZWZhdWx0U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUpOwogICAgIExheW91dFJlY3QgbWFnbmlmaWVy
UmVjdChtYWduaWZpZXJPYmplY3QtPm9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihpbnB1dFJl
bmRlckJveCkud2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb250
ZW50Qm94LnkoKSArIChpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCkgLSBtYWduaWZpZXJIZWlnaHQg
KyAxKSAvIDIsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVB
c1RleHQuY3BwCShyZXZpc2lvbiAxMTU0ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0aWMg
dm9pZCB3cml0ZUxheWVycyhUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXll
ciwgUmVuZGVyTGF5ZXIqLCBjb25zdCBJbnRSZWN0JiBwYWludERpcnR5UmVjdCwgaW50IGluZGVu
dCA9IDAsIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yID0gUmVuZGVyQXNUZXh0QmVoYXZp
b3JOb3JtYWwpOworc3RhdGljIHZvaWQgd3JpdGVMYXllcnMoVGV4dFN0cmVhbSYsIGNvbnN0IFJl
bmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiwgY29uc3QgTGF5b3V0UmVjdCYgcGFp
bnREaXJ0eVJlY3QsIGludCBpbmRlbnQgPSAwLCBSZW5kZXJBc1RleHRCZWhhdmlvciA9IFJlbmRl
ckFzVGV4dEJlaGF2aW9yTm9ybWFsKTsKIAogc3RhdGljIGlubGluZSBib29sIGhhc0ZyYWN0aW9u
cyhkb3VibGUgdmFsKQogewpAQCAtMTA0LDYgKzEwNCwxMiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjCiAgICAgcmV0dXJuIHRzIDw8ICIoIiA8PCBwLngoKSA8PCAi
LCIgPDwgcC55KCkgPDwgIikiOwogfQogCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmIHApCit7CisgICAgLy8gRklYTUU6
IFRoZXNlIHNob3VsZCBiZSBwcmludGVkIGFzIGZsb2F0cy4gS2VlcGluZyB0aGVtIGludHMgZm9y
IGNvbnNpc3RlbmN5IHdpdGggcGVydmlvdXMgdGVzdCBleHBlY3RhdGlvbnMuCisgICAgcmV0dXJu
IHRzIDw8ICIoIiA8PCBwLngoKS50b0ludCgpIDw8ICIsIiA8PCBwLnkoKS50b0ludCgpIDw8ICIp
IjsKK30KKwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmxv
YXRQb2ludCYgcCkKIHsKICAgICB0cyA8PCAiKCIgPDwgZm9ybWF0TnVtYmVyUmVzcGVjdGluZ0lu
dGVnZXJzKHAueCgpKTsKQEAgLTI0Miw3ICsyNDgsNyBAQCB2b2lkIFJlbmRlclRyZWVBc1RleHQ6
OndyaXRlUmVuZGVyT2JqZWN0CiAgICAgUmVuZGVyQmxvY2sqIGNiID0gby5jb250YWluaW5nQmxv
Y2soKTsKICAgICBib29sIGFkanVzdEZvclRhYmxlQ2VsbHMgPSBjYiA/IGNiLT5pc1RhYmxlQ2Vs
bCgpIDogZmFsc2U7CiAKLSAgICBJbnRSZWN0IHI7CisgICAgTGF5b3V0UmVjdCByOwogICAgIGlm
IChvLmlzVGV4dCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBiZXR0ZXIgdG8gZHVt
cCB0aGUgYm91bmRpbmcgYm94IHggYW5kIHkgcmF0aGVyIHRoYW4gdGhlIGZpcnN0IHJ1bidzIHgg
YW5kIHksIGJ1dCB0aGF0IHdvdWxkIGludm9sdmUgdXBkYXRpbmcKICAgICAgICAgLy8gbWFueSB0
ZXN0IHJlc3VsdHMuCkBAIC0yNjEsNyArMjY3LDcgQEAgdm9pZCBSZW5kZXJUcmVlQXNUZXh0Ojp3
cml0ZVJlbmRlck9iamVjdAogICAgICAgICAvLyB0byBjbGVhbiB1cCB0aGUgcmVzdWx0cyB0byBk
dW1wIGJvdGggdGhlIG91dGVyIGJveCBhbmQgdGhlIGludHJpbnNpYyBwYWRkaW5nIHNvIHRoYXQg
Ym90aCBiaXRzIG9mIGluZm9ybWF0aW9uIGFyZQogICAgICAgICAvLyBjYXB0dXJlZCBieSB0aGUg
cmVzdWx0cy4KICAgICAgICAgY29uc3QgUmVuZGVyVGFibGVDZWxsJiBjZWxsID0gKnRvUmVuZGVy
VGFibGVDZWxsKCZvKTsKLSAgICAgICAgciA9IEludFJlY3QoY2VsbC54KCksIGNlbGwueSgpICsg
Y2VsbC5pbnRyaW5zaWNQYWRkaW5nQmVmb3JlKCksIGNlbGwud2lkdGgoKSwgY2VsbC5oZWlnaHQo
KSAtIGNlbGwuaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpIC0gY2VsbC5pbnRyaW5zaWNQYWRkaW5n
QWZ0ZXIoKSk7CisgICAgICAgIHIgPSBMYXlvdXRSZWN0KGNlbGwueCgpLCBjZWxsLnkoKSArIGNl
bGwuaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpLCBjZWxsLndpZHRoKCksIGNlbGwuaGVpZ2h0KCkg
LSBjZWxsLmludHJpbnNpY1BhZGRpbmdCZWZvcmUoKSAtIGNlbGwuaW50cmluc2ljUGFkZGluZ0Fm
dGVyKCkpOwogICAgIH0gZWxzZSBpZiAoby5pc0JveCgpKQogICAgICAgICByID0gdG9SZW5kZXJC
b3goJm8pLT5mcmFtZVJlY3QoKTsKIApAQCAtMjY5LDYgKzI3NSwxMSBAQCB2b2lkIFJlbmRlclRy
ZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0CiAgICAgaWYgKGFkanVzdEZvclRhYmxlQ2VsbHMp
CiAgICAgICAgIHIubW92ZSgwLCAtdG9SZW5kZXJUYWJsZUNlbGwoby5jb250YWluaW5nQmxvY2so
KSktPmludHJpbnNpY1BhZGRpbmdCZWZvcmUoKSk7CiAKKyAgICAvLyBGSVhNRTogQ29udmVydCBs
YXlvdXQgdGVzdCByZXN1bHRzIHRvIHJlcG9ydCBzdWItcGl4ZWwgdmFsdWVzLCBpbiB0aGUgbWVh
bnRpbWUgdXNpbmcgZW5jbG9zaW5nSW50UmVjdAorICAgIC8vIGZvciBjb25zaXN0ZW5jeSB3aXRo
IG9sZCByZXN1bHRzLgorICAgIHIgPSBlbmNsb3NpbmdJbnRSZWN0KHIpOworCisKICAgICB0cyA8
PCAiICIgPDwgcjsKIAogICAgIGlmICghKG8uaXNUZXh0KCkgJiYgIW8uaXNCUigpKSkgewpAQCAt
NTkxLDkgKzYwMiwxNCBAQCBlbnVtIExheWVyUGFpbnRQaGFzZSB7CiB9OwogCiBzdGF0aWMgdm9p
ZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgUmVuZGVyTGF5ZXImIGwsCi0gICAgICAgICAgICAgICAg
ICBjb25zdCBJbnRSZWN0JiBsYXllckJvdW5kcywgY29uc3QgSW50UmVjdCYgYmFja2dyb3VuZENs
aXBSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwgY29uc3QgSW50UmVjdCYgb3V0bGluZUNs
aXBSZWN0LAorICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMs
IGNvbnN0IExheW91dFJlY3QmIGJhY2tncm91bmRDbGlwUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYg
Y2xpcFJlY3QsIGNvbnN0IExheW91dFJlY3QmIG91dGxpbmVDbGlwUmVjdCwKICAgICAgICAgICAg
ICAgICAgIExheWVyUGFpbnRQaGFzZSBwYWludFBoYXNlID0gTGF5ZXJQYWludFBoYXNlQWxsLCBp
bnQgaW5kZW50ID0gMCwgUmVuZGVyQXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IgPSBSZW5kZXJBc1Rl
eHRCZWhhdmlvck5vcm1hbCkKIHsKKyAgICBJbnRSZWN0IGFkanVzdGVkTGF5b3V0Qm91bmRzID0g
cGl4ZWxTbmFwcGVkSW50UmVjdChsYXllckJvdW5kcyk7CisgICAgSW50UmVjdCBhZGp1c3RlZEJh
Y2tncm91bmRDbGlwUmVjdCA9IHBpeGVsU25hcHBlZEludFJlY3QoYmFja2dyb3VuZENsaXBSZWN0
KTsKKyAgICBJbnRSZWN0IGFkanVzdGVkQ2xpcFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGNs
aXBSZWN0KTsKKyAgICBJbnRSZWN0IGFkanVzdGVkT3V0bGluZUNsaXBSZWN0ID0gcGl4ZWxTbmFw
cGVkSW50UmVjdChvdXRsaW5lQ2xpcFJlY3QpOworCiAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVu
dCk7CiAKICAgICB0cyA8PCAibGF5ZXIgIjsKQEAgLTYwMSwxNSArNjE3LDE1IEBAIHN0YXRpYyB2
b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBSZW5kZXIKICAgICBpZiAoYmVoYXZpb3IgJiBSZW5k
ZXJBc1RleHRTaG93QWRkcmVzc2VzKQogICAgICAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCB2
b2lkKj4oJmwpIDw8ICIgIjsKICAgICAgIAotICAgIHRzIDw8IGxheWVyQm91bmRzOworICAgIHRz
IDw8IGFkanVzdGVkTGF5b3V0Qm91bmRzOwogCi0gICAgaWYgKCFsYXllckJvdW5kcy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgaWYgKCFiYWNrZ3JvdW5kQ2xpcFJlY3QuY29udGFpbnMobGF5ZXJCb3Vu
ZHMpKQotICAgICAgICAgICAgdHMgPDwgIiBiYWNrZ3JvdW5kQ2xpcCAiIDw8IGJhY2tncm91bmRD
bGlwUmVjdDsKLSAgICAgICAgaWYgKCFjbGlwUmVjdC5jb250YWlucyhsYXllckJvdW5kcykpCi0g
ICAgICAgICAgICB0cyA8PCAiIGNsaXAgIiA8PCBjbGlwUmVjdDsKLSAgICAgICAgaWYgKCFvdXRs
aW5lQ2xpcFJlY3QuY29udGFpbnMobGF5ZXJCb3VuZHMpKQotICAgICAgICAgICAgdHMgPDwgIiBv
dXRsaW5lQ2xpcCAiIDw8IG91dGxpbmVDbGlwUmVjdDsKKyAgICBpZiAoIWFkanVzdGVkTGF5b3V0
Qm91bmRzLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoIWFkanVzdGVkQmFja2dyb3VuZENsaXBS
ZWN0LmNvbnRhaW5zKGFkanVzdGVkTGF5b3V0Qm91bmRzKSkKKyAgICAgICAgICAgIHRzIDw8ICIg
YmFja2dyb3VuZENsaXAgIiA8PCBhZGp1c3RlZEJhY2tncm91bmRDbGlwUmVjdDsKKyAgICAgICAg
aWYgKCFhZGp1c3RlZENsaXBSZWN0LmNvbnRhaW5zKGFkanVzdGVkTGF5b3V0Qm91bmRzKSkKKyAg
ICAgICAgICAgIHRzIDw8ICIgY2xpcCAiIDw8IGFkanVzdGVkQ2xpcFJlY3Q7CisgICAgICAgIGlm
ICghYWRqdXN0ZWRPdXRsaW5lQ2xpcFJlY3QuY29udGFpbnMoYWRqdXN0ZWRMYXlvdXRCb3VuZHMp
KQorICAgICAgICAgICAgdHMgPDwgIiBvdXRsaW5lQ2xpcCAiIDw8IGFkanVzdGVkT3V0bGluZUNs
aXBSZWN0OwogICAgIH0KIAogICAgIGlmIChsLnJlbmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgp
KSB7CkBAIC02NDQsNyArNjYwLDcgQEAgc3RhdGljIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMs
IFJlbmRlcgogfQogCiBzdGF0aWMgdm9pZCB3cml0ZVJlbmRlck5hbWVkRmxvd1RocmVhZHMoVGV4
dFN0cmVhbSYgdHMsIFJlbmRlclZpZXcqIHJlbmRlclZpZXcsIGNvbnN0IFJlbmRlckxheWVyKiBy
b290TGF5ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBwYWludFJl
Y3QsIGludCBpbmRlbnQsIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yKQorICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnRSZWN0LCBpbnQgaW5kZW50LCBS
ZW5kZXJBc1RleHRCZWhhdmlvciBiZWhhdmlvcikKIHsKICAgICBpZiAoIXJlbmRlclZpZXctPmhh
c1JlbmRlck5hbWVkRmxvd1RocmVhZHMoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjkyLDE4ICs3
MDgsMTggQEAgc3RhdGljIHZvaWQgd3JpdGVSZW5kZXJOYW1lZEZsb3dUaHJlYWRzKAogfQogCiBz
dGF0aWMgdm9pZCB3cml0ZUxheWVycyhUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTGF5ZXIq
IHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGwsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBJbnRSZWN0JiBwYWludFJlY3QsIGludCBpbmRlbnQsIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJl
aGF2aW9yKQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnRS
ZWN0LCBpbnQgaW5kZW50LCBSZW5kZXJBc1RleHRCZWhhdmlvciBiZWhhdmlvcikKIHsKICAgICAv
LyBGSVhNRTogQXBwbHkgb3ZlcmZsb3cgdG8gdGhlIHJvb3QgbGF5ZXIgdG8gbm90IGJyZWFrIGV2
ZXJ5IHRlc3QuICBDb21wbGV0ZSBoYWNrLiAgU2lnaC4KLSAgICBJbnRSZWN0IHBhaW50RGlydHlS
ZWN0KHBhaW50UmVjdCk7CisgICAgTGF5b3V0UmVjdCBwYWludERpcnR5UmVjdChwYWludFJlY3Qp
OwogICAgIGlmIChyb290TGF5ZXIgPT0gbCkgewotICAgICAgICBwYWludERpcnR5UmVjdC5zZXRX
aWR0aChtYXgocGFpbnREaXJ0eVJlY3Qud2lkdGgoKSwgcm9vdExheWVyLT5yZW5kZXJCb3goKS0+
bWF4WExheW91dE92ZXJmbG93KCkpKTsKLSAgICAgICAgcGFpbnREaXJ0eVJlY3Quc2V0SGVpZ2h0
KG1heChwYWludERpcnR5UmVjdC5oZWlnaHQoKSwgcm9vdExheWVyLT5yZW5kZXJCb3goKS0+bWF4
WUxheW91dE92ZXJmbG93KCkpKTsKLSAgICAgICAgbC0+c2V0U2l6ZShsLT5zaXplKCkuZXhwYW5k
ZWRUbyhsLT5yZW5kZXJCb3goKS0+bWF4TGF5b3V0T3ZlcmZsb3coKSkpOworICAgICAgICBwYWlu
dERpcnR5UmVjdC5zZXRXaWR0aChtYXg8TGF5b3V0VW5pdD4ocGFpbnREaXJ0eVJlY3Qud2lkdGgo
KSwgcm9vdExheWVyLT5yZW5kZXJCb3goKS0+bWF4WExheW91dE92ZXJmbG93KCkpKTsKKyAgICAg
ICAgcGFpbnREaXJ0eVJlY3Quc2V0SGVpZ2h0KG1heDxMYXlvdXRVbml0PihwYWludERpcnR5UmVj
dC5oZWlnaHQoKSwgcm9vdExheWVyLT5yZW5kZXJCb3goKS0+bWF4WUxheW91dE92ZXJmbG93KCkp
KTsKKyAgICAgICAgbC0+c2V0U2l6ZShsLT5zaXplKCkuZXhwYW5kZWRUbyhwaXhlbFNuYXBwZWRJ
bnRTaXplKGwtPnJlbmRlckJveCgpLT5tYXhMYXlvdXRPdmVyZmxvdygpLCBMYXlvdXRQb2ludCgw
LCAwKSkpKTsKICAgICB9CiAgICAgCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjbGlwIHJlY3RzIHdl
IHNob3VsZCB1c2UuCi0gICAgSW50UmVjdCBsYXllckJvdW5kczsKKyAgICBMYXlvdXRSZWN0IGxh
eWVyQm91bmRzOwogICAgIENsaXBSZWN0IGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0
bGluZVJlY3Q7CiAgICAgbC0+Y2FsY3VsYXRlUmVjdHMocm9vdExheWVyLCAwLCBwYWludERpcnR5
UmVjdCwgbGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJl
Y3QsIHRydWUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVl
QXNUZXh0LmgJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRWxlbWVudDsKK2NsYXNzIEZyYWN0aW9uYWxMYXlvdXRQ
b2ludDsKIGNsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFNpemU7CiBjbGFzcyBGcmFtZTsK
QEAgLTcwLDYgKzcxLDcgQEAgc3RhdGljIHZvaWQgd3JpdGVSZW5kZXJPYmplY3QoVGV4dFN0cmVh
bQogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBJbnRQb2ludCYp
OwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgSW50UmVjdCYpOwor
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgRnJhY3Rpb25hbExheW91
dFBvaW50Jik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBGbG9h
dFBvaW50Jik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBGbG9h
dFNpemUmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5j
cHAJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJX
aWRnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsMTEgKzE3NiwxMSBAQCBib29sIFJlbmRl
cldpZGdldDo6c2V0V2lkZ2V0R2VvbWV0cnkoY29uCiAKIGJvb2wgUmVuZGVyV2lkZ2V0Ojp1cGRh
dGVXaWRnZXRHZW9tZXRyeSgpCiB7Ci0gICAgTGF5b3V0UmVjdCBjb250ZW50Qm94ID0gY29udGVu
dEJveFJlY3QoKTsKKyAgICBJbnRSZWN0IGNvbnRlbnRCb3ggPSBwaXhlbFNuYXBwZWRJbnRSZWN0
KGNvbnRlbnRCb3hSZWN0KCkpOwogICAgIGlmICghbV93aWRnZXQtPnRyYW5zZm9ybXNBZmZlY3RG
cmFtZVJlY3QoKSkKICAgICAgICAgcmV0dXJuIHNldFdpZGdldEdlb21ldHJ5KGFic29sdXRlQ29u
dGVudEJveCgpKTsKIAotICAgIExheW91dFJlY3QgYWJzb2x1dGVDb250ZW50Qm94KGxvY2FsVG9B
YnNvbHV0ZVF1YWQoRmxvYXRRdWFkKGNvbnRlbnRCb3gpKS5ib3VuZGluZ0JveCgpKTsKKyAgICBJ
bnRSZWN0IGFic29sdXRlQ29udGVudEJveChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChj
b250ZW50Qm94KSkuYm91bmRpbmdCb3goKSk7CiAgICAgaWYgKG1fd2lkZ2V0LT5pc0ZyYW1lVmll
dygpKSB7CiAgICAgICAgIGNvbnRlbnRCb3guc2V0TG9jYXRpb24oYWJzb2x1dGVDb250ZW50Qm94
LmxvY2F0aW9uKCkpOwogICAgICAgICByZXR1cm4gc2V0V2lkZ2V0R2VvbWV0cnkoY29udGVudEJv
eCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1Rl
eHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVu
ZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
Niw3ICszMjYsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjCiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiB3cml0ZVBvc2l0aW9uQW5kU3R5bGUoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0KQogewotICAgIHRzIDw8ICIgIiA8PCBjb25zdF9j
YXN0PFJlbmRlck9iamVjdCY+KG9iamVjdCkuYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7
CisgICAgdHMgPDwgIiAiIDw8IGVuY2xvc2luZ0ludFJlY3QoY29uc3RfY2FzdDxSZW5kZXJPYmpl
Y3QmPihvYmplY3QpLmFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpKTsKICAgICB3cml0ZVN0
eWxlKHRzLCBvYmplY3QpOwogICAgIHJldHVybiB0czsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvd2luL1dlYlBvcHVwTWVudVdpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2Vi
UG9wdXBNZW51V2luLmNwcAkocmV2aXNpb24gMTE1NDg4KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2ViUG9wdXBNZW51V2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQgV2ViUG9wdXBNZW51OjpzZXRVcFBsYXRmb3Jt
RGF0YShjb24KICAgICAgICAgaWYgKGl0ZW1TdHlsZS5pc1Zpc2libGUoKSkgewogICAgICAgICAg
ICAgaW50IHRleHRYID0gc3RkOjptYXgoMCwgZGF0YS5tX2NsaWVudFBhZGRpbmdMZWZ0IC0gZGF0
YS5tX2NsaWVudEluc2V0TGVmdCk7CiAgICAgICAgICAgICBpZiAoUmVuZGVyVGhlbWU6OmRlZmF1
bHRUaGVtZSgpLT5wb3B1cE9wdGlvblN1cHBvcnRzVGV4dEluZGVudCgpICYmIGl0ZW1TdHlsZS50
ZXh0RGlyZWN0aW9uKCkgPT0gTFRSKQotICAgICAgICAgICAgICAgIHRleHRYICs9IG1pbmltdW1W
YWx1ZUZvckxlbmd0aChpdGVtU3R5bGUudGV4dEluZGVudCgpLCBpdGVtUmVjdC53aWR0aCgpKTsK
KyAgICAgICAgICAgICAgICB0ZXh0WCArPSBtaW5pbXVtSW50VmFsdWVGb3JMZW5ndGgoaXRlbVN0
eWxlLnRleHRJbmRlbnQoKSwgaXRlbVJlY3Qud2lkdGgoKSk7CiAgICAgICAgICAgICBpbnQgdGV4
dFkgPSBpdGVtUmVjdC55KCkgKyBpdGVtRm9udC5mb250TWV0cmljcygpLmFzY2VudCgpICsgKGl0
ZW1SZWN0LmhlaWdodCgpIC0gaXRlbUZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSkgLyAyOwog
CiAgICAgICAgICAgICBub3RTZWxlY3RlZEJhY2tpbmdTdG9yZUNvbnRleHQtPmRyYXdCaWRpVGV4
dChpdGVtRm9udCwgdGV4dFJ1biwgSW50UG9pbnQodGV4dFgsIHRleHRZKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5j
cHAJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1MCw3ICs3NTAsNyBAQCB2
b2lkIENocm9tZUNsaWVudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lCiAgICAgaWYgKE5vZGUqIG5v
ZGUgPSBoaXQuaW5uZXJOb25TaGFyZWROb2RlKCkpIHsKICAgICAgICAgRnJhbWUqIGZyYW1lID0g
bm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJh
bWUgPyBmcmFtZS0+dmlldygpIDogMDsKLSAgICAgICAgbV93ZWJWaWV3LT5wcml2LT50b29sdGlw
QXJlYSA9IHZpZXcgPyB2aWV3LT5jb250ZW50c1RvV2luZG93KG5vZGUtPmdldFJlY3QoKSkgOiBJ
bnRSZWN0KCk7CisgICAgICAgIG1fd2ViVmlldy0+cHJpdi0+dG9vbHRpcEFyZWEgPSB2aWV3ID8g
dmlldy0+Y29udGVudHNUb1dpbmRvdyhub2RlLT5nZXRQaXhlbFNuYXBwZWRSZWN0KCkpIDogSW50
UmVjdCgpOwogICAgIH0gZWxzZQogICAgICAgICBtX3dlYlZpZXctPnByaXYtPnRvb2x0aXBBcmVh
ID0gSW50UmVjdCgpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGhp
dHRlc3RyZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRoaXR0ZXN0cmVzdWx0LmNwcAkocmV2aXNpb24gMTE1NDg4KQorKysgU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTgsOSArMzE4LDkgQEAgV2ViS2l0SGl0VGVzdFJlc3VsdCoga2l0KGNvbnN0IFdlYkNvcmU6Ogog
ICAgIHRhcmdldEZyYW1lID0gcmVzdWx0LnRhcmdldEZyYW1lKCk7CiAgICAgaWYgKHRhcmdldEZy
YW1lICYmIHRhcmdldEZyYW1lLT52aWV3KCkpIHsKICAgICAgICAgLy8gQ29udmVydCBkb2N1bWVu
dCBjb29yZHMgdG8gd2lkZ2V0IGNvb3Jkcy4KLSAgICAgICAgcG9pbnQgPSB0YXJnZXRGcmFtZS0+
dmlldygpLT5jb250ZW50c1RvV2luZG93KHJlc3VsdC5wb2ludCgpKTsKKyAgICAgICAgcG9pbnQg
PSB0YXJnZXRGcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHJlc3VsdC5yb3VuZGVkUG9p
bnQoKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHBvaW50ID0gcmVzdWx0LnBvaW50KCk7CisgICAg
ICAgIHBvaW50ID0gcmVzdWx0LnJvdW5kZWRQb2ludCgpOwogCiAgICAgcmV0dXJuIFdFQktJVF9I
SVRfVEVTVF9SRVNVTFQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0hJVF9URVNUX1JFU1VMVCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmstdXJp
IiwgbGlua1VSSS5nZXQoKSwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vidmlldy5jcHAJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMzLDcgKzQzMyw3IEBAIHN0
YXRpYyBJbnRQb2ludCBnZXRMb2NhdGlvbkZvcktleWJvYXJkR2UKICAgICBpZiAoIXNlbGVjdGlv
bi0+c2VsZWN0aW9uKCkuaXNOb25PcnBoYW5lZENhcmV0T3JSYW5nZSgpCiAgICAgICAgICB8fCAo
c2VsZWN0aW9uLT5zZWxlY3Rpb24oKS5pc0NhcmV0KCkgJiYgIXNlbGVjdGlvbi0+c2VsZWN0aW9u
KCkuaXNDb250ZW50RWRpdGFibGUoKSkpIHsKICAgICAgICAgaWYgKE5vZGUqIGZvY3VzZWROb2Rl
ID0gZ2V0Rm9jdXNlZE5vZGUoZnJhbWUpKQotICAgICAgICAgICAgcmV0dXJuIGZvY3VzZWROb2Rl
LT5nZXRSZWN0KCkubG9jYXRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiBmb2N1c2VkTm9kZS0+
Z2V0UGl4ZWxTbmFwcGVkUmVjdCgpLmxvY2F0aW9uKCk7CiAKICAgICAgICAgLy8gVGhlcmUgd2Fz
IG5vIHNlbGVjdGlvbiBhbmQgbm8gZm9jdXNlZCBub2RlLCBzbyBqdXN0IHB1dCB0aGUgY29udGV4
dAogICAgICAgICAvLyBtZW51IGludG8gdGhlIGNvcm5lciBvZiB0aGUgdmlldywgb2Zmc2V0IHNs
aWdodGx5LgpAQCAtMTYwNCw3ICsxNjA0LDcgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJf
dmlld19xdWVyeV90bwogICAgICAgICAgICAgICAgIFN0cmluZyB0aXRsZSA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPih0aXRsZU5vZGUpLT50aXRsZSgpOwogICAgICAgICAgICAgICAgIGlmICghdGl0
bGUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcg
PSBjb3JlRnJhbWUtPnZpZXcoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgR2RrUmVjdGFu
Z2xlIGFyZWEgPSB2aWV3LT5jb250ZW50c1RvV2luZG93KG5vZGUtPmdldFJlY3QoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBHZGtSZWN0YW5nbGUgYXJlYSA9IHZpZXctPmNvbnRlbnRzVG9X
aW5kb3cobm9kZS0+Z2V0UGl4ZWxTbmFwcGVkUmVjdCgpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGd0a190b29sdGlwX3NldF90aXBfYXJlYSh0b29sdGlwLCAmYXJlYSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZ3RrX3Rvb2x0aXBfc2V0X3RleHQodG9v
bHRpcCwgdGl0bGUudXRmOCgpLmRhdGEoKSk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTU0ODgpCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAor
MjAxMi0wNC0yMyAgTGV2aSBXZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgW21ldGFdIFN3aXRjaCBhd2F5IGZyb20gaW50ZWdlcnMgcmVwcmVzZW50aW5nIHBpeGVscyBm
b3IgbGF5b3V0L2V2ZW50IGhhbmRsaW5nL3JlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMTgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3Qvc3ViLXBpeGVsOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L3N1Yi1waXhlbC9jbGllbnQtd2lkdGgtaGVpZ2h0LXNuYXBwaW5nLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9zdWItcGl4ZWwvY2xpZW50LXdpZHRoLWhlaWdo
dC1zbmFwcGluZy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3N1Yi1waXhlbC9zaXplLW9m
LWJveC13aXRoLXpvb20tZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9zdWIt
cGl4ZWwvc2l6ZS1vZi1ib3gtd2l0aC16b29tLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
c3ViLXBpeGVsL2xheW91dC1ib3hlcy13aXRoLXpvb20tZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9zdWItcGl4ZWwvbGF5b3V0LWJveGVzLXdpdGgtem9vbS5odG1sOiBBZGRl
ZC4KKwogMjAxMi0wNC0yNyAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4K
IAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUwMzgK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVsL2NsaWVudC13aWR0aC1oZWlnaHQtc25h
cHBpbmctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvc3ViLXBp
eGVsL2NsaWVudC13aWR0aC1oZWlnaHQtc25hcHBpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwvY2xpZW50LXdpZHRoLWhlaWdodC1zbmFw
cGluZy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorUEFTUyBkaXYu
Y2xpZW50V2lkdGggaXMgMTEKK1BBU1MgZGl2LmNsaWVudEhlaWdodCBpcyAxMQorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3Qvc3ViLXBpeGVsL2NsaWVudC13aWR0aC1oZWlnaHQtc25hcHBpbmcuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9jbGllbnQtd2lkdGgtaGVpZ2h0
LXNuYXBwaW5nLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhl
bC9jbGllbnQtd2lkdGgtaGVpZ2h0LXNuYXBwaW5nLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iVGVzdERpdiIgc3R5bGU9
InBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMTAuNHB4OyB0b3A6IDEwLjRweDsgd2lkdGg6IDEw
LjRweDsgaGVpZ2h0OiAxMC40cHg7Ij48L2Rpdj4KKzxzY3JpcHQ+CisKK3ZhciBkaXYgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiVGVzdERpdiIpOworCitzaG91bGRCZSgnZGl2LmNsaWVudFdp
ZHRoJywgJzExJyk7CitzaG91bGRCZSgnZGl2LmNsaWVudEhlaWdodCcsICcxMScpOworCis8L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwvbGF5b3V0LWJveGVzLXdpdGgt
em9vbS1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvc3ViLXBp
eGVsL2xheW91dC1ib3hlcy13aXRoLXpvb20tZXhwZWN0ZWQuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVsL2xheW91dC1ib3hlcy13aXRoLXpvb20tZXhwZWN0
ZWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5sYXlvdXQgem9vbSB0ZXN0PC90aXRsZT4KKyAgICA8
c3R5bGU+IAorICAgICAgICAjdGVzdCB7CisgICAgICAgICAgICB3aWR0aDogNTAwcHg7CisgICAg
ICAgICAgICBoZWlnaHQ6IDE1MDBweDsKKyAgICAgICAgICAgIGJhY2tncm91bmQ6IG5hdnk7Cisg
ICAgICAgICAgICB6b29tOiAwLjI1OworICAgICAgICB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4K
Kzxib2R5PgorICAgIDxkaXYgaWQ9InRlc3QiPjwvZGl2PgorICAgIDxkaXYgaWQ9ImNvbnNvbGUi
PgorICAgICAgICBUaGUgYm94IGFib3ZlIHNob3VsZCBiZSBuYXZ5IGJsdWUgd2l0aCBubyBiYW5k
aW5nIGVmZmVjdHMuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpvb20gb2YgMTAwJSBib3R0b20g
ZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVy
Ljxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDExMCUgYm90dG9tIGVkZ2Ugb2YgbGFz
dCBjaGlsZCBsaW5lcyB1cCB3aXRoIGJvdHRvbSBlZGdlIG9mIGNvbnRhaW5lci48YnI+CisgICAg
ICAgIFBBU1M6IFdpdGggem9vbSBvZiAxMjUlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGlu
ZXMgdXAgd2l0aCBib3R0b20gZWRnZSBvZiBjb250YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBX
aXRoIHpvb20gb2YgMTMzJSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGgg
Ym90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9m
IDE1MCUgYm90dG9tIGVkZ2Ugb2YgbGFzdCBjaGlsZCBsaW5lcyB1cCB3aXRoIGJvdHRvbSBlZGdl
IG9mIGNvbnRhaW5lci48YnI+CisgICAgICAgIFBBU1M6IFdpdGggem9vbSBvZiAxNjYlIGJvdHRv
bSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0b20gZWRnZSBvZiBjb250YWlu
ZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpvb20gb2YgMTc1JSBib3R0b20gZWRnZSBvZiBs
YXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAg
ICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDIwMCUgYm90dG9tIGVkZ2Ugb2YgbGFzdCBjaGlsZCBs
aW5lcyB1cCB3aXRoIGJvdHRvbSBlZGdlIG9mIGNvbnRhaW5lci48YnI+CisgICAgICAgIFBBU1M6
IFdpdGggem9vbSBvZiAyNTAlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0
aCBib3R0b20gZWRnZSBvZiBjb250YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpvb20g
b2YgMzAwJSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVk
Z2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDQwMCUgYm90
dG9tIGVkZ2Ugb2YgbGFzdCBjaGlsZCBsaW5lcyB1cCB3aXRoIGJvdHRvbSBlZGdlIG9mIGNvbnRh
aW5lci48YnI+CisgICAgICAgIFBBU1M6IFdpdGggem9vbSBvZiA1MDAlIGJvdHRvbSBlZGdlIG9m
IGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0b20gZWRnZSBvZiBjb250YWluZXIuPGJyPgor
ICAgICAgICBQQVNTOiBXaXRoIHpvb20gb2YgOTAlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQg
bGluZXMgdXAgd2l0aCBib3R0b20gZWRnZSBvZiBjb250YWluZXIuPGJyPgorICAgICAgICBQQVNT
OiBXaXRoIHpvb20gb2YgODAlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0
aCBib3R0b20gZWRnZSBvZiBjb250YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpvb20g
b2YgNzUlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0b20gZWRn
ZSBvZiBjb250YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpvb20gb2YgNjYlIGJvdHRv
bSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0b20gZWRnZSBvZiBjb250YWlu
ZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpvb20gb2YgNTAlIGJvdHRvbSBlZGdlIG9mIGxh
c3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0b20gZWRnZSBvZiBjb250YWluZXIuPGJyPgorICAg
ICAgICBQQVNTOiBXaXRoIHpvb20gb2YgMzMlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGlu
ZXMgdXAgd2l0aCBib3R0b20gZWRnZSBvZiBjb250YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBX
aXRoIHpvb20gb2YgMjUlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBi
b3R0b20gZWRnZSBvZiBjb250YWluZXIuPGJyPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9sYXlvdXQtYm94ZXMtd2l0aC16b29tLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwvbGF5b3V0LWJveGVz
LXdpdGgtem9vbS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9zdWItcGl4
ZWwvbGF5b3V0LWJveGVzLXdpdGgtem9vbS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcz
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPmxheW91dCB6
b29tIHRlc3Q8L3RpdGxlPgorICAgIDxzdHlsZT4gCisgICAgICAgICN0ZXN0IHsKKyAgICAgICAg
ICAgIHdpZHRoOiA1MDBweDsKKyAgICAgICAgICAgIGhlaWdodDogMTUwMHB4OworICAgICAgICAg
ICAgYmFja2dyb3VuZDogc2t5Ymx1ZTsKKyAgICAgICAgfQorICAgICAgICAjdGVzdCA+IGRpdiB7
CisgICAgICAgICAgICBiYWNrZ3JvdW5kOiBuYXZ5OworICAgICAgICAgICAgaGVpZ2h0OiAxNXB4
OworICAgICAgICB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxkaXYgaWQ9
InRlc3QiPjwvZGl2PgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPgorICAgICAgICBUaGUgYm94IGFi
b3ZlIHNob3VsZCBiZSBuYXZ5IGJsdWUgd2l0aCBubyBiYW5kaW5nIGVmZmVjdHMuPGJyPgorICAg
IDwvZGl2PgorPC9ib2R5PgorPHNjcmlwdD4KKyAgICB2YXIgdGVzdEVsZW1lbnQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgndGVzdCcpOworICAgIHZhciBjb25zb2xlRWxlbWVudCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJyk7CisKKyAgICBmdW5jdGlvbiBpbml0KCkKKyAg
ICB7CisgICAgICAgIHRlc3RFbGVtZW50LmlubmVySFRNTCA9ICcnOworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDsgaSsrKQorICAgICAgICAgICAgdGVzdEVsZW1lbnQuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgIH0KKworICAgIGZ1bmN0aW9u
IHRlc3Qoem9vbSkKKyAgICB7CisgICAgICAgIHRlc3RFbGVtZW50LnN0eWxlLnpvb20gPSB6b29t
ICsgJyUnOworICAgICAgICAKKyAgICAgICAgdmFyIGxhc3RFbGVtZW50Qm90dG9tID0gdGVzdEVs
ZW1lbnQubGFzdENoaWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbTsKKyAgICAgICAg
dmFyIGNvbnRhaW5lckJvdHRvbSA9IHRlc3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
LmJvdHRvbTsKKyAgICAgICAgaWYgKE1hdGguYWJzKGxhc3RFbGVtZW50Qm90dG9tIC0gY29udGFp
bmVyQm90dG9tKSA8IDAuMDEpCisgICAgICAgICAgICBsb2coJ1BBU1M6IFdpdGggem9vbSBvZiAn
ICsgem9vbSArICclIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0
b20gZWRnZSBvZiBjb250YWluZXIuJyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvZygn
RkFJTDogV2l0aCB6b29tIG9mICcgKyB6b29tICsgJyUgYm90dG9tIGVkZ2Ugb2YgbGFzdCBjaGls
ZCBhdCAnICsgbGFzdEVsZW1lbnRCb3R0b20gKyAnLCBjb250YWluZXIgYXQgJyArIGNvbnRhaW5l
ckJvdHRvbSArICcuJyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gbG9nKHN0cikKKyAgICB7Cisg
ICAgICAgIGNvbnNvbGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KHN0cikpOworICAgICAgICBjb25zb2xlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdicicpKTsKKyAgICB9CisKKyAgICBpbml0KCk7CisgICAgdGVzdCgxMDApOwor
ICAgIHRlc3QoMTEwKTsKKyAgICB0ZXN0KDEyNSk7CisgICAgdGVzdCgxMzMpOworICAgIHRlc3Qo
MTUwKTsKKyAgICB0ZXN0KDE2Nik7CisgICAgdGVzdCgxNzUpOworICAgIHRlc3QoMjAwKTsKKyAg
ICB0ZXN0KDI1MCk7CisgICAgdGVzdCgzMDApOworICAgIHRlc3QoNDAwKTsKKyAgICB0ZXN0KDUw
MCk7CisgICAgdGVzdCg5MCk7CisgICAgdGVzdCg4MCk7CisgICAgdGVzdCg3NSk7CisgICAgdGVz
dCg2Nik7CisgICAgdGVzdCg1MCk7CisgICAgdGVzdCgzMyk7CisgICAgdGVzdCgyNSk7Cis8L3Nj
cmlwdD4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVsL3NpemUtb2Yt
Ym94LXdpdGgtem9vbS1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3Qvc3ViLXBpeGVsL3NpemUtb2YtYm94LXdpdGgtem9vbS1leHBlY3RlZC5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwvc2l6ZS1vZi1ib3gtd2l0aC16b29t
LWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8dGl0bGU+c2l6ZSBvZiBib3ggem9vbSB0ZXN0PC90
aXRsZT4KKyAgICA8c3R5bGU+CisgICAgICAgIGJvZHkgeworICAgICAgICAgICAgYmFja2dyb3Vu
ZDogc2lsdmVyOworICAgICAgICB9CisgICAgICAgICNjb250YWluZXIgeworICAgICAgICAgICAg
YmFja2dyb3VuZDogd2hpdGU7CisgICAgICAgICAgICB3aWR0aDogNTAwcHg7CisgICAgICAgICAg
ICBoZWlnaHQ6IDUwcHg7CisgICAgICAgIH0KKyAgICAgICAgI3J1bGVyID4gZGl2IHsKKyAgICAg
ICAgICAgIGZsb2F0OiBsZWZ0OworICAgICAgICAgICAgd2lkdGg6IDQ5cHg7CisgICAgICAgICAg
ICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCBibGFjazsKKyAgICAgICAgICAgIHRleHQtYWxpZ246
IHJpZ2h0OworICAgICAgICAgICAgaGVpZ2h0OiA1MHB4OworICAgICAgICB9CisgICAgICAgICN0
ZXN0IHsKKyAgICAgICAgICAgIGNsZWFyOiBsZWZ0OworICAgICAgICAgICAgcG9zaXRpb246IGFi
c29sdXRlOworICAgICAgICAgICAgdG9wOiAzMHB4OworICAgICAgICB9CisgICAgICAgICN0ZXN0
ID4gZGl2IHsKKyAgICAgICAgICAgIGNsZWFyOiBsZWZ0OworICAgICAgICB9CisgICAgICAgICN0
ZXN0ID4gZGl2ID4gZGl2IHsKKyAgICAgICAgICAgIGZsb2F0OiBsZWZ0OworICAgICAgICAgICAg
d2lkdGg6IDUwMHB4OworICAgICAgICAgICAgaGVpZ2h0OiAxMHB4OworICAgICAgICAgICAgYmFj
a2dyb3VuZDogbmF2eTsKKyAgICAgICAgfQorICAgICAgICAjY29uc29sZSB7CisgICAgICAgICAg
ICBjbGVhcjogbGVmdDsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4K
KyAgICA8ZGl2IGlkPSJjb250YWluZXIiPgorICAgICAgICA8ZGl2IGlkPSJydWxlciI+PC9kaXY+
CisgICAgICAgIDxkaXYgaWQ9InRlc3QiPjxkaXY+PC9kaXY+PC9kaXY+CisgICAgPC9kaXY+Cis8
L2JvZHk+Cis8c2NyaXB0PgorICAgIHZhciB0ZXN0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ3Rlc3QnKTsKKyAgICB2YXIgcnVsZXJFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ3J1bGVyJyk7CisKKyAgICBmdW5jdGlvbiBpbml0KCkKKyAgICB7CisgICAgICAg
IHJ1bGVyRWxlbWVudC5pbm5lckhUTUwgPSAnJzsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDsgaSsrKSB7CisgICAgICAgICAgICBydWxlckVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICAgICAgcnVsZXJFbGVtZW50Lmxhc3RD
aGlsZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSg1MCArIGkgKiA1MCkpOwor
ICAgICAgICB9CisgICAgfQorCisKKyAgICBmdW5jdGlvbiB0ZXN0KHpvb20pCisgICAgeworICAg
ICAgICB2YXIgdGVzdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAg
ICAgICAgdGVzdEVsZW1lbnQuc3R5bGUuem9vbSA9IHpvb20gKyAnJSc7CisgICAgICAgIHRlc3RF
bGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAg
ICAgdGVzdENvbnRhaW5lci5hcHBlbmRDaGlsZCh0ZXN0RWxlbWVudCk7CisgICAgfQorCisgICAg
aW5pdCgpOworICAgIHRlc3QoMTAwKTsKKyAgICB0ZXN0KDY2KTsKKyAgICB0ZXN0KDMzKTsKKwor
PC9zY3JpcHQ+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9zaXpl
LW9mLWJveC13aXRoLXpvb20uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3N1
Yi1waXhlbC9zaXplLW9mLWJveC13aXRoLXpvb20uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3Qvc3ViLXBpeGVsL3NpemUtb2YtYm94LXdpdGgtem9vbS5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDc0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cisg
ICAgPHRpdGxlPnNpemUgb2YgYm94IHpvb20gdGVzdDwvdGl0bGU+CisgICAgPHN0eWxlPgorICAg
ICAgICBib2R5IHsKKyAgICAgICAgICAgIGJhY2tncm91bmQ6IHNpbHZlcjsKKyAgICAgICAgfQor
ICAgICAgICAjY29udGFpbmVyIHsKKyAgICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOworICAg
ICAgICAgICAgd2lkdGg6IDUwMHB4OworICAgICAgICAgICAgaGVpZ2h0OiA1MHB4OworICAgICAg
ICB9CisgICAgICAgICNydWxlciA+IGRpdiB7CisgICAgICAgICAgICBmbG9hdDogbGVmdDsKKyAg
ICAgICAgICAgIHdpZHRoOiA0OXB4OworICAgICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29s
aWQgYmxhY2s7CisgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgIGhl
aWdodDogNTBweDsKKyAgICAgICAgfQorICAgICAgICAjdGVzdCB7CisgICAgICAgICAgICBjbGVh
cjogbGVmdDsKKyAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgICAgIHRv
cDogMzBweDsKKyAgICAgICAgfQorICAgICAgICAjdGVzdCA+IGRpdiB7CisgICAgICAgICAgICBj
bGVhcjogbGVmdDsKKyAgICAgICAgfQorICAgICAgICAjdGVzdCA+IGRpdiA+IGRpdiB7CisgICAg
ICAgICAgICBmbG9hdDogbGVmdDsKKyAgICAgICAgICAgIHdpZHRoOiA1cHg7CisgICAgICAgICAg
ICBoZWlnaHQ6IDEwcHg7CisgICAgICAgICAgICBiYWNrZ3JvdW5kOiBuYXZ5OworICAgICAgICB9
CisgICAgICAgICNjb25zb2xlIHsKKyAgICAgICAgICAgIGNsZWFyOiBsZWZ0OworICAgICAgICB9
CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+
CisgICAgICAgIDxkaXYgaWQ9InJ1bGVyIj48L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0idGVzdCI+
PGRpdj48L2Rpdj48L2Rpdj4KKyAgICA8L2Rpdj4KKzwvYm9keT4KKzxzY3JpcHQ+CisgICAgdmFy
IHRlc3RDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdCcpOworICAgIHZh
ciBydWxlckVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncnVsZXInKTsKKworICAg
IGZ1bmN0aW9uIGluaXQoKQorICAgIHsKKyAgICAgICAgcnVsZXJFbGVtZW50LmlubmVySFRNTCA9
ICcnOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAgICAgICAgICAg
IHJ1bGVyRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7
CisgICAgICAgICAgICBydWxlckVsZW1lbnQubGFzdENoaWxkLmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKDUwICsgaSAqIDUwKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
dW5jdGlvbiB0ZXN0KHpvb20pCisgICAgeworICAgICAgICB2YXIgdGVzdEVsZW1lbnQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgdGVzdEVsZW1lbnQuc3R5bGUuem9v
bSA9IHpvb20gKyAnJSc7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyBpKyspCisg
ICAgICAgICAgICB0ZXN0RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdkaXYnKSk7CisgICAgICAgIHRlc3RDb250YWluZXIuYXBwZW5kQ2hpbGQodGVzdEVsZW1lbnQp
OworICAgIH0KKworICAgIGluaXQoKTsKKyAgICB0ZXN0KDEwMCk7CisgICAgdGVzdCg2Nik7Cisg
ICAgdGVzdCgzMyk7CisKKzwvc2NyaXB0PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139280</attachid>
            <date>2012-04-27 14:29:42 -0700</date>
            <delta_ts>2012-04-27 15:54:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60318-20120427142940.patch</filename>
            <type>text/plain</type>
            <size>65564</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMTE1NDg4KQorKysgU291cmNlL1dURi93dGYvUGxh
dGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtODA3LDYgKzgwNywxMCBAQAogI2RlZmluZSBFTkFC
TEVfR0xPQkFMX0ZBU1RNQUxMT0NfTkVXIDEKICNlbmRpZgogCisjaWYgIWRlZmluZWQoRU5BQkxF
X1NVQlBJWEVMX0xBWU9VVCkKKyNkZWZpbmUgRU5BQkxFX1NVQlBJWEVMX0xBWU9VVCAwCisjZW5k
aWYKKwogI2RlZmluZSBFTkFCTEVfREVCVUdfV0lUSF9CUkVBS1BPSU5UIDAKICNkZWZpbmUgRU5B
QkxFX1NBTVBMSU5HX0NPVU5URVJTIDAKICNkZWZpbmUgRU5BQkxFX1NBTVBMSU5HX0ZMQUdTIDAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBACisyMDEyLTA0LTIzICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4gYW5kIEVtaWwgQSBFa2x1bmQgPGVhZUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgW21ldGFdIFN3aXRjaCBhd2F5IGZyb20gaW50ZWdlcnMgcmVw
cmVzZW50aW5nIHBpeGVscyBmb3IgbGF5b3V0L2V2ZW50IGhhbmRsaW5nL3JlbmRlcmluZworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMTgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTd2FwcGluZyB0aGUg
TGF5b3V0VW5pdCBiYWNrZW5kIHRvIEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyb20gaW50LgorICAg
ICAgICAKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgaXMgYSBuZXcgdHlwZSB0aGF0IHVz
ZXMgYW4gaW50ZWdlciB0byByZXByZXNlbnQgYSBmcmFjdGlvbiBvZiBhIHBpeGVsLgorICAgICAg
ICBXZSdyZSBhbHNvIGFkZGluZyBhIGZlYXR1cmUgZmxhZyAtLSBFTkFCTEVfU1VCUElYRUxfTEFZ
T1VUIC0tIHRoYXQgdG9nZ2xlcyB0aGlzIGZyYWN0aW9uCisgICAgICAgIGJldHdlZW4gMS8xIGFu
ZCAxLzYwLiBJbml0aWFsbHksIGFsbCBwbGF0Zm9ybXMgd2lsbCBkZWZhdWx0IHRvIHN1YnBpeGVs
IGxheW91dCBiZWluZyBvZmYsCisgICAgICAgIHNvIEZyYWN0aW9uYWxMYXlvdXRVbml0cyB3aWxs
IGVmZmVjdGl2ZWx5IGNvbnRpbnVlIHRvIGFjdCBhcyBpbnRlZ2Vycy4KKyAgICAgICAgCisgICAg
ICAgIFdpdGggRU5BQkxFX1NVQlBJWEVMX0xBWU9VVCB0dXJuZWQgb24sIEZyYWN0aW9uYWxMYXlv
dXRVbml0cyBhY2N1bXVsYXRlIGVycm9yIGZyb20gc3ViLXBpeGVsCisgICAgICAgIENTUyB2YWx1
ZXMgYW5kIGFwcGxpZWQgem9vbWluZywgYW5kIHBhaW50aW5nIHVzZXMgcGl4ZWwtc25hcHBpbmcg
dG8gYWxpZ24gdGhlc2UgdmFsdWVzCisgICAgICAgIHRvIHBpeGVscy4gU2VlIGh0dHA6Ly90cmFj
LndlYmtpdC5vcmcvd2lraS9MYXlvdXRVbml0IGZvciBkZXRhaWxzLgorCisgICAgICAgIEluIGEg
bnVtYmVyIG9mIHByZXZpb3VzIHBhdGNoZXMsIExheW91dFVuaXRzIHdlcmUgcGx1bWJlZCB0aHJv
dWdob3V0IHRoZSByZW5kZXJpbmcgdHJlZQorICAgICAgICB0byBwcmVwYXJlIGZvciB0aGlzIGNo
YW5nZS4gVGhpcyBpbmNsdWRlZCBhIG51bWJlciBvZiBmdW5jdGlvbnMgaW4gTGF5b3V0VHlwZXMu
aCBhbmQKKyAgICAgICAgdGhlIEludFJlY3QvUG9pbnQvU2l6ZSBjbGFzc2VzIHRoYXQgd2VyZSBl
ZmZlY3RpdmVseSBuby1vcHMgd2hpbGUgTGF5b3V0VW5pdHMgd2VyZQorICAgICAgICBpbnRlZ2Vy
cy4gU3Vic2VxdWVudCBwYXRjaGVzIHdpbGwgcmVtb3ZlIHVubmVjZXNzYXJ5IHZlcnNpb25zIG9m
IHRoZXNlIGZ1bmN0aW9uczsgc2VlCisgICAgICAgIGh0dHA6Ly93ZWJraXQub3JnL2IvODQ2MTYg
Zm9yIHRyYWNraW5nIHRoZXNlIGNoYW5nZXMuCisKKyAgICAgICAgVGVzdHM6IGZhc3Qvc3ViLXBp
eGVsL2NsaWVudC13aWR0aC1oZWlnaHQtc25hcHBpbmcuaHRtbAorICAgICAgICAgICAgICAgZmFz
dC9zdWItcGl4ZWwvbGF5b3V0LWJveGVzLXdpdGgtem9vbS5odG1sCisgICAgICAgICAgICAgICBm
YXN0L3N1Yi1waXhlbC9zaXplLW9mLWJveC13aXRoLXpvb20uaHRtbAorCisgICAgICAgICogV2Vi
Q29yZS5leHAuaW46IFVwZGF0aW5nIGZ1bmN0aW9uIHNpZ25hdHVyZXMgdGhhdCBleHBvc2UgRnJh
Y3Rpb25hbExheW91dFVuaXRzLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajogQWRkaW5nIG1pc3NpbmcgRnJhY3Rpb25hbExheW91dFBvaW50LmggaGVhZGVyLgor
ICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6em9vbUFkanVzdGVkUGl4ZWxWYWx1ZSk6IFVzaW5nIGFkanVzdEZsb2F0Rm9yQWJz
b2x1dGVab29tIGluc3RlYWQgb2YgaW50CisgICAgICAgIHRvIG1ha2UgdXNlIG9mIGV4dHJhIHBy
ZWNpc2lvbiBiZWZvcmUgcmV0dXJuaW5nIHRoZSBwaXhlbCB2YWx1ZS4KKyAgICAgICAgKiBjc3Mv
Q1NTUHJpbWl0aXZlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFs
dWU6OmNvbXB1dGVMZW5ndGgpOiBObyBsb25nZXIgcm91bmRzIGZvciBpbXByZWNpc2UgY29udmVy
c2lvbgorICAgICAgICB3aGVuIHN1Yi1waXhlbCBsYXlvdXQgaXMgZW5hYmxlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpjdXN0b21Dc3NUZXh0KTogUmV0dXJuaW5nIGlu
dGVnZXIgdmFsdWVzIGZvciBwaXhlbHMuCisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6YWRqdXN0Rm9yTG9jYWxab29tKTogVXNpbmcgcm91bmRpbmcgaW5zdGVh
ZCBvZiBpbmNyZW1lbnRpbmcgdGhlIHZhbHVlIGJlZm9yZQorICAgICAgICBhZGp1c3RpbmcgdG8g
YWNjb3VudCBmb3IgdHJ1bmNhdGlvbiB3aGVuIHN1Yi1waXhlbCBsYXlvdXQgaXMgZW5hYmxlZC4K
KyAgICAgICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRpc3RhbmNlRGF0YUZvck5vZGUpOiBVc2luZyBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6YWJzIGlu
c3RlYWQgb2Ygc3RkOjphYnMuCisgICAgICAgICogcGxhdGZvcm0vRnJhY3Rpb25hbExheW91dFVu
aXQuaDogQWRkaW5nIHNvbWUgbWlzc2luZyBvcGVyYXRvcnMgYW5kIGEgZmxhZyBhcm91bmQgdGhl
CisgICAgICAgIGNvbnN0YW50IGRlbm9taW5hdG9yIHRvIHN3aXRjaCBpdCBiZXR3ZWVuIDEvMSBh
bmQgMS82MCBkZXBlbmRpbmcgb24gdGhlIGZlYXR1cmUgZmxhZy4KKyAgICAgICAgKiBwbGF0Zm9y
bS9MZW5ndGguaDogQ2hhbmdpbmcgdGhlIGRlZmF1bHQgdHlwZSBmb3IgdmFsdWUgdG8gZmxvYXQs
IGFuZCBhZGRpbmcgaW50VmFsdWUKKyAgICAgICAgc2luY2UgdGhpcyBtb3JlIGNsb3NlbHkgbWF0
Y2hlcyB1c2FnZSBpbiBhIHN1Yi1waXhlbCBsYXlvdXQgd29ybGQuCisgICAgICAgICogcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46
OnBhaW50KTogVXNpbmcgbWluaW11bUludFZhbHVlRm9yTGVuZ3RoIGluIHRoaXMgcGxhdGZvcm0g
Y29kZQorICAgICAgICBpbnN0ZWFkIG9mIExheW91dFVuaXRzLgorICAgICAgICAqIHJlbmRlcmlu
Zy9JbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnBs
YWNlQm94ZXNJbkJsb2NrRGlyZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0VHlw
ZXMuaDogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBhY3R1YWwgc3dpdGNoIGZvciBjaGFuZ2luZyBM
YXlvdXRVbml0cworICAgICAgICB0byBiZSBGcmFjdGlvbmFsTGF5b3V0VW5pdHMuIEFsc28gdXBk
YXRpbmcgc3R1YiBtZXRob2RzIHdpdGggdGhlaXIgcHJvcGVyIGltcGxlbWVudGF0aW9ucy4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUGFpbnRJbmZvLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWludElu
Zm86OmluZmluaXRlUmVjdCk6IEVuc3VyaW5nIHRoZSBpbmZpbml0ZVJlY3QgZG9lc24ndCBvdmVy
ZmxvdyB0aGUKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgYm91bmRzLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmNoZWNrUGFnaW5hdGlvbkFuZEZsb2F0c0F0RW5kTGluZSk6IFN3aXRjaCB0
bworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCdzIGFicyBmdW5jdGlvbiBpbnN0ZWFkIG9m
IHN0ZDo6YWJzLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3VsYXRlQmFja2dy
b3VuZEltYWdlR2VvbWV0cnkpOiBBZGQgcm91bmRpbmcgZm9yCisgICAgICAgIHNldHRpbmcgdGhl
IHBoYXNlIG9mIHRoZSBiYWNrZ3JvdW5kIGdlb21ldHJ5IGJlZm9yZSBhcHBseWluZyBtb2R1bG8g
ZnJvbSB0aGUgdGlsZSBzaXplLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVk
RmxleGlibGVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGVwcmVjYXRlZEZsZXhp
YmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJveCk6IFN0b3AgYXBwbHlpbmcgZmxleCB3aGVuCisgICAg
ICAgIHdlIGhhdmUgbGVzcyB0aGFuIGEgcGl4ZWwgdG8gZGlzdHJpYnV0ZS4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OmJhY2tncm91bmRDbGlwUmVjdCk6IFJlcGxhY2UgUGFpbnRJbmZvOjppbmZpbml0ZVJlY3Qgd2l0
aCB0aGUKKyAgICAgICAgTGF5b3V0UmVjdCBlcXVpdmFsZW50LgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaW5lQm94
TGlzdDo6cmFuZ2VJbnRlcnNlY3RzUmVjdCk6IFVzaW5nIEZyYWN0aW9uYWxMYXlvdXRVbml0Ojph
YnMKKyAgICAgICAgaW5zdGVhZCBvZiBzdGQ6OmFicy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVwYWludEFm
dGVyTGF5b3V0SWZOZWVkZWQpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0Lmg6CisgICAgICAgIChXZWJDb3JlKTogUmVtb3ZpbmcgdW5uZWNlc3NhcnkgYWRqdXN0Rm9y
QWJzb2x1dGVab29tIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpv
dXRsaW5lU2l6ZSk6IE91dGxpbmVzIHJlbWFpbiBpbnRzLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUYWJsZUNlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpz
dHlsZU9yQ29sTG9naWNhbFdpZHRoKTogQnVpbGQgZml4LiBVc2luZyBmbG9hdHMgYmVjYXVzZQor
ICAgICAgICBjb2xXaWR0aFN1bSBpcyBhIExlbmd0aCB3aGljaCB1c2VzIGZsb2F0cy4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uKTogRXhwbGljaXQgdGVtcGxhdGl6YXRpb24KKyAgICAgICAgZm9yIG1heC4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6IEFkZGluZyBjb2RlIHRvIG1pbmltaXpl
IHRlc3QgZXhwZWN0YXRpb24gY2h1cm4uIEl0CisgICAgICAgIG1heSBiZSB3b3J0aCBvdXRwdXR0
aW5nIGZsb2F0IHZhbHVlcyBpbiB0ZXN0IGV4cGVjdGF0aW9ucywgYnV0IHRoaXMgaXNuJ3QgZG9u
ZSB3aXRoCisgICAgICAgIHRoZSBpbmxpbmUgYm94IHRyZWUgeWV0LCBlaXRoZXIuCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuaDoKKyAgICAgICAgKFdlYkNvcmUpOiBBZGRp
bmcgYSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgb3BlcmF0b3IuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OnVwZGF0
ZVdpZGdldEdlb21ldHJ5KTogQWRkaW5nIG1pc3NpbmcgcGl4ZWwgc25hcHBpbmcsIGFuZCBzd2l0
Y2hpbmcKKyAgICAgICAgYWJzb2x1dGVDb250ZW50Qm94IHRvIGFuIEludFJlY3QsIGFzIHRoaXMg
aXMgd2hhdCBib3VuZGluZ0JveCByZXR1cm5zLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVBvc2l0aW9uQW5k
U3R5bGUpOiBBZGRpbmcgYW4gZW5jbG9zaW5nSW50UmVjdCBmb3IgY29uc2lzdGVuY3kgd2l0aCBv
bGQgcmVzdWx0cy4KKwogMjAxMi0wNC0yNyAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBh
ZG9iZS5jb20+CiAKICAgICAgICAgW0NTUyBTaGFkZXJzXSBJbXBsZW1lbnQgQ1NTIEFuaW1hdGlv
bnMgYW5kIFRyYW5zaXRpb25zIGZvciBDU1MgU2hhZGVycwpJbmRleDogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAu
aW4JKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjAsNyArMjIwLDggQEAgX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNo
ZTEzc2V0Q2FwYWNpdGllcwogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTE0ZXZpY3RSZXNvdXJj
ZXNFdgogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTE5Z2V0T3JpZ2luc1dpdGhDYWNoZUVSTjNX
VEY3SGFzaFNldElOUzFfNlJlZlB0cklOU18xNFNlY3VyaXR5T3JpZ2luRUVFTlNfMThTZWN1cml0
eU9yaWdpbkhhc2hFTlMxXzEwSGFzaFRyYWl0c0lTNV9FRUVFCiBfX1pON1dlYkNvcmUxMU1lbW9y
eUNhY2hlMjVyZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2luRVBOU18xNFNlY3VyaXR5T3JpZ2luRQot
X19aTjdXZWJDb3JlMTJSZW5kZXJPYmplY3QxOXNjcm9sbFJlY3RUb1Zpc2libGVFUktOU183SW50
UmVjdEVSS05TXzE1U2Nyb2xsQWxpZ25tZW50RVM2XworX19aTjdXZWJDb3JlMTFSZW5kZXJMYXll
cjE5c2Nyb2xsUmVjdFRvVmlzaWJsZUVSS05TXzIwRnJhY3Rpb25hbExheW91dFJlY3RFUktOU18x
NVNjcm9sbEFsaWdubWVudEVTNl8KK19fWk43V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTlzY3JvbGxS
ZWN0VG9WaXNpYmxlRVJLTlNfMjBGcmFjdGlvbmFsTGF5b3V0UmVjdEVSS05TXzE1U2Nyb2xsQWxp
Z25tZW50RVM2XwogX19aTjdXZWJDb3JlMTFVUkxXaXRoRGF0YUVQNk5TRGF0YVA1TlNVUkwKIF9f
Wk43V2ViQ29yZTExZ2xvYmFsUG9pbnRFUks4X05TUG9pbnRQOE5TV2luZG93CiBfX1pON1dlYkNv
cmUxMW1lbW9yeUNhY2hlRXYKQEAgLTIzOCw3ICsyMzksNyBAQCBfX1pON1dlYkNvcmUxMkV2ZW50
SGFuZGxlcjE0c2Nyb2xsT3ZlcmZsCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE1aGFuZGxl
QWNjZXNzS2V5RVJLTlNfMjFQbGF0Zm9ybUtleWJvYXJkRXZlbnRFCiBfX1pON1dlYkNvcmUxMkV2
ZW50SGFuZGxlcjE2aGFuZGxlV2hlZWxFdmVudEVSS05TXzE4UGxhdGZvcm1XaGVlbEV2ZW50RQog
X19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxN3Njcm9sbFJlY3Vyc2l2ZWx5RU5TXzE1U2Nyb2xs
RGlyZWN0aW9uRU5TXzE3U2Nyb2xsR3JhbnVsYXJpdHlFUE5TXzROb2RlRQotX19aTjdXZWJDb3Jl
MTJFdmVudEhhbmRsZXIyMGhpdFRlc3RSZXN1bHRBdFBvaW50RVJLTlNfOEludFBvaW50RWJiTlNf
MTdIaXRUZXN0U2Nyb2xsYmFyc0VqUktOU183SW50U2l6ZUUKK19fWk43V2ViQ29yZTEyRXZlbnRI
YW5kbGVyMjBoaXRUZXN0UmVzdWx0QXRQb2ludEVSS05TXzIxRnJhY3Rpb25hbExheW91dFBvaW50
RWJiTlNfMTdIaXRUZXN0U2Nyb2xsYmFyc0VqUktOU18yMEZyYWN0aW9uYWxMYXlvdXRTaXplRQog
X19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyMWhhbmRsZU1vdXNlUHJlc3NFdmVudEVSS05TXzE4
UGxhdGZvcm1Nb3VzZUV2ZW50RQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyM2hhbmRsZU1v
dXNlUmVsZWFzZUV2ZW50RVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCiBfX1pON1dlYkNvcmUx
MkV2ZW50SGFuZGxlcjI0bG9naWNhbFNjcm9sbFJlY3Vyc2l2ZWx5RU5TXzIyU2Nyb2xsTG9naWNh
bERpcmVjdGlvbkVOU18xN1Njcm9sbEdyYW51bGFyaXR5RVBOU180Tm9kZUUKQEAgLTI2OCw3ICsy
NjksNyBAQCBfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDlzcG9vbFBhZ2VFUk5TCiBfX1pON1dl
YkNvcmUxMlByaW50Q29udGV4dDlzcG9vbFJlY3RFUk5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNf
N0ludFJlY3RFCiBfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dEMxRVBOU181RnJhbWVFCiBfX1pO
N1dlYkNvcmUxMlByaW50Q29udGV4dEQxRXYKLV9fWk43V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTZy
ZXBhaW50UmVjdGFuZ2xlRVJLTlNfN0ludFJlY3RFYgorX19aTjdXZWJDb3JlMTJSZW5kZXJPYmpl
Y3QxNnJlcGFpbnRSZWN0YW5nbGVFUktOU18yMEZyYWN0aW9uYWxMYXlvdXRSZWN0RWIKIF9fWk43
V2ViQ29yZTEyUmVuZGVyV2lkZ2V0MjhyZXN1bWVXaWRnZXRIaWVyYXJjaHlVcGRhdGVzRXYKIF9f
Wk43V2ViQ29yZTEyUmVuZGVyV2lkZ2V0MjlzdXNwZW5kV2lkZ2V0SGllcmFyY2h5VXBkYXRlc0V2
CiBfX1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjEwd3JhcENGRGF0YUVQSzhfX0NGRGF0YQpAQCAt
NTI4LDYgKzUyOSw3IEBAIF9fWk43V2ViQ29yZTE2Y3JlYXRlRnVsbE1hcmt1cEVQS05TXzVSYW4K
IF9fWk43V2ViQ29yZTE2ZGVsZXRlQWxsQ29va2llc0V2CiBfX1pON1dlYkNvcmUxNmVuY2xvc2lu
Z0ludFJlY3RFUks3X05TUmVjdAogX19aTjdXZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJLTlNf
OUZsb2F0UmVjdEUKK19fWk43V2ViQ29yZTE2ZW5jbG9zaW5nSW50UmVjdEVSS05TXzIwRnJhY3Rp
b25hbExheW91dFJlY3RFCiBfX1pON1dlYkNvcmUxNmlzRW5kT2ZQYXJhZ3JhcGhFUktOU18xNVZp
c2libGVQb3NpdGlvbkVOU18yN0VkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk43V2Vi
Q29yZTE2aXNVc2VyVmlzaWJsZVVSTEVQOE5TU3RyaW5nCiBfX1pON1dlYkNvcmUxNnNjcmlwdE5h
bWVUb0NvZGVFUktOM1dURjZTdHJpbmdFCkBAIC02MDYsNiArNjA4LDcgQEAgX19aTjdXZWJDb3Jl
MTlUZXh0UmVzb3VyY2VEZWNvZGVyNmRlY29kZQogX19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VE
ZWNvZGVyQzFFUktOM1dURjZTdHJpbmdFUktOU18xMlRleHRFbmNvZGluZ0ViCiBfX1pON1dlYkNv
cmUxOVRleHRSZXNvdXJjZURlY29kZXJEMUV2CiBfX1pON1dlYkNvcmUxOWFwcGxpY2F0aW9uSXNT
YWZhcmlFdgorX19aTjdXZWJDb3JlMTlwaXhlbFNuYXBwZWRJbnRSZWN0RVJLTlNfMjBGcmFjdGlv
bmFsTGF5b3V0UmVjdEUKIF9fWk43V2ViQ29yZTIwRGljdGF0aW9uQWx0ZXJuYXRpdmVDMUVqankK
IF9fWk43V2ViQ29yZTIwRGljdGF0aW9uQWx0ZXJuYXRpdmVDMUV2CiBfX1pON1dlYkNvcmUyMERp
c3BsYXlTbGVlcERpc2FibGVyQzFFUEtjCkBAIC04MzksOCArODQyLDggQEAgX19aTjdXZWJDb3Jl
NUZyYW1lMTNyYW5nZUZvclBvaW50RVJLTlNfOAogX19aTjdXZWJDb3JlNUZyYW1lMTRmcmFtZUZv
cldpZGdldEVQS05TXzZXaWRnZXRFCiBfX1pON1dlYkNvcmU1RnJhbWUxN3NldFBhZ2Vab29tRmFj
dG9yRWYKIF9fWk43V2ViQ29yZTVGcmFtZTE3c2V0VGV4dFpvb21GYWN0b3JFZgotX19aTjdXZWJD
b3JlNUZyYW1lMjN2aXNpYmxlUG9zaXRpb25Gb3JQb2ludEVSS05TXzhJbnRQb2ludEUKIF9fWk43
V2ViQ29yZTVGcmFtZTI0c2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxsRVBOU18xN1JlZ3VsYXJFeHBy
ZXNzaW9uRVBOU18yMEhUTUxUYWJsZUNlbGxFbGVtZW50RVBtCitfX1pON1dlYkNvcmU1RnJhbWUy
M3Zpc2libGVQb3NpdGlvbkZvclBvaW50RVJLTlNfOEludFBvaW50RQogX19aTjdXZWJDb3JlNUZy
YW1lMjVzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzRWZmCiBfX1pON1dlYkNvcmU1RnJhbWUyN3Jl
c2l6ZVBhZ2VSZWN0c0tlZXBpbmdSYXRpb0VSS05TXzlGbG9hdFNpemVFUzNfCiBfX1pON1dlYkNv
cmU1RnJhbWU2Y3JlYXRlRVBOU180UGFnZUVQTlNfMjFIVE1MRnJhbWVPd25lckVsZW1lbnRFUE5T
XzE3RnJhbWVMb2FkZXJDbGllbnRFCkBAIC04NTUsNyArODU4LDYgQEAgX19aTjdXZWJDb3JlNVJh
bmdlMTRpc1BvaW50SW5SYW5nZUVQTlNfNAogX19aTjdXZWJDb3JlNVJhbmdlNmNyZWF0ZUVOM1dU
RjEwUGFzc1JlZlB0cklOU184RG9jdW1lbnRFRUVOUzJfSU5TXzROb2RlRUVFaVM2X2kKIF9fWk43
V2ViQ29yZTVSYW5nZTZzZXRFbmRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5vZGVFRUVpUmkKIF9f
Wk43V2ViQ29yZTVSYW5nZThzZXRTdGFydEVOM1dURjEwUGFzc1JlZlB0cklOU180Tm9kZUVFRWlS
aQotX19aTjdXZWJDb3JlNVJhbmdlOXRleHRSZWN0c0VSTjNXVEY2VmVjdG9ySU5TXzdJbnRSZWN0
RUxtMEVFRWJQTlMwXzIwUmFuZ2VJbkZpeGVkUG9zaXRpb25FCiBfX1pON1dlYkNvcmU1UmFuZ2VE
MUV2CiBfX1pON1dlYkNvcmU2Q2hyb21lMTZzZXRTdGF0dXNiYXJUZXh0RVBOU181RnJhbWVFUktO
M1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmU2Q2hyb21lNXByaW50RVBOU181RnJhbWVFCkBAIC0x
MDYyLDEwICsxMDY0LDExIEBAIF9fWk43V2ViQ29yZThvcGVuRmlsZUVSS04zV1RGNlN0cmluZ0VO
U18KIF9fWk43V2ViQ29yZTh0b1N0cmluZ0VSS04zV1RGNlZlY3RvcklOU18xMVByb3h5U2VydmVy
RUxtMEVFRQogX19aTjdXZWJDb3JlOURPTVdpbmRvdzMwZGlzcGF0Y2hBbGxQZW5kaW5nVW5sb2Fk
RXZlbnRzRXYKIF9fWk43V2ViQ29yZTlET01XaW5kb3czNmRpc3BhdGNoQWxsUGVuZGluZ0JlZm9y
ZVVubG9hZEV2ZW50c0V2Ci1fX1pON1dlYkNvcmU5RmxvYXRSZWN0QzFFUks2Q0dSZWN0CiBfX1pO
N1dlYkNvcmU5RmxvYXRSZWN0QzFFUks3X05TUmVjdAorX19aTjdXZWJDb3JlOUZsb2F0UmVjdEMx
RVJLTlNfMjBGcmFjdGlvbmFsTGF5b3V0UmVjdEUKIF9fWk43V2ViQ29yZTlGbG9hdFJlY3RDMUVS
S05TXzdJbnRSZWN0RQogX19aTjdXZWJDb3JlOUZsb2F0U2l6ZUMxRVJLTlNfN0ludFNpemVFCitf
X1pON1dlYkNvcmU5RmxvYXRTaXplQzFFUktOU18yMEZyYWN0aW9uYWxMYXlvdXRTaXplRQogX19a
TjdXZWJDb3JlOUZvbnRDYWNoZTEzZm9udERhdGFDb3VudEV2CiBfX1pON1dlYkNvcmU5Rm9udENh
Y2hlMjFpbmFjdGl2ZUZvbnREYXRhQ291bnRFdgogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTIxcHVy
Z2VJbmFjdGl2ZUZvbnREYXRhRWkKQEAgLTEwNzYsMTAgKzEwNzksOCBAQCBfX1pON1dlYkNvcmU5
RnJhbWVUcmVlOWNsZWFyTmFtZUV2CiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTFmb3JjZUxheW91
dEViCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTJzZXRNZWRpYVR5cGVFUktOM1dURjZTdHJpbmdF
CiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTRhZGp1c3RWaWV3U2l6ZUV2Ci1fX1pON1dlYkNvcmU5
RnJhbWVWaWV3MTRzZXRNYXJnaW5XaWR0aEVpCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTRzZXRO
ZWVkc0xheW91dEV2CiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTRzZXRUcmFuc3BhcmVudEViCi1f
X1pON1dlYkNvcmU5RnJhbWVWaWV3MTVzZXRNYXJnaW5IZWlnaHRFaQogX19aTjdXZWJDb3JlOUZy
YW1lVmlldzE2c2V0UGFpbnRCZWhhdmlvckVqCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTdhZGRT
Y3JvbGxhYmxlQXJlYUVQTlNfMTRTY3JvbGxhYmxlQXJlYUUKIF9fWk43V2ViQ29yZTlGcmFtZVZp
ZXcxN3BhaW50Q29udHJvbFRpbnRzRXYKQEAgLTE1MTEsNiArMTUxMiw4IEBAIF9fWk5LN1dlYkNv
cmU4UG9zaXRpb24yNWxlYWRpbmdXaGl0ZXNwYWMKIF9fWk5LN1dlYkNvcmU4UG9zaXRpb24yNnRy
YWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uRU5TXzlFQWZmaW5pdHlFYgogX19aTks3V2ViQ29yZThQ
b3NpdGlvbjh1cHN0cmVhbUVOU18yN0VkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk5L
N1dlYkNvcmU5RE9NV2luZG93MjdwZW5kaW5nVW5sb2FkRXZlbnRMaXN0ZW5lcnNFdgorX19aTks3
V2ViQ29yZTVSYW5nZTl0ZXh0UXVhZHNFUk4zV1RGNlZlY3RvcklOU185RmxvYXRRdWFkRUxtMEVF
RWJQTlMwXzIwUmFuZ2VJbkZpeGVkUG9zaXRpb25FCitfX1pOSzdXZWJDb3JlOUZsb2F0U2l6ZTZp
c1plcm9FdgogX19aTks3V2ViQ29yZTlGbG9hdFF1YWQxMWJvdW5kaW5nQm94RXYKIF9fWk5LN1dl
YkNvcmU5RmxvYXRSZWN0MTBpbnRlcnNlY3RzRVJLUzBfCiBfX1pOSzdXZWJDb3JlOUZsb2F0UmVj
dGN2N19OU1JlY3RFdgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTE1NDg4KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MTMw
LDYgKzUxMzAsNyBAQAogCQlCOERCREI0QzEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9u
Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjhEQkRCNDgxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCAqLzsgfTsK
IAkJQjhEQkRCNEQxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjhEQkRC
NDkxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwICovOyB9
OwogCQlCOERCREI0RTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFu
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjhEQkRC
NEExMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCAqLzsgfTsK
KwkJQkFCMUMwNkExNEZDMzY3OTAwNDIzM0ZDIC8qIEZyYWN0aW9uYWxMYXlvdXRQb2ludC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0RkNFNTQxNEVD
NzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRQb2ludC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJBQ0YyOTAxMTNCMkEwRDUwMDc4MUY5
MCAvKiBMYXlvdXRUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkFDRjI5MDAxM0IyQTBENTAwNzgxRjkwIC8qIExheW91dFR5cGVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMwMEYwMDQwRTBB
MTg1NTAwRkQwNEUzIC8qIERPTUZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDMDBFRkZFMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLmggKi87
IH07CiAJCUJDMDBGMDA1MEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMEVGRkYwRTBBMTg1NTAwRkQw
NEUzIC8qIERPTUZpbGUubW0gKi87IH07CkBAIC0yMjgwOCw2ICsyMjgwOSw3IEBACiAJCQkJNjU2
RDM3M0EwQURCQTVERTAwQTQ1NTREIC8qIEZvcm1TdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDE4ODVCOTMxMUI2RkRBNjAwMzM4M0JCIC8qIEZvcm1TdWJtaXNzaW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MzVDNDc2RDA5QUM0RDYzMDBBNkFBQjQgLyogRm91bmRhdGlvbkV4dHJhcy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQkFCMUMwNkExNEZDMzY3OTAwNDIzM0ZDIC8qIEZyYWN0aW9uYWxM
YXlvdXRQb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0RkNGRTExNEVGMjUwOTAwMEQxN0Ez
IC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDRGQ0U1RDE0
RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFNpemUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0NEZDRTUyMTRFQzc5QkMwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0VW5pdC5oIGlu
IEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTE1NDg4KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUyMCw5ICs1MjAsOSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsdWVGb3JOaW5l
CiAgICAgcmV0dXJuIGNyZWF0ZUJvcmRlckltYWdlVmFsdWUoaW1hZ2VWYWx1ZSwgaW1hZ2VTbGlj
ZXMsIGJvcmRlclNsaWNlcywgb3V0c2V0LCByZXBlYXQpOwogfQogCi1pbmxpbmUgc3RhdGljIFBh
c3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoaW50IHZh
bHVlLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCitpbmxpbmUgc3RhdGljIFBhc3NSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoZG91YmxlIHZhbHVlLCBj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7Ci0gICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZVZhbHVlKGFkanVzdEZvckFic29sdXRlWm9vbSh2YWx1ZSwgc3R5bGUpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1BYKTsKKyAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUo
YWRqdXN0RmxvYXRGb3JBYnNvbHV0ZVpvb20odmFsdWUsIHN0eWxlKSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QWCk7CiB9CiAKIGlubGluZSBzdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gem9vbUFkanVzdGVkTnVtYmVyVmFsdWUoZG91YmxlIHZhbHVlLCBjb25zdCBSZW5kZXJT
dHlsZSogc3R5bGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5j
cHAJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMSw3ICs0MzEsMTEgQEAgdGVtcGxhdGU8PiB1
bnNpZ25lZCBDU1NQcmltaXRpdmVWYWx1ZTo6YwogCiB0ZW1wbGF0ZTw+IExlbmd0aCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aChSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxl
KiByb290U3R5bGUsIGZsb2F0IG11bHRpcGxpZXIsIGJvb2wgY29tcHV0aW5nRm9udFNpemUpCiB7
Ci0gICAgcmV0dXJuIExlbmd0aChyb3VuZEZvckltcHJlY2lzZUNvbnZlcnNpb248aW50Pihjb21w
dXRlTGVuZ3RoRG91YmxlKHN0eWxlLCByb290U3R5bGUsIG11bHRpcGxpZXIsIGNvbXB1dGluZ0Zv
bnRTaXplKSksIEZpeGVkKTsKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIHJldHVy
biBMZW5ndGgoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbXB1dGVMZW5ndGhEb3VibGUoc3R5bGUsIHJv
b3RTdHlsZSwgbXVsdGlwbGllciwgY29tcHV0aW5nRm9udFNpemUpKSwgRml4ZWQpOworI2Vsc2UK
KyAgICByZXR1cm4gTGVuZ3RoKHJvdW5kRm9ySW1wcmVjaXNlQ29udmVyc2lvbjxmbG9hdD4oY29t
cHV0ZUxlbmd0aERvdWJsZShzdHlsZSwgcm9vdFN0eWxlLCBtdWx0aXBsaWVyLCBjb21wdXRpbmdG
b250U2l6ZSkpLCBGaXhlZCk7CisjZW5kaWYKIH0KIAogdGVtcGxhdGU8PiBzaG9ydCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aChSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxl
KiByb290U3R5bGUsIGZsb2F0IG11bHRpcGxpZXIsIGJvb2wgY29tcHV0aW5nRm9udFNpemUpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAkocmV2aXNpb24gMTE1NDg4
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDE1ICs0MiwyNiBAQCBjbGFzcyBDU1NXcmFwU2hhcGU7CiAKIHN0cnVjdCBMZW5n
dGg7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUIHJvdW5kRm9ySW1wcmVjaXNlQ29u
dmVyc2lvbihkb3VibGUgdmFsdWUpCi17CiAgICAgLy8gRGltZW5zaW9uIGNhbGN1bGF0aW9ucyBh
cmUgaW1wcmVjaXNlLCBvZnRlbiByZXN1bHRpbmcgaW4gdmFsdWVzIG9mIGUuZy4KICAgICAvLyA0
NC45OTk5OC4gIFdlIG5lZWQgdG8gZ28gYWhlYWQgYW5kIHJvdW5kIGlmIHdlJ3JlIHJlYWxseSBj
bG9zZSB0byB0aGUKICAgICAvLyBuZXh0IGludGVnZXIgdmFsdWUuCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgVCByb3VuZEZvckltcHJlY2lzZUNvbnZlcnNpb24oZG91YmxlIHZhbHVlKQor
ewogICAgIHZhbHVlICs9ICh2YWx1ZSA8IDApID8gLTAuMDEgOiArMC4wMTsKICAgICByZXR1cm4g
KCh2YWx1ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpKSB8fCAodmFsdWUgPCBzdGQ6
Om51bWVyaWNfbGltaXRzPFQ+OjptaW4oKSkpID8gMCA6IHN0YXRpY19jYXN0PFQ+KHZhbHVlKTsK
IH0KIAordGVtcGxhdGU8PiBpbmxpbmUgZmxvYXQgcm91bmRGb3JJbXByZWNpc2VDb252ZXJzaW9u
KGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgY2VpbGVkVmFsdWUgPSBjZWlsKHZhbHVlKTsK
KyAgICBkb3VibGUgcHJveGltaXR5VG9OZXh0SW50ID0gY2VpbGVkVmFsdWUgLSB2YWx1ZTsKKyAg
ICBpZiAocHJveGltaXR5VG9OZXh0SW50IDw9IDAuMDEgJiYgdmFsdWUgPiAwKQorICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNlaWxlZFZhbHVlKTsKKyAgICBpZiAocHJveGltaXR5
VG9OZXh0SW50ID49IDAuOTkgJiYgdmFsdWUgPCAwKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGZsb29yKHZhbHVlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2
YWx1ZSk7Cit9CisKIGNsYXNzIENTU1ByaW1pdGl2ZVZhbHVlIDogcHVibGljIENTU1ZhbHVlIHsK
IHB1YmxpYzoKICAgICBlbnVtIFVuaXRUeXBlcyB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CShyZXZpc2lvbiAxMTU0ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1MywxMCArMzUzLDE0IEBAIHN0YXRpYyBpbnQgYWRqdXN0Rm9yTG9j
YWxab29tKExheW91dFVuaXQKICAgICBmbG9hdCB6b29tRmFjdG9yID0gbG9jYWxab29tRm9yUmVu
ZGVyZXIocmVuZGVyZXIpOwogICAgIGlmICh6b29tRmFjdG9yID09IDEpCiAgICAgICAgIHJldHVy
biB2YWx1ZTsKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIHJldHVybiBscm91bmRm
KHZhbHVlIC8gem9vbUZhY3Rvcik7CisjZWxzZQogICAgIC8vIE5lZWRlZCBiZWNhdXNlIGNvbXB1
dGVMZW5ndGhJbnQgdHJ1bmNhdGVzIChyYXRoZXIgdGhhbiByb3VuZHMpIHdoZW4gc2NhbGluZyB1
cC4KICAgICBpZiAoem9vbUZhY3RvciA+IDEpCiAgICAgICAgIHZhbHVlKys7CiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4odmFsdWUgLyB6b29tRmFjdG9yKTsKKyNlbmRpZgogfQogCiBpbnQg
RWxlbWVudDo6b2Zmc2V0TGVmdCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxO
YXZpZ2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxO
YXZpZ2F0aW9uLmNwcAkocmV2aXNpb24gMTE1NDg4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9T
cGF0aWFsTmF2aWdhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0NSwxOSArNjQ1LDE5IEBA
IHZvaWQgZGlzdGFuY2VEYXRhRm9yTm9kZShGb2N1c0RpcmVjdGlvbiAKICAgICBzd2l0Y2ggKGRp
cmVjdGlvbikgewogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgogICAgICAgICBzYW1lQXhp
c0Rpc3RhbmNlID0gZXhpdFBvaW50LngoKSAtIGVudHJ5UG9pbnQueCgpOwotICAgICAgICBvdGhl
ckF4aXNEaXN0YW5jZSA9IGFicyhleGl0UG9pbnQueSgpIC0gZW50cnlQb2ludC55KCkpOworICAg
ICAgICBvdGhlckF4aXNEaXN0YW5jZSA9IChleGl0UG9pbnQueSgpIC0gZW50cnlQb2ludC55KCkp
LmFicygpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CiAgICAg
ICAgIHNhbWVBeGlzRGlzdGFuY2UgPSBleGl0UG9pbnQueSgpIC0gZW50cnlQb2ludC55KCk7Ci0g
ICAgICAgIG90aGVyQXhpc0Rpc3RhbmNlID0gYWJzKGV4aXRQb2ludC54KCkgLSBlbnRyeVBvaW50
LngoKSk7CisgICAgICAgIG90aGVyQXhpc0Rpc3RhbmNlID0gKGV4aXRQb2ludC54KCkgLSBlbnRy
eVBvaW50LngoKSkuYWJzKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25SaWdodDoKICAgICAgICAgc2FtZUF4aXNEaXN0YW5jZSA9IGVudHJ5UG9pbnQueCgpIC0gZXhp
dFBvaW50LngoKTsKLSAgICAgICAgb3RoZXJBeGlzRGlzdGFuY2UgPSBhYnMoZW50cnlQb2ludC55
KCkgLSBleGl0UG9pbnQueSgpKTsKKyAgICAgICAgb3RoZXJBeGlzRGlzdGFuY2UgPSAoZW50cnlQ
b2ludC55KCkgLSBleGl0UG9pbnQueSgpKS5hYnMoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBGb2N1c0RpcmVjdGlvbkRvd246CiAgICAgICAgIHNhbWVBeGlzRGlzdGFuY2UgPSBlbnRyeVBv
aW50LnkoKSAtIGV4aXRQb2ludC55KCk7Ci0gICAgICAgIG90aGVyQXhpc0Rpc3RhbmNlID0gYWJz
KGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKSk7CisgICAgICAgIG90aGVyQXhpc0Rpc3Rh
bmNlID0gKGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKSkuYWJzKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJhY3Rpb25hbExheW91dFVuaXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GcmFjdGlvbmFsTGF5b3V0VW5pdC5oCShyZXZp
c2lvbiAxMTU0ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GcmFjdGlvbmFsTGF5b3V0
VW5pdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCwxMSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQogc3RhdGljIGNvbnN0IGludCBr
Rml4ZWRQb2ludERlbm9taW5hdG9yID0gNjA7CisjZWxzZQorc3RhdGljIGNvbnN0IGludCBrRml4
ZWRQb2ludERlbm9taW5hdG9yID0gMTsKKyNlbmRpZgogY29uc3QgaW50IGludE1heEZvckxheW91
dFVuaXQgPSBJTlRfTUFYIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKIGNvbnN0IGludCBpbnRN
aW5Gb3JMYXlvdXRVbml0ID0gLWludE1heEZvckxheW91dFVuaXQ7CiAKQEAgLTY3LDYgKzcxLDEy
IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBkb3VibGUoKSBjb25zdCB7IHJldHVybiB0b0RvdWJs
ZSgpOyB9CiAgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAor
ICAgIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvcisrKGludCkKKyAgICB7Cisg
ICAgICAgIG1fdmFsdWUgKz0ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgIH0KKwogICAgIGlubGluZSBpbnQgcmF3VmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlOyB9CiAgICAgaW5saW5lIHZvaWQgc2V0UmF3VmFsdWUoaW50IHZhbHVlKSB7IG1f
dmFsdWUgPSB2YWx1ZTsgfQogICAgIGlubGluZSB2b2lkIHNldFJhd1ZhbHVlKGxvbmcgbG9uZyB2
YWx1ZSkKQEAgLTM4OCw2ICszOTgsMTEgQEAgaW5saW5lIGZsb2F0IG9wZXJhdG9yLyhjb25zdCBm
bG9hdCBhLCBjbwogICAgIHJldHVybiBhIC8gYi50b0Zsb2F0KCk7CiB9CiAKK2lubGluZSBkb3Vi
bGUgb3BlcmF0b3IvKGNvbnN0IGRvdWJsZSBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YikKK3sKKyAgICByZXR1cm4gYSAvIGIudG9Eb3VibGUoKTsKK30KKwogaW5saW5lIEZyYWN0aW9u
YWxMYXlvdXRVbml0IG9wZXJhdG9yLyhjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGIpCiB7CiAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIC8gYjsKQEAg
LTQzMCw2ICs0NDUsMTEgQEAgaW5saW5lIGZsb2F0IG9wZXJhdG9yKyhjb25zdCBmbG9hdCBhLCBj
bwogICAgIHJldHVybiBhICsgYi50b0Zsb2F0KCk7CiB9CiAKK2lubGluZSBkb3VibGUgb3BlcmF0
b3IrKGNvbnN0IGRvdWJsZSBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAg
ICByZXR1cm4gYSArIGIudG9Eb3VibGUoKTsKK30KKwogaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRV
bml0IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQmIGIpCiB7CiAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFs
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmgJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyAr
MTA5LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KICAgICAKLSAg
ICBpbnQgdmFsdWUoKSBjb25zdAorICAgIGZsb2F0IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBnZXRGbG9hdFZhbHVlKCk7CisgICAgfQorCisgICAgaW50IGludFZhbHVlKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc0NhbGN1bGF0ZWQoKSkgewogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMTgsMTMgKzEyMyw2IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGdldEludFZhbHVlKCk7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFdoZW4gd2Ug
c3dpdGNoIHRvIHN1Yi1waXhlbCBsYXlvdXQsIHZhbHVlIHdpbGwgcmV0dXJuIGZsb2F0IGJ5IGRl
ZmF1bHQsIGFuZCB0aGlzIHdpbGwgaW5oZXJpdAotICAgIC8vIHRoZSBjdXJyZW50IGltcGxlbWVu
dGF0aW9uIG9mIHZhbHVlKCkuCi0gICAgaW50IGludFZhbHVlKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZSgpOwotICAgIH0KLQogICAgIGZsb2F0IHBlcmNlbnQoKSBjb25zdAog
ICAgIHsKICAgICAgICAgQVNTRVJUKHR5cGUoKSA9PSBQZXJjZW50KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0
UmVjdC5jcHAJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDkg
KzEzOSwxMyBAQCBJbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRnJhY3Rpb25hCiAKIEZy
YWN0aW9uYWxMYXlvdXRSZWN0IGVuY2xvc2luZ0ZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQogICAgIHJldHVy
biBGcmFjdGlvbmFsTGF5b3V0UmVjdChyZWN0LngoKSwgcmVjdC55KCksCiAgICAgICAgICAgICAg
ICAgICAgICByZWN0Lm1heFgoKSAtIHJlY3QueCgpICsgRnJhY3Rpb25hbExheW91dFVuaXQ6OmVw
c2lsb24oKSwKICAgICAgICAgICAgICAgICAgICAgIHJlY3QubWF4WSgpIC0gcmVjdC55KCkgKyBG
cmFjdGlvbmFsTGF5b3V0VW5pdDo6ZXBzaWxvbigpKTsKKyNlbHNlCisgICAgcmV0dXJuIGVuY2xv
c2luZ0ludFJlY3QocmVjdCk7CisjZW5kaWYKIH0KIAogSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRS
ZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiByZWN0KQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAJKHJldmlzaW9uIDExNTQ4OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MzcsNyArNzM3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhVm9s
dW1lU2xpZAogICAgIGlmICghby0+aXNTbGlkZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgSW50UmVjdCBiID0gdG9SZW5kZXJCb3gobyktPmNvbnRlbnRCb3hSZWN0KCk7CisgICAg
SW50UmVjdCBiID0gcGl4ZWxTbmFwcGVkSW50UmVjdCh0b1JlbmRlckJveChvKS0+Y29udGVudEJv
eFJlY3QoKSk7CiAKICAgICAvLyBQb3NpdGlvbiB0aGUgb3V0ZXIgcmVjdGFuZ2xlCiAgICAgaW50
IHRvcCA9IHIueSgpICsgYi55KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
UG9wdXBNZW51V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vUG9wdXBNZW51V2luLmNwcAkocmV2aXNpb24gMTE1NDg4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1NSw3ICs2
NTUsNyBAQCB2b2lkIFBvcHVwTWVudVdpbjo6cGFpbnQoY29uc3QgSW50UmVjdCYgCiAgICAgICAg
IGlmIChpdGVtU3R5bGUuaXNWaXNpYmxlKCkpIHsKICAgICAgICAgICAgIGludCB0ZXh0WCA9IG1h
eDxpbnQ+KDAsIGNsaWVudCgpLT5jbGllbnRQYWRkaW5nTGVmdCgpIC0gY2xpZW50KCktPmNsaWVu
dEluc2V0TGVmdCgpKTsKICAgICAgICAgICAgIGlmIChSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1l
KCktPnBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5kZW50KCkgJiYgaXRlbVN0eWxlLnRleHREaXJl
Y3Rpb24oKSA9PSBMVFIpCi0gICAgICAgICAgICAgICAgdGV4dFggKz0gbWluaW11bVZhbHVlRm9y
TGVuZ3RoKGl0ZW1TdHlsZS50ZXh0SW5kZW50KCksIGl0ZW1SZWN0LndpZHRoKCkpOworICAgICAg
ICAgICAgICAgIHRleHRYICs9IG1pbmltdW1JbnRWYWx1ZUZvckxlbmd0aChpdGVtU3R5bGUudGV4
dEluZGVudCgpLCBpdGVtUmVjdC53aWR0aCgpKTsKICAgICAgICAgICAgIGludCB0ZXh0WSA9IGl0
ZW1SZWN0LnkoKSArIGl0ZW1Gb250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgKyAoaXRlbVJlY3Qu
aGVpZ2h0KCkgLSBpdGVtRm9udC5mb250TWV0cmljcygpLmhlaWdodCgpKSAvIDI7CiAgICAgICAg
ICAgICBjb250ZXh0LmRyYXdCaWRpVGV4dChpdGVtRm9udCwgdGV4dFJ1biwgSW50UG9pbnQodGV4
dFgsIHRleHRZKSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTk0LDcgKzU5NCw3
IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0luQmxvY2tEaXIKICAgICBib29sIGlz
Um9vdEJveCA9IGlzUm9vdElubGluZUJveCgpOwogICAgIGlmIChpc1Jvb3RCb3gpIHsKICAgICAg
ICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gcmVuZGVyZXIoKS0+c3R5bGUoaXNG
aXJzdExpbmVTdHlsZSgpKS0+Zm9udE1ldHJpY3MoKTsKLSAgICAgICAgc2V0TG9naWNhbFRvcCh0
b3AgKyBtYXhBc2NlbnQgLSBmb250TWV0cmljcy5hc2NlbnQoYmFzZWxpbmVUeXBlKSk7CisgICAg
ICAgIHNldExvZ2ljYWxUb3AoKHRvcCArIG1heEFzY2VudCAtIGZvbnRNZXRyaWNzLmFzY2VudChi
YXNlbGluZVR5cGUpKS5yb3VuZCgpKTsKICAgICB9CiAKICAgICBMYXlvdXRVbml0IGFkanVzdG1l
bnRGb3JDaGlsZHJlbldpdGhTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lID0gMDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCShyZXZpc2lvbiAxMTU0ODgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzcsMTEwICszNyw5NyBAQAogI2RlZmluZSBMYXlvdXRUeXBlc19oCiAKICNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgorI2luY2x1ZGUgIkZy
YWN0aW9uYWxMYXlvdXRVbml0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0
Zi9VbnVzZWRQYXJhbS5oPgorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi10eXBlZGVmIGludCBMYXlvdXRVbml0OwotdHlwZWRlZiBJbnRQb2lu
dCBMYXlvdXRQb2ludDsKLXR5cGVkZWYgSW50U2l6ZSBMYXlvdXRTaXplOwotdHlwZWRlZiBJbnRS
ZWN0IExheW91dFJlY3Q7Ci0KLSNkZWZpbmUgTUFYX0xBWU9VVF9VTklUIElOVF9NQVgKLSNkZWZp
bmUgTUlOX0xBWU9VVF9VTklUIElOVF9NSU4KLSNkZWZpbmUgWkVST19MQVlPVVRfVU5JVCAwCit0
eXBlZGVmIEZyYWN0aW9uYWxMYXlvdXRVbml0IExheW91dFVuaXQ7Cit0eXBlZGVmIEZyYWN0aW9u
YWxMYXlvdXRQb2ludCBMYXlvdXRQb2ludDsKK3R5cGVkZWYgRnJhY3Rpb25hbExheW91dFNpemUg
TGF5b3V0U2l6ZTsKK3R5cGVkZWYgRnJhY3Rpb25hbExheW91dFJlY3QgTGF5b3V0UmVjdDsKKwor
I2RlZmluZSBNQVhfTEFZT1VUX1VOSVQgTGF5b3V0VW5pdDo6bWF4KCkKKyNkZWZpbmUgTUlOX0xB
WU9VVF9VTklUIExheW91dFVuaXQ6Om1pbigpCisjZGVmaW5lIFpFUk9fTEFZT1VUX1VOSVQgTGF5
b3V0VW5pdCgwKQogCi1pbmxpbmUgTGF5b3V0UmVjdCBlbmNsb3NpbmdMYXlvdXRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0UmVjdCBlbmNsb3NpbmdM
YXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4gZW5jbG9zaW5n
SW50UmVjdChyZWN0KTsKIH0KIAotaW5saW5lIEludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChj
b25zdCBMYXlvdXRSZWN0JiByZWN0KQoraW5saW5lIExheW91dFNpemUgcm91bmRlZExheW91dFNp
emUoY29uc3QgRmxvYXRTaXplJiBzKQogewotICAgIHJldHVybiByZWN0OworI2lmIEVOQUJMRShT
VUJQSVhFTF9MQVlPVVQpCisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKHMpOworI2Vs
c2UKKyAgICByZXR1cm4gcm91bmRlZEludFNpemUocyk7CisjZW5kaWYKIH0KIAogaW5saW5lIElu
dFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChMYXlvdXRVbml0IGxlZnQsIExheW91dFVuaXQgdG9w
LCBMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCkKIHsKLSAgICByZXR1cm4gSW50
UmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOwotfQotCi1pbmxpbmUgSW50UmVjdCBwaXhl
bFNuYXBwZWRJbnRSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgY29uc3QgTGF5b3V0
U2l6ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4gSW50UmVjdChsb2NhdGlvbiwgc2l6ZSk7CisgICAg
cmV0dXJuIEludFJlY3QobGVmdC5yb3VuZCgpLCB0b3Aucm91bmQoKSwgc25hcFNpemVUb1BpeGVs
KHdpZHRoLCBsZWZ0KSwgc25hcFNpemVUb1BpeGVsKGhlaWdodCwgdG9wKSk7CiB9CiAKIGlubGlu
ZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3RGcm9tRWRnZXMoTGF5b3V0VW5pdCBsZWZ0LCBM
YXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCByaWdodCwgTGF5b3V0VW5pdCBib3R0b20pCiB7Ci0g
ICAgcmV0dXJuIEludFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCk7
Ci19Ci0KLWlubGluZSBpbnQgc25hcFNpemVUb1BpeGVsKExheW91dFVuaXQgc2l6ZSwgTGF5b3V0
VW5pdCBsb2NhdGlvbikgCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICByZXR1
cm4gc2l6ZTsKLX0KLQotaW5saW5lIEludFNpemUgcGl4ZWxTbmFwcGVkSW50U2l6ZShMYXlvdXRT
aXplIHNpemUsIExheW91dFBvaW50IGxvY2F0aW9uKQotewotICAgIFVOVVNFRF9QQVJBTShsb2Nh
dGlvbik7Ci0gICAgcmV0dXJuIHNpemU7Ci19Ci0KLWlubGluZSBJbnRTaXplIHJvdW5kZWRJbnRT
aXplKGNvbnN0IExheW91dFNpemUmIHMpCi17Ci0gICAgcmV0dXJuIHM7Ci19Ci0KLWlubGluZSBM
YXlvdXRTaXplIHJvdW5kZWRMYXlvdXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgcykKLXsKLSAgICBy
ZXR1cm4gcm91bmRlZEludFNpemUocyk7Ci19Ci0KLWlubGluZSBJbnRQb2ludCByb3VuZGVkSW50
UG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHApCi17Ci0gICAgcmV0dXJuIHA7CisgICAgcmV0dXJu
IEludFJlY3QobGVmdC5yb3VuZCgpLCB0b3Aucm91bmQoKSwgc25hcFNpemVUb1BpeGVsKHJpZ2h0
IC0gbGVmdCwgbGVmdCksIHNuYXBTaXplVG9QaXhlbChib3R0b20gLSB0b3AsIHRvcCkpOwogfQog
CiBpbmxpbmUgTGF5b3V0UG9pbnQgcm91bmRlZExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQm
IHApCiB7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICByZXR1cm4gRnJhY3Rpb25h
bExheW91dFBvaW50KHApOworI2Vsc2UKICAgICByZXR1cm4gcm91bmRlZEludFBvaW50KHApOwor
I2VuZGlmCiB9CiAKIGlubGluZSBMYXlvdXRQb2ludCBmbG9vcmVkTGF5b3V0UG9pbnQoY29uc3Qg
RmxvYXRQb2ludCYgcCkKIHsKLSAgICByZXR1cm4gZmxvb3JlZEludFBvaW50KHApOworICAgIHJl
dHVybiBMYXlvdXRQb2ludChwLngoKSwgcC55KCkpOwogfQogCiBpbmxpbmUgTGF5b3V0UG9pbnQg
Zmxvb3JlZExheW91dFBvaW50KGNvbnN0IEZsb2F0U2l6ZSYgcykKIHsKLSAgICByZXR1cm4gZmxv
b3JlZEludFBvaW50KHMpOworICAgIHJldHVybiBMYXlvdXRQb2ludChzLndpZHRoKCksIHMuaGVp
Z2h0KCkpOwogfQogCiBpbmxpbmUgTGF5b3V0U2l6ZSBmbG9vcmVkTGF5b3V0U2l6ZShjb25zdCBG
bG9hdFBvaW50JiBwKQogewotICAgIHJldHVybiBMYXlvdXRTaXplKHN0YXRpY19jYXN0PGludD4o
cC54KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHAueSgpKSk7CisgICAgcmV0dXJuIExheW91dFNpemUo
cC54KCksIHAueSgpKTsKIH0KIAogaW5saW5lIGludCByb3VuZFRvSW50KExheW91dFVuaXQgdmFs
dWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlOworICAgIHJldHVybiB2YWx1ZS5yb3VuZCgpOwogfQog
CiBpbmxpbmUgaW50IGZsb29yVG9JbnQoTGF5b3V0VW5pdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
dmFsdWU7CisgICAgcmV0dXJuIHZhbHVlLnRvSW50KCk7CiB9CiAKIGlubGluZSBMYXlvdXRVbml0
IHJvdW5kZWRMYXlvdXRVbml0KGZsb2F0IHZhbHVlKQogewotICAgIHJldHVybiBscm91bmRmKHZh
bHVlKTsKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0VW5pdCh2YWx1ZSk7CisjZWxzZQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxy
b3VuZGYodmFsdWUpKTsKKyNlbmRpZgogfQogCiBpbmxpbmUgTGF5b3V0VW5pdCBjZWlsZWRMYXlv
dXRVbml0KGZsb2F0IHZhbHVlKQogeworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAg
cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KHZhbHVlKTsKKyNlbHNlCiAgICAgcmV0dXJuIGNl
aWxmKHZhbHVlKTsKKyNlbmRpZgogfQogCiBpbmxpbmUgTGF5b3V0U2l6ZSB0b0xheW91dFNpemUo
Y29uc3QgTGF5b3V0UG9pbnQmIHApCkBAIC0xNTUsMjIgKzE0MiwyMiBAQCBpbmxpbmUgTGF5b3V0
UG9pbnQgdG9MYXlvdXRQb2ludChjb25zdCBMCiAKIGlubGluZSBMYXlvdXRVbml0IGxheW91dE1v
ZChjb25zdCBMYXlvdXRVbml0JiBudW1lcmF0b3IsIGNvbnN0IExheW91dFVuaXQmIGRlbm9taW5h
dG9yKQogewotICAgIHJldHVybiBudW1lcmF0b3IgJSBkZW5vbWluYXRvcjsKKyAgICByZXR1cm4g
bnVtZXJhdG9yLnRvSW50KCkgJSBkZW5vbWluYXRvci50b0ludCgpOwogfQogCiBpbmxpbmUgTGF5
b3V0VW5pdCBjbGFtcFRvTGF5b3V0VW5pdChkb3VibGUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGNs
YW1wVG9JbnRlZ2VyKHZhbHVlKTsKKyAgICByZXR1cm4gY2xhbXBUbzxGcmFjdGlvbmFsTGF5b3V0
VW5pdD4odmFsdWUsIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptaW4oKSwgRnJhY3Rpb25hbExheW91
dFVuaXQ6Om1heCgpKTsKIH0KIAotaW5saW5lIGJvb2wgaXNJbnRlZ2VyVmFsdWUoY29uc3QgTGF5
b3V0VW5pdCkKK2lubGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3QoTGF5b3V0UG9pbnQg
bG9jYXRpb24sIExheW91dFNpemUgc2l6ZSkKIHsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gSW50UmVjdChyb3VuZGVkSW50UG9pbnQobG9jYXRpb24pLCBwaXhlbFNuYXBwZWRJbnRTaXpl
KHNpemUsIGxvY2F0aW9uKSk7CiB9CiAKLWlubGluZSBMYXlvdXRVbml0IGJvdW5kZWRNdWx0aXBs
eShjb25zdCBMYXlvdXRVbml0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wg
aXNJbnRlZ2VyVmFsdWUoY29uc3QgTGF5b3V0VW5pdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gYSAq
IGI7CisgICAgcmV0dXJuIHZhbHVlLmZsb29yKCkgPT0gdmFsdWU7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRJbmZvLmgJKHJldmlz
aW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNyArMzIsOSBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAjaW5j
bHVkZSAiUGFpbnRQaGFzZS5oIgorI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogCkBAIC05Niw3ICs5OCw3IEBA
IHN0cnVjdCBQYWludEluZm8gewogICAgIH0KICNlbmRpZgogCi0gICAgc3RhdGljIEludFJlY3Qg
aW5maW5pdGVSZWN0KCkgeyByZXR1cm4gSW50UmVjdChJTlRfTUlOIC8gMiwgSU5UX01JTiAvIDIs
IElOVF9NQVgsIElOVF9NQVgpOyB9CisgICAgc3RhdGljIEludFJlY3QgaW5maW5pdGVSZWN0KCkg
eyByZXR1cm4gSW50UmVjdChMYXlvdXRSZWN0OjppbmZpbml0ZVJlY3QoKSk7IH0KIAogICAgIC8v
IEZJWE1FOiBJbnRyb2R1Y2Ugc2V0dGVycy9nZXR0ZXJzIGF0IHNvbWUgcG9pbnQuIFJlcXVpcmVz
IGEgbG90IG9mIGNoYW5nZXMgdGhyb3VnaG91dCByZW5kZXJpbmcvLgogICAgIEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAxMTU0ODgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTc1Nyw3ICsxNzU3LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6Y2hlY2tQYWdpbmF0aW9uQW5k
RmxvYQogICAgIHdoaWxlIChSb290SW5saW5lQm94KiBuZXh0TGluZSA9IGxhc3RMaW5lLT5uZXh0
Um9vdEJveCgpKQogICAgICAgICBsYXN0TGluZSA9IG5leHRMaW5lOwogCi0gICAgTGF5b3V0VW5p
dCBsb2dpY2FsQm90dG9tID0gbGFzdExpbmUtPmxpbmVCb3R0b21XaXRoTGVhZGluZygpICsgYWJz
KGxpbmVEZWx0YSk7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tID0gbGFzdExpbmUtPmxp
bmVCb3R0b21XaXRoTGVhZGluZygpICsgbGluZURlbHRhLmFicygpOwogCiAgICAgY29uc3QgRmxv
YXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNl
dCgpOwogICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RT
ZXQuZW5kKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMzcs
MTMgKzEyMzcsMTMgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3VsYXRlQmFjawog
CiAgICAgTGF5b3V0VW5pdCB4UG9zaXRpb24gPSBtaW5pbXVtVmFsdWVGb3JMZW5ndGgoZmlsbExh
eWVyLT54UG9zaXRpb24oKSwgcG9zaXRpb25pbmdBcmVhU2l6ZS53aWR0aCgpIC0gZ2VvbWV0cnku
dGlsZVNpemUoKS53aWR0aCgpLCByZW5kZXJWaWV3LCB0cnVlKTsKICAgICBpZiAoYmFja2dyb3Vu
ZFJlcGVhdFggPT0gUmVwZWF0RmlsbCkKLSAgICAgICAgZ2VvbWV0cnkuc2V0UGhhc2VYKGdlb21l
dHJ5LnRpbGVTaXplKCkud2lkdGgoKSA/IGdlb21ldHJ5LnRpbGVTaXplKCkud2lkdGgoKSAtICh4
UG9zaXRpb24gKyBsZWZ0KSAlIGdlb21ldHJ5LnRpbGVTaXplKCkud2lkdGgoKSA6IDApOworICAg
ICAgICBnZW9tZXRyeS5zZXRQaGFzZVgoZ2VvbWV0cnkudGlsZVNpemUoKS53aWR0aCgpID8gZ2Vv
bWV0cnkudGlsZVNpemUoKS53aWR0aCgpIC0gbHJvdW5kKHhQb3NpdGlvbiArIGxlZnQpICUgZ2Vv
bWV0cnkudGlsZVNpemUoKS53aWR0aCgpIDogMCk7CiAgICAgZWxzZQogICAgICAgICBnZW9tZXRy
eS5zZXROb1JlcGVhdFgoeFBvc2l0aW9uICsgbGVmdCk7CiAKICAgICBMYXlvdXRVbml0IHlQb3Np
dGlvbiA9IG1pbmltdW1WYWx1ZUZvckxlbmd0aChmaWxsTGF5ZXItPnlQb3NpdGlvbigpLCBwb3Np
dGlvbmluZ0FyZWFTaXplLmhlaWdodCgpIC0gZ2VvbWV0cnkudGlsZVNpemUoKS5oZWlnaHQoKSwg
cmVuZGVyVmlldywgdHJ1ZSk7CiAgICAgaWYgKGJhY2tncm91bmRSZXBlYXRZID09IFJlcGVhdEZp
bGwpCi0gICAgICAgIGdlb21ldHJ5LnNldFBoYXNlWShnZW9tZXRyeS50aWxlU2l6ZSgpLmhlaWdo
dCgpID8gZ2VvbWV0cnkudGlsZVNpemUoKS5oZWlnaHQoKSAtICh5UG9zaXRpb24gKyB0b3ApICUg
Z2VvbWV0cnkudGlsZVNpemUoKS5oZWlnaHQoKSA6IDApOworICAgICAgICBnZW9tZXRyeS5zZXRQ
aGFzZVkoZ2VvbWV0cnkudGlsZVNpemUoKS5oZWlnaHQoKSA/IGdlb21ldHJ5LnRpbGVTaXplKCku
aGVpZ2h0KCkgLSBscm91bmQoeVBvc2l0aW9uICsgdG9wKSAlIGdlb21ldHJ5LnRpbGVTaXplKCku
aGVpZ2h0KCkgOiAwKTsKICAgICBlbHNlIAogICAgICAgICBnZW9tZXRyeS5zZXROb1JlcGVhdFko
eVBvc2l0aW9uICsgdG9wKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHJldmlzaW9uIDExNTQ4
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVC
b3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTMsNyArODEzLDcgQEAgdm9pZCBSZW5kZXJEZXBy
ZWNhdGVkRmxleGlibGVCb3g6OmxheW91dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0gd2hpbGUgKGdyb3VwUmVtYWluaW5nU3BhY2UpOworICAgICAgICAgICAgICAg
IH0gd2hpbGUgKGdyb3VwUmVtYWluaW5nU3BhY2UgPj0gMSk7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIC8vIFdlIGRpZG4ndCBmaW5kIGFueSBjaGlsZHJlbiB0aGF0IGNvdWxkIGdyb3cu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9u
IDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5MDgsNyArMzkwOCw3IEBAIENsaXBSZWN0IFJlbmRlckxheWVyOjpi
YWNrZ3JvdW5kQ2xpcFJlY3QKICAgICBBU1NFUlQodmlldyk7CiAKICAgICAvLyBOb3RlOiBpbmZp
bml0ZSBjbGlwUmVjdHMgc2hvdWxkIG5vdCBiZSBzY3JvbGxlZCBoZXJlLCBvdGhlcndpc2UgdGhl
eSB3aWxsIGFjY2lkZW50YWxseSBubyBsb25nZXIgYmUgY29uc2lkZXJlZCBpbmZpbml0ZS4KLSAg
ICBpZiAocGFyZW50UmVjdHMuZml4ZWQoKSAmJiByb290TGF5ZXItPnJlbmRlcmVyKCkgPT0gdmll
dyAmJiBiYWNrZ3JvdW5kQ2xpcFJlY3QgIT0gUGFpbnRJbmZvOjppbmZpbml0ZVJlY3QoKSkKKyAg
ICBpZiAocGFyZW50UmVjdHMuZml4ZWQoKSAmJiByb290TGF5ZXItPnJlbmRlcmVyKCkgPT0gdmll
dyAmJiBiYWNrZ3JvdW5kQ2xpcFJlY3QgIT0gTGF5b3V0UmVjdDo6aW5maW5pdGVSZWN0KCkpCiAg
ICAgICAgIGJhY2tncm91bmRDbGlwUmVjdC5tb3ZlKHZpZXctPmZyYW1lVmlldygpLT5zY3JvbGxY
Rm9yRml4ZWRQb3NpdGlvbigpLCB2aWV3LT5mcmFtZVZpZXcoKS0+c2Nyb2xsWUZvckZpeGVkUG9z
aXRpb24oKSk7CiAKICAgICByZXR1cm4gYmFja2dyb3VuZENsaXBSZWN0OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCShyZXZpc2lvbiAx
MTU0ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1LDcgQEAgYm9vbCBSZW5kZXJMaW5lQm94TGlz
dDo6cmFuZ2VJbnRlcnNlY3RzUgogICAgICAgICBibG9jayA9IHJlbmRlcmVyLT5jb250YWluaW5n
QmxvY2soKTsKICAgICBMYXlvdXRVbml0IHBoeXNpY2FsU3RhcnQgPSBibG9jay0+ZmxpcEZvcldy
aXRpbmdNb2RlKGxvZ2ljYWxUb3ApOwogICAgIExheW91dFVuaXQgcGh5c2ljYWxFbmQgPSBibG9j
ay0+ZmxpcEZvcldyaXRpbmdNb2RlKGxvZ2ljYWxCb3R0b20pOwotICAgIExheW91dFVuaXQgcGh5
c2ljYWxFeHRlbnQgPSBhYnMocGh5c2ljYWxFbmQgLSBwaHlzaWNhbFN0YXJ0KTsKKyAgICBMYXlv
dXRVbml0IHBoeXNpY2FsRXh0ZW50ID0gKHBoeXNpY2FsRW5kIC0gcGh5c2ljYWxTdGFydCkuYWJz
KCk7CiAgICAgcGh5c2ljYWxTdGFydCA9IG1pbihwaHlzaWNhbFN0YXJ0LCBwaHlzaWNhbEVuZCk7
CiAgICAgCiAgICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAko
cmV2aXNpb24gMTE1NDg4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MjksNyArMTQyOSw3IEBAIGJvb2wgUmVuZGVyT2Jq
ZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk4KICAgICAvLyB0d28gcmVjdGFuZ2xlcyAoYnV0IHR5
cGljYWxseSBvbmx5IG9uZSkuCiAgICAgUmVuZGVyU3R5bGUqIG91dGxpbmVTdHlsZSA9IG91dGxp
bmVTdHlsZUZvclJlcGFpbnQoKTsKICAgICBMYXlvdXRVbml0IG93ID0gb3V0bGluZVN0eWxlLT5v
dXRsaW5lU2l6ZSgpOwotICAgIExheW91dFVuaXQgd2lkdGggPSBhYnMobmV3T3V0bGluZUJveC53
aWR0aCgpIC0gb2xkT3V0bGluZUJveC53aWR0aCgpKTsKKyAgICBMYXlvdXRVbml0IHdpZHRoID0g
KG5ld091dGxpbmVCb3gud2lkdGgoKSAtIG9sZE91dGxpbmVCb3gud2lkdGgoKSkuYWJzKCk7CiAg
ICAgaWYgKHdpZHRoKSB7CiAgICAgICAgIExheW91dFVuaXQgc2hhZG93TGVmdDsKICAgICAgICAg
TGF5b3V0VW5pdCBzaGFkb3dSaWdodDsKQEAgLTE0NDgsNyArMTQ0OCw3IEBAIGJvb2wgUmVuZGVy
T2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk4KICAgICAgICAgICAgIHJlcGFpbnRVc2luZ0Nv
bnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCByaWdodFJlY3QpOwogICAgICAgICB9CiAgICAgfQot
ICAgIExheW91dFVuaXQgaGVpZ2h0ID0gYWJzKG5ld091dGxpbmVCb3guaGVpZ2h0KCkgLSBvbGRP
dXRsaW5lQm94LmhlaWdodCgpKTsKKyAgICBMYXlvdXRVbml0IGhlaWdodCA9IChuZXdPdXRsaW5l
Qm94LmhlaWdodCgpIC0gb2xkT3V0bGluZUJveC5oZWlnaHQoKSkuYWJzKCk7CiAgICAgaWYgKGhl
aWdodCkgewogICAgICAgICBMYXlvdXRVbml0IHNoYWRvd1RvcDsKICAgICAgICAgTGF5b3V0VW5p
dCBzaGFkb3dCb3R0b207CkBAIC0yNjkxLDcgKzI2OTEsNyBAQCBib29sIFJlbmRlck9iamVjdDo6
d2lsbFJlbmRlckltYWdlKENhY2hlCiAgICAgcmV0dXJuICFkb2N1bWVudCgpLT5pblBhZ2VDYWNo
ZSgpICYmICFkb2N1bWVudCgpLT52aWV3KCktPmlzT2Zmc2NyZWVuKCk7CiB9CiAKLUxheW91dFVu
aXQgUmVuZGVyT2JqZWN0OjptYXhpbWFsT3V0bGluZVNpemUoUGFpbnRQaGFzZSBwKSBjb25zdAor
aW50IFJlbmRlck9iamVjdDo6bWF4aW1hbE91dGxpbmVTaXplKFBhaW50UGhhc2UgcCkgY29uc3QK
IHsKICAgICBpZiAocCAhPSBQYWludFBoYXNlT3V0bGluZSAmJiBwICE9IFBhaW50UGhhc2VTZWxm
T3V0bGluZSAmJiBwICE9IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzKQogICAgICAgICByZXR1cm4g
MDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9u
IDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNzc2LDcgKzc3Niw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1JlZmxl
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2JpdGZpZWxkcy5oYXNSZWZsZWN0aW9uKCk7IH0KIAog
ICAgIC8vIEFwcGxpZWQgYXMgYSAic2xvcCIgdG8gZGlydHkgcmVjdCBjaGVja3MgZHVyaW5nIHRo
ZSBvdXRsaW5lIHBhaW50aW5nIHBoYXNlJ3MgZGlydHktcmVjdCBjaGVja3MuCi0gICAgTGF5b3V0
VW5pdCBtYXhpbWFsT3V0bGluZVNpemUoUGFpbnRQaGFzZSkgY29uc3Q7CisgICAgaW50IG1heGlt
YWxPdXRsaW5lU2l6ZShQYWludFBoYXNlKSBjb25zdDsKIAogICAgIGVudW0gU2VsZWN0aW9uU3Rh
dGUgewogICAgICAgICBTZWxlY3Rpb25Ob25lLCAvLyBUaGUgb2JqZWN0IGlzIG5vdCBzZWxlY3Rl
ZC4KQEAgLTExNzcsMTEgKzExNzcsNiBAQCBpbmxpbmUgaW50IGFkanVzdEZvckFic29sdXRlWm9v
bShpbnQgdmFsCiAgICAgcmV0dXJuIGFkanVzdEZvckFic29sdXRlWm9vbSh2YWx1ZSwgcmVuZGVy
ZXItPnN0eWxlKCkpOwogfQogCi1pbmxpbmUgaW50IGFkanVzdEZvckFic29sdXRlWm9vbShGcmFj
dGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKLXsKLSAgICBy
ZXR1cm4gYWRqdXN0Rm9yQWJzb2x1dGVab29tKHZhbHVlLmZsb29yKCksIHJlbmRlcmVyLT5zdHls
ZSgpKTsKLX0KLQogaW5saW5lIHZvaWQgYWRqdXN0RmxvYXRRdWFkRm9yQWJzb2x1dGVab29tKEZs
b2F0UXVhZCYgcXVhZCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBmbG9hdCB6b29t
ID0gcmVuZGVyZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiAxMTU0ODgpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQzLDcgKzE0Myw3IEBAIExlbmd0aCBSZW5kZXJUYWJsZUNlbGw6OnN0eWxlT3JD
b2xMb2dpY2EKICAgICAgICAgLy8gUGVyY2VudGFnZXMgZG9uJ3QgbmVlZCB0byBiZSBoYW5kbGVk
IHNpbmNlIHRoZXkncmUgYWx3YXlzIHRyZWF0ZWQgdGhpcyB3YXkgKGV2ZW4gd2hlbiBzcGVjaWZp
ZWQgb24gdGhlIGNlbGxzKS4KICAgICAgICAgLy8gU2VlIEJ1Z3ppbGxhIGJ1ZyA4MTI2IGZvciBk
ZXRhaWxzLgogICAgICAgICBpZiAoY29sV2lkdGhTdW0uaXNGaXhlZCgpICYmIGNvbFdpZHRoU3Vt
LnZhbHVlKCkgPiAwKQotICAgICAgICAgICAgY29sV2lkdGhTdW0gPSBMZW5ndGgobWF4KDAsIGNv
bFdpZHRoU3VtLnZhbHVlKCkgLSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCkpLCBGaXhl
ZCk7CisgICAgICAgICAgICBjb2xXaWR0aFN1bSA9IExlbmd0aChtYXgoMC4wZiwgY29sV2lkdGhT
dW0udmFsdWUoKSAtIGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKSksIEZpeGVkKTsKICAg
ICAgICAgcmV0dXJuIGNvbFdpZHRoU3VtOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCShyZXZpc2lv
biAxMTU0ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1
bVNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODMsNyArMjgzLDcgQEAgYm9vbCBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6cGFpbnRTZWFyYwogICAgIExheW91dFJlY3QgaW5wdXRDb250ZW50
Qm94ID0gaW5wdXRSZW5kZXJCb3gtPmNvbnRlbnRCb3hSZWN0KCk7CiAKICAgICAvLyBNYWtlIHN1
cmUgdGhlIHNjYWxlZCBidXR0b24gc3RheXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBpbiBpdHMgcGFy
ZW50J3MgYm94LgotICAgIExheW91dFVuaXQgY2FuY2VsQnV0dG9uU2l6ZSA9IHN0ZDo6bWluKGlu
cHV0Q29udGVudEJveC53aWR0aCgpLCBzdGQ6Om1pbihpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCks
IHIuaGVpZ2h0KCkpKTsKKyAgICBMYXlvdXRVbml0IGNhbmNlbEJ1dHRvblNpemUgPSBzdGQ6Om1p
bihpbnB1dENvbnRlbnRCb3gud2lkdGgoKSwgc3RkOjptaW48TGF5b3V0VW5pdD4oaW5wdXRDb250
ZW50Qm94LmhlaWdodCgpLCByLmhlaWdodCgpKSk7CiAgICAgLy8gQ2FsY3VsYXRlIGNhbmNlbCBi
dXR0b24ncyBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgaW5wdXQgZWxlbWVudC4KICAgICAv
LyBDZW50ZXIgdGhlIGJ1dHRvbiB2ZXJ0aWNhbGx5LiAgUm91bmQgdXAgdGhvdWdoLCBzbyBpZiBp
dCBoYXMgdG8gYmUgb25lIHBpeGVsIG9mZi1jZW50ZXIsIGl0IHdpbGwKICAgICAvLyBiZSBvbmUg
cGl4ZWwgY2xvc2VyIHRvIHRoZSBib3R0b20gb2YgdGhlIGZpZWxkLiAgVGhpcyB0ZW5kcyB0byBs
b29rIGJldHRlciB3aXRoIHRoZSB0ZXh0LgpAQCAtMzI2LDcgKzMyNiw3IEBAIGJvb2wgUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmMKICAgICBMYXlvdXRSZWN0IGlucHV0Q29udGVu
dEJveCA9IGlucHV0UmVuZGVyQm94LT5jb250ZW50Qm94UmVjdCgpOwogCiAgICAgLy8gTWFrZSBz
dXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiBzdGF5cyBzcXVhcmUgYW5kIHdpbGwgZml0IGluIGl0
cyBwYXJlbnQncyBib3guCi0gICAgTGF5b3V0VW5pdCBtYWduaWZpZXJTaXplID0gc3RkOjptaW4o
aW5wdXRDb250ZW50Qm94LndpZHRoKCksIHN0ZDo6bWluKGlucHV0Q29udGVudEJveC5oZWlnaHQo
KSwgci5oZWlnaHQoKSkpOworICAgIExheW91dFVuaXQgbWFnbmlmaWVyU2l6ZSA9IHN0ZDo6bWlu
KGlucHV0Q29udGVudEJveC53aWR0aCgpLCBzdGQ6Om1pbjxMYXlvdXRVbml0PihpbnB1dENvbnRl
bnRCb3guaGVpZ2h0KCksIHIuaGVpZ2h0KCkpKTsKICAgICAvLyBDYWxjdWxhdGUgZGVjb3JhdGlv
bidzIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSBpbnB1dCBlbGVtZW50LgogICAgIC8vIENl
bnRlciB0aGUgZGVjb3JhdGlvbiB2ZXJ0aWNhbGx5LiAgUm91bmQgdXAgdGhvdWdoLCBzbyBpZiBp
dCBoYXMgdG8gYmUgb25lIHBpeGVsIG9mZi1jZW50ZXIsIGl0IHdpbGwKICAgICAvLyBiZSBvbmUg
cGl4ZWwgY2xvc2VyIHRvIHRoZSBib3R0b20gb2YgdGhlIGZpZWxkLiAgVGhpcyB0ZW5kcyB0byBs
b29rIGJldHRlciB3aXRoIHRoZSB0ZXh0LgpAQCAtMzYxLDcgKzM2MSw3IEBAIGJvb2wgUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmMKICAgICBMYXlvdXRSZWN0IGlucHV0Q29udGVu
dEJveCA9IGlucHV0UmVuZGVyQm94LT5jb250ZW50Qm94UmVjdCgpOwogCiAgICAgLy8gTWFrZSBz
dXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiB3aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94Lgot
ICAgIExheW91dFVuaXQgbWFnbmlmaWVySGVpZ2h0ID0gc3RkOjptaW4oaW5wdXRDb250ZW50Qm94
LmhlaWdodCgpLCByLmhlaWdodCgpKTsKKyAgICBMYXlvdXRVbml0IG1hZ25pZmllckhlaWdodCA9
IHN0ZDo6bWluPExheW91dFVuaXQ+KGlucHV0Q29udGVudEJveC5oZWlnaHQoKSwgci5oZWlnaHQo
KSk7CiAgICAgTGF5b3V0VW5pdCBtYWduaWZpZXJXaWR0aCA9IHN0ZDo6bWluPExheW91dFVuaXQ+
KGlucHV0Q29udGVudEJveC53aWR0aCgpLCBtYWduaWZpZXJIZWlnaHQgKiBkZWZhdWx0U2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uV2lkdGggLyBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3Jh
dGlvblNpemUpOwogICAgIExheW91dFJlY3QgbWFnbmlmaWVyUmVjdChtYWduaWZpZXJPYmplY3Qt
Pm9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihpbnB1dFJlbmRlckJveCkud2lkdGgoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb250ZW50Qm94LnkoKSArIChpbnB1dENv
bnRlbnRCb3guaGVpZ2h0KCkgLSBtYWduaWZpZXJIZWlnaHQgKyAxKSAvIDIsCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAx
MTU0ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0aWMgdm9pZCB3cml0ZUxheWVycyhUZXh0
U3RyZWFtJiwgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqLCBjb25z
dCBJbnRSZWN0JiBwYWludERpcnR5UmVjdCwgaW50IGluZGVudCA9IDAsIFJlbmRlckFzVGV4dEJl
aGF2aW9yIGJlaGF2aW9yID0gUmVuZGVyQXNUZXh0QmVoYXZpb3JOb3JtYWwpOworc3RhdGljIHZv
aWQgd3JpdGVMYXllcnMoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIs
IFJlbmRlckxheWVyKiwgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnREaXJ0eVJlY3QsIGludCBpbmRl
bnQgPSAwLCBSZW5kZXJBc1RleHRCZWhhdmlvciA9IFJlbmRlckFzVGV4dEJlaGF2aW9yTm9ybWFs
KTsKIAogc3RhdGljIGlubGluZSBib29sIGhhc0ZyYWN0aW9ucyhkb3VibGUgdmFsKQogewpAQCAt
MTA0LDYgKzEwNCwxMiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
CiAgICAgcmV0dXJuIHRzIDw8ICIoIiA8PCBwLngoKSA8PCAiLCIgPDwgcC55KCkgPDwgIikiOwog
fQogCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQmIHApCit7CisgICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBiZSBwcmlu
dGVkIGFzIGZsb2F0cy4gS2VlcGluZyB0aGVtIGludHMgZm9yIGNvbnNpc3RlbmN5IHdpdGggcGVy
dmlvdXMgdGVzdCBleHBlY3RhdGlvbnMuCisgICAgcmV0dXJuIHRzIDw8ICIoIiA8PCBwLngoKS50
b0ludCgpIDw8ICIsIiA8PCBwLnkoKS50b0ludCgpIDw8ICIpIjsKK30KKwogVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmxvYXRQb2ludCYgcCkKIHsKICAgICB0
cyA8PCAiKCIgPDwgZm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHAueCgpKTsKQEAgLTI0
Miw3ICsyNDgsNyBAQCB2b2lkIFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0CiAg
ICAgUmVuZGVyQmxvY2sqIGNiID0gby5jb250YWluaW5nQmxvY2soKTsKICAgICBib29sIGFkanVz
dEZvclRhYmxlQ2VsbHMgPSBjYiA/IGNiLT5pc1RhYmxlQ2VsbCgpIDogZmFsc2U7CiAKLSAgICBJ
bnRSZWN0IHI7CisgICAgTGF5b3V0UmVjdCByOwogICAgIGlmIChvLmlzVGV4dCgpKSB7CiAgICAg
ICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBiZXR0ZXIgdG8gZHVtcCB0aGUgYm91bmRpbmcgYm94IHgg
YW5kIHkgcmF0aGVyIHRoYW4gdGhlIGZpcnN0IHJ1bidzIHggYW5kIHksIGJ1dCB0aGF0IHdvdWxk
IGludm9sdmUgdXBkYXRpbmcKICAgICAgICAgLy8gbWFueSB0ZXN0IHJlc3VsdHMuCkBAIC0yNjEs
NyArMjY3LDcgQEAgdm9pZCBSZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJlbmRlck9iamVjdAogICAg
ICAgICAvLyB0byBjbGVhbiB1cCB0aGUgcmVzdWx0cyB0byBkdW1wIGJvdGggdGhlIG91dGVyIGJv
eCBhbmQgdGhlIGludHJpbnNpYyBwYWRkaW5nIHNvIHRoYXQgYm90aCBiaXRzIG9mIGluZm9ybWF0
aW9uIGFyZQogICAgICAgICAvLyBjYXB0dXJlZCBieSB0aGUgcmVzdWx0cy4KICAgICAgICAgY29u
c3QgUmVuZGVyVGFibGVDZWxsJiBjZWxsID0gKnRvUmVuZGVyVGFibGVDZWxsKCZvKTsKLSAgICAg
ICAgciA9IEludFJlY3QoY2VsbC54KCksIGNlbGwueSgpICsgY2VsbC5pbnRyaW5zaWNQYWRkaW5n
QmVmb3JlKCksIGNlbGwud2lkdGgoKSwgY2VsbC5oZWlnaHQoKSAtIGNlbGwuaW50cmluc2ljUGFk
ZGluZ0JlZm9yZSgpIC0gY2VsbC5pbnRyaW5zaWNQYWRkaW5nQWZ0ZXIoKSk7CisgICAgICAgIHIg
PSBMYXlvdXRSZWN0KGNlbGwueCgpLCBjZWxsLnkoKSArIGNlbGwuaW50cmluc2ljUGFkZGluZ0Jl
Zm9yZSgpLCBjZWxsLndpZHRoKCksIGNlbGwuaGVpZ2h0KCkgLSBjZWxsLmludHJpbnNpY1BhZGRp
bmdCZWZvcmUoKSAtIGNlbGwuaW50cmluc2ljUGFkZGluZ0FmdGVyKCkpOwogICAgIH0gZWxzZSBp
ZiAoby5pc0JveCgpKQogICAgICAgICByID0gdG9SZW5kZXJCb3goJm8pLT5mcmFtZVJlY3QoKTsK
IApAQCAtMjY5LDYgKzI3NSwxMSBAQCB2b2lkIFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVy
T2JqZWN0CiAgICAgaWYgKGFkanVzdEZvclRhYmxlQ2VsbHMpCiAgICAgICAgIHIubW92ZSgwLCAt
dG9SZW5kZXJUYWJsZUNlbGwoby5jb250YWluaW5nQmxvY2soKSktPmludHJpbnNpY1BhZGRpbmdC
ZWZvcmUoKSk7CiAKKyAgICAvLyBGSVhNRTogQ29udmVydCBsYXlvdXQgdGVzdCByZXN1bHRzIHRv
IHJlcG9ydCBzdWItcGl4ZWwgdmFsdWVzLCBpbiB0aGUgbWVhbnRpbWUgdXNpbmcgZW5jbG9zaW5n
SW50UmVjdAorICAgIC8vIGZvciBjb25zaXN0ZW5jeSB3aXRoIG9sZCByZXN1bHRzLgorICAgIHIg
PSBlbmNsb3NpbmdJbnRSZWN0KHIpOworCisKICAgICB0cyA8PCAiICIgPDwgcjsKIAogICAgIGlm
ICghKG8uaXNUZXh0KCkgJiYgIW8uaXNCUigpKSkgewpAQCAtNTkxLDkgKzYwMiwxNCBAQCBlbnVt
IExheWVyUGFpbnRQaGFzZSB7CiB9OwogCiBzdGF0aWMgdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0
cywgUmVuZGVyTGF5ZXImIGwsCi0gICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBsYXll
ckJvdW5kcywgY29uc3QgSW50UmVjdCYgYmFja2dyb3VuZENsaXBSZWN0LCBjb25zdCBJbnRSZWN0
JiBjbGlwUmVjdCwgY29uc3QgSW50UmVjdCYgb3V0bGluZUNsaXBSZWN0LAorICAgICAgICAgICAg
ICAgICAgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExheW91dFJlY3QmIGJh
Y2tncm91bmRDbGlwUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgY2xpcFJlY3QsIGNvbnN0IExheW91
dFJlY3QmIG91dGxpbmVDbGlwUmVjdCwKICAgICAgICAgICAgICAgICAgIExheWVyUGFpbnRQaGFz
ZSBwYWludFBoYXNlID0gTGF5ZXJQYWludFBoYXNlQWxsLCBpbnQgaW5kZW50ID0gMCwgUmVuZGVy
QXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IgPSBSZW5kZXJBc1RleHRCZWhhdmlvck5vcm1hbCkKIHsK
KyAgICBJbnRSZWN0IGFkanVzdGVkTGF5b3V0Qm91bmRzID0gcGl4ZWxTbmFwcGVkSW50UmVjdChs
YXllckJvdW5kcyk7CisgICAgSW50UmVjdCBhZGp1c3RlZEJhY2tncm91bmRDbGlwUmVjdCA9IHBp
eGVsU25hcHBlZEludFJlY3QoYmFja2dyb3VuZENsaXBSZWN0KTsKKyAgICBJbnRSZWN0IGFkanVz
dGVkQ2xpcFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGNsaXBSZWN0KTsKKyAgICBJbnRSZWN0
IGFkanVzdGVkT3V0bGluZUNsaXBSZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChvdXRsaW5lQ2xp
cFJlY3QpOworCiAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CiAKICAgICB0cyA8PCAibGF5
ZXIgIjsKQEAgLTYwMSwxNSArNjE3LDE1IEBAIHN0YXRpYyB2b2lkIHdyaXRlKFRleHRTdHJlYW0m
IHRzLCBSZW5kZXIKICAgICBpZiAoYmVoYXZpb3IgJiBSZW5kZXJBc1RleHRTaG93QWRkcmVzc2Vz
KQogICAgICAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oJmwpIDw8ICIgIjsKICAg
ICAgIAotICAgIHRzIDw8IGxheWVyQm91bmRzOworICAgIHRzIDw8IGFkanVzdGVkTGF5b3V0Qm91
bmRzOwogCi0gICAgaWYgKCFsYXllckJvdW5kcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKCFi
YWNrZ3JvdW5kQ2xpcFJlY3QuY29udGFpbnMobGF5ZXJCb3VuZHMpKQotICAgICAgICAgICAgdHMg
PDwgIiBiYWNrZ3JvdW5kQ2xpcCAiIDw8IGJhY2tncm91bmRDbGlwUmVjdDsKLSAgICAgICAgaWYg
KCFjbGlwUmVjdC5jb250YWlucyhsYXllckJvdW5kcykpCi0gICAgICAgICAgICB0cyA8PCAiIGNs
aXAgIiA8PCBjbGlwUmVjdDsKLSAgICAgICAgaWYgKCFvdXRsaW5lQ2xpcFJlY3QuY29udGFpbnMo
bGF5ZXJCb3VuZHMpKQotICAgICAgICAgICAgdHMgPDwgIiBvdXRsaW5lQ2xpcCAiIDw8IG91dGxp
bmVDbGlwUmVjdDsKKyAgICBpZiAoIWFkanVzdGVkTGF5b3V0Qm91bmRzLmlzRW1wdHkoKSkgewor
ICAgICAgICBpZiAoIWFkanVzdGVkQmFja2dyb3VuZENsaXBSZWN0LmNvbnRhaW5zKGFkanVzdGVk
TGF5b3V0Qm91bmRzKSkKKyAgICAgICAgICAgIHRzIDw8ICIgYmFja2dyb3VuZENsaXAgIiA8PCBh
ZGp1c3RlZEJhY2tncm91bmRDbGlwUmVjdDsKKyAgICAgICAgaWYgKCFhZGp1c3RlZENsaXBSZWN0
LmNvbnRhaW5zKGFkanVzdGVkTGF5b3V0Qm91bmRzKSkKKyAgICAgICAgICAgIHRzIDw8ICIgY2xp
cCAiIDw8IGFkanVzdGVkQ2xpcFJlY3Q7CisgICAgICAgIGlmICghYWRqdXN0ZWRPdXRsaW5lQ2xp
cFJlY3QuY29udGFpbnMoYWRqdXN0ZWRMYXlvdXRCb3VuZHMpKQorICAgICAgICAgICAgdHMgPDwg
IiBvdXRsaW5lQ2xpcCAiIDw8IGFkanVzdGVkT3V0bGluZUNsaXBSZWN0OwogICAgIH0KIAogICAg
IGlmIChsLnJlbmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgpKSB7CkBAIC02NDQsNyArNjYwLDcg
QEAgc3RhdGljIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIFJlbmRlcgogfQogCiBzdGF0aWMg
dm9pZCB3cml0ZVJlbmRlck5hbWVkRmxvd1RocmVhZHMoVGV4dFN0cmVhbSYgdHMsIFJlbmRlclZp
ZXcqIHJlbmRlclZpZXcsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBwYWludFJlY3QsIGludCBpbmRlbnQsIFJlbmRl
ckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yKQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
TGF5b3V0UmVjdCYgcGFpbnRSZWN0LCBpbnQgaW5kZW50LCBSZW5kZXJBc1RleHRCZWhhdmlvciBi
ZWhhdmlvcikKIHsKICAgICBpZiAoIXJlbmRlclZpZXctPmhhc1JlbmRlck5hbWVkRmxvd1RocmVh
ZHMoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjkyLDE4ICs3MDgsMTggQEAgc3RhdGljIHZvaWQg
d3JpdGVSZW5kZXJOYW1lZEZsb3dUaHJlYWRzKAogfQogCiBzdGF0aWMgdm9pZCB3cml0ZUxheWVy
cyhUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5
ZXIqIGwsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBwYWludFJlY3Qs
IGludCBpbmRlbnQsIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yKQorICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnRSZWN0LCBpbnQgaW5kZW50LCBSZW5k
ZXJBc1RleHRCZWhhdmlvciBiZWhhdmlvcikKIHsKICAgICAvLyBGSVhNRTogQXBwbHkgb3ZlcmZs
b3cgdG8gdGhlIHJvb3QgbGF5ZXIgdG8gbm90IGJyZWFrIGV2ZXJ5IHRlc3QuICBDb21wbGV0ZSBo
YWNrLiAgU2lnaC4KLSAgICBJbnRSZWN0IHBhaW50RGlydHlSZWN0KHBhaW50UmVjdCk7CisgICAg
TGF5b3V0UmVjdCBwYWludERpcnR5UmVjdChwYWludFJlY3QpOwogICAgIGlmIChyb290TGF5ZXIg
PT0gbCkgewotICAgICAgICBwYWludERpcnR5UmVjdC5zZXRXaWR0aChtYXgocGFpbnREaXJ0eVJl
Y3Qud2lkdGgoKSwgcm9vdExheWVyLT5yZW5kZXJCb3goKS0+bWF4WExheW91dE92ZXJmbG93KCkp
KTsKLSAgICAgICAgcGFpbnREaXJ0eVJlY3Quc2V0SGVpZ2h0KG1heChwYWludERpcnR5UmVjdC5o
ZWlnaHQoKSwgcm9vdExheWVyLT5yZW5kZXJCb3goKS0+bWF4WUxheW91dE92ZXJmbG93KCkpKTsK
LSAgICAgICAgbC0+c2V0U2l6ZShsLT5zaXplKCkuZXhwYW5kZWRUbyhsLT5yZW5kZXJCb3goKS0+
bWF4TGF5b3V0T3ZlcmZsb3coKSkpOworICAgICAgICBwYWludERpcnR5UmVjdC5zZXRXaWR0aCht
YXg8TGF5b3V0VW5pdD4ocGFpbnREaXJ0eVJlY3Qud2lkdGgoKSwgcm9vdExheWVyLT5yZW5kZXJC
b3goKS0+bWF4WExheW91dE92ZXJmbG93KCkpKTsKKyAgICAgICAgcGFpbnREaXJ0eVJlY3Quc2V0
SGVpZ2h0KG1heDxMYXlvdXRVbml0PihwYWludERpcnR5UmVjdC5oZWlnaHQoKSwgcm9vdExheWVy
LT5yZW5kZXJCb3goKS0+bWF4WUxheW91dE92ZXJmbG93KCkpKTsKKyAgICAgICAgbC0+c2V0U2l6
ZShsLT5zaXplKCkuZXhwYW5kZWRUbyhwaXhlbFNuYXBwZWRJbnRTaXplKGwtPnJlbmRlckJveCgp
LT5tYXhMYXlvdXRPdmVyZmxvdygpLCBMYXlvdXRQb2ludCgwLCAwKSkpKTsKICAgICB9CiAgICAg
CiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjbGlwIHJlY3RzIHdlIHNob3VsZCB1c2UuCi0gICAgSW50
UmVjdCBsYXllckJvdW5kczsKKyAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzOwogICAgIENsaXBS
ZWN0IGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3Q7CiAgICAgbC0+Y2Fs
Y3VsYXRlUmVjdHMocm9vdExheWVyLCAwLCBwYWludERpcnR5UmVjdCwgbGF5ZXJCb3VuZHMsIGRh
bWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3QsIHRydWUpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmgJKHJldmlzaW9uIDEx
NTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRWxlbWVudDsKK2NsYXNzIEZyYWN0aW9uYWxMYXlvdXRQb2ludDsKIGNsYXNzIEZsb2F0UG9p
bnQ7CiBjbGFzcyBGbG9hdFNpemU7CiBjbGFzcyBGcmFtZTsKQEAgLTcwLDYgKzcxLDcgQEAgc3Rh
dGljIHZvaWQgd3JpdGVSZW5kZXJPYmplY3QoVGV4dFN0cmVhbQogCiBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBJbnRQb2ludCYpOwogVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgSW50UmVjdCYpOworVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50Jik7CiBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBGbG9hdFBvaW50Jik7CiBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBGbG9hdFNpemUmKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHJldmlzaW9uIDExNTQ4OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzYsMTEgKzE3NiwxMSBAQCBib29sIFJlbmRlcldpZGdldDo6c2V0V2lkZ2V0R2Vv
bWV0cnkoY29uCiAKIGJvb2wgUmVuZGVyV2lkZ2V0Ojp1cGRhdGVXaWRnZXRHZW9tZXRyeSgpCiB7
Ci0gICAgTGF5b3V0UmVjdCBjb250ZW50Qm94ID0gY29udGVudEJveFJlY3QoKTsKKyAgICBJbnRS
ZWN0IGNvbnRlbnRCb3ggPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnRlbnRCb3hSZWN0KCkpOwog
ICAgIGlmICghbV93aWRnZXQtPnRyYW5zZm9ybXNBZmZlY3RGcmFtZVJlY3QoKSkKICAgICAgICAg
cmV0dXJuIHNldFdpZGdldEdlb21ldHJ5KGFic29sdXRlQ29udGVudEJveCgpKTsKIAotICAgIExh
eW91dFJlY3QgYWJzb2x1dGVDb250ZW50Qm94KGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFk
KGNvbnRlbnRCb3gpKS5ib3VuZGluZ0JveCgpKTsKKyAgICBJbnRSZWN0IGFic29sdXRlQ29udGVu
dEJveChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChjb250ZW50Qm94KSkuYm91bmRpbmdC
b3goKSk7CiAgICAgaWYgKG1fd2lkZ2V0LT5pc0ZyYW1lVmlldygpKSB7CiAgICAgICAgIGNvbnRl
bnRCb3guc2V0TG9jYXRpb24oYWJzb2x1dGVDb250ZW50Qm94LmxvY2F0aW9uKCkpOwogICAgICAg
ICByZXR1cm4gc2V0V2lkZ2V0R2VvbWV0cnkoY29udGVudEJveCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJl
dmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
VHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNiw3ICszMjYsNyBAQCBzdGF0aWMg
dm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjCiAKIHN0YXRpYyBUZXh0U3RyZWFtJiB3
cml0ZVBvc2l0aW9uQW5kU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYg
b2JqZWN0KQogewotICAgIHRzIDw8ICIgIiA8PCBjb25zdF9jYXN0PFJlbmRlck9iamVjdCY+KG9i
amVjdCkuYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7CisgICAgdHMgPDwgIiAiIDw8IGVu
Y2xvc2luZ0ludFJlY3QoY29uc3RfY2FzdDxSZW5kZXJPYmplY3QmPihvYmplY3QpLmFic29sdXRl
Q2xpcHBlZE92ZXJmbG93UmVjdCgpKTsKICAgICB3cml0ZVN0eWxlKHRzLCBvYmplY3QpOwogICAg
IHJldHVybiB0czsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvd2luL1dlYlBvcHVwTWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC93aW4vV2ViUG9wdXBNZW51V2luLmNwcAkocmV2
aXNpb24gMTE1NDg4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC93aW4vV2ViUG9wdXBNZW51V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3
IEBAIHZvaWQgV2ViUG9wdXBNZW51OjpzZXRVcFBsYXRmb3JtRGF0YShjb24KICAgICAgICAgaWYg
KGl0ZW1TdHlsZS5pc1Zpc2libGUoKSkgewogICAgICAgICAgICAgaW50IHRleHRYID0gc3RkOjpt
YXgoMCwgZGF0YS5tX2NsaWVudFBhZGRpbmdMZWZ0IC0gZGF0YS5tX2NsaWVudEluc2V0TGVmdCk7
CiAgICAgICAgICAgICBpZiAoUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5wb3B1cE9wdGlv
blN1cHBvcnRzVGV4dEluZGVudCgpICYmIGl0ZW1TdHlsZS50ZXh0RGlyZWN0aW9uKCkgPT0gTFRS
KQotICAgICAgICAgICAgICAgIHRleHRYICs9IG1pbmltdW1WYWx1ZUZvckxlbmd0aChpdGVtU3R5
bGUudGV4dEluZGVudCgpLCBpdGVtUmVjdC53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICB0ZXh0
WCArPSBtaW5pbXVtSW50VmFsdWVGb3JMZW5ndGgoaXRlbVN0eWxlLnRleHRJbmRlbnQoKSwgaXRl
bVJlY3Qud2lkdGgoKSk7CiAgICAgICAgICAgICBpbnQgdGV4dFkgPSBpdGVtUmVjdC55KCkgKyBp
dGVtRm9udC5mb250TWV0cmljcygpLmFzY2VudCgpICsgKGl0ZW1SZWN0LmhlaWdodCgpIC0gaXRl
bUZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSkgLyAyOwogCiAgICAgICAgICAgICBub3RTZWxl
Y3RlZEJhY2tpbmdTdG9yZUNvbnRleHQtPmRyYXdCaWRpVGV4dChpdGVtRm9udCwgdGV4dFJ1biwg
SW50UG9pbnQodGV4dFgsIHRleHRZKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDExNTQ4OCkK
KysrIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc1MCw3ICs3NTAsNyBAQCB2b2lkIENocm9tZUNsaWVudDo6bW91
c2VEaWRNb3ZlT3ZlckVsZW1lCiAgICAgaWYgKE5vZGUqIG5vZGUgPSBoaXQuaW5uZXJOb25TaGFy
ZWROb2RlKCkpIHsKICAgICAgICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJh
bWUoKTsKICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUgPyBmcmFtZS0+dmlldygpIDog
MDsKLSAgICAgICAgbV93ZWJWaWV3LT5wcml2LT50b29sdGlwQXJlYSA9IHZpZXcgPyB2aWV3LT5j
b250ZW50c1RvV2luZG93KG5vZGUtPmdldFJlY3QoKSkgOiBJbnRSZWN0KCk7CisgICAgICAgIG1f
d2ViVmlldy0+cHJpdi0+dG9vbHRpcEFyZWEgPSB2aWV3ID8gdmlldy0+Y29udGVudHNUb1dpbmRv
dyhub2RlLT5nZXRQaXhlbFNuYXBwZWRSZWN0KCkpIDogSW50UmVjdCgpOwogICAgIH0gZWxzZQog
ICAgICAgICBtX3dlYlZpZXctPnByaXYtPnRvb2x0aXBBcmVhID0gSW50UmVjdCgpOwogfQpJbmRl
eDogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0LmNw
cAkocmV2aXNpb24gMTE1NDg4KQorKysgU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGhp
dHRlc3RyZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTgsOSArMzE4LDkgQEAgV2ViS2l0
SGl0VGVzdFJlc3VsdCoga2l0KGNvbnN0IFdlYkNvcmU6OgogICAgIHRhcmdldEZyYW1lID0gcmVz
dWx0LnRhcmdldEZyYW1lKCk7CiAgICAgaWYgKHRhcmdldEZyYW1lICYmIHRhcmdldEZyYW1lLT52
aWV3KCkpIHsKICAgICAgICAgLy8gQ29udmVydCBkb2N1bWVudCBjb29yZHMgdG8gd2lkZ2V0IGNv
b3Jkcy4KLSAgICAgICAgcG9pbnQgPSB0YXJnZXRGcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2lu
ZG93KHJlc3VsdC5wb2ludCgpKTsKKyAgICAgICAgcG9pbnQgPSB0YXJnZXRGcmFtZS0+dmlldygp
LT5jb250ZW50c1RvV2luZG93KHJlc3VsdC5yb3VuZGVkUG9pbnQoKSk7CiAgICAgfSBlbHNlCi0g
ICAgICAgIHBvaW50ID0gcmVzdWx0LnBvaW50KCk7CisgICAgICAgIHBvaW50ID0gcmVzdWx0LnJv
dW5kZWRQb2ludCgpOwogCiAgICAgcmV0dXJuIFdFQktJVF9ISVRfVEVTVF9SRVNVTFQoZ19vYmpl
Y3RfbmV3KFdFQktJVF9UWVBFX0hJVF9URVNUX1JFU1VMVCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmstdXJpIiwgbGlua1VSSS5nZXQoKSwKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHJldmlzaW9u
IDExNTQ4OCkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDMzLDcgKzQzMyw3IEBAIHN0YXRpYyBJbnRQb2ludCBnZXRMb2Nh
dGlvbkZvcktleWJvYXJkR2UKICAgICBpZiAoIXNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuaXNOb25P
cnBoYW5lZENhcmV0T3JSYW5nZSgpCiAgICAgICAgICB8fCAoc2VsZWN0aW9uLT5zZWxlY3Rpb24o
KS5pc0NhcmV0KCkgJiYgIXNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUo
KSkpIHsKICAgICAgICAgaWYgKE5vZGUqIGZvY3VzZWROb2RlID0gZ2V0Rm9jdXNlZE5vZGUoZnJh
bWUpKQotICAgICAgICAgICAgcmV0dXJuIGZvY3VzZWROb2RlLT5nZXRSZWN0KCkubG9jYXRpb24o
KTsKKyAgICAgICAgICAgIHJldHVybiBmb2N1c2VkTm9kZS0+Z2V0UGl4ZWxTbmFwcGVkUmVjdCgp
LmxvY2F0aW9uKCk7CiAKICAgICAgICAgLy8gVGhlcmUgd2FzIG5vIHNlbGVjdGlvbiBhbmQgbm8g
Zm9jdXNlZCBub2RlLCBzbyBqdXN0IHB1dCB0aGUgY29udGV4dAogICAgICAgICAvLyBtZW51IGlu
dG8gdGhlIGNvcm5lciBvZiB0aGUgdmlldywgb2Zmc2V0IHNsaWdodGx5LgpAQCAtMTYwNCw3ICsx
NjA0LDcgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19xdWVyeV90bwogICAgICAg
ICAgICAgICAgIFN0cmluZyB0aXRsZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPih0aXRsZU5vZGUp
LT50aXRsZSgpOwogICAgICAgICAgICAgICAgIGlmICghdGl0bGUuaXNFbXB0eSgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBjb3JlRnJhbWUtPnZpZXcoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgR2RrUmVjdGFuZ2xlIGFyZWEgPSB2aWV3LT5jb250
ZW50c1RvV2luZG93KG5vZGUtPmdldFJlY3QoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBH
ZGtSZWN0YW5nbGUgYXJlYSA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3cobm9kZS0+Z2V0UGl4ZWxT
bmFwcGVkUmVjdCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGd0a190b29sdGlwX3NldF90
aXBfYXJlYSh0b29sdGlwLCAmYXJlYSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgZ3RrX3Rvb2x0aXBfc2V0X3RleHQodG9vbHRpcCwgdGl0bGUudXRmOCgpLmRh
dGEoKSk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTU0ODgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wNC0yMyAgTGV2aSBXZWlu
dHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW21ldGFdIFN3aXRjaCBhd2F5
IGZyb20gaW50ZWdlcnMgcmVwcmVzZW50aW5nIHBpeGVscyBmb3IgbGF5b3V0L2V2ZW50IGhhbmRs
aW5nL3JlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjAzMTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIGZhc3Qvc3ViLXBpeGVsOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3N1Yi1waXhlbC9j
bGllbnQtd2lkdGgtaGVpZ2h0LXNuYXBwaW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9zdWItcGl4ZWwvY2xpZW50LXdpZHRoLWhlaWdodC1zbmFwcGluZy5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L3N1Yi1waXhlbC9zaXplLW9mLWJveC13aXRoLXpvb20tZXhwZWN0
ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9zdWItcGl4ZWwvc2l6ZS1vZi1ib3gtd2l0
aC16b29tLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvc3ViLXBpeGVsL2xheW91dC1ib3hl
cy13aXRoLXpvb20tZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9zdWItcGl4
ZWwvbGF5b3V0LWJveGVzLXdpdGgtem9vbS5odG1sOiBBZGRlZC4KKwogMjAxMi0wNC0yNyAgRXJp
YyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUwMzgKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3Qvc3ViLXBpeGVsL2NsaWVudC13aWR0aC1oZWlnaHQtc25hcHBpbmctZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVsL2NsaWVudC13aWR0aC1oZWln
aHQtc25hcHBpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9zdWItcGl4ZWwvY2xpZW50LXdpZHRoLWhlaWdodC1zbmFwcGluZy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNiBAQAorUEFTUyBkaXYuY2xpZW50V2lkdGggaXMgMTEKK1BB
U1MgZGl2LmNsaWVudEhlaWdodCBpcyAxMQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVsL2Ns
aWVudC13aWR0aC1oZWlnaHQtc25hcHBpbmcuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3N1Yi1waXhlbC9jbGllbnQtd2lkdGgtaGVpZ2h0LXNuYXBwaW5nLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9jbGllbnQtd2lkdGgtaGVpZ2h0
LXNuYXBwaW5nLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjIgQEAKKzwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPGRpdiBpZD0iVGVzdERpdiIgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsg
bGVmdDogMTAuNHB4OyB0b3A6IDEwLjRweDsgd2lkdGg6IDEwLjRweDsgaGVpZ2h0OiAxMC40cHg7
Ij48L2Rpdj4KKzxzY3JpcHQ+CisKK3ZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
VGVzdERpdiIpOworCitzaG91bGRCZSgnZGl2LmNsaWVudFdpZHRoJywgJzExJyk7CitzaG91bGRC
ZSgnZGl2LmNsaWVudEhlaWdodCcsICcxMScpOworCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5v
dGlmeURvbmUoKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9zdWItcGl4ZWwvbGF5b3V0LWJveGVzLXdpdGgtem9vbS1leHBlY3RlZC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVsL2xheW91dC1ib3hlcy13aXRo
LXpvb20tZXhwZWN0ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvc3Vi
LXBpeGVsL2xheW91dC1ib3hlcy13aXRoLXpvb20tZXhwZWN0ZWQuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0
aXRsZT5sYXlvdXQgem9vbSB0ZXN0PC90aXRsZT4KKyAgICA8c3R5bGU+IAorICAgICAgICAjdGVz
dCB7CisgICAgICAgICAgICB3aWR0aDogNTAwcHg7CisgICAgICAgICAgICBoZWlnaHQ6IDE1MDBw
eDsKKyAgICAgICAgICAgIGJhY2tncm91bmQ6IG5hdnk7CisgICAgICAgICAgICB6b29tOiAwLjI1
OworICAgICAgICB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxkaXYgaWQ9
InRlc3QiPjwvZGl2PgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPgorICAgICAgICBUaGUgYm94IGFi
b3ZlIHNob3VsZCBiZSBuYXZ5IGJsdWUgd2l0aCBubyBiYW5kaW5nIGVmZmVjdHMuPGJyPgorICAg
ICAgICBQQVNTOiBXaXRoIHpvb20gb2YgMTAwJSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxp
bmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzog
V2l0aCB6b29tIG9mIDExMCUgYm90dG9tIGVkZ2Ugb2YgbGFzdCBjaGlsZCBsaW5lcyB1cCB3aXRo
IGJvdHRvbSBlZGdlIG9mIGNvbnRhaW5lci48YnI+CisgICAgICAgIFBBU1M6IFdpdGggem9vbSBv
ZiAxMjUlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0b20gZWRn
ZSBvZiBjb250YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpvb20gb2YgMTMzJSBib3R0
b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFp
bmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDE1MCUgYm90dG9tIGVkZ2Ugb2Yg
bGFzdCBjaGlsZCBsaW5lcyB1cCB3aXRoIGJvdHRvbSBlZGdlIG9mIGNvbnRhaW5lci48YnI+Cisg
ICAgICAgIFBBU1M6IFdpdGggem9vbSBvZiAxNjYlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQg
bGluZXMgdXAgd2l0aCBib3R0b20gZWRnZSBvZiBjb250YWluZXIuPGJyPgorICAgICAgICBQQVNT
OiBXaXRoIHpvb20gb2YgMTc1JSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdp
dGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29t
IG9mIDIwMCUgYm90dG9tIGVkZ2Ugb2YgbGFzdCBjaGlsZCBsaW5lcyB1cCB3aXRoIGJvdHRvbSBl
ZGdlIG9mIGNvbnRhaW5lci48YnI+CisgICAgICAgIFBBU1M6IFdpdGggem9vbSBvZiAyNTAlIGJv
dHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0b20gZWRnZSBvZiBjb250
YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpvb20gb2YgMzAwJSBib3R0b20gZWRnZSBv
ZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4K
KyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDQwMCUgYm90dG9tIGVkZ2Ugb2YgbGFzdCBjaGls
ZCBsaW5lcyB1cCB3aXRoIGJvdHRvbSBlZGdlIG9mIGNvbnRhaW5lci48YnI+CisgICAgICAgIFBB
U1M6IFdpdGggem9vbSBvZiA1MDAlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAg
d2l0aCBib3R0b20gZWRnZSBvZiBjb250YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpv
b20gb2YgOTAlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0b20g
ZWRnZSBvZiBjb250YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpvb20gb2YgODAlIGJv
dHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0b20gZWRnZSBvZiBjb250
YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpvb20gb2YgNzUlIGJvdHRvbSBlZGdlIG9m
IGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0b20gZWRnZSBvZiBjb250YWluZXIuPGJyPgor
ICAgICAgICBQQVNTOiBXaXRoIHpvb20gb2YgNjYlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQg
bGluZXMgdXAgd2l0aCBib3R0b20gZWRnZSBvZiBjb250YWluZXIuPGJyPgorICAgICAgICBQQVNT
OiBXaXRoIHpvb20gb2YgNTAlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0
aCBib3R0b20gZWRnZSBvZiBjb250YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpvb20g
b2YgMzMlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0b20gZWRn
ZSBvZiBjb250YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpvb20gb2YgMjUlIGJvdHRv
bSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0b20gZWRnZSBvZiBjb250YWlu
ZXIuPGJyPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3N1Yi1waXhlbC9sYXlvdXQtYm94ZXMtd2l0aC16b29tLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwvbGF5b3V0LWJveGVzLXdpdGgtem9vbS5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwvbGF5b3V0LWJveGVzLXdpdGgt
em9vbS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPmxheW91dCB6b29tIHRlc3Q8L3RpdGxlPgorICAg
IDxzdHlsZT4gCisgICAgICAgICN0ZXN0IHsKKyAgICAgICAgICAgIHdpZHRoOiA1MDBweDsKKyAg
ICAgICAgICAgIGhlaWdodDogMTUwMHB4OworICAgICAgICAgICAgYmFja2dyb3VuZDogc2t5Ymx1
ZTsKKyAgICAgICAgfQorICAgICAgICAjdGVzdCA+IGRpdiB7CisgICAgICAgICAgICBiYWNrZ3Jv
dW5kOiBuYXZ5OworICAgICAgICAgICAgaGVpZ2h0OiAxNXB4OworICAgICAgICB9CisgICAgPC9z
dHlsZT4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxkaXYgaWQ9InRlc3QiPjwvZGl2PgorICAgIDxk
aXYgaWQ9ImNvbnNvbGUiPgorICAgICAgICBUaGUgYm94IGFib3ZlIHNob3VsZCBiZSBuYXZ5IGJs
dWUgd2l0aCBubyBiYW5kaW5nIGVmZmVjdHMuPGJyPgorICAgIDwvZGl2PgorPC9ib2R5PgorPHNj
cmlwdD4KKyAgICB2YXIgdGVzdEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVz
dCcpOworICAgIHZhciBjb25zb2xlRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdj
b25zb2xlJyk7CisKKyAgICBmdW5jdGlvbiBpbml0KCkKKyAgICB7CisgICAgICAgIHRlc3RFbGVt
ZW50LmlubmVySFRNTCA9ICcnOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgaSsr
KQorICAgICAgICAgICAgdGVzdEVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnZGl2JykpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3Qoem9vbSkKKyAgICB7Cisg
ICAgICAgIHRlc3RFbGVtZW50LnN0eWxlLnpvb20gPSB6b29tICsgJyUnOworICAgICAgICAKKyAg
ICAgICAgdmFyIGxhc3RFbGVtZW50Qm90dG9tID0gdGVzdEVsZW1lbnQubGFzdENoaWxkLmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbTsKKyAgICAgICAgdmFyIGNvbnRhaW5lckJvdHRvbSA9
IHRlc3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbTsKKyAgICAgICAgaWYg
KE1hdGguYWJzKGxhc3RFbGVtZW50Qm90dG9tIC0gY29udGFpbmVyQm90dG9tKSA8IDAuMDEpCisg
ICAgICAgICAgICBsb2coJ1BBU1M6IFdpdGggem9vbSBvZiAnICsgem9vbSArICclIGJvdHRvbSBl
ZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0b20gZWRnZSBvZiBjb250YWluZXIu
Jyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvZygnRkFJTDogV2l0aCB6b29tIG9mICcg
KyB6b29tICsgJyUgYm90dG9tIGVkZ2Ugb2YgbGFzdCBjaGlsZCBhdCAnICsgbGFzdEVsZW1lbnRC
b3R0b20gKyAnLCBjb250YWluZXIgYXQgJyArIGNvbnRhaW5lckJvdHRvbSArICcuJyk7CisgICAg
fQorCisgICAgZnVuY3Rpb24gbG9nKHN0cikKKyAgICB7CisgICAgICAgIGNvbnNvbGVFbGVtZW50
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN0cikpOworICAgICAgICBjb25z
b2xlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKKyAg
ICB9CisKKyAgICBpbml0KCk7CisgICAgdGVzdCgxMDApOworICAgIHRlc3QoMTEwKTsKKyAgICB0
ZXN0KDEyNSk7CisgICAgdGVzdCgxMzMpOworICAgIHRlc3QoMTUwKTsKKyAgICB0ZXN0KDE2Nik7
CisgICAgdGVzdCgxNzUpOworICAgIHRlc3QoMjAwKTsKKyAgICB0ZXN0KDI1MCk7CisgICAgdGVz
dCgzMDApOworICAgIHRlc3QoNDAwKTsKKyAgICB0ZXN0KDUwMCk7CisgICAgdGVzdCg5MCk7Cisg
ICAgdGVzdCg4MCk7CisgICAgdGVzdCg3NSk7CisgICAgdGVzdCg2Nik7CisgICAgdGVzdCg1MCk7
CisgICAgdGVzdCgzMyk7CisgICAgdGVzdCgyNSk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVsL3NpemUtb2YtYm94LXdpdGgtem9vbS1leHBlY3Rl
ZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVsL3NpemUtb2Yt
Ym94LXdpdGgtem9vbS1leHBlY3RlZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9zdWItcGl4ZWwvc2l6ZS1vZi1ib3gtd2l0aC16b29tLWV4cGVjdGVkLmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KyAgICA8dGl0bGU+c2l6ZSBvZiBib3ggem9vbSB0ZXN0PC90aXRsZT4KKyAgICA8c3R5bGU+Cisg
ICAgICAgIGJvZHkgeworICAgICAgICAgICAgYmFja2dyb3VuZDogc2lsdmVyOworICAgICAgICB9
CisgICAgICAgICNjb250YWluZXIgeworICAgICAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7Cisg
ICAgICAgICAgICB3aWR0aDogNTAwcHg7CisgICAgICAgICAgICBoZWlnaHQ6IDUwcHg7CisgICAg
ICAgIH0KKyAgICAgICAgI3J1bGVyID4gZGl2IHsKKyAgICAgICAgICAgIGZsb2F0OiBsZWZ0Owor
ICAgICAgICAgICAgd2lkdGg6IDQ5cHg7CisgICAgICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBz
b2xpZCBibGFjazsKKyAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgICAgICAgICAg
aGVpZ2h0OiA1MHB4OworICAgICAgICB9CisgICAgICAgICN0ZXN0IHsKKyAgICAgICAgICAgIGNs
ZWFyOiBsZWZ0OworICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgICAgICAg
dG9wOiAzMHB4OworICAgICAgICB9CisgICAgICAgICN0ZXN0ID4gZGl2IHsKKyAgICAgICAgICAg
IGNsZWFyOiBsZWZ0OworICAgICAgICB9CisgICAgICAgICN0ZXN0ID4gZGl2ID4gZGl2IHsKKyAg
ICAgICAgICAgIGZsb2F0OiBsZWZ0OworICAgICAgICAgICAgd2lkdGg6IDUwMHB4OworICAgICAg
ICAgICAgaGVpZ2h0OiAxMHB4OworICAgICAgICAgICAgYmFja2dyb3VuZDogbmF2eTsKKyAgICAg
ICAgfQorICAgICAgICAjY29uc29sZSB7CisgICAgICAgICAgICBjbGVhcjogbGVmdDsKKyAgICAg
ICAgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8ZGl2IGlkPSJjb250YWlu
ZXIiPgorICAgICAgICA8ZGl2IGlkPSJydWxlciI+PC9kaXY+CisgICAgICAgIDxkaXYgaWQ9InRl
c3QiPjxkaXY+PC9kaXY+PC9kaXY+CisgICAgPC9kaXY+Cis8L2JvZHk+Cis8c2NyaXB0PgorICAg
IHZhciB0ZXN0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QnKTsKKyAg
ICB2YXIgcnVsZXJFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3J1bGVyJyk7CisK
KyAgICBmdW5jdGlvbiBpbml0KCkKKyAgICB7CisgICAgICAgIHJ1bGVyRWxlbWVudC5pbm5lckhU
TUwgPSAnJzsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisgICAgICAg
ICAgICBydWxlckVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2
JykpOworICAgICAgICAgICAgcnVsZXJFbGVtZW50Lmxhc3RDaGlsZC5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZSg1MCArIGkgKiA1MCkpOworICAgICAgICB9CisgICAgfQorCisK
KyAgICBmdW5jdGlvbiB0ZXN0KHpvb20pCisgICAgeworICAgICAgICB2YXIgdGVzdEVsZW1lbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgdGVzdEVsZW1lbnQuc3R5
bGUuem9vbSA9IHpvb20gKyAnJSc7CisgICAgICAgIHRlc3RFbGVtZW50LmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgdGVzdENvbnRhaW5lci5hcHBl
bmRDaGlsZCh0ZXN0RWxlbWVudCk7CisgICAgfQorCisgICAgaW5pdCgpOworICAgIHRlc3QoMTAw
KTsKKyAgICB0ZXN0KDY2KTsKKyAgICB0ZXN0KDMzKTsKKworPC9zY3JpcHQ+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9zaXplLW9mLWJveC13aXRoLXpvb20uaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9zaXplLW9mLWJveC13
aXRoLXpvb20uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVs
L3NpemUtb2YtYm94LXdpdGgtem9vbS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPnNpemUgb2YgYm94
IHpvb20gdGVzdDwvdGl0bGU+CisgICAgPHN0eWxlPgorICAgICAgICBib2R5IHsKKyAgICAgICAg
ICAgIGJhY2tncm91bmQ6IHNpbHZlcjsKKyAgICAgICAgfQorICAgICAgICAjY29udGFpbmVyIHsK
KyAgICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOworICAgICAgICAgICAgd2lkdGg6IDUwMHB4
OworICAgICAgICAgICAgaGVpZ2h0OiA1MHB4OworICAgICAgICB9CisgICAgICAgICNydWxlciA+
IGRpdiB7CisgICAgICAgICAgICBmbG9hdDogbGVmdDsKKyAgICAgICAgICAgIHdpZHRoOiA0OXB4
OworICAgICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgYmxhY2s7CisgICAgICAgICAg
ICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgIGhlaWdodDogNTBweDsKKyAgICAgICAg
fQorICAgICAgICAjdGVzdCB7CisgICAgICAgICAgICBjbGVhcjogbGVmdDsKKyAgICAgICAgICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgICAgIHRvcDogMzBweDsKKyAgICAgICAgfQor
ICAgICAgICAjdGVzdCA+IGRpdiB7CisgICAgICAgICAgICBjbGVhcjogbGVmdDsKKyAgICAgICAg
fQorICAgICAgICAjdGVzdCA+IGRpdiA+IGRpdiB7CisgICAgICAgICAgICBmbG9hdDogbGVmdDsK
KyAgICAgICAgICAgIHdpZHRoOiA1cHg7CisgICAgICAgICAgICBoZWlnaHQ6IDEwcHg7CisgICAg
ICAgICAgICBiYWNrZ3JvdW5kOiBuYXZ5OworICAgICAgICB9CisgICAgICAgICNjb25zb2xlIHsK
KyAgICAgICAgICAgIGNsZWFyOiBsZWZ0OworICAgICAgICB9CisgICAgPC9zdHlsZT4KKzwvaGVh
ZD4KKzxib2R5PgorICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+CisgICAgICAgIDxkaXYgaWQ9InJ1
bGVyIj48L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0idGVzdCI+PGRpdj48L2Rpdj48L2Rpdj4KKyAg
ICA8L2Rpdj4KKzwvYm9keT4KKzxzY3JpcHQ+CisgICAgdmFyIHRlc3RDb250YWluZXIgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdCcpOworICAgIHZhciBydWxlckVsZW1lbnQgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgncnVsZXInKTsKKworICAgIGZ1bmN0aW9uIGluaXQoKQorICAg
IHsKKyAgICAgICAgcnVsZXJFbGVtZW50LmlubmVySFRNTCA9ICcnOworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAgICAgICAgICAgIHJ1bGVyRWxlbWVudC5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgICAgICBydWxlckVs
ZW1lbnQubGFzdENoaWxkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKDUwICsg
aSAqIDUwKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0KHpvb20pCisg
ICAgeworICAgICAgICB2YXIgdGVzdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKTsKKyAgICAgICAgdGVzdEVsZW1lbnQuc3R5bGUuem9vbSA9IHpvb20gKyAnJSc7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgICAgICAgICB0ZXN0RWxlbWVu
dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIHRl
c3RDb250YWluZXIuYXBwZW5kQ2hpbGQodGVzdEVsZW1lbnQpOworICAgIH0KKworICAgIGluaXQo
KTsKKyAgICB0ZXN0KDEwMCk7CisgICAgdGVzdCg2Nik7CisgICAgdGVzdCgzMyk7CisKKzwvc2Ny
aXB0PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139296</attachid>
            <date>2012-04-27 15:54:13 -0700</date>
            <delta_ts>2012-05-02 15:49:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60318-20120427155412.patch</filename>
            <type>text/plain</type>
            <size>67653</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMTE1NDg4KQorKysgU291cmNlL1dURi93dGYvUGxh
dGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtODA3LDYgKzgwNywxMCBAQAogI2RlZmluZSBFTkFC
TEVfR0xPQkFMX0ZBU1RNQUxMT0NfTkVXIDEKICNlbmRpZgogCisjaWYgIWRlZmluZWQoRU5BQkxF
X1NVQlBJWEVMX0xBWU9VVCkKKyNkZWZpbmUgRU5BQkxFX1NVQlBJWEVMX0xBWU9VVCAwCisjZW5k
aWYKKwogI2RlZmluZSBFTkFCTEVfREVCVUdfV0lUSF9CUkVBS1BPSU5UIDAKICNkZWZpbmUgRU5B
QkxFX1NBTVBMSU5HX0NPVU5URVJTIDAKICNkZWZpbmUgRU5BQkxFX1NBTVBMSU5HX0ZMQUdTIDAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBACisyMDEyLTA0LTIzICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4gYW5kIEVtaWwgQSBFa2x1bmQgPGVhZUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgW21ldGFdIFN3aXRjaCBhd2F5IGZyb20gaW50ZWdlcnMgcmVw
cmVzZW50aW5nIHBpeGVscyBmb3IgbGF5b3V0L2V2ZW50IGhhbmRsaW5nL3JlbmRlcmluZworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMTgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTd2FwcGluZyB0aGUg
TGF5b3V0VW5pdCBiYWNrZW5kIHRvIEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyb20gaW50LgorICAg
ICAgICAKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgaXMgYSBuZXcgdHlwZSB0aGF0IHVz
ZXMgYW4gaW50ZWdlciB0byByZXByZXNlbnQgYSBmcmFjdGlvbiBvZiBhIHBpeGVsLgorICAgICAg
ICBXZSdyZSBhbHNvIGFkZGluZyBhIGZlYXR1cmUgZmxhZyAtLSBFTkFCTEVfU1VCUElYRUxfTEFZ
T1VUIC0tIHRoYXQgdG9nZ2xlcyB0aGlzIGZyYWN0aW9uCisgICAgICAgIGJldHdlZW4gMS8xIGFu
ZCAxLzYwLiBJbml0aWFsbHksIGFsbCBwbGF0Zm9ybXMgd2lsbCBkZWZhdWx0IHRvIHN1YnBpeGVs
IGxheW91dCBiZWluZyBvZmYsCisgICAgICAgIHNvIEZyYWN0aW9uYWxMYXlvdXRVbml0cyB3aWxs
IGVmZmVjdGl2ZWx5IGNvbnRpbnVlIHRvIGFjdCBhcyBpbnRlZ2Vycy4KKyAgICAgICAgCisgICAg
ICAgIFdpdGggRU5BQkxFX1NVQlBJWEVMX0xBWU9VVCB0dXJuZWQgb24sIEZyYWN0aW9uYWxMYXlv
dXRVbml0cyBhY2N1bXVsYXRlIGVycm9yIGZyb20gc3ViLXBpeGVsCisgICAgICAgIENTUyB2YWx1
ZXMgYW5kIGFwcGxpZWQgem9vbWluZywgYW5kIHBhaW50aW5nIHVzZXMgcGl4ZWwtc25hcHBpbmcg
dG8gYWxpZ24gdGhlc2UgdmFsdWVzCisgICAgICAgIHRvIHBpeGVscy4gU2VlIGh0dHA6Ly90cmFj
LndlYmtpdC5vcmcvd2lraS9MYXlvdXRVbml0IGZvciBkZXRhaWxzLgorCisgICAgICAgIEluIGEg
bnVtYmVyIG9mIHByZXZpb3VzIHBhdGNoZXMsIExheW91dFVuaXRzIHdlcmUgcGx1bWJlZCB0aHJv
dWdob3V0IHRoZSByZW5kZXJpbmcgdHJlZQorICAgICAgICB0byBwcmVwYXJlIGZvciB0aGlzIGNo
YW5nZS4gVGhpcyBpbmNsdWRlZCBhIG51bWJlciBvZiBmdW5jdGlvbnMgaW4gTGF5b3V0VHlwZXMu
aCBhbmQKKyAgICAgICAgdGhlIEludFJlY3QvUG9pbnQvU2l6ZSBjbGFzc2VzIHRoYXQgd2VyZSBl
ZmZlY3RpdmVseSBuby1vcHMgd2hpbGUgTGF5b3V0VW5pdHMgd2VyZQorICAgICAgICBpbnRlZ2Vy
cy4gU3Vic2VxdWVudCBwYXRjaGVzIHdpbGwgcmVtb3ZlIHVubmVjZXNzYXJ5IHZlcnNpb25zIG9m
IHRoZXNlIGZ1bmN0aW9uczsgc2VlCisgICAgICAgIGh0dHA6Ly93ZWJraXQub3JnL2IvODQ2MTYg
Zm9yIHRyYWNraW5nIHRoZXNlIGNoYW5nZXMuCisKKyAgICAgICAgVGVzdHM6IGZhc3Qvc3ViLXBp
eGVsL2NsaWVudC13aWR0aC1oZWlnaHQtc25hcHBpbmcuaHRtbAorICAgICAgICAgICAgICAgZmFz
dC9zdWItcGl4ZWwvbGF5b3V0LWJveGVzLXdpdGgtem9vbS5odG1sCisgICAgICAgICAgICAgICBm
YXN0L3N1Yi1waXhlbC9zaXplLW9mLWJveC13aXRoLXpvb20uaHRtbAorCisgICAgICAgICogV2Vi
Q29yZS5leHAuaW46IFVwZGF0aW5nIGZ1bmN0aW9uIHNpZ25hdHVyZXMgdGhhdCBleHBvc2UgRnJh
Y3Rpb25hbExheW91dFVuaXRzLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajogQWRkaW5nIG1pc3NpbmcgRnJhY3Rpb25hbExheW91dFBvaW50LmggaGVhZGVyLgor
ICAgICAgICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6em9vbUFkanVzdGVkUGl4ZWxWYWx1ZSk6IFVzaW5nIGFkanVzdEZsb2F0Rm9yQWJz
b2x1dGVab29tIGluc3RlYWQgb2YgaW50CisgICAgICAgIHRvIG1ha2UgdXNlIG9mIGV4dHJhIHBy
ZWNpc2lvbiBiZWZvcmUgcmV0dXJuaW5nIHRoZSBwaXhlbCB2YWx1ZS4KKyAgICAgICAgKiBjc3Mv
Q1NTUHJpbWl0aXZlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFs
dWU6OmNvbXB1dGVMZW5ndGgpOiBObyBsb25nZXIgcm91bmRzIGZvciBpbXByZWNpc2UgY29udmVy
c2lvbgorICAgICAgICB3aGVuIHN1Yi1waXhlbCBsYXlvdXQgaXMgZW5hYmxlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpjdXN0b21Dc3NUZXh0KTogUmV0dXJuaW5nIGlu
dGVnZXIgdmFsdWVzIGZvciBwaXhlbHMuCisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6YWRqdXN0Rm9yTG9jYWxab29tKTogVXNpbmcgcm91bmRpbmcgaW5zdGVh
ZCBvZiBpbmNyZW1lbnRpbmcgdGhlIHZhbHVlIGJlZm9yZQorICAgICAgICBhZGp1c3RpbmcgdG8g
YWNjb3VudCBmb3IgdHJ1bmNhdGlvbiB3aGVuIHN1Yi1waXhlbCBsYXlvdXQgaXMgZW5hYmxlZC4K
KyAgICAgICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRpc3RhbmNlRGF0YUZvck5vZGUpOiBVc2luZyBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6YWJzIGlu
c3RlYWQgb2Ygc3RkOjphYnMuCisgICAgICAgICogcGxhdGZvcm0vRnJhY3Rpb25hbExheW91dFVu
aXQuaDogQWRkaW5nIHNvbWUgbWlzc2luZyBvcGVyYXRvcnMgYW5kIGEgZmxhZyBhcm91bmQgdGhl
CisgICAgICAgIGNvbnN0YW50IGRlbm9taW5hdG9yIHRvIHN3aXRjaCBpdCBiZXR3ZWVuIDEvMSBh
bmQgMS82MCBkZXBlbmRpbmcgb24gdGhlIGZlYXR1cmUgZmxhZy4KKyAgICAgICAgKiBwbGF0Zm9y
bS9MZW5ndGguaDogQ2hhbmdpbmcgdGhlIGRlZmF1bHQgdHlwZSBmb3IgdmFsdWUgdG8gZmxvYXQs
IGFuZCBhZGRpbmcgaW50VmFsdWUKKyAgICAgICAgc2luY2UgdGhpcyBtb3JlIGNsb3NlbHkgbWF0
Y2hlcyB1c2FnZSBpbiBhIHN1Yi1waXhlbCBsYXlvdXQgd29ybGQuCisgICAgICAgICogcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46
OnBhaW50KTogVXNpbmcgbWluaW11bUludFZhbHVlRm9yTGVuZ3RoIGluIHRoaXMgcGxhdGZvcm0g
Y29kZQorICAgICAgICBpbnN0ZWFkIG9mIExheW91dFVuaXRzLgorICAgICAgICAqIHJlbmRlcmlu
Zy9JbmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnBs
YWNlQm94ZXNJbkJsb2NrRGlyZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0VHlw
ZXMuaDogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBhY3R1YWwgc3dpdGNoIGZvciBjaGFuZ2luZyBM
YXlvdXRVbml0cworICAgICAgICB0byBiZSBGcmFjdGlvbmFsTGF5b3V0VW5pdHMuIEFsc28gdXBk
YXRpbmcgc3R1YiBtZXRob2RzIHdpdGggdGhlaXIgcHJvcGVyIGltcGxlbWVudGF0aW9ucy4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUGFpbnRJbmZvLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWludElu
Zm86OmluZmluaXRlUmVjdCk6IEVuc3VyaW5nIHRoZSBpbmZpbml0ZVJlY3QgZG9lc24ndCBvdmVy
ZmxvdyB0aGUKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgYm91bmRzLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmNoZWNrUGFnaW5hdGlvbkFuZEZsb2F0c0F0RW5kTGluZSk6IFN3aXRjaCB0
bworICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCdzIGFicyBmdW5jdGlvbiBpbnN0ZWFkIG9m
IHN0ZDo6YWJzLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3VsYXRlQmFja2dy
b3VuZEltYWdlR2VvbWV0cnkpOiBBZGQgcm91bmRpbmcgZm9yCisgICAgICAgIHNldHRpbmcgdGhl
IHBoYXNlIG9mIHRoZSBiYWNrZ3JvdW5kIGdlb21ldHJ5IGJlZm9yZSBhcHBseWluZyBtb2R1bG8g
ZnJvbSB0aGUgdGlsZSBzaXplLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVk
RmxleGlibGVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRGVwcmVjYXRlZEZsZXhp
YmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJveCk6IFN0b3AgYXBwbHlpbmcgZmxleCB3aGVuCisgICAg
ICAgIHdlIGhhdmUgbGVzcyB0aGFuIGEgcGl4ZWwgdG8gZGlzdHJpYnV0ZS4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OmJhY2tncm91bmRDbGlwUmVjdCk6IFJlcGxhY2UgUGFpbnRJbmZvOjppbmZpbml0ZVJlY3Qgd2l0
aCB0aGUKKyAgICAgICAgTGF5b3V0UmVjdCBlcXVpdmFsZW50LgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaW5lQm94
TGlzdDo6cmFuZ2VJbnRlcnNlY3RzUmVjdCk6IFVzaW5nIEZyYWN0aW9uYWxMYXlvdXRVbml0Ojph
YnMKKyAgICAgICAgaW5zdGVhZCBvZiBzdGQ6OmFicy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVwYWludEFm
dGVyTGF5b3V0SWZOZWVkZWQpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0Lmg6CisgICAgICAgIChXZWJDb3JlKTogUmVtb3ZpbmcgdW5uZWNlc3NhcnkgYWRqdXN0Rm9y
QWJzb2x1dGVab29tIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpv
dXRsaW5lU2l6ZSk6IE91dGxpbmVzIHJlbWFpbiBpbnRzLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUYWJsZUNlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpz
dHlsZU9yQ29sTG9naWNhbFdpZHRoKTogQnVpbGQgZml4LiBVc2luZyBmbG9hdHMgYmVjYXVzZQor
ICAgICAgICBjb2xXaWR0aFN1bSBpcyBhIExlbmd0aCB3aGljaCB1c2VzIGZsb2F0cy4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uKTogRXhwbGljaXQgdGVtcGxhdGl6YXRpb24KKyAgICAgICAgZm9yIG1heC4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6IEFkZGluZyBjb2RlIHRvIG1pbmltaXpl
IHRlc3QgZXhwZWN0YXRpb24gY2h1cm4uIEl0CisgICAgICAgIG1heSBiZSB3b3J0aCBvdXRwdXR0
aW5nIGZsb2F0IHZhbHVlcyBpbiB0ZXN0IGV4cGVjdGF0aW9ucywgYnV0IHRoaXMgaXNuJ3QgZG9u
ZSB3aXRoCisgICAgICAgIHRoZSBpbmxpbmUgYm94IHRyZWUgeWV0LCBlaXRoZXIuCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuaDoKKyAgICAgICAgKFdlYkNvcmUpOiBBZGRp
bmcgYSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgb3BlcmF0b3IuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OnVwZGF0
ZVdpZGdldEdlb21ldHJ5KTogQWRkaW5nIG1pc3NpbmcgcGl4ZWwgc25hcHBpbmcsIGFuZCBzd2l0
Y2hpbmcKKyAgICAgICAgYWJzb2x1dGVDb250ZW50Qm94IHRvIGFuIEludFJlY3QsIGFzIHRoaXMg
aXMgd2hhdCBib3VuZGluZ0JveCByZXR1cm5zLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZVBvc2l0aW9uQW5k
U3R5bGUpOiBBZGRpbmcgYW4gZW5jbG9zaW5nSW50UmVjdCBmb3IgY29uc2lzdGVuY3kgd2l0aCBv
bGQgcmVzdWx0cy4KKwogMjAxMi0wNC0yNyAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBh
ZG9iZS5jb20+CiAKICAgICAgICAgW0NTUyBTaGFkZXJzXSBJbXBsZW1lbnQgQ1NTIEFuaW1hdGlv
bnMgYW5kIFRyYW5zaXRpb25zIGZvciBDU1MgU2hhZGVycwpJbmRleDogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAu
aW4JKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjAsNyArMjIwLDggQEAgX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNo
ZTEzc2V0Q2FwYWNpdGllcwogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTE0ZXZpY3RSZXNvdXJj
ZXNFdgogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTE5Z2V0T3JpZ2luc1dpdGhDYWNoZUVSTjNX
VEY3SGFzaFNldElOUzFfNlJlZlB0cklOU18xNFNlY3VyaXR5T3JpZ2luRUVFTlNfMThTZWN1cml0
eU9yaWdpbkhhc2hFTlMxXzEwSGFzaFRyYWl0c0lTNV9FRUVFCiBfX1pON1dlYkNvcmUxMU1lbW9y
eUNhY2hlMjVyZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2luRVBOU18xNFNlY3VyaXR5T3JpZ2luRQot
X19aTjdXZWJDb3JlMTJSZW5kZXJPYmplY3QxOXNjcm9sbFJlY3RUb1Zpc2libGVFUktOU183SW50
UmVjdEVSS05TXzE1U2Nyb2xsQWxpZ25tZW50RVM2XworX19aTjdXZWJDb3JlMTFSZW5kZXJMYXll
cjE5c2Nyb2xsUmVjdFRvVmlzaWJsZUVSS05TXzIwRnJhY3Rpb25hbExheW91dFJlY3RFUktOU18x
NVNjcm9sbEFsaWdubWVudEVTNl8KK19fWk43V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTlzY3JvbGxS
ZWN0VG9WaXNpYmxlRVJLTlNfMjBGcmFjdGlvbmFsTGF5b3V0UmVjdEVSS05TXzE1U2Nyb2xsQWxp
Z25tZW50RVM2XwogX19aTjdXZWJDb3JlMTFVUkxXaXRoRGF0YUVQNk5TRGF0YVA1TlNVUkwKIF9f
Wk43V2ViQ29yZTExZ2xvYmFsUG9pbnRFUks4X05TUG9pbnRQOE5TV2luZG93CiBfX1pON1dlYkNv
cmUxMW1lbW9yeUNhY2hlRXYKQEAgLTIzOCw3ICsyMzksNyBAQCBfX1pON1dlYkNvcmUxMkV2ZW50
SGFuZGxlcjE0c2Nyb2xsT3ZlcmZsCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE1aGFuZGxl
QWNjZXNzS2V5RVJLTlNfMjFQbGF0Zm9ybUtleWJvYXJkRXZlbnRFCiBfX1pON1dlYkNvcmUxMkV2
ZW50SGFuZGxlcjE2aGFuZGxlV2hlZWxFdmVudEVSS05TXzE4UGxhdGZvcm1XaGVlbEV2ZW50RQog
X19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxN3Njcm9sbFJlY3Vyc2l2ZWx5RU5TXzE1U2Nyb2xs
RGlyZWN0aW9uRU5TXzE3U2Nyb2xsR3JhbnVsYXJpdHlFUE5TXzROb2RlRQotX19aTjdXZWJDb3Jl
MTJFdmVudEhhbmRsZXIyMGhpdFRlc3RSZXN1bHRBdFBvaW50RVJLTlNfOEludFBvaW50RWJiTlNf
MTdIaXRUZXN0U2Nyb2xsYmFyc0VqUktOU183SW50U2l6ZUUKK19fWk43V2ViQ29yZTEyRXZlbnRI
YW5kbGVyMjBoaXRUZXN0UmVzdWx0QXRQb2ludEVSS05TXzIxRnJhY3Rpb25hbExheW91dFBvaW50
RWJiTlNfMTdIaXRUZXN0U2Nyb2xsYmFyc0VqUktOU18yMEZyYWN0aW9uYWxMYXlvdXRTaXplRQog
X19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyMWhhbmRsZU1vdXNlUHJlc3NFdmVudEVSS05TXzE4
UGxhdGZvcm1Nb3VzZUV2ZW50RQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyM2hhbmRsZU1v
dXNlUmVsZWFzZUV2ZW50RVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCiBfX1pON1dlYkNvcmUx
MkV2ZW50SGFuZGxlcjI0bG9naWNhbFNjcm9sbFJlY3Vyc2l2ZWx5RU5TXzIyU2Nyb2xsTG9naWNh
bERpcmVjdGlvbkVOU18xN1Njcm9sbEdyYW51bGFyaXR5RVBOU180Tm9kZUUKQEAgLTI2OCw3ICsy
NjksNyBAQCBfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dDlzcG9vbFBhZ2VFUk5TCiBfX1pON1dl
YkNvcmUxMlByaW50Q29udGV4dDlzcG9vbFJlY3RFUk5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNf
N0ludFJlY3RFCiBfX1pON1dlYkNvcmUxMlByaW50Q29udGV4dEMxRVBOU181RnJhbWVFCiBfX1pO
N1dlYkNvcmUxMlByaW50Q29udGV4dEQxRXYKLV9fWk43V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTZy
ZXBhaW50UmVjdGFuZ2xlRVJLTlNfN0ludFJlY3RFYgorX19aTjdXZWJDb3JlMTJSZW5kZXJPYmpl
Y3QxNnJlcGFpbnRSZWN0YW5nbGVFUktOU18yMEZyYWN0aW9uYWxMYXlvdXRSZWN0RWIKIF9fWk43
V2ViQ29yZTEyUmVuZGVyV2lkZ2V0MjhyZXN1bWVXaWRnZXRIaWVyYXJjaHlVcGRhdGVzRXYKIF9f
Wk43V2ViQ29yZTEyUmVuZGVyV2lkZ2V0MjlzdXNwZW5kV2lkZ2V0SGllcmFyY2h5VXBkYXRlc0V2
CiBfX1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjEwd3JhcENGRGF0YUVQSzhfX0NGRGF0YQpAQCAt
NTI4LDYgKzUyOSw3IEBAIF9fWk43V2ViQ29yZTE2Y3JlYXRlRnVsbE1hcmt1cEVQS05TXzVSYW4K
IF9fWk43V2ViQ29yZTE2ZGVsZXRlQWxsQ29va2llc0V2CiBfX1pON1dlYkNvcmUxNmVuY2xvc2lu
Z0ludFJlY3RFUks3X05TUmVjdAogX19aTjdXZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJLTlNf
OUZsb2F0UmVjdEUKK19fWk43V2ViQ29yZTE2ZW5jbG9zaW5nSW50UmVjdEVSS05TXzIwRnJhY3Rp
b25hbExheW91dFJlY3RFCiBfX1pON1dlYkNvcmUxNmlzRW5kT2ZQYXJhZ3JhcGhFUktOU18xNVZp
c2libGVQb3NpdGlvbkVOU18yN0VkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk43V2Vi
Q29yZTE2aXNVc2VyVmlzaWJsZVVSTEVQOE5TU3RyaW5nCiBfX1pON1dlYkNvcmUxNnNjcmlwdE5h
bWVUb0NvZGVFUktOM1dURjZTdHJpbmdFCkBAIC02MDYsNiArNjA4LDcgQEAgX19aTjdXZWJDb3Jl
MTlUZXh0UmVzb3VyY2VEZWNvZGVyNmRlY29kZQogX19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VE
ZWNvZGVyQzFFUktOM1dURjZTdHJpbmdFUktOU18xMlRleHRFbmNvZGluZ0ViCiBfX1pON1dlYkNv
cmUxOVRleHRSZXNvdXJjZURlY29kZXJEMUV2CiBfX1pON1dlYkNvcmUxOWFwcGxpY2F0aW9uSXNT
YWZhcmlFdgorX19aTjdXZWJDb3JlMTlwaXhlbFNuYXBwZWRJbnRSZWN0RVJLTlNfMjBGcmFjdGlv
bmFsTGF5b3V0UmVjdEUKIF9fWk43V2ViQ29yZTIwRGljdGF0aW9uQWx0ZXJuYXRpdmVDMUVqankK
IF9fWk43V2ViQ29yZTIwRGljdGF0aW9uQWx0ZXJuYXRpdmVDMUV2CiBfX1pON1dlYkNvcmUyMERp
c3BsYXlTbGVlcERpc2FibGVyQzFFUEtjCkBAIC04MzksOCArODQyLDggQEAgX19aTjdXZWJDb3Jl
NUZyYW1lMTNyYW5nZUZvclBvaW50RVJLTlNfOAogX19aTjdXZWJDb3JlNUZyYW1lMTRmcmFtZUZv
cldpZGdldEVQS05TXzZXaWRnZXRFCiBfX1pON1dlYkNvcmU1RnJhbWUxN3NldFBhZ2Vab29tRmFj
dG9yRWYKIF9fWk43V2ViQ29yZTVGcmFtZTE3c2V0VGV4dFpvb21GYWN0b3JFZgotX19aTjdXZWJD
b3JlNUZyYW1lMjN2aXNpYmxlUG9zaXRpb25Gb3JQb2ludEVSS05TXzhJbnRQb2ludEUKIF9fWk43
V2ViQ29yZTVGcmFtZTI0c2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxsRVBOU18xN1JlZ3VsYXJFeHBy
ZXNzaW9uRVBOU18yMEhUTUxUYWJsZUNlbGxFbGVtZW50RVBtCitfX1pON1dlYkNvcmU1RnJhbWUy
M3Zpc2libGVQb3NpdGlvbkZvclBvaW50RVJLTlNfOEludFBvaW50RQogX19aTjdXZWJDb3JlNUZy
YW1lMjVzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzRWZmCiBfX1pON1dlYkNvcmU1RnJhbWUyN3Jl
c2l6ZVBhZ2VSZWN0c0tlZXBpbmdSYXRpb0VSS05TXzlGbG9hdFNpemVFUzNfCiBfX1pON1dlYkNv
cmU1RnJhbWU2Y3JlYXRlRVBOU180UGFnZUVQTlNfMjFIVE1MRnJhbWVPd25lckVsZW1lbnRFUE5T
XzE3RnJhbWVMb2FkZXJDbGllbnRFCkBAIC04NTUsNyArODU4LDYgQEAgX19aTjdXZWJDb3JlNVJh
bmdlMTRpc1BvaW50SW5SYW5nZUVQTlNfNAogX19aTjdXZWJDb3JlNVJhbmdlNmNyZWF0ZUVOM1dU
RjEwUGFzc1JlZlB0cklOU184RG9jdW1lbnRFRUVOUzJfSU5TXzROb2RlRUVFaVM2X2kKIF9fWk43
V2ViQ29yZTVSYW5nZTZzZXRFbmRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5vZGVFRUVpUmkKIF9f
Wk43V2ViQ29yZTVSYW5nZThzZXRTdGFydEVOM1dURjEwUGFzc1JlZlB0cklOU180Tm9kZUVFRWlS
aQotX19aTjdXZWJDb3JlNVJhbmdlOXRleHRSZWN0c0VSTjNXVEY2VmVjdG9ySU5TXzdJbnRSZWN0
RUxtMEVFRWJQTlMwXzIwUmFuZ2VJbkZpeGVkUG9zaXRpb25FCiBfX1pON1dlYkNvcmU1UmFuZ2VE
MUV2CiBfX1pON1dlYkNvcmU2Q2hyb21lMTZzZXRTdGF0dXNiYXJUZXh0RVBOU181RnJhbWVFUktO
M1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmU2Q2hyb21lNXByaW50RVBOU181RnJhbWVFCkBAIC0x
MDYyLDEwICsxMDY0LDExIEBAIF9fWk43V2ViQ29yZThvcGVuRmlsZUVSS04zV1RGNlN0cmluZ0VO
U18KIF9fWk43V2ViQ29yZTh0b1N0cmluZ0VSS04zV1RGNlZlY3RvcklOU18xMVByb3h5U2VydmVy
RUxtMEVFRQogX19aTjdXZWJDb3JlOURPTVdpbmRvdzMwZGlzcGF0Y2hBbGxQZW5kaW5nVW5sb2Fk
RXZlbnRzRXYKIF9fWk43V2ViQ29yZTlET01XaW5kb3czNmRpc3BhdGNoQWxsUGVuZGluZ0JlZm9y
ZVVubG9hZEV2ZW50c0V2Ci1fX1pON1dlYkNvcmU5RmxvYXRSZWN0QzFFUks2Q0dSZWN0CiBfX1pO
N1dlYkNvcmU5RmxvYXRSZWN0QzFFUks3X05TUmVjdAorX19aTjdXZWJDb3JlOUZsb2F0UmVjdEMx
RVJLTlNfMjBGcmFjdGlvbmFsTGF5b3V0UmVjdEUKIF9fWk43V2ViQ29yZTlGbG9hdFJlY3RDMUVS
S05TXzdJbnRSZWN0RQogX19aTjdXZWJDb3JlOUZsb2F0U2l6ZUMxRVJLTlNfN0ludFNpemVFCitf
X1pON1dlYkNvcmU5RmxvYXRTaXplQzFFUktOU18yMEZyYWN0aW9uYWxMYXlvdXRTaXplRQogX19a
TjdXZWJDb3JlOUZvbnRDYWNoZTEzZm9udERhdGFDb3VudEV2CiBfX1pON1dlYkNvcmU5Rm9udENh
Y2hlMjFpbmFjdGl2ZUZvbnREYXRhQ291bnRFdgogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTIxcHVy
Z2VJbmFjdGl2ZUZvbnREYXRhRWkKQEAgLTEwNzYsMTAgKzEwNzksOCBAQCBfX1pON1dlYkNvcmU5
RnJhbWVUcmVlOWNsZWFyTmFtZUV2CiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTFmb3JjZUxheW91
dEViCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTJzZXRNZWRpYVR5cGVFUktOM1dURjZTdHJpbmdF
CiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTRhZGp1c3RWaWV3U2l6ZUV2Ci1fX1pON1dlYkNvcmU5
RnJhbWVWaWV3MTRzZXRNYXJnaW5XaWR0aEVpCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTRzZXRO
ZWVkc0xheW91dEV2CiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTRzZXRUcmFuc3BhcmVudEViCi1f
X1pON1dlYkNvcmU5RnJhbWVWaWV3MTVzZXRNYXJnaW5IZWlnaHRFaQogX19aTjdXZWJDb3JlOUZy
YW1lVmlldzE2c2V0UGFpbnRCZWhhdmlvckVqCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTdhZGRT
Y3JvbGxhYmxlQXJlYUVQTlNfMTRTY3JvbGxhYmxlQXJlYUUKIF9fWk43V2ViQ29yZTlGcmFtZVZp
ZXcxN3BhaW50Q29udHJvbFRpbnRzRXYKQEAgLTE1MTEsNiArMTUxMiw4IEBAIF9fWk5LN1dlYkNv
cmU4UG9zaXRpb24yNWxlYWRpbmdXaGl0ZXNwYWMKIF9fWk5LN1dlYkNvcmU4UG9zaXRpb24yNnRy
YWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uRU5TXzlFQWZmaW5pdHlFYgogX19aTks3V2ViQ29yZThQ
b3NpdGlvbjh1cHN0cmVhbUVOU18yN0VkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk5L
N1dlYkNvcmU5RE9NV2luZG93MjdwZW5kaW5nVW5sb2FkRXZlbnRMaXN0ZW5lcnNFdgorX19aTks3
V2ViQ29yZTVSYW5nZTl0ZXh0UXVhZHNFUk4zV1RGNlZlY3RvcklOU185RmxvYXRRdWFkRUxtMEVF
RWJQTlMwXzIwUmFuZ2VJbkZpeGVkUG9zaXRpb25FCitfX1pOSzdXZWJDb3JlOUZsb2F0U2l6ZTZp
c1plcm9FdgogX19aTks3V2ViQ29yZTlGbG9hdFF1YWQxMWJvdW5kaW5nQm94RXYKIF9fWk5LN1dl
YkNvcmU5RmxvYXRSZWN0MTBpbnRlcnNlY3RzRVJLUzBfCiBfX1pOSzdXZWJDb3JlOUZsb2F0UmVj
dGN2N19OU1JlY3RFdgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTE1NDg4KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MTMw
LDYgKzUxMzAsNyBAQAogCQlCOERCREI0QzEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9u
Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjhEQkRCNDgxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCAqLzsgfTsK
IAkJQjhEQkRCNEQxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjhEQkRC
NDkxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwICovOyB9
OwogCQlCOERCREI0RTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFu
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjhEQkRC
NEExMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCAqLzsgfTsK
KwkJQkFCMUMwNkExNEZDMzY3OTAwNDIzM0ZDIC8qIEZyYWN0aW9uYWxMYXlvdXRQb2ludC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0RkNFNTQxNEVD
NzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRQb2ludC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJBQ0YyOTAxMTNCMkEwRDUwMDc4MUY5
MCAvKiBMYXlvdXRUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkFDRjI5MDAxM0IyQTBENTAwNzgxRjkwIC8qIExheW91dFR5cGVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMwMEYwMDQwRTBB
MTg1NTAwRkQwNEUzIC8qIERPTUZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDMDBFRkZFMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLmggKi87
IH07CiAJCUJDMDBGMDA1MEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMEVGRkYwRTBBMTg1NTAwRkQw
NEUzIC8qIERPTUZpbGUubW0gKi87IH07CkBAIC0yMjgwOCw2ICsyMjgwOSw3IEBACiAJCQkJNjU2
RDM3M0EwQURCQTVERTAwQTQ1NTREIC8qIEZvcm1TdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDE4ODVCOTMxMUI2RkRBNjAwMzM4M0JCIC8qIEZvcm1TdWJtaXNzaW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MzVDNDc2RDA5QUM0RDYzMDBBNkFBQjQgLyogRm91bmRhdGlvbkV4dHJhcy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQkFCMUMwNkExNEZDMzY3OTAwNDIzM0ZDIC8qIEZyYWN0aW9uYWxM
YXlvdXRQb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0RkNGRTExNEVGMjUwOTAwMEQxN0Ez
IC8qIEZyYWN0aW9uYWxMYXlvdXRSZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDRGQ0U1RDE0
RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFNpemUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0NEZDRTUyMTRFQzc5QkMwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0VW5pdC5oIGlu
IEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTE1NDg4KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUyMCw5ICs1MjAsOSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsdWVGb3JOaW5l
CiAgICAgcmV0dXJuIGNyZWF0ZUJvcmRlckltYWdlVmFsdWUoaW1hZ2VWYWx1ZSwgaW1hZ2VTbGlj
ZXMsIGJvcmRlclNsaWNlcywgb3V0c2V0LCByZXBlYXQpOwogfQogCi1pbmxpbmUgc3RhdGljIFBh
c3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoaW50IHZh
bHVlLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCitpbmxpbmUgc3RhdGljIFBhc3NSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoZG91YmxlIHZhbHVlLCBj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7Ci0gICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZVZhbHVlKGFkanVzdEZvckFic29sdXRlWm9vbSh2YWx1ZSwgc3R5bGUpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1BYKTsKKyAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUo
YWRqdXN0RmxvYXRGb3JBYnNvbHV0ZVpvb20odmFsdWUsIHN0eWxlKSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QWCk7CiB9CiAKIGlubGluZSBzdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gem9vbUFkanVzdGVkTnVtYmVyVmFsdWUoZG91YmxlIHZhbHVlLCBjb25zdCBSZW5kZXJT
dHlsZSogc3R5bGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5j
cHAJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMSw3ICs0MzEsMTEgQEAgdGVtcGxhdGU8PiB1
bnNpZ25lZCBDU1NQcmltaXRpdmVWYWx1ZTo6YwogCiB0ZW1wbGF0ZTw+IExlbmd0aCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aChSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxl
KiByb290U3R5bGUsIGZsb2F0IG11bHRpcGxpZXIsIGJvb2wgY29tcHV0aW5nRm9udFNpemUpCiB7
Ci0gICAgcmV0dXJuIExlbmd0aChyb3VuZEZvckltcHJlY2lzZUNvbnZlcnNpb248aW50Pihjb21w
dXRlTGVuZ3RoRG91YmxlKHN0eWxlLCByb290U3R5bGUsIG11bHRpcGxpZXIsIGNvbXB1dGluZ0Zv
bnRTaXplKSksIEZpeGVkKTsKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIHJldHVy
biBMZW5ndGgoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbXB1dGVMZW5ndGhEb3VibGUoc3R5bGUsIHJv
b3RTdHlsZSwgbXVsdGlwbGllciwgY29tcHV0aW5nRm9udFNpemUpKSwgRml4ZWQpOworI2Vsc2UK
KyAgICByZXR1cm4gTGVuZ3RoKHJvdW5kRm9ySW1wcmVjaXNlQ29udmVyc2lvbjxmbG9hdD4oY29t
cHV0ZUxlbmd0aERvdWJsZShzdHlsZSwgcm9vdFN0eWxlLCBtdWx0aXBsaWVyLCBjb21wdXRpbmdG
b250U2l6ZSkpLCBGaXhlZCk7CisjZW5kaWYKIH0KIAogdGVtcGxhdGU8PiBzaG9ydCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aChSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxl
KiByb290U3R5bGUsIGZsb2F0IG11bHRpcGxpZXIsIGJvb2wgY29tcHV0aW5nRm9udFNpemUpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAkocmV2aXNpb24gMTE1NDg4
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDE1ICs0MiwyNiBAQCBjbGFzcyBDU1NXcmFwU2hhcGU7CiAKIHN0cnVjdCBMZW5n
dGg7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUIHJvdW5kRm9ySW1wcmVjaXNlQ29u
dmVyc2lvbihkb3VibGUgdmFsdWUpCi17CiAgICAgLy8gRGltZW5zaW9uIGNhbGN1bGF0aW9ucyBh
cmUgaW1wcmVjaXNlLCBvZnRlbiByZXN1bHRpbmcgaW4gdmFsdWVzIG9mIGUuZy4KICAgICAvLyA0
NC45OTk5OC4gIFdlIG5lZWQgdG8gZ28gYWhlYWQgYW5kIHJvdW5kIGlmIHdlJ3JlIHJlYWxseSBj
bG9zZSB0byB0aGUKICAgICAvLyBuZXh0IGludGVnZXIgdmFsdWUuCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgVCByb3VuZEZvckltcHJlY2lzZUNvbnZlcnNpb24oZG91YmxlIHZhbHVlKQor
ewogICAgIHZhbHVlICs9ICh2YWx1ZSA8IDApID8gLTAuMDEgOiArMC4wMTsKICAgICByZXR1cm4g
KCh2YWx1ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpKSB8fCAodmFsdWUgPCBzdGQ6
Om51bWVyaWNfbGltaXRzPFQ+OjptaW4oKSkpID8gMCA6IHN0YXRpY19jYXN0PFQ+KHZhbHVlKTsK
IH0KIAordGVtcGxhdGU8PiBpbmxpbmUgZmxvYXQgcm91bmRGb3JJbXByZWNpc2VDb252ZXJzaW9u
KGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgY2VpbGVkVmFsdWUgPSBjZWlsKHZhbHVlKTsK
KyAgICBkb3VibGUgcHJveGltaXR5VG9OZXh0SW50ID0gY2VpbGVkVmFsdWUgLSB2YWx1ZTsKKyAg
ICBpZiAocHJveGltaXR5VG9OZXh0SW50IDw9IDAuMDEgJiYgdmFsdWUgPiAwKQorICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNlaWxlZFZhbHVlKTsKKyAgICBpZiAocHJveGltaXR5
VG9OZXh0SW50ID49IDAuOTkgJiYgdmFsdWUgPCAwKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGZsb29yKHZhbHVlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2
YWx1ZSk7Cit9CisKIGNsYXNzIENTU1ByaW1pdGl2ZVZhbHVlIDogcHVibGljIENTU1ZhbHVlIHsK
IHB1YmxpYzoKICAgICBlbnVtIFVuaXRUeXBlcyB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CShyZXZpc2lvbiAxMTU0ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1MywxMCArMzUzLDE0IEBAIHN0YXRpYyBpbnQgYWRqdXN0Rm9yTG9j
YWxab29tKExheW91dFVuaXQKICAgICBmbG9hdCB6b29tRmFjdG9yID0gbG9jYWxab29tRm9yUmVu
ZGVyZXIocmVuZGVyZXIpOwogICAgIGlmICh6b29tRmFjdG9yID09IDEpCiAgICAgICAgIHJldHVy
biB2YWx1ZTsKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIHJldHVybiBscm91bmRm
KHZhbHVlIC8gem9vbUZhY3Rvcik7CisjZWxzZQogICAgIC8vIE5lZWRlZCBiZWNhdXNlIGNvbXB1
dGVMZW5ndGhJbnQgdHJ1bmNhdGVzIChyYXRoZXIgdGhhbiByb3VuZHMpIHdoZW4gc2NhbGluZyB1
cC4KICAgICBpZiAoem9vbUZhY3RvciA+IDEpCiAgICAgICAgIHZhbHVlKys7CiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4odmFsdWUgLyB6b29tRmFjdG9yKTsKKyNlbmRpZgogfQogCiBpbnQg
RWxlbWVudDo6b2Zmc2V0TGVmdCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxO
YXZpZ2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxO
YXZpZ2F0aW9uLmNwcAkocmV2aXNpb24gMTE1NDg4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9T
cGF0aWFsTmF2aWdhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0NSwxOSArNjQ1LDE5IEBA
IHZvaWQgZGlzdGFuY2VEYXRhRm9yTm9kZShGb2N1c0RpcmVjdGlvbiAKICAgICBzd2l0Y2ggKGRp
cmVjdGlvbikgewogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgogICAgICAgICBzYW1lQXhp
c0Rpc3RhbmNlID0gZXhpdFBvaW50LngoKSAtIGVudHJ5UG9pbnQueCgpOwotICAgICAgICBvdGhl
ckF4aXNEaXN0YW5jZSA9IGFicyhleGl0UG9pbnQueSgpIC0gZW50cnlQb2ludC55KCkpOworICAg
ICAgICBvdGhlckF4aXNEaXN0YW5jZSA9IChleGl0UG9pbnQueSgpIC0gZW50cnlQb2ludC55KCkp
LmFicygpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CiAgICAg
ICAgIHNhbWVBeGlzRGlzdGFuY2UgPSBleGl0UG9pbnQueSgpIC0gZW50cnlQb2ludC55KCk7Ci0g
ICAgICAgIG90aGVyQXhpc0Rpc3RhbmNlID0gYWJzKGV4aXRQb2ludC54KCkgLSBlbnRyeVBvaW50
LngoKSk7CisgICAgICAgIG90aGVyQXhpc0Rpc3RhbmNlID0gKGV4aXRQb2ludC54KCkgLSBlbnRy
eVBvaW50LngoKSkuYWJzKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25SaWdodDoKICAgICAgICAgc2FtZUF4aXNEaXN0YW5jZSA9IGVudHJ5UG9pbnQueCgpIC0gZXhp
dFBvaW50LngoKTsKLSAgICAgICAgb3RoZXJBeGlzRGlzdGFuY2UgPSBhYnMoZW50cnlQb2ludC55
KCkgLSBleGl0UG9pbnQueSgpKTsKKyAgICAgICAgb3RoZXJBeGlzRGlzdGFuY2UgPSAoZW50cnlQ
b2ludC55KCkgLSBleGl0UG9pbnQueSgpKS5hYnMoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBGb2N1c0RpcmVjdGlvbkRvd246CiAgICAgICAgIHNhbWVBeGlzRGlzdGFuY2UgPSBlbnRyeVBv
aW50LnkoKSAtIGV4aXRQb2ludC55KCk7Ci0gICAgICAgIG90aGVyQXhpc0Rpc3RhbmNlID0gYWJz
KGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKSk7CisgICAgICAgIG90aGVyQXhpc0Rpc3Rh
bmNlID0gKGVudHJ5UG9pbnQueCgpIC0gZXhpdFBvaW50LngoKSkuYWJzKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRnJhY3Rpb25hbExheW91dFVuaXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GcmFjdGlvbmFsTGF5b3V0VW5pdC5oCShyZXZp
c2lvbiAxMTU0ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GcmFjdGlvbmFsTGF5b3V0
VW5pdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCwxMSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQogc3RhdGljIGNvbnN0IGludCBr
Rml4ZWRQb2ludERlbm9taW5hdG9yID0gNjA7CisjZWxzZQorc3RhdGljIGNvbnN0IGludCBrRml4
ZWRQb2ludERlbm9taW5hdG9yID0gMTsKKyNlbmRpZgogY29uc3QgaW50IGludE1heEZvckxheW91
dFVuaXQgPSBJTlRfTUFYIC8ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKIGNvbnN0IGludCBpbnRN
aW5Gb3JMYXlvdXRVbml0ID0gLWludE1heEZvckxheW91dFVuaXQ7CiAKQEAgLTY3LDYgKzcxLDEy
IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBkb3VibGUoKSBjb25zdCB7IHJldHVybiB0b0RvdWJs
ZSgpOyB9CiAgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAor
ICAgIGlubGluZSBGcmFjdGlvbmFsTGF5b3V0VW5pdCBvcGVyYXRvcisrKGludCkKKyAgICB7Cisg
ICAgICAgIG1fdmFsdWUgKz0ga0ZpeGVkUG9pbnREZW5vbWluYXRvcjsKKyAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgIH0KKwogICAgIGlubGluZSBpbnQgcmF3VmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlOyB9CiAgICAgaW5saW5lIHZvaWQgc2V0UmF3VmFsdWUoaW50IHZhbHVlKSB7IG1f
dmFsdWUgPSB2YWx1ZTsgfQogICAgIGlubGluZSB2b2lkIHNldFJhd1ZhbHVlKGxvbmcgbG9uZyB2
YWx1ZSkKQEAgLTM4OCw2ICszOTgsMTEgQEAgaW5saW5lIGZsb2F0IG9wZXJhdG9yLyhjb25zdCBm
bG9hdCBhLCBjbwogICAgIHJldHVybiBhIC8gYi50b0Zsb2F0KCk7CiB9CiAKK2lubGluZSBkb3Vi
bGUgb3BlcmF0b3IvKGNvbnN0IGRvdWJsZSBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYg
YikKK3sKKyAgICByZXR1cm4gYSAvIGIudG9Eb3VibGUoKTsKK30KKwogaW5saW5lIEZyYWN0aW9u
YWxMYXlvdXRVbml0IG9wZXJhdG9yLyhjb25zdCBpbnQgYSwgY29uc3QgRnJhY3Rpb25hbExheW91
dFVuaXQmIGIpCiB7CiAgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KGEpIC8gYjsKQEAg
LTQzMCw2ICs0NDUsMTEgQEAgaW5saW5lIGZsb2F0IG9wZXJhdG9yKyhjb25zdCBmbG9hdCBhLCBj
bwogICAgIHJldHVybiBhICsgYi50b0Zsb2F0KCk7CiB9CiAKK2lubGluZSBkb3VibGUgb3BlcmF0
b3IrKGNvbnN0IGRvdWJsZSBhLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYikKK3sKKyAg
ICByZXR1cm4gYSArIGIudG9Eb3VibGUoKTsKK30KKwogaW5saW5lIEZyYWN0aW9uYWxMYXlvdXRV
bml0IG9wZXJhdG9yLShjb25zdCBGcmFjdGlvbmFsTGF5b3V0VW5pdCYgYSwgY29uc3QgRnJhY3Rp
b25hbExheW91dFVuaXQmIGIpCiB7CiAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgcmV0dXJuVmFs
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmgJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyAr
MTA5LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KICAgICAKLSAg
ICBpbnQgdmFsdWUoKSBjb25zdAorICAgIGZsb2F0IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBnZXRGbG9hdFZhbHVlKCk7CisgICAgfQorCisgICAgaW50IGludFZhbHVlKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc0NhbGN1bGF0ZWQoKSkgewogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMTgsMTMgKzEyMyw2IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGdldEludFZhbHVlKCk7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFdoZW4gd2Ug
c3dpdGNoIHRvIHN1Yi1waXhlbCBsYXlvdXQsIHZhbHVlIHdpbGwgcmV0dXJuIGZsb2F0IGJ5IGRl
ZmF1bHQsIGFuZCB0aGlzIHdpbGwgaW5oZXJpdAotICAgIC8vIHRoZSBjdXJyZW50IGltcGxlbWVu
dGF0aW9uIG9mIHZhbHVlKCkuCi0gICAgaW50IGludFZhbHVlKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZSgpOwotICAgIH0KLQogICAgIGZsb2F0IHBlcmNlbnQoKSBjb25zdAog
ICAgIHsKICAgICAgICAgQVNTRVJUKHR5cGUoKSA9PSBQZXJjZW50KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GcmFjdGlvbmFsTGF5b3V0
UmVjdC5jcHAJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZyYWN0aW9uYWxMYXlvdXRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDkg
KzEzOSwxMyBAQCBJbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRnJhY3Rpb25hCiAKIEZy
YWN0aW9uYWxMYXlvdXRSZWN0IGVuY2xvc2luZ0ZyYWN0aW9uYWxMYXlvdXRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQogICAgIHJldHVy
biBGcmFjdGlvbmFsTGF5b3V0UmVjdChyZWN0LngoKSwgcmVjdC55KCksCiAgICAgICAgICAgICAg
ICAgICAgICByZWN0Lm1heFgoKSAtIHJlY3QueCgpICsgRnJhY3Rpb25hbExheW91dFVuaXQ6OmVw
c2lsb24oKSwKICAgICAgICAgICAgICAgICAgICAgIHJlY3QubWF4WSgpIC0gcmVjdC55KCkgKyBG
cmFjdGlvbmFsTGF5b3V0VW5pdDo6ZXBzaWxvbigpKTsKKyNlbHNlCisgICAgcmV0dXJuIGVuY2xv
c2luZ0ludFJlY3QocmVjdCk7CisjZW5kaWYKIH0KIAogSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRS
ZWN0KGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRSZWN0JiByZWN0KQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAJKHJldmlzaW9uIDExNTQ4OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MzcsNyArNzM3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhVm9s
dW1lU2xpZAogICAgIGlmICghby0+aXNTbGlkZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgSW50UmVjdCBiID0gdG9SZW5kZXJCb3gobyktPmNvbnRlbnRCb3hSZWN0KCk7CisgICAg
SW50UmVjdCBiID0gcGl4ZWxTbmFwcGVkSW50UmVjdCh0b1JlbmRlckJveChvKS0+Y29udGVudEJv
eFJlY3QoKSk7CiAKICAgICAvLyBQb3NpdGlvbiB0aGUgb3V0ZXIgcmVjdGFuZ2xlCiAgICAgaW50
IHRvcCA9IHIueSgpICsgYi55KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
UG9wdXBNZW51V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vUG9wdXBNZW51V2luLmNwcAkocmV2aXNpb24gMTE1NDg4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1NSw3ICs2
NTUsNyBAQCB2b2lkIFBvcHVwTWVudVdpbjo6cGFpbnQoY29uc3QgSW50UmVjdCYgCiAgICAgICAg
IGlmIChpdGVtU3R5bGUuaXNWaXNpYmxlKCkpIHsKICAgICAgICAgICAgIGludCB0ZXh0WCA9IG1h
eDxpbnQ+KDAsIGNsaWVudCgpLT5jbGllbnRQYWRkaW5nTGVmdCgpIC0gY2xpZW50KCktPmNsaWVu
dEluc2V0TGVmdCgpKTsKICAgICAgICAgICAgIGlmIChSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1l
KCktPnBvcHVwT3B0aW9uU3VwcG9ydHNUZXh0SW5kZW50KCkgJiYgaXRlbVN0eWxlLnRleHREaXJl
Y3Rpb24oKSA9PSBMVFIpCi0gICAgICAgICAgICAgICAgdGV4dFggKz0gbWluaW11bVZhbHVlRm9y
TGVuZ3RoKGl0ZW1TdHlsZS50ZXh0SW5kZW50KCksIGl0ZW1SZWN0LndpZHRoKCkpOworICAgICAg
ICAgICAgICAgIHRleHRYICs9IG1pbmltdW1JbnRWYWx1ZUZvckxlbmd0aChpdGVtU3R5bGUudGV4
dEluZGVudCgpLCBpdGVtUmVjdC53aWR0aCgpKTsKICAgICAgICAgICAgIGludCB0ZXh0WSA9IGl0
ZW1SZWN0LnkoKSArIGl0ZW1Gb250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgKyAoaXRlbVJlY3Qu
aGVpZ2h0KCkgLSBpdGVtRm9udC5mb250TWV0cmljcygpLmhlaWdodCgpKSAvIDI7CiAgICAgICAg
ICAgICBjb250ZXh0LmRyYXdCaWRpVGV4dChpdGVtRm9udCwgdGV4dFJ1biwgSW50UG9pbnQodGV4
dFgsIHRleHRZKSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTk0LDcgKzU5NCw3
IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0luQmxvY2tEaXIKICAgICBib29sIGlz
Um9vdEJveCA9IGlzUm9vdElubGluZUJveCgpOwogICAgIGlmIChpc1Jvb3RCb3gpIHsKICAgICAg
ICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gcmVuZGVyZXIoKS0+c3R5bGUoaXNG
aXJzdExpbmVTdHlsZSgpKS0+Zm9udE1ldHJpY3MoKTsKLSAgICAgICAgc2V0TG9naWNhbFRvcCh0
b3AgKyBtYXhBc2NlbnQgLSBmb250TWV0cmljcy5hc2NlbnQoYmFzZWxpbmVUeXBlKSk7CisgICAg
ICAgIHNldExvZ2ljYWxUb3AoKHRvcCArIG1heEFzY2VudCAtIGZvbnRNZXRyaWNzLmFzY2VudChi
YXNlbGluZVR5cGUpKS5yb3VuZCgpKTsKICAgICB9CiAKICAgICBMYXlvdXRVbml0IGFkanVzdG1l
bnRGb3JDaGlsZHJlbldpdGhTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lID0gMDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCShyZXZpc2lvbiAxMTU0ODgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzcsMTEwICszNyw5NyBAQAogI2RlZmluZSBMYXlvdXRUeXBlc19oCiAKICNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIgorI2luY2x1ZGUgIkZy
YWN0aW9uYWxMYXlvdXRVbml0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0
Zi9VbnVzZWRQYXJhbS5oPgorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi10eXBlZGVmIGludCBMYXlvdXRVbml0OwotdHlwZWRlZiBJbnRQb2lu
dCBMYXlvdXRQb2ludDsKLXR5cGVkZWYgSW50U2l6ZSBMYXlvdXRTaXplOwotdHlwZWRlZiBJbnRS
ZWN0IExheW91dFJlY3Q7Ci0KLSNkZWZpbmUgTUFYX0xBWU9VVF9VTklUIElOVF9NQVgKLSNkZWZp
bmUgTUlOX0xBWU9VVF9VTklUIElOVF9NSU4KLSNkZWZpbmUgWkVST19MQVlPVVRfVU5JVCAwCit0
eXBlZGVmIEZyYWN0aW9uYWxMYXlvdXRVbml0IExheW91dFVuaXQ7Cit0eXBlZGVmIEZyYWN0aW9u
YWxMYXlvdXRQb2ludCBMYXlvdXRQb2ludDsKK3R5cGVkZWYgRnJhY3Rpb25hbExheW91dFNpemUg
TGF5b3V0U2l6ZTsKK3R5cGVkZWYgRnJhY3Rpb25hbExheW91dFJlY3QgTGF5b3V0UmVjdDsKKwor
I2RlZmluZSBNQVhfTEFZT1VUX1VOSVQgTGF5b3V0VW5pdDo6bWF4KCkKKyNkZWZpbmUgTUlOX0xB
WU9VVF9VTklUIExheW91dFVuaXQ6Om1pbigpCisjZGVmaW5lIFpFUk9fTEFZT1VUX1VOSVQgTGF5
b3V0VW5pdCgwKQogCi1pbmxpbmUgTGF5b3V0UmVjdCBlbmNsb3NpbmdMYXlvdXRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK2lubGluZSBGcmFjdGlvbmFsTGF5b3V0UmVjdCBlbmNsb3NpbmdM
YXlvdXRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4gZW5jbG9zaW5n
SW50UmVjdChyZWN0KTsKIH0KIAotaW5saW5lIEludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChj
b25zdCBMYXlvdXRSZWN0JiByZWN0KQoraW5saW5lIExheW91dFNpemUgcm91bmRlZExheW91dFNp
emUoY29uc3QgRmxvYXRTaXplJiBzKQogewotICAgIHJldHVybiByZWN0OworI2lmIEVOQUJMRShT
VUJQSVhFTF9MQVlPVVQpCisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRTaXplKHMpOworI2Vs
c2UKKyAgICByZXR1cm4gcm91bmRlZEludFNpemUocyk7CisjZW5kaWYKIH0KIAogaW5saW5lIElu
dFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChMYXlvdXRVbml0IGxlZnQsIExheW91dFVuaXQgdG9w
LCBMYXlvdXRVbml0IHdpZHRoLCBMYXlvdXRVbml0IGhlaWdodCkKIHsKLSAgICByZXR1cm4gSW50
UmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOwotfQotCi1pbmxpbmUgSW50UmVjdCBwaXhl
bFNuYXBwZWRJbnRSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgY29uc3QgTGF5b3V0
U2l6ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4gSW50UmVjdChsb2NhdGlvbiwgc2l6ZSk7CisgICAg
cmV0dXJuIEludFJlY3QobGVmdC5yb3VuZCgpLCB0b3Aucm91bmQoKSwgc25hcFNpemVUb1BpeGVs
KHdpZHRoLCBsZWZ0KSwgc25hcFNpemVUb1BpeGVsKGhlaWdodCwgdG9wKSk7CiB9CiAKIGlubGlu
ZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3RGcm9tRWRnZXMoTGF5b3V0VW5pdCBsZWZ0LCBM
YXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCByaWdodCwgTGF5b3V0VW5pdCBib3R0b20pCiB7Ci0g
ICAgcmV0dXJuIEludFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCk7
Ci19Ci0KLWlubGluZSBpbnQgc25hcFNpemVUb1BpeGVsKExheW91dFVuaXQgc2l6ZSwgTGF5b3V0
VW5pdCBsb2NhdGlvbikgCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAgICByZXR1
cm4gc2l6ZTsKLX0KLQotaW5saW5lIEludFNpemUgcGl4ZWxTbmFwcGVkSW50U2l6ZShMYXlvdXRT
aXplIHNpemUsIExheW91dFBvaW50IGxvY2F0aW9uKQotewotICAgIFVOVVNFRF9QQVJBTShsb2Nh
dGlvbik7Ci0gICAgcmV0dXJuIHNpemU7Ci19Ci0KLWlubGluZSBJbnRTaXplIHJvdW5kZWRJbnRT
aXplKGNvbnN0IExheW91dFNpemUmIHMpCi17Ci0gICAgcmV0dXJuIHM7Ci19Ci0KLWlubGluZSBM
YXlvdXRTaXplIHJvdW5kZWRMYXlvdXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgcykKLXsKLSAgICBy
ZXR1cm4gcm91bmRlZEludFNpemUocyk7Ci19Ci0KLWlubGluZSBJbnRQb2ludCByb3VuZGVkSW50
UG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHApCi17Ci0gICAgcmV0dXJuIHA7CisgICAgcmV0dXJu
IEludFJlY3QobGVmdC5yb3VuZCgpLCB0b3Aucm91bmQoKSwgc25hcFNpemVUb1BpeGVsKHJpZ2h0
IC0gbGVmdCwgbGVmdCksIHNuYXBTaXplVG9QaXhlbChib3R0b20gLSB0b3AsIHRvcCkpOwogfQog
CiBpbmxpbmUgTGF5b3V0UG9pbnQgcm91bmRlZExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQm
IHApCiB7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICByZXR1cm4gRnJhY3Rpb25h
bExheW91dFBvaW50KHApOworI2Vsc2UKICAgICByZXR1cm4gcm91bmRlZEludFBvaW50KHApOwor
I2VuZGlmCiB9CiAKIGlubGluZSBMYXlvdXRQb2ludCBmbG9vcmVkTGF5b3V0UG9pbnQoY29uc3Qg
RmxvYXRQb2ludCYgcCkKIHsKLSAgICByZXR1cm4gZmxvb3JlZEludFBvaW50KHApOworICAgIHJl
dHVybiBMYXlvdXRQb2ludChwLngoKSwgcC55KCkpOwogfQogCiBpbmxpbmUgTGF5b3V0UG9pbnQg
Zmxvb3JlZExheW91dFBvaW50KGNvbnN0IEZsb2F0U2l6ZSYgcykKIHsKLSAgICByZXR1cm4gZmxv
b3JlZEludFBvaW50KHMpOworICAgIHJldHVybiBMYXlvdXRQb2ludChzLndpZHRoKCksIHMuaGVp
Z2h0KCkpOwogfQogCiBpbmxpbmUgTGF5b3V0U2l6ZSBmbG9vcmVkTGF5b3V0U2l6ZShjb25zdCBG
bG9hdFBvaW50JiBwKQogewotICAgIHJldHVybiBMYXlvdXRTaXplKHN0YXRpY19jYXN0PGludD4o
cC54KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHAueSgpKSk7CisgICAgcmV0dXJuIExheW91dFNpemUo
cC54KCksIHAueSgpKTsKIH0KIAogaW5saW5lIGludCByb3VuZFRvSW50KExheW91dFVuaXQgdmFs
dWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlOworICAgIHJldHVybiB2YWx1ZS5yb3VuZCgpOwogfQog
CiBpbmxpbmUgaW50IGZsb29yVG9JbnQoTGF5b3V0VW5pdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
dmFsdWU7CisgICAgcmV0dXJuIHZhbHVlLnRvSW50KCk7CiB9CiAKIGlubGluZSBMYXlvdXRVbml0
IHJvdW5kZWRMYXlvdXRVbml0KGZsb2F0IHZhbHVlKQogewotICAgIHJldHVybiBscm91bmRmKHZh
bHVlKTsKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0VW5pdCh2YWx1ZSk7CisjZWxzZQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxy
b3VuZGYodmFsdWUpKTsKKyNlbmRpZgogfQogCiBpbmxpbmUgTGF5b3V0VW5pdCBjZWlsZWRMYXlv
dXRVbml0KGZsb2F0IHZhbHVlKQogeworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAg
cmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0KHZhbHVlKTsKKyNlbHNlCiAgICAgcmV0dXJuIGNl
aWxmKHZhbHVlKTsKKyNlbmRpZgogfQogCiBpbmxpbmUgTGF5b3V0U2l6ZSB0b0xheW91dFNpemUo
Y29uc3QgTGF5b3V0UG9pbnQmIHApCkBAIC0xNTUsMjIgKzE0MiwyMiBAQCBpbmxpbmUgTGF5b3V0
UG9pbnQgdG9MYXlvdXRQb2ludChjb25zdCBMCiAKIGlubGluZSBMYXlvdXRVbml0IGxheW91dE1v
ZChjb25zdCBMYXlvdXRVbml0JiBudW1lcmF0b3IsIGNvbnN0IExheW91dFVuaXQmIGRlbm9taW5h
dG9yKQogewotICAgIHJldHVybiBudW1lcmF0b3IgJSBkZW5vbWluYXRvcjsKKyAgICByZXR1cm4g
bnVtZXJhdG9yLnRvSW50KCkgJSBkZW5vbWluYXRvci50b0ludCgpOwogfQogCiBpbmxpbmUgTGF5
b3V0VW5pdCBjbGFtcFRvTGF5b3V0VW5pdChkb3VibGUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGNs
YW1wVG9JbnRlZ2VyKHZhbHVlKTsKKyAgICByZXR1cm4gY2xhbXBUbzxGcmFjdGlvbmFsTGF5b3V0
VW5pdD4odmFsdWUsIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptaW4oKSwgRnJhY3Rpb25hbExheW91
dFVuaXQ6Om1heCgpKTsKIH0KIAotaW5saW5lIGJvb2wgaXNJbnRlZ2VyVmFsdWUoY29uc3QgTGF5
b3V0VW5pdCkKK2lubGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3QoTGF5b3V0UG9pbnQg
bG9jYXRpb24sIExheW91dFNpemUgc2l6ZSkKIHsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gSW50UmVjdChyb3VuZGVkSW50UG9pbnQobG9jYXRpb24pLCBwaXhlbFNuYXBwZWRJbnRTaXpl
KHNpemUsIGxvY2F0aW9uKSk7CiB9CiAKLWlubGluZSBMYXlvdXRVbml0IGJvdW5kZWRNdWx0aXBs
eShjb25zdCBMYXlvdXRVbml0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wg
aXNJbnRlZ2VyVmFsdWUoY29uc3QgTGF5b3V0VW5pdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gYSAq
IGI7CisgICAgcmV0dXJuIHZhbHVlLmZsb29yKCkgPT0gdmFsdWU7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRJbmZvLmgJKHJldmlz
aW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNyArMzIsOSBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAjaW5j
bHVkZSAiUGFpbnRQaGFzZS5oIgorI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogCkBAIC05Niw3ICs5OCw3IEBA
IHN0cnVjdCBQYWludEluZm8gewogICAgIH0KICNlbmRpZgogCi0gICAgc3RhdGljIEludFJlY3Qg
aW5maW5pdGVSZWN0KCkgeyByZXR1cm4gSW50UmVjdChJTlRfTUlOIC8gMiwgSU5UX01JTiAvIDIs
IElOVF9NQVgsIElOVF9NQVgpOyB9CisgICAgc3RhdGljIEludFJlY3QgaW5maW5pdGVSZWN0KCkg
eyByZXR1cm4gSW50UmVjdChMYXlvdXRSZWN0OjppbmZpbml0ZVJlY3QoKSk7IH0KIAogICAgIC8v
IEZJWE1FOiBJbnRyb2R1Y2Ugc2V0dGVycy9nZXR0ZXJzIGF0IHNvbWUgcG9pbnQuIFJlcXVpcmVz
IGEgbG90IG9mIGNoYW5nZXMgdGhyb3VnaG91dCByZW5kZXJpbmcvLgogICAgIEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAxMTU0ODgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTc1Nyw3ICsxNzU3LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6Y2hlY2tQYWdpbmF0aW9uQW5k
RmxvYQogICAgIHdoaWxlIChSb290SW5saW5lQm94KiBuZXh0TGluZSA9IGxhc3RMaW5lLT5uZXh0
Um9vdEJveCgpKQogICAgICAgICBsYXN0TGluZSA9IG5leHRMaW5lOwogCi0gICAgTGF5b3V0VW5p
dCBsb2dpY2FsQm90dG9tID0gbGFzdExpbmUtPmxpbmVCb3R0b21XaXRoTGVhZGluZygpICsgYWJz
KGxpbmVEZWx0YSk7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tID0gbGFzdExpbmUtPmxp
bmVCb3R0b21XaXRoTGVhZGluZygpICsgbGluZURlbHRhLmFicygpOwogCiAgICAgY29uc3QgRmxv
YXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNl
dCgpOwogICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RT
ZXQuZW5kKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMzcs
MTMgKzEyMzcsMTMgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3VsYXRlQmFjawog
CiAgICAgTGF5b3V0VW5pdCB4UG9zaXRpb24gPSBtaW5pbXVtVmFsdWVGb3JMZW5ndGgoZmlsbExh
eWVyLT54UG9zaXRpb24oKSwgcG9zaXRpb25pbmdBcmVhU2l6ZS53aWR0aCgpIC0gZ2VvbWV0cnku
dGlsZVNpemUoKS53aWR0aCgpLCByZW5kZXJWaWV3LCB0cnVlKTsKICAgICBpZiAoYmFja2dyb3Vu
ZFJlcGVhdFggPT0gUmVwZWF0RmlsbCkKLSAgICAgICAgZ2VvbWV0cnkuc2V0UGhhc2VYKGdlb21l
dHJ5LnRpbGVTaXplKCkud2lkdGgoKSA/IGdlb21ldHJ5LnRpbGVTaXplKCkud2lkdGgoKSAtICh4
UG9zaXRpb24gKyBsZWZ0KSAlIGdlb21ldHJ5LnRpbGVTaXplKCkud2lkdGgoKSA6IDApOworICAg
ICAgICBnZW9tZXRyeS5zZXRQaGFzZVgoZ2VvbWV0cnkudGlsZVNpemUoKS53aWR0aCgpID8gZ2Vv
bWV0cnkudGlsZVNpemUoKS53aWR0aCgpIC0gbHJvdW5kKHhQb3NpdGlvbiArIGxlZnQpICUgZ2Vv
bWV0cnkudGlsZVNpemUoKS53aWR0aCgpIDogMCk7CiAgICAgZWxzZQogICAgICAgICBnZW9tZXRy
eS5zZXROb1JlcGVhdFgoeFBvc2l0aW9uICsgbGVmdCk7CiAKICAgICBMYXlvdXRVbml0IHlQb3Np
dGlvbiA9IG1pbmltdW1WYWx1ZUZvckxlbmd0aChmaWxsTGF5ZXItPnlQb3NpdGlvbigpLCBwb3Np
dGlvbmluZ0FyZWFTaXplLmhlaWdodCgpIC0gZ2VvbWV0cnkudGlsZVNpemUoKS5oZWlnaHQoKSwg
cmVuZGVyVmlldywgdHJ1ZSk7CiAgICAgaWYgKGJhY2tncm91bmRSZXBlYXRZID09IFJlcGVhdEZp
bGwpCi0gICAgICAgIGdlb21ldHJ5LnNldFBoYXNlWShnZW9tZXRyeS50aWxlU2l6ZSgpLmhlaWdo
dCgpID8gZ2VvbWV0cnkudGlsZVNpemUoKS5oZWlnaHQoKSAtICh5UG9zaXRpb24gKyB0b3ApICUg
Z2VvbWV0cnkudGlsZVNpemUoKS5oZWlnaHQoKSA6IDApOworICAgICAgICBnZW9tZXRyeS5zZXRQ
aGFzZVkoZ2VvbWV0cnkudGlsZVNpemUoKS5oZWlnaHQoKSA/IGdlb21ldHJ5LnRpbGVTaXplKCku
aGVpZ2h0KCkgLSBscm91bmQoeVBvc2l0aW9uICsgdG9wKSAlIGdlb21ldHJ5LnRpbGVTaXplKCku
aGVpZ2h0KCkgOiAwKTsKICAgICBlbHNlIAogICAgICAgICBnZW9tZXRyeS5zZXROb1JlcGVhdFko
eVBvc2l0aW9uICsgdG9wKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5jcHAJKHJldmlzaW9uIDExNTQ4
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVC
b3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTMsNyArODEzLDcgQEAgdm9pZCBSZW5kZXJEZXBy
ZWNhdGVkRmxleGlibGVCb3g6OmxheW91dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0gd2hpbGUgKGdyb3VwUmVtYWluaW5nU3BhY2UpOworICAgICAgICAgICAgICAg
IH0gd2hpbGUgKGdyb3VwUmVtYWluaW5nU3BhY2UgPj0gMSk7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIC8vIFdlIGRpZG4ndCBmaW5kIGFueSBjaGlsZHJlbiB0aGF0IGNvdWxkIGdyb3cu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9u
IDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5MDgsNyArMzkwOCw3IEBAIENsaXBSZWN0IFJlbmRlckxheWVyOjpi
YWNrZ3JvdW5kQ2xpcFJlY3QKICAgICBBU1NFUlQodmlldyk7CiAKICAgICAvLyBOb3RlOiBpbmZp
bml0ZSBjbGlwUmVjdHMgc2hvdWxkIG5vdCBiZSBzY3JvbGxlZCBoZXJlLCBvdGhlcndpc2UgdGhl
eSB3aWxsIGFjY2lkZW50YWxseSBubyBsb25nZXIgYmUgY29uc2lkZXJlZCBpbmZpbml0ZS4KLSAg
ICBpZiAocGFyZW50UmVjdHMuZml4ZWQoKSAmJiByb290TGF5ZXItPnJlbmRlcmVyKCkgPT0gdmll
dyAmJiBiYWNrZ3JvdW5kQ2xpcFJlY3QgIT0gUGFpbnRJbmZvOjppbmZpbml0ZVJlY3QoKSkKKyAg
ICBpZiAocGFyZW50UmVjdHMuZml4ZWQoKSAmJiByb290TGF5ZXItPnJlbmRlcmVyKCkgPT0gdmll
dyAmJiBiYWNrZ3JvdW5kQ2xpcFJlY3QgIT0gTGF5b3V0UmVjdDo6aW5maW5pdGVSZWN0KCkpCiAg
ICAgICAgIGJhY2tncm91bmRDbGlwUmVjdC5tb3ZlKHZpZXctPmZyYW1lVmlldygpLT5zY3JvbGxY
Rm9yRml4ZWRQb3NpdGlvbigpLCB2aWV3LT5mcmFtZVZpZXcoKS0+c2Nyb2xsWUZvckZpeGVkUG9z
aXRpb24oKSk7CiAKICAgICByZXR1cm4gYmFja2dyb3VuZENsaXBSZWN0OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCShyZXZpc2lvbiAx
MTU0ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1LDcgQEAgYm9vbCBSZW5kZXJMaW5lQm94TGlz
dDo6cmFuZ2VJbnRlcnNlY3RzUgogICAgICAgICBibG9jayA9IHJlbmRlcmVyLT5jb250YWluaW5n
QmxvY2soKTsKICAgICBMYXlvdXRVbml0IHBoeXNpY2FsU3RhcnQgPSBibG9jay0+ZmxpcEZvcldy
aXRpbmdNb2RlKGxvZ2ljYWxUb3ApOwogICAgIExheW91dFVuaXQgcGh5c2ljYWxFbmQgPSBibG9j
ay0+ZmxpcEZvcldyaXRpbmdNb2RlKGxvZ2ljYWxCb3R0b20pOwotICAgIExheW91dFVuaXQgcGh5
c2ljYWxFeHRlbnQgPSBhYnMocGh5c2ljYWxFbmQgLSBwaHlzaWNhbFN0YXJ0KTsKKyAgICBMYXlv
dXRVbml0IHBoeXNpY2FsRXh0ZW50ID0gKHBoeXNpY2FsRW5kIC0gcGh5c2ljYWxTdGFydCkuYWJz
KCk7CiAgICAgcGh5c2ljYWxTdGFydCA9IG1pbihwaHlzaWNhbFN0YXJ0LCBwaHlzaWNhbEVuZCk7
CiAgICAgCiAgICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAko
cmV2aXNpb24gMTE1NDg4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MjksNyArMTQyOSw3IEBAIGJvb2wgUmVuZGVyT2Jq
ZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk4KICAgICAvLyB0d28gcmVjdGFuZ2xlcyAoYnV0IHR5
cGljYWxseSBvbmx5IG9uZSkuCiAgICAgUmVuZGVyU3R5bGUqIG91dGxpbmVTdHlsZSA9IG91dGxp
bmVTdHlsZUZvclJlcGFpbnQoKTsKICAgICBMYXlvdXRVbml0IG93ID0gb3V0bGluZVN0eWxlLT5v
dXRsaW5lU2l6ZSgpOwotICAgIExheW91dFVuaXQgd2lkdGggPSBhYnMobmV3T3V0bGluZUJveC53
aWR0aCgpIC0gb2xkT3V0bGluZUJveC53aWR0aCgpKTsKKyAgICBMYXlvdXRVbml0IHdpZHRoID0g
KG5ld091dGxpbmVCb3gud2lkdGgoKSAtIG9sZE91dGxpbmVCb3gud2lkdGgoKSkuYWJzKCk7CiAg
ICAgaWYgKHdpZHRoKSB7CiAgICAgICAgIExheW91dFVuaXQgc2hhZG93TGVmdDsKICAgICAgICAg
TGF5b3V0VW5pdCBzaGFkb3dSaWdodDsKQEAgLTE0NDgsNyArMTQ0OCw3IEBAIGJvb2wgUmVuZGVy
T2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk4KICAgICAgICAgICAgIHJlcGFpbnRVc2luZ0Nv
bnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCByaWdodFJlY3QpOwogICAgICAgICB9CiAgICAgfQot
ICAgIExheW91dFVuaXQgaGVpZ2h0ID0gYWJzKG5ld091dGxpbmVCb3guaGVpZ2h0KCkgLSBvbGRP
dXRsaW5lQm94LmhlaWdodCgpKTsKKyAgICBMYXlvdXRVbml0IGhlaWdodCA9IChuZXdPdXRsaW5l
Qm94LmhlaWdodCgpIC0gb2xkT3V0bGluZUJveC5oZWlnaHQoKSkuYWJzKCk7CiAgICAgaWYgKGhl
aWdodCkgewogICAgICAgICBMYXlvdXRVbml0IHNoYWRvd1RvcDsKICAgICAgICAgTGF5b3V0VW5p
dCBzaGFkb3dCb3R0b207CkBAIC0yNjkxLDcgKzI2OTEsNyBAQCBib29sIFJlbmRlck9iamVjdDo6
d2lsbFJlbmRlckltYWdlKENhY2hlCiAgICAgcmV0dXJuICFkb2N1bWVudCgpLT5pblBhZ2VDYWNo
ZSgpICYmICFkb2N1bWVudCgpLT52aWV3KCktPmlzT2Zmc2NyZWVuKCk7CiB9CiAKLUxheW91dFVu
aXQgUmVuZGVyT2JqZWN0OjptYXhpbWFsT3V0bGluZVNpemUoUGFpbnRQaGFzZSBwKSBjb25zdAor
aW50IFJlbmRlck9iamVjdDo6bWF4aW1hbE91dGxpbmVTaXplKFBhaW50UGhhc2UgcCkgY29uc3QK
IHsKICAgICBpZiAocCAhPSBQYWludFBoYXNlT3V0bGluZSAmJiBwICE9IFBhaW50UGhhc2VTZWxm
T3V0bGluZSAmJiBwICE9IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzKQogICAgICAgICByZXR1cm4g
MDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9u
IDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNzc2LDcgKzc3Niw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1JlZmxl
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2JpdGZpZWxkcy5oYXNSZWZsZWN0aW9uKCk7IH0KIAog
ICAgIC8vIEFwcGxpZWQgYXMgYSAic2xvcCIgdG8gZGlydHkgcmVjdCBjaGVja3MgZHVyaW5nIHRo
ZSBvdXRsaW5lIHBhaW50aW5nIHBoYXNlJ3MgZGlydHktcmVjdCBjaGVja3MuCi0gICAgTGF5b3V0
VW5pdCBtYXhpbWFsT3V0bGluZVNpemUoUGFpbnRQaGFzZSkgY29uc3Q7CisgICAgaW50IG1heGlt
YWxPdXRsaW5lU2l6ZShQYWludFBoYXNlKSBjb25zdDsKIAogICAgIGVudW0gU2VsZWN0aW9uU3Rh
dGUgewogICAgICAgICBTZWxlY3Rpb25Ob25lLCAvLyBUaGUgb2JqZWN0IGlzIG5vdCBzZWxlY3Rl
ZC4KQEAgLTExNzcsMTEgKzExNzcsNiBAQCBpbmxpbmUgaW50IGFkanVzdEZvckFic29sdXRlWm9v
bShpbnQgdmFsCiAgICAgcmV0dXJuIGFkanVzdEZvckFic29sdXRlWm9vbSh2YWx1ZSwgcmVuZGVy
ZXItPnN0eWxlKCkpOwogfQogCi1pbmxpbmUgaW50IGFkanVzdEZvckFic29sdXRlWm9vbShGcmFj
dGlvbmFsTGF5b3V0VW5pdCB2YWx1ZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKLXsKLSAgICBy
ZXR1cm4gYWRqdXN0Rm9yQWJzb2x1dGVab29tKHZhbHVlLmZsb29yKCksIHJlbmRlcmVyLT5zdHls
ZSgpKTsKLX0KLQogaW5saW5lIHZvaWQgYWRqdXN0RmxvYXRRdWFkRm9yQWJzb2x1dGVab29tKEZs
b2F0UXVhZCYgcXVhZCwgUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBmbG9hdCB6b29t
ID0gcmVuZGVyZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiAxMTU0ODgpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQzLDcgKzE0Myw3IEBAIExlbmd0aCBSZW5kZXJUYWJsZUNlbGw6OnN0eWxlT3JD
b2xMb2dpY2EKICAgICAgICAgLy8gUGVyY2VudGFnZXMgZG9uJ3QgbmVlZCB0byBiZSBoYW5kbGVk
IHNpbmNlIHRoZXkncmUgYWx3YXlzIHRyZWF0ZWQgdGhpcyB3YXkgKGV2ZW4gd2hlbiBzcGVjaWZp
ZWQgb24gdGhlIGNlbGxzKS4KICAgICAgICAgLy8gU2VlIEJ1Z3ppbGxhIGJ1ZyA4MTI2IGZvciBk
ZXRhaWxzLgogICAgICAgICBpZiAoY29sV2lkdGhTdW0uaXNGaXhlZCgpICYmIGNvbFdpZHRoU3Vt
LnZhbHVlKCkgPiAwKQotICAgICAgICAgICAgY29sV2lkdGhTdW0gPSBMZW5ndGgobWF4KDAsIGNv
bFdpZHRoU3VtLnZhbHVlKCkgLSBib3JkZXJBbmRQYWRkaW5nTG9naWNhbFdpZHRoKCkpLCBGaXhl
ZCk7CisgICAgICAgICAgICBjb2xXaWR0aFN1bSA9IExlbmd0aChtYXgoMC4wZiwgY29sV2lkdGhT
dW0udmFsdWUoKSAtIGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKSksIEZpeGVkKTsKICAg
ICAgICAgcmV0dXJuIGNvbFdpZHRoU3VtOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCShyZXZpc2lv
biAxMTU0ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1
bVNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODMsNyArMjgzLDcgQEAgYm9vbCBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6cGFpbnRTZWFyYwogICAgIExheW91dFJlY3QgaW5wdXRDb250ZW50
Qm94ID0gaW5wdXRSZW5kZXJCb3gtPmNvbnRlbnRCb3hSZWN0KCk7CiAKICAgICAvLyBNYWtlIHN1
cmUgdGhlIHNjYWxlZCBidXR0b24gc3RheXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBpbiBpdHMgcGFy
ZW50J3MgYm94LgotICAgIExheW91dFVuaXQgY2FuY2VsQnV0dG9uU2l6ZSA9IHN0ZDo6bWluKGlu
cHV0Q29udGVudEJveC53aWR0aCgpLCBzdGQ6Om1pbihpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCks
IHIuaGVpZ2h0KCkpKTsKKyAgICBMYXlvdXRVbml0IGNhbmNlbEJ1dHRvblNpemUgPSBzdGQ6Om1p
bihpbnB1dENvbnRlbnRCb3gud2lkdGgoKSwgc3RkOjptaW48TGF5b3V0VW5pdD4oaW5wdXRDb250
ZW50Qm94LmhlaWdodCgpLCByLmhlaWdodCgpKSk7CiAgICAgLy8gQ2FsY3VsYXRlIGNhbmNlbCBi
dXR0b24ncyBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgaW5wdXQgZWxlbWVudC4KICAgICAv
LyBDZW50ZXIgdGhlIGJ1dHRvbiB2ZXJ0aWNhbGx5LiAgUm91bmQgdXAgdGhvdWdoLCBzbyBpZiBp
dCBoYXMgdG8gYmUgb25lIHBpeGVsIG9mZi1jZW50ZXIsIGl0IHdpbGwKICAgICAvLyBiZSBvbmUg
cGl4ZWwgY2xvc2VyIHRvIHRoZSBib3R0b20gb2YgdGhlIGZpZWxkLiAgVGhpcyB0ZW5kcyB0byBs
b29rIGJldHRlciB3aXRoIHRoZSB0ZXh0LgpAQCAtMzI2LDcgKzMyNiw3IEBAIGJvb2wgUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmMKICAgICBMYXlvdXRSZWN0IGlucHV0Q29udGVu
dEJveCA9IGlucHV0UmVuZGVyQm94LT5jb250ZW50Qm94UmVjdCgpOwogCiAgICAgLy8gTWFrZSBz
dXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiBzdGF5cyBzcXVhcmUgYW5kIHdpbGwgZml0IGluIGl0
cyBwYXJlbnQncyBib3guCi0gICAgTGF5b3V0VW5pdCBtYWduaWZpZXJTaXplID0gc3RkOjptaW4o
aW5wdXRDb250ZW50Qm94LndpZHRoKCksIHN0ZDo6bWluKGlucHV0Q29udGVudEJveC5oZWlnaHQo
KSwgci5oZWlnaHQoKSkpOworICAgIExheW91dFVuaXQgbWFnbmlmaWVyU2l6ZSA9IHN0ZDo6bWlu
KGlucHV0Q29udGVudEJveC53aWR0aCgpLCBzdGQ6Om1pbjxMYXlvdXRVbml0PihpbnB1dENvbnRl
bnRCb3guaGVpZ2h0KCksIHIuaGVpZ2h0KCkpKTsKICAgICAvLyBDYWxjdWxhdGUgZGVjb3JhdGlv
bidzIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSBpbnB1dCBlbGVtZW50LgogICAgIC8vIENl
bnRlciB0aGUgZGVjb3JhdGlvbiB2ZXJ0aWNhbGx5LiAgUm91bmQgdXAgdGhvdWdoLCBzbyBpZiBp
dCBoYXMgdG8gYmUgb25lIHBpeGVsIG9mZi1jZW50ZXIsIGl0IHdpbGwKICAgICAvLyBiZSBvbmUg
cGl4ZWwgY2xvc2VyIHRvIHRoZSBib3R0b20gb2YgdGhlIGZpZWxkLiAgVGhpcyB0ZW5kcyB0byBs
b29rIGJldHRlciB3aXRoIHRoZSB0ZXh0LgpAQCAtMzYxLDcgKzM2MSw3IEBAIGJvb2wgUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2VhcmMKICAgICBMYXlvdXRSZWN0IGlucHV0Q29udGVu
dEJveCA9IGlucHV0UmVuZGVyQm94LT5jb250ZW50Qm94UmVjdCgpOwogCiAgICAgLy8gTWFrZSBz
dXJlIHRoZSBzY2FsZWQgZGVjb3JhdGlvbiB3aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94Lgot
ICAgIExheW91dFVuaXQgbWFnbmlmaWVySGVpZ2h0ID0gc3RkOjptaW4oaW5wdXRDb250ZW50Qm94
LmhlaWdodCgpLCByLmhlaWdodCgpKTsKKyAgICBMYXlvdXRVbml0IG1hZ25pZmllckhlaWdodCA9
IHN0ZDo6bWluPExheW91dFVuaXQ+KGlucHV0Q29udGVudEJveC5oZWlnaHQoKSwgci5oZWlnaHQo
KSk7CiAgICAgTGF5b3V0VW5pdCBtYWduaWZpZXJXaWR0aCA9IHN0ZDo6bWluPExheW91dFVuaXQ+
KGlucHV0Q29udGVudEJveC53aWR0aCgpLCBtYWduaWZpZXJIZWlnaHQgKiBkZWZhdWx0U2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uV2lkdGggLyBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3Jh
dGlvblNpemUpOwogICAgIExheW91dFJlY3QgbWFnbmlmaWVyUmVjdChtYWduaWZpZXJPYmplY3Qt
Pm9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihpbnB1dFJlbmRlckJveCkud2lkdGgoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb250ZW50Qm94LnkoKSArIChpbnB1dENv
bnRlbnRCb3guaGVpZ2h0KCkgLSBtYWduaWZpZXJIZWlnaHQgKyAxKSAvIDIsCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAx
MTU0ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1zdGF0aWMgdm9pZCB3cml0ZUxheWVycyhUZXh0
U3RyZWFtJiwgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqLCBjb25z
dCBJbnRSZWN0JiBwYWludERpcnR5UmVjdCwgaW50IGluZGVudCA9IDAsIFJlbmRlckFzVGV4dEJl
aGF2aW9yIGJlaGF2aW9yID0gUmVuZGVyQXNUZXh0QmVoYXZpb3JOb3JtYWwpOworc3RhdGljIHZv
aWQgd3JpdGVMYXllcnMoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIs
IFJlbmRlckxheWVyKiwgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnREaXJ0eVJlY3QsIGludCBpbmRl
bnQgPSAwLCBSZW5kZXJBc1RleHRCZWhhdmlvciA9IFJlbmRlckFzVGV4dEJlaGF2aW9yTm9ybWFs
KTsKIAogc3RhdGljIGlubGluZSBib29sIGhhc0ZyYWN0aW9ucyhkb3VibGUgdmFsKQogewpAQCAt
MTA0LDYgKzEwNCwxMiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
CiAgICAgcmV0dXJuIHRzIDw8ICIoIiA8PCBwLngoKSA8PCAiLCIgPDwgcC55KCkgPDwgIikiOwog
fQogCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGcmFjdGlv
bmFsTGF5b3V0UG9pbnQmIHApCit7CisgICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBiZSBwcmlu
dGVkIGFzIGZsb2F0cy4gS2VlcGluZyB0aGVtIGludHMgZm9yIGNvbnNpc3RlbmN5IHdpdGggcGVy
dmlvdXMgdGVzdCBleHBlY3RhdGlvbnMuCisgICAgcmV0dXJuIHRzIDw8ICIoIiA8PCBwLngoKS50
b0ludCgpIDw8ICIsIiA8PCBwLnkoKS50b0ludCgpIDw8ICIpIjsKK30KKwogVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmxvYXRQb2ludCYgcCkKIHsKICAgICB0
cyA8PCAiKCIgPDwgZm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHAueCgpKTsKQEAgLTI0
Miw3ICsyNDgsNyBAQCB2b2lkIFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0CiAg
ICAgUmVuZGVyQmxvY2sqIGNiID0gby5jb250YWluaW5nQmxvY2soKTsKICAgICBib29sIGFkanVz
dEZvclRhYmxlQ2VsbHMgPSBjYiA/IGNiLT5pc1RhYmxlQ2VsbCgpIDogZmFsc2U7CiAKLSAgICBJ
bnRSZWN0IHI7CisgICAgTGF5b3V0UmVjdCByOwogICAgIGlmIChvLmlzVGV4dCgpKSB7CiAgICAg
ICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBiZXR0ZXIgdG8gZHVtcCB0aGUgYm91bmRpbmcgYm94IHgg
YW5kIHkgcmF0aGVyIHRoYW4gdGhlIGZpcnN0IHJ1bidzIHggYW5kIHksIGJ1dCB0aGF0IHdvdWxk
IGludm9sdmUgdXBkYXRpbmcKICAgICAgICAgLy8gbWFueSB0ZXN0IHJlc3VsdHMuCkBAIC0yNjEs
NyArMjY3LDcgQEAgdm9pZCBSZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJlbmRlck9iamVjdAogICAg
ICAgICAvLyB0byBjbGVhbiB1cCB0aGUgcmVzdWx0cyB0byBkdW1wIGJvdGggdGhlIG91dGVyIGJv
eCBhbmQgdGhlIGludHJpbnNpYyBwYWRkaW5nIHNvIHRoYXQgYm90aCBiaXRzIG9mIGluZm9ybWF0
aW9uIGFyZQogICAgICAgICAvLyBjYXB0dXJlZCBieSB0aGUgcmVzdWx0cy4KICAgICAgICAgY29u
c3QgUmVuZGVyVGFibGVDZWxsJiBjZWxsID0gKnRvUmVuZGVyVGFibGVDZWxsKCZvKTsKLSAgICAg
ICAgciA9IEludFJlY3QoY2VsbC54KCksIGNlbGwueSgpICsgY2VsbC5pbnRyaW5zaWNQYWRkaW5n
QmVmb3JlKCksIGNlbGwud2lkdGgoKSwgY2VsbC5oZWlnaHQoKSAtIGNlbGwuaW50cmluc2ljUGFk
ZGluZ0JlZm9yZSgpIC0gY2VsbC5pbnRyaW5zaWNQYWRkaW5nQWZ0ZXIoKSk7CisgICAgICAgIHIg
PSBMYXlvdXRSZWN0KGNlbGwueCgpLCBjZWxsLnkoKSArIGNlbGwuaW50cmluc2ljUGFkZGluZ0Jl
Zm9yZSgpLCBjZWxsLndpZHRoKCksIGNlbGwuaGVpZ2h0KCkgLSBjZWxsLmludHJpbnNpY1BhZGRp
bmdCZWZvcmUoKSAtIGNlbGwuaW50cmluc2ljUGFkZGluZ0FmdGVyKCkpOwogICAgIH0gZWxzZSBp
ZiAoby5pc0JveCgpKQogICAgICAgICByID0gdG9SZW5kZXJCb3goJm8pLT5mcmFtZVJlY3QoKTsK
IApAQCAtMjY5LDYgKzI3NSwxMSBAQCB2b2lkIFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVy
T2JqZWN0CiAgICAgaWYgKGFkanVzdEZvclRhYmxlQ2VsbHMpCiAgICAgICAgIHIubW92ZSgwLCAt
dG9SZW5kZXJUYWJsZUNlbGwoby5jb250YWluaW5nQmxvY2soKSktPmludHJpbnNpY1BhZGRpbmdC
ZWZvcmUoKSk7CiAKKyAgICAvLyBGSVhNRTogQ29udmVydCBsYXlvdXQgdGVzdCByZXN1bHRzIHRv
IHJlcG9ydCBzdWItcGl4ZWwgdmFsdWVzLCBpbiB0aGUgbWVhbnRpbWUgdXNpbmcgZW5jbG9zaW5n
SW50UmVjdAorICAgIC8vIGZvciBjb25zaXN0ZW5jeSB3aXRoIG9sZCByZXN1bHRzLgorICAgIHIg
PSBlbmNsb3NpbmdJbnRSZWN0KHIpOworCisKICAgICB0cyA8PCAiICIgPDwgcjsKIAogICAgIGlm
ICghKG8uaXNUZXh0KCkgJiYgIW8uaXNCUigpKSkgewpAQCAtNTkxLDkgKzYwMiwxNCBAQCBlbnVt
IExheWVyUGFpbnRQaGFzZSB7CiB9OwogCiBzdGF0aWMgdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0
cywgUmVuZGVyTGF5ZXImIGwsCi0gICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBsYXll
ckJvdW5kcywgY29uc3QgSW50UmVjdCYgYmFja2dyb3VuZENsaXBSZWN0LCBjb25zdCBJbnRSZWN0
JiBjbGlwUmVjdCwgY29uc3QgSW50UmVjdCYgb3V0bGluZUNsaXBSZWN0LAorICAgICAgICAgICAg
ICAgICAgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExheW91dFJlY3QmIGJh
Y2tncm91bmRDbGlwUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgY2xpcFJlY3QsIGNvbnN0IExheW91
dFJlY3QmIG91dGxpbmVDbGlwUmVjdCwKICAgICAgICAgICAgICAgICAgIExheWVyUGFpbnRQaGFz
ZSBwYWludFBoYXNlID0gTGF5ZXJQYWludFBoYXNlQWxsLCBpbnQgaW5kZW50ID0gMCwgUmVuZGVy
QXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IgPSBSZW5kZXJBc1RleHRCZWhhdmlvck5vcm1hbCkKIHsK
KyAgICBJbnRSZWN0IGFkanVzdGVkTGF5b3V0Qm91bmRzID0gcGl4ZWxTbmFwcGVkSW50UmVjdChs
YXllckJvdW5kcyk7CisgICAgSW50UmVjdCBhZGp1c3RlZEJhY2tncm91bmRDbGlwUmVjdCA9IHBp
eGVsU25hcHBlZEludFJlY3QoYmFja2dyb3VuZENsaXBSZWN0KTsKKyAgICBJbnRSZWN0IGFkanVz
dGVkQ2xpcFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGNsaXBSZWN0KTsKKyAgICBJbnRSZWN0
IGFkanVzdGVkT3V0bGluZUNsaXBSZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChvdXRsaW5lQ2xp
cFJlY3QpOworCiAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CiAKICAgICB0cyA8PCAibGF5
ZXIgIjsKQEAgLTYwMSwxNSArNjE3LDE1IEBAIHN0YXRpYyB2b2lkIHdyaXRlKFRleHRTdHJlYW0m
IHRzLCBSZW5kZXIKICAgICBpZiAoYmVoYXZpb3IgJiBSZW5kZXJBc1RleHRTaG93QWRkcmVzc2Vz
KQogICAgICAgICB0cyA8PCBzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oJmwpIDw8ICIgIjsKICAg
ICAgIAotICAgIHRzIDw8IGxheWVyQm91bmRzOworICAgIHRzIDw8IGFkanVzdGVkTGF5b3V0Qm91
bmRzOwogCi0gICAgaWYgKCFsYXllckJvdW5kcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKCFi
YWNrZ3JvdW5kQ2xpcFJlY3QuY29udGFpbnMobGF5ZXJCb3VuZHMpKQotICAgICAgICAgICAgdHMg
PDwgIiBiYWNrZ3JvdW5kQ2xpcCAiIDw8IGJhY2tncm91bmRDbGlwUmVjdDsKLSAgICAgICAgaWYg
KCFjbGlwUmVjdC5jb250YWlucyhsYXllckJvdW5kcykpCi0gICAgICAgICAgICB0cyA8PCAiIGNs
aXAgIiA8PCBjbGlwUmVjdDsKLSAgICAgICAgaWYgKCFvdXRsaW5lQ2xpcFJlY3QuY29udGFpbnMo
bGF5ZXJCb3VuZHMpKQotICAgICAgICAgICAgdHMgPDwgIiBvdXRsaW5lQ2xpcCAiIDw8IG91dGxp
bmVDbGlwUmVjdDsKKyAgICBpZiAoIWFkanVzdGVkTGF5b3V0Qm91bmRzLmlzRW1wdHkoKSkgewor
ICAgICAgICBpZiAoIWFkanVzdGVkQmFja2dyb3VuZENsaXBSZWN0LmNvbnRhaW5zKGFkanVzdGVk
TGF5b3V0Qm91bmRzKSkKKyAgICAgICAgICAgIHRzIDw8ICIgYmFja2dyb3VuZENsaXAgIiA8PCBh
ZGp1c3RlZEJhY2tncm91bmRDbGlwUmVjdDsKKyAgICAgICAgaWYgKCFhZGp1c3RlZENsaXBSZWN0
LmNvbnRhaW5zKGFkanVzdGVkTGF5b3V0Qm91bmRzKSkKKyAgICAgICAgICAgIHRzIDw8ICIgY2xp
cCAiIDw8IGFkanVzdGVkQ2xpcFJlY3Q7CisgICAgICAgIGlmICghYWRqdXN0ZWRPdXRsaW5lQ2xp
cFJlY3QuY29udGFpbnMoYWRqdXN0ZWRMYXlvdXRCb3VuZHMpKQorICAgICAgICAgICAgdHMgPDwg
IiBvdXRsaW5lQ2xpcCAiIDw8IGFkanVzdGVkT3V0bGluZUNsaXBSZWN0OwogICAgIH0KIAogICAg
IGlmIChsLnJlbmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgpKSB7CkBAIC02NDQsNyArNjYwLDcg
QEAgc3RhdGljIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIFJlbmRlcgogfQogCiBzdGF0aWMg
dm9pZCB3cml0ZVJlbmRlck5hbWVkRmxvd1RocmVhZHMoVGV4dFN0cmVhbSYgdHMsIFJlbmRlclZp
ZXcqIHJlbmRlclZpZXcsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBwYWludFJlY3QsIGludCBpbmRlbnQsIFJlbmRl
ckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yKQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
TGF5b3V0UmVjdCYgcGFpbnRSZWN0LCBpbnQgaW5kZW50LCBSZW5kZXJBc1RleHRCZWhhdmlvciBi
ZWhhdmlvcikKIHsKICAgICBpZiAoIXJlbmRlclZpZXctPmhhc1JlbmRlck5hbWVkRmxvd1RocmVh
ZHMoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjkyLDE4ICs3MDgsMTggQEAgc3RhdGljIHZvaWQg
d3JpdGVSZW5kZXJOYW1lZEZsb3dUaHJlYWRzKAogfQogCiBzdGF0aWMgdm9pZCB3cml0ZUxheWVy
cyhUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5
ZXIqIGwsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBwYWludFJlY3Qs
IGludCBpbmRlbnQsIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yKQorICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnRSZWN0LCBpbnQgaW5kZW50LCBSZW5k
ZXJBc1RleHRCZWhhdmlvciBiZWhhdmlvcikKIHsKICAgICAvLyBGSVhNRTogQXBwbHkgb3ZlcmZs
b3cgdG8gdGhlIHJvb3QgbGF5ZXIgdG8gbm90IGJyZWFrIGV2ZXJ5IHRlc3QuICBDb21wbGV0ZSBo
YWNrLiAgU2lnaC4KLSAgICBJbnRSZWN0IHBhaW50RGlydHlSZWN0KHBhaW50UmVjdCk7CisgICAg
TGF5b3V0UmVjdCBwYWludERpcnR5UmVjdChwYWludFJlY3QpOwogICAgIGlmIChyb290TGF5ZXIg
PT0gbCkgewotICAgICAgICBwYWludERpcnR5UmVjdC5zZXRXaWR0aChtYXgocGFpbnREaXJ0eVJl
Y3Qud2lkdGgoKSwgcm9vdExheWVyLT5yZW5kZXJCb3goKS0+bWF4WExheW91dE92ZXJmbG93KCkp
KTsKLSAgICAgICAgcGFpbnREaXJ0eVJlY3Quc2V0SGVpZ2h0KG1heChwYWludERpcnR5UmVjdC5o
ZWlnaHQoKSwgcm9vdExheWVyLT5yZW5kZXJCb3goKS0+bWF4WUxheW91dE92ZXJmbG93KCkpKTsK
LSAgICAgICAgbC0+c2V0U2l6ZShsLT5zaXplKCkuZXhwYW5kZWRUbyhsLT5yZW5kZXJCb3goKS0+
bWF4TGF5b3V0T3ZlcmZsb3coKSkpOworICAgICAgICBwYWludERpcnR5UmVjdC5zZXRXaWR0aCht
YXg8TGF5b3V0VW5pdD4ocGFpbnREaXJ0eVJlY3Qud2lkdGgoKSwgcm9vdExheWVyLT5yZW5kZXJC
b3goKS0+bWF4WExheW91dE92ZXJmbG93KCkpKTsKKyAgICAgICAgcGFpbnREaXJ0eVJlY3Quc2V0
SGVpZ2h0KG1heDxMYXlvdXRVbml0PihwYWludERpcnR5UmVjdC5oZWlnaHQoKSwgcm9vdExheWVy
LT5yZW5kZXJCb3goKS0+bWF4WUxheW91dE92ZXJmbG93KCkpKTsKKyAgICAgICAgbC0+c2V0U2l6
ZShsLT5zaXplKCkuZXhwYW5kZWRUbyhwaXhlbFNuYXBwZWRJbnRTaXplKGwtPnJlbmRlckJveCgp
LT5tYXhMYXlvdXRPdmVyZmxvdygpLCBMYXlvdXRQb2ludCgwLCAwKSkpKTsKICAgICB9CiAgICAg
CiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjbGlwIHJlY3RzIHdlIHNob3VsZCB1c2UuCi0gICAgSW50
UmVjdCBsYXllckJvdW5kczsKKyAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzOwogICAgIENsaXBS
ZWN0IGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3Q7CiAgICAgbC0+Y2Fs
Y3VsYXRlUmVjdHMocm9vdExheWVyLCAwLCBwYWludERpcnR5UmVjdCwgbGF5ZXJCb3VuZHMsIGRh
bWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3QsIHRydWUpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmgJKHJldmlzaW9uIDEx
NTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgRWxlbWVudDsKK2NsYXNzIEZyYWN0aW9uYWxMYXlvdXRQb2ludDsKIGNsYXNzIEZsb2F0UG9p
bnQ7CiBjbGFzcyBGbG9hdFNpemU7CiBjbGFzcyBGcmFtZTsKQEAgLTcwLDYgKzcxLDcgQEAgc3Rh
dGljIHZvaWQgd3JpdGVSZW5kZXJPYmplY3QoVGV4dFN0cmVhbQogCiBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBJbnRQb2ludCYpOwogVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgSW50UmVjdCYpOworVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50Jik7CiBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBGbG9hdFBvaW50Jik7CiBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBGbG9hdFNpemUmKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHJldmlzaW9uIDExNTQ4OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzYsMTEgKzE3NiwxMSBAQCBib29sIFJlbmRlcldpZGdldDo6c2V0V2lkZ2V0R2Vv
bWV0cnkoY29uCiAKIGJvb2wgUmVuZGVyV2lkZ2V0Ojp1cGRhdGVXaWRnZXRHZW9tZXRyeSgpCiB7
Ci0gICAgTGF5b3V0UmVjdCBjb250ZW50Qm94ID0gY29udGVudEJveFJlY3QoKTsKKyAgICBJbnRS
ZWN0IGNvbnRlbnRCb3ggPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnRlbnRCb3hSZWN0KCkpOwog
ICAgIGlmICghbV93aWRnZXQtPnRyYW5zZm9ybXNBZmZlY3RGcmFtZVJlY3QoKSkKICAgICAgICAg
cmV0dXJuIHNldFdpZGdldEdlb21ldHJ5KGFic29sdXRlQ29udGVudEJveCgpKTsKIAotICAgIExh
eW91dFJlY3QgYWJzb2x1dGVDb250ZW50Qm94KGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFk
KGNvbnRlbnRCb3gpKS5ib3VuZGluZ0JveCgpKTsKKyAgICBJbnRSZWN0IGFic29sdXRlQ29udGVu
dEJveChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChjb250ZW50Qm94KSkuYm91bmRpbmdC
b3goKSk7CiAgICAgaWYgKG1fd2lkZ2V0LT5pc0ZyYW1lVmlldygpKSB7CiAgICAgICAgIGNvbnRl
bnRCb3guc2V0TG9jYXRpb24oYWJzb2x1dGVDb250ZW50Qm94LmxvY2F0aW9uKCkpOwogICAgICAg
ICByZXR1cm4gc2V0V2lkZ2V0R2VvbWV0cnkoY29udGVudEJveCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJl
dmlzaW9uIDExNTQ4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
VHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNiw3ICszMjYsNyBAQCBzdGF0aWMg
dm9pZCB3cml0ZVN0eWxlKFRleHRTdHJlYW0mIHRzLCBjCiAKIHN0YXRpYyBUZXh0U3RyZWFtJiB3
cml0ZVBvc2l0aW9uQW5kU3R5bGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck9iamVjdCYg
b2JqZWN0KQogewotICAgIHRzIDw8ICIgIiA8PCBjb25zdF9jYXN0PFJlbmRlck9iamVjdCY+KG9i
amVjdCkuYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7CisgICAgdHMgPDwgIiAiIDw8IGVu
Y2xvc2luZ0ludFJlY3QoY29uc3RfY2FzdDxSZW5kZXJPYmplY3QmPihvYmplY3QpLmFic29sdXRl
Q2xpcHBlZE92ZXJmbG93UmVjdCgpKTsKICAgICB3cml0ZVN0eWxlKHRzLCBvYmplY3QpOwogICAg
IHJldHVybiB0czsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNTUwMykKKysrIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEy
LTA0LTI3ICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKworICAgICAgICBb
bWV0YV0gU3dpdGNoIGF3YXkgZnJvbSBpbnRlZ2VycyByZXByZXNlbnRpbmcgcGl4ZWxzIGZvciBs
YXlvdXQvZXZlbnQgaGFuZGxpbmcvcmVuZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDMxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFw
aGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXI6OnRpbGVk
QmFja2luZ1N0b3JlVmlzaWJsZVJlY3QpOiBVc2luZyBlbmNsb3NpbmdJbnRSZWN0IHRvCisgICAg
ICAgIGludmFsaWRhdGUgdGhlIHJlc3VsdHMgb2YgdGhlIHRyYW5zZm9ybS4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3dpbi9XZWJQb3B1cE1lbnVXaW4uY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQb3B1cE1lbnU6OnNldFVwUGxhdGZvcm1EYXRhKTogVXNpbmcgbWluaW11
bUludFZhbHVlRm9yTGVuZ3RoIGluc3RlYWQgb2YKKyAgICAgICAgbWluaW11bVZhbHVlRm9yTGVu
Z3RoIGZvciB0aGlzIHBsYXRmb3JtIGNvZGUuCisKIDIwMTItMDQtMjcgIEdhdmluIFBldGVycyAg
PGdhdmlucEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIG5ldyBFTkFCTEVfTElOS19QUkVS
RU5ERVIgZGVmaW5lIHRvIGNvbnRyb2wgdGhlIFByZXJlbmRlcmluZyBBUEkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR3JhcGhpY3NMYXllci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJHcmFwaGljc0xheWVyLmNwcAkocmV2aXNpb24gMTE1NDg4KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHcmFwaGljc0xheWVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTQ5LDcgKzU0OSw3IEBAIEludFJlY3QgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRC
YWNraW5nU3QKICAgICAvLyBSZXR1cm4gYSBwcm9qZWN0aW9uIG9mIHRoZSB2aXNpYmxlIHJlY3Qg
KHN1cmZhY2UgY29vcmRpbmF0ZXMpIG9udG8gdGhlIGxheWVyJ3MgcGxhbmUgKGxheWVyIGNvb3Jk
aW5hdGVzKS4KICAgICAvLyBUaGUgcmVzdWx0aW5nIHF1YWQgbWlnaHQgYmUgc3F1ZXdlZCBhbmQg
dGhlIHZpc2libGUgcmVjdCBpcyB0aGUgYm91bmRpbmcgYm94IG9mIHRoaXMgcXVhZCwKICAgICAv
LyBzbyBpdCBtaWdodCBzcHJlYWQgZnVydGhlciB0aGFuIHRoZSByZWFsIHZpc2libGUgYXJlYSAo
YW5kIHRoZW4gZXZlbiBtb3JlIGFtcGxpZmllZCBieSB0aGUgY292ZXIgcmVjdCBtdWx0aXBsaWVy
KS4KLSAgICByZXR1cm4gbV9sYXllclRyYW5zZm9ybS5jb21iaW5lZCgpLmludmVyc2UoKS5jbGFt
cGVkQm91bmRzT2ZQcm9qZWN0ZWRRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3QobV93ZWJHcmFwaGlj
c0xheWVyQ2xpZW50LT52aXNpYmxlQ29udGVudHNSZWN0KCkpKSk7CisgICAgcmV0dXJuIGVuY2xv
c2luZ0ludFJlY3QobV9sYXllclRyYW5zZm9ybS5jb21iaW5lZCgpLmludmVyc2UoKS5jbGFtcGVk
Qm91bmRzT2ZQcm9qZWN0ZWRRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3QobV93ZWJHcmFwaGljc0xh
eWVyQ2xpZW50LT52aXNpYmxlQ29udGVudHNSZWN0KCkpKSkpOwogfQogCiBDb2xvciBXZWJHcmFw
aGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3dpbi9XZWJQb3B1cE1l
bnVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvd2luL1dlYlBvcHVwTWVudVdpbi5jcHAJKHJldmlzaW9uIDExNTQ4OCkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvd2luL1dlYlBvcHVwTWVudVdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw3ICsxMzYsNyBAQCB2b2lkIFdlYlBvcHVwTWVu
dTo6c2V0VXBQbGF0Zm9ybURhdGEoY29uCiAgICAgICAgIGlmIChpdGVtU3R5bGUuaXNWaXNpYmxl
KCkpIHsKICAgICAgICAgICAgIGludCB0ZXh0WCA9IHN0ZDo6bWF4KDAsIGRhdGEubV9jbGllbnRQ
YWRkaW5nTGVmdCAtIGRhdGEubV9jbGllbnRJbnNldExlZnQpOwogICAgICAgICAgICAgaWYgKFJl
bmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+cG9wdXBPcHRpb25TdXBwb3J0c1RleHRJbmRlbnQo
KSAmJiBpdGVtU3R5bGUudGV4dERpcmVjdGlvbigpID09IExUUikKLSAgICAgICAgICAgICAgICB0
ZXh0WCArPSBtaW5pbXVtVmFsdWVGb3JMZW5ndGgoaXRlbVN0eWxlLnRleHRJbmRlbnQoKSwgaXRl
bVJlY3Qud2lkdGgoKSk7CisgICAgICAgICAgICAgICAgdGV4dFggKz0gbWluaW11bUludFZhbHVl
Rm9yTGVuZ3RoKGl0ZW1TdHlsZS50ZXh0SW5kZW50KCksIGl0ZW1SZWN0LndpZHRoKCkpOwogICAg
ICAgICAgICAgaW50IHRleHRZID0gaXRlbVJlY3QueSgpICsgaXRlbUZvbnQuZm9udE1ldHJpY3Mo
KS5hc2NlbnQoKSArIChpdGVtUmVjdC5oZWlnaHQoKSAtIGl0ZW1Gb250LmZvbnRNZXRyaWNzKCku
aGVpZ2h0KCkpIC8gMjsKIAogICAgICAgICAgICAgbm90U2VsZWN0ZWRCYWNraW5nU3RvcmVDb250
ZXh0LT5kcmF3QmlkaVRleHQoaXRlbUZvbnQsIHRleHRSdW4sIEludFBvaW50KHRleHRYLCB0ZXh0
WSkpOwpJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9D
aHJvbWVDbGllbnRHdGsuY3BwCShyZXZpc2lvbiAxMTU0ODgpCisrKyBTb3VyY2UvV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NTAsNyArNzUwLDcgQEAgdm9pZCBDaHJvbWVDbGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZQog
ICAgIGlmIChOb2RlKiBub2RlID0gaGl0LmlubmVyTm9uU2hhcmVkTm9kZSgpKSB7CiAgICAgICAg
IEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgICAgIEZyYW1l
VmlldyogdmlldyA9IGZyYW1lID8gZnJhbWUtPnZpZXcoKSA6IDA7Ci0gICAgICAgIG1fd2ViVmll
dy0+cHJpdi0+dG9vbHRpcEFyZWEgPSB2aWV3ID8gdmlldy0+Y29udGVudHNUb1dpbmRvdyhub2Rl
LT5nZXRSZWN0KCkpIDogSW50UmVjdCgpOworICAgICAgICBtX3dlYlZpZXctPnByaXYtPnRvb2x0
aXBBcmVhID0gdmlldyA/IHZpZXctPmNvbnRlbnRzVG9XaW5kb3cobm9kZS0+Z2V0UGl4ZWxTbmFw
cGVkUmVjdCgpKSA6IEludFJlY3QoKTsKICAgICB9IGVsc2UKICAgICAgICAgbV93ZWJWaWV3LT5w
cml2LT50b29sdGlwQXJlYSA9IEludFJlY3QoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0aGl0dGVzdHJlc3VsdC5jcHAJKHJldmlzaW9uIDExNTQ4OCkK
KysrIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzE4LDkgKzMxOCw5IEBAIFdlYktpdEhpdFRlc3RSZXN1bHQqIGtpdChj
b25zdCBXZWJDb3JlOjoKICAgICB0YXJnZXRGcmFtZSA9IHJlc3VsdC50YXJnZXRGcmFtZSgpOwog
ICAgIGlmICh0YXJnZXRGcmFtZSAmJiB0YXJnZXRGcmFtZS0+dmlldygpKSB7CiAgICAgICAgIC8v
IENvbnZlcnQgZG9jdW1lbnQgY29vcmRzIHRvIHdpZGdldCBjb29yZHMuCi0gICAgICAgIHBvaW50
ID0gdGFyZ2V0RnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyZXN1bHQucG9pbnQoKSk7
CisgICAgICAgIHBvaW50ID0gdGFyZ2V0RnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhy
ZXN1bHQucm91bmRlZFBvaW50KCkpOwogICAgIH0gZWxzZQotICAgICAgICBwb2ludCA9IHJlc3Vs
dC5wb2ludCgpOworICAgICAgICBwb2ludCA9IHJlc3VsdC5yb3VuZGVkUG9pbnQoKTsKIAogICAg
IHJldHVybiBXRUJLSVRfSElUX1RFU1RfUkVTVUxUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9I
SVRfVEVTVF9SRVNVTFQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJsaW5rLXVyaSIsIGxpbmtVUkkuZ2V0KCksCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZpc2lvbiAxMTU0ODgpCisrKyBTb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQz
Myw3ICs0MzMsNyBAQCBzdGF0aWMgSW50UG9pbnQgZ2V0TG9jYXRpb25Gb3JLZXlib2FyZEdlCiAg
ICAgaWYgKCFzZWxlY3Rpb24tPnNlbGVjdGlvbigpLmlzTm9uT3JwaGFuZWRDYXJldE9yUmFuZ2Uo
KQogICAgICAgICAgfHwgKHNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuaXNDYXJldCgpICYmICFzZWxl
Y3Rpb24tPnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpKSB7CiAgICAgICAgIGlmIChO
b2RlKiBmb2N1c2VkTm9kZSA9IGdldEZvY3VzZWROb2RlKGZyYW1lKSkKLSAgICAgICAgICAgIHJl
dHVybiBmb2N1c2VkTm9kZS0+Z2V0UmVjdCgpLmxvY2F0aW9uKCk7CisgICAgICAgICAgICByZXR1
cm4gZm9jdXNlZE5vZGUtPmdldFBpeGVsU25hcHBlZFJlY3QoKS5sb2NhdGlvbigpOwogCiAgICAg
ICAgIC8vIFRoZXJlIHdhcyBubyBzZWxlY3Rpb24gYW5kIG5vIGZvY3VzZWQgbm9kZSwgc28ganVz
dCBwdXQgdGhlIGNvbnRleHQKICAgICAgICAgLy8gbWVudSBpbnRvIHRoZSBjb3JuZXIgb2YgdGhl
IHZpZXcsIG9mZnNldCBzbGlnaHRseS4KQEAgLTE2MDQsNyArMTYwNCw3IEBAIHN0YXRpYyBnYm9v
bGVhbiB3ZWJraXRfd2ViX3ZpZXdfcXVlcnlfdG8KICAgICAgICAgICAgICAgICBTdHJpbmcgdGl0
bGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4odGl0bGVOb2RlKS0+dGl0bGUoKTsKICAgICAgICAg
ICAgICAgICBpZiAoIXRpdGxlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAo
RnJhbWVWaWV3KiB2aWV3ID0gY29yZUZyYW1lLT52aWV3KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIEdka1JlY3RhbmdsZSBhcmVhID0gdmlldy0+Y29udGVudHNUb1dpbmRvdyhub2RlLT5n
ZXRSZWN0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgR2RrUmVjdGFuZ2xlIGFyZWEgPSB2
aWV3LT5jb250ZW50c1RvV2luZG93KG5vZGUtPmdldFBpeGVsU25hcHBlZFJlY3QoKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBndGtfdG9vbHRpcF9zZXRfdGlwX2FyZWEodG9vbHRpcCwgJmFy
ZWEpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGd0a190b29s
dGlwX3NldF90ZXh0KHRvb2x0aXAsIHRpdGxlLnV0ZjgoKS5kYXRhKCkpOwpJbmRleDogTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2
aXNpb24gMTE1NDg4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMTItMDQtMjMgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFttZXRhXSBTd2l0Y2ggYXdheSBmcm9tIGludGVnZXJzIHJlcHJl
c2VudGluZyBwaXhlbHMgZm9yIGxheW91dC9ldmVudCBoYW5kbGluZy9yZW5kZXJpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzE4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L3N1Yi1waXhl
bDogQWRkZWQuCisgICAgICAgICogZmFzdC9zdWItcGl4ZWwvY2xpZW50LXdpZHRoLWhlaWdodC1z
bmFwcGluZy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvc3ViLXBpeGVsL2Ns
aWVudC13aWR0aC1oZWlnaHQtc25hcHBpbmcuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9z
dWItcGl4ZWwvc2l6ZS1vZi1ib3gtd2l0aC16b29tLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3Qvc3ViLXBpeGVsL3NpemUtb2YtYm94LXdpdGgtem9vbS5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L3N1Yi1waXhlbC9sYXlvdXQtYm94ZXMtd2l0aC16b29tLWV4cGVjdGVk
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvc3ViLXBpeGVsL2xheW91dC1ib3hlcy13aXRo
LXpvb20uaHRtbDogQWRkZWQuCisKIDIwMTItMDQtMjcgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2Fy
bHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTg1MDM4CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9jbGllbnQt
d2lkdGgtaGVpZ2h0LXNuYXBwaW5nLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3N1Yi1waXhlbC9jbGllbnQtd2lkdGgtaGVpZ2h0LXNuYXBwaW5nLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVsL2NsaWVudC13
aWR0aC1oZWlnaHQtc25hcHBpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDYgQEAKK1BBU1MgZGl2LmNsaWVudFdpZHRoIGlzIDExCitQQVNTIGRpdi5jbGllbnRIZWlnaHQg
aXMgMTEKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9jbGllbnQtd2lkdGgtaGVpZ2h0LXNu
YXBwaW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwvY2xp
ZW50LXdpZHRoLWhlaWdodC1zbmFwcGluZy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9zdWItcGl4ZWwvY2xpZW50LXdpZHRoLWhlaWdodC1zbmFwcGluZy5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDIyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYv
L0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9
IlRlc3REaXYiIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDEwLjRweDsgdG9wOiAx
MC40cHg7IHdpZHRoOiAxMC40cHg7IGhlaWdodDogMTAuNHB4OyI+PC9kaXY+Cis8c2NyaXB0Pgor
Cit2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRlc3REaXYiKTsKKworc2hvdWxk
QmUoJ2Rpdi5jbGllbnRXaWR0aCcsICcxMScpOworc2hvdWxkQmUoJ2Rpdi5jbGllbnRIZWlnaHQn
LCAnMTEnKTsKKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVsL2xh
eW91dC1ib3hlcy13aXRoLXpvb20tZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3N1Yi1waXhlbC9sYXlvdXQtYm94ZXMtd2l0aC16b29tLWV4cGVjdGVkLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9sYXlvdXQtYm94ZXMt
d2l0aC16b29tLWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzkgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8dGl0bGU+bGF5b3V0IHpvb20gdGVz
dDwvdGl0bGU+CisgICAgPHN0eWxlPiAKKyAgICAgICAgI3Rlc3QgeworICAgICAgICAgICAgd2lk
dGg6IDUwMHB4OworICAgICAgICAgICAgaGVpZ2h0OiAxNTAwcHg7CisgICAgICAgICAgICBiYWNr
Z3JvdW5kOiBuYXZ5OworICAgICAgICAgICAgem9vbTogMC4yNTsKKyAgICAgICAgfQorICAgIDwv
c3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8ZGl2IGlkPSJ0ZXN0Ij48L2Rpdj4KKyAgICA8
ZGl2IGlkPSJjb25zb2xlIj4KKyAgICAgICAgVGhlIGJveCBhYm92ZSBzaG91bGQgYmUgbmF2eSBi
bHVlIHdpdGggbm8gYmFuZGluZyBlZmZlY3RzLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29t
IG9mIDEwMCUgYm90dG9tIGVkZ2Ugb2YgbGFzdCBjaGlsZCBsaW5lcyB1cCB3aXRoIGJvdHRvbSBl
ZGdlIG9mIGNvbnRhaW5lci48YnI+CisgICAgICAgIFBBU1M6IFdpdGggem9vbSBvZiAxMTAlIGJv
dHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0b20gZWRnZSBvZiBjb250
YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpvb20gb2YgMTI1JSBib3R0b20gZWRnZSBv
ZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4K
KyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDEzMyUgYm90dG9tIGVkZ2Ugb2YgbGFzdCBjaGls
ZCBsaW5lcyB1cCB3aXRoIGJvdHRvbSBlZGdlIG9mIGNvbnRhaW5lci48YnI+CisgICAgICAgIFBB
U1M6IFdpdGggem9vbSBvZiAxNTAlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAg
d2l0aCBib3R0b20gZWRnZSBvZiBjb250YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpv
b20gb2YgMTY2JSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9t
IGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDE3NSUg
Ym90dG9tIGVkZ2Ugb2YgbGFzdCBjaGlsZCBsaW5lcyB1cCB3aXRoIGJvdHRvbSBlZGdlIG9mIGNv
bnRhaW5lci48YnI+CisgICAgICAgIFBBU1M6IFdpdGggem9vbSBvZiAyMDAlIGJvdHRvbSBlZGdl
IG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0b20gZWRnZSBvZiBjb250YWluZXIuPGJy
PgorICAgICAgICBQQVNTOiBXaXRoIHpvb20gb2YgMjUwJSBib3R0b20gZWRnZSBvZiBsYXN0IGNo
aWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAg
UEFTUzogV2l0aCB6b29tIG9mIDMwMCUgYm90dG9tIGVkZ2Ugb2YgbGFzdCBjaGlsZCBsaW5lcyB1
cCB3aXRoIGJvdHRvbSBlZGdlIG9mIGNvbnRhaW5lci48YnI+CisgICAgICAgIFBBU1M6IFdpdGgg
em9vbSBvZiA0MDAlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0
b20gZWRnZSBvZiBjb250YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpvb20gb2YgNTAw
JSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2Yg
Y29udGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDkwJSBib3R0b20gZWRn
ZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxi
cj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDgwJSBib3R0b20gZWRnZSBvZiBsYXN0IGNo
aWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAg
UEFTUzogV2l0aCB6b29tIG9mIDc1JSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVw
IHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6
b29tIG9mIDY2JSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9t
IGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDUwJSBi
b3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29u
dGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDMzJSBib3R0b20gZWRnZSBv
ZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4K
KyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDI1JSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxk
IGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKzwvZGl2PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwvbGF5b3V0LWJv
eGVzLXdpdGgtem9vbS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvc3ViLXBp
eGVsL2xheW91dC1ib3hlcy13aXRoLXpvb20uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3Qvc3ViLXBpeGVsL2xheW91dC1ib3hlcy13aXRoLXpvb20uaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAg
IDx0aXRsZT5sYXlvdXQgem9vbSB0ZXN0PC90aXRsZT4KKyAgICA8c3R5bGU+IAorICAgICAgICAj
dGVzdCB7CisgICAgICAgICAgICB3aWR0aDogNTAwcHg7CisgICAgICAgICAgICBoZWlnaHQ6IDE1
MDBweDsKKyAgICAgICAgICAgIGJhY2tncm91bmQ6IHNreWJsdWU7CisgICAgICAgIH0KKyAgICAg
ICAgI3Rlc3QgPiBkaXYgeworICAgICAgICAgICAgYmFja2dyb3VuZDogbmF2eTsKKyAgICAgICAg
ICAgIGhlaWdodDogMTVweDsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9k
eT4KKyAgICA8ZGl2IGlkPSJ0ZXN0Ij48L2Rpdj4KKyAgICA8ZGl2IGlkPSJjb25zb2xlIj4KKyAg
ICAgICAgVGhlIGJveCBhYm92ZSBzaG91bGQgYmUgbmF2eSBibHVlIHdpdGggbm8gYmFuZGluZyBl
ZmZlY3RzLjxicj4KKyAgICA8L2Rpdj4KKzwvYm9keT4KKzxzY3JpcHQ+CisgICAgdmFyIHRlc3RF
bGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QnKTsKKyAgICB2YXIgY29uc29s
ZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpOworCisgICAgZnVu
Y3Rpb24gaW5pdCgpCisgICAgeworICAgICAgICB0ZXN0RWxlbWVudC5pbm5lckhUTUwgPSAnJzsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICAgICAgICAgIHRlc3RF
bGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiB0ZXN0KHpvb20pCisgICAgeworICAgICAgICB0ZXN0RWxlbWVudC5z
dHlsZS56b29tID0gem9vbSArICclJzsKKyAgICAgICAgCisgICAgICAgIHZhciBsYXN0RWxlbWVu
dEJvdHRvbSA9IHRlc3RFbGVtZW50Lmxhc3RDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5i
b3R0b207CisgICAgICAgIHZhciBjb250YWluZXJCb3R0b20gPSB0ZXN0RWxlbWVudC5nZXRCb3Vu
ZGluZ0NsaWVudFJlY3QoKS5ib3R0b207CisgICAgICAgIGlmIChNYXRoLmFicyhsYXN0RWxlbWVu
dEJvdHRvbSAtIGNvbnRhaW5lckJvdHRvbSkgPCAwLjAxKQorICAgICAgICAgICAgbG9nKCdQQVNT
OiBXaXRoIHpvb20gb2YgJyArIHpvb20gKyAnJSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxp
bmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLicpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBsb2coJ0ZBSUw6IFdpdGggem9vbSBvZiAnICsgem9vbSArICclIGJvdHRvbSBl
ZGdlIG9mIGxhc3QgY2hpbGQgYXQgJyArIGxhc3RFbGVtZW50Qm90dG9tICsgJywgY29udGFpbmVy
IGF0ICcgKyBjb250YWluZXJCb3R0b20gKyAnLicpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGxv
ZyhzdHIpCisgICAgeworICAgICAgICBjb25zb2xlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZShzdHIpKTsKKyAgICAgICAgY29uc29sZUVsZW1lbnQuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7CisgICAgfQorCisgICAgaW5pdCgpOwor
ICAgIHRlc3QoMTAwKTsKKyAgICB0ZXN0KDExMCk7CisgICAgdGVzdCgxMjUpOworICAgIHRlc3Qo
MTMzKTsKKyAgICB0ZXN0KDE1MCk7CisgICAgdGVzdCgxNjYpOworICAgIHRlc3QoMTc1KTsKKyAg
ICB0ZXN0KDIwMCk7CisgICAgdGVzdCgyNTApOworICAgIHRlc3QoMzAwKTsKKyAgICB0ZXN0KDQw
MCk7CisgICAgdGVzdCg1MDApOworICAgIHRlc3QoOTApOworICAgIHRlc3QoODApOworICAgIHRl
c3QoNzUpOworICAgIHRlc3QoNjYpOworICAgIHRlc3QoNTApOworICAgIHRlc3QoMzMpOworICAg
IHRlc3QoMjUpOworPC9zY3JpcHQ+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3N1
Yi1waXhlbC9zaXplLW9mLWJveC13aXRoLXpvb20tZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9zaXplLW9mLWJveC13aXRoLXpvb20tZXhwZWN0
ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVsL3NpemUt
b2YtYm94LXdpdGgtem9vbS1leHBlY3RlZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPnNpemUgb2Yg
Ym94IHpvb20gdGVzdDwvdGl0bGU+CisgICAgPHN0eWxlPgorICAgICAgICBib2R5IHsKKyAgICAg
ICAgICAgIGJhY2tncm91bmQ6IHNpbHZlcjsKKyAgICAgICAgfQorICAgICAgICAjY29udGFpbmVy
IHsKKyAgICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOworICAgICAgICAgICAgd2lkdGg6IDUw
MHB4OworICAgICAgICAgICAgaGVpZ2h0OiA1MHB4OworICAgICAgICB9CisgICAgICAgICNydWxl
ciA+IGRpdiB7CisgICAgICAgICAgICBmbG9hdDogbGVmdDsKKyAgICAgICAgICAgIHdpZHRoOiA0
OXB4OworICAgICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgYmxhY2s7CisgICAgICAg
ICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgIGhlaWdodDogNTBweDsKKyAgICAg
ICAgfQorICAgICAgICAjdGVzdCB7CisgICAgICAgICAgICBjbGVhcjogbGVmdDsKKyAgICAgICAg
ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgICAgIHRvcDogMzBweDsKKyAgICAgICAg
fQorICAgICAgICAjdGVzdCA+IGRpdiB7CisgICAgICAgICAgICBjbGVhcjogbGVmdDsKKyAgICAg
ICAgfQorICAgICAgICAjdGVzdCA+IGRpdiA+IGRpdiB7CisgICAgICAgICAgICBmbG9hdDogbGVm
dDsKKyAgICAgICAgICAgIHdpZHRoOiA1MDBweDsKKyAgICAgICAgICAgIGhlaWdodDogMTBweDsK
KyAgICAgICAgICAgIGJhY2tncm91bmQ6IG5hdnk7CisgICAgICAgIH0KKyAgICAgICAgI2NvbnNv
bGUgeworICAgICAgICAgICAgY2xlYXI6IGxlZnQ7CisgICAgICAgIH0KKyAgICA8L3N0eWxlPgor
PC9oZWFkPgorPGJvZHk+CisgICAgPGRpdiBpZD0iY29udGFpbmVyIj4KKyAgICAgICAgPGRpdiBp
ZD0icnVsZXIiPjwvZGl2PgorICAgICAgICA8ZGl2IGlkPSJ0ZXN0Ij48ZGl2PjwvZGl2PjwvZGl2
PgorICAgIDwvZGl2PgorPC9ib2R5PgorPHNjcmlwdD4KKyAgICB2YXIgdGVzdENvbnRhaW5lciA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0Jyk7CisgICAgdmFyIHJ1bGVyRWxlbWVudCA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdydWxlcicpOworCisgICAgZnVuY3Rpb24gaW5pdCgp
CisgICAgeworICAgICAgICBydWxlckVsZW1lbnQuaW5uZXJIVE1MID0gJyc7CisgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykgeworICAgICAgICAgICAgcnVsZXJFbGVtZW50LmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgICAgIHJ1
bGVyRWxlbWVudC5sYXN0Q2hpbGQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
NTAgKyBpICogNTApKTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgZnVuY3Rpb24gdGVzdCh6
b29tKQorICAgIHsKKyAgICAgICAgdmFyIHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnZGl2Jyk7CisgICAgICAgIHRlc3RFbGVtZW50LnN0eWxlLnpvb20gPSB6b29tICsgJyUn
OworICAgICAgICB0ZXN0RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdkaXYnKSk7CisgICAgICAgIHRlc3RDb250YWluZXIuYXBwZW5kQ2hpbGQodGVzdEVsZW1lbnQp
OworICAgIH0KKworICAgIGluaXQoKTsKKyAgICB0ZXN0KDEwMCk7CisgICAgdGVzdCg2Nik7Cisg
ICAgdGVzdCgzMyk7CisKKzwvc2NyaXB0PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9zdWItcGl4ZWwvc2l6ZS1vZi1ib3gtd2l0aC16b29tLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwvc2l6ZS1vZi1ib3gtd2l0aC16b29tLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9zaXplLW9mLWJveC13aXRoLXpv
b20uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5zaXplIG9mIGJveCB6b29tIHRlc3Q8L3RpdGxlPgor
ICAgIDxzdHlsZT4KKyAgICAgICAgYm9keSB7CisgICAgICAgICAgICBiYWNrZ3JvdW5kOiBzaWx2
ZXI7CisgICAgICAgIH0KKyAgICAgICAgI2NvbnRhaW5lciB7CisgICAgICAgICAgICBiYWNrZ3Jv
dW5kOiB3aGl0ZTsKKyAgICAgICAgICAgIHdpZHRoOiA1MDBweDsKKyAgICAgICAgICAgIGhlaWdo
dDogNTBweDsKKyAgICAgICAgfQorICAgICAgICAjcnVsZXIgPiBkaXYgeworICAgICAgICAgICAg
ZmxvYXQ6IGxlZnQ7CisgICAgICAgICAgICB3aWR0aDogNDlweDsKKyAgICAgICAgICAgIGJvcmRl
ci1yaWdodDogMXB4IHNvbGlkIGJsYWNrOworICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7
CisgICAgICAgICAgICBoZWlnaHQ6IDUwcHg7CisgICAgICAgIH0KKyAgICAgICAgI3Rlc3Qgewor
ICAgICAgICAgICAgY2xlYXI6IGxlZnQ7CisgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7
CisgICAgICAgICAgICB0b3A6IDMwcHg7CisgICAgICAgIH0KKyAgICAgICAgI3Rlc3QgPiBkaXYg
eworICAgICAgICAgICAgY2xlYXI6IGxlZnQ7CisgICAgICAgIH0KKyAgICAgICAgI3Rlc3QgPiBk
aXYgPiBkaXYgeworICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7CisgICAgICAgICAgICB3aWR0aDog
NXB4OworICAgICAgICAgICAgaGVpZ2h0OiAxMHB4OworICAgICAgICAgICAgYmFja2dyb3VuZDog
bmF2eTsKKyAgICAgICAgfQorICAgICAgICAjY29uc29sZSB7CisgICAgICAgICAgICBjbGVhcjog
bGVmdDsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8ZGl2
IGlkPSJjb250YWluZXIiPgorICAgICAgICA8ZGl2IGlkPSJydWxlciI+PC9kaXY+CisgICAgICAg
IDxkaXYgaWQ9InRlc3QiPjxkaXY+PC9kaXY+PC9kaXY+CisgICAgPC9kaXY+Cis8L2JvZHk+Cis8
c2NyaXB0PgorICAgIHZhciB0ZXN0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3Rlc3QnKTsKKyAgICB2YXIgcnVsZXJFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3J1bGVyJyk7CisKKyAgICBmdW5jdGlvbiBpbml0KCkKKyAgICB7CisgICAgICAgIHJ1bGVyRWxl
bWVudC5pbm5lckhUTUwgPSAnJzsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsr
KSB7CisgICAgICAgICAgICBydWxlckVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2JykpOworICAgICAgICAgICAgcnVsZXJFbGVtZW50Lmxhc3RDaGlsZC5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSg1MCArIGkgKiA1MCkpOworICAgICAgICB9
CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdCh6b29tKQorICAgIHsKKyAgICAgICAgdmFyIHRl
c3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIHRlc3RF
bGVtZW50LnN0eWxlLnpvb20gPSB6b29tICsgJyUnOworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDsgaSsrKQorICAgICAgICAgICAgdGVzdEVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICB0ZXN0Q29udGFpbmVyLmFwcGVuZENo
aWxkKHRlc3RFbGVtZW50KTsKKyAgICB9CisKKyAgICBpbml0KCk7CisgICAgdGVzdCgxMDApOwor
ICAgIHRlc3QoNjYpOworICAgIHRlc3QoMzMpOworCis8L3NjcmlwdD4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139897</attachid>
            <date>2012-05-02 15:49:42 -0700</date>
            <delta_ts>2012-05-03 11:15:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60318-20120502154941.patch</filename>
            <type>text/plain</type>
            <size>54082</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNTg4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDEyLTA1LTAyICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4gYW5kIEVtaWwgQSBFa2x1bmQgPGVhZUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgW21ldGFdIFN3aXRjaCBhd2F5IGZyb20gaW50ZWdlcnMgcmVw
cmVzZW50aW5nIHBpeGVscyBmb3IgbGF5b3V0L2V2ZW50IGhhbmRsaW5nL3JlbmRlcmluZworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMTgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTd2FwcGluZyB0aGUg
TGF5b3V0VW5pdCBiYWNrZW5kIHRvIEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyb20gaW50LgorICAg
ICAgICAKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgaXMgYSBuZXcgdHlwZSB0aGF0IHVz
ZXMgYW4gaW50ZWdlciB0aGF0IGNhbiByZXByZXNlbnQgYSBmcmFjdGlvbiBvZiBhCisgICAgICAg
IHBpeGVsLiBUaGUgRU5BQkxFX1NVQlBJWEVMX0xBWU9VVCBmZWF0dXJlIGZsYWdzIHRvZ2dsZXMg
dGhpcyBmcmFjdGlvbiBiZXR3ZWVuIDEvMSBhbmQgMS82MC4KKyAgICAgICAgSW5pdGlhbGx5LCBh
bGwgcGxhdGZvcm1zIHdpbGwgZGVmYXVsdCB0byBzdWJwaXhlbCBsYXlvdXQgYmVpbmcgb2ZmLCBz
byBGcmFjdGlvbmFsTGF5b3V0VW5pdHMKKyAgICAgICAgd2lsbCBlZmZlY3RpdmVseSBjb250aW51
ZSB0byBhY3QgYXMgaW50ZWdlcnMuCisgICAgICAgIAorICAgICAgICBXaXRoIEVOQUJMRV9TVUJQ
SVhFTF9MQVlPVVQgdHVybmVkIG9uLCBGcmFjdGlvbmFsTGF5b3V0VW5pdHMgYWNjdW11bGF0ZSBl
cnJvciBmcm9tIHN1Yi1waXhlbAorICAgICAgICBDU1MgdmFsdWVzIGFuZCBhcHBsaWVkIHpvb21p
bmcsIGFuZCBwYWludGluZyB1c2VzIHBpeGVsLXNuYXBwaW5nIHRvIGFsaWduIHRoZXNlIHZhbHVl
cworICAgICAgICB0byBwaXhlbHMgYW5kIHByZXZlbnQgdW53YW50ZWQgYW50aS1hbGlhc2luZy4g
U2VlIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvd2lraS9MYXlvdXRVbml0IGZvcgorICAgICAgICBk
ZXRhaWxzLgorCisgICAgICAgIEluIGEgbnVtYmVyIG9mIHByZXZpb3VzIHBhdGNoZXMsIExheW91
dFVuaXRzIHdlcmUgcGx1bWJlZCB0aHJvdWdob3V0IHRoZSByZW5kZXJpbmcgdHJlZSB0bworICAg
ICAgICBwcmVwYXJlIGZvciB0aGlzIGNoYW5nZS4gVGhpcyBpbmNsdWRlZCBhIG51bWJlciBvZiBm
dW5jdGlvbnMgaW4gTGF5b3V0VHlwZXMuaCBhbmQgdGhlCisgICAgICAgIEludFJlY3QvUG9pbnQv
U2l6ZSBjbGFzc2VzIHRoYXQgd2VyZSBlZmZlY3RpdmVseSBuby1vcHMgd2hpbGUgTGF5b3V0VW5p
dHMgd2VyZSBpbnRlZ2Vycy4gU2VlCisgICAgICAgIGh0dHA6Ly93ZWJraXQub3JnL2IvNjAzMTgg
Zm9yIHRoZSBleGhhdXN0aXZlIGxpc3Qgb2YgY2hhbmdlcyB0aGF0IHdlcmUgZG9uZSBpbiBwcmVw
YXJhdGlvbgorICAgICAgICBmb3IgdGhpcy4gU3Vic2VxdWVudCBwYXRjaGVzIHdpbGwgcmVtb3Zl
IHVubmVjZXNzYXJ5IHZlcnNpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucy4KKyAgICAgICAgaHR0cDov
L3dlYmtpdC5vcmcvYi84NDYxNiB0cmFja3MgdGhlc2UgY2hhbmdlcy4KKworICAgICAgICBUZXN0
czogZmFzdC9zdWItcGl4ZWwvY2xpZW50LXdpZHRoLWhlaWdodC1zbmFwcGluZy5odG1sCisgICAg
ICAgICAgICAgICBmYXN0L3N1Yi1waXhlbC9sYXlvdXQtYm94ZXMtd2l0aC16b29tLmh0bWwKKyAg
ICAgICAgICAgICAgIGZhc3Qvc3ViLXBpeGVsL3NpemUtb2YtYm94LXdpdGgtem9vbS5odG1sCisK
KyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjogVXBkYXRpbmcgZnVuY3Rpb24gc2lnbmF0dXJlcyB0
aGF0IGV4cG9zZSBGcmFjdGlvbmFsTGF5b3V0VW5pdHMuCisgICAgICAgICogV2ViQ29yZS5vcmRl
cjogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBB
ZGRpbmcgbWlzc2luZyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCBoZWFkZXIuCisgICAgICAgICog
Y3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2
ZVZhbHVlOjpjb21wdXRlTGVuZ3RoKTogTm8gbG9uZ2VyIHJvdW5kcyBmb3IgaW1wcmVjaXNlIGNv
bnZlcnNpb24KKyAgICAgICAgd2hlbiBzdWItcGl4ZWwgbGF5b3V0IGlzIGVuYWJsZWQuCisgICAg
ICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0Rm9yTG9jYWxa
b29tKTogVXNpbmcgcm91bmRpbmcgaW5zdGVhZCBvZiBpbmNyZW1lbnRpbmcgdGhlIHZhbHVlIGJl
Zm9yZQorICAgICAgICBhZGp1c3RpbmcgdG8gYWNjb3VudCBmb3IgdHJ1bmNhdGlvbiB3aGVuIHN1
Yi1waXhlbCBsYXlvdXQgaXMgZW5hYmxlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0VHlw
ZXMuaDogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBhY3R1YWwgc3dpdGNoIGZvciBjaGFuZ2luZyBM
YXlvdXRVbml0cworICAgICAgICB0byBiZSBGcmFjdGlvbmFsTGF5b3V0VW5pdHMuIEFsc28gdXBk
YXRpbmcgc3R1YiBtZXRob2RzIHdpdGggdGhlaXIgcHJvcGVyIGltcGxlbWVudGF0aW9ucy4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUGFpbnRJbmZvLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWludElu
Zm86OmluZmluaXRlUmVjdCk6IEVuc3VyaW5nIHRoZSBpbmZpbml0ZVJlY3QgZG9lc24ndCBvdmVy
ZmxvdyB0aGUKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgYm91bmRzLiBMYXlvdXRSZWN0
OjppbmZpbml0ZVJlY3QoKSBpcyB0aGUgbGFyZ2VzdCByZWN0YW5nbGUgdGhhdCBjYW4KKyAgICAg
ICAgYmUgcmVwcmVzZW50ZWQgdXNpbmcgTGF5b3V0VW5pdHMuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDbGlwUmVjdDo6b3BlcmF0b3IhPSk6
IEFkZCBvdmVybG9hZCBvZiAhPSB0byBmaXggY29tcGxhaW5pbmcgY29tcGlsZXJzIHdoZW4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6IEFkZGluZyBjb2RlIHRvIG1p
bmltaXplIHRlc3QgZXhwZWN0YXRpb24gY2h1cm4uIEl0CisgICAgICAgIG1heSBiZSB3b3J0aCBv
dXRwdXR0aW5nIGZsb2F0IHZhbHVlcyBpbiB0ZXN0IGV4cGVjdGF0aW9ucywgYnV0IHRoaXMgaXNu
J3QgZG9uZSB3aXRoCisgICAgICAgIHRoZSBpbmxpbmUgYm94IHRyZWUgeWV0LCBlaXRoZXIuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuaDoKKyAgICAgICAgKFdlYkNvcmUp
OiBBZGRpbmcgYSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgb3BlcmF0b3IuCisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ondy
aXRlUG9zaXRpb25BbmRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlKTogQWRkaW5nIGEgRnJhY3Rp
b25hbExheW91dFBvaW50IG9wZXJhdG9yLgorCiAyMDEyLTA1LTAyICBLZWl0aCBSb3NlbmJsYXR0
ICA8a2VpdGgucm9zZW5ibGF0dEBub2tpYS5jb20+CiAKICAgICAgICAgW1F0XSBBU1NFUlQgaW4g
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YVF0LmNwcCB3aXRoIGludmFsaWQgZm9udCBpbiBkYXRhIFVS
SQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDExNTg3OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsNyArMjIwLDcgQEAg
X19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTEzc2V0Q2FwYWNpdGllcwogX19aTjdXZWJDb3JlMTFN
ZW1vcnlDYWNoZTE0ZXZpY3RSZXNvdXJjZXNFdgogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTE5
Z2V0T3JpZ2luc1dpdGhDYWNoZUVSTjNXVEY3SGFzaFNldElOUzFfNlJlZlB0cklOU18xNFNlY3Vy
aXR5T3JpZ2luRUVFTlNfMThTZWN1cml0eU9yaWdpbkhhc2hFTlMxXzEwSGFzaFRyYWl0c0lTNV9F
RUVFCiBfX1pON1dlYkNvcmUxMU1lbW9yeUNhY2hlMjVyZW1vdmVSZXNvdXJjZXNXaXRoT3JpZ2lu
RVBOU18xNFNlY3VyaXR5T3JpZ2luRQotX19aTjdXZWJDb3JlMTJSZW5kZXJPYmplY3QxOXNjcm9s
bFJlY3RUb1Zpc2libGVFUktOU183SW50UmVjdEVSS05TXzE1U2Nyb2xsQWxpZ25tZW50RVM2Xwor
X19aTjdXZWJDb3JlMTFSZW5kZXJMYXllcjE5c2Nyb2xsUmVjdFRvVmlzaWJsZUVSS05TXzIwRnJh
Y3Rpb25hbExheW91dFJlY3RFUktOU18xNVNjcm9sbEFsaWdubWVudEVTNl8KIF9fWk43V2ViQ29y
ZTExVVJMV2l0aERhdGFFUDZOU0RhdGFQNU5TVVJMCiBfX1pON1dlYkNvcmUxMWdsb2JhbFBvaW50
RVJLOF9OU1BvaW50UDhOU1dpbmRvdwogX19aTjdXZWJDb3JlMTFtZW1vcnlDYWNoZUV2CkBAIC0y
MzgsNyArMjM4LDcgQEAgX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxNHNjcm9sbE92ZXJmbAog
X19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxNWhhbmRsZUFjY2Vzc0tleUVSS05TXzIxUGxhdGZv
cm1LZXlib2FyZEV2ZW50RQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxNmhhbmRsZVdoZWVs
RXZlbnRFUktOU18xOFBsYXRmb3JtV2hlZWxFdmVudEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5k
bGVyMTdzY3JvbGxSZWN1cnNpdmVseUVOU18xNVNjcm9sbERpcmVjdGlvbkVOU18xN1Njcm9sbEdy
YW51bGFyaXR5RVBOU180Tm9kZUUKLV9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBoaXRUZXN0
UmVzdWx0QXRQb2ludEVSS05TXzhJbnRQb2ludEViYk5TXzE3SGl0VGVzdFNjcm9sbGJhcnNFalJL
TlNfN0ludFNpemVFCitfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIwaGl0VGVzdFJlc3VsdEF0
UG9pbnRFUktOU18yMUZyYWN0aW9uYWxMYXlvdXRQb2ludEViYk5TXzE3SGl0VGVzdFNjcm9sbGJh
cnNFalJLTlNfMjBGcmFjdGlvbmFsTGF5b3V0U2l6ZUUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5k
bGVyMjFoYW5kbGVNb3VzZVByZXNzRXZlbnRFUktOU18xOFBsYXRmb3JtTW91c2VFdmVudEUKIF9f
Wk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjNoYW5kbGVNb3VzZVJlbGVhc2VFdmVudEVSS05TXzE4
UGxhdGZvcm1Nb3VzZUV2ZW50RQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyNGxvZ2ljYWxT
Y3JvbGxSZWN1cnNpdmVseUVOU18yMlNjcm9sbExvZ2ljYWxEaXJlY3Rpb25FTlNfMTdTY3JvbGxH
cmFudWxhcml0eUVQTlNfNE5vZGVFCkBAIC0yNjgsNyArMjY4LDggQEAgX19aTjdXZWJDb3JlMTJQ
cmludENvbnRleHQ5c3Bvb2xQYWdlRVJOUwogX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQ5c3Bv
b2xSZWN0RVJOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdJbnRSZWN0RQogX19aTjdXZWJDb3Jl
MTJQcmludENvbnRleHRDMUVQTlNfNUZyYW1lRQogX19aTjdXZWJDb3JlMTJQcmludENvbnRleHRE
MUV2Ci1fX1pON1dlYkNvcmUxMlJlbmRlck9iamVjdDE2cmVwYWludFJlY3RhbmdsZUVSS05TXzdJ
bnRSZWN0RWIKK19fWk43V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTZyZXBhaW50UmVjdGFuZ2xlRVJL
TlNfMjBGcmFjdGlvbmFsTGF5b3V0UmVjdEViCitfX1pON1dlYkNvcmUxMlJlbmRlck9iamVjdDE5
c2Nyb2xsUmVjdFRvVmlzaWJsZUVSS05TXzIwRnJhY3Rpb25hbExheW91dFJlY3RFUktOU18xNVNj
cm9sbEFsaWdubWVudEVTNl8KIF9fWk43V2ViQ29yZTEyUmVuZGVyV2lkZ2V0MjhyZXN1bWVXaWRn
ZXRIaWVyYXJjaHlVcGRhdGVzRXYKIF9fWk43V2ViQ29yZTEyUmVuZGVyV2lkZ2V0MjlzdXNwZW5k
V2lkZ2V0SGllcmFyY2h5VXBkYXRlc0V2CiBfX1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjEwd3Jh
cENGRGF0YUVQSzhfX0NGRGF0YQpAQCAtNTI3LDYgKzUyOCw3IEBAIF9fWk43V2ViQ29yZTE2Y3Jl
YXRlRnVsbE1hcmt1cEVQS05TXzVSYW4KIF9fWk43V2ViQ29yZTE2ZGVsZXRlQWxsQ29va2llc0V2
CiBfX1pON1dlYkNvcmUxNmVuY2xvc2luZ0ludFJlY3RFUks3X05TUmVjdAogX19aTjdXZWJDb3Jl
MTZlbmNsb3NpbmdJbnRSZWN0RVJLTlNfOUZsb2F0UmVjdEUKK19fWk43V2ViQ29yZTE2ZW5jbG9z
aW5nSW50UmVjdEVSS05TXzIwRnJhY3Rpb25hbExheW91dFJlY3RFCiBfX1pON1dlYkNvcmUxNmlz
RW5kT2ZQYXJhZ3JhcGhFUktOU18xNVZpc2libGVQb3NpdGlvbkVOU18yN0VkaXRpbmdCb3VuZGFy
eUNyb3NzaW5nUnVsZUUKIF9fWk43V2ViQ29yZTE2aXNVc2VyVmlzaWJsZVVSTEVQOE5TU3RyaW5n
CiBfX1pON1dlYkNvcmUxNnNjcmlwdE5hbWVUb0NvZGVFUktOM1dURjZTdHJpbmdFCkBAIC02MDUs
NiArNjA3LDcgQEAgX19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVyNmRlY29kZQogX19a
TjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVyQzFFUktOM1dURjZTdHJpbmdFUktOU18xMlRl
eHRFbmNvZGluZ0ViCiBfX1pON1dlYkNvcmUxOVRleHRSZXNvdXJjZURlY29kZXJEMUV2CiBfX1pO
N1dlYkNvcmUxOWFwcGxpY2F0aW9uSXNTYWZhcmlFdgorX19aTjdXZWJDb3JlMTlwaXhlbFNuYXBw
ZWRJbnRSZWN0RVJLTlNfMjBGcmFjdGlvbmFsTGF5b3V0UmVjdEUKIF9fWk43V2ViQ29yZTIwRGlj
dGF0aW9uQWx0ZXJuYXRpdmVDMUVqankKIF9fWk43V2ViQ29yZTIwRGljdGF0aW9uQWx0ZXJuYXRp
dmVDMUV2CiBfX1pON1dlYkNvcmUyMERpc3BsYXlTbGVlcERpc2FibGVyQzFFUEtjCkBAIC04Mzcs
OCArODQwLDggQEAgX19aTjdXZWJDb3JlNUZyYW1lMTNyYW5nZUZvclBvaW50RVJLTlNfOAogX19a
TjdXZWJDb3JlNUZyYW1lMTRmcmFtZUZvcldpZGdldEVQS05TXzZXaWRnZXRFCiBfX1pON1dlYkNv
cmU1RnJhbWUxN3NldFBhZ2Vab29tRmFjdG9yRWYKIF9fWk43V2ViQ29yZTVGcmFtZTE3c2V0VGV4
dFpvb21GYWN0b3JFZgotX19aTjdXZWJDb3JlNUZyYW1lMjN2aXNpYmxlUG9zaXRpb25Gb3JQb2lu
dEVSS05TXzhJbnRQb2ludEUKIF9fWk43V2ViQ29yZTVGcmFtZTI0c2VhcmNoRm9yTGFiZWxzQWJv
dmVDZWxsRVBOU18xN1JlZ3VsYXJFeHByZXNzaW9uRVBOU18yMEhUTUxUYWJsZUNlbGxFbGVtZW50
RVBtCitfX1pON1dlYkNvcmU1RnJhbWUyM3Zpc2libGVQb3NpdGlvbkZvclBvaW50RVJLTlNfOElu
dFBvaW50RQogX19aTjdXZWJDb3JlNUZyYW1lMjVzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzRWZm
CiBfX1pON1dlYkNvcmU1RnJhbWUyN3Jlc2l6ZVBhZ2VSZWN0c0tlZXBpbmdSYXRpb0VSS05TXzlG
bG9hdFNpemVFUzNfCiBfX1pON1dlYkNvcmU1RnJhbWU2Y3JlYXRlRVBOU180UGFnZUVQTlNfMjFI
VE1MRnJhbWVPd25lckVsZW1lbnRFUE5TXzE3RnJhbWVMb2FkZXJDbGllbnRFCkBAIC04NTMsNyAr
ODU2LDYgQEAgX19aTjdXZWJDb3JlNVJhbmdlMTRpc1BvaW50SW5SYW5nZUVQTlNfNAogX19aTjdX
ZWJDb3JlNVJhbmdlNmNyZWF0ZUVOM1dURjEwUGFzc1JlZlB0cklOU184RG9jdW1lbnRFRUVOUzJf
SU5TXzROb2RlRUVFaVM2X2kKIF9fWk43V2ViQ29yZTVSYW5nZTZzZXRFbmRFTjNXVEYxMFBhc3NS
ZWZQdHJJTlNfNE5vZGVFRUVpUmkKIF9fWk43V2ViQ29yZTVSYW5nZThzZXRTdGFydEVOM1dURjEw
UGFzc1JlZlB0cklOU180Tm9kZUVFRWlSaQotX19aTjdXZWJDb3JlNVJhbmdlOXRleHRSZWN0c0VS
TjNXVEY2VmVjdG9ySU5TXzdJbnRSZWN0RUxtMEVFRWJQTlMwXzIwUmFuZ2VJbkZpeGVkUG9zaXRp
b25FCiBfX1pON1dlYkNvcmU1UmFuZ2VEMUV2CiBfX1pON1dlYkNvcmU2Q2hyb21lMTZzZXRTdGF0
dXNiYXJUZXh0RVBOU181RnJhbWVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmU2Q2hyb21l
NXByaW50RVBOU181RnJhbWVFCkBAIC0xMDYxLDEwICsxMDYzLDExIEBAIF9fWk43V2ViQ29yZThv
cGVuRmlsZUVSS04zV1RGNlN0cmluZ0VOU18KIF9fWk43V2ViQ29yZTh0b1N0cmluZ0VSS04zV1RG
NlZlY3RvcklOU18xMVByb3h5U2VydmVyRUxtMEVFRQogX19aTjdXZWJDb3JlOURPTVdpbmRvdzMw
ZGlzcGF0Y2hBbGxQZW5kaW5nVW5sb2FkRXZlbnRzRXYKIF9fWk43V2ViQ29yZTlET01XaW5kb3cz
NmRpc3BhdGNoQWxsUGVuZGluZ0JlZm9yZVVubG9hZEV2ZW50c0V2Ci1fX1pON1dlYkNvcmU5Rmxv
YXRSZWN0QzFFUks2Q0dSZWN0CiBfX1pON1dlYkNvcmU5RmxvYXRSZWN0QzFFUks3X05TUmVjdAor
X19aTjdXZWJDb3JlOUZsb2F0UmVjdEMxRVJLTlNfMjBGcmFjdGlvbmFsTGF5b3V0UmVjdEUKIF9f
Wk43V2ViQ29yZTlGbG9hdFJlY3RDMUVSS05TXzdJbnRSZWN0RQogX19aTjdXZWJDb3JlOUZsb2F0
U2l6ZUMxRVJLTlNfN0ludFNpemVFCitfX1pON1dlYkNvcmU5RmxvYXRTaXplQzFFUktOU18yMEZy
YWN0aW9uYWxMYXlvdXRTaXplRQogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTEzZm9udERhdGFDb3Vu
dEV2CiBfX1pON1dlYkNvcmU5Rm9udENhY2hlMjFpbmFjdGl2ZUZvbnREYXRhQ291bnRFdgogX19a
TjdXZWJDb3JlOUZvbnRDYWNoZTIxcHVyZ2VJbmFjdGl2ZUZvbnREYXRhRWkKQEAgLTEwNzUsMTAg
KzEwNzgsOCBAQCBfX1pON1dlYkNvcmU5RnJhbWVUcmVlOWNsZWFyTmFtZUV2CiBfX1pON1dlYkNv
cmU5RnJhbWVWaWV3MTFmb3JjZUxheW91dEViCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTJzZXRN
ZWRpYVR5cGVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTRhZGp1c3RW
aWV3U2l6ZUV2Ci1fX1pON1dlYkNvcmU5RnJhbWVWaWV3MTRzZXRNYXJnaW5XaWR0aEVpCiBfX1pO
N1dlYkNvcmU5RnJhbWVWaWV3MTRzZXROZWVkc0xheW91dEV2CiBfX1pON1dlYkNvcmU5RnJhbWVW
aWV3MTRzZXRUcmFuc3BhcmVudEViCi1fX1pON1dlYkNvcmU5RnJhbWVWaWV3MTVzZXRNYXJnaW5I
ZWlnaHRFaQogX19aTjdXZWJDb3JlOUZyYW1lVmlldzE2c2V0UGFpbnRCZWhhdmlvckVqCiBfX1pO
N1dlYkNvcmU5RnJhbWVWaWV3MTdhZGRTY3JvbGxhYmxlQXJlYUVQTlNfMTRTY3JvbGxhYmxlQXJl
YUUKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcxN3BhaW50Q29udHJvbFRpbnRzRXYKQEAgLTE1MTAs
NiArMTUxMSw4IEBAIF9fWk5LN1dlYkNvcmU4UG9zaXRpb24yNWxlYWRpbmdXaGl0ZXNwYWMKIF9f
Wk5LN1dlYkNvcmU4UG9zaXRpb24yNnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uRU5TXzlFQWZm
aW5pdHlFYgogX19aTks3V2ViQ29yZThQb3NpdGlvbjh1cHN0cmVhbUVOU18yN0VkaXRpbmdCb3Vu
ZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk5LN1dlYkNvcmU5RE9NV2luZG93MjdwZW5kaW5nVW5sb2Fk
RXZlbnRMaXN0ZW5lcnNFdgorX19aTks3V2ViQ29yZTVSYW5nZTl0ZXh0UXVhZHNFUk4zV1RGNlZl
Y3RvcklOU185RmxvYXRRdWFkRUxtMEVFRWJQTlMwXzIwUmFuZ2VJbkZpeGVkUG9zaXRpb25FCitf
X1pOSzdXZWJDb3JlOUZsb2F0U2l6ZTZpc1plcm9FdgogX19aTks3V2ViQ29yZTlGbG9hdFF1YWQx
MWJvdW5kaW5nQm94RXYKIF9fWk5LN1dlYkNvcmU5RmxvYXRSZWN0MTBpbnRlcnNlY3RzRVJLUzBf
CiBfX1pOSzdXZWJDb3JlOUZsb2F0UmVjdGN2N19OU1JlY3RFdgpJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5vcmRlcgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9y
ZGVyCShyZXZpc2lvbiAxMTU4NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVyCSh3
b3JraW5nIGNvcHkpCkBAIC0zNTA4LDcgKzM1MDgsNiBAQCBfX1pON1dlYkNvcmUxMFJlbmRlclRl
eHQxM3JlbW92ZVRleHRCb3hFCiBfX1pON1dlYkNvcmUxM1Jvb3RJbmxpbmVCb3gyOXJlbW92ZUxp
bmVCb3hGcm9tUmVuZGVyT2JqZWN0RXYKIF9fWk43V2ViQ29yZTE3UmVuZGVyTGluZUJveExpc3Qx
M3JlbW92ZUxpbmVCb3hFUE5TXzEzSW5saW5lRmxvd0JveEUKIF9fWk5LN1dlYkNvcmUxMVJlbmRl
ckJsb2NrMjBhZGp1c3RSZWN0Rm9yQ29sdW1uc0VSTlNfN0ludFJlY3RFCi1fX1pON1dlYkNvcmUx
MlJlbmRlck9iamVjdDE2cmVwYWludFJlY3RhbmdsZUVSS05TXzdJbnRSZWN0RWIKIF9fWk5LN1dl
YkNvcmUyMkhUTUxGb3JtQ29udHJvbEVsZW1lbnQxMWlzRm9jdXNhYmxlRXYKIF9fWk5LN1dlYkNv
cmUyMkhUTUxGb3JtQ29udHJvbEVsZW1lbnQxM3N1cHBvcnRzRm9jdXNFdgogX19aTjdXZWJDb3Jl
MTVGb2N1c0NvbnRyb2xsZXIxNHNldEZvY3VzZWROb2RlRVBOU180Tm9kZUVOM1dURjEwUGFzc1Jl
ZlB0cklOU181RnJhbWVFRUUKQEAgLTYyNDgsMTMgKzYyNDcsMTEgQEAgX19aTjdXZWJDb3JlMjFB
Y2Nlc3NpYmlsaXR5TWVudUxpc3REMEV2CiBfX1pON1dlYkNvcmUyNUFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3REMkV2CiBfX1pON1dlYkNvcmUxNFJlbmRlck1lbnVMaXN0MTFyZW1vdmVDaGlsZEVQ
TlNfMTJSZW5kZXJPYmplY3RFCiBfX1pON1dlYkNvcmUxNFJlbmRlck1lbnVMaXN0RDBFdgotX19a
TjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0QzFFUktOU184SW50UG9pbnRFCiBfX1pON1dlYkNvcmUx
MVJlbmRlckxheWVyN2hpdFRlc3RFUktOU18xNEhpdFRlc3RSZXF1ZXN0RVJOU18xM0hpdFRlc3RS
ZXN1bHRFCiBfX1pON1dlYkNvcmUxMVJlbmRlckxheWVyMTJoaXRUZXN0TGF5ZXJFUFMwX1MxX1JL
TlNfMTRIaXRUZXN0UmVxdWVzdEVSTlNfMTNIaXRUZXN0UmVzdWx0RVJLTlNfN0ludFJlY3RFUktO
U184SW50UG9pbnRFYlBLTlNfMjRIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGVFUGQKIF9fWk43V2Vi
Q29yZTEzSGl0VGVzdFJlc3VsdDEycmVjdEZvclBvaW50RVJLTlNfOEludFBvaW50RWpqamoKIF9f
Wk43V2ViQ29yZTExUmVuZGVyTGF5ZXIzNXVwZGF0ZTNEVHJhbnNmb3JtZWREZXNjZW5kYW50U3Rh
dHVzRXYKIF9fWk43V2ViQ29yZTExUmVuZGVyTGF5ZXIxMWhpdFRlc3RMaXN0RVBOM1dURjZWZWN0
b3JJUFMwX0xtMEVFRVMzX1JLTlNfMTRIaXRUZXN0UmVxdWVzdEVSTlNfMTNIaXRUZXN0UmVzdWx0
RVJLTlNfN0ludFJlY3RFUktOU184SW50UG9pbnRFUEtOU18yNEhpdFRlc3RpbmdUcmFuc2Zvcm1T
dGF0ZUVQZFNLX1NKX2IKLV9fWk43V2ViQ29yZTEzSGl0VGVzdFJlc3VsdEMxRVJLTlNfOEludFBv
aW50RWpqamoKIF9fWk5LN1dlYkNvcmUxMVJlbmRlckxheWVyMTVoaXRUZXN0Q29udGVudHNFUktO
U18xNEhpdFRlc3RSZXF1ZXN0RVJOU18xM0hpdFRlc3RSZXN1bHRFUktOU183SW50UmVjdEVSS05T
XzhJbnRQb2ludEVOU18xM0hpdFRlc3RGaWx0ZXJFCiBfX1pON1dlYkNvcmUxMlJlbmRlck9iamVj
dDdoaXRUZXN0RVJLTlNfMTRIaXRUZXN0UmVxdWVzdEVSTlNfMTNIaXRUZXN0UmVzdWx0RVJLTlNf
OEludFBvaW50RWlpTlNfMTNIaXRUZXN0RmlsdGVyRQogX19aTjdXZWJDb3JlMTFSZW5kZXJCbG9j
azExbm9kZUF0UG9pbnRFUktOU18xNEhpdFRlc3RSZXF1ZXN0RVJOU18xM0hpdFRlc3RSZXN1bHRF
UktOU184SW50UG9pbnRFaWlOU18xM0hpdFRlc3RBY3Rpb25FCkBAIC0xNDM2MCw3ICsxNDM1Nyw2
IEBAIF9fWk4zV1RGOUhhc2hUYWJsZUlQS3ZTdDRwYWlySVMyX043V2ViQ28KIF9fWk4zV1RGOUhh
c2hUYWJsZUlQS3ZTdDRwYWlySVMyX043V2ViQ29yZTdJbnRTaXplRUVOU18xOFBhaXJGaXJzdEV4
dHJhY3RvcklTNl9FRU5TXzdQdHJIYXNoSVMyX0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhh
c2hUcmFpdHNJUzJfRUVOU0NfSVM1X0VFRUVTRF9FNGZpbmRJUzJfTlNfMjJJZGVudGl0eUhhc2hU
cmFuc2xhdG9ySVMyX1M2X1NBX0VFRUVOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySVMyX1M2X1M4X1NB
X1NGX1NEX0VFUktUXwogX19aTjNXVEY5SGFzaFRhYmxlSVBLdlN0NHBhaXJJUzJfTjdXZWJDb3Jl
N0ludFNpemVFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM2X0VFTlNfN1B0ckhhc2hJUzJfRUVO
U18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTMl9FRU5TQ19JUzVfRUVFRVNEX0U2
cmVoYXNoRWkKIF9fWk4zV1RGOUhhc2hUYWJsZUlQS3ZTdDRwYWlySVMyX043V2ViQ29yZTdJbnRT
aXplRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTNl9FRU5TXzdQdHJIYXNoSVMyX0VFTlNfMTRQ
YWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzJfRUVOU0NfSVM1X0VFRUVTRF9FYVNFUktT
R18KLV9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBoaXRUZXN0UmVzdWx0QXRQb2ludEVSS05T
XzhJbnRQb2ludEViYk5TXzE3SGl0VGVzdFNjcm9sbGJhcnNFalJLTlNfN0ludFNpemVFCiBfX1pO
SzdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0MTBpc1NlbGVjdGVkRXYKIF9fWk4zV1RGOUhhc2hUYWJs
ZUlON1dlYkNvcmU3SW50U2l6ZUVTdDRwYWlySVMyX2pFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJ
UzRfRUVOU183SW50SGFzaElTMl9FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRz
SVMyX0VFTlNBX0lqRUVFRVNCX0UxNmxvb2t1cEZvcldyaXRpbmdJUzJfTlNfMjJJZGVudGl0eUhh
c2hUcmFuc2xhdG9ySVMyX1M0X1M4X0VFRUVTM19JUFM0X2JFUktUXwogX19aTjNXVEY5SGFzaFRh
YmxlSU43V2ViQ29yZTdJbnRTaXplRVN0NHBhaXJJUzJfakVOU18xOFBhaXJGaXJzdEV4dHJhY3Rv
cklTNF9FRU5TXzdJbnRIYXNoSVMyX0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFp
dHNJUzJfRUVOU0FfSWpFRUVFU0JfRTNhZGRJUzJfak5TXzE3SGFzaE1hcFRyYW5zbGF0b3JJUzRf
U0RfUzhfRUVFRVMzX0lOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySVMyX1M0X1M2X1M4X1NEX1NCX0VF
YkVSS1RfUktUMF8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDExNTg3OSkKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTEzMiw2
ICs1MTMyLDcgQEAKIAkJQjhEQkRCNEMxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNv
bW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4
REJEQjQ4MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggKi87IH07CiAJ
CUI4REJEQjREMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjQ5
MTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCAqLzsgfTsK
IAkJQjhEQkRCNEUxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJEQjRB
MTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggKi87IH07CisJ
CUJBQjFDMDZBMTRGQzM2NzkwMDQyMzNGQyAvKiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEZDRTU0MTRFQzc5
RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQUNGMjkwMTEzQjJBMEQ1MDA3ODFGOTAg
LyogTGF5b3V0VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJBQ0YyOTAwMTNCMkEwRDUwMDc4MUY5MCAvKiBMYXlvdXRUeXBlcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMDBGMDA0MEUwQTE4
NTUwMEZEMDRFMyAvKiBET01GaWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzAwRUZGRTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5oICovOyB9
OwogCQlCQzAwRjAwNTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDBFRkZGMEUwQTE4NTUwMEZEMDRF
MyAvKiBET01GaWxlLm1tICovOyB9OwpAQCAtMjI4MjAsNiArMjI4MjEsNyBAQAogCQkJCTY1NkQz
NzNBMEFEQkE1REUwMEE0NTU0RCAvKiBGb3JtU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQx
ODg1QjkzMTFCNkZEQTYwMDMzODNCQiAvKiBGb3JtU3VibWlzc2lvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTM1QzQ3NkQwOUFDNEQ2MzAwQTZBQUI0IC8qIEZvdW5kYXRpb25FeHRyYXMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUJBQjFDMDZBMTRGQzM2NzkwMDQyMzNGQyAvKiBGcmFjdGlvbmFsTGF5
b3V0UG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NEZDRkUxMTRFRjI1MDkwMDBEMTdBMyAv
KiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0RkNFNUQxNEVD
NzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNDRGQ0U1MjE0RUM3OUJDMDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFVuaXQuaCBpbiBI
ZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3Bw
CShyZXZpc2lvbiAxMTU4NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzEsNyArNDMxLDExIEBAIHRlbXBsYXRlPD4gdW5z
aWduZWQgQ1NTUHJpbWl0aXZlVmFsdWU6OmMKIAogdGVtcGxhdGU8PiBMZW5ndGggQ1NTUHJpbWl0
aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGgoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSog
cm9vdFN0eWxlLCBmbG9hdCBtdWx0aXBsaWVyLCBib29sIGNvbXB1dGluZ0ZvbnRTaXplKQogewor
I2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgcmV0dXJuIExlbmd0aChzdGF0aWNfY2Fz
dDxmbG9hdD4oY29tcHV0ZUxlbmd0aERvdWJsZShzdHlsZSwgcm9vdFN0eWxlLCBtdWx0aXBsaWVy
LCBjb21wdXRpbmdGb250U2l6ZSkpLCBGaXhlZCk7CisjZWxzZQogICAgIHJldHVybiBMZW5ndGgo
cm91bmRGb3JJbXByZWNpc2VDb252ZXJzaW9uPGZsb2F0Pihjb21wdXRlTGVuZ3RoRG91YmxlKHN0
eWxlLCByb290U3R5bGUsIG11bHRpcGxpZXIsIGNvbXB1dGluZ0ZvbnRTaXplKSksIEZpeGVkKTsK
KyNlbmRpZgogfQogCiB0ZW1wbGF0ZTw+IHNob3J0IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRl
TGVuZ3RoKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZmxvYXQg
bXVsdGlwbGllciwgYm9vbCBjb21wdXRpbmdGb250U2l6ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDExNTg3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUzLDEwICszNTMsMTQgQEAgc3RhdGljIGludCBhZGp1c3RG
b3JMb2NhbFpvb20oTGF5b3V0VW5pdAogICAgIGZsb2F0IHpvb21GYWN0b3IgPSBsb2NhbFpvb21G
b3JSZW5kZXJlcihyZW5kZXJlcik7CiAgICAgaWYgKHpvb21GYWN0b3IgPT0gMSkKICAgICAgICAg
cmV0dXJuIHZhbHVlOworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgcmV0dXJuIGxy
b3VuZGYodmFsdWUgLyB6b29tRmFjdG9yKTsKKyNlbHNlCiAgICAgLy8gTmVlZGVkIGJlY2F1c2Ug
Y29tcHV0ZUxlbmd0aEludCB0cnVuY2F0ZXMgKHJhdGhlciB0aGFuIHJvdW5kcykgd2hlbiBzY2Fs
aW5nIHVwLgogICAgIGlmICh6b29tRmFjdG9yID4gMSkKICAgICAgICAgdmFsdWUrKzsKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSAvIHpvb21GYWN0b3IpOworI2VuZGlmCiB9CiAK
IGludCBFbGVtZW50OjpvZmZzZXRMZWZ0KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9MYXlvdXRUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9M
YXlvdXRUeXBlcy5oCShyZXZpc2lvbiAxMTU4NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTGF5b3V0VHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTE1ICszNywxMDIgQEAKICNk
ZWZpbmUgTGF5b3V0VHlwZXNfaAogCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
RnJhY3Rpb25hbExheW91dFJlY3QuaCIKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0VW5pdC5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKwor
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlw
ZWRlZiBpbnQgTGF5b3V0VW5pdDsKLXR5cGVkZWYgSW50UG9pbnQgTGF5b3V0UG9pbnQ7Ci10eXBl
ZGVmIEludFNpemUgTGF5b3V0U2l6ZTsKLXR5cGVkZWYgSW50UmVjdCBMYXlvdXRSZWN0OwotCi0j
ZGVmaW5lIE1BWF9MQVlPVVRfVU5JVCBJTlRfTUFYCi0jZGVmaW5lIE1JTl9MQVlPVVRfVU5JVCBJ
TlRfTUlOCi0jZGVmaW5lIFpFUk9fTEFZT1VUX1VOSVQgMAordHlwZWRlZiBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBMYXlvdXRVbml0OwordHlwZWRlZiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgTGF5b3V0
UG9pbnQ7Cit0eXBlZGVmIEZyYWN0aW9uYWxMYXlvdXRTaXplIExheW91dFNpemU7Cit0eXBlZGVm
IEZyYWN0aW9uYWxMYXlvdXRSZWN0IExheW91dFJlY3Q7CisKKyNkZWZpbmUgTUFYX0xBWU9VVF9V
TklUIExheW91dFVuaXQ6Om1heCgpCisjZGVmaW5lIE1JTl9MQVlPVVRfVU5JVCBMYXlvdXRVbml0
OjptaW4oKQorI2RlZmluZSBaRVJPX0xBWU9VVF9VTklUIExheW91dFVuaXQoMCkKIAotaW5saW5l
IExheW91dFJlY3QgZW5jbG9zaW5nTGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitp
bmxpbmUgRnJhY3Rpb25hbExheW91dFJlY3QgZW5jbG9zaW5nTGF5b3V0UmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QocmVjdCk7CiB9CiAK
LWlubGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVj
dCkKK2lubGluZSBMYXlvdXRTaXplIHJvdW5kZWRMYXlvdXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYg
cykKIHsKLSAgICByZXR1cm4gcmVjdDsKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAg
IHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShzKTsKKyNlbHNlCisgICAgcmV0dXJuIHJvdW5k
ZWRJbnRTaXplKHMpOworI2VuZGlmCiB9CiAKIGlubGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZElu
dFJlY3QoTGF5b3V0VW5pdCBsZWZ0LCBMYXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCB3aWR0aCwg
TGF5b3V0VW5pdCBoZWlnaHQpCiB7Ci0gICAgcmV0dXJuIEludFJlY3QobGVmdCwgdG9wLCB3aWR0
aCwgaGVpZ2h0KTsKLX0KLQotaW5saW5lIEludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChjb25z
dCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIGNvbnN0IExheW91dFNpemUmIHNpemUpCi17Ci0gICAg
cmV0dXJuIEludFJlY3QobG9jYXRpb24sIHNpemUpOworICAgIHJldHVybiBJbnRSZWN0KGxlZnQu
cm91bmQoKSwgdG9wLnJvdW5kKCksIHNuYXBTaXplVG9QaXhlbCh3aWR0aCwgbGVmdCksIHNuYXBT
aXplVG9QaXhlbChoZWlnaHQsIHRvcCkpOwogfQogCiBpbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBw
ZWRJbnRSZWN0RnJvbUVkZ2VzKExheW91dFVuaXQgbGVmdCwgTGF5b3V0VW5pdCB0b3AsIExheW91
dFVuaXQgcmlnaHQsIExheW91dFVuaXQgYm90dG9tKQogewotICAgIHJldHVybiBJbnRSZWN0KGxl
ZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApOwotfQotCi1pbmxpbmUgaW50IHNu
YXBTaXplVG9QaXhlbChMYXlvdXRVbml0IHNpemUsIExheW91dFVuaXQgbG9jYXRpb24pIAotewot
ICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgcmV0dXJuIHNpemU7Ci19Ci0KLWlubGlu
ZSBJbnRTaXplIHBpeGVsU25hcHBlZEludFNpemUoTGF5b3V0U2l6ZSBzaXplLCBMYXlvdXRQb2lu
dCBsb2NhdGlvbikKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIHJldHVybiBz
aXplOwotfQotCi1pbmxpbmUgSW50U2l6ZSByb3VuZGVkSW50U2l6ZShjb25zdCBMYXlvdXRTaXpl
JiBzKQotewotICAgIHJldHVybiBzOwotfQotCi1pbmxpbmUgTGF5b3V0U2l6ZSByb3VuZGVkTGF5
b3V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHMpCi17Ci0gICAgcmV0dXJuIHJvdW5kZWRJbnRTaXpl
KHMpOwotfQotCi1pbmxpbmUgSW50UG9pbnQgcm91bmRlZEludFBvaW50KGNvbnN0IExheW91dFBv
aW50JiBwKQotewotICAgIHJldHVybiBwOworICAgIHJldHVybiBJbnRSZWN0KGxlZnQucm91bmQo
KSwgdG9wLnJvdW5kKCksIHNuYXBTaXplVG9QaXhlbChyaWdodCAtIGxlZnQsIGxlZnQpLCBzbmFw
U2l6ZVRvUGl4ZWwoYm90dG9tIC0gdG9wLCB0b3ApKTsKIH0KIAogaW5saW5lIExheW91dFBvaW50
IHJvdW5kZWRMYXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKQogeworI2lmIEVOQUJMRShT
VUJQSVhFTF9MQVlPVVQpCisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChwKTsKKyNl
bHNlCiAgICAgcmV0dXJuIHJvdW5kZWRJbnRQb2ludChwKTsKKyNlbmRpZgogfQogCiBpbmxpbmUg
TGF5b3V0UG9pbnQgZmxvb3JlZExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApCiB7Ci0g
ICAgcmV0dXJuIGZsb29yZWRJbnRQb2ludChwKTsKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQocC54
KCksIHAueSgpKTsKIH0KIAogaW5saW5lIExheW91dFBvaW50IGZsb29yZWRMYXlvdXRQb2ludChj
b25zdCBGbG9hdFNpemUmIHMpCiB7Ci0gICAgcmV0dXJuIGZsb29yZWRJbnRQb2ludChzKTsKKyAg
ICByZXR1cm4gTGF5b3V0UG9pbnQocy53aWR0aCgpLCBzLmhlaWdodCgpKTsKIH0KIAogaW5saW5l
IExheW91dFNpemUgZmxvb3JlZExheW91dFNpemUoY29uc3QgRmxvYXRQb2ludCYgcCkKIHsKLSAg
ICByZXR1cm4gTGF5b3V0U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHAueCgpKSwgc3RhdGljX2Nhc3Q8
aW50PihwLnkoKSkpOworICAgIHJldHVybiBMYXlvdXRTaXplKHAueCgpLCBwLnkoKSk7CiB9CiAK
IGlubGluZSBpbnQgcm91bmRUb0ludChMYXlvdXRVbml0IHZhbHVlKQogewotICAgIHJldHVybiB2
YWx1ZTsKKyAgICByZXR1cm4gdmFsdWUucm91bmQoKTsKIH0KIAogaW5saW5lIGludCBmbG9vclRv
SW50KExheW91dFVuaXQgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlOworICAgIHJldHVybiB2
YWx1ZS50b0ludCgpOwogfQogCiBpbmxpbmUgTGF5b3V0VW5pdCByb3VuZGVkTGF5b3V0VW5pdChm
bG9hdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbHJvdW5kZih2YWx1ZSk7CisjaWYgRU5BQkxFKFNV
QlBJWEVMX0xBWU9VVCkKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQodmFsdWUpOwor
I2Vsc2UKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKHZhbHVlKSk7CisjZW5k
aWYKIH0KIAogaW5saW5lIExheW91dFVuaXQgY2VpbGVkTGF5b3V0VW5pdChmbG9hdCB2YWx1ZSkK
IHsKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIHJldHVybiBGcmFjdGlvbmFsTGF5
b3V0VW5pdCh2YWx1ZSk7CisjZWxzZQogICAgIHJldHVybiBjZWlsZih2YWx1ZSk7CisjZW5kaWYK
IH0KIAogaW5saW5lIExheW91dFVuaXQgYWJzb2x1dGVWYWx1ZShjb25zdCBMYXlvdXRVbml0JiB2
YWx1ZSkKIHsKLSAgICByZXR1cm4gYWJzKHZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWUuYWJzKCk7
CiB9CiAKIGlubGluZSBMYXlvdXRTaXplIHRvTGF5b3V0U2l6ZShjb25zdCBMYXlvdXRQb2ludCYg
cCkKQEAgLTE2MCwyMiArMTQ3LDIyIEBAIGlubGluZSBMYXlvdXRQb2ludCB0b0xheW91dFBvaW50
KGNvbnN0IEwKIAogaW5saW5lIExheW91dFVuaXQgbGF5b3V0TW9kKGNvbnN0IExheW91dFVuaXQm
IG51bWVyYXRvciwgY29uc3QgTGF5b3V0VW5pdCYgZGVub21pbmF0b3IpCiB7Ci0gICAgcmV0dXJu
IG51bWVyYXRvciAlIGRlbm9taW5hdG9yOworICAgIHJldHVybiBudW1lcmF0b3IudG9JbnQoKSAl
IGRlbm9taW5hdG9yLnRvSW50KCk7CiB9CiAKIGlubGluZSBMYXlvdXRVbml0IGNsYW1wVG9MYXlv
dXRVbml0KGRvdWJsZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gY2xhbXBUb0ludGVnZXIodmFsdWUp
OworICAgIHJldHVybiBjbGFtcFRvPEZyYWN0aW9uYWxMYXlvdXRVbml0Pih2YWx1ZSwgRnJhY3Rp
b25hbExheW91dFVuaXQ6Om1pbigpLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4KCkpOwogfQog
Ci1pbmxpbmUgYm9vbCBpc0ludGVnZXJWYWx1ZShjb25zdCBMYXlvdXRVbml0KQoraW5saW5lIElu
dFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChMYXlvdXRQb2ludCBsb2NhdGlvbiwgTGF5b3V0U2l6
ZSBzaXplKQogewotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBJbnRSZWN0KHJvdW5kZWRJ
bnRQb2ludChsb2NhdGlvbiksIHBpeGVsU25hcHBlZEludFNpemUoc2l6ZSwgbG9jYXRpb24pKTsK
IH0KIAotaW5saW5lIExheW91dFVuaXQgYm91bmRlZE11bHRpcGx5KGNvbnN0IExheW91dFVuaXQm
IGEsIGNvbnN0IExheW91dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBpc0ludGVnZXJWYWx1ZShjb25z
dCBMYXlvdXRVbml0IHZhbHVlKQogewotICAgIHJldHVybiBhICogYjsKKyAgICByZXR1cm4gdmFs
dWUuZmxvb3IoKSA9PSB2YWx1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhaW50SW5mby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAkocmV2aXNpb24gMTE1ODc5KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhaW50SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3
ICszMiw5IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCisjaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKICNpbmNsdWRlICJQYWludFBoYXNlLmgi
CisjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL0xpc3RIYXNoU2V0Lmg+CiAKQEAgLTk2LDcgKzk4LDcgQEAgc3RydWN0IFBhaW50SW5mbyB7
CiAgICAgfQogI2VuZGlmCiAKLSAgICBzdGF0aWMgSW50UmVjdCBpbmZpbml0ZVJlY3QoKSB7IHJl
dHVybiBJbnRSZWN0KElOVF9NSU4gLyAyLCBJTlRfTUlOIC8gMiwgSU5UX01BWCwgSU5UX01BWCk7
IH0KKyAgICBzdGF0aWMgSW50UmVjdCBpbmZpbml0ZVJlY3QoKSB7IHJldHVybiBJbnRSZWN0KExh
eW91dFJlY3Q6OmluZmluaXRlUmVjdCgpKTsgfQogCiAgICAgLy8gRklYTUU6IEludHJvZHVjZSBz
ZXR0ZXJzL2dldHRlcnMgYXQgc29tZSBwb2ludC4gUmVxdWlyZXMgYSBsb3Qgb2YgY2hhbmdlcyB0
aHJvdWdob3V0IHJlbmRlcmluZy8uCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJldmlzaW9uIDExNTg3OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDEsNiArMTAxLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IENsaXBSZWN0JiBvdGhlcikgY29uc3QgeyByZXR1cm4gcmVjdCgpID09IG90aGVyLnJlY3QoKSAm
JiBoYXNSYWRpdXMoKSA9PSBvdGhlci5oYXNSYWRpdXMoKTsgfQogICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBDbGlwUmVjdCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIHJlY3QoKSAhPSBvdGhlci5y
ZWN0KCkgfHwgaGFzUmFkaXVzKCkgIT0gb3RoZXIuaGFzUmFkaXVzKCk7IH0KKyAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgTGF5b3V0UmVjdCYgb3RoZXJSZWN0KSBjb25zdCB7IHJldHVybiByZWN0
KCkgIT0gb3RoZXJSZWN0OyB9CiAKICAgICB2b2lkIGludGVyc2VjdChjb25zdCBMYXlvdXRSZWN0
JiBvdGhlcikgeyBtX3JlY3QuaW50ZXJzZWN0KG90aGVyKTsgfQogICAgIHZvaWQgaW50ZXJzZWN0
KGNvbnN0IENsaXBSZWN0JiBvdGhlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgJKHJldmlzaW9uIDExNTg3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3NywxMSArMTE3Nyw2IEBAIGlu
bGluZSBpbnQgYWRqdXN0Rm9yQWJzb2x1dGVab29tKGludCB2YWwKICAgICByZXR1cm4gYWRqdXN0
Rm9yQWJzb2x1dGVab29tKHZhbHVlLCByZW5kZXJlci0+c3R5bGUoKSk7CiB9CiAKLWlubGluZSBp
bnQgYWRqdXN0Rm9yQWJzb2x1dGVab29tKEZyYWN0aW9uYWxMYXlvdXRVbml0IHZhbHVlLCBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyKQotewotICAgIHJldHVybiBhZGp1c3RGb3JBYnNvbHV0ZVpvb20o
dmFsdWUuZmxvb3IoKSwgcmVuZGVyZXItPnN0eWxlKCkpOwotfQotCiBpbmxpbmUgdm9pZCBhZGp1
c3RGbG9hdFF1YWRGb3JBYnNvbHV0ZVpvb20oRmxvYXRRdWFkJiBxdWFkLCBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQogewogICAgIGZsb2F0IHpvb20gPSByZW5kZXJlci0+c3R5bGUoKS0+ZWZmZWN0
aXZlWm9vbSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1Rl
eHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVl
QXNUZXh0LmNwcAkocmV2aXNpb24gMTE1ODc5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotc3RhdGlj
IHZvaWQgd3JpdGVMYXllcnMoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5
ZXIsIFJlbmRlckxheWVyKiwgY29uc3QgSW50UmVjdCYgcGFpbnREaXJ0eVJlY3QsIGludCBpbmRl
bnQgPSAwLCBSZW5kZXJBc1RleHRCZWhhdmlvciBiZWhhdmlvciA9IFJlbmRlckFzVGV4dEJlaGF2
aW9yTm9ybWFsKTsKK3N0YXRpYyB2b2lkIHdyaXRlTGF5ZXJzKFRleHRTdHJlYW0mLCBjb25zdCBS
ZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciosIGNvbnN0IExheW91dFJlY3QmIHBh
aW50RGlydHlSZWN0LCBpbnQgaW5kZW50ID0gMCwgUmVuZGVyQXNUZXh0QmVoYXZpb3IgPSBSZW5k
ZXJBc1RleHRCZWhhdmlvck5vcm1hbCk7CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBoYXNGcmFjdGlv
bnMoZG91YmxlIHZhbCkKIHsKQEAgLTEwNCw2ICsxMDQsMTIgQEAgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgYwogICAgIHJldHVybiB0cyA8PCAiKCIgPDwgcC54KCkgPDwg
IiwiIDw8IHAueSgpIDw8ICIpIjsKIH0KIAorVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50JiBwKQoreworICAgIC8vIEZJWE1F
OiBUaGVzZSBzaG91bGQgYmUgcHJpbnRlZCBhcyBmbG9hdHMuIEtlZXBpbmcgdGhlbSBpbnRzIGZv
ciBjb25zaXN0ZW5jeSB3aXRoIHBlcnZpb3VzIHRlc3QgZXhwZWN0YXRpb25zLgorICAgIHJldHVy
biB0cyA8PCAiKCIgPDwgcC54KCkudG9JbnQoKSA8PCAiLCIgPDwgcC55KCkudG9JbnQoKSA8PCAi
KSI7Cit9CisKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZs
b2F0UG9pbnQmIHApCiB7CiAgICAgdHMgPDwgIigiIDw8IGZvcm1hdE51bWJlclJlc3BlY3RpbmdJ
bnRlZ2VycyhwLngoKSk7CkBAIC0yNDIsNyArMjQ4LDcgQEAgdm9pZCBSZW5kZXJUcmVlQXNUZXh0
Ojp3cml0ZVJlbmRlck9iamVjdAogICAgIFJlbmRlckJsb2NrKiBjYiA9IG8uY29udGFpbmluZ0Js
b2NrKCk7CiAgICAgYm9vbCBhZGp1c3RGb3JUYWJsZUNlbGxzID0gY2IgPyBjYi0+aXNUYWJsZUNl
bGwoKSA6IGZhbHNlOwogCi0gICAgSW50UmVjdCByOworICAgIExheW91dFJlY3QgcjsKICAgICBp
ZiAoby5pc1RleHQoKSkgewogICAgICAgICAvLyBGSVhNRTogV291bGQgYmUgYmV0dGVyIHRvIGR1
bXAgdGhlIGJvdW5kaW5nIGJveCB4IGFuZCB5IHJhdGhlciB0aGFuIHRoZSBmaXJzdCBydW4ncyB4
IGFuZCB5LCBidXQgdGhhdCB3b3VsZCBpbnZvbHZlIHVwZGF0aW5nCiAgICAgICAgIC8vIG1hbnkg
dGVzdCByZXN1bHRzLgpAQCAtMjYxLDcgKzI2Nyw3IEBAIHZvaWQgUmVuZGVyVHJlZUFzVGV4dDo6
d3JpdGVSZW5kZXJPYmplY3QKICAgICAgICAgLy8gdG8gY2xlYW4gdXAgdGhlIHJlc3VsdHMgdG8g
ZHVtcCBib3RoIHRoZSBvdXRlciBib3ggYW5kIHRoZSBpbnRyaW5zaWMgcGFkZGluZyBzbyB0aGF0
IGJvdGggYml0cyBvZiBpbmZvcm1hdGlvbiBhcmUKICAgICAgICAgLy8gY2FwdHVyZWQgYnkgdGhl
IHJlc3VsdHMuCiAgICAgICAgIGNvbnN0IFJlbmRlclRhYmxlQ2VsbCYgY2VsbCA9ICp0b1JlbmRl
clRhYmxlQ2VsbCgmbyk7Ci0gICAgICAgIHIgPSBJbnRSZWN0KGNlbGwueCgpLCBjZWxsLnkoKSAr
IGNlbGwuaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpLCBjZWxsLndpZHRoKCksIGNlbGwuaGVpZ2h0
KCkgLSBjZWxsLmludHJpbnNpY1BhZGRpbmdCZWZvcmUoKSAtIGNlbGwuaW50cmluc2ljUGFkZGlu
Z0FmdGVyKCkpOworICAgICAgICByID0gTGF5b3V0UmVjdChjZWxsLngoKSwgY2VsbC55KCkgKyBj
ZWxsLmludHJpbnNpY1BhZGRpbmdCZWZvcmUoKSwgY2VsbC53aWR0aCgpLCBjZWxsLmhlaWdodCgp
IC0gY2VsbC5pbnRyaW5zaWNQYWRkaW5nQmVmb3JlKCkgLSBjZWxsLmludHJpbnNpY1BhZGRpbmdB
ZnRlcigpKTsKICAgICB9IGVsc2UgaWYgKG8uaXNCb3goKSkKICAgICAgICAgciA9IHRvUmVuZGVy
Qm94KCZvKS0+ZnJhbWVSZWN0KCk7CiAKQEAgLTI2OSw2ICsyNzUsMTEgQEAgdm9pZCBSZW5kZXJU
cmVlQXNUZXh0Ojp3cml0ZVJlbmRlck9iamVjdAogICAgIGlmIChhZGp1c3RGb3JUYWJsZUNlbGxz
KQogICAgICAgICByLm1vdmUoMCwgLXRvUmVuZGVyVGFibGVDZWxsKG8uY29udGFpbmluZ0Jsb2Nr
KCkpLT5pbnRyaW5zaWNQYWRkaW5nQmVmb3JlKCkpOwogCisgICAgLy8gRklYTUU6IENvbnZlcnQg
bGF5b3V0IHRlc3QgcmVzdWx0cyB0byByZXBvcnQgc3ViLXBpeGVsIHZhbHVlcywgaW4gdGhlIG1l
YW50aW1lIHVzaW5nIGVuY2xvc2luZ0ludFJlY3QKKyAgICAvLyBmb3IgY29uc2lzdGVuY3kgd2l0
aCBvbGQgcmVzdWx0cy4KKyAgICByID0gZW5jbG9zaW5nSW50UmVjdChyKTsKKworCiAgICAgdHMg
PDwgIiAiIDw8IHI7CiAKICAgICBpZiAoIShvLmlzVGV4dCgpICYmICFvLmlzQlIoKSkpIHsKQEAg
LTU5MSw5ICs2MDIsMTQgQEAgZW51bSBMYXllclBhaW50UGhhc2UgewogfTsKIAogc3RhdGljIHZv
aWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIFJlbmRlckxheWVyJiBsLAotICAgICAgICAgICAgICAg
ICAgY29uc3QgSW50UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEludFJlY3QmIGJhY2tncm91bmRD
bGlwUmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGNvbnN0IEludFJlY3QmIG91dGxpbmVD
bGlwUmVjdCwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRz
LCBjb25zdCBMYXlvdXRSZWN0JiBiYWNrZ3JvdW5kQ2xpcFJlY3QsIGNvbnN0IExheW91dFJlY3Qm
IGNsaXBSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBvdXRsaW5lQ2xpcFJlY3QsCiAgICAgICAgICAg
ICAgICAgICBMYXllclBhaW50UGhhc2UgcGFpbnRQaGFzZSA9IExheWVyUGFpbnRQaGFzZUFsbCwg
aW50IGluZGVudCA9IDAsIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yID0gUmVuZGVyQXNU
ZXh0QmVoYXZpb3JOb3JtYWwpCiB7CisgICAgSW50UmVjdCBhZGp1c3RlZExheW91dEJvdW5kcyA9
IHBpeGVsU25hcHBlZEludFJlY3QobGF5ZXJCb3VuZHMpOworICAgIEludFJlY3QgYWRqdXN0ZWRC
YWNrZ3JvdW5kQ2xpcFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGJhY2tncm91bmRDbGlwUmVj
dCk7CisgICAgSW50UmVjdCBhZGp1c3RlZENsaXBSZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChj
bGlwUmVjdCk7CisgICAgSW50UmVjdCBhZGp1c3RlZE91dGxpbmVDbGlwUmVjdCA9IHBpeGVsU25h
cHBlZEludFJlY3Qob3V0bGluZUNsaXBSZWN0KTsKKwogICAgIHdyaXRlSW5kZW50KHRzLCBpbmRl
bnQpOwogCiAgICAgdHMgPDwgImxheWVyICI7CkBAIC02MDEsMTUgKzYxNywxNSBAQCBzdGF0aWMg
dm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgUmVuZGVyCiAgICAgaWYgKGJlaGF2aW9yICYgUmVu
ZGVyQXNUZXh0U2hvd0FkZHJlc3NlcykKICAgICAgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3Qg
dm9pZCo+KCZsKSA8PCAiICI7CiAgICAgICAKLSAgICB0cyA8PCBsYXllckJvdW5kczsKKyAgICB0
cyA8PCBhZGp1c3RlZExheW91dEJvdW5kczsKIAotICAgIGlmICghbGF5ZXJCb3VuZHMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIGlmICghYmFja2dyb3VuZENsaXBSZWN0LmNvbnRhaW5zKGxheWVyQm91
bmRzKSkKLSAgICAgICAgICAgIHRzIDw8ICIgYmFja2dyb3VuZENsaXAgIiA8PCBiYWNrZ3JvdW5k
Q2xpcFJlY3Q7Ci0gICAgICAgIGlmICghY2xpcFJlY3QuY29udGFpbnMobGF5ZXJCb3VuZHMpKQot
ICAgICAgICAgICAgdHMgPDwgIiBjbGlwICIgPDwgY2xpcFJlY3Q7Ci0gICAgICAgIGlmICghb3V0
bGluZUNsaXBSZWN0LmNvbnRhaW5zKGxheWVyQm91bmRzKSkKLSAgICAgICAgICAgIHRzIDw8ICIg
b3V0bGluZUNsaXAgIiA8PCBvdXRsaW5lQ2xpcFJlY3Q7CisgICAgaWYgKCFhZGp1c3RlZExheW91
dEJvdW5kcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKCFhZGp1c3RlZEJhY2tncm91bmRDbGlw
UmVjdC5jb250YWlucyhhZGp1c3RlZExheW91dEJvdW5kcykpCisgICAgICAgICAgICB0cyA8PCAi
IGJhY2tncm91bmRDbGlwICIgPDwgYWRqdXN0ZWRCYWNrZ3JvdW5kQ2xpcFJlY3Q7CisgICAgICAg
IGlmICghYWRqdXN0ZWRDbGlwUmVjdC5jb250YWlucyhhZGp1c3RlZExheW91dEJvdW5kcykpCisg
ICAgICAgICAgICB0cyA8PCAiIGNsaXAgIiA8PCBhZGp1c3RlZENsaXBSZWN0OworICAgICAgICBp
ZiAoIWFkanVzdGVkT3V0bGluZUNsaXBSZWN0LmNvbnRhaW5zKGFkanVzdGVkTGF5b3V0Qm91bmRz
KSkKKyAgICAgICAgICAgIHRzIDw8ICIgb3V0bGluZUNsaXAgIiA8PCBhZGp1c3RlZE91dGxpbmVD
bGlwUmVjdDsKICAgICB9CiAKICAgICBpZiAobC5yZW5kZXJlcigpLT5oYXNPdmVyZmxvd0NsaXAo
KSkgewpAQCAtNjQ0LDcgKzY2MCw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRz
LCBSZW5kZXIKIH0KIAogc3RhdGljIHZvaWQgd3JpdGVSZW5kZXJOYW1lZEZsb3dUaHJlYWRzKFRl
eHRTdHJlYW0mIHRzLCBSZW5kZXJWaWV3KiByZW5kZXJWaWV3LCBjb25zdCBSZW5kZXJMYXllciog
cm9vdExheWVyLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcGFpbnRS
ZWN0LCBpbnQgaW5kZW50LCBSZW5kZXJBc1RleHRCZWhhdmlvciBiZWhhdmlvcikKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIHBhaW50UmVjdCwgaW50IGluZGVudCwg
UmVuZGVyQXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IpCiB7CiAgICAgaWYgKCFyZW5kZXJWaWV3LT5o
YXNSZW5kZXJOYW1lZEZsb3dUaHJlYWRzKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTY5MiwxOCAr
NzA4LDE4IEBAIHN0YXRpYyB2b2lkIHdyaXRlUmVuZGVyTmFtZWRGbG93VGhyZWFkcygKIH0KIAog
c3RhdGljIHZvaWQgd3JpdGVMYXllcnMoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlckxheWVy
KiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBsLAotICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgSW50UmVjdCYgcGFpbnRSZWN0LCBpbnQgaW5kZW50LCBSZW5kZXJBc1RleHRCZWhhdmlvciBi
ZWhhdmlvcikKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIHBhaW50
UmVjdCwgaW50IGluZGVudCwgUmVuZGVyQXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IpCiB7CiAgICAg
Ly8gRklYTUU6IEFwcGx5IG92ZXJmbG93IHRvIHRoZSByb290IGxheWVyIHRvIG5vdCBicmVhayBl
dmVyeSB0ZXN0LiAgQ29tcGxldGUgaGFjay4gIFNpZ2guCi0gICAgSW50UmVjdCBwYWludERpcnR5
UmVjdChwYWludFJlY3QpOworICAgIExheW91dFJlY3QgcGFpbnREaXJ0eVJlY3QocGFpbnRSZWN0
KTsKICAgICBpZiAocm9vdExheWVyID09IGwpIHsKLSAgICAgICAgcGFpbnREaXJ0eVJlY3Quc2V0
V2lkdGgobWF4KHBhaW50RGlydHlSZWN0LndpZHRoKCksIHJvb3RMYXllci0+cmVuZGVyQm94KCkt
Pm1heFhMYXlvdXRPdmVyZmxvdygpKSk7Ci0gICAgICAgIHBhaW50RGlydHlSZWN0LnNldEhlaWdo
dChtYXgocGFpbnREaXJ0eVJlY3QuaGVpZ2h0KCksIHJvb3RMYXllci0+cmVuZGVyQm94KCktPm1h
eFlMYXlvdXRPdmVyZmxvdygpKSk7Ci0gICAgICAgIGwtPnNldFNpemUobC0+c2l6ZSgpLmV4cGFu
ZGVkVG8obC0+cmVuZGVyQm94KCktPm1heExheW91dE92ZXJmbG93KCkpKTsKKyAgICAgICAgcGFp
bnREaXJ0eVJlY3Quc2V0V2lkdGgobWF4PExheW91dFVuaXQ+KHBhaW50RGlydHlSZWN0LndpZHRo
KCksIHJvb3RMYXllci0+cmVuZGVyQm94KCktPm1heFhMYXlvdXRPdmVyZmxvdygpKSk7CisgICAg
ICAgIHBhaW50RGlydHlSZWN0LnNldEhlaWdodChtYXg8TGF5b3V0VW5pdD4ocGFpbnREaXJ0eVJl
Y3QuaGVpZ2h0KCksIHJvb3RMYXllci0+cmVuZGVyQm94KCktPm1heFlMYXlvdXRPdmVyZmxvdygp
KSk7CisgICAgICAgIGwtPnNldFNpemUobC0+c2l6ZSgpLmV4cGFuZGVkVG8ocGl4ZWxTbmFwcGVk
SW50U2l6ZShsLT5yZW5kZXJCb3goKS0+bWF4TGF5b3V0T3ZlcmZsb3coKSwgTGF5b3V0UG9pbnQo
MCwgMCkpKSk7CiAgICAgfQogICAgIAogICAgIC8vIENhbGN1bGF0ZSB0aGUgY2xpcCByZWN0cyB3
ZSBzaG91bGQgdXNlLgotICAgIEludFJlY3QgbGF5ZXJCb3VuZHM7CisgICAgTGF5b3V0UmVjdCBs
YXllckJvdW5kczsKICAgICBDbGlwUmVjdCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRvQXBwbHksIG91
dGxpbmVSZWN0OwogICAgIGwtPmNhbGN1bGF0ZVJlY3RzKHJvb3RMYXllciwgMCwgcGFpbnREaXJ0
eVJlY3QsIGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRvQXBwbHksIG91dGxpbmVS
ZWN0LCB0cnVlKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVB
c1RleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5oCShyZXZpc2lvbiAxMTU4NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVHJlZUFzVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEVsZW1lbnQ7CitjbGFzcyBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQ7CiBjbGFzcyBGbG9hdFBvaW50OwogY2xhc3MgRmxvYXRTaXplOwogY2xhc3MgRnJhbWU7
CkBAIC03MCw2ICs3MSw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlUmVuZGVyT2JqZWN0KFRleHRTdHJl
YW0KIAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgSW50UG9pbnQm
KTsKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEludFJlY3QmKTsK
K1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IEZyYWN0aW9uYWxMYXlv
dXRQb2ludCYpOwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgRmxv
YXRQb2ludCYpOwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgRmxv
YXRTaXplJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
VHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gMTE1ODc5KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzI2LDcgKzMyNiw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlU3R5bGUoVGV4dFN0cmVhbSYg
dHMsIGMKIAogc3RhdGljIFRleHRTdHJlYW0mIHdyaXRlUG9zaXRpb25BbmRTdHlsZShUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QpCiB7Ci0gICAgdHMgPDwgIiAiIDw8
IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Jj4ob2JqZWN0KS5hYnNvbHV0ZUNsaXBwZWRPdmVyZmxv
d1JlY3QoKTsKKyAgICB0cyA8PCAiICIgPDwgZW5jbG9zaW5nSW50UmVjdChjb25zdF9jYXN0PFJl
bmRlck9iamVjdCY+KG9iamVjdCkuYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkpOwogICAg
IHdyaXRlU3R5bGUodHMsIG9iamVjdCk7CiAgICAgcmV0dXJuIHRzOwogfQpJbmRleDogTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2
aXNpb24gMTE1ODkwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTItMDUtMDIgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFttZXRhXSBTd2l0Y2ggYXdheSBmcm9tIGludGVnZXJzIHJlcHJl
c2VudGluZyBwaXhlbHMgZm9yIGxheW91dC9ldmVudCBoYW5kbGluZy9yZW5kZXJpbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzE4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L3N1Yi1waXhl
bDogQWRkZWQuCisgICAgICAgICogZmFzdC9zdWItcGl4ZWwvY2xpZW50LXdpZHRoLWhlaWdodC1z
bmFwcGluZy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvc3ViLXBpeGVsL2Ns
aWVudC13aWR0aC1oZWlnaHQtc25hcHBpbmcuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9z
dWItcGl4ZWwvbGF5b3V0LWJveGVzLXdpdGgtem9vbS1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L3N1Yi1waXhlbC9sYXlvdXQtYm94ZXMtd2l0aC16b29tLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3Qvc3ViLXBpeGVsL3NpemUtb2YtYm94LXdpdGgtem9vbS1leHBlY3Rl
ZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3N1Yi1waXhlbC9zaXplLW9mLWJveC13aXRo
LXpvb20uaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBl
Y3RhdGlvbnMudHh0OiBNYXJraW5nIG92ZXJmbG93aW5nIHRlc3RzIGFzIGZhaWxpbmcgaW4gZGVi
dWcuCisgICAgICAgICogcGxhdGZvcm0vZWZsL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDogRGl0dG8u
CisgICAgICAgICogcGxhdGZvcm0vZ3RrL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDogRGl0dG8uCisgICAg
ICAgICogcGxhdGZvcm0vcXQvdGVzdF9leHBlY3RhdGlvbnMudHh0OiBEaXR0by4KKwogMjAxMi0w
NS0wMiAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIHR3
byBtb3JlIE1hYyBiYXNlbGluZXMuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9j
bGllbnQtd2lkdGgtaGVpZ2h0LXNuYXBwaW5nLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9jbGllbnQtd2lkdGgtaGVpZ2h0LXNuYXBwaW5nLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVsL2Ns
aWVudC13aWR0aC1oZWlnaHQtc25hcHBpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDYgQEAKK1BBU1MgZGl2LmNsaWVudFdpZHRoIGlzIDExCitQQVNTIGRpdi5jbGllbnRI
ZWlnaHQgaXMgMTEKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9jbGllbnQtd2lkdGgtaGVp
Z2h0LXNuYXBwaW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9zdWItcGl4
ZWwvY2xpZW50LXdpZHRoLWhlaWdodC1zbmFwcGluZy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwvY2xpZW50LXdpZHRoLWhlaWdodC1zbmFwcGluZy5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxk
aXYgaWQ9IlRlc3REaXYiIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDEwLjRweDsg
dG9wOiAxMC40cHg7IHdpZHRoOiAxMC40cHg7IGhlaWdodDogMTAuNHB4OyI+PC9kaXY+Cis8c2Ny
aXB0PgorCit2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRlc3REaXYiKTsKKwor
c2hvdWxkQmUoJ2Rpdi5jbGllbnRXaWR0aCcsICcxMScpOworc2hvdWxkQmUoJ2Rpdi5jbGllbnRI
ZWlnaHQnLCAnMTEnKTsKKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvc3ViLXBp
eGVsL2xheW91dC1ib3hlcy13aXRoLXpvb20tZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9sYXlvdXQtYm94ZXMtd2l0aC16b29tLWV4cGVjdGVk
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9sYXlvdXQt
Ym94ZXMtd2l0aC16b29tLWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzkg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8dGl0bGU+bGF5b3V0IHpv
b20gdGVzdDwvdGl0bGU+CisgICAgPHN0eWxlPiAKKyAgICAgICAgI3Rlc3QgeworICAgICAgICAg
ICAgd2lkdGg6IDUwMHB4OworICAgICAgICAgICAgaGVpZ2h0OiAxNTAwcHg7CisgICAgICAgICAg
ICBiYWNrZ3JvdW5kOiBuYXZ5OworICAgICAgICAgICAgem9vbTogMC4yNTsKKyAgICAgICAgfQor
ICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8ZGl2IGlkPSJ0ZXN0Ij48L2Rpdj4K
KyAgICA8ZGl2IGlkPSJjb25zb2xlIj4KKyAgICAgICAgVGhlIGJveCBhYm92ZSBzaG91bGQgYmUg
bmF2eSBibHVlIHdpdGggbm8gYmFuZGluZyBlZmZlY3RzLjxicj4KKyAgICAgICAgUEFTUzogV2l0
aCB6b29tIG9mIDEwMCUgYm90dG9tIGVkZ2Ugb2YgbGFzdCBjaGlsZCBsaW5lcyB1cCB3aXRoIGJv
dHRvbSBlZGdlIG9mIGNvbnRhaW5lci48YnI+CisgICAgICAgIFBBU1M6IFdpdGggem9vbSBvZiAx
MTAlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0b20gZWRnZSBv
ZiBjb250YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpvb20gb2YgMTI1JSBib3R0b20g
ZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVy
Ljxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDEzMyUgYm90dG9tIGVkZ2Ugb2YgbGFz
dCBjaGlsZCBsaW5lcyB1cCB3aXRoIGJvdHRvbSBlZGdlIG9mIGNvbnRhaW5lci48YnI+CisgICAg
ICAgIFBBU1M6IFdpdGggem9vbSBvZiAxNTAlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGlu
ZXMgdXAgd2l0aCBib3R0b20gZWRnZSBvZiBjb250YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBX
aXRoIHpvb20gb2YgMTY2JSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGgg
Ym90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9m
IDE3NSUgYm90dG9tIGVkZ2Ugb2YgbGFzdCBjaGlsZCBsaW5lcyB1cCB3aXRoIGJvdHRvbSBlZGdl
IG9mIGNvbnRhaW5lci48YnI+CisgICAgICAgIFBBU1M6IFdpdGggem9vbSBvZiAyMDAlIGJvdHRv
bSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0b20gZWRnZSBvZiBjb250YWlu
ZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpvb20gb2YgMjUwJSBib3R0b20gZWRnZSBvZiBs
YXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAg
ICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDMwMCUgYm90dG9tIGVkZ2Ugb2YgbGFzdCBjaGlsZCBs
aW5lcyB1cCB3aXRoIGJvdHRvbSBlZGdlIG9mIGNvbnRhaW5lci48YnI+CisgICAgICAgIFBBU1M6
IFdpdGggem9vbSBvZiA0MDAlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0
aCBib3R0b20gZWRnZSBvZiBjb250YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpvb20g
b2YgNTAwJSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVk
Z2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDkwJSBib3R0
b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFp
bmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDgwJSBib3R0b20gZWRnZSBvZiBs
YXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAg
ICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDc1JSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxp
bmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzog
V2l0aCB6b29tIG9mIDY2JSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGgg
Ym90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9m
IDUwJSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ug
b2YgY29udGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDMzJSBib3R0b20g
ZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVy
Ljxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDI1JSBib3R0b20gZWRnZSBvZiBsYXN0
IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKzwvZGl2
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwvbGF5
b3V0LWJveGVzLXdpdGgtem9vbS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
c3ViLXBpeGVsL2xheW91dC1ib3hlcy13aXRoLXpvb20uaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVsL2xheW91dC1ib3hlcy13aXRoLXpvb20uaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorICAgIDx0aXRsZT5sYXlvdXQgem9vbSB0ZXN0PC90aXRsZT4KKyAgICA8c3R5bGU+IAorICAg
ICAgICAjdGVzdCB7CisgICAgICAgICAgICB3aWR0aDogNTAwcHg7CisgICAgICAgICAgICBoZWln
aHQ6IDE1MDBweDsKKyAgICAgICAgICAgIGJhY2tncm91bmQ6IHNreWJsdWU7CisgICAgICAgIH0K
KyAgICAgICAgI3Rlc3QgPiBkaXYgeworICAgICAgICAgICAgYmFja2dyb3VuZDogbmF2eTsKKyAg
ICAgICAgICAgIGhlaWdodDogMTVweDsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+
Cis8Ym9keT4KKyAgICA8ZGl2IGlkPSJ0ZXN0Ij48L2Rpdj4KKyAgICA8ZGl2IGlkPSJjb25zb2xl
Ij4KKyAgICAgICAgVGhlIGJveCBhYm92ZSBzaG91bGQgYmUgbmF2eSBibHVlIHdpdGggbm8gYmFu
ZGluZyBlZmZlY3RzLjxicj4KKyAgICA8L2Rpdj4KKzwvYm9keT4KKzxzY3JpcHQ+CisgICAgdmFy
IHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QnKTsKKyAgICB2YXIg
Y29uc29sZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpOworCisg
ICAgZnVuY3Rpb24gaW5pdCgpCisgICAgeworICAgICAgICB0ZXN0RWxlbWVudC5pbm5lckhUTUwg
PSAnJzsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICAgICAgICAg
IHRlc3RFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0KHpvb20pCisgICAgeworICAgICAgICB0ZXN0RWxl
bWVudC5zdHlsZS56b29tID0gem9vbSArICclJzsKKyAgICAgICAgCisgICAgICAgIHZhciBsYXN0
RWxlbWVudEJvdHRvbSA9IHRlc3RFbGVtZW50Lmxhc3RDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKS5ib3R0b207CisgICAgICAgIHZhciBjb250YWluZXJCb3R0b20gPSB0ZXN0RWxlbWVudC5n
ZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b207CisgICAgICAgIGlmIChNYXRoLmFicyhsYXN0
RWxlbWVudEJvdHRvbSAtIGNvbnRhaW5lckJvdHRvbSkgPCAwLjAxKQorICAgICAgICAgICAgbG9n
KCdQQVNTOiBXaXRoIHpvb20gb2YgJyArIHpvb20gKyAnJSBib3R0b20gZWRnZSBvZiBsYXN0IGNo
aWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLicpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBsb2coJ0ZBSUw6IFdpdGggem9vbSBvZiAnICsgem9vbSArICclIGJv
dHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgYXQgJyArIGxhc3RFbGVtZW50Qm90dG9tICsgJywgY29u
dGFpbmVyIGF0ICcgKyBjb250YWluZXJCb3R0b20gKyAnLicpOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGxvZyhzdHIpCisgICAgeworICAgICAgICBjb25zb2xlRWxlbWVudC5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHIpKTsKKyAgICAgICAgY29uc29sZUVsZW1lbnQuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7CisgICAgfQorCisgICAgaW5p
dCgpOworICAgIHRlc3QoMTAwKTsKKyAgICB0ZXN0KDExMCk7CisgICAgdGVzdCgxMjUpOworICAg
IHRlc3QoMTMzKTsKKyAgICB0ZXN0KDE1MCk7CisgICAgdGVzdCgxNjYpOworICAgIHRlc3QoMTc1
KTsKKyAgICB0ZXN0KDIwMCk7CisgICAgdGVzdCgyNTApOworICAgIHRlc3QoMzAwKTsKKyAgICB0
ZXN0KDQwMCk7CisgICAgdGVzdCg1MDApOworICAgIHRlc3QoOTApOworICAgIHRlc3QoODApOwor
ICAgIHRlc3QoNzUpOworICAgIHRlc3QoNjYpOworICAgIHRlc3QoNTApOworICAgIHRlc3QoMzMp
OworICAgIHRlc3QoMjUpOworPC9zY3JpcHQ+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3N1Yi1waXhlbC9zaXplLW9mLWJveC13aXRoLXpvb20tZXhwZWN0ZWQuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9zaXplLW9mLWJveC13aXRoLXpvb20t
ZXhwZWN0ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVs
L3NpemUtb2YtYm94LXdpdGgtem9vbS1leHBlY3RlZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDc0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPnNp
emUgb2YgYm94IHpvb20gdGVzdDwvdGl0bGU+CisgICAgPHN0eWxlPgorICAgICAgICBib2R5IHsK
KyAgICAgICAgICAgIGJhY2tncm91bmQ6IHNpbHZlcjsKKyAgICAgICAgfQorICAgICAgICAjY29u
dGFpbmVyIHsKKyAgICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOworICAgICAgICAgICAgd2lk
dGg6IDUwMHB4OworICAgICAgICAgICAgaGVpZ2h0OiA1MHB4OworICAgICAgICB9CisgICAgICAg
ICNydWxlciA+IGRpdiB7CisgICAgICAgICAgICBmbG9hdDogbGVmdDsKKyAgICAgICAgICAgIHdp
ZHRoOiA0OXB4OworICAgICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgYmxhY2s7Cisg
ICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgIGhlaWdodDogNTBweDsK
KyAgICAgICAgfQorICAgICAgICAjdGVzdCB7CisgICAgICAgICAgICBjbGVhcjogbGVmdDsKKyAg
ICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgICAgIHRvcDogMzBweDsKKyAg
ICAgICAgfQorICAgICAgICAjdGVzdCA+IGRpdiB7CisgICAgICAgICAgICBjbGVhcjogbGVmdDsK
KyAgICAgICAgfQorICAgICAgICAjdGVzdCA+IGRpdiA+IGRpdiB7CisgICAgICAgICAgICBmbG9h
dDogbGVmdDsKKyAgICAgICAgICAgIHdpZHRoOiA1MDBweDsKKyAgICAgICAgICAgIGhlaWdodDog
MTBweDsKKyAgICAgICAgICAgIGJhY2tncm91bmQ6IG5hdnk7CisgICAgICAgIH0KKyAgICAgICAg
I2NvbnNvbGUgeworICAgICAgICAgICAgY2xlYXI6IGxlZnQ7CisgICAgICAgIH0KKyAgICA8L3N0
eWxlPgorPC9oZWFkPgorPGJvZHk+CisgICAgPGRpdiBpZD0iY29udGFpbmVyIj4KKyAgICAgICAg
PGRpdiBpZD0icnVsZXIiPjwvZGl2PgorICAgICAgICA8ZGl2IGlkPSJ0ZXN0Ij48ZGl2PjwvZGl2
PjwvZGl2PgorICAgIDwvZGl2PgorPC9ib2R5PgorPHNjcmlwdD4KKyAgICB2YXIgdGVzdENvbnRh
aW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0Jyk7CisgICAgdmFyIHJ1bGVyRWxl
bWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdydWxlcicpOworCisgICAgZnVuY3Rpb24g
aW5pdCgpCisgICAgeworICAgICAgICBydWxlckVsZW1lbnQuaW5uZXJIVE1MID0gJyc7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykgeworICAgICAgICAgICAgcnVsZXJFbGVt
ZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAg
ICAgIHJ1bGVyRWxlbWVudC5sYXN0Q2hpbGQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoNTAgKyBpICogNTApKTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgZnVuY3Rpb24g
dGVzdCh6b29tKQorICAgIHsKKyAgICAgICAgdmFyIHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIHRlc3RFbGVtZW50LnN0eWxlLnpvb20gPSB6b29t
ICsgJyUnOworICAgICAgICB0ZXN0RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdkaXYnKSk7CisgICAgICAgIHRlc3RDb250YWluZXIuYXBwZW5kQ2hpbGQodGVzdEVs
ZW1lbnQpOworICAgIH0KKworICAgIGluaXQoKTsKKyAgICB0ZXN0KDEwMCk7CisgICAgdGVzdCg2
Nik7CisgICAgdGVzdCgzMyk7CisKKzwvc2NyaXB0PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9zdWItcGl4ZWwvc2l6ZS1vZi1ib3gtd2l0aC16b29tLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwvc2l6ZS1vZi1ib3gtd2l0aC16b29tLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9zaXplLW9mLWJveC13
aXRoLXpvb20uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5zaXplIG9mIGJveCB6b29tIHRlc3Q8L3Rp
dGxlPgorICAgIDxzdHlsZT4KKyAgICAgICAgYm9keSB7CisgICAgICAgICAgICBiYWNrZ3JvdW5k
OiBzaWx2ZXI7CisgICAgICAgIH0KKyAgICAgICAgI2NvbnRhaW5lciB7CisgICAgICAgICAgICBi
YWNrZ3JvdW5kOiB3aGl0ZTsKKyAgICAgICAgICAgIHdpZHRoOiA1MDBweDsKKyAgICAgICAgICAg
IGhlaWdodDogNTBweDsKKyAgICAgICAgfQorICAgICAgICAjcnVsZXIgPiBkaXYgeworICAgICAg
ICAgICAgZmxvYXQ6IGxlZnQ7CisgICAgICAgICAgICB3aWR0aDogNDlweDsKKyAgICAgICAgICAg
IGJvcmRlci1yaWdodDogMXB4IHNvbGlkIGJsYWNrOworICAgICAgICAgICAgdGV4dC1hbGlnbjog
cmlnaHQ7CisgICAgICAgICAgICBoZWlnaHQ6IDUwcHg7CisgICAgICAgIH0KKyAgICAgICAgI3Rl
c3QgeworICAgICAgICAgICAgY2xlYXI6IGxlZnQ7CisgICAgICAgICAgICBwb3NpdGlvbjogYWJz
b2x1dGU7CisgICAgICAgICAgICB0b3A6IDMwcHg7CisgICAgICAgIH0KKyAgICAgICAgI3Rlc3Qg
PiBkaXYgeworICAgICAgICAgICAgY2xlYXI6IGxlZnQ7CisgICAgICAgIH0KKyAgICAgICAgI3Rl
c3QgPiBkaXYgPiBkaXYgeworICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7CisgICAgICAgICAgICB3
aWR0aDogNXB4OworICAgICAgICAgICAgaGVpZ2h0OiAxMHB4OworICAgICAgICAgICAgYmFja2dy
b3VuZDogbmF2eTsKKyAgICAgICAgfQorICAgICAgICAjY29uc29sZSB7CisgICAgICAgICAgICBj
bGVhcjogbGVmdDsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAg
ICA8ZGl2IGlkPSJjb250YWluZXIiPgorICAgICAgICA8ZGl2IGlkPSJydWxlciI+PC9kaXY+Cisg
ICAgICAgIDxkaXYgaWQ9InRlc3QiPjxkaXY+PC9kaXY+PC9kaXY+CisgICAgPC9kaXY+Cis8L2Jv
ZHk+Cis8c2NyaXB0PgorICAgIHZhciB0ZXN0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3Rlc3QnKTsKKyAgICB2YXIgcnVsZXJFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3J1bGVyJyk7CisKKyAgICBmdW5jdGlvbiBpbml0KCkKKyAgICB7CisgICAgICAgIHJ1
bGVyRWxlbWVudC5pbm5lckhUTUwgPSAnJzsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDsgaSsrKSB7CisgICAgICAgICAgICBydWxlckVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICAgICAgcnVsZXJFbGVtZW50Lmxhc3RDaGls
ZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSg1MCArIGkgKiA1MCkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdCh6b29tKQorICAgIHsKKyAgICAgICAg
dmFyIHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAg
IHRlc3RFbGVtZW50LnN0eWxlLnpvb20gPSB6b29tICsgJyUnOworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDEwMDsgaSsrKQorICAgICAgICAgICAgdGVzdEVsZW1lbnQuYXBwZW5kQ2hpbGQo
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICB0ZXN0Q29udGFpbmVyLmFw
cGVuZENoaWxkKHRlc3RFbGVtZW50KTsKKyAgICB9CisKKyAgICBpbml0KCk7CisgICAgdGVzdCgx
MDApOworICAgIHRlc3QoNjYpOworICAgIHRlc3QoMzMpOworCis8L3NjcmlwdD4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVj
dGF0aW9ucy50eHQJKHJldmlzaW9uIDExNTg3OSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2No
cm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzg3NCwzICsz
ODc0LDI0IEBAIEJVR1dLODM5NTQgOiBmYXN0L2Zvcm1zL2lucHV0LXRleHQtZG91YmwKIEJVR1dL
ODM5NTQgOiBmYXN0L3JlcGFpbnQvdGFibGUtaG92ZXItb24tbGluay5odG1sID0gVEVYVAogQlVH
V0s4Mzk1NCA6IGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9qYXZhc2NyaXB0bGluay1mcmFtZXMuaHRt
bCA9IFRFWFQKIEJVR1dLODM5NTQgOiBmYXN0L2Zvcm1zL2RhdGUvZGF0ZS1hcHBlYXJhbmNlLmh0
bWwgPSBURVhUCisKKy8vIEFzc2lnbmluZyBuZWdhdGl2ZSBudW1iZXJzIHRvIHVuc2lnbmVkIHR5
cGVzLCB0cmlnZ2VycyB3YXJuaW5ncyB0byBzdGRvdXQgaW4gRGVidWcKK0JVR1dLNjg3NDQgREVC
VUcgOiBmYXN0L2Zvcm1zL251bWJlci9zcGluLWluLW11bHRpLWNvbHVtbi5odG1sID0gVEVYVAor
QlVHV0s2ODc0NCBERUJVRyA6IGZhc3QvZm9ybXMvc2VsZWN0L2xpc3Rib3gtaW4tbXVsdGktY29s
dW1uLmh0bWwgPSBURVhUCitCVUdXSzY4NzQ0IERFQlVHIDogZmFzdC9mb3Jtcy9yYW5nZS9zbGlk
ZXItaW4tbXVsdGktY29sdW1uLmh0bWwgPSBURVhUCitCVUdXSzY4NzQ0IERFQlVHIDogZmFzdC9t
dWx0aWNvbC9zaW5nbGUtbGluZS5odG1sID0gVEVYVAorQlVHV0s2ODc0NCBERUJVRyA6IGZhc3Qv
bXVsdGljb2wvY2xvbmUtYmxvY2stY2hpbGRyZW4taW5saW5lLW1pc21hdGNoLWNyYXNoLmh0bWwg
PSBURVhUCitCVUdXSzY4NzQ0IERFQlVHIDogZmFzdC9tdWx0aWNvbC9zcGFuL3NwYW4tYXMtbmVz
dGVkLWNvbHVtbnMtY2hpbGQtZHluYW1pYy5odG1sID0gVEVYVAorQlVHV0s2ODc0NCBERUJVRyA6
IGZhc3QvbXVsdGljb2wvc3Bhbi9zcGFuLWFzLWltbWVkaWF0ZS1jaGlsZC1nZW5lcmF0ZWQtY29u
dGVudC5odG1sID0gVEVYVAorQlVHV0s2ODc0NCBERUJVRyA6IGZhc3QvbXVsdGljb2wvc3Bhbi9z
cGFuLWFzLWltbWVkaWF0ZS1jb2x1bW5zLWNoaWxkLmh0bWwgPSBURVhUCitCVUdXSzY4NzQ0IERF
QlVHIDogZmFzdC9tdWx0aWNvbC9zcGFuL3NwYW4tYXMtaW1tZWRpYXRlLWNvbHVtbnMtY2hpbGQt
ZHluYW1pYy5odG1sID0gVEVYVAorQlVHV0s2ODc0NCBERUJVRyA6IGZhc3QvbXVsdGljb2wvc3Bh
bi9zcGFuLWFzLW5lc3RlZC1jb2x1bW5zLWNoaWxkLmh0bWwgPSBURVhUCitCVUdXSzY4NzQ0IERF
QlVHIDogZmFzdC9tdWx0aWNvbC9zcGFuL3NwYW4tYXMtaW1tZWRpYXRlLWNoaWxkLWNvbXBsZXgt
c3BsaXR0aW5nLmh0bWwgPSBURVhUCitCVUdXSzY4NzQ0IERFQlVHIDogZmFzdC9ibG9jay9ibG9j
ay1yZW1vdmUtY2hpbGQtZGVsZXRlLWxpbmUtYm94LWNyYXNoLmh0bWwgPSBURVhUCisKKy8vIE92
ZXJmbG93aW5nIHZhbHVlcyBjYXVzZSB3YXJuaW5ncyB0byBzdGRvdXQgaW4gRnJhY3Rpb25hbExh
eW91dFVuaXQgaW4gRGVidWcKK0JVR1dLODUzMDMgREVCVUcgOiBmYXN0L2NhbnZhcy9jYW52YXMt
dG9EYXRhVVJMLWNyYXNoLmh0bWwgPSBURVhUCitCVUdXSzg1MzAzIERFQlVHIDogZmFzdC9zcGF0
aWFsLW5hdmlnYXRpb24vc25hdi11bml0LW92ZXJmbG93LWFuZC1zY3JvbGwtaW4tZGlyZWN0aW9u
Lmh0bWwgPSBURVhUCitCVUdXSzg1MzAzIERFQlVHIDogZmFzdC9vdmVyZmxvdy9vdmVyZmxvdy1o
ZWlnaHQtZmxvYXQtbm90LXJlbW92ZWQtY3Jhc2gzLmh0bWwgPSBURVhUCitCVUdXSzg1MzAzIERF
QlVHIDogZmFzdC9zZWxlY3RvcnMvcXVlcnlTZWxlY3Rvci1pbi1yYW5nZS1jcmFzaC5odG1sID0g
VEVYVAorQlVHV0s4NTMwMyBERUJVRyA6IGZhc3QvYmxvY2svZmxvYXQvbm8tb3Zlcmhhbmdpbmct
ZmxvYXQtY3Jhc2guaHRtbCA9IFRFWFQKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2VmbC90
ZXN0X2V4cGVjdGF0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0v
ZWZsL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkocmV2aXNpb24gMTE1ODc5KQorKysgTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZWZsL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MjA4LDMgKzIwOCwyNiBAQCBCVUdXSzg0NzEwIDogZmFzdC9mb3Jtcy90ZXh0YXJlYS10eXBlLXNw
CiAvLyBSZXF1aXJlcyBXZWJQIHN1cHBvcnQuCiBCVUdXS0VGTCBTS0lQIDogZmFzdC9jYW52YXMv
Y2FudmFzLXRvRGF0YVVSTC13ZWJwLmh0bWwgPSBGQUlMCiBCVUdXS0VGTCBTS0lQIDogZmFzdC9p
bWFnZXMvd2VicC1pbWFnZS1kZWNvZGluZy5odG1sID0gRkFJTAorCisvLyBBc3NpZ25pbmcgbmVn
YXRpdmUgbnVtYmVycyB0byB1bnNpZ25lZCB0eXBlcywgdHJpZ2dlcnMgd2FybmluZ3MgdG8gc3Rk
b3V0IGluIERlYnVnCitCVUdXSzY4NzQ0IERFQlVHIDogZmFzdC9mb3Jtcy9udW1iZXIvc3Bpbi1p
bi1tdWx0aS1jb2x1bW4uaHRtbCA9IFRFWFQKK0JVR1dLNjg3NDQgREVCVUcgOiBmYXN0L2Zvcm1z
L3NlbGVjdC9saXN0Ym94LWluLW11bHRpLWNvbHVtbi5odG1sID0gVEVYVAorQlVHV0s2ODc0NCBE
RUJVRyA6IGZhc3QvZm9ybXMvcmFuZ2Uvc2xpZGVyLWluLW11bHRpLWNvbHVtbi5odG1sID0gVEVY
VAorQlVHV0s2ODc0NCBERUJVRyA6IGZhc3QvbXVsdGljb2wvc2luZ2xlLWxpbmUuaHRtbCA9IFRF
WFQKK0JVR1dLNjg3NDQgREVCVUcgOiBmYXN0L211bHRpY29sL2Nsb25lLWJsb2NrLWNoaWxkcmVu
LWlubGluZS1taXNtYXRjaC1jcmFzaC5odG1sID0gVEVYVAorQlVHV0s2ODc0NCBERUJVRyA6IGZh
c3QvbXVsdGljb2wvc3Bhbi9zcGFuLWFzLW5lc3RlZC1jb2x1bW5zLWNoaWxkLWR5bmFtaWMuaHRt
bCA9IFRFWFQKK0JVR1dLNjg3NDQgREVCVUcgOiBmYXN0L211bHRpY29sL3NwYW4vc3Bhbi1hcy1p
bW1lZGlhdGUtY2hpbGQtZ2VuZXJhdGVkLWNvbnRlbnQuaHRtbCA9IFRFWFQKK0JVR1dLNjg3NDQg
REVCVUcgOiBmYXN0L211bHRpY29sL3NwYW4vc3Bhbi1hcy1pbW1lZGlhdGUtY29sdW1ucy1jaGls
ZC5odG1sID0gVEVYVAorQlVHV0s2ODc0NCBERUJVRyA6IGZhc3QvbXVsdGljb2wvc3Bhbi9zcGFu
LWFzLWltbWVkaWF0ZS1jb2x1bW5zLWNoaWxkLWR5bmFtaWMuaHRtbCA9IFRFWFQKK0JVR1dLNjg3
NDQgREVCVUcgOiBmYXN0L211bHRpY29sL3NwYW4vc3Bhbi1hcy1uZXN0ZWQtY29sdW1ucy1jaGls
ZC5odG1sID0gVEVYVAorQlVHV0s2ODc0NCBERUJVRyA6IGZhc3QvbXVsdGljb2wvc3Bhbi9zcGFu
LWFzLWltbWVkaWF0ZS1jb2x1bW5zLWNoaWxkLXJlbW92YWwuaHRtbCA9IFRFWFQKK0JVR1dLNjg3
NDQgREVCVUcgOiBmYXN0L211bHRpY29sL3NwYW4vc3Bhbi1hcy1pbW1lZGlhdGUtY2hpbGQtcHJv
cGVydHktcmVtb3ZhbC5odG1sID0gVEVYVAorQlVHV0s2ODc0NCBERUJVRyA6IGZhc3QvbXVsdGlj
b2wvc3Bhbi9zcGFuLWFzLWltbWVkaWF0ZS1jaGlsZC1jb21wbGV4LXNwbGl0dGluZy5odG1sID0g
VEVYVAorQlVHV0s2ODc0NCBERUJVRyA6IGZhc3QvYmxvY2svYmxvY2stcmVtb3ZlLWNoaWxkLWRl
bGV0ZS1saW5lLWJveC1jcmFzaC5odG1sID0gVEVYVAorCisvLyBPdmVyZmxvd2luZyB2YWx1ZXMg
Y2F1c2Ugd2FybmluZ3MgdG8gc3Rkb3V0IGluIEZyYWN0aW9uYWxMYXlvdXRVbml0IGluIERlYnVn
CitCVUdXSzg1MzAzIERFQlVHIDogZmFzdC9jYW52YXMvY2FudmFzLXRvRGF0YVVSTC1jcmFzaC5o
dG1sID0gVEVYVAorQlVHV0s4NTMwMyBERUJVRyA6IGZhc3Qvc3BhdGlhbC1uYXZpZ2F0aW9uL3Nu
YXYtdW5pdC1vdmVyZmxvdy1hbmQtc2Nyb2xsLWluLWRpcmVjdGlvbi5odG1sID0gVEVYVAorQlVH
V0s4NTMwMyBERUJVRyA6IGZhc3Qvb3ZlcmZsb3cvb3ZlcmZsb3ctaGVpZ2h0LWZsb2F0LW5vdC1y
ZW1vdmVkLWNyYXNoMy5odG1sID0gVEVYVAorQlVHV0s4NTMwMyBERUJVRyA6IGZhc3Qvc2VsZWN0
b3JzL3F1ZXJ5U2VsZWN0b3ItaW4tcmFuZ2UtY3Jhc2guaHRtbCA9IFRFWFQKK0JVR1dLODUzMDMg
REVCVUcgOiBmYXN0L2Jsb2NrL2Zsb2F0L25vLW92ZXJoYW5naW5nLWZsb2F0LWNyYXNoLmh0bWwg
PSBURVhUCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvdGVzdF9leHBlY3RhdGlvbnMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay90ZXN0X2V4cGVjdGF0
aW9ucy50eHQJKHJldmlzaW9uIDExNTg3OSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay90
ZXN0X2V4cGVjdGF0aW9ucy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE1NDMsNiArMTU0MywyNSBA
QCBCVUdXSzg0Nzc2IDogaWV0ZXN0Y2VudGVyL2NzczMvbXVsdGljb2x1CiBCVUdXSzg0Nzc3IDog
aWV0ZXN0Y2VudGVyL2NzczMvbXVsdGljb2x1bW4vY29sdW1uLXdpZHRoLWFwcGxpZXMtdG8tMDE1
Lmh0bSA9IElNQUdFCiBCVUdXSzg0Nzc4IDogaWV0ZXN0Y2VudGVyL2NzczMvbXVsdGljb2x1bW4v
Y29sdW1uLXdpZHRoLW5lZ2F0aXZlLTAwMS5odG0gPSBJTUFHRQogCisvLyBBc3NpZ25pbmcgbmVn
YXRpdmUgbnVtYmVycyB0byB1bnNpZ25lZCB0eXBlcywgdHJpZ2dlcnMgd2FybmluZ3MgdG8gc3Rk
b3V0IGluIERlYnVnCitCVUdXSzY4NzQ0IERFQlVHIDogZmFzdC9mb3Jtcy9zZWxlY3QvbGlzdGJv
eC1pbi1tdWx0aS1jb2x1bW4uaHRtbCA9IFRFWFQKK0JVR1dLNjg3NDQgREVCVUcgOiBmYXN0L211
bHRpY29sL3NpbmdsZS1saW5lLmh0bWwgPSBURVhUCitCVUdXSzY4NzQ0IERFQlVHIDogZmFzdC9t
dWx0aWNvbC9jbG9uZS1ibG9jay1jaGlsZHJlbi1pbmxpbmUtbWlzbWF0Y2gtY3Jhc2guaHRtbCA9
IFRFWFQKK0JVR1dLNjg3NDQgREVCVUcgOiBmYXN0L211bHRpY29sL3NwYW4vc3Bhbi1hcy1uZXN0
ZWQtY29sdW1ucy1jaGlsZC1keW5hbWljLmh0bWwgPSBURVhUCitCVUdXSzY4NzQ0IERFQlVHIDog
ZmFzdC9tdWx0aWNvbC9zcGFuL3NwYW4tYXMtaW1tZWRpYXRlLWNoaWxkLWdlbmVyYXRlZC1jb250
ZW50Lmh0bWwgPSBURVhUCitCVUdXSzY4NzQ0IERFQlVHIDogZmFzdC9tdWx0aWNvbC9zcGFuL3Nw
YW4tYXMtaW1tZWRpYXRlLWNvbHVtbnMtY2hpbGQuaHRtbCA9IFRFWFQKK0JVR1dLNjg3NDQgREVC
VUcgOiBmYXN0L211bHRpY29sL3NwYW4vc3Bhbi1hcy1pbW1lZGlhdGUtY29sdW1ucy1jaGlsZC1k
eW5hbWljLmh0bWwgPSBURVhUCitCVUdXSzY4NzQ0IERFQlVHIDogZmFzdC9tdWx0aWNvbC9zcGFu
L3NwYW4tYXMtbmVzdGVkLWNvbHVtbnMtY2hpbGQuaHRtbCA9IFRFWFQKK0JVR1dLNjg3NDQgREVC
VUcgOiBmYXN0L211bHRpY29sL3NwYW4vc3Bhbi1hcy1pbW1lZGlhdGUtY2hpbGQtY29tcGxleC1z
cGxpdHRpbmcuaHRtbCA9IFRFWFQKK0JVR1dLNjg3NDQgREVCVUcgOiBmYXN0L2Jsb2NrL2Jsb2Nr
LXJlbW92ZS1jaGlsZC1kZWxldGUtbGluZS1ib3gtY3Jhc2guaHRtbCA9IFRFWFQKKworLy8gT3Zl
cmZsb3dpbmcgdmFsdWVzIGNhdXNlIHdhcm5pbmdzIHRvIHN0ZG91dCBpbiBGcmFjdGlvbmFsTGF5
b3V0VW5pdCBpbiBEZWJ1ZworQlVHV0s4NTMwMyBERUJVRyA6IGZhc3QvY2FudmFzL2NhbnZhcy10
b0RhdGFVUkwtY3Jhc2guaHRtbCA9IFRFWFQKK0JVR1dLODUzMDMgREVCVUcgOiBmYXN0L3NwYXRp
YWwtbmF2aWdhdGlvbi9zbmF2LXVuaXQtb3ZlcmZsb3ctYW5kLXNjcm9sbC1pbi1kaXJlY3Rpb24u
aHRtbCA9IFRFWFQKK0JVR1dLODUzMDMgREVCVUcgOiBmYXN0L292ZXJmbG93L292ZXJmbG93LWhl
aWdodC1mbG9hdC1ub3QtcmVtb3ZlZC1jcmFzaDMuaHRtbCA9IFRFWFQKK0JVR1dLODUzMDMgREVC
VUcgOiBmYXN0L3NlbGVjdG9ycy9xdWVyeVNlbGVjdG9yLWluLXJhbmdlLWNyYXNoLmh0bWwgPSBU
RVhUCitCVUdXSzg1MzAzIERFQlVHIDogZmFzdC9ibG9jay9mbG9hdC9uby1vdmVyaGFuZ2luZy1m
bG9hdC1jcmFzaC5odG1sID0gVEVYVAorCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KIC8vIEVuZCBvZiBUZXN0cyBmYWlsaW5nCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy90ZXN0X2V4cGVjdGF0aW9ucy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3Rlc3RfZXhwZWN0YXRp
b25zLnR4dAkocmV2aXNpb24gMTE1ODc5KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3Rl
c3RfZXhwZWN0YXRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTk4LDMgKzE5OCwyNiBAQCBC
VUdXSzg1NDAxIDogbWVkaWEvdmlkZW8tY29sb3JzcGFjZS15dXY0CiBCVUdXSzg1NDA0IDogZmFz
dC9sb2FkZXIvamF2YXNjcmlwdC11cmwtaW4tZW1iZWQuaHRtbCA9IFRFWFQgUEFTUwogCiBCVUdX
Szg1NDA4IDogc3ZnL2JhdGlrL3RleHQvbG9uZ1RleHRPblBhdGguc3ZnID0gVEVYVCBQQVNTCisK
Ky8vIEFzc2lnbmluZyBuZWdhdGl2ZSBudW1iZXJzIHRvIHVuc2lnbmVkIHR5cGVzLCB0cmlnZ2Vy
cyB3YXJuaW5ncyB0byBzdGRvdXQgaW4gRGVidWcKK0JVR1dLNjg3NDQgREVCVUcgOiBmYXN0L2Zv
cm1zL251bWJlci9zcGluLWluLW11bHRpLWNvbHVtbi5odG1sID0gVEVYVAorQlVHV0s2ODc0NCBE
RUJVRyA6IGZhc3QvZm9ybXMvc2VsZWN0L2xpc3Rib3gtaW4tbXVsdGktY29sdW1uLmh0bWwgPSBU
RVhUCitCVUdXSzY4NzQ0IERFQlVHIDogZmFzdC9mb3Jtcy9yYW5nZS9zbGlkZXItaW4tbXVsdGkt
Y29sdW1uLmh0bWwgPSBURVhUCitCVUdXSzY4NzQ0IERFQlVHIDogZmFzdC9tdWx0aWNvbC9zaW5n
bGUtbGluZS5odG1sID0gVEVYVAorQlVHV0s2ODc0NCBERUJVRyA6IGZhc3QvbXVsdGljb2wvY2xv
bmUtYmxvY2stY2hpbGRyZW4taW5saW5lLW1pc21hdGNoLWNyYXNoLmh0bWwgPSBURVhUCitCVUdX
SzY4NzQ0IERFQlVHIDogZmFzdC9tdWx0aWNvbC9zcGFuL3NwYW4tYXMtbmVzdGVkLWNvbHVtbnMt
Y2hpbGQtZHluYW1pYy5odG1sID0gVEVYVAorQlVHV0s2ODc0NCBERUJVRyA6IGZhc3QvbXVsdGlj
b2wvc3Bhbi9zcGFuLWFzLWltbWVkaWF0ZS1jaGlsZC1nZW5lcmF0ZWQtY29udGVudC5odG1sID0g
VEVYVAorQlVHV0s2ODc0NCBERUJVRyA6IGZhc3QvbXVsdGljb2wvc3Bhbi9zcGFuLWFzLWltbWVk
aWF0ZS1jb2x1bW5zLWNoaWxkLmh0bWwgPSBURVhUCitCVUdXSzY4NzQ0IERFQlVHIDogZmFzdC9t
dWx0aWNvbC9zcGFuL3NwYW4tYXMtaW1tZWRpYXRlLWNvbHVtbnMtY2hpbGQtZHluYW1pYy5odG1s
ID0gVEVYVAorQlVHV0s2ODc0NCBERUJVRyA6IGZhc3QvbXVsdGljb2wvc3Bhbi9zcGFuLWFzLW5l
c3RlZC1jb2x1bW5zLWNoaWxkLmh0bWwgPSBURVhUCitCVUdXSzY4NzQ0IERFQlVHIDogZmFzdC9t
dWx0aWNvbC9zcGFuL3NwYW4tYXMtaW1tZWRpYXRlLWNvbHVtbnMtY2hpbGQtcmVtb3ZhbC5odG1s
ID0gVEVYVAorQlVHV0s2ODc0NCBERUJVRyA6IGZhc3QvbXVsdGljb2wvc3Bhbi9zcGFuLWFzLWlt
bWVkaWF0ZS1jaGlsZC1wcm9wZXJ0eS1yZW1vdmFsLmh0bWwgPSBURVhUCitCVUdXSzY4NzQ0IERF
QlVHIDogZmFzdC9tdWx0aWNvbC9zcGFuL3NwYW4tYXMtaW1tZWRpYXRlLWNoaWxkLWNvbXBsZXgt
c3BsaXR0aW5nLmh0bWwgPSBURVhUCitCVUdXSzY4NzQ0IERFQlVHIDogZmFzdC9ibG9jay9ibG9j
ay1yZW1vdmUtY2hpbGQtZGVsZXRlLWxpbmUtYm94LWNyYXNoLmh0bWwgPSBURVhUCisKKy8vIE92
ZXJmbG93aW5nIHZhbHVlcyBjYXVzZSB3YXJuaW5ncyB0byBzdGRvdXQgaW4gRnJhY3Rpb25hbExh
eW91dFVuaXQgaW4gRGVidWcKK0JVR1dLODUzMDMgREVCVUcgOiBmYXN0L2NhbnZhcy9jYW52YXMt
dG9EYXRhVVJMLWNyYXNoLmh0bWwgPSBURVhUCitCVUdXSzg1MzAzIERFQlVHIDogZmFzdC9zcGF0
aWFsLW5hdmlnYXRpb24vc25hdi11bml0LW92ZXJmbG93LWFuZC1zY3JvbGwtaW4tZGlyZWN0aW9u
Lmh0bWwgPSBURVhUCitCVUdXSzg1MzAzIERFQlVHIDogZmFzdC9vdmVyZmxvdy9vdmVyZmxvdy1o
ZWlnaHQtZmxvYXQtbm90LXJlbW92ZWQtY3Jhc2gzLmh0bWwgPSBURVhUCitCVUdXSzg1MzAzIERF
QlVHIDogZmFzdC9zZWxlY3RvcnMvcXVlcnlTZWxlY3Rvci1pbi1yYW5nZS1jcmFzaC5odG1sID0g
VEVYVAorQlVHV0s4NTMwMyBERUJVRyA6IGZhc3QvYmxvY2svZmxvYXQvbm8tb3Zlcmhhbmdpbmct
ZmxvYXQtY3Jhc2guaHRtbCA9IFRFWFQKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L3Rl
c3RfZXhwZWN0YXRpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9x
dC90ZXN0X2V4cGVjdGF0aW9ucy50eHQJKHJldmlzaW9uIDExNTg3OSkKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL3F0L3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTks
MyArNTksMjYgQEAgQlVHV0s4NTIwMyA6IGlldGVzdGNlbnRlci9jc3MzL211bHRpY29sdQogQlVH
V0s4NTIwMyA6IGlldGVzdGNlbnRlci9jc3MzL211bHRpY29sdW1uL2NvbHVtbi13aWR0aC1hcHBs
aWVzLXRvLTAwOC5odG0gPSBJTUFHRQogQlVHV0s4NTIwMyA6IGlldGVzdGNlbnRlci9jc3MzL211
bHRpY29sdW1uL2NvbHVtbi13aWR0aC1wZXJjZW50YWdlLTAwMS5odG0gPSBJTUFHRQogQlVHV0s4
NTIwMyA6IGlldGVzdGNlbnRlci9jc3MzL211bHRpY29sdW1uL2NvbHVtbi1jb250YWluaW5nLWJs
b2NrLTAwMy5odG0gPSBJTUFHRQorCisvLyBBc3NpZ25pbmcgbmVnYXRpdmUgbnVtYmVycyB0byB1
bnNpZ25lZCB0eXBlcywgdHJpZ2dlcnMgd2FybmluZ3MgdG8gc3Rkb3V0IGluIERlYnVnCitCVUdX
SzY4NzQ0IERFQlVHIDogZmFzdC9mb3Jtcy9udW1iZXIvc3Bpbi1pbi1tdWx0aS1jb2x1bW4uaHRt
bCA9IFRFWFQKK0JVR1dLNjg3NDQgREVCVUcgOiBmYXN0L2Zvcm1zL3NlbGVjdC9saXN0Ym94LWlu
LW11bHRpLWNvbHVtbi5odG1sID0gVEVYVAorQlVHV0s2ODc0NCBERUJVRyA6IGZhc3QvZm9ybXMv
cmFuZ2Uvc2xpZGVyLWluLW11bHRpLWNvbHVtbi5odG1sID0gVEVYVAorQlVHV0s2ODc0NCBERUJV
RyA6IGZhc3QvbXVsdGljb2wvc2luZ2xlLWxpbmUuaHRtbCA9IFRFWFQKK0JVR1dLNjg3NDQgREVC
VUcgOiBmYXN0L211bHRpY29sL2Nsb25lLWJsb2NrLWNoaWxkcmVuLWlubGluZS1taXNtYXRjaC1j
cmFzaC5odG1sID0gVEVYVAorQlVHV0s2ODc0NCBERUJVRyA6IGZhc3QvbXVsdGljb2wvc3Bhbi9z
cGFuLWFzLW5lc3RlZC1jb2x1bW5zLWNoaWxkLWR5bmFtaWMuaHRtbCA9IFRFWFQKK0JVR1dLNjg3
NDQgREVCVUcgOiBmYXN0L211bHRpY29sL3NwYW4vc3Bhbi1hcy1pbW1lZGlhdGUtY2hpbGQtZ2Vu
ZXJhdGVkLWNvbnRlbnQuaHRtbCA9IFRFWFQKK0JVR1dLNjg3NDQgREVCVUcgOiBmYXN0L211bHRp
Y29sL3NwYW4vc3Bhbi1hcy1pbW1lZGlhdGUtY29sdW1ucy1jaGlsZC5odG1sID0gVEVYVAorQlVH
V0s2ODc0NCBERUJVRyA6IGZhc3QvbXVsdGljb2wvc3Bhbi9zcGFuLWFzLWltbWVkaWF0ZS1jb2x1
bW5zLWNoaWxkLWR5bmFtaWMuaHRtbCA9IFRFWFQKK0JVR1dLNjg3NDQgREVCVUcgOiBmYXN0L211
bHRpY29sL3NwYW4vc3Bhbi1hcy1uZXN0ZWQtY29sdW1ucy1jaGlsZC5odG1sID0gVEVYVAorQlVH
V0s2ODc0NCBERUJVRyA6IGZhc3QvbXVsdGljb2wvc3Bhbi9zcGFuLWFzLWltbWVkaWF0ZS1jb2x1
bW5zLWNoaWxkLXJlbW92YWwuaHRtbCA9IFRFWFQKK0JVR1dLNjg3NDQgREVCVUcgOiBmYXN0L211
bHRpY29sL3NwYW4vc3Bhbi1hcy1pbW1lZGlhdGUtY2hpbGQtcHJvcGVydHktcmVtb3ZhbC5odG1s
ID0gVEVYVAorQlVHV0s2ODc0NCBERUJVRyA6IGZhc3QvbXVsdGljb2wvc3Bhbi9zcGFuLWFzLWlt
bWVkaWF0ZS1jaGlsZC1jb21wbGV4LXNwbGl0dGluZy5odG1sID0gVEVYVAorQlVHV0s2ODc0NCBE
RUJVRyA6IGZhc3QvYmxvY2svYmxvY2stcmVtb3ZlLWNoaWxkLWRlbGV0ZS1saW5lLWJveC1jcmFz
aC5odG1sID0gVEVYVAorCisvLyBPdmVyZmxvd2luZyB2YWx1ZXMgY2F1c2Ugd2FybmluZ3MgdG8g
c3Rkb3V0IGluIEZyYWN0aW9uYWxMYXlvdXRVbml0IGluIERlYnVnCitCVUdXSzg1MzAzIERFQlVH
IDogZmFzdC9jYW52YXMvY2FudmFzLXRvRGF0YVVSTC1jcmFzaC5odG1sID0gVEVYVAorQlVHV0s4
NTMwMyBERUJVRyA6IGZhc3Qvc3BhdGlhbC1uYXZpZ2F0aW9uL3NuYXYtdW5pdC1vdmVyZmxvdy1h
bmQtc2Nyb2xsLWluLWRpcmVjdGlvbi5odG1sID0gVEVYVAorQlVHV0s4NTMwMyBERUJVRyA6IGZh
c3Qvb3ZlcmZsb3cvb3ZlcmZsb3ctaGVpZ2h0LWZsb2F0LW5vdC1yZW1vdmVkLWNyYXNoMy5odG1s
ID0gVEVYVAorQlVHV0s4NTMwMyBERUJVRyA6IGZhc3Qvc2VsZWN0b3JzL3F1ZXJ5U2VsZWN0b3It
aW4tcmFuZ2UtY3Jhc2guaHRtbCA9IFRFWFQKK0JVR1dLODUzMDMgREVCVUcgOiBmYXN0L2Jsb2Nr
L2Zsb2F0L25vLW92ZXJoYW5naW5nLWZsb2F0LWNyYXNoLmh0bWwgPSBURVhUCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140054</attachid>
            <date>2012-05-03 11:15:37 -0700</date>
            <delta_ts>2012-05-03 12:08:53 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-60318-20120503111536.patch</filename>
            <type>text/plain</type>
            <size>42300</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNTk5MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDEyLTA1LTAzICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4gYW5kIEVtaWwgQSBFa2x1bmQgPGVhZUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgW21ldGFdIFN3aXRjaCBhd2F5IGZyb20gaW50ZWdlcnMgcmVw
cmVzZW50aW5nIHBpeGVscyBmb3IgbGF5b3V0L2V2ZW50IGhhbmRsaW5nL3JlbmRlcmluZworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMTgKKworICAg
ICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KKworICAgICAgICBTd2FwcGluZyB0aGUgTGF5
b3V0VW5pdCBiYWNrZW5kIHRvIEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyb20gaW50LgorICAgICAg
ICAKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgaXMgYSBuZXcgdHlwZSB0aGF0IHVzZXMg
YW4gaW50ZWdlciB0aGF0IGNhbiByZXByZXNlbnQgYSBmcmFjdGlvbiBvZiBhCisgICAgICAgIHBp
eGVsLiBUaGUgRU5BQkxFX1NVQlBJWEVMX0xBWU9VVCBmZWF0dXJlIGZsYWdzIHRvZ2dsZXMgdGhp
cyBmcmFjdGlvbiBiZXR3ZWVuIDEvMSBhbmQgMS82MC4KKyAgICAgICAgSW5pdGlhbGx5LCBhbGwg
cGxhdGZvcm1zIHdpbGwgZGVmYXVsdCB0byBzdWJwaXhlbCBsYXlvdXQgYmVpbmcgb2ZmLCBzbyBG
cmFjdGlvbmFsTGF5b3V0VW5pdHMKKyAgICAgICAgd2lsbCBlZmZlY3RpdmVseSBjb250aW51ZSB0
byBhY3QgYXMgaW50ZWdlcnMuCisgICAgICAgIAorICAgICAgICBXaXRoIEVOQUJMRV9TVUJQSVhF
TF9MQVlPVVQgdHVybmVkIG9uLCBGcmFjdGlvbmFsTGF5b3V0VW5pdHMgYWNjdW11bGF0ZSBlcnJv
ciBmcm9tIHN1Yi1waXhlbAorICAgICAgICBDU1MgdmFsdWVzIGFuZCBhcHBsaWVkIHpvb21pbmcs
IGFuZCBwYWludGluZyB1c2VzIHBpeGVsLXNuYXBwaW5nIHRvIGFsaWduIHRoZXNlIHZhbHVlcwor
ICAgICAgICB0byBwaXhlbHMgYW5kIHByZXZlbnQgdW53YW50ZWQgYW50aS1hbGlhc2luZy4gU2Vl
IGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvd2lraS9MYXlvdXRVbml0IGZvcgorICAgICAgICBkZXRh
aWxzLgorCisgICAgICAgIEluIGEgbnVtYmVyIG9mIHByZXZpb3VzIHBhdGNoZXMsIExheW91dFVu
aXRzIHdlcmUgcGx1bWJlZCB0aHJvdWdob3V0IHRoZSByZW5kZXJpbmcgdHJlZSB0bworICAgICAg
ICBwcmVwYXJlIGZvciB0aGlzIGNoYW5nZS4gVGhpcyBpbmNsdWRlZCBhIG51bWJlciBvZiBmdW5j
dGlvbnMgaW4gTGF5b3V0VHlwZXMuaCBhbmQgdGhlCisgICAgICAgIEludFJlY3QvUG9pbnQvU2l6
ZSBjbGFzc2VzIHRoYXQgd2VyZSBlZmZlY3RpdmVseSBuby1vcHMgd2hpbGUgTGF5b3V0VW5pdHMg
d2VyZSBpbnRlZ2Vycy4gU2VlCisgICAgICAgIGh0dHA6Ly93ZWJraXQub3JnL2IvNjAzMTggZm9y
IHRoZSBleGhhdXN0aXZlIGxpc3Qgb2YgY2hhbmdlcyB0aGF0IHdlcmUgZG9uZSBpbiBwcmVwYXJh
dGlvbgorICAgICAgICBmb3IgdGhpcy4gU3Vic2VxdWVudCBwYXRjaGVzIHdpbGwgcmVtb3ZlIHVu
bmVjZXNzYXJ5IHZlcnNpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucy4KKyAgICAgICAgaHR0cDovL3dl
YmtpdC5vcmcvYi84NDYxNiB0cmFja3MgdGhlc2UgY2hhbmdlcy4KKworICAgICAgICBUZXN0czog
ZmFzdC9zdWItcGl4ZWwvY2xpZW50LXdpZHRoLWhlaWdodC1zbmFwcGluZy5odG1sCisgICAgICAg
ICAgICAgICBmYXN0L3N1Yi1waXhlbC9sYXlvdXQtYm94ZXMtd2l0aC16b29tLmh0bWwKKyAgICAg
ICAgICAgICAgIGZhc3Qvc3ViLXBpeGVsL3NpemUtb2YtYm94LXdpdGgtem9vbS5odG1sCisKKyAg
ICAgICAgKiBXZWJDb3JlLmV4cC5pbjogVXBkYXRpbmcgZnVuY3Rpb24gc2lnbmF0dXJlcyB0aGF0
IGV4cG9zZSBGcmFjdGlvbmFsTGF5b3V0VW5pdHMuCisgICAgICAgICogV2ViQ29yZS5vcmRlcjog
RGl0dG8uCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRp
bmcgbWlzc2luZyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCBoZWFkZXIuCisgICAgICAgICogY3Nz
L0NTU1ByaW1pdGl2ZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZh
bHVlOjpjb21wdXRlTGVuZ3RoKTogTm8gbG9uZ2VyIHJvdW5kcyBmb3IgaW1wcmVjaXNlIGNvbnZl
cnNpb24KKyAgICAgICAgd2hlbiBzdWItcGl4ZWwgbGF5b3V0IGlzIGVuYWJsZWQuCisgICAgICAg
ICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0Rm9yTG9jYWxab29t
KTogVXNpbmcgcm91bmRpbmcgaW5zdGVhZCBvZiBpbmNyZW1lbnRpbmcgdGhlIHZhbHVlIGJlZm9y
ZQorICAgICAgICBhZGp1c3RpbmcgdG8gYWNjb3VudCBmb3IgdHJ1bmNhdGlvbiB3aGVuIHN1Yi1w
aXhlbCBsYXlvdXQgaXMgZW5hYmxlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0VHlwZXMu
aDogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBhY3R1YWwgc3dpdGNoIGZvciBjaGFuZ2luZyBMYXlv
dXRVbml0cworICAgICAgICB0byBiZSBGcmFjdGlvbmFsTGF5b3V0VW5pdHMuIEFsc28gdXBkYXRp
bmcgc3R1YiBtZXRob2RzIHdpdGggdGhlaXIgcHJvcGVyIGltcGxlbWVudGF0aW9ucy4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUGFpbnRJbmZvLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWludEluZm86
OmluZmluaXRlUmVjdCk6IEVuc3VyaW5nIHRoZSBpbmZpbml0ZVJlY3QgZG9lc24ndCBvdmVyZmxv
dyB0aGUKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgYm91bmRzLiBMYXlvdXRSZWN0Ojpp
bmZpbml0ZVJlY3QoKSBpcyB0aGUgbGFyZ2VzdCByZWN0YW5nbGUgdGhhdCBjYW4KKyAgICAgICAg
YmUgcmVwcmVzZW50ZWQgdXNpbmcgTGF5b3V0VW5pdHMuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDbGlwUmVjdDo6b3BlcmF0b3IhPSk6IEFk
ZCBvdmVybG9hZCBvZiAhPSB0byBmaXggY29tcGxhaW5pbmcgY29tcGlsZXJzIHdoZW4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6IEFkZGluZyBjb2RlIHRvIG1pbmlt
aXplIHRlc3QgZXhwZWN0YXRpb24gY2h1cm4uIEl0CisgICAgICAgIG1heSBiZSB3b3J0aCBvdXRw
dXR0aW5nIGZsb2F0IHZhbHVlcyBpbiB0ZXN0IGV4cGVjdGF0aW9ucywgYnV0IHRoaXMgaXNuJ3Qg
ZG9uZSB3aXRoCisgICAgICAgIHRoZSBpbmxpbmUgYm94IHRyZWUgeWV0LCBlaXRoZXIuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuaDoKKyAgICAgICAgKFdlYkNvcmUpOiBB
ZGRpbmcgYSBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgb3BlcmF0b3IuCisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRl
UG9zaXRpb25BbmRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlKTogQWRkaW5nIGEgRnJhY3Rpb25h
bExheW91dFBvaW50IG9wZXJhdG9yLgorCiAyMDEyLTA1LTAzICBBbmRyZWFzIEtsaW5nICA8a2xp
bmdAd2Via2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxMTEzODcpOiBDU1NPTSByZXBy
ZXNlbnRhdGlvbiBvZiAnYmFja2dyb3VuZC1pbWFnZScgdmFsdWVzIHNob3VsZCBiZSBDU1NQcmlt
aXRpdmVWYWx1ZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxMTU5OTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMjIwLDcg
KzIyMCw3IEBAIF9fWk43V2ViQ29yZTExTWVtb3J5Q2FjaGUxM3NldENhcGFjaXRpZXMKIF9fWk43
V2ViQ29yZTExTWVtb3J5Q2FjaGUxNGV2aWN0UmVzb3VyY2VzRXYKIF9fWk43V2ViQ29yZTExTWVt
b3J5Q2FjaGUxOWdldE9yaWdpbnNXaXRoQ2FjaGVFUk4zV1RGN0hhc2hTZXRJTlMxXzZSZWZQdHJJ
TlNfMTRTZWN1cml0eU9yaWdpbkVFRU5TXzE4U2VjdXJpdHlPcmlnaW5IYXNoRU5TMV8xMEhhc2hU
cmFpdHNJUzVfRUVFRQogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTI1cmVtb3ZlUmVzb3VyY2Vz
V2l0aE9yaWdpbkVQTlNfMTRTZWN1cml0eU9yaWdpbkUKLV9fWk43V2ViQ29yZTEyUmVuZGVyT2Jq
ZWN0MTlzY3JvbGxSZWN0VG9WaXNpYmxlRVJLTlNfN0ludFJlY3RFUktOU18xNVNjcm9sbEFsaWdu
bWVudEVTNl8KK19fWk43V2ViQ29yZTExUmVuZGVyTGF5ZXIxOXNjcm9sbFJlY3RUb1Zpc2libGVF
UktOU18yMEZyYWN0aW9uYWxMYXlvdXRSZWN0RVJLTlNfMTVTY3JvbGxBbGlnbm1lbnRFUzZfCiBf
X1pON1dlYkNvcmUxMVVSTFdpdGhEYXRhRVA2TlNEYXRhUDVOU1VSTAogX19aTjdXZWJDb3JlMTFn
bG9iYWxQb2ludEVSSzhfTlNQb2ludFA4TlNXaW5kb3cKIF9fWk43V2ViQ29yZTExbWVtb3J5Q2Fj
aGVFdgpAQCAtMjM4LDcgKzIzOCw3IEBAIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTRzY3Jv
bGxPdmVyZmwKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTVoYW5kbGVBY2Nlc3NLZXlFUktO
U18yMVBsYXRmb3JtS2V5Ym9hcmRFdmVudEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTZo
YW5kbGVXaGVlbEV2ZW50RVJLTlNfMThQbGF0Zm9ybVdoZWVsRXZlbnRFCiBfX1pON1dlYkNvcmUx
MkV2ZW50SGFuZGxlcjE3c2Nyb2xsUmVjdXJzaXZlbHlFTlNfMTVTY3JvbGxEaXJlY3Rpb25FTlNf
MTdTY3JvbGxHcmFudWxhcml0eUVQTlNfNE5vZGVFCi1fX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxl
cjIwaGl0VGVzdFJlc3VsdEF0UG9pbnRFUktOU184SW50UG9pbnRFYmJOU18xN0hpdFRlc3RTY3Jv
bGxiYXJzRWpSS05TXzdJbnRTaXplRQorX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyMGhpdFRl
c3RSZXN1bHRBdFBvaW50RVJLTlNfMjFGcmFjdGlvbmFsTGF5b3V0UG9pbnRFYmJOU18xN0hpdFRl
c3RTY3JvbGxiYXJzRWpSS05TXzIwRnJhY3Rpb25hbExheW91dFNpemVFCiBfX1pON1dlYkNvcmUx
MkV2ZW50SGFuZGxlcjIxaGFuZGxlTW91c2VQcmVzc0V2ZW50RVJLTlNfMThQbGF0Zm9ybU1vdXNl
RXZlbnRFCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIzaGFuZGxlTW91c2VSZWxlYXNlRXZl
bnRFUktOU18xOFBsYXRmb3JtTW91c2VFdmVudEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVy
MjRsb2dpY2FsU2Nyb2xsUmVjdXJzaXZlbHlFTlNfMjJTY3JvbGxMb2dpY2FsRGlyZWN0aW9uRU5T
XzE3U2Nyb2xsR3JhbnVsYXJpdHlFUE5TXzROb2RlRQpAQCAtMjY4LDcgKzI2OCw4IEBAIF9fWk43
V2ViQ29yZTEyUHJpbnRDb250ZXh0OXNwb29sUGFnZUVSTlMKIF9fWk43V2ViQ29yZTEyUHJpbnRD
b250ZXh0OXNwb29sUmVjdEVSTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183SW50UmVjdEUKIF9f
Wk43V2ViQ29yZTEyUHJpbnRDb250ZXh0QzFFUE5TXzVGcmFtZUUKIF9fWk43V2ViQ29yZTEyUHJp
bnRDb250ZXh0RDFFdgotX19aTjdXZWJDb3JlMTJSZW5kZXJPYmplY3QxNnJlcGFpbnRSZWN0YW5n
bGVFUktOU183SW50UmVjdEViCitfX1pON1dlYkNvcmUxMlJlbmRlck9iamVjdDE2cmVwYWludFJl
Y3RhbmdsZUVSS05TXzIwRnJhY3Rpb25hbExheW91dFJlY3RFYgorX19aTjdXZWJDb3JlMTJSZW5k
ZXJPYmplY3QxOXNjcm9sbFJlY3RUb1Zpc2libGVFUktOU18yMEZyYWN0aW9uYWxMYXlvdXRSZWN0
RVJLTlNfMTVTY3JvbGxBbGlnbm1lbnRFUzZfCiBfX1pON1dlYkNvcmUxMlJlbmRlcldpZGdldDI4
cmVzdW1lV2lkZ2V0SGllcmFyY2h5VXBkYXRlc0V2CiBfX1pON1dlYkNvcmUxMlJlbmRlcldpZGdl
dDI5c3VzcGVuZFdpZGdldEhpZXJhcmNoeVVwZGF0ZXNFdgogX19aTjdXZWJDb3JlMTJTaGFyZWRC
dWZmZXIxMHdyYXBDRkRhdGFFUEs4X19DRkRhdGEKQEAgLTUyNyw2ICs1MjgsNyBAQCBfX1pON1dl
YkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU181UmFuCiBfX1pON1dlYkNvcmUxNmRlbGV0ZUFs
bENvb2tpZXNFdgogX19aTjdXZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJLN19OU1JlY3QKIF9f
Wk43V2ViQ29yZTE2ZW5jbG9zaW5nSW50UmVjdEVSS05TXzlGbG9hdFJlY3RFCitfX1pON1dlYkNv
cmUxNmVuY2xvc2luZ0ludFJlY3RFUktOU18yMEZyYWN0aW9uYWxMYXlvdXRSZWN0RQogX19aTjdX
ZWJDb3JlMTZpc0VuZE9mUGFyYWdyYXBoRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FTlNfMjdFZGl0
aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVFCiBfX1pON1dlYkNvcmUxNmlzVXNlclZpc2libGVVUkxF
UDhOU1N0cmluZwogX19aTjdXZWJDb3JlMTZzY3JpcHROYW1lVG9Db2RlRVJLTjNXVEY2U3RyaW5n
RQpAQCAtNjA1LDYgKzYwNyw3IEBAIF9fWk43V2ViQ29yZTE5VGV4dFJlc291cmNlRGVjb2RlcjZk
ZWNvZGUKIF9fWk43V2ViQ29yZTE5VGV4dFJlc291cmNlRGVjb2RlckMxRVJLTjNXVEY2U3RyaW5n
RVJLTlNfMTJUZXh0RW5jb2RpbmdFYgogX19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVy
RDFFdgogX19aTjdXZWJDb3JlMTlhcHBsaWNhdGlvbklzU2FmYXJpRXYKK19fWk43V2ViQ29yZTE5
cGl4ZWxTbmFwcGVkSW50UmVjdEVSS05TXzIwRnJhY3Rpb25hbExheW91dFJlY3RFCiBfX1pON1dl
YkNvcmUyMERpY3RhdGlvbkFsdGVybmF0aXZlQzFFamp5CiBfX1pON1dlYkNvcmUyMERpY3RhdGlv
bkFsdGVybmF0aXZlQzFFdgogX19aTjdXZWJDb3JlMjBEaXNwbGF5U2xlZXBEaXNhYmxlckMxRVBL
YwpAQCAtODM3LDggKzg0MCw4IEBAIF9fWk43V2ViQ29yZTVGcmFtZTEzcmFuZ2VGb3JQb2ludEVS
S05TXzgKIF9fWk43V2ViQ29yZTVGcmFtZTE0ZnJhbWVGb3JXaWRnZXRFUEtOU182V2lkZ2V0RQog
X19aTjdXZWJDb3JlNUZyYW1lMTdzZXRQYWdlWm9vbUZhY3RvckVmCiBfX1pON1dlYkNvcmU1RnJh
bWUxN3NldFRleHRab29tRmFjdG9yRWYKLV9fWk43V2ViQ29yZTVGcmFtZTIzdmlzaWJsZVBvc2l0
aW9uRm9yUG9pbnRFUktOU184SW50UG9pbnRFCiBfX1pON1dlYkNvcmU1RnJhbWUyNHNlYXJjaEZv
ckxhYmVsc0Fib3ZlQ2VsbEVQTlNfMTdSZWd1bGFyRXhwcmVzc2lvbkVQTlNfMjBIVE1MVGFibGVD
ZWxsRWxlbWVudEVQbQorX19aTjdXZWJDb3JlNUZyYW1lMjN2aXNpYmxlUG9zaXRpb25Gb3JQb2lu
dEVSS05TXzhJbnRQb2ludEUKIF9fWk43V2ViQ29yZTVGcmFtZTI1c2V0UGFnZUFuZFRleHRab29t
RmFjdG9yc0VmZgogX19aTjdXZWJDb3JlNUZyYW1lMjdyZXNpemVQYWdlUmVjdHNLZWVwaW5nUmF0
aW9FUktOU185RmxvYXRTaXplRVMzXwogX19aTjdXZWJDb3JlNUZyYW1lNmNyZWF0ZUVQTlNfNFBh
Z2VFUE5TXzIxSFRNTEZyYW1lT3duZXJFbGVtZW50RVBOU18xN0ZyYW1lTG9hZGVyQ2xpZW50RQpA
QCAtODUzLDcgKzg1Niw2IEBAIF9fWk43V2ViQ29yZTVSYW5nZTE0aXNQb2ludEluUmFuZ2VFUE5T
XzQKIF9fWk43V2ViQ29yZTVSYW5nZTZjcmVhdGVFTjNXVEYxMFBhc3NSZWZQdHJJTlNfOERvY3Vt
ZW50RUVFTlMyX0lOU180Tm9kZUVFRWlTNl9pCiBfX1pON1dlYkNvcmU1UmFuZ2U2c2V0RW5kRU4z
V1RGMTBQYXNzUmVmUHRySU5TXzROb2RlRUVFaVJpCiBfX1pON1dlYkNvcmU1UmFuZ2U4c2V0U3Rh
cnRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNE5vZGVFRUVpUmkKLV9fWk43V2ViQ29yZTVSYW5nZTl0
ZXh0UmVjdHNFUk4zV1RGNlZlY3RvcklOU183SW50UmVjdEVMbTBFRUViUE5TMF8yMFJhbmdlSW5G
aXhlZFBvc2l0aW9uRQogX19aTjdXZWJDb3JlNVJhbmdlRDFFdgogX19aTjdXZWJDb3JlNkNocm9t
ZTE2c2V0U3RhdHVzYmFyVGV4dEVQTlNfNUZyYW1lRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJD
b3JlNkNocm9tZTVwcmludEVQTlNfNUZyYW1lRQpAQCAtMTA2MSwxMCArMTA2MywxMSBAQCBfX1pO
N1dlYkNvcmU4b3BlbkZpbGVFUktOM1dURjZTdHJpbmdFTlNfCiBfX1pON1dlYkNvcmU4dG9TdHJp
bmdFUktOM1dURjZWZWN0b3JJTlNfMTFQcm94eVNlcnZlckVMbTBFRUUKIF9fWk43V2ViQ29yZTlE
T01XaW5kb3czMGRpc3BhdGNoQWxsUGVuZGluZ1VubG9hZEV2ZW50c0V2CiBfX1pON1dlYkNvcmU5
RE9NV2luZG93MzZkaXNwYXRjaEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRFdmVudHNFdgotX19aTjdX
ZWJDb3JlOUZsb2F0UmVjdEMxRVJLNkNHUmVjdAogX19aTjdXZWJDb3JlOUZsb2F0UmVjdEMxRVJL
N19OU1JlY3QKK19fWk43V2ViQ29yZTlGbG9hdFJlY3RDMUVSS05TXzIwRnJhY3Rpb25hbExheW91
dFJlY3RFCiBfX1pON1dlYkNvcmU5RmxvYXRSZWN0QzFFUktOU183SW50UmVjdEUKIF9fWk43V2Vi
Q29yZTlGbG9hdFNpemVDMUVSS05TXzdJbnRTaXplRQorX19aTjdXZWJDb3JlOUZsb2F0U2l6ZUMx
RVJLTlNfMjBGcmFjdGlvbmFsTGF5b3V0U2l6ZUUKIF9fWk43V2ViQ29yZTlGb250Q2FjaGUxM2Zv
bnREYXRhQ291bnRFdgogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTIxaW5hY3RpdmVGb250RGF0YUNv
dW50RXYKIF9fWk43V2ViQ29yZTlGb250Q2FjaGUyMXB1cmdlSW5hY3RpdmVGb250RGF0YUVpCkBA
IC0xMDc1LDEwICsxMDc4LDggQEAgX19aTjdXZWJDb3JlOUZyYW1lVHJlZTljbGVhck5hbWVFdgog
X19aTjdXZWJDb3JlOUZyYW1lVmlldzExZm9yY2VMYXlvdXRFYgogX19aTjdXZWJDb3JlOUZyYW1l
VmlldzEyc2V0TWVkaWFUeXBlRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlOUZyYW1lVmll
dzE0YWRqdXN0Vmlld1NpemVFdgotX19aTjdXZWJDb3JlOUZyYW1lVmlldzE0c2V0TWFyZ2luV2lk
dGhFaQogX19aTjdXZWJDb3JlOUZyYW1lVmlldzE0c2V0TmVlZHNMYXlvdXRFdgogX19aTjdXZWJD
b3JlOUZyYW1lVmlldzE0c2V0VHJhbnNwYXJlbnRFYgotX19aTjdXZWJDb3JlOUZyYW1lVmlldzE1
c2V0TWFyZ2luSGVpZ2h0RWkKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcxNnNldFBhaW50QmVoYXZp
b3JFagogX19aTjdXZWJDb3JlOUZyYW1lVmlldzE3YWRkU2Nyb2xsYWJsZUFyZWFFUE5TXzE0U2Ny
b2xsYWJsZUFyZWFFCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTdwYWludENvbnRyb2xUaW50c0V2
CkBAIC0xNTExLDYgKzE1MTIsOCBAQCBfX1pOSzdXZWJDb3JlOFBvc2l0aW9uMjVsZWFkaW5nV2hp
dGVzcGFjCiBfX1pOSzdXZWJDb3JlOFBvc2l0aW9uMjZ0cmFpbGluZ1doaXRlc3BhY2VQb3NpdGlv
bkVOU185RUFmZmluaXR5RWIKIF9fWk5LN1dlYkNvcmU4UG9zaXRpb244dXBzdHJlYW1FTlNfMjdF
ZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVFCiBfX1pOSzdXZWJDb3JlOURPTVdpbmRvdzI3cGVu
ZGluZ1VubG9hZEV2ZW50TGlzdGVuZXJzRXYKK19fWk5LN1dlYkNvcmU1UmFuZ2U5dGV4dFF1YWRz
RVJOM1dURjZWZWN0b3JJTlNfOUZsb2F0UXVhZEVMbTBFRUViUE5TMF8yMFJhbmdlSW5GaXhlZFBv
c2l0aW9uRQorX19aTks3V2ViQ29yZTlGbG9hdFNpemU2aXNaZXJvRXYKIF9fWk5LN1dlYkNvcmU5
RmxvYXRRdWFkMTFib3VuZGluZ0JveEV2CiBfX1pOSzdXZWJDb3JlOUZsb2F0UmVjdDEwaW50ZXJz
ZWN0c0VSS1MwXwogX19aTks3V2ViQ29yZTlGbG9hdFJlY3RjdjdfTlNSZWN0RXYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUub3JkZXIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5vcmRlcgkocmV2aXNpb24gMTE1OTkxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5vcmRlcgkod29ya2luZyBjb3B5KQpAQCAtMzUwOCw3ICszNTA4LDYgQEAgX19aTjdXZWJDb3Jl
MTBSZW5kZXJUZXh0MTNyZW1vdmVUZXh0Qm94RQogX19aTjdXZWJDb3JlMTNSb290SW5saW5lQm94
MjlyZW1vdmVMaW5lQm94RnJvbVJlbmRlck9iamVjdEV2CiBfX1pON1dlYkNvcmUxN1JlbmRlckxp
bmVCb3hMaXN0MTNyZW1vdmVMaW5lQm94RVBOU18xM0lubGluZUZsb3dCb3hFCiBfX1pOSzdXZWJD
b3JlMTFSZW5kZXJCbG9jazIwYWRqdXN0UmVjdEZvckNvbHVtbnNFUk5TXzdJbnRSZWN0RQotX19a
TjdXZWJDb3JlMTJSZW5kZXJPYmplY3QxNnJlcGFpbnRSZWN0YW5nbGVFUktOU183SW50UmVjdEVi
CiBfX1pOSzdXZWJDb3JlMjJIVE1MRm9ybUNvbnRyb2xFbGVtZW50MTFpc0ZvY3VzYWJsZUV2CiBf
X1pOSzdXZWJDb3JlMjJIVE1MRm9ybUNvbnRyb2xFbGVtZW50MTNzdXBwb3J0c0ZvY3VzRXYKIF9f
Wk43V2ViQ29yZTE1Rm9jdXNDb250cm9sbGVyMTRzZXRGb2N1c2VkTm9kZUVQTlNfNE5vZGVFTjNX
VEYxMFBhc3NSZWZQdHJJTlNfNUZyYW1lRUVFCkBAIC02MjQ4LDEzICs2MjQ3LDExIEBAIF9fWk43
V2ViQ29yZTIxQWNjZXNzaWJpbGl0eU1lbnVMaXN0RDBFdgogX19aTjdXZWJDb3JlMjVBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0RDJFdgogX19aTjdXZWJDb3JlMTRSZW5kZXJNZW51TGlzdDExcmVt
b3ZlQ2hpbGRFUE5TXzEyUmVuZGVyT2JqZWN0RQogX19aTjdXZWJDb3JlMTRSZW5kZXJNZW51TGlz
dEQwRXYKLV9fWk43V2ViQ29yZTEzSGl0VGVzdFJlc3VsdEMxRVJLTlNfOEludFBvaW50RQogX19a
TjdXZWJDb3JlMTFSZW5kZXJMYXllcjdoaXRUZXN0RVJLTlNfMTRIaXRUZXN0UmVxdWVzdEVSTlNf
MTNIaXRUZXN0UmVzdWx0RQogX19aTjdXZWJDb3JlMTFSZW5kZXJMYXllcjEyaGl0VGVzdExheWVy
RVBTMF9TMV9SS05TXzE0SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0VGVzdFJlc3VsdEVSS05TXzdJ
bnRSZWN0RVJLTlNfOEludFBvaW50RWJQS05TXzI0SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlRVBk
CiBfX1pON1dlYkNvcmUxM0hpdFRlc3RSZXN1bHQxMnJlY3RGb3JQb2ludEVSS05TXzhJbnRQb2lu
dEVqampqCiBfX1pON1dlYkNvcmUxMVJlbmRlckxheWVyMzV1cGRhdGUzRFRyYW5zZm9ybWVkRGVz
Y2VuZGFudFN0YXR1c0V2CiBfX1pON1dlYkNvcmUxMVJlbmRlckxheWVyMTFoaXRUZXN0TGlzdEVQ
TjNXVEY2VmVjdG9ySVBTMF9MbTBFRUVTM19SS05TXzE0SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0
VGVzdFJlc3VsdEVSS05TXzdJbnRSZWN0RVJLTlNfOEludFBvaW50RVBLTlNfMjRIaXRUZXN0aW5n
VHJhbnNmb3JtU3RhdGVFUGRTS19TSl9iCi1fX1pON1dlYkNvcmUxM0hpdFRlc3RSZXN1bHRDMUVS
S05TXzhJbnRQb2ludEVqampqCiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJMYXllcjE1aGl0VGVzdENv
bnRlbnRzRVJLTlNfMTRIaXRUZXN0UmVxdWVzdEVSTlNfMTNIaXRUZXN0UmVzdWx0RVJLTlNfN0lu
dFJlY3RFUktOU184SW50UG9pbnRFTlNfMTNIaXRUZXN0RmlsdGVyRQogX19aTjdXZWJDb3JlMTJS
ZW5kZXJPYmplY3Q3aGl0VGVzdEVSS05TXzE0SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0VGVzdFJl
c3VsdEVSS05TXzhJbnRQb2ludEVpaU5TXzEzSGl0VGVzdEZpbHRlckUKIF9fWk43V2ViQ29yZTEx
UmVuZGVyQmxvY2sxMW5vZGVBdFBvaW50RVJLTlNfMTRIaXRUZXN0UmVxdWVzdEVSTlNfMTNIaXRU
ZXN0UmVzdWx0RVJLTlNfOEludFBvaW50RWlpTlNfMTNIaXRUZXN0QWN0aW9uRQpAQCAtMTQzNjAs
NyArMTQzNTcsNiBAQCBfX1pOM1dURjlIYXNoVGFibGVJUEt2U3Q0cGFpcklTMl9ON1dlYkNvCiBf
X1pOM1dURjlIYXNoVGFibGVJUEt2U3Q0cGFpcklTMl9ON1dlYkNvcmU3SW50U2l6ZUVFTlNfMThQ
YWlyRmlyc3RFeHRyYWN0b3JJUzZfRUVOU183UHRySGFzaElTMl9FRU5TXzE0UGFpckhhc2hUcmFp
dHNJTlNfMTBIYXNoVHJhaXRzSVMyX0VFTlNDX0lTNV9FRUVFU0RfRTRmaW5kSVMyX05TXzIySWRl
bnRpdHlIYXNoVHJhbnNsYXRvcklTMl9TNl9TQV9FRUVFTlNfMTdIYXNoVGFibGVJdGVyYXRvcklT
Ml9TNl9TOF9TQV9TRl9TRF9FRVJLVF8KIF9fWk4zV1RGOUhhc2hUYWJsZUlQS3ZTdDRwYWlySVMy
X043V2ViQ29yZTdJbnRTaXplRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTNl9FRU5TXzdQdHJI
YXNoSVMyX0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzJfRUVOU0NfSVM1
X0VFRUVTRF9FNnJlaGFzaEVpCiBfX1pOM1dURjlIYXNoVGFibGVJUEt2U3Q0cGFpcklTMl9ON1dl
YkNvcmU3SW50U2l6ZUVFTlNfMThQYWlyRmlyc3RFeHRyYWN0b3JJUzZfRUVOU183UHRySGFzaElT
Ml9FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJhaXRzSVMyX0VFTlNDX0lTNV9FRUVF
U0RfRWFTRVJLU0dfCi1fX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIwaGl0VGVzdFJlc3VsdEF0
UG9pbnRFUktOU184SW50UG9pbnRFYmJOU18xN0hpdFRlc3RTY3JvbGxiYXJzRWpSS05TXzdJbnRT
aXplRQogX19aTks3V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDEwaXNTZWxlY3RlZEV2CiBfX1pOM1dU
RjlIYXNoVGFibGVJTjdXZWJDb3JlN0ludFNpemVFU3Q0cGFpcklTMl9qRU5TXzE4UGFpckZpcnN0
RXh0cmFjdG9ySVM0X0VFTlNfN0ludEhhc2hJUzJfRUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEw
SGFzaFRyYWl0c0lTMl9FRU5TQV9JakVFRUVTQl9FMTZsb29rdXBGb3JXcml0aW5nSVMyX05TXzIy
SWRlbnRpdHlIYXNoVHJhbnNsYXRvcklTMl9TNF9TOF9FRUVFUzNfSVBTNF9iRVJLVF8KIF9fWk4z
V1RGOUhhc2hUYWJsZUlON1dlYkNvcmU3SW50U2l6ZUVTdDRwYWlySVMyX2pFTlNfMThQYWlyRmly
c3RFeHRyYWN0b3JJUzRfRUVOU183SW50SGFzaElTMl9FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNf
MTBIYXNoVHJhaXRzSVMyX0VFTlNBX0lqRUVFRVNCX0UzYWRkSVMyX2pOU18xN0hhc2hNYXBUcmFu
c2xhdG9ySVM0X1NEX1M4X0VFRUVTM19JTlNfMTdIYXNoVGFibGVJdGVyYXRvcklTMl9TNF9TNl9T
OF9TRF9TQl9FRWJFUktUX1JLVDBfCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMTU5OTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTUxMzYsNiArNTEzNiw3IEBACiAJCUI4REJEQjRDMTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRT
ZWxlY3Rpb25Db21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCOERCREI0ODEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFuZC5o
ICovOyB9OwogCQlCOERCREI0RDEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9u
Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCOERCREI0OTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5j
cHAgKi87IH07CiAJCUI4REJEQjRFMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rp
b25Db21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCOERCREI0QTEzMEIwRjhBMDBGNUNEQjEgLyogU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5o
ICovOyB9OworCQlCQUIxQzA2QTE0RkMzNjc5MDA0MjMzRkMgLyogRnJhY3Rpb25hbExheW91dFBv
aW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDRG
Q0U1NDE0RUM3OUU3MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFBvaW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkFDRjI5MDExM0IyQTBE
NTAwNzgxRjkwIC8qIExheW91dFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQUNGMjkwMDEzQjJBMEQ1MDA3ODFGOTAgLyogTGF5b3V0VHlwZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzAw
RjAwNDBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMEVGRkUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZp
bGUuaCAqLzsgfTsKIAkJQkMwMEYwMDUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwRUZGRjBFMEEx
ODU1MDBGRDA0RTMgLyogRE9NRmlsZS5tbSAqLzsgfTsKQEAgLTIyODM0LDYgKzIyODM1LDcgQEAK
IAkJCQk2NTZEMzczQTBBREJBNURFMDBBNDU1NEQgLyogRm9ybVN0YXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0MTg4NUI5MzExQjZGREE2MDAzMzgzQkIgLyogRm9ybVN1Ym1pc3Npb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzNUM0NzZEMDlBQzRENjMwMEE2QUFCNCAvKiBGb3VuZGF0aW9uRXh0
cmFzLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQUIxQzA2QTE0RkMzNjc5MDA0MjMzRkMgLyogRnJh
Y3Rpb25hbExheW91dFBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDRGQ0ZFMTE0RUYyNTA5
MDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFJlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
NEZDRTVEMTRFQzc5RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0U2l6ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTQ0RkNFNTIxNEVDNzlCQzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRV
bml0LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRp
dmVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2
ZVZhbHVlLmNwcAkocmV2aXNpb24gMTE1OTkxKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1By
aW1pdGl2ZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMxLDcgKzQzMSwxMSBAQCB0ZW1w
bGF0ZTw+IHVuc2lnbmVkIENTU1ByaW1pdGl2ZVZhbHVlOjpjCiAKIHRlbXBsYXRlPD4gTGVuZ3Ro
IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVu
ZGVyU3R5bGUqIHJvb3RTdHlsZSwgZmxvYXQgbXVsdGlwbGllciwgYm9vbCBjb21wdXRpbmdGb250
U2l6ZSkKIHsKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIHJldHVybiBMZW5ndGgo
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbXB1dGVMZW5ndGhEb3VibGUoc3R5bGUsIHJvb3RTdHlsZSwg
bXVsdGlwbGllciwgY29tcHV0aW5nRm9udFNpemUpKSwgRml4ZWQpOworI2Vsc2UKICAgICByZXR1
cm4gTGVuZ3RoKHJvdW5kRm9ySW1wcmVjaXNlQ29udmVyc2lvbjxmbG9hdD4oY29tcHV0ZUxlbmd0
aERvdWJsZShzdHlsZSwgcm9vdFN0eWxlLCBtdWx0aXBsaWVyLCBjb21wdXRpbmdGb250U2l6ZSkp
LCBGaXhlZCk7CisjZW5kaWYKIH0KIAogdGVtcGxhdGU8PiBzaG9ydCBDU1NQcmltaXRpdmVWYWx1
ZTo6Y29tcHV0ZUxlbmd0aChSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5
bGUsIGZsb2F0IG11bHRpcGxpZXIsIGJvb2wgY29tcHV0aW5nRm9udFNpemUpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxMTU5OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1MywxMCArMzUzLDE0IEBAIHN0YXRpYyBp
bnQgYWRqdXN0Rm9yTG9jYWxab29tKExheW91dFVuaXQKICAgICBmbG9hdCB6b29tRmFjdG9yID0g
bG9jYWxab29tRm9yUmVuZGVyZXIocmVuZGVyZXIpOwogICAgIGlmICh6b29tRmFjdG9yID09IDEp
CiAgICAgICAgIHJldHVybiB2YWx1ZTsKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAg
IHJldHVybiBscm91bmRmKHZhbHVlIC8gem9vbUZhY3Rvcik7CisjZWxzZQogICAgIC8vIE5lZWRl
ZCBiZWNhdXNlIGNvbXB1dGVMZW5ndGhJbnQgdHJ1bmNhdGVzIChyYXRoZXIgdGhhbiByb3VuZHMp
IHdoZW4gc2NhbGluZyB1cC4KICAgICBpZiAoem9vbUZhY3RvciA+IDEpCiAgICAgICAgIHZhbHVl
Kys7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4odmFsdWUgLyB6b29tRmFjdG9yKTsKKyNl
bmRpZgogfQogCiBpbnQgRWxlbWVudDo6b2Zmc2V0TGVmdCgpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvTGF5b3V0VHlwZXMuaAkocmV2aXNpb24gMTE1OTkxKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0xheW91dFR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDExNSArMzcs
MTAyIEBACiAjZGVmaW5lIExheW91dFR5cGVzX2gKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkZyYWN0aW9uYWxMYXlvdXRSZWN0LmgiCisjaW5jbHVkZSAiRnJhY3Rpb25hbExh
eW91dFVuaXQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1VudXNlZFBh
cmFtLmg+CisKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXR5cGVkZWYgaW50IExheW91dFVuaXQ7Ci10eXBlZGVmIEludFBvaW50IExheW91dFBv
aW50OwotdHlwZWRlZiBJbnRTaXplIExheW91dFNpemU7Ci10eXBlZGVmIEludFJlY3QgTGF5b3V0
UmVjdDsKLQotI2RlZmluZSBNQVhfTEFZT1VUX1VOSVQgSU5UX01BWAotI2RlZmluZSBNSU5fTEFZ
T1VUX1VOSVQgSU5UX01JTgotI2RlZmluZSBaRVJPX0xBWU9VVF9VTklUIDAKK3R5cGVkZWYgRnJh
Y3Rpb25hbExheW91dFVuaXQgTGF5b3V0VW5pdDsKK3R5cGVkZWYgRnJhY3Rpb25hbExheW91dFBv
aW50IExheW91dFBvaW50OwordHlwZWRlZiBGcmFjdGlvbmFsTGF5b3V0U2l6ZSBMYXlvdXRTaXpl
OwordHlwZWRlZiBGcmFjdGlvbmFsTGF5b3V0UmVjdCBMYXlvdXRSZWN0OworCisjZGVmaW5lIE1B
WF9MQVlPVVRfVU5JVCBMYXlvdXRVbml0OjptYXgoKQorI2RlZmluZSBNSU5fTEFZT1VUX1VOSVQg
TGF5b3V0VW5pdDo6bWluKCkKKyNkZWZpbmUgWkVST19MQVlPVVRfVU5JVCBMYXlvdXRVbml0KDAp
CiAKLWlubGluZSBMYXlvdXRSZWN0IGVuY2xvc2luZ0xheW91dFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQoraW5saW5lIEZyYWN0aW9uYWxMYXlvdXRSZWN0IGVuY2xvc2luZ0xheW91dFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHJl
Y3QpOwogfQogCi1pbmxpbmUgSW50UmVjdCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnN0IExheW91
dFJlY3QmIHJlY3QpCitpbmxpbmUgTGF5b3V0U2l6ZSByb3VuZGVkTGF5b3V0U2l6ZShjb25zdCBG
bG9hdFNpemUmIHMpCiB7Ci0gICAgcmV0dXJuIHJlY3Q7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xB
WU9VVCkKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFNpemUocyk7CisjZWxzZQorICAgIHJl
dHVybiByb3VuZGVkSW50U2l6ZShzKTsKKyNlbmRpZgogfQogCiBpbmxpbmUgSW50UmVjdCBwaXhl
bFNuYXBwZWRJbnRSZWN0KExheW91dFVuaXQgbGVmdCwgTGF5b3V0VW5pdCB0b3AsIExheW91dFVu
aXQgd2lkdGgsIExheW91dFVuaXQgaGVpZ2h0KQogewotICAgIHJldHVybiBJbnRSZWN0KGxlZnQs
IHRvcCwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLWlubGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZElu
dFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBzaXpl
KQotewotICAgIHJldHVybiBJbnRSZWN0KGxvY2F0aW9uLCBzaXplKTsKKyAgICByZXR1cm4gSW50
UmVjdChsZWZ0LnJvdW5kKCksIHRvcC5yb3VuZCgpLCBzbmFwU2l6ZVRvUGl4ZWwod2lkdGgsIGxl
ZnQpLCBzbmFwU2l6ZVRvUGl4ZWwoaGVpZ2h0LCB0b3ApKTsKIH0KIAogaW5saW5lIEludFJlY3Qg
cGl4ZWxTbmFwcGVkSW50UmVjdEZyb21FZGdlcyhMYXlvdXRVbml0IGxlZnQsIExheW91dFVuaXQg
dG9wLCBMYXlvdXRVbml0IHJpZ2h0LCBMYXlvdXRVbml0IGJvdHRvbSkKIHsKLSAgICByZXR1cm4g
SW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKTsKLX0KLQotaW5s
aW5lIGludCBzbmFwU2l6ZVRvUGl4ZWwoTGF5b3V0VW5pdCBzaXplLCBMYXlvdXRVbml0IGxvY2F0
aW9uKSAKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIHJldHVybiBzaXplOwot
fQotCi1pbmxpbmUgSW50U2l6ZSBwaXhlbFNuYXBwZWRJbnRTaXplKExheW91dFNpemUgc2l6ZSwg
TGF5b3V0UG9pbnQgbG9jYXRpb24pCi17Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKLSAg
ICByZXR1cm4gc2l6ZTsKLX0KLQotaW5saW5lIEludFNpemUgcm91bmRlZEludFNpemUoY29uc3Qg
TGF5b3V0U2l6ZSYgcykKLXsKLSAgICByZXR1cm4gczsKLX0KLQotaW5saW5lIExheW91dFNpemUg
cm91bmRlZExheW91dFNpemUoY29uc3QgRmxvYXRTaXplJiBzKQotewotICAgIHJldHVybiByb3Vu
ZGVkSW50U2l6ZShzKTsKLX0KLQotaW5saW5lIEludFBvaW50IHJvdW5kZWRJbnRQb2ludChjb25z
dCBMYXlvdXRQb2ludCYgcCkKLXsKLSAgICByZXR1cm4gcDsKKyAgICByZXR1cm4gSW50UmVjdChs
ZWZ0LnJvdW5kKCksIHRvcC5yb3VuZCgpLCBzbmFwU2l6ZVRvUGl4ZWwocmlnaHQgLSBsZWZ0LCBs
ZWZ0KSwgc25hcFNpemVUb1BpeGVsKGJvdHRvbSAtIHRvcCwgdG9wKSk7CiB9CiAKIGlubGluZSBM
YXlvdXRQb2ludCByb3VuZGVkTGF5b3V0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkKIHsKKyNp
ZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQocCk7CisjZWxzZQogICAgIHJldHVybiByb3VuZGVkSW50UG9pbnQocCk7CisjZW5kaWYKIH0K
IAogaW5saW5lIExheW91dFBvaW50IGZsb29yZWRMYXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50
JiBwKQogewotICAgIHJldHVybiBmbG9vcmVkSW50UG9pbnQocCk7CisgICAgcmV0dXJuIExheW91
dFBvaW50KHAueCgpLCBwLnkoKSk7CiB9CiAKIGlubGluZSBMYXlvdXRQb2ludCBmbG9vcmVkTGF5
b3V0UG9pbnQoY29uc3QgRmxvYXRTaXplJiBzKQogewotICAgIHJldHVybiBmbG9vcmVkSW50UG9p
bnQocyk7CisgICAgcmV0dXJuIExheW91dFBvaW50KHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7CiB9
CiAKIGlubGluZSBMYXlvdXRTaXplIGZsb29yZWRMYXlvdXRTaXplKGNvbnN0IEZsb2F0UG9pbnQm
IHApCiB7Ci0gICAgcmV0dXJuIExheW91dFNpemUoc3RhdGljX2Nhc3Q8aW50PihwLngoKSksIHN0
YXRpY19jYXN0PGludD4ocC55KCkpKTsKKyAgICByZXR1cm4gTGF5b3V0U2l6ZShwLngoKSwgcC55
KCkpOwogfQogCiBpbmxpbmUgaW50IHJvdW5kVG9JbnQoTGF5b3V0VW5pdCB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gdmFsdWU7CisgICAgcmV0dXJuIHZhbHVlLnJvdW5kKCk7CiB9CiAKIGlubGluZSBp
bnQgZmxvb3JUb0ludChMYXlvdXRVbml0IHZhbHVlKQogewotICAgIHJldHVybiB2YWx1ZTsKKyAg
ICByZXR1cm4gdmFsdWUudG9JbnQoKTsKIH0KIAogaW5saW5lIExheW91dFVuaXQgcm91bmRlZExh
eW91dFVuaXQoZmxvYXQgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGxyb3VuZGYodmFsdWUpOworI2lm
IEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRVbml0
KHZhbHVlKTsKKyNlbHNlCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obHJvdW5kZih2YWx1
ZSkpOworI2VuZGlmCiB9CiAKIGlubGluZSBMYXlvdXRVbml0IGNlaWxlZExheW91dFVuaXQoZmxv
YXQgdmFsdWUpCiB7CisjaWYgRU5BQkxFKFNVQlBJWEVMX0xBWU9VVCkKKyAgICByZXR1cm4gRnJh
Y3Rpb25hbExheW91dFVuaXQodmFsdWUpOworI2Vsc2UKICAgICByZXR1cm4gY2VpbGYodmFsdWUp
OworI2VuZGlmCiB9CiAKIGlubGluZSBMYXlvdXRVbml0IGFic29sdXRlVmFsdWUoY29uc3QgTGF5
b3V0VW5pdCYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGFicyh2YWx1ZSk7CisgICAgcmV0dXJuIHZh
bHVlLmFicygpOwogfQogCiBpbmxpbmUgTGF5b3V0U2l6ZSB0b0xheW91dFNpemUoY29uc3QgTGF5
b3V0UG9pbnQmIHApCkBAIC0xNjAsMjIgKzE0NywyMiBAQCBpbmxpbmUgTGF5b3V0UG9pbnQgdG9M
YXlvdXRQb2ludChjb25zdCBMCiAKIGlubGluZSBMYXlvdXRVbml0IGxheW91dE1vZChjb25zdCBM
YXlvdXRVbml0JiBudW1lcmF0b3IsIGNvbnN0IExheW91dFVuaXQmIGRlbm9taW5hdG9yKQogewot
ICAgIHJldHVybiBudW1lcmF0b3IgJSBkZW5vbWluYXRvcjsKKyAgICByZXR1cm4gbnVtZXJhdG9y
LnRvSW50KCkgJSBkZW5vbWluYXRvci50b0ludCgpOwogfQogCiBpbmxpbmUgTGF5b3V0VW5pdCBj
bGFtcFRvTGF5b3V0VW5pdChkb3VibGUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGNsYW1wVG9JbnRl
Z2VyKHZhbHVlKTsKKyAgICByZXR1cm4gY2xhbXBUbzxGcmFjdGlvbmFsTGF5b3V0VW5pdD4odmFs
dWUsIEZyYWN0aW9uYWxMYXlvdXRVbml0OjptaW4oKSwgRnJhY3Rpb25hbExheW91dFVuaXQ6Om1h
eCgpKTsKIH0KIAotaW5saW5lIGJvb2wgaXNJbnRlZ2VyVmFsdWUoY29uc3QgTGF5b3V0VW5pdCkK
K2lubGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3QoTGF5b3V0UG9pbnQgbG9jYXRpb24s
IExheW91dFNpemUgc2l6ZSkKIHsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gSW50UmVj
dChyb3VuZGVkSW50UG9pbnQobG9jYXRpb24pLCBwaXhlbFNuYXBwZWRJbnRTaXplKHNpemUsIGxv
Y2F0aW9uKSk7CiB9CiAKLWlubGluZSBMYXlvdXRVbml0IGJvdW5kZWRNdWx0aXBseShjb25zdCBM
YXlvdXRVbml0JiBhLCBjb25zdCBMYXlvdXRVbml0JiBiKQoraW5saW5lIGJvb2wgaXNJbnRlZ2Vy
VmFsdWUoY29uc3QgTGF5b3V0VW5pdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gYSAqIGI7CisgICAg
cmV0dXJuIHZhbHVlLmZsb29yKCkgPT0gdmFsdWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRJbmZvLmgJKHJldmlzaW9uIDExNTk5
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNyArMzIsOSBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAjaW5jbHVkZSAiUGFp
bnRQaGFzZS5oIgorI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogCkBAIC05Niw3ICs5OCw3IEBAIHN0cnVjdCBQ
YWludEluZm8gewogICAgIH0KICNlbmRpZgogCi0gICAgc3RhdGljIEludFJlY3QgaW5maW5pdGVS
ZWN0KCkgeyByZXR1cm4gSW50UmVjdChJTlRfTUlOIC8gMiwgSU5UX01JTiAvIDIsIElOVF9NQVgs
IElOVF9NQVgpOyB9CisgICAgc3RhdGljIEludFJlY3QgaW5maW5pdGVSZWN0KCkgeyByZXR1cm4g
SW50UmVjdChMYXlvdXRSZWN0OjppbmZpbml0ZVJlY3QoKSk7IH0KIAogICAgIC8vIEZJWE1FOiBJ
bnRyb2R1Y2Ugc2V0dGVycy9nZXR0ZXJzIGF0IHNvbWUgcG9pbnQuIFJlcXVpcmVzIGEgbG90IG9m
IGNoYW5nZXMgdGhyb3VnaG91dCByZW5kZXJpbmcvLgogICAgIEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lv
biAxMTU5OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBDbGlwUmVjdCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIHJlY3QoKSA9PSBvdGhl
ci5yZWN0KCkgJiYgaGFzUmFkaXVzKCkgPT0gb3RoZXIuaGFzUmFkaXVzKCk7IH0KICAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgQ2xpcFJlY3QmIG90aGVyKSBjb25zdCB7IHJldHVybiByZWN0KCkg
IT0gb3RoZXIucmVjdCgpIHx8IGhhc1JhZGl1cygpICE9IG90aGVyLmhhc1JhZGl1cygpOyB9Cisg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExheW91dFJlY3QmIG90aGVyUmVjdCkgY29uc3QgeyBy
ZXR1cm4gcmVjdCgpICE9IG90aGVyUmVjdDsgfQogCiAgICAgdm9pZCBpbnRlcnNlY3QoY29uc3Qg
TGF5b3V0UmVjdCYgb3RoZXIpIHsgbV9yZWN0LmludGVyc2VjdChvdGhlcik7IH0KICAgICB2b2lk
IGludGVyc2VjdChjb25zdCBDbGlwUmVjdCYgb3RoZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAxMTU5OTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc3LDcgKzc3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwogCi1zdGF0aWMgdm9pZCB3cml0ZUxheWVycyhUZXh0U3RyZWFtJiwgY29u
c3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqLCBjb25zdCBJbnRSZWN0JiBw
YWludERpcnR5UmVjdCwgaW50IGluZGVudCA9IDAsIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2
aW9yID0gUmVuZGVyQXNUZXh0QmVoYXZpb3JOb3JtYWwpOworc3RhdGljIHZvaWQgd3JpdGVMYXll
cnMoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVy
KiwgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnREaXJ0eVJlY3QsIGludCBpbmRlbnQgPSAwLCBSZW5k
ZXJBc1RleHRCZWhhdmlvciA9IFJlbmRlckFzVGV4dEJlaGF2aW9yTm9ybWFsKTsKIAogc3RhdGlj
IGlubGluZSBib29sIGhhc0ZyYWN0aW9ucyhkb3VibGUgdmFsKQogewpAQCAtMTA0LDYgKzEwNCwx
MiBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjCiAgICAgcmV0dXJu
IHRzIDw8ICIoIiA8PCBwLngoKSA8PCAiLCIgPDwgcC55KCkgPDwgIikiOwogfQogCitUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGcmFjdGlvbmFsTGF5b3V0UG9p
bnQmIHApCit7CisgICAgLy8gRklYTUU6IFRoZXNlIHNob3VsZCBiZSBwcmludGVkIGFzIGZsb2F0
cy4gS2VlcGluZyB0aGVtIGludHMgZm9yIGNvbnNpc3RlbmN5IHdpdGggcGVydmlvdXMgdGVzdCBl
eHBlY3RhdGlvbnMuCisgICAgcmV0dXJuIHRzIDw8ICIoIiA8PCBwLngoKS50b0ludCgpIDw8ICIs
IiA8PCBwLnkoKS50b0ludCgpIDw8ICIpIjsKK30KKwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgRmxvYXRQb2ludCYgcCkKIHsKICAgICB0cyA8PCAiKCIgPDwg
Zm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHAueCgpKTsKQEAgLTI0Miw3ICsyNDgsNyBA
QCB2b2lkIFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0CiAgICAgUmVuZGVyQmxv
Y2sqIGNiID0gby5jb250YWluaW5nQmxvY2soKTsKICAgICBib29sIGFkanVzdEZvclRhYmxlQ2Vs
bHMgPSBjYiA/IGNiLT5pc1RhYmxlQ2VsbCgpIDogZmFsc2U7CiAKLSAgICBJbnRSZWN0IHI7Cisg
ICAgTGF5b3V0UmVjdCByOwogICAgIGlmIChvLmlzVGV4dCgpKSB7CiAgICAgICAgIC8vIEZJWE1F
OiBXb3VsZCBiZSBiZXR0ZXIgdG8gZHVtcCB0aGUgYm91bmRpbmcgYm94IHggYW5kIHkgcmF0aGVy
IHRoYW4gdGhlIGZpcnN0IHJ1bidzIHggYW5kIHksIGJ1dCB0aGF0IHdvdWxkIGludm9sdmUgdXBk
YXRpbmcKICAgICAgICAgLy8gbWFueSB0ZXN0IHJlc3VsdHMuCkBAIC0yNjEsNyArMjY3LDcgQEAg
dm9pZCBSZW5kZXJUcmVlQXNUZXh0Ojp3cml0ZVJlbmRlck9iamVjdAogICAgICAgICAvLyB0byBj
bGVhbiB1cCB0aGUgcmVzdWx0cyB0byBkdW1wIGJvdGggdGhlIG91dGVyIGJveCBhbmQgdGhlIGlu
dHJpbnNpYyBwYWRkaW5nIHNvIHRoYXQgYm90aCBiaXRzIG9mIGluZm9ybWF0aW9uIGFyZQogICAg
ICAgICAvLyBjYXB0dXJlZCBieSB0aGUgcmVzdWx0cy4KICAgICAgICAgY29uc3QgUmVuZGVyVGFi
bGVDZWxsJiBjZWxsID0gKnRvUmVuZGVyVGFibGVDZWxsKCZvKTsKLSAgICAgICAgciA9IEludFJl
Y3QoY2VsbC54KCksIGNlbGwueSgpICsgY2VsbC5pbnRyaW5zaWNQYWRkaW5nQmVmb3JlKCksIGNl
bGwud2lkdGgoKSwgY2VsbC5oZWlnaHQoKSAtIGNlbGwuaW50cmluc2ljUGFkZGluZ0JlZm9yZSgp
IC0gY2VsbC5pbnRyaW5zaWNQYWRkaW5nQWZ0ZXIoKSk7CisgICAgICAgIHIgPSBMYXlvdXRSZWN0
KGNlbGwueCgpLCBjZWxsLnkoKSArIGNlbGwuaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpLCBjZWxs
LndpZHRoKCksIGNlbGwuaGVpZ2h0KCkgLSBjZWxsLmludHJpbnNpY1BhZGRpbmdCZWZvcmUoKSAt
IGNlbGwuaW50cmluc2ljUGFkZGluZ0FmdGVyKCkpOwogICAgIH0gZWxzZSBpZiAoby5pc0JveCgp
KQogICAgICAgICByID0gdG9SZW5kZXJCb3goJm8pLT5mcmFtZVJlY3QoKTsKIApAQCAtMjY5LDYg
KzI3NSwxMSBAQCB2b2lkIFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0CiAgICAg
aWYgKGFkanVzdEZvclRhYmxlQ2VsbHMpCiAgICAgICAgIHIubW92ZSgwLCAtdG9SZW5kZXJUYWJs
ZUNlbGwoby5jb250YWluaW5nQmxvY2soKSktPmludHJpbnNpY1BhZGRpbmdCZWZvcmUoKSk7CiAK
KyAgICAvLyBGSVhNRTogQ29udmVydCBsYXlvdXQgdGVzdCByZXN1bHRzIHRvIHJlcG9ydCBzdWIt
cGl4ZWwgdmFsdWVzLCBpbiB0aGUgbWVhbnRpbWUgdXNpbmcgZW5jbG9zaW5nSW50UmVjdAorICAg
IC8vIGZvciBjb25zaXN0ZW5jeSB3aXRoIG9sZCByZXN1bHRzLgorICAgIHIgPSBlbmNsb3NpbmdJ
bnRSZWN0KHIpOworCisKICAgICB0cyA8PCAiICIgPDwgcjsKIAogICAgIGlmICghKG8uaXNUZXh0
KCkgJiYgIW8uaXNCUigpKSkgewpAQCAtNTkxLDkgKzYwMiwxNCBAQCBlbnVtIExheWVyUGFpbnRQ
aGFzZSB7CiB9OwogCiBzdGF0aWMgdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywgUmVuZGVyTGF5
ZXImIGwsCi0gICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBsYXllckJvdW5kcywgY29u
c3QgSW50UmVjdCYgYmFja2dyb3VuZENsaXBSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCwg
Y29uc3QgSW50UmVjdCYgb3V0bGluZUNsaXBSZWN0LAorICAgICAgICAgICAgICAgICAgY29uc3Qg
TGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExheW91dFJlY3QmIGJhY2tncm91bmRDbGlw
UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgY2xpcFJlY3QsIGNvbnN0IExheW91dFJlY3QmIG91dGxp
bmVDbGlwUmVjdCwKICAgICAgICAgICAgICAgICAgIExheWVyUGFpbnRQaGFzZSBwYWludFBoYXNl
ID0gTGF5ZXJQYWludFBoYXNlQWxsLCBpbnQgaW5kZW50ID0gMCwgUmVuZGVyQXNUZXh0QmVoYXZp
b3IgYmVoYXZpb3IgPSBSZW5kZXJBc1RleHRCZWhhdmlvck5vcm1hbCkKIHsKKyAgICBJbnRSZWN0
IGFkanVzdGVkTGF5b3V0Qm91bmRzID0gcGl4ZWxTbmFwcGVkSW50UmVjdChsYXllckJvdW5kcyk7
CisgICAgSW50UmVjdCBhZGp1c3RlZEJhY2tncm91bmRDbGlwUmVjdCA9IHBpeGVsU25hcHBlZElu
dFJlY3QoYmFja2dyb3VuZENsaXBSZWN0KTsKKyAgICBJbnRSZWN0IGFkanVzdGVkQ2xpcFJlY3Qg
PSBwaXhlbFNuYXBwZWRJbnRSZWN0KGNsaXBSZWN0KTsKKyAgICBJbnRSZWN0IGFkanVzdGVkT3V0
bGluZUNsaXBSZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChvdXRsaW5lQ2xpcFJlY3QpOworCiAg
ICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CiAKICAgICB0cyA8PCAibGF5ZXIgIjsKQEAgLTYw
MSwxNSArNjE3LDE1IEBAIHN0YXRpYyB2b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBSZW5kZXIK
ICAgICBpZiAoYmVoYXZpb3IgJiBSZW5kZXJBc1RleHRTaG93QWRkcmVzc2VzKQogICAgICAgICB0
cyA8PCBzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oJmwpIDw8ICIgIjsKICAgICAgIAotICAgIHRz
IDw8IGxheWVyQm91bmRzOworICAgIHRzIDw8IGFkanVzdGVkTGF5b3V0Qm91bmRzOwogCi0gICAg
aWYgKCFsYXllckJvdW5kcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKCFiYWNrZ3JvdW5kQ2xp
cFJlY3QuY29udGFpbnMobGF5ZXJCb3VuZHMpKQotICAgICAgICAgICAgdHMgPDwgIiBiYWNrZ3Jv
dW5kQ2xpcCAiIDw8IGJhY2tncm91bmRDbGlwUmVjdDsKLSAgICAgICAgaWYgKCFjbGlwUmVjdC5j
b250YWlucyhsYXllckJvdW5kcykpCi0gICAgICAgICAgICB0cyA8PCAiIGNsaXAgIiA8PCBjbGlw
UmVjdDsKLSAgICAgICAgaWYgKCFvdXRsaW5lQ2xpcFJlY3QuY29udGFpbnMobGF5ZXJCb3VuZHMp
KQotICAgICAgICAgICAgdHMgPDwgIiBvdXRsaW5lQ2xpcCAiIDw8IG91dGxpbmVDbGlwUmVjdDsK
KyAgICBpZiAoIWFkanVzdGVkTGF5b3V0Qm91bmRzLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAo
IWFkanVzdGVkQmFja2dyb3VuZENsaXBSZWN0LmNvbnRhaW5zKGFkanVzdGVkTGF5b3V0Qm91bmRz
KSkKKyAgICAgICAgICAgIHRzIDw8ICIgYmFja2dyb3VuZENsaXAgIiA8PCBhZGp1c3RlZEJhY2tn
cm91bmRDbGlwUmVjdDsKKyAgICAgICAgaWYgKCFhZGp1c3RlZENsaXBSZWN0LmNvbnRhaW5zKGFk
anVzdGVkTGF5b3V0Qm91bmRzKSkKKyAgICAgICAgICAgIHRzIDw8ICIgY2xpcCAiIDw8IGFkanVz
dGVkQ2xpcFJlY3Q7CisgICAgICAgIGlmICghYWRqdXN0ZWRPdXRsaW5lQ2xpcFJlY3QuY29udGFp
bnMoYWRqdXN0ZWRMYXlvdXRCb3VuZHMpKQorICAgICAgICAgICAgdHMgPDwgIiBvdXRsaW5lQ2xp
cCAiIDw8IGFkanVzdGVkT3V0bGluZUNsaXBSZWN0OwogICAgIH0KIAogICAgIGlmIChsLnJlbmRl
cmVyKCktPmhhc092ZXJmbG93Q2xpcCgpKSB7CkBAIC02NDQsNyArNjYwLDcgQEAgc3RhdGljIHZv
aWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIFJlbmRlcgogfQogCiBzdGF0aWMgdm9pZCB3cml0ZVJl
bmRlck5hbWVkRmxvd1RocmVhZHMoVGV4dFN0cmVhbSYgdHMsIFJlbmRlclZpZXcqIHJlbmRlclZp
ZXcsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBJbnRSZWN0JiBwYWludFJlY3QsIGludCBpbmRlbnQsIFJlbmRlckFzVGV4dEJlaGF2
aW9yIGJlaGF2aW9yKQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYg
cGFpbnRSZWN0LCBpbnQgaW5kZW50LCBSZW5kZXJBc1RleHRCZWhhdmlvciBiZWhhdmlvcikKIHsK
ICAgICBpZiAoIXJlbmRlclZpZXctPmhhc1JlbmRlck5hbWVkRmxvd1RocmVhZHMoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNjkyLDE4ICs3MDgsMTggQEAgc3RhdGljIHZvaWQgd3JpdGVSZW5kZXJO
YW1lZEZsb3dUaHJlYWRzKAogfQogCiBzdGF0aWMgdm9pZCB3cml0ZUxheWVycyhUZXh0U3RyZWFt
JiB0cywgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGwsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBwYWludFJlY3QsIGludCBpbmRlbnQs
IFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yKQorICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTGF5b3V0UmVjdCYgcGFpbnRSZWN0LCBpbnQgaW5kZW50LCBSZW5kZXJBc1RleHRCZWhh
dmlvciBiZWhhdmlvcikKIHsKICAgICAvLyBGSVhNRTogQXBwbHkgb3ZlcmZsb3cgdG8gdGhlIHJv
b3QgbGF5ZXIgdG8gbm90IGJyZWFrIGV2ZXJ5IHRlc3QuICBDb21wbGV0ZSBoYWNrLiAgU2lnaC4K
LSAgICBJbnRSZWN0IHBhaW50RGlydHlSZWN0KHBhaW50UmVjdCk7CisgICAgTGF5b3V0UmVjdCBw
YWludERpcnR5UmVjdChwYWludFJlY3QpOwogICAgIGlmIChyb290TGF5ZXIgPT0gbCkgewotICAg
ICAgICBwYWludERpcnR5UmVjdC5zZXRXaWR0aChtYXgocGFpbnREaXJ0eVJlY3Qud2lkdGgoKSwg
cm9vdExheWVyLT5yZW5kZXJCb3goKS0+bWF4WExheW91dE92ZXJmbG93KCkpKTsKLSAgICAgICAg
cGFpbnREaXJ0eVJlY3Quc2V0SGVpZ2h0KG1heChwYWludERpcnR5UmVjdC5oZWlnaHQoKSwgcm9v
dExheWVyLT5yZW5kZXJCb3goKS0+bWF4WUxheW91dE92ZXJmbG93KCkpKTsKLSAgICAgICAgbC0+
c2V0U2l6ZShsLT5zaXplKCkuZXhwYW5kZWRUbyhsLT5yZW5kZXJCb3goKS0+bWF4TGF5b3V0T3Zl
cmZsb3coKSkpOworICAgICAgICBwYWludERpcnR5UmVjdC5zZXRXaWR0aChtYXg8TGF5b3V0VW5p
dD4ocGFpbnREaXJ0eVJlY3Qud2lkdGgoKSwgcm9vdExheWVyLT5yZW5kZXJCb3goKS0+bWF4WExh
eW91dE92ZXJmbG93KCkpKTsKKyAgICAgICAgcGFpbnREaXJ0eVJlY3Quc2V0SGVpZ2h0KG1heDxM
YXlvdXRVbml0PihwYWludERpcnR5UmVjdC5oZWlnaHQoKSwgcm9vdExheWVyLT5yZW5kZXJCb3go
KS0+bWF4WUxheW91dE92ZXJmbG93KCkpKTsKKyAgICAgICAgbC0+c2V0U2l6ZShsLT5zaXplKCku
ZXhwYW5kZWRUbyhwaXhlbFNuYXBwZWRJbnRTaXplKGwtPnJlbmRlckJveCgpLT5tYXhMYXlvdXRP
dmVyZmxvdygpLCBMYXlvdXRQb2ludCgwLCAwKSkpKTsKICAgICB9CiAgICAgCiAgICAgLy8gQ2Fs
Y3VsYXRlIHRoZSBjbGlwIHJlY3RzIHdlIHNob3VsZCB1c2UuCi0gICAgSW50UmVjdCBsYXllckJv
dW5kczsKKyAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzOwogICAgIENsaXBSZWN0IGRhbWFnZVJl
Y3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3Q7CiAgICAgbC0+Y2FsY3VsYXRlUmVjdHMo
cm9vdExheWVyLCAwLCBwYWludERpcnR5UmVjdCwgbGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3QsIGNs
aXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3QsIHRydWUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmgJKHJldmlzaW9uIDExNTk5MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRWxlbWVudDsK
K2NsYXNzIEZyYWN0aW9uYWxMYXlvdXRQb2ludDsKIGNsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBG
bG9hdFNpemU7CiBjbGFzcyBGcmFtZTsKQEAgLTcwLDYgKzcxLDcgQEAgc3RhdGljIHZvaWQgd3Jp
dGVSZW5kZXJPYmplY3QoVGV4dFN0cmVhbQogCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mLCBjb25zdCBJbnRQb2ludCYpOwogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiwgY29uc3QgSW50UmVjdCYpOworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiwgY29uc3QgRnJhY3Rpb25hbExheW91dFBvaW50Jik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mLCBjb25zdCBGbG9hdFBvaW50Jik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mLCBjb25zdCBGbG9hdFNpemUmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lv
biAxMTU5OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVB
c1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjYsNyArMzI2LDcgQEAgc3RhdGljIHZvaWQg
d3JpdGVTdHlsZShUZXh0U3RyZWFtJiB0cywgYwogCiBzdGF0aWMgVGV4dFN0cmVhbSYgd3JpdGVQ
b3NpdGlvbkFuZFN0eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVj
dCkKIHsKLSAgICB0cyA8PCAiICIgPDwgY29uc3RfY2FzdDxSZW5kZXJPYmplY3QmPihvYmplY3Qp
LmFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOworICAgIHRzIDw8ICIgIiA8PCBlbmNsb3Np
bmdJbnRSZWN0KGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Jj4ob2JqZWN0KS5hYnNvbHV0ZUNsaXBw
ZWRPdmVyZmxvd1JlY3QoKSk7CiAgICAgd3JpdGVTdHlsZSh0cywgb2JqZWN0KTsKICAgICByZXR1
cm4gdHM7CiB9CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTU5OTEpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wNS0wMyAgTGV2aSBX
ZWludHJhdWIgIDxsZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW21ldGFdIFN3aXRjaCBh
d2F5IGZyb20gaW50ZWdlcnMgcmVwcmVzZW50aW5nIHBpeGVscyBmb3IgbGF5b3V0L2V2ZW50IGhh
bmRsaW5nL3JlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjAzMTgKKworICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KKworICAg
ICAgICAqIGZhc3Qvc3ViLXBpeGVsOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3N1Yi1waXhlbC9j
bGllbnQtd2lkdGgtaGVpZ2h0LXNuYXBwaW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9zdWItcGl4ZWwvY2xpZW50LXdpZHRoLWhlaWdodC1zbmFwcGluZy5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L3N1Yi1waXhlbC9sYXlvdXQtYm94ZXMtd2l0aC16b29tLWV4cGVj
dGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvc3ViLXBpeGVsL2xheW91dC1ib3hlcy13
aXRoLXpvb20uaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9zdWItcGl4ZWwvc2l6ZS1vZi1i
b3gtd2l0aC16b29tLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvc3ViLXBp
eGVsL3NpemUtb2YtYm94LXdpdGgtem9vbS5odG1sOiBBZGRlZC4KKwogMjAxMi0wNS0wMyAgQW5k
cmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMTEx
Mzg3KTogQ1NTT00gcmVwcmVzZW50YXRpb24gb2YgJ2JhY2tncm91bmQtaW1hZ2UnIHZhbHVlcyBz
aG91bGQgYmUgQ1NTUHJpbWl0aXZlVmFsdWUuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1w
aXhlbC9jbGllbnQtd2lkdGgtaGVpZ2h0LXNuYXBwaW5nLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9jbGllbnQtd2lkdGgtaGVpZ2h0LXNuYXBw
aW5nLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvc3ViLXBp
eGVsL2NsaWVudC13aWR0aC1oZWlnaHQtc25hcHBpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDYgQEAKK1BBU1MgZGl2LmNsaWVudFdpZHRoIGlzIDExCitQQVNTIGRpdi5j
bGllbnRIZWlnaHQgaXMgMTEKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9jbGllbnQtd2lk
dGgtaGVpZ2h0LXNuYXBwaW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9z
dWItcGl4ZWwvY2xpZW50LXdpZHRoLWhlaWdodC1zbmFwcGluZy5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwvY2xpZW50LXdpZHRoLWhlaWdodC1zbmFwcGlu
Zy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJM
SUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxkaXYgaWQ9IlRlc3REaXYiIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDEw
LjRweDsgdG9wOiAxMC40cHg7IHdpZHRoOiAxMC40cHg7IGhlaWdodDogMTAuNHB4OyI+PC9kaXY+
Cis8c2NyaXB0PgorCit2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRlc3REaXYi
KTsKKworc2hvdWxkQmUoJ2Rpdi5jbGllbnRXaWR0aCcsICcxMScpOworc2hvdWxkQmUoJ2Rpdi5j
bGllbnRIZWlnaHQnLCAnMTEnKTsKKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
c3ViLXBpeGVsL2xheW91dC1ib3hlcy13aXRoLXpvb20tZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9sYXlvdXQtYm94ZXMtd2l0aC16b29tLWV4
cGVjdGVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9s
YXlvdXQtYm94ZXMtd2l0aC16b29tLWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMzkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8dGl0bGU+bGF5
b3V0IHpvb20gdGVzdDwvdGl0bGU+CisgICAgPHN0eWxlPiAKKyAgICAgICAgI3Rlc3QgeworICAg
ICAgICAgICAgd2lkdGg6IDUwMHB4OworICAgICAgICAgICAgaGVpZ2h0OiAxNTAwcHg7CisgICAg
ICAgICAgICBiYWNrZ3JvdW5kOiBuYXZ5OworICAgICAgICAgICAgem9vbTogMC4yNTsKKyAgICAg
ICAgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8ZGl2IGlkPSJ0ZXN0Ij48
L2Rpdj4KKyAgICA8ZGl2IGlkPSJjb25zb2xlIj4KKyAgICAgICAgVGhlIGJveCBhYm92ZSBzaG91
bGQgYmUgbmF2eSBibHVlIHdpdGggbm8gYmFuZGluZyBlZmZlY3RzLjxicj4KKyAgICAgICAgUEFT
UzogV2l0aCB6b29tIG9mIDEwMCUgYm90dG9tIGVkZ2Ugb2YgbGFzdCBjaGlsZCBsaW5lcyB1cCB3
aXRoIGJvdHRvbSBlZGdlIG9mIGNvbnRhaW5lci48YnI+CisgICAgICAgIFBBU1M6IFdpdGggem9v
bSBvZiAxMTAlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0b20g
ZWRnZSBvZiBjb250YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpvb20gb2YgMTI1JSBi
b3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29u
dGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDEzMyUgYm90dG9tIGVkZ2Ug
b2YgbGFzdCBjaGlsZCBsaW5lcyB1cCB3aXRoIGJvdHRvbSBlZGdlIG9mIGNvbnRhaW5lci48YnI+
CisgICAgICAgIFBBU1M6IFdpdGggem9vbSBvZiAxNTAlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hp
bGQgbGluZXMgdXAgd2l0aCBib3R0b20gZWRnZSBvZiBjb250YWluZXIuPGJyPgorICAgICAgICBQ
QVNTOiBXaXRoIHpvb20gb2YgMTY2JSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVw
IHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6
b29tIG9mIDE3NSUgYm90dG9tIGVkZ2Ugb2YgbGFzdCBjaGlsZCBsaW5lcyB1cCB3aXRoIGJvdHRv
bSBlZGdlIG9mIGNvbnRhaW5lci48YnI+CisgICAgICAgIFBBU1M6IFdpdGggem9vbSBvZiAyMDAl
IGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0b20gZWRnZSBvZiBj
b250YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpvb20gb2YgMjUwJSBib3R0b20gZWRn
ZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxi
cj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDMwMCUgYm90dG9tIGVkZ2Ugb2YgbGFzdCBj
aGlsZCBsaW5lcyB1cCB3aXRoIGJvdHRvbSBlZGdlIG9mIGNvbnRhaW5lci48YnI+CisgICAgICAg
IFBBU1M6IFdpdGggem9vbSBvZiA0MDAlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMg
dXAgd2l0aCBib3R0b20gZWRnZSBvZiBjb250YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRo
IHpvb20gb2YgNTAwJSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90
dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDkw
JSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2Yg
Y29udGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDgwJSBib3R0b20gZWRn
ZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxi
cj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDc1JSBib3R0b20gZWRnZSBvZiBsYXN0IGNo
aWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAg
UEFTUzogV2l0aCB6b29tIG9mIDY2JSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVw
IHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6
b29tIG9mIDUwJSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9t
IGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDMzJSBi
b3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29u
dGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDI1JSBib3R0b20gZWRnZSBv
ZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4K
KzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9zdWItcGl4
ZWwvbGF5b3V0LWJveGVzLXdpdGgtem9vbS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3Qvc3ViLXBpeGVsL2xheW91dC1ib3hlcy13aXRoLXpvb20uaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVsL2xheW91dC1ib3hlcy13aXRoLXpvb20uaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorICAgIDx0aXRsZT5sYXlvdXQgem9vbSB0ZXN0PC90aXRsZT4KKyAgICA8c3R5bGU+
IAorICAgICAgICAjdGVzdCB7CisgICAgICAgICAgICB3aWR0aDogNTAwcHg7CisgICAgICAgICAg
ICBoZWlnaHQ6IDE1MDBweDsKKyAgICAgICAgICAgIGJhY2tncm91bmQ6IHNreWJsdWU7CisgICAg
ICAgIH0KKyAgICAgICAgI3Rlc3QgPiBkaXYgeworICAgICAgICAgICAgYmFja2dyb3VuZDogbmF2
eTsKKyAgICAgICAgICAgIGhlaWdodDogMTVweDsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+Cis8
L2hlYWQ+Cis8Ym9keT4KKyAgICA8ZGl2IGlkPSJ0ZXN0Ij48L2Rpdj4KKyAgICA8ZGl2IGlkPSJj
b25zb2xlIj4KKyAgICAgICAgVGhlIGJveCBhYm92ZSBzaG91bGQgYmUgbmF2eSBibHVlIHdpdGgg
bm8gYmFuZGluZyBlZmZlY3RzLjxicj4KKyAgICA8L2Rpdj4KKzwvYm9keT4KKzxzY3JpcHQ+Cisg
ICAgdmFyIHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QnKTsKKyAg
ICB2YXIgY29uc29sZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScp
OworCisgICAgZnVuY3Rpb24gaW5pdCgpCisgICAgeworICAgICAgICB0ZXN0RWxlbWVudC5pbm5l
ckhUTUwgPSAnJzsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICAg
ICAgICAgIHRlc3RFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0KHpvb20pCisgICAgeworICAgICAgICB0
ZXN0RWxlbWVudC5zdHlsZS56b29tID0gem9vbSArICclJzsKKyAgICAgICAgCisgICAgICAgIHZh
ciBsYXN0RWxlbWVudEJvdHRvbSA9IHRlc3RFbGVtZW50Lmxhc3RDaGlsZC5nZXRCb3VuZGluZ0Ns
aWVudFJlY3QoKS5ib3R0b207CisgICAgICAgIHZhciBjb250YWluZXJCb3R0b20gPSB0ZXN0RWxl
bWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b207CisgICAgICAgIGlmIChNYXRoLmFi
cyhsYXN0RWxlbWVudEJvdHRvbSAtIGNvbnRhaW5lckJvdHRvbSkgPCAwLjAxKQorICAgICAgICAg
ICAgbG9nKCdQQVNTOiBXaXRoIHpvb20gb2YgJyArIHpvb20gKyAnJSBib3R0b20gZWRnZSBvZiBs
YXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLicpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBsb2coJ0ZBSUw6IFdpdGggem9vbSBvZiAnICsgem9vbSAr
ICclIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgYXQgJyArIGxhc3RFbGVtZW50Qm90dG9tICsg
JywgY29udGFpbmVyIGF0ICcgKyBjb250YWluZXJCb3R0b20gKyAnLicpOworICAgIH0KKworICAg
IGZ1bmN0aW9uIGxvZyhzdHIpCisgICAgeworICAgICAgICBjb25zb2xlRWxlbWVudC5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHIpKTsKKyAgICAgICAgY29uc29sZUVsZW1l
bnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7CisgICAgfQorCisg
ICAgaW5pdCgpOworICAgIHRlc3QoMTAwKTsKKyAgICB0ZXN0KDExMCk7CisgICAgdGVzdCgxMjUp
OworICAgIHRlc3QoMTMzKTsKKyAgICB0ZXN0KDE1MCk7CisgICAgdGVzdCgxNjYpOworICAgIHRl
c3QoMTc1KTsKKyAgICB0ZXN0KDIwMCk7CisgICAgdGVzdCgyNTApOworICAgIHRlc3QoMzAwKTsK
KyAgICB0ZXN0KDQwMCk7CisgICAgdGVzdCg1MDApOworICAgIHRlc3QoOTApOworICAgIHRlc3Qo
ODApOworICAgIHRlc3QoNzUpOworICAgIHRlc3QoNjYpOworICAgIHRlc3QoNTApOworICAgIHRl
c3QoMzMpOworICAgIHRlc3QoMjUpOworPC9zY3JpcHQ+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L3N1Yi1waXhlbC9zaXplLW9mLWJveC13aXRoLXpvb20tZXhwZWN0ZWQuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9zaXplLW9mLWJveC13aXRo
LXpvb20tZXhwZWN0ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvc3Vi
LXBpeGVsL3NpemUtb2YtYm94LXdpdGgtem9vbS1leHBlY3RlZC5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDc0IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRp
dGxlPnNpemUgb2YgYm94IHpvb20gdGVzdDwvdGl0bGU+CisgICAgPHN0eWxlPgorICAgICAgICBi
b2R5IHsKKyAgICAgICAgICAgIGJhY2tncm91bmQ6IHNpbHZlcjsKKyAgICAgICAgfQorICAgICAg
ICAjY29udGFpbmVyIHsKKyAgICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOworICAgICAgICAg
ICAgd2lkdGg6IDUwMHB4OworICAgICAgICAgICAgaGVpZ2h0OiA1MHB4OworICAgICAgICB9Cisg
ICAgICAgICNydWxlciA+IGRpdiB7CisgICAgICAgICAgICBmbG9hdDogbGVmdDsKKyAgICAgICAg
ICAgIHdpZHRoOiA0OXB4OworICAgICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgYmxh
Y2s7CisgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgIGhlaWdodDog
NTBweDsKKyAgICAgICAgfQorICAgICAgICAjdGVzdCB7CisgICAgICAgICAgICBjbGVhcjogbGVm
dDsKKyAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgICAgIHRvcDogMzBw
eDsKKyAgICAgICAgfQorICAgICAgICAjdGVzdCA+IGRpdiB7CisgICAgICAgICAgICBjbGVhcjog
bGVmdDsKKyAgICAgICAgfQorICAgICAgICAjdGVzdCA+IGRpdiA+IGRpdiB7CisgICAgICAgICAg
ICBmbG9hdDogbGVmdDsKKyAgICAgICAgICAgIHdpZHRoOiA1MDBweDsKKyAgICAgICAgICAgIGhl
aWdodDogMTBweDsKKyAgICAgICAgICAgIGJhY2tncm91bmQ6IG5hdnk7CisgICAgICAgIH0KKyAg
ICAgICAgI2NvbnNvbGUgeworICAgICAgICAgICAgY2xlYXI6IGxlZnQ7CisgICAgICAgIH0KKyAg
ICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisgICAgPGRpdiBpZD0iY29udGFpbmVyIj4KKyAg
ICAgICAgPGRpdiBpZD0icnVsZXIiPjwvZGl2PgorICAgICAgICA8ZGl2IGlkPSJ0ZXN0Ij48ZGl2
PjwvZGl2PjwvZGl2PgorICAgIDwvZGl2PgorPC9ib2R5PgorPHNjcmlwdD4KKyAgICB2YXIgdGVz
dENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0Jyk7CisgICAgdmFyIHJ1
bGVyRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdydWxlcicpOworCisgICAgZnVu
Y3Rpb24gaW5pdCgpCisgICAgeworICAgICAgICBydWxlckVsZW1lbnQuaW5uZXJIVE1MID0gJyc7
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykgeworICAgICAgICAgICAgcnVs
ZXJFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAg
ICAgICAgICAgIHJ1bGVyRWxlbWVudC5sYXN0Q2hpbGQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoNTAgKyBpICogNTApKTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgZnVu
Y3Rpb24gdGVzdCh6b29tKQorICAgIHsKKyAgICAgICAgdmFyIHRlc3RFbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIHRlc3RFbGVtZW50LnN0eWxlLnpvb20g
PSB6b29tICsgJyUnOworICAgICAgICB0ZXN0RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKSk7CisgICAgICAgIHRlc3RDb250YWluZXIuYXBwZW5kQ2hpbGQo
dGVzdEVsZW1lbnQpOworICAgIH0KKworICAgIGluaXQoKTsKKyAgICB0ZXN0KDEwMCk7CisgICAg
dGVzdCg2Nik7CisgICAgdGVzdCgzMyk7CisKKzwvc2NyaXB0PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwvc2l6ZS1vZi1ib3gtd2l0aC16b29tLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwvc2l6ZS1vZi1ib3gtd2l0aC16b29t
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9zaXplLW9m
LWJveC13aXRoLXpvb20uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5zaXplIG9mIGJveCB6b29tIHRl
c3Q8L3RpdGxlPgorICAgIDxzdHlsZT4KKyAgICAgICAgYm9keSB7CisgICAgICAgICAgICBiYWNr
Z3JvdW5kOiBzaWx2ZXI7CisgICAgICAgIH0KKyAgICAgICAgI2NvbnRhaW5lciB7CisgICAgICAg
ICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKKyAgICAgICAgICAgIHdpZHRoOiA1MDBweDsKKyAgICAg
ICAgICAgIGhlaWdodDogNTBweDsKKyAgICAgICAgfQorICAgICAgICAjcnVsZXIgPiBkaXYgewor
ICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7CisgICAgICAgICAgICB3aWR0aDogNDlweDsKKyAgICAg
ICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIGJsYWNrOworICAgICAgICAgICAgdGV4dC1h
bGlnbjogcmlnaHQ7CisgICAgICAgICAgICBoZWlnaHQ6IDUwcHg7CisgICAgICAgIH0KKyAgICAg
ICAgI3Rlc3QgeworICAgICAgICAgICAgY2xlYXI6IGxlZnQ7CisgICAgICAgICAgICBwb3NpdGlv
bjogYWJzb2x1dGU7CisgICAgICAgICAgICB0b3A6IDMwcHg7CisgICAgICAgIH0KKyAgICAgICAg
I3Rlc3QgPiBkaXYgeworICAgICAgICAgICAgY2xlYXI6IGxlZnQ7CisgICAgICAgIH0KKyAgICAg
ICAgI3Rlc3QgPiBkaXYgPiBkaXYgeworICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7CisgICAgICAg
ICAgICB3aWR0aDogNXB4OworICAgICAgICAgICAgaGVpZ2h0OiAxMHB4OworICAgICAgICAgICAg
YmFja2dyb3VuZDogbmF2eTsKKyAgICAgICAgfQorICAgICAgICAjY29uc29sZSB7CisgICAgICAg
ICAgICBjbGVhcjogbGVmdDsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9k
eT4KKyAgICA8ZGl2IGlkPSJjb250YWluZXIiPgorICAgICAgICA8ZGl2IGlkPSJydWxlciI+PC9k
aXY+CisgICAgICAgIDxkaXYgaWQ9InRlc3QiPjxkaXY+PC9kaXY+PC9kaXY+CisgICAgPC9kaXY+
Cis8L2JvZHk+Cis8c2NyaXB0PgorICAgIHZhciB0ZXN0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3Rlc3QnKTsKKyAgICB2YXIgcnVsZXJFbGVtZW50ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3J1bGVyJyk7CisKKyAgICBmdW5jdGlvbiBpbml0KCkKKyAgICB7CisgICAg
ICAgIHJ1bGVyRWxlbWVudC5pbm5lckhUTUwgPSAnJzsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDsgaSsrKSB7CisgICAgICAgICAgICBydWxlckVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICAgICAgcnVsZXJFbGVtZW50Lmxh
c3RDaGlsZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSg1MCArIGkgKiA1MCkp
OworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdCh6b29tKQorICAgIHsKKyAg
ICAgICAgdmFyIHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Cisg
ICAgICAgIHRlc3RFbGVtZW50LnN0eWxlLnpvb20gPSB6b29tICsgJyUnOworICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDsgaSsrKQorICAgICAgICAgICAgdGVzdEVsZW1lbnQuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICB0ZXN0Q29udGFp
bmVyLmFwcGVuZENoaWxkKHRlc3RFbGVtZW50KTsKKyAgICB9CisKKyAgICBpbml0KCk7CisgICAg
dGVzdCgxMDApOworICAgIHRlc3QoNjYpOworICAgIHRlc3QoMzMpOworCis8L3NjcmlwdD4KKzwv
aHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140063</attachid>
            <date>2012-05-03 12:09:18 -0700</date>
            <delta_ts>2012-05-04 09:20:47 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-60318-20120503120916.patch</filename>
            <type>text/plain</type>
            <size>43086</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNTk5MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDEyLTA1LTAzICBMZXZpIFdl
aW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4gYW5kIEVtaWwgQSBFa2x1bmQgPGVhZUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgW21ldGFdIFN3aXRjaCBhd2F5IGZyb20gaW50ZWdlcnMgcmVw
cmVzZW50aW5nIHBpeGVscyBmb3IgbGF5b3V0L2V2ZW50IGhhbmRsaW5nL3JlbmRlcmluZworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMTgKKworICAg
ICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KKworICAgICAgICBTd2FwcGluZyB0aGUgTGF5
b3V0VW5pdCBiYWNrZW5kIHRvIEZyYWN0aW9uYWxMYXlvdXRVbml0IGZyb20gaW50LgorICAgICAg
ICAKKyAgICAgICAgRnJhY3Rpb25hbExheW91dFVuaXQgaXMgYSBuZXcgdHlwZSB0aGF0IHVzZXMg
YW4gaW50ZWdlciB0aGF0IGNhbiByZXByZXNlbnQgYSBmcmFjdGlvbiBvZiBhCisgICAgICAgIHBp
eGVsLiBUaGUgRU5BQkxFX1NVQlBJWEVMX0xBWU9VVCBmZWF0dXJlIGZsYWdzIHRvZ2dsZXMgdGhp
cyBmcmFjdGlvbiBiZXR3ZWVuIDEvMSBhbmQgMS82MC4KKyAgICAgICAgSW5pdGlhbGx5LCBhbGwg
cGxhdGZvcm1zIHdpbGwgZGVmYXVsdCB0byBzdWJwaXhlbCBsYXlvdXQgYmVpbmcgb2ZmLCBzbyBG
cmFjdGlvbmFsTGF5b3V0VW5pdHMKKyAgICAgICAgd2lsbCBlZmZlY3RpdmVseSBjb250aW51ZSB0
byBhY3QgYXMgaW50ZWdlcnMuCisgICAgICAgIAorICAgICAgICBXaXRoIEVOQUJMRV9TVUJQSVhF
TF9MQVlPVVQgdHVybmVkIG9uLCBGcmFjdGlvbmFsTGF5b3V0VW5pdHMgYWNjdW11bGF0ZSBlcnJv
ciBmcm9tIHN1Yi1waXhlbAorICAgICAgICBDU1MgdmFsdWVzIGFuZCBhcHBsaWVkIHpvb21pbmcs
IGFuZCBwYWludGluZyB1c2VzIHBpeGVsLXNuYXBwaW5nIHRvIGFsaWduIHRoZXNlIHZhbHVlcwor
ICAgICAgICB0byBwaXhlbHMgYW5kIHByZXZlbnQgdW53YW50ZWQgYW50aS1hbGlhc2luZy4gU2Vl
IGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvd2lraS9MYXlvdXRVbml0IGZvcgorICAgICAgICBkZXRh
aWxzLgorCisgICAgICAgIEluIGEgbnVtYmVyIG9mIHByZXZpb3VzIHBhdGNoZXMsIExheW91dFVu
aXRzIHdlcmUgcGx1bWJlZCB0aHJvdWdob3V0IHRoZSByZW5kZXJpbmcgdHJlZSB0bworICAgICAg
ICBwcmVwYXJlIGZvciB0aGlzIGNoYW5nZS4gVGhpcyBpbmNsdWRlZCBhIG51bWJlciBvZiBmdW5j
dGlvbnMgaW4gTGF5b3V0VHlwZXMuaCBhbmQgdGhlCisgICAgICAgIEludFJlY3QvUG9pbnQvU2l6
ZSBjbGFzc2VzIHRoYXQgd2VyZSBlZmZlY3RpdmVseSBuby1vcHMgd2hpbGUgTGF5b3V0VW5pdHMg
d2VyZSBpbnRlZ2Vycy4gU2VlCisgICAgICAgIGh0dHA6Ly93ZWJraXQub3JnL2IvNjAzMTggZm9y
IHRoZSBleGhhdXN0aXZlIGxpc3Qgb2YgY2hhbmdlcyB0aGF0IHdlcmUgZG9uZSBpbiBwcmVwYXJh
dGlvbgorICAgICAgICBmb3IgdGhpcy4gU3Vic2VxdWVudCBwYXRjaGVzIHdpbGwgcmVtb3ZlIHVu
bmVjZXNzYXJ5IHZlcnNpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucy4KKyAgICAgICAgaHR0cDovL3dl
YmtpdC5vcmcvYi84NDYxNiB0cmFja3MgdGhlc2UgY2hhbmdlcy4KKworICAgICAgICBUZXN0czog
ZmFzdC9zdWItcGl4ZWwvY2xpZW50LXdpZHRoLWhlaWdodC1zbmFwcGluZy5odG1sCisgICAgICAg
ICAgICAgICBmYXN0L3N1Yi1waXhlbC9sYXlvdXQtYm94ZXMtd2l0aC16b29tLmh0bWwKKyAgICAg
ICAgICAgICAgIGZhc3Qvc3ViLXBpeGVsL3NpemUtb2YtYm94LXdpdGgtem9vbS5odG1sCisKKyAg
ICAgICAgKiBXZWJDb3JlLmV4cC5pbjogVXBkYXRpbmcgZnVuY3Rpb24gc2lnbmF0dXJlcyB0aGF0
IGV4cG9zZSBGcmFjdGlvbmFsTGF5b3V0VW5pdHMuCisgICAgICAgICogV2ViQ29yZS5vcmRlcjog
RGl0dG8uCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRp
bmcgbWlzc2luZyBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCBoZWFkZXIuCisgICAgICAgICogY3Nz
L0NTU1ByaW1pdGl2ZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZh
bHVlOjpjb21wdXRlTGVuZ3RoKTogTm8gbG9uZ2VyIHJvdW5kcyBmb3IgaW1wcmVjaXNlIGNvbnZl
cnNpb24KKyAgICAgICAgd2hlbiBzdWItcGl4ZWwgbGF5b3V0IGlzIGVuYWJsZWQuCisgICAgICAg
ICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0Rm9yTG9jYWxab29t
KTogVXNpbmcgcm91bmRpbmcgaW5zdGVhZCBvZiBpbmNyZW1lbnRpbmcgdGhlIHZhbHVlIGJlZm9y
ZQorICAgICAgICBhZGp1c3RpbmcgdG8gYWNjb3VudCBmb3IgdHJ1bmNhdGlvbiB3aGVuIHN1Yi1w
aXhlbCBsYXlvdXQgaXMgZW5hYmxlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTEJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOiBGaXhpbmcgYSBzdGF0aWMgaW5p
dGlhbGl6ZXIgYnVpbGQgZXJyb3IgYnkgbW92aW5nIGFuIGludGVnZXIgY29uc3RhbnQgdG8gYmUK
KyAgICAgICAgYW4gaW50LgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRUeXBlcy5oOiBUaGlz
IGZpbGUgY29udGFpbnMgdGhlIGFjdHVhbCBzd2l0Y2ggZm9yIGNoYW5naW5nIExheW91dFVuaXRz
CisgICAgICAgIHRvIGJlIEZyYWN0aW9uYWxMYXlvdXRVbml0cy4gQWxzbyB1cGRhdGluZyBzdHVi
IG1ldGhvZHMgd2l0aCB0aGVpciBwcm9wZXIgaW1wbGVtZW50YXRpb25zLgorICAgICAgICAqIHJl
bmRlcmluZy9QYWludEluZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhaW50SW5mbzo6aW5maW5p
dGVSZWN0KTogRW5zdXJpbmcgdGhlIGluZmluaXRlUmVjdCBkb2Vzbid0IG92ZXJmbG93IHRoZQor
ICAgICAgICBGcmFjdGlvbmFsTGF5b3V0VW5pdCBib3VuZHMuIExheW91dFJlY3Q6OmluZmluaXRl
UmVjdCgpIGlzIHRoZSBsYXJnZXN0IHJlY3RhbmdsZSB0aGF0IGNhbgorICAgICAgICBiZSByZXBy
ZXNlbnRlZCB1c2luZyBMYXlvdXRVbml0cy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBSZWN0OjpvcGVyYXRvciE9KTogQWRkIG92ZXJs
b2FkIG9mICE9IHRvIGZpeCBjb21wbGFpbmluZyBjb21waWxlcnMgd2hlbgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDogQWRkaW5nIGNvZGUgdG8gbWluaW1pemUgdGVz
dCBleHBlY3RhdGlvbiBjaHVybi4gSXQKKyAgICAgICAgbWF5IGJlIHdvcnRoIG91dHB1dHRpbmcg
ZmxvYXQgdmFsdWVzIGluIHRlc3QgZXhwZWN0YXRpb25zLCBidXQgdGhpcyBpc24ndCBkb25lIHdp
dGgKKyAgICAgICAgdGhlIGlubGluZSBib3ggdHJlZSB5ZXQsIGVpdGhlci4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oOgorICAgICAgICAoV2ViQ29yZSk6IEFkZGluZyBh
IEZyYWN0aW9uYWxMYXlvdXRQb2ludCBvcGVyYXRvci4KKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVQb3NpdGlv
bkFuZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmUpOiBBZGRpbmcgYSBGcmFjdGlvbmFsTGF5b3V0
UG9pbnQgb3BlcmF0b3IuCisKIDIwMTItMDUtMDMgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJr
aXQub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjExMTM4Nyk6IENTU09NIHJlcHJlc2VudGF0
aW9uIG9mICdiYWNrZ3JvdW5kLWltYWdlJyB2YWx1ZXMgc2hvdWxkIGJlIENTU1ByaW1pdGl2ZVZh
bHVlLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDExNTk5MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsNyArMjIwLDcg
QEAgX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNoZTEzc2V0Q2FwYWNpdGllcwogX19aTjdXZWJDb3Jl
MTFNZW1vcnlDYWNoZTE0ZXZpY3RSZXNvdXJjZXNFdgogX19aTjdXZWJDb3JlMTFNZW1vcnlDYWNo
ZTE5Z2V0T3JpZ2luc1dpdGhDYWNoZUVSTjNXVEY3SGFzaFNldElOUzFfNlJlZlB0cklOU18xNFNl
Y3VyaXR5T3JpZ2luRUVFTlNfMThTZWN1cml0eU9yaWdpbkhhc2hFTlMxXzEwSGFzaFRyYWl0c0lT
NV9FRUVFCiBfX1pON1dlYkNvcmUxMU1lbW9yeUNhY2hlMjVyZW1vdmVSZXNvdXJjZXNXaXRoT3Jp
Z2luRVBOU18xNFNlY3VyaXR5T3JpZ2luRQotX19aTjdXZWJDb3JlMTJSZW5kZXJPYmplY3QxOXNj
cm9sbFJlY3RUb1Zpc2libGVFUktOU183SW50UmVjdEVSS05TXzE1U2Nyb2xsQWxpZ25tZW50RVM2
XworX19aTjdXZWJDb3JlMTFSZW5kZXJMYXllcjE5c2Nyb2xsUmVjdFRvVmlzaWJsZUVSS05TXzIw
RnJhY3Rpb25hbExheW91dFJlY3RFUktOU18xNVNjcm9sbEFsaWdubWVudEVTNl8KIF9fWk43V2Vi
Q29yZTExVVJMV2l0aERhdGFFUDZOU0RhdGFQNU5TVVJMCiBfX1pON1dlYkNvcmUxMWdsb2JhbFBv
aW50RVJLOF9OU1BvaW50UDhOU1dpbmRvdwogX19aTjdXZWJDb3JlMTFtZW1vcnlDYWNoZUV2CkBA
IC0yMzgsNyArMjM4LDcgQEAgX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxNHNjcm9sbE92ZXJm
bAogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxNWhhbmRsZUFjY2Vzc0tleUVSS05TXzIxUGxh
dGZvcm1LZXlib2FyZEV2ZW50RQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxNmhhbmRsZVdo
ZWVsRXZlbnRFUktOU18xOFBsYXRmb3JtV2hlZWxFdmVudEUKIF9fWk43V2ViQ29yZTEyRXZlbnRI
YW5kbGVyMTdzY3JvbGxSZWN1cnNpdmVseUVOU18xNVNjcm9sbERpcmVjdGlvbkVOU18xN1Njcm9s
bEdyYW51bGFyaXR5RVBOU180Tm9kZUUKLV9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBoaXRU
ZXN0UmVzdWx0QXRQb2ludEVSS05TXzhJbnRQb2ludEViYk5TXzE3SGl0VGVzdFNjcm9sbGJhcnNF
alJLTlNfN0ludFNpemVFCitfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIwaGl0VGVzdFJlc3Vs
dEF0UG9pbnRFUktOU18yMUZyYWN0aW9uYWxMYXlvdXRQb2ludEViYk5TXzE3SGl0VGVzdFNjcm9s
bGJhcnNFalJLTlNfMjBGcmFjdGlvbmFsTGF5b3V0U2l6ZUUKIF9fWk43V2ViQ29yZTEyRXZlbnRI
YW5kbGVyMjFoYW5kbGVNb3VzZVByZXNzRXZlbnRFUktOU18xOFBsYXRmb3JtTW91c2VFdmVudEUK
IF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjNoYW5kbGVNb3VzZVJlbGVhc2VFdmVudEVSS05T
XzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIyNGxvZ2lj
YWxTY3JvbGxSZWN1cnNpdmVseUVOU18yMlNjcm9sbExvZ2ljYWxEaXJlY3Rpb25FTlNfMTdTY3Jv
bGxHcmFudWxhcml0eUVQTlNfNE5vZGVFCkBAIC0yNjgsNyArMjY4LDggQEAgX19aTjdXZWJDb3Jl
MTJQcmludENvbnRleHQ5c3Bvb2xQYWdlRVJOUwogX19aTjdXZWJDb3JlMTJQcmludENvbnRleHQ5
c3Bvb2xSZWN0RVJOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdJbnRSZWN0RQogX19aTjdXZWJD
b3JlMTJQcmludENvbnRleHRDMUVQTlNfNUZyYW1lRQogX19aTjdXZWJDb3JlMTJQcmludENvbnRl
eHREMUV2Ci1fX1pON1dlYkNvcmUxMlJlbmRlck9iamVjdDE2cmVwYWludFJlY3RhbmdsZUVSS05T
XzdJbnRSZWN0RWIKK19fWk43V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTZyZXBhaW50UmVjdGFuZ2xl
RVJLTlNfMjBGcmFjdGlvbmFsTGF5b3V0UmVjdEViCitfX1pON1dlYkNvcmUxMlJlbmRlck9iamVj
dDE5c2Nyb2xsUmVjdFRvVmlzaWJsZUVSS05TXzIwRnJhY3Rpb25hbExheW91dFJlY3RFUktOU18x
NVNjcm9sbEFsaWdubWVudEVTNl8KIF9fWk43V2ViQ29yZTEyUmVuZGVyV2lkZ2V0MjhyZXN1bWVX
aWRnZXRIaWVyYXJjaHlVcGRhdGVzRXYKIF9fWk43V2ViQ29yZTEyUmVuZGVyV2lkZ2V0MjlzdXNw
ZW5kV2lkZ2V0SGllcmFyY2h5VXBkYXRlc0V2CiBfX1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjEw
d3JhcENGRGF0YUVQSzhfX0NGRGF0YQpAQCAtNTI3LDYgKzUyOCw3IEBAIF9fWk43V2ViQ29yZTE2
Y3JlYXRlRnVsbE1hcmt1cEVQS05TXzVSYW4KIF9fWk43V2ViQ29yZTE2ZGVsZXRlQWxsQ29va2ll
c0V2CiBfX1pON1dlYkNvcmUxNmVuY2xvc2luZ0ludFJlY3RFUks3X05TUmVjdAogX19aTjdXZWJD
b3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJLTlNfOUZsb2F0UmVjdEUKK19fWk43V2ViQ29yZTE2ZW5j
bG9zaW5nSW50UmVjdEVSS05TXzIwRnJhY3Rpb25hbExheW91dFJlY3RFCiBfX1pON1dlYkNvcmUx
NmlzRW5kT2ZQYXJhZ3JhcGhFUktOU18xNVZpc2libGVQb3NpdGlvbkVOU18yN0VkaXRpbmdCb3Vu
ZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk43V2ViQ29yZTE2aXNVc2VyVmlzaWJsZVVSTEVQOE5TU3Ry
aW5nCiBfX1pON1dlYkNvcmUxNnNjcmlwdE5hbWVUb0NvZGVFUktOM1dURjZTdHJpbmdFCkBAIC02
MDUsNiArNjA3LDcgQEAgX19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVyNmRlY29kZQog
X19aTjdXZWJDb3JlMTlUZXh0UmVzb3VyY2VEZWNvZGVyQzFFUktOM1dURjZTdHJpbmdFUktOU18x
MlRleHRFbmNvZGluZ0ViCiBfX1pON1dlYkNvcmUxOVRleHRSZXNvdXJjZURlY29kZXJEMUV2CiBf
X1pON1dlYkNvcmUxOWFwcGxpY2F0aW9uSXNTYWZhcmlFdgorX19aTjdXZWJDb3JlMTlwaXhlbFNu
YXBwZWRJbnRSZWN0RVJLTlNfMjBGcmFjdGlvbmFsTGF5b3V0UmVjdEUKIF9fWk43V2ViQ29yZTIw
RGljdGF0aW9uQWx0ZXJuYXRpdmVDMUVqankKIF9fWk43V2ViQ29yZTIwRGljdGF0aW9uQWx0ZXJu
YXRpdmVDMUV2CiBfX1pON1dlYkNvcmUyMERpc3BsYXlTbGVlcERpc2FibGVyQzFFUEtjCkBAIC04
MzcsOCArODQwLDggQEAgX19aTjdXZWJDb3JlNUZyYW1lMTNyYW5nZUZvclBvaW50RVJLTlNfOAog
X19aTjdXZWJDb3JlNUZyYW1lMTRmcmFtZUZvcldpZGdldEVQS05TXzZXaWRnZXRFCiBfX1pON1dl
YkNvcmU1RnJhbWUxN3NldFBhZ2Vab29tRmFjdG9yRWYKIF9fWk43V2ViQ29yZTVGcmFtZTE3c2V0
VGV4dFpvb21GYWN0b3JFZgotX19aTjdXZWJDb3JlNUZyYW1lMjN2aXNpYmxlUG9zaXRpb25Gb3JQ
b2ludEVSS05TXzhJbnRQb2ludEUKIF9fWk43V2ViQ29yZTVGcmFtZTI0c2VhcmNoRm9yTGFiZWxz
QWJvdmVDZWxsRVBOU18xN1JlZ3VsYXJFeHByZXNzaW9uRVBOU18yMEhUTUxUYWJsZUNlbGxFbGVt
ZW50RVBtCitfX1pON1dlYkNvcmU1RnJhbWUyM3Zpc2libGVQb3NpdGlvbkZvclBvaW50RVJLTlNf
OEludFBvaW50RQogX19aTjdXZWJDb3JlNUZyYW1lMjVzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3Jz
RWZmCiBfX1pON1dlYkNvcmU1RnJhbWUyN3Jlc2l6ZVBhZ2VSZWN0c0tlZXBpbmdSYXRpb0VSS05T
XzlGbG9hdFNpemVFUzNfCiBfX1pON1dlYkNvcmU1RnJhbWU2Y3JlYXRlRVBOU180UGFnZUVQTlNf
MjFIVE1MRnJhbWVPd25lckVsZW1lbnRFUE5TXzE3RnJhbWVMb2FkZXJDbGllbnRFCkBAIC04NTMs
NyArODU2LDYgQEAgX19aTjdXZWJDb3JlNVJhbmdlMTRpc1BvaW50SW5SYW5nZUVQTlNfNAogX19a
TjdXZWJDb3JlNVJhbmdlNmNyZWF0ZUVOM1dURjEwUGFzc1JlZlB0cklOU184RG9jdW1lbnRFRUVO
UzJfSU5TXzROb2RlRUVFaVM2X2kKIF9fWk43V2ViQ29yZTVSYW5nZTZzZXRFbmRFTjNXVEYxMFBh
c3NSZWZQdHJJTlNfNE5vZGVFRUVpUmkKIF9fWk43V2ViQ29yZTVSYW5nZThzZXRTdGFydEVOM1dU
RjEwUGFzc1JlZlB0cklOU180Tm9kZUVFRWlSaQotX19aTjdXZWJDb3JlNVJhbmdlOXRleHRSZWN0
c0VSTjNXVEY2VmVjdG9ySU5TXzdJbnRSZWN0RUxtMEVFRWJQTlMwXzIwUmFuZ2VJbkZpeGVkUG9z
aXRpb25FCiBfX1pON1dlYkNvcmU1UmFuZ2VEMUV2CiBfX1pON1dlYkNvcmU2Q2hyb21lMTZzZXRT
dGF0dXNiYXJUZXh0RVBOU181RnJhbWVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmU2Q2hy
b21lNXByaW50RVBOU181RnJhbWVFCkBAIC0xMDYxLDEwICsxMDYzLDExIEBAIF9fWk43V2ViQ29y
ZThvcGVuRmlsZUVSS04zV1RGNlN0cmluZ0VOU18KIF9fWk43V2ViQ29yZTh0b1N0cmluZ0VSS04z
V1RGNlZlY3RvcklOU18xMVByb3h5U2VydmVyRUxtMEVFRQogX19aTjdXZWJDb3JlOURPTVdpbmRv
dzMwZGlzcGF0Y2hBbGxQZW5kaW5nVW5sb2FkRXZlbnRzRXYKIF9fWk43V2ViQ29yZTlET01XaW5k
b3czNmRpc3BhdGNoQWxsUGVuZGluZ0JlZm9yZVVubG9hZEV2ZW50c0V2Ci1fX1pON1dlYkNvcmU5
RmxvYXRSZWN0QzFFUks2Q0dSZWN0CiBfX1pON1dlYkNvcmU5RmxvYXRSZWN0QzFFUks3X05TUmVj
dAorX19aTjdXZWJDb3JlOUZsb2F0UmVjdEMxRVJLTlNfMjBGcmFjdGlvbmFsTGF5b3V0UmVjdEUK
IF9fWk43V2ViQ29yZTlGbG9hdFJlY3RDMUVSS05TXzdJbnRSZWN0RQogX19aTjdXZWJDb3JlOUZs
b2F0U2l6ZUMxRVJLTlNfN0ludFNpemVFCitfX1pON1dlYkNvcmU5RmxvYXRTaXplQzFFUktOU18y
MEZyYWN0aW9uYWxMYXlvdXRTaXplRQogX19aTjdXZWJDb3JlOUZvbnRDYWNoZTEzZm9udERhdGFD
b3VudEV2CiBfX1pON1dlYkNvcmU5Rm9udENhY2hlMjFpbmFjdGl2ZUZvbnREYXRhQ291bnRFdgog
X19aTjdXZWJDb3JlOUZvbnRDYWNoZTIxcHVyZ2VJbmFjdGl2ZUZvbnREYXRhRWkKQEAgLTEwNzUs
MTAgKzEwNzgsOCBAQCBfX1pON1dlYkNvcmU5RnJhbWVUcmVlOWNsZWFyTmFtZUV2CiBfX1pON1dl
YkNvcmU5RnJhbWVWaWV3MTFmb3JjZUxheW91dEViCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTJz
ZXRNZWRpYVR5cGVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MTRhZGp1
c3RWaWV3U2l6ZUV2Ci1fX1pON1dlYkNvcmU5RnJhbWVWaWV3MTRzZXRNYXJnaW5XaWR0aEVpCiBf
X1pON1dlYkNvcmU5RnJhbWVWaWV3MTRzZXROZWVkc0xheW91dEV2CiBfX1pON1dlYkNvcmU5RnJh
bWVWaWV3MTRzZXRUcmFuc3BhcmVudEViCi1fX1pON1dlYkNvcmU5RnJhbWVWaWV3MTVzZXRNYXJn
aW5IZWlnaHRFaQogX19aTjdXZWJDb3JlOUZyYW1lVmlldzE2c2V0UGFpbnRCZWhhdmlvckVqCiBf
X1pON1dlYkNvcmU5RnJhbWVWaWV3MTdhZGRTY3JvbGxhYmxlQXJlYUVQTlNfMTRTY3JvbGxhYmxl
QXJlYUUKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcxN3BhaW50Q29udHJvbFRpbnRzRXYKQEAgLTE1
MTEsNiArMTUxMiw4IEBAIF9fWk5LN1dlYkNvcmU4UG9zaXRpb24yNWxlYWRpbmdXaGl0ZXNwYWMK
IF9fWk5LN1dlYkNvcmU4UG9zaXRpb24yNnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uRU5TXzlF
QWZmaW5pdHlFYgogX19aTks3V2ViQ29yZThQb3NpdGlvbjh1cHN0cmVhbUVOU18yN0VkaXRpbmdC
b3VuZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk5LN1dlYkNvcmU5RE9NV2luZG93MjdwZW5kaW5nVW5s
b2FkRXZlbnRMaXN0ZW5lcnNFdgorX19aTks3V2ViQ29yZTVSYW5nZTl0ZXh0UXVhZHNFUk4zV1RG
NlZlY3RvcklOU185RmxvYXRRdWFkRUxtMEVFRWJQTlMwXzIwUmFuZ2VJbkZpeGVkUG9zaXRpb25F
CitfX1pOSzdXZWJDb3JlOUZsb2F0U2l6ZTZpc1plcm9FdgogX19aTks3V2ViQ29yZTlGbG9hdFF1
YWQxMWJvdW5kaW5nQm94RXYKIF9fWk5LN1dlYkNvcmU5RmxvYXRSZWN0MTBpbnRlcnNlY3RzRVJL
UzBfCiBfX1pOSzdXZWJDb3JlOUZsb2F0UmVjdGN2N19OU1JlY3RFdgpJbmRleDogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5vcmRlcgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lm9yZGVyCShyZXZpc2lvbiAxMTU5OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLm9yZGVy
CSh3b3JraW5nIGNvcHkpCkBAIC0zNTA4LDcgKzM1MDgsNiBAQCBfX1pON1dlYkNvcmUxMFJlbmRl
clRleHQxM3JlbW92ZVRleHRCb3hFCiBfX1pON1dlYkNvcmUxM1Jvb3RJbmxpbmVCb3gyOXJlbW92
ZUxpbmVCb3hGcm9tUmVuZGVyT2JqZWN0RXYKIF9fWk43V2ViQ29yZTE3UmVuZGVyTGluZUJveExp
c3QxM3JlbW92ZUxpbmVCb3hFUE5TXzEzSW5saW5lRmxvd0JveEUKIF9fWk5LN1dlYkNvcmUxMVJl
bmRlckJsb2NrMjBhZGp1c3RSZWN0Rm9yQ29sdW1uc0VSTlNfN0ludFJlY3RFCi1fX1pON1dlYkNv
cmUxMlJlbmRlck9iamVjdDE2cmVwYWludFJlY3RhbmdsZUVSS05TXzdJbnRSZWN0RWIKIF9fWk5L
N1dlYkNvcmUyMkhUTUxGb3JtQ29udHJvbEVsZW1lbnQxMWlzRm9jdXNhYmxlRXYKIF9fWk5LN1dl
YkNvcmUyMkhUTUxGb3JtQ29udHJvbEVsZW1lbnQxM3N1cHBvcnRzRm9jdXNFdgogX19aTjdXZWJD
b3JlMTVGb2N1c0NvbnRyb2xsZXIxNHNldEZvY3VzZWROb2RlRVBOU180Tm9kZUVOM1dURjEwUGFz
c1JlZlB0cklOU181RnJhbWVFRUUKQEAgLTYyNDgsMTMgKzYyNDcsMTEgQEAgX19aTjdXZWJDb3Jl
MjFBY2Nlc3NpYmlsaXR5TWVudUxpc3REMEV2CiBfX1pON1dlYkNvcmUyNUFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3REMkV2CiBfX1pON1dlYkNvcmUxNFJlbmRlck1lbnVMaXN0MTFyZW1vdmVDaGls
ZEVQTlNfMTJSZW5kZXJPYmplY3RFCiBfX1pON1dlYkNvcmUxNFJlbmRlck1lbnVMaXN0RDBFdgot
X19aTjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0QzFFUktOU184SW50UG9pbnRFCiBfX1pON1dlYkNv
cmUxMVJlbmRlckxheWVyN2hpdFRlc3RFUktOU18xNEhpdFRlc3RSZXF1ZXN0RVJOU18xM0hpdFRl
c3RSZXN1bHRFCiBfX1pON1dlYkNvcmUxMVJlbmRlckxheWVyMTJoaXRUZXN0TGF5ZXJFUFMwX1Mx
X1JLTlNfMTRIaXRUZXN0UmVxdWVzdEVSTlNfMTNIaXRUZXN0UmVzdWx0RVJLTlNfN0ludFJlY3RF
UktOU184SW50UG9pbnRFYlBLTlNfMjRIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGVFUGQKIF9fWk43
V2ViQ29yZTEzSGl0VGVzdFJlc3VsdDEycmVjdEZvclBvaW50RVJLTlNfOEludFBvaW50RWpqamoK
IF9fWk43V2ViQ29yZTExUmVuZGVyTGF5ZXIzNXVwZGF0ZTNEVHJhbnNmb3JtZWREZXNjZW5kYW50
U3RhdHVzRXYKIF9fWk43V2ViQ29yZTExUmVuZGVyTGF5ZXIxMWhpdFRlc3RMaXN0RVBOM1dURjZW
ZWN0b3JJUFMwX0xtMEVFRVMzX1JLTlNfMTRIaXRUZXN0UmVxdWVzdEVSTlNfMTNIaXRUZXN0UmVz
dWx0RVJLTlNfN0ludFJlY3RFUktOU184SW50UG9pbnRFUEtOU18yNEhpdFRlc3RpbmdUcmFuc2Zv
cm1TdGF0ZUVQZFNLX1NKX2IKLV9fWk43V2ViQ29yZTEzSGl0VGVzdFJlc3VsdEMxRVJLTlNfOElu
dFBvaW50RWpqamoKIF9fWk5LN1dlYkNvcmUxMVJlbmRlckxheWVyMTVoaXRUZXN0Q29udGVudHNF
UktOU18xNEhpdFRlc3RSZXF1ZXN0RVJOU18xM0hpdFRlc3RSZXN1bHRFUktOU183SW50UmVjdEVS
S05TXzhJbnRQb2ludEVOU18xM0hpdFRlc3RGaWx0ZXJFCiBfX1pON1dlYkNvcmUxMlJlbmRlck9i
amVjdDdoaXRUZXN0RVJLTlNfMTRIaXRUZXN0UmVxdWVzdEVSTlNfMTNIaXRUZXN0UmVzdWx0RVJL
TlNfOEludFBvaW50RWlpTlNfMTNIaXRUZXN0RmlsdGVyRQogX19aTjdXZWJDb3JlMTFSZW5kZXJC
bG9jazExbm9kZUF0UG9pbnRFUktOU18xNEhpdFRlc3RSZXF1ZXN0RVJOU18xM0hpdFRlc3RSZXN1
bHRFUktOU184SW50UG9pbnRFaWlOU18xM0hpdFRlc3RBY3Rpb25FCkBAIC0xNDM2MCw3ICsxNDM1
Nyw2IEBAIF9fWk4zV1RGOUhhc2hUYWJsZUlQS3ZTdDRwYWlySVMyX043V2ViQ28KIF9fWk4zV1RG
OUhhc2hUYWJsZUlQS3ZTdDRwYWlySVMyX043V2ViQ29yZTdJbnRTaXplRUVOU18xOFBhaXJGaXJz
dEV4dHJhY3RvcklTNl9FRU5TXzdQdHJIYXNoSVMyX0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18x
MEhhc2hUcmFpdHNJUzJfRUVOU0NfSVM1X0VFRUVTRF9FNGZpbmRJUzJfTlNfMjJJZGVudGl0eUhh
c2hUcmFuc2xhdG9ySVMyX1M2X1NBX0VFRUVOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySVMyX1M2X1M4
X1NBX1NGX1NEX0VFUktUXwogX19aTjNXVEY5SGFzaFRhYmxlSVBLdlN0NHBhaXJJUzJfTjdXZWJD
b3JlN0ludFNpemVFRU5TXzE4UGFpckZpcnN0RXh0cmFjdG9ySVM2X0VFTlNfN1B0ckhhc2hJUzJf
RUVOU18xNFBhaXJIYXNoVHJhaXRzSU5TXzEwSGFzaFRyYWl0c0lTMl9FRU5TQ19JUzVfRUVFRVNE
X0U2cmVoYXNoRWkKIF9fWk4zV1RGOUhhc2hUYWJsZUlQS3ZTdDRwYWlySVMyX043V2ViQ29yZTdJ
bnRTaXplRUVOU18xOFBhaXJGaXJzdEV4dHJhY3RvcklTNl9FRU5TXzdQdHJIYXNoSVMyX0VFTlNf
MTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hUcmFpdHNJUzJfRUVOU0NfSVM1X0VFRUVTRF9FYVNF
UktTR18KLV9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBoaXRUZXN0UmVzdWx0QXRQb2ludEVS
S05TXzhJbnRQb2ludEViYk5TXzE3SGl0VGVzdFNjcm9sbGJhcnNFalJLTlNfN0ludFNpemVFCiBf
X1pOSzdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0MTBpc1NlbGVjdGVkRXYKIF9fWk4zV1RGOUhhc2hU
YWJsZUlON1dlYkNvcmU3SW50U2l6ZUVTdDRwYWlySVMyX2pFTlNfMThQYWlyRmlyc3RFeHRyYWN0
b3JJUzRfRUVOU183SW50SGFzaElTMl9FRU5TXzE0UGFpckhhc2hUcmFpdHNJTlNfMTBIYXNoVHJh
aXRzSVMyX0VFTlNBX0lqRUVFRVNCX0UxNmxvb2t1cEZvcldyaXRpbmdJUzJfTlNfMjJJZGVudGl0
eUhhc2hUcmFuc2xhdG9ySVMyX1M0X1M4X0VFRUVTM19JUFM0X2JFUktUXwogX19aTjNXVEY5SGFz
aFRhYmxlSU43V2ViQ29yZTdJbnRTaXplRVN0NHBhaXJJUzJfakVOU18xOFBhaXJGaXJzdEV4dHJh
Y3RvcklTNF9FRU5TXzdJbnRIYXNoSVMyX0VFTlNfMTRQYWlySGFzaFRyYWl0c0lOU18xMEhhc2hU
cmFpdHNJUzJfRUVOU0FfSWpFRUVFU0JfRTNhZGRJUzJfak5TXzE3SGFzaE1hcFRyYW5zbGF0b3JJ
UzRfU0RfUzhfRUVFRVMzX0lOU18xN0hhc2hUYWJsZUl0ZXJhdG9ySVMyX1M0X1M2X1M4X1NEX1NC
X0VFYkVSS1RfUktUMF8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDExNTk5MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTEz
Niw2ICs1MTM2LDcgQEAKIAkJQjhEQkRCNEMxMzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlv
bkNvbW1hbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEI4REJEQjQ4MTMwQjBGOEEwMEY1Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggKi87IH07
CiAJCUI4REJEQjREMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJE
QjQ5MTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCAqLzsg
fTsKIAkJQjhEQkRCNEUxMzBCMEY4QTAwRjVDREIxIC8qIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI4REJE
QjRBMTMwQjBGOEEwMEY1Q0RCMSAvKiBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggKi87IH07
CisJCUJBQjFDMDZBMTRGQzM2NzkwMDQyMzNGQyAvKiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEZDRTU0MTRF
Qzc5RTcwMDBEMTdBMyAvKiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQUNGMjkwMTEzQjJBMEQ1MDA3ODFG
OTAgLyogTGF5b3V0VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJBQ0YyOTAwMTNCMkEwRDUwMDc4MUY5MCAvKiBMYXlvdXRUeXBlcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMDBGMDA0MEUw
QTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzAwRUZGRTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5oICov
OyB9OwogCQlCQzAwRjAwNTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDBFRkZGMEUwQTE4NTUwMEZE
MDRFMyAvKiBET01GaWxlLm1tICovOyB9OwpAQCAtMjI4MzQsNiArMjI4MzUsNyBAQAogCQkJCTY1
NkQzNzNBMEFEQkE1REUwMEE0NTU0RCAvKiBGb3JtU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQxODg1QjkzMTFCNkZEQTYwMDMzODNCQiAvKiBGb3JtU3VibWlzc2lvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTM1QzQ3NkQwOUFDNEQ2MzAwQTZBQUI0IC8qIEZvdW5kYXRpb25FeHRyYXMuaCBp
biBIZWFkZXJzICovLAorCQkJCUJBQjFDMDZBMTRGQzM2NzkwMDQyMzNGQyAvKiBGcmFjdGlvbmFs
TGF5b3V0UG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NEZDRkUxMTRFRjI1MDkwMDBEMTdB
MyAvKiBGcmFjdGlvbmFsTGF5b3V0UmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0RkNFNUQx
NEVDNzlFNzAwMEQxN0EzIC8qIEZyYWN0aW9uYWxMYXlvdXRTaXplLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNDRGQ0U1MjE0RUM3OUJDMDAwRDE3QTMgLyogRnJhY3Rpb25hbExheW91dFVuaXQuaCBp
biBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUu
Y3BwCShyZXZpc2lvbiAxMTU5OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZl
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzEsNyArNDMxLDExIEBAIHRlbXBsYXRlPD4g
dW5zaWduZWQgQ1NTUHJpbWl0aXZlVmFsdWU6OmMKIAogdGVtcGxhdGU8PiBMZW5ndGggQ1NTUHJp
bWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGgoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHls
ZSogcm9vdFN0eWxlLCBmbG9hdCBtdWx0aXBsaWVyLCBib29sIGNvbXB1dGluZ0ZvbnRTaXplKQog
eworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgcmV0dXJuIExlbmd0aChzdGF0aWNf
Y2FzdDxmbG9hdD4oY29tcHV0ZUxlbmd0aERvdWJsZShzdHlsZSwgcm9vdFN0eWxlLCBtdWx0aXBs
aWVyLCBjb21wdXRpbmdGb250U2l6ZSkpLCBGaXhlZCk7CisjZWxzZQogICAgIHJldHVybiBMZW5n
dGgocm91bmRGb3JJbXByZWNpc2VDb252ZXJzaW9uPGZsb2F0Pihjb21wdXRlTGVuZ3RoRG91Ymxl
KHN0eWxlLCByb290U3R5bGUsIG11bHRpcGxpZXIsIGNvbXB1dGluZ0ZvbnRTaXplKSksIEZpeGVk
KTsKKyNlbmRpZgogfQogCiB0ZW1wbGF0ZTw+IHNob3J0IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21w
dXRlTGVuZ3RoKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZmxv
YXQgbXVsdGlwbGllciwgYm9vbCBjb21wdXRpbmdGb250U2l6ZSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAJKHJldmlzaW9uIDExNTk5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUzLDEwICszNTMsMTQgQEAgc3RhdGljIGludCBhZGp1
c3RGb3JMb2NhbFpvb20oTGF5b3V0VW5pdAogICAgIGZsb2F0IHpvb21GYWN0b3IgPSBsb2NhbFpv
b21Gb3JSZW5kZXJlcihyZW5kZXJlcik7CiAgICAgaWYgKHpvb21GYWN0b3IgPT0gMSkKICAgICAg
ICAgcmV0dXJuIHZhbHVlOworI2lmIEVOQUJMRShTVUJQSVhFTF9MQVlPVVQpCisgICAgcmV0dXJu
IGxyb3VuZGYodmFsdWUgLyB6b29tRmFjdG9yKTsKKyNlbHNlCiAgICAgLy8gTmVlZGVkIGJlY2F1
c2UgY29tcHV0ZUxlbmd0aEludCB0cnVuY2F0ZXMgKHJhdGhlciB0aGFuIHJvdW5kcykgd2hlbiBz
Y2FsaW5nIHVwLgogICAgIGlmICh6b29tRmFjdG9yID4gMSkKICAgICAgICAgdmFsdWUrKzsKICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSAvIHpvb21GYWN0b3IpOworI2VuZGlmCiB9
CiAKIGludCBFbGVtZW50OjpvZmZzZXRMZWZ0KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9MYXlvdXRUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9MYXlvdXRUeXBlcy5oCShyZXZpc2lvbiAxMTU5OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGF5b3V0VHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTE1ICszNywxMDIgQEAK
ICNkZWZpbmUgTGF5b3V0VHlwZXNfaAogCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVk
ZSAiRnJhY3Rpb25hbExheW91dFJlY3QuaCIKKyNpbmNsdWRlICJGcmFjdGlvbmFsTGF5b3V0VW5p
dC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4K
KworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
dHlwZWRlZiBpbnQgTGF5b3V0VW5pdDsKLXR5cGVkZWYgSW50UG9pbnQgTGF5b3V0UG9pbnQ7Ci10
eXBlZGVmIEludFNpemUgTGF5b3V0U2l6ZTsKLXR5cGVkZWYgSW50UmVjdCBMYXlvdXRSZWN0Owot
Ci0jZGVmaW5lIE1BWF9MQVlPVVRfVU5JVCBJTlRfTUFYCi0jZGVmaW5lIE1JTl9MQVlPVVRfVU5J
VCBJTlRfTUlOCi0jZGVmaW5lIFpFUk9fTEFZT1VUX1VOSVQgMAordHlwZWRlZiBGcmFjdGlvbmFs
TGF5b3V0VW5pdCBMYXlvdXRVbml0OwordHlwZWRlZiBGcmFjdGlvbmFsTGF5b3V0UG9pbnQgTGF5
b3V0UG9pbnQ7Cit0eXBlZGVmIEZyYWN0aW9uYWxMYXlvdXRTaXplIExheW91dFNpemU7Cit0eXBl
ZGVmIEZyYWN0aW9uYWxMYXlvdXRSZWN0IExheW91dFJlY3Q7CisKKyNkZWZpbmUgTUFYX0xBWU9V
VF9VTklUIExheW91dFVuaXQ6Om1heCgpCisjZGVmaW5lIE1JTl9MQVlPVVRfVU5JVCBMYXlvdXRV
bml0OjptaW4oKQorI2RlZmluZSBaRVJPX0xBWU9VVF9VTklUIExheW91dFVuaXQoMCkKIAotaW5s
aW5lIExheW91dFJlY3QgZW5jbG9zaW5nTGF5b3V0UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CitpbmxpbmUgRnJhY3Rpb25hbExheW91dFJlY3QgZW5jbG9zaW5nTGF5b3V0UmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QocmVjdCk7CiB9
CiAKLWlubGluZSBJbnRSZWN0IHBpeGVsU25hcHBlZEludFJlY3QoY29uc3QgTGF5b3V0UmVjdCYg
cmVjdCkKK2lubGluZSBMYXlvdXRTaXplIHJvdW5kZWRMYXlvdXRTaXplKGNvbnN0IEZsb2F0U2l6
ZSYgcykKIHsKLSAgICByZXR1cm4gcmVjdDsKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQor
ICAgIHJldHVybiBGcmFjdGlvbmFsTGF5b3V0U2l6ZShzKTsKKyNlbHNlCisgICAgcmV0dXJuIHJv
dW5kZWRJbnRTaXplKHMpOworI2VuZGlmCiB9CiAKIGlubGluZSBJbnRSZWN0IHBpeGVsU25hcHBl
ZEludFJlY3QoTGF5b3V0VW5pdCBsZWZ0LCBMYXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCB3aWR0
aCwgTGF5b3V0VW5pdCBoZWlnaHQpCiB7Ci0gICAgcmV0dXJuIEludFJlY3QobGVmdCwgdG9wLCB3
aWR0aCwgaGVpZ2h0KTsKLX0KLQotaW5saW5lIEludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChj
b25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIGNvbnN0IExheW91dFNpemUmIHNpemUpCi17Ci0g
ICAgcmV0dXJuIEludFJlY3QobG9jYXRpb24sIHNpemUpOworICAgIHJldHVybiBJbnRSZWN0KGxl
ZnQucm91bmQoKSwgdG9wLnJvdW5kKCksIHNuYXBTaXplVG9QaXhlbCh3aWR0aCwgbGVmdCksIHNu
YXBTaXplVG9QaXhlbChoZWlnaHQsIHRvcCkpOwogfQogCiBpbmxpbmUgSW50UmVjdCBwaXhlbFNu
YXBwZWRJbnRSZWN0RnJvbUVkZ2VzKExheW91dFVuaXQgbGVmdCwgTGF5b3V0VW5pdCB0b3AsIExh
eW91dFVuaXQgcmlnaHQsIExheW91dFVuaXQgYm90dG9tKQogewotICAgIHJldHVybiBJbnRSZWN0
KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApOwotfQotCi1pbmxpbmUgaW50
IHNuYXBTaXplVG9QaXhlbChMYXlvdXRVbml0IHNpemUsIExheW91dFVuaXQgbG9jYXRpb24pIAot
ewotICAgIFVOVVNFRF9QQVJBTShsb2NhdGlvbik7Ci0gICAgcmV0dXJuIHNpemU7Ci19Ci0KLWlu
bGluZSBJbnRTaXplIHBpeGVsU25hcHBlZEludFNpemUoTGF5b3V0U2l6ZSBzaXplLCBMYXlvdXRQ
b2ludCBsb2NhdGlvbikKLXsKLSAgICBVTlVTRURfUEFSQU0obG9jYXRpb24pOwotICAgIHJldHVy
biBzaXplOwotfQotCi1pbmxpbmUgSW50U2l6ZSByb3VuZGVkSW50U2l6ZShjb25zdCBMYXlvdXRT
aXplJiBzKQotewotICAgIHJldHVybiBzOwotfQotCi1pbmxpbmUgTGF5b3V0U2l6ZSByb3VuZGVk
TGF5b3V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHMpCi17Ci0gICAgcmV0dXJuIHJvdW5kZWRJbnRT
aXplKHMpOwotfQotCi1pbmxpbmUgSW50UG9pbnQgcm91bmRlZEludFBvaW50KGNvbnN0IExheW91
dFBvaW50JiBwKQotewotICAgIHJldHVybiBwOworICAgIHJldHVybiBJbnRSZWN0KGxlZnQucm91
bmQoKSwgdG9wLnJvdW5kKCksIHNuYXBTaXplVG9QaXhlbChyaWdodCAtIGxlZnQsIGxlZnQpLCBz
bmFwU2l6ZVRvUGl4ZWwoYm90dG9tIC0gdG9wLCB0b3ApKTsKIH0KIAogaW5saW5lIExheW91dFBv
aW50IHJvdW5kZWRMYXlvdXRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKQogeworI2lmIEVOQUJM
RShTVUJQSVhFTF9MQVlPVVQpCisgICAgcmV0dXJuIEZyYWN0aW9uYWxMYXlvdXRQb2ludChwKTsK
KyNlbHNlCiAgICAgcmV0dXJuIHJvdW5kZWRJbnRQb2ludChwKTsKKyNlbmRpZgogfQogCiBpbmxp
bmUgTGF5b3V0UG9pbnQgZmxvb3JlZExheW91dFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApCiB7
Ci0gICAgcmV0dXJuIGZsb29yZWRJbnRQb2ludChwKTsKKyAgICByZXR1cm4gTGF5b3V0UG9pbnQo
cC54KCksIHAueSgpKTsKIH0KIAogaW5saW5lIExheW91dFBvaW50IGZsb29yZWRMYXlvdXRQb2lu
dChjb25zdCBGbG9hdFNpemUmIHMpCiB7Ci0gICAgcmV0dXJuIGZsb29yZWRJbnRQb2ludChzKTsK
KyAgICByZXR1cm4gTGF5b3V0UG9pbnQocy53aWR0aCgpLCBzLmhlaWdodCgpKTsKIH0KIAogaW5s
aW5lIExheW91dFNpemUgZmxvb3JlZExheW91dFNpemUoY29uc3QgRmxvYXRQb2ludCYgcCkKIHsK
LSAgICByZXR1cm4gTGF5b3V0U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHAueCgpKSwgc3RhdGljX2Nh
c3Q8aW50PihwLnkoKSkpOworICAgIHJldHVybiBMYXlvdXRTaXplKHAueCgpLCBwLnkoKSk7CiB9
CiAKIGlubGluZSBpbnQgcm91bmRUb0ludChMYXlvdXRVbml0IHZhbHVlKQogewotICAgIHJldHVy
biB2YWx1ZTsKKyAgICByZXR1cm4gdmFsdWUucm91bmQoKTsKIH0KIAogaW5saW5lIGludCBmbG9v
clRvSW50KExheW91dFVuaXQgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlOworICAgIHJldHVy
biB2YWx1ZS50b0ludCgpOwogfQogCiBpbmxpbmUgTGF5b3V0VW5pdCByb3VuZGVkTGF5b3V0VW5p
dChmbG9hdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbHJvdW5kZih2YWx1ZSk7CisjaWYgRU5BQkxF
KFNVQlBJWEVMX0xBWU9VVCkKKyAgICByZXR1cm4gRnJhY3Rpb25hbExheW91dFVuaXQodmFsdWUp
OworI2Vsc2UKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKHZhbHVlKSk7Cisj
ZW5kaWYKIH0KIAogaW5saW5lIExheW91dFVuaXQgY2VpbGVkTGF5b3V0VW5pdChmbG9hdCB2YWx1
ZSkKIHsKKyNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQorICAgIHJldHVybiBGcmFjdGlvbmFs
TGF5b3V0VW5pdCh2YWx1ZSk7CisjZWxzZQogICAgIHJldHVybiBjZWlsZih2YWx1ZSk7CisjZW5k
aWYKIH0KIAogaW5saW5lIExheW91dFVuaXQgYWJzb2x1dGVWYWx1ZShjb25zdCBMYXlvdXRVbml0
JiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gYWJzKHZhbHVlKTsKKyAgICByZXR1cm4gdmFsdWUuYWJz
KCk7CiB9CiAKIGlubGluZSBMYXlvdXRTaXplIHRvTGF5b3V0U2l6ZShjb25zdCBMYXlvdXRQb2lu
dCYgcCkKQEAgLTE2MCwyMiArMTQ3LDIyIEBAIGlubGluZSBMYXlvdXRQb2ludCB0b0xheW91dFBv
aW50KGNvbnN0IEwKIAogaW5saW5lIExheW91dFVuaXQgbGF5b3V0TW9kKGNvbnN0IExheW91dFVu
aXQmIG51bWVyYXRvciwgY29uc3QgTGF5b3V0VW5pdCYgZGVub21pbmF0b3IpCiB7Ci0gICAgcmV0
dXJuIG51bWVyYXRvciAlIGRlbm9taW5hdG9yOworICAgIHJldHVybiBudW1lcmF0b3IudG9JbnQo
KSAlIGRlbm9taW5hdG9yLnRvSW50KCk7CiB9CiAKIGlubGluZSBMYXlvdXRVbml0IGNsYW1wVG9M
YXlvdXRVbml0KGRvdWJsZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gY2xhbXBUb0ludGVnZXIodmFs
dWUpOworICAgIHJldHVybiBjbGFtcFRvPEZyYWN0aW9uYWxMYXlvdXRVbml0Pih2YWx1ZSwgRnJh
Y3Rpb25hbExheW91dFVuaXQ6Om1pbigpLCBGcmFjdGlvbmFsTGF5b3V0VW5pdDo6bWF4KCkpOwog
fQogCi1pbmxpbmUgYm9vbCBpc0ludGVnZXJWYWx1ZShjb25zdCBMYXlvdXRVbml0KQoraW5saW5l
IEludFJlY3QgcGl4ZWxTbmFwcGVkSW50UmVjdChMYXlvdXRQb2ludCBsb2NhdGlvbiwgTGF5b3V0
U2l6ZSBzaXplKQogewotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBJbnRSZWN0KHJvdW5k
ZWRJbnRQb2ludChsb2NhdGlvbiksIHBpeGVsU25hcHBlZEludFNpemUoc2l6ZSwgbG9jYXRpb24p
KTsKIH0KIAotaW5saW5lIExheW91dFVuaXQgYm91bmRlZE11bHRpcGx5KGNvbnN0IExheW91dFVu
aXQmIGEsIGNvbnN0IExheW91dFVuaXQmIGIpCitpbmxpbmUgYm9vbCBpc0ludGVnZXJWYWx1ZShj
b25zdCBMYXlvdXRVbml0IHZhbHVlKQogewotICAgIHJldHVybiBhICogYjsKKyAgICByZXR1cm4g
dmFsdWUuZmxvb3IoKSA9PSB2YWx1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhaW50SW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAkocmV2aXNpb24gMTE1OTkxKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhaW50SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw3ICszMiw5IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKICNpbmNsdWRlICJQYWludFBoYXNl
LmgiCisjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAKQEAgLTk2LDcgKzk4LDcgQEAgc3RydWN0IFBhaW50SW5m
byB7CiAgICAgfQogI2VuZGlmCiAKLSAgICBzdGF0aWMgSW50UmVjdCBpbmZpbml0ZVJlY3QoKSB7
IHJldHVybiBJbnRSZWN0KElOVF9NSU4gLyAyLCBJTlRfTUlOIC8gMiwgSU5UX01BWCwgSU5UX01B
WCk7IH0KKyAgICBzdGF0aWMgSW50UmVjdCBpbmZpbml0ZVJlY3QoKSB7IHJldHVybiBJbnRSZWN0
KExheW91dFJlY3Q6OmluZmluaXRlUmVjdCgpKTsgfQogCiAgICAgLy8gRklYTUU6IEludHJvZHVj
ZSBzZXR0ZXJzL2dldHRlcnMgYXQgc29tZSBwb2ludC4gUmVxdWlyZXMgYSBsb3Qgb2YgY2hhbmdl
cyB0aHJvdWdob3V0IHJlbmRlcmluZy8uCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJldmlzaW9uIDExNTk5
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDEsNiArMTAxLDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IENsaXBSZWN0JiBvdGhlcikgY29uc3QgeyByZXR1cm4gcmVjdCgpID09IG90aGVyLnJlY3Qo
KSAmJiBoYXNSYWRpdXMoKSA9PSBvdGhlci5oYXNSYWRpdXMoKTsgfQogICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBDbGlwUmVjdCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIHJlY3QoKSAhPSBvdGhl
ci5yZWN0KCkgfHwgaGFzUmFkaXVzKCkgIT0gb3RoZXIuaGFzUmFkaXVzKCk7IH0KKyAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgTGF5b3V0UmVjdCYgb3RoZXJSZWN0KSBjb25zdCB7IHJldHVybiBy
ZWN0KCkgIT0gb3RoZXJSZWN0OyB9CiAKICAgICB2b2lkIGludGVyc2VjdChjb25zdCBMYXlvdXRS
ZWN0JiBvdGhlcikgeyBtX3JlY3QuaW50ZXJzZWN0KG90aGVyKTsgfQogICAgIHZvaWQgaW50ZXJz
ZWN0KGNvbnN0IENsaXBSZWN0JiBvdGhlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDExNTk5MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzcsNyArNzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiAKLXN0YXRpYyB2b2lkIHdyaXRlTGF5ZXJzKFRleHRTdHJlYW0mLCBjb25zdCBSZW5k
ZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciosIGNvbnN0IEludFJlY3QmIHBhaW50RGly
dHlSZWN0LCBpbnQgaW5kZW50ID0gMCwgUmVuZGVyQXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IgPSBS
ZW5kZXJBc1RleHRCZWhhdmlvck5vcm1hbCk7CitzdGF0aWMgdm9pZCB3cml0ZUxheWVycyhUZXh0
U3RyZWFtJiwgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqLCBjb25z
dCBMYXlvdXRSZWN0JiBwYWludERpcnR5UmVjdCwgaW50IGluZGVudCA9IDAsIFJlbmRlckFzVGV4
dEJlaGF2aW9yID0gUmVuZGVyQXNUZXh0QmVoYXZpb3JOb3JtYWwpOwogCiBzdGF0aWMgaW5saW5l
IGJvb2wgaGFzRnJhY3Rpb25zKGRvdWJsZSB2YWwpCiB7CkBAIC0xMDQsNiArMTA0LDEyIEBAIFRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGMKICAgICByZXR1cm4gdHMgPDwg
IigiIDw8IHAueCgpIDw8ICIsIiA8PCBwLnkoKSA8PCAiKSI7CiB9CiAKK1RleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZyYWN0aW9uYWxMYXlvdXRQb2ludCYgcCkK
K3sKKyAgICAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIHByaW50ZWQgYXMgZmxvYXRzLiBLZWVw
aW5nIHRoZW0gaW50cyBmb3IgY29uc2lzdGVuY3kgd2l0aCBwZXJ2aW91cyB0ZXN0IGV4cGVjdGF0
aW9ucy4KKyAgICByZXR1cm4gdHMgPDwgIigiIDw8IHAueCgpLnRvSW50KCkgPDwgIiwiIDw8IHAu
eSgpLnRvSW50KCkgPDwgIikiOworfQorCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBGbG9hdFBvaW50JiBwKQogewogICAgIHRzIDw8ICIoIiA8PCBmb3JtYXRO
dW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocC54KCkpOwpAQCAtMjQyLDcgKzI0OCw3IEBAIHZvaWQg
UmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3QKICAgICBSZW5kZXJCbG9jayogY2Ig
PSBvLmNvbnRhaW5pbmdCbG9jaygpOwogICAgIGJvb2wgYWRqdXN0Rm9yVGFibGVDZWxscyA9IGNi
ID8gY2ItPmlzVGFibGVDZWxsKCkgOiBmYWxzZTsKIAotICAgIEludFJlY3QgcjsKKyAgICBMYXlv
dXRSZWN0IHI7CiAgICAgaWYgKG8uaXNUZXh0KCkpIHsKICAgICAgICAgLy8gRklYTUU6IFdvdWxk
IGJlIGJldHRlciB0byBkdW1wIHRoZSBib3VuZGluZyBib3ggeCBhbmQgeSByYXRoZXIgdGhhbiB0
aGUgZmlyc3QgcnVuJ3MgeCBhbmQgeSwgYnV0IHRoYXQgd291bGQgaW52b2x2ZSB1cGRhdGluZwog
ICAgICAgICAvLyBtYW55IHRlc3QgcmVzdWx0cy4KQEAgLTI2MSw3ICsyNjcsNyBAQCB2b2lkIFJl
bmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2JqZWN0CiAgICAgICAgIC8vIHRvIGNsZWFuIHVw
IHRoZSByZXN1bHRzIHRvIGR1bXAgYm90aCB0aGUgb3V0ZXIgYm94IGFuZCB0aGUgaW50cmluc2lj
IHBhZGRpbmcgc28gdGhhdCBib3RoIGJpdHMgb2YgaW5mb3JtYXRpb24gYXJlCiAgICAgICAgIC8v
IGNhcHR1cmVkIGJ5IHRoZSByZXN1bHRzLgogICAgICAgICBjb25zdCBSZW5kZXJUYWJsZUNlbGwm
IGNlbGwgPSAqdG9SZW5kZXJUYWJsZUNlbGwoJm8pOwotICAgICAgICByID0gSW50UmVjdChjZWxs
LngoKSwgY2VsbC55KCkgKyBjZWxsLmludHJpbnNpY1BhZGRpbmdCZWZvcmUoKSwgY2VsbC53aWR0
aCgpLCBjZWxsLmhlaWdodCgpIC0gY2VsbC5pbnRyaW5zaWNQYWRkaW5nQmVmb3JlKCkgLSBjZWxs
LmludHJpbnNpY1BhZGRpbmdBZnRlcigpKTsKKyAgICAgICAgciA9IExheW91dFJlY3QoY2VsbC54
KCksIGNlbGwueSgpICsgY2VsbC5pbnRyaW5zaWNQYWRkaW5nQmVmb3JlKCksIGNlbGwud2lkdGgo
KSwgY2VsbC5oZWlnaHQoKSAtIGNlbGwuaW50cmluc2ljUGFkZGluZ0JlZm9yZSgpIC0gY2VsbC5p
bnRyaW5zaWNQYWRkaW5nQWZ0ZXIoKSk7CiAgICAgfSBlbHNlIGlmIChvLmlzQm94KCkpCiAgICAg
ICAgIHIgPSB0b1JlbmRlckJveCgmbyktPmZyYW1lUmVjdCgpOwogCkBAIC0yNjksNiArMjc1LDEx
IEBAIHZvaWQgUmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5kZXJPYmplY3QKICAgICBpZiAoYWRq
dXN0Rm9yVGFibGVDZWxscykKICAgICAgICAgci5tb3ZlKDAsIC10b1JlbmRlclRhYmxlQ2VsbChv
LmNvbnRhaW5pbmdCbG9jaygpKS0+aW50cmluc2ljUGFkZGluZ0JlZm9yZSgpKTsKIAorICAgIC8v
IEZJWE1FOiBDb252ZXJ0IGxheW91dCB0ZXN0IHJlc3VsdHMgdG8gcmVwb3J0IHN1Yi1waXhlbCB2
YWx1ZXMsIGluIHRoZSBtZWFudGltZSB1c2luZyBlbmNsb3NpbmdJbnRSZWN0CisgICAgLy8gZm9y
IGNvbnNpc3RlbmN5IHdpdGggb2xkIHJlc3VsdHMuCisgICAgciA9IGVuY2xvc2luZ0ludFJlY3Qo
cik7CisKKwogICAgIHRzIDw8ICIgIiA8PCByOwogCiAgICAgaWYgKCEoby5pc1RleHQoKSAmJiAh
by5pc0JSKCkpKSB7CkBAIC01OTEsOSArNjAyLDE0IEBAIGVudW0gTGF5ZXJQYWludFBoYXNlIHsK
IH07CiAKIHN0YXRpYyB2b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBSZW5kZXJMYXllciYgbCwK
LSAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBJbnRS
ZWN0JiBiYWNrZ3JvdW5kQ2xpcFJlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBjb25zdCBJ
bnRSZWN0JiBvdXRsaW5lQ2xpcFJlY3QsCisgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRS
ZWN0JiBsYXllckJvdW5kcywgY29uc3QgTGF5b3V0UmVjdCYgYmFja2dyb3VuZENsaXBSZWN0LCBj
b25zdCBMYXlvdXRSZWN0JiBjbGlwUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgb3V0bGluZUNsaXBS
ZWN0LAogICAgICAgICAgICAgICAgICAgTGF5ZXJQYWludFBoYXNlIHBhaW50UGhhc2UgPSBMYXll
clBhaW50UGhhc2VBbGwsIGludCBpbmRlbnQgPSAwLCBSZW5kZXJBc1RleHRCZWhhdmlvciBiZWhh
dmlvciA9IFJlbmRlckFzVGV4dEJlaGF2aW9yTm9ybWFsKQogeworICAgIEludFJlY3QgYWRqdXN0
ZWRMYXlvdXRCb3VuZHMgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KGxheWVyQm91bmRzKTsKKyAgICBJ
bnRSZWN0IGFkanVzdGVkQmFja2dyb3VuZENsaXBSZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChi
YWNrZ3JvdW5kQ2xpcFJlY3QpOworICAgIEludFJlY3QgYWRqdXN0ZWRDbGlwUmVjdCA9IHBpeGVs
U25hcHBlZEludFJlY3QoY2xpcFJlY3QpOworICAgIEludFJlY3QgYWRqdXN0ZWRPdXRsaW5lQ2xp
cFJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KG91dGxpbmVDbGlwUmVjdCk7CisKICAgICB3cml0
ZUluZGVudCh0cywgaW5kZW50KTsKIAogICAgIHRzIDw8ICJsYXllciAiOwpAQCAtNjAxLDE1ICs2
MTcsMTUgQEAgc3RhdGljIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIFJlbmRlcgogICAgIGlm
IChiZWhhdmlvciAmIFJlbmRlckFzVGV4dFNob3dBZGRyZXNzZXMpCiAgICAgICAgIHRzIDw8IHN0
YXRpY19jYXN0PGNvbnN0IHZvaWQqPigmbCkgPDwgIiAiOwogICAgICAgCi0gICAgdHMgPDwgbGF5
ZXJCb3VuZHM7CisgICAgdHMgPDwgYWRqdXN0ZWRMYXlvdXRCb3VuZHM7CiAKLSAgICBpZiAoIWxh
eWVyQm91bmRzLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAoIWJhY2tncm91bmRDbGlwUmVjdC5j
b250YWlucyhsYXllckJvdW5kcykpCi0gICAgICAgICAgICB0cyA8PCAiIGJhY2tncm91bmRDbGlw
ICIgPDwgYmFja2dyb3VuZENsaXBSZWN0OwotICAgICAgICBpZiAoIWNsaXBSZWN0LmNvbnRhaW5z
KGxheWVyQm91bmRzKSkKLSAgICAgICAgICAgIHRzIDw8ICIgY2xpcCAiIDw8IGNsaXBSZWN0Owot
ICAgICAgICBpZiAoIW91dGxpbmVDbGlwUmVjdC5jb250YWlucyhsYXllckJvdW5kcykpCi0gICAg
ICAgICAgICB0cyA8PCAiIG91dGxpbmVDbGlwICIgPDwgb3V0bGluZUNsaXBSZWN0OworICAgIGlm
ICghYWRqdXN0ZWRMYXlvdXRCb3VuZHMuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghYWRqdXN0
ZWRCYWNrZ3JvdW5kQ2xpcFJlY3QuY29udGFpbnMoYWRqdXN0ZWRMYXlvdXRCb3VuZHMpKQorICAg
ICAgICAgICAgdHMgPDwgIiBiYWNrZ3JvdW5kQ2xpcCAiIDw8IGFkanVzdGVkQmFja2dyb3VuZENs
aXBSZWN0OworICAgICAgICBpZiAoIWFkanVzdGVkQ2xpcFJlY3QuY29udGFpbnMoYWRqdXN0ZWRM
YXlvdXRCb3VuZHMpKQorICAgICAgICAgICAgdHMgPDwgIiBjbGlwICIgPDwgYWRqdXN0ZWRDbGlw
UmVjdDsKKyAgICAgICAgaWYgKCFhZGp1c3RlZE91dGxpbmVDbGlwUmVjdC5jb250YWlucyhhZGp1
c3RlZExheW91dEJvdW5kcykpCisgICAgICAgICAgICB0cyA8PCAiIG91dGxpbmVDbGlwICIgPDwg
YWRqdXN0ZWRPdXRsaW5lQ2xpcFJlY3Q7CiAgICAgfQogCiAgICAgaWYgKGwucmVuZGVyZXIoKS0+
aGFzT3ZlcmZsb3dDbGlwKCkpIHsKQEAgLTY0NCw3ICs2NjAsNyBAQCBzdGF0aWMgdm9pZCB3cml0
ZShUZXh0U3RyZWFtJiB0cywgUmVuZGVyCiB9CiAKIHN0YXRpYyB2b2lkIHdyaXRlUmVuZGVyTmFt
ZWRGbG93VGhyZWFkcyhUZXh0U3RyZWFtJiB0cywgUmVuZGVyVmlldyogcmVuZGVyVmlldywgY29u
c3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEludFJlY3QmIHBhaW50UmVjdCwgaW50IGluZGVudCwgUmVuZGVyQXNUZXh0QmVoYXZpb3IgYmVo
YXZpb3IpCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBwYWludFJl
Y3QsIGludCBpbmRlbnQsIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJlaGF2aW9yKQogewogICAgIGlm
ICghcmVuZGVyVmlldy0+aGFzUmVuZGVyTmFtZWRGbG93VGhyZWFkcygpKQogICAgICAgICByZXR1
cm47CkBAIC02OTIsMTggKzcwOCwxOCBAQCBzdGF0aWMgdm9pZCB3cml0ZVJlbmRlck5hbWVkRmxv
d1RocmVhZHMoCiB9CiAKIHN0YXRpYyB2b2lkIHdyaXRlTGF5ZXJzKFRleHRTdHJlYW0mIHRzLCBj
b25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogbCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHBhaW50UmVjdCwgaW50IGluZGVudCwgUmVuZGVy
QXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IpCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBM
YXlvdXRSZWN0JiBwYWludFJlY3QsIGludCBpbmRlbnQsIFJlbmRlckFzVGV4dEJlaGF2aW9yIGJl
aGF2aW9yKQogewogICAgIC8vIEZJWE1FOiBBcHBseSBvdmVyZmxvdyB0byB0aGUgcm9vdCBsYXll
ciB0byBub3QgYnJlYWsgZXZlcnkgdGVzdC4gIENvbXBsZXRlIGhhY2suICBTaWdoLgotICAgIElu
dFJlY3QgcGFpbnREaXJ0eVJlY3QocGFpbnRSZWN0KTsKKyAgICBMYXlvdXRSZWN0IHBhaW50RGly
dHlSZWN0KHBhaW50UmVjdCk7CiAgICAgaWYgKHJvb3RMYXllciA9PSBsKSB7Ci0gICAgICAgIHBh
aW50RGlydHlSZWN0LnNldFdpZHRoKG1heChwYWludERpcnR5UmVjdC53aWR0aCgpLCByb290TGF5
ZXItPnJlbmRlckJveCgpLT5tYXhYTGF5b3V0T3ZlcmZsb3coKSkpOwotICAgICAgICBwYWludERp
cnR5UmVjdC5zZXRIZWlnaHQobWF4KHBhaW50RGlydHlSZWN0LmhlaWdodCgpLCByb290TGF5ZXIt
PnJlbmRlckJveCgpLT5tYXhZTGF5b3V0T3ZlcmZsb3coKSkpOwotICAgICAgICBsLT5zZXRTaXpl
KGwtPnNpemUoKS5leHBhbmRlZFRvKGwtPnJlbmRlckJveCgpLT5tYXhMYXlvdXRPdmVyZmxvdygp
KSk7CisgICAgICAgIHBhaW50RGlydHlSZWN0LnNldFdpZHRoKG1heDxMYXlvdXRVbml0PihwYWlu
dERpcnR5UmVjdC53aWR0aCgpLCByb290TGF5ZXItPnJlbmRlckJveCgpLT5tYXhYTGF5b3V0T3Zl
cmZsb3coKSkpOworICAgICAgICBwYWludERpcnR5UmVjdC5zZXRIZWlnaHQobWF4PExheW91dFVu
aXQ+KHBhaW50RGlydHlSZWN0LmhlaWdodCgpLCByb290TGF5ZXItPnJlbmRlckJveCgpLT5tYXhZ
TGF5b3V0T3ZlcmZsb3coKSkpOworICAgICAgICBsLT5zZXRTaXplKGwtPnNpemUoKS5leHBhbmRl
ZFRvKHBpeGVsU25hcHBlZEludFNpemUobC0+cmVuZGVyQm94KCktPm1heExheW91dE92ZXJmbG93
KCksIExheW91dFBvaW50KDAsIDApKSkpOwogICAgIH0KICAgICAKICAgICAvLyBDYWxjdWxhdGUg
dGhlIGNsaXAgcmVjdHMgd2Ugc2hvdWxkIHVzZS4KLSAgICBJbnRSZWN0IGxheWVyQm91bmRzOwor
ICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHM7CiAgICAgQ2xpcFJlY3QgZGFtYWdlUmVjdCwgY2xp
cFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdDsKICAgICBsLT5jYWxjdWxhdGVSZWN0cyhyb290TGF5
ZXIsIDAsIHBhaW50RGlydHlSZWN0LCBsYXllckJvdW5kcywgZGFtYWdlUmVjdCwgY2xpcFJlY3RU
b0FwcGx5LCBvdXRsaW5lUmVjdCwgdHJ1ZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUcmVlQXNUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuaAkocmV2aXNpb24gMTE1OTkxKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFbGVtZW50OworY2xhc3Mg
RnJhY3Rpb25hbExheW91dFBvaW50OwogY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIEZsb2F0U2l6
ZTsKIGNsYXNzIEZyYW1lOwpAQCAtNzAsNiArNzEsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZVJlbmRl
ck9iamVjdChUZXh0U3RyZWFtCiAKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYs
IGNvbnN0IEludFBvaW50Jik7CiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBj
b25zdCBJbnRSZWN0Jik7CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25z
dCBGcmFjdGlvbmFsTGF5b3V0UG9pbnQmKTsKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYsIGNvbnN0IEZsb2F0U2l6ZSYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAkocmV2aXNpb24gMTE1
OTkxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw3ICsxNTcsNyBAQCBSZW5kZXJNYXRoTUxCbG9j
ayogUmVuZGVyTWF0aE1MQmxvY2s6OmNyCiB9CiAKIC8vIEFuIGFyYml0cmFyeSBsYXJnZSB2YWx1
ZSwgbGlrZSBSZW5kZXJCbG9jay5jcHAgQkxPQ0tfTUFYX1dJRFRIIG9yIEZpeGVkVGFibGVMYXlv
dXQuY3BwIFRBQkxFX01BWF9XSURUSC4KLXN0YXRpYyBjb25zdCBMYXlvdXRVbml0IGNMYXJnZUxv
Z2ljYWxXaWR0aCA9IDE1MDAwOworc3RhdGljIGNvbnN0IGludCBjTGFyZ2VMb2dpY2FsV2lkdGgg
PSAxNTAwMDsKIAogdm9pZCBSZW5kZXJNYXRoTUxCbG9jazo6Y29tcHV0ZUNoaWxkcmVuUHJlZmVy
cmVkTG9naWNhbEhlaWdodHMoKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAxMTU5OTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMjYsNyArMzI2LDcgQEAgc3RhdGljIHZvaWQgd3JpdGVTdHlsZShU
ZXh0U3RyZWFtJiB0cywgYwogCiBzdGF0aWMgVGV4dFN0cmVhbSYgd3JpdGVQb3NpdGlvbkFuZFN0
eWxlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCkKIHsKLSAgICB0
cyA8PCAiICIgPDwgY29uc3RfY2FzdDxSZW5kZXJPYmplY3QmPihvYmplY3QpLmFic29sdXRlQ2xp
cHBlZE92ZXJmbG93UmVjdCgpOworICAgIHRzIDw8ICIgIiA8PCBlbmNsb3NpbmdJbnRSZWN0KGNv
bnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Jj4ob2JqZWN0KS5hYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1Jl
Y3QoKSk7CiAgICAgd3JpdGVTdHlsZSh0cywgb2JqZWN0KTsKICAgICByZXR1cm4gdHM7CiB9Cklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMTU5OTEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wNS0wMyAgTGV2aSBXZWludHJhdWIgIDxs
ZXZpd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW21ldGFdIFN3aXRjaCBhd2F5IGZyb20gaW50
ZWdlcnMgcmVwcmVzZW50aW5nIHBpeGVscyBmb3IgbGF5b3V0L2V2ZW50IGhhbmRsaW5nL3JlbmRl
cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAz
MTgKKworICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KKworICAgICAgICAqIGZhc3Qv
c3ViLXBpeGVsOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3N1Yi1waXhlbC9jbGllbnQtd2lkdGgt
aGVpZ2h0LXNuYXBwaW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9zdWIt
cGl4ZWwvY2xpZW50LXdpZHRoLWhlaWdodC1zbmFwcGluZy5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3N1Yi1waXhlbC9sYXlvdXQtYm94ZXMtd2l0aC16b29tLWV4cGVjdGVkLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGZhc3Qvc3ViLXBpeGVsL2xheW91dC1ib3hlcy13aXRoLXpvb20uaHRt
bDogQWRkZWQuCisgICAgICAgICogZmFzdC9zdWItcGl4ZWwvc2l6ZS1vZi1ib3gtd2l0aC16b29t
LWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvc3ViLXBpeGVsL3NpemUtb2Yt
Ym94LXdpdGgtem9vbS5odG1sOiBBZGRlZC4KKwogMjAxMi0wNS0wMyAgQW5kcmVhcyBLbGluZyAg
PGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMTExMzg3KTogQ1NTT00g
cmVwcmVzZW50YXRpb24gb2YgJ2JhY2tncm91bmQtaW1hZ2UnIHZhbHVlcyBzaG91bGQgYmUgQ1NT
UHJpbWl0aXZlVmFsdWUuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9jbGllbnQt
d2lkdGgtaGVpZ2h0LXNuYXBwaW5nLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3N1Yi1waXhlbC9jbGllbnQtd2lkdGgtaGVpZ2h0LXNuYXBwaW5nLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVsL2NsaWVudC13
aWR0aC1oZWlnaHQtc25hcHBpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDYgQEAKK1BBU1MgZGl2LmNsaWVudFdpZHRoIGlzIDExCitQQVNTIGRpdi5jbGllbnRIZWlnaHQg
aXMgMTEKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9jbGllbnQtd2lkdGgtaGVpZ2h0LXNu
YXBwaW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwvY2xp
ZW50LXdpZHRoLWhlaWdodC1zbmFwcGluZy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9zdWItcGl4ZWwvY2xpZW50LXdpZHRoLWhlaWdodC1zbmFwcGluZy5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDIyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYv
L0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9
IlRlc3REaXYiIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDEwLjRweDsgdG9wOiAx
MC40cHg7IHdpZHRoOiAxMC40cHg7IGhlaWdodDogMTAuNHB4OyI+PC9kaXY+Cis8c2NyaXB0Pgor
Cit2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlRlc3REaXYiKTsKKworc2hvdWxk
QmUoJ2Rpdi5jbGllbnRXaWR0aCcsICcxMScpOworc2hvdWxkQmUoJ2Rpdi5jbGllbnRIZWlnaHQn
LCAnMTEnKTsKKworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVsL2xh
eW91dC1ib3hlcy13aXRoLXpvb20tZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3N1Yi1waXhlbC9sYXlvdXQtYm94ZXMtd2l0aC16b29tLWV4cGVjdGVkLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9sYXlvdXQtYm94ZXMt
d2l0aC16b29tLWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzkgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8dGl0bGU+bGF5b3V0IHpvb20gdGVz
dDwvdGl0bGU+CisgICAgPHN0eWxlPiAKKyAgICAgICAgI3Rlc3QgeworICAgICAgICAgICAgd2lk
dGg6IDUwMHB4OworICAgICAgICAgICAgaGVpZ2h0OiAxNTAwcHg7CisgICAgICAgICAgICBiYWNr
Z3JvdW5kOiBuYXZ5OworICAgICAgICAgICAgem9vbTogMC4yNTsKKyAgICAgICAgfQorICAgIDwv
c3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8ZGl2IGlkPSJ0ZXN0Ij48L2Rpdj4KKyAgICA8
ZGl2IGlkPSJjb25zb2xlIj4KKyAgICAgICAgVGhlIGJveCBhYm92ZSBzaG91bGQgYmUgbmF2eSBi
bHVlIHdpdGggbm8gYmFuZGluZyBlZmZlY3RzLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29t
IG9mIDEwMCUgYm90dG9tIGVkZ2Ugb2YgbGFzdCBjaGlsZCBsaW5lcyB1cCB3aXRoIGJvdHRvbSBl
ZGdlIG9mIGNvbnRhaW5lci48YnI+CisgICAgICAgIFBBU1M6IFdpdGggem9vbSBvZiAxMTAlIGJv
dHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0b20gZWRnZSBvZiBjb250
YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpvb20gb2YgMTI1JSBib3R0b20gZWRnZSBv
ZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4K
KyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDEzMyUgYm90dG9tIGVkZ2Ugb2YgbGFzdCBjaGls
ZCBsaW5lcyB1cCB3aXRoIGJvdHRvbSBlZGdlIG9mIGNvbnRhaW5lci48YnI+CisgICAgICAgIFBB
U1M6IFdpdGggem9vbSBvZiAxNTAlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAg
d2l0aCBib3R0b20gZWRnZSBvZiBjb250YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpv
b20gb2YgMTY2JSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9t
IGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDE3NSUg
Ym90dG9tIGVkZ2Ugb2YgbGFzdCBjaGlsZCBsaW5lcyB1cCB3aXRoIGJvdHRvbSBlZGdlIG9mIGNv
bnRhaW5lci48YnI+CisgICAgICAgIFBBU1M6IFdpdGggem9vbSBvZiAyMDAlIGJvdHRvbSBlZGdl
IG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0b20gZWRnZSBvZiBjb250YWluZXIuPGJy
PgorICAgICAgICBQQVNTOiBXaXRoIHpvb20gb2YgMjUwJSBib3R0b20gZWRnZSBvZiBsYXN0IGNo
aWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAg
UEFTUzogV2l0aCB6b29tIG9mIDMwMCUgYm90dG9tIGVkZ2Ugb2YgbGFzdCBjaGlsZCBsaW5lcyB1
cCB3aXRoIGJvdHRvbSBlZGdlIG9mIGNvbnRhaW5lci48YnI+CisgICAgICAgIFBBU1M6IFdpdGgg
em9vbSBvZiA0MDAlIGJvdHRvbSBlZGdlIG9mIGxhc3QgY2hpbGQgbGluZXMgdXAgd2l0aCBib3R0
b20gZWRnZSBvZiBjb250YWluZXIuPGJyPgorICAgICAgICBQQVNTOiBXaXRoIHpvb20gb2YgNTAw
JSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2Yg
Y29udGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDkwJSBib3R0b20gZWRn
ZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxi
cj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDgwJSBib3R0b20gZWRnZSBvZiBsYXN0IGNo
aWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAg
UEFTUzogV2l0aCB6b29tIG9mIDc1JSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVw
IHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6
b29tIG9mIDY2JSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9t
IGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDUwJSBi
b3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29u
dGFpbmVyLjxicj4KKyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDMzJSBib3R0b20gZWRnZSBv
ZiBsYXN0IGNoaWxkIGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4K
KyAgICAgICAgUEFTUzogV2l0aCB6b29tIG9mIDI1JSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxk
IGxpbmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLjxicj4KKzwvZGl2PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwvbGF5b3V0LWJv
eGVzLXdpdGgtem9vbS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvc3ViLXBp
eGVsL2xheW91dC1ib3hlcy13aXRoLXpvb20uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3Qvc3ViLXBpeGVsL2xheW91dC1ib3hlcy13aXRoLXpvb20uaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAg
IDx0aXRsZT5sYXlvdXQgem9vbSB0ZXN0PC90aXRsZT4KKyAgICA8c3R5bGU+IAorICAgICAgICAj
dGVzdCB7CisgICAgICAgICAgICB3aWR0aDogNTAwcHg7CisgICAgICAgICAgICBoZWlnaHQ6IDE1
MDBweDsKKyAgICAgICAgICAgIGJhY2tncm91bmQ6IHNreWJsdWU7CisgICAgICAgIH0KKyAgICAg
ICAgI3Rlc3QgPiBkaXYgeworICAgICAgICAgICAgYmFja2dyb3VuZDogbmF2eTsKKyAgICAgICAg
ICAgIGhlaWdodDogMTVweDsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9k
eT4KKyAgICA8ZGl2IGlkPSJ0ZXN0Ij48L2Rpdj4KKyAgICA8ZGl2IGlkPSJjb25zb2xlIj4KKyAg
ICAgICAgVGhlIGJveCBhYm92ZSBzaG91bGQgYmUgbmF2eSBibHVlIHdpdGggbm8gYmFuZGluZyBl
ZmZlY3RzLjxicj4KKyAgICA8L2Rpdj4KKzwvYm9keT4KKzxzY3JpcHQ+CisgICAgdmFyIHRlc3RF
bGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QnKTsKKyAgICB2YXIgY29uc29s
ZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpOworCisgICAgZnVu
Y3Rpb24gaW5pdCgpCisgICAgeworICAgICAgICB0ZXN0RWxlbWVudC5pbm5lckhUTUwgPSAnJzsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICAgICAgICAgIHRlc3RF
bGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiB0ZXN0KHpvb20pCisgICAgeworICAgICAgICB0ZXN0RWxlbWVudC5z
dHlsZS56b29tID0gem9vbSArICclJzsKKyAgICAgICAgCisgICAgICAgIHZhciBsYXN0RWxlbWVu
dEJvdHRvbSA9IHRlc3RFbGVtZW50Lmxhc3RDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5i
b3R0b207CisgICAgICAgIHZhciBjb250YWluZXJCb3R0b20gPSB0ZXN0RWxlbWVudC5nZXRCb3Vu
ZGluZ0NsaWVudFJlY3QoKS5ib3R0b207CisgICAgICAgIGlmIChNYXRoLmFicyhsYXN0RWxlbWVu
dEJvdHRvbSAtIGNvbnRhaW5lckJvdHRvbSkgPCAwLjAxKQorICAgICAgICAgICAgbG9nKCdQQVNT
OiBXaXRoIHpvb20gb2YgJyArIHpvb20gKyAnJSBib3R0b20gZWRnZSBvZiBsYXN0IGNoaWxkIGxp
bmVzIHVwIHdpdGggYm90dG9tIGVkZ2Ugb2YgY29udGFpbmVyLicpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBsb2coJ0ZBSUw6IFdpdGggem9vbSBvZiAnICsgem9vbSArICclIGJvdHRvbSBl
ZGdlIG9mIGxhc3QgY2hpbGQgYXQgJyArIGxhc3RFbGVtZW50Qm90dG9tICsgJywgY29udGFpbmVy
IGF0ICcgKyBjb250YWluZXJCb3R0b20gKyAnLicpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGxv
ZyhzdHIpCisgICAgeworICAgICAgICBjb25zb2xlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZShzdHIpKTsKKyAgICAgICAgY29uc29sZUVsZW1lbnQuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7CisgICAgfQorCisgICAgaW5pdCgpOwor
ICAgIHRlc3QoMTAwKTsKKyAgICB0ZXN0KDExMCk7CisgICAgdGVzdCgxMjUpOworICAgIHRlc3Qo
MTMzKTsKKyAgICB0ZXN0KDE1MCk7CisgICAgdGVzdCgxNjYpOworICAgIHRlc3QoMTc1KTsKKyAg
ICB0ZXN0KDIwMCk7CisgICAgdGVzdCgyNTApOworICAgIHRlc3QoMzAwKTsKKyAgICB0ZXN0KDQw
MCk7CisgICAgdGVzdCg1MDApOworICAgIHRlc3QoOTApOworICAgIHRlc3QoODApOworICAgIHRl
c3QoNzUpOworICAgIHRlc3QoNjYpOworICAgIHRlc3QoNTApOworICAgIHRlc3QoMzMpOworICAg
IHRlc3QoMjUpOworPC9zY3JpcHQ+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3N1
Yi1waXhlbC9zaXplLW9mLWJveC13aXRoLXpvb20tZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9zaXplLW9mLWJveC13aXRoLXpvb20tZXhwZWN0
ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvc3ViLXBpeGVsL3NpemUt
b2YtYm94LXdpdGgtem9vbS1leHBlY3RlZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPnNpemUgb2Yg
Ym94IHpvb20gdGVzdDwvdGl0bGU+CisgICAgPHN0eWxlPgorICAgICAgICBib2R5IHsKKyAgICAg
ICAgICAgIGJhY2tncm91bmQ6IHNpbHZlcjsKKyAgICAgICAgfQorICAgICAgICAjY29udGFpbmVy
IHsKKyAgICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOworICAgICAgICAgICAgd2lkdGg6IDUw
MHB4OworICAgICAgICAgICAgaGVpZ2h0OiA1MHB4OworICAgICAgICB9CisgICAgICAgICNydWxl
ciA+IGRpdiB7CisgICAgICAgICAgICBmbG9hdDogbGVmdDsKKyAgICAgICAgICAgIHdpZHRoOiA0
OXB4OworICAgICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgYmxhY2s7CisgICAgICAg
ICAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICAgICAgICAgIGhlaWdodDogNTBweDsKKyAgICAg
ICAgfQorICAgICAgICAjdGVzdCB7CisgICAgICAgICAgICBjbGVhcjogbGVmdDsKKyAgICAgICAg
ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICAgICAgICAgIHRvcDogMzBweDsKKyAgICAgICAg
fQorICAgICAgICAjdGVzdCA+IGRpdiB7CisgICAgICAgICAgICBjbGVhcjogbGVmdDsKKyAgICAg
ICAgfQorICAgICAgICAjdGVzdCA+IGRpdiA+IGRpdiB7CisgICAgICAgICAgICBmbG9hdDogbGVm
dDsKKyAgICAgICAgICAgIHdpZHRoOiA1MDBweDsKKyAgICAgICAgICAgIGhlaWdodDogMTBweDsK
KyAgICAgICAgICAgIGJhY2tncm91bmQ6IG5hdnk7CisgICAgICAgIH0KKyAgICAgICAgI2NvbnNv
bGUgeworICAgICAgICAgICAgY2xlYXI6IGxlZnQ7CisgICAgICAgIH0KKyAgICA8L3N0eWxlPgor
PC9oZWFkPgorPGJvZHk+CisgICAgPGRpdiBpZD0iY29udGFpbmVyIj4KKyAgICAgICAgPGRpdiBp
ZD0icnVsZXIiPjwvZGl2PgorICAgICAgICA8ZGl2IGlkPSJ0ZXN0Ij48ZGl2PjwvZGl2PjwvZGl2
PgorICAgIDwvZGl2PgorPC9ib2R5PgorPHNjcmlwdD4KKyAgICB2YXIgdGVzdENvbnRhaW5lciA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0Jyk7CisgICAgdmFyIHJ1bGVyRWxlbWVudCA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdydWxlcicpOworCisgICAgZnVuY3Rpb24gaW5pdCgp
CisgICAgeworICAgICAgICBydWxlckVsZW1lbnQuaW5uZXJIVE1MID0gJyc7CisgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykgeworICAgICAgICAgICAgcnVsZXJFbGVtZW50LmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKyAgICAgICAgICAgIHJ1
bGVyRWxlbWVudC5sYXN0Q2hpbGQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
NTAgKyBpICogNTApKTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgZnVuY3Rpb24gdGVzdCh6
b29tKQorICAgIHsKKyAgICAgICAgdmFyIHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnZGl2Jyk7CisgICAgICAgIHRlc3RFbGVtZW50LnN0eWxlLnpvb20gPSB6b29tICsgJyUn
OworICAgICAgICB0ZXN0RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdkaXYnKSk7CisgICAgICAgIHRlc3RDb250YWluZXIuYXBwZW5kQ2hpbGQodGVzdEVsZW1lbnQp
OworICAgIH0KKworICAgIGluaXQoKTsKKyAgICB0ZXN0KDEwMCk7CisgICAgdGVzdCg2Nik7Cisg
ICAgdGVzdCgzMyk7CisKKzwvc2NyaXB0PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9zdWItcGl4ZWwvc2l6ZS1vZi1ib3gtd2l0aC16b29tLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9zdWItcGl4ZWwvc2l6ZS1vZi1ib3gtd2l0aC16b29tLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3N1Yi1waXhlbC9zaXplLW9mLWJveC13aXRoLXpv
b20uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5zaXplIG9mIGJveCB6b29tIHRlc3Q8L3RpdGxlPgor
ICAgIDxzdHlsZT4KKyAgICAgICAgYm9keSB7CisgICAgICAgICAgICBiYWNrZ3JvdW5kOiBzaWx2
ZXI7CisgICAgICAgIH0KKyAgICAgICAgI2NvbnRhaW5lciB7CisgICAgICAgICAgICBiYWNrZ3Jv
dW5kOiB3aGl0ZTsKKyAgICAgICAgICAgIHdpZHRoOiA1MDBweDsKKyAgICAgICAgICAgIGhlaWdo
dDogNTBweDsKKyAgICAgICAgfQorICAgICAgICAjcnVsZXIgPiBkaXYgeworICAgICAgICAgICAg
ZmxvYXQ6IGxlZnQ7CisgICAgICAgICAgICB3aWR0aDogNDlweDsKKyAgICAgICAgICAgIGJvcmRl
ci1yaWdodDogMXB4IHNvbGlkIGJsYWNrOworICAgICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7
CisgICAgICAgICAgICBoZWlnaHQ6IDUwcHg7CisgICAgICAgIH0KKyAgICAgICAgI3Rlc3Qgewor
ICAgICAgICAgICAgY2xlYXI6IGxlZnQ7CisgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7
CisgICAgICAgICAgICB0b3A6IDMwcHg7CisgICAgICAgIH0KKyAgICAgICAgI3Rlc3QgPiBkaXYg
eworICAgICAgICAgICAgY2xlYXI6IGxlZnQ7CisgICAgICAgIH0KKyAgICAgICAgI3Rlc3QgPiBk
aXYgPiBkaXYgeworICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7CisgICAgICAgICAgICB3aWR0aDog
NXB4OworICAgICAgICAgICAgaGVpZ2h0OiAxMHB4OworICAgICAgICAgICAgYmFja2dyb3VuZDog
bmF2eTsKKyAgICAgICAgfQorICAgICAgICAjY29uc29sZSB7CisgICAgICAgICAgICBjbGVhcjog
bGVmdDsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8ZGl2
IGlkPSJjb250YWluZXIiPgorICAgICAgICA8ZGl2IGlkPSJydWxlciI+PC9kaXY+CisgICAgICAg
IDxkaXYgaWQ9InRlc3QiPjxkaXY+PC9kaXY+PC9kaXY+CisgICAgPC9kaXY+Cis8L2JvZHk+Cis8
c2NyaXB0PgorICAgIHZhciB0ZXN0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3Rlc3QnKTsKKyAgICB2YXIgcnVsZXJFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3J1bGVyJyk7CisKKyAgICBmdW5jdGlvbiBpbml0KCkKKyAgICB7CisgICAgICAgIHJ1bGVyRWxl
bWVudC5pbm5lckhUTUwgPSAnJzsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsr
KSB7CisgICAgICAgICAgICBydWxlckVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnZGl2JykpOworICAgICAgICAgICAgcnVsZXJFbGVtZW50Lmxhc3RDaGlsZC5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSg1MCArIGkgKiA1MCkpOworICAgICAgICB9
CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdCh6b29tKQorICAgIHsKKyAgICAgICAgdmFyIHRl
c3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIHRlc3RF
bGVtZW50LnN0eWxlLnpvb20gPSB6b29tICsgJyUnOworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDsgaSsrKQorICAgICAgICAgICAgdGVzdEVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOworICAgICAgICB0ZXN0Q29udGFpbmVyLmFwcGVuZENo
aWxkKHRlc3RFbGVtZW50KTsKKyAgICB9CisKKyAgICBpbml0KCk7CisgICAgdGVzdCgxMDApOwor
ICAgIHRlc3QoNjYpOworICAgIHRlc3QoMzMpOworCis8L3NjcmlwdD4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141771</attachid>
            <date>2012-05-14 12:45:44 -0700</date>
            <delta_ts>2012-05-14 12:55:10 -0700</delta_ts>
            <desc>Patch. Minor ChangeLog cleanup.</desc>
            <filename>0001-Minor-Cleanup-of-ChangeLog.patch</filename>
            <type>text/plain</type>
            <size>3151</size>
            <attacher name="Michael Brüning">michael.bruning</attacher>
            
              <data encoding="base64">RnJvbSBjYTFjNWIwYWE0Y2E4NzhmYzYyYTRhY2ExOTMwYzcxMDJiOTI0YjYzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/TWljaGFlbD0yMEJyPUMzPUJDbmluZz89IDxt
aWNoYWVsLmJydW5pbmdAbm9raWEuY29tPgpEYXRlOiBNb24sIDE0IE1heSAyMDEyIDIxOjI2OjUw
ICswMjAwClN1YmplY3Q6IFtQQVRDSF0gOk1pbm9yIENsZWFudXAgb2YgQ2hhbmdlTG9nCgotLS0K
IExheW91dFRlc3RzL0NoYW5nZUxvZyB8ICAgNDUgKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMzcg
ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDY5ODdlYTcuLmFhMjc5ODIgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MCBAQAorMjAxMi0wNS0xNCAgTWljaGFlbCBCcsO8bmluZyAgPG1pY2hhZWwuYnJ1bmluZ0Bub2tp
YS5jb20+CisKKyAgICAgICAgTWlub3IgY2xlYW51cCBvZiBDaGFuZ2VMb2cKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzE4CisKKyAgICAgICAgKiBD
aGFuZ2VMb2c6IFJlbW92ZWQgZXhjZXNzIGxpbmVzIGZyb20gZWFybGllciBwYXRjaCBieSBMZXZp
LgorCiAyMDEyLTA1LTE0ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkLiBNYXJrIG9uZSB0ZXN0IGFzIGZhaWxlZCBvbiBjaHJvbWl1bS4KQEAgLTY5
ODcsNyArNjk5NCw3IEBACiAgICAgICAgICogcGxhdGZvcm0vZWZsL2Zhc3QvcmVwbGFjZWQvd2lk
dGgxMDBwZXJjZW50LWNoZWNrYm94LWV4cGVjdGVkLnR4dDoKICAgICAgICAgKiBwbGF0Zm9ybS9l
ZmwvZmFzdC9yZXBsYWNlZC93aWR0aDEwMHBlcmNlbnQtcmFkaW8tZXhwZWN0ZWQudHh0OgogCi0y
MDEyLTA0LTIzICBMZXZpIFdlaW50cmF1YiAgPGxldml3QGNocm9taXVtLm9yZz4KKzIwMTItMDUt
MDMgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFttZXRh
XSBTd2l0Y2ggYXdheSBmcm9tIGludGVnZXJzIHJlcHJlc2VudGluZyBwaXhlbHMgZm9yIGxheW91
dC9ldmVudCBoYW5kbGluZy9yZW5kZXJpbmcKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTYwMzE4CkBAIC03MDAyLDQyICs3MDA5LDYgQEAKICAgICAgICAg
KiBmYXN0L3N1Yi1waXhlbC9sYXlvdXQtYm94ZXMtd2l0aC16b29tLWV4cGVjdGVkLmh0bWw6IEFk
ZGVkLgogICAgICAgICAqIGZhc3Qvc3ViLXBpeGVsL2xheW91dC1ib3hlcy13aXRoLXpvb20uaHRt
bDogQWRkZWQuCiAKLTw8PDw8PDwgLm1pbmUKLTIwMTItMDUtMDMgIExldmkgV2VpbnRyYXViICA8
bGV2aXdAY2hyb21pdW0ub3JnPgotCi0gICAgICAgIFttZXRhXSBTd2l0Y2ggYXdheSBmcm9tIGlu
dGVnZXJzIHJlcHJlc2VudGluZyBwaXhlbHMgZm9yIGxheW91dC9ldmVudCBoYW5kbGluZy9yZW5k
ZXJpbmcKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYw
MzE4Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCi0KLSAgICAgICAgKiBmYXN0
L3N1Yi1waXhlbDogQWRkZWQuCi0gICAgICAgICogZmFzdC9zdWItcGl4ZWwvY2xpZW50LXdpZHRo
LWhlaWdodC1zbmFwcGluZy1leHBlY3RlZC50eHQ6IEFkZGVkLgotICAgICAgICAqIGZhc3Qvc3Vi
LXBpeGVsL2NsaWVudC13aWR0aC1oZWlnaHQtc25hcHBpbmcuaHRtbDogQWRkZWQuCi0gICAgICAg
ICogZmFzdC9zdWItcGl4ZWwvbGF5b3V0LWJveGVzLXdpdGgtem9vbS1leHBlY3RlZC5odG1sOiBB
ZGRlZC4KLSAgICAgICAgKiBmYXN0L3N1Yi1waXhlbC9sYXlvdXQtYm94ZXMtd2l0aC16b29tLmh0
bWw6IEFkZGVkLgotICAgICAgICAqIGZhc3Qvc3ViLXBpeGVsL3NpemUtb2YtYm94LXdpdGgtem9v
bS1leHBlY3RlZC5odG1sOiBBZGRlZC4KLSAgICAgICAgKiBmYXN0L3N1Yi1waXhlbC9zaXplLW9m
LWJveC13aXRoLXpvb20uaHRtbDogQWRkZWQuCi0gICAgICAgICogcGxhdGZvcm0vZWZsL1NraXBw
ZWQ6IFNraXBwaW5nIHN1Yi1waXhlbCB0ZXN0cyB1bnRpbCBwbGF0Zm9ybXMgZW5hYmxlZCB0aGUK
LSAgICAgICAgU1VCUElYRUxfTEFZT1VUIGZlYXR1cmUgZmxhZy4KLSAgICAgICAgKiBwbGF0Zm9y
bS9ndGstd2syL1NraXBwZWQ6IERpdHRvLgotICAgICAgICAqIHBsYXRmb3JtL21hYy1saW9uL1Nr
aXBwZWQ6IERpdHRvLgotICAgICAgICAqIHBsYXRmb3JtL21hYy1zbm93bGVvcGFyZC9Ta2lwcGVk
OiBEaXR0by4KLSAgICAgICAgKiBwbGF0Zm9ybS9tYWMtd2syL1NraXBwZWQ6IERpdHRvLgotICAg
ICAgICAqIHBsYXRmb3JtL21hYy9Ta2lwcGVkOiBEaXR0by4KLSAgICAgICAgKiBwbGF0Zm9ybS9x
dC00LjgvU2tpcHBlZDogRGl0dG8uCi0gICAgICAgICogcGxhdGZvcm0vcXQtNS4wLXdrMS9Ta2lw
cGVkOiBEaXR0by4KLSAgICAgICAgKiBwbGF0Zm9ybS9xdC01LjAtd2syL1NraXBwZWQ6IERpdHRv
LgotICAgICAgICAqIHBsYXRmb3JtL3F0LTUuMC9Ta2lwcGVkOiBEaXR0by4KLSAgICAgICAgKiBw
bGF0Zm9ybS9xdC1hcm0vU2tpcHBlZDogRGl0dG8uCi0gICAgICAgICogcGxhdGZvcm0vcXQtbWFj
L1NraXBwZWQ6IERpdHRvLgotICAgICAgICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6IERpdHRvLgot
ICAgICAgICAqIHBsYXRmb3JtL3dpbi13azIvU2tpcHBlZDogRGl0dG8uCi0gICAgICAgICogcGxh
dGZvcm0vd2luLXhwL1NraXBwZWQ6IERpdHRvLgotICAgICAgICAqIHBsYXRmb3JtL3dpbi9Ta2lw
cGVkOiBEaXR0by4KLSAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWlyby9Ta2lwcGVkOiBEaXR0by4K
LSAgICAgICAgKiBwbGF0Zm9ybS93azIvU2tpcHBlZDogRGl0dG8uCi0KLT09PT09PT0KIDIwMTIt
MDUtMDMgIFJhcGhhZWwgS3VibyBkYSBDb3N0YSAgPHJha3Vjb0B3ZWJraXQub3JnPgogCiAgICAg
ICAgIFtFRkxdIFVucmV2aWV3ZWQsIHJlbW92ZSBleHBlY3RhdGlvbiB3aGljaCB3YXMgZmFpbGlu
Zy4KLS0gCjEuNy41LjQKCg==
</data>
<flag name="commit-queue"
          id="147957"
          type_id="3"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>