<?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>153208</bug_id>
          
          <creation_ts>2016-01-18 10:02:01 -0800</creation_ts>
          <short_desc>Refactor RenderMathMLRow layout functions to avoid using flexbox</short_desc>
          <delta_ts>2016-05-20 06:16:18 -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>MathML</component>
          <version>WebKit 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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>153742</blocked>
    
    <blocked>153991</blocked>
    
    <blocked>155019</blocked>
    
    <blocked>155792</blocked>
    
    <blocked>157943</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alejandro G. Castro">alex</reporter>
          <assigned_to name="Frédéric Wang Nélar">fred.wang</assigned_to>
          <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbarton</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>hyatt</cc>
    
    <cc>jfernandez</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rego</cc>
    
    <cc>rniwa</cc>
    
    <cc>WebkitBugTracker</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1156417</commentid>
    <comment_count>0</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-01-18 10:02:01 -0800</bug_when>
    <thetext>This is the first patch in the set to remove the flexbox dependency of the MathML layout without changing the render tree structure. We have started with the row for no particular reason. This patch will add some new calculation functions that will be used in this and other patches of the set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156419</commentid>
    <comment_count>1</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-01-18 10:14:49 -0800</bug_when>
    <thetext>For more information about the rationale of this change check the following thread in the mailing list:

https://lists.webkit.org/pipermail/webkit-dev/2015-December/027840.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156424</commentid>
    <comment_count>2</comment_count>
      <attachid>269230</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-01-18 10:32:39 -0800</bug_when>
    <thetext>Created attachment 269230
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157655</commentid>
    <comment_count>3</comment_count>
      <attachid>269230</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-01-22 05:01:28 -0800</bug_when>
    <thetext>Comment on attachment 269230
Patch

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

&gt; Source/WebCore/rendering/mathml/RenderMathMLRow.cpp:152
&gt; +            downcast&lt;RenderMathMLOperator&gt;(child)-&gt;stretchTo(stretchHeightAboveBaseline, stretchDepthBelowBaseline);

I don&apos;t understand this. The previous code checked that child was a RenderMathMLBlock and then tried to get the unembellished RenderMathMLOperator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158808</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2016-01-26 07:28:56 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 269230 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=269230&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLRow.cpp:152
&gt; &gt; +            downcast&lt;RenderMathMLOperator&gt;(child)-&gt;stretchTo(stretchHeightAboveBaseline, stretchDepthBelowBaseline);
&gt; 
&gt; I don&apos;t understand this. The previous code checked that child was a
&gt; RenderMathMLBlock and then tried to get the unembellished
&gt; RenderMathMLOperator.

Is the patch ready to review or does this question block it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159676</commentid>
    <comment_count>5</comment_count>
      <attachid>270103</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-01-28 01:27:40 -0800</bug_when>
    <thetext>Created attachment 270103
testcase embellished operator

The change breaks stretching embellished operators, I&apos;m surprised that it is not tested yet. If we want to preserve the current behavior, we probably want something like

if (is&lt;RenderMathMLBlock&gt;(child)) {
  if (auto renderOperator = downcast&lt;RenderMathMLBlock&gt;(child)-&gt;unembellishedOperator())
    renderOperator-&gt;stretchTo(stretchHeightAboveBaseline, stretchDepthBelowBaseline);
}

But actually, we really only want to stretch operators that are &quot;stretchy&quot; and have direction &quot;vertical&quot;, so an optimization is:

if (is&lt;RenderMathMLBlock&gt;(child)) {
  auto renderOperator = downcast&lt;RenderMathMLBlock&gt;(child)-&gt;unembellishedOperator();
  if (renderOperator &amp;&amp; renderOperator-&gt;hasOperatorFlag(MathMLOperatorDictionary::Stretchy) &amp;&amp; renderOperator-&gt;isVertical())
    renderOperator-&gt;stretchTo(stretchHeightAboveBaseline, stretchDepthBelowBaseline);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159710</commentid>
    <comment_count>6</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-01-28 07:22:20 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created attachment 270103 [details]
&gt; testcase embellished operator
&gt; 
&gt; The change breaks stretching embellished operators, I&apos;m surprised that it is
&gt; not tested yet. If we want to preserve the current behavior, we probably
&gt; want something like
&gt; 
&gt; if (is&lt;RenderMathMLBlock&gt;(child)) {
&gt;   if (auto renderOperator =
&gt; downcast&lt;RenderMathMLBlock&gt;(child)-&gt;unembellishedOperator())
&gt;     renderOperator-&gt;stretchTo(stretchHeightAboveBaseline,
&gt; stretchDepthBelowBaseline);
&gt; }
&gt; 
&gt; But actually, we really only want to stretch operators that are &quot;stretchy&quot;
&gt; and have direction &quot;vertical&quot;, so an optimization is:
&gt; 
&gt; if (is&lt;RenderMathMLBlock&gt;(child)) {
&gt;   auto renderOperator =
&gt; downcast&lt;RenderMathMLBlock&gt;(child)-&gt;unembellishedOperator();
&gt;   if (renderOperator &amp;&amp;
&gt; renderOperator-&gt;hasOperatorFlag(MathMLOperatorDictionary::Stretchy) &amp;&amp;
&gt; renderOperator-&gt;isVertical())
&gt;     renderOperator-&gt;stretchTo(stretchHeightAboveBaseline,
&gt; stretchDepthBelowBaseline);
&gt; }

Thanks for the comment, I agree with you, I&apos;ll replace the code and upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159713</commentid>
    <comment_count>7</comment_count>
      <attachid>269230</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2016-01-28 07:26:51 -0800</bug_when>
    <thetext>Comment on attachment 269230
Patch

Removing patch from review queue for the moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160083</commentid>
    <comment_count>8</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-01-29 04:06:49 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created attachment 270103 [details]
&gt; testcase embellished operator
&gt; 
&gt; The change breaks stretching embellished operators, I&apos;m surprised that it is
&gt; not tested yet. If we want to preserve the current behavior, we probably
&gt; want something like
&gt; 
&gt; if (is&lt;RenderMathMLBlock&gt;(child)) {
&gt;   if (auto renderOperator =
&gt; downcast&lt;RenderMathMLBlock&gt;(child)-&gt;unembellishedOperator())
&gt;     renderOperator-&gt;stretchTo(stretchHeightAboveBaseline,
&gt; stretchDepthBelowBaseline);
&gt; }
&gt; 
&gt; But actually, we really only want to stretch operators that are &quot;stretchy&quot;
&gt; and have direction &quot;vertical&quot;, so an optimization is:
&gt; 
&gt; if (is&lt;RenderMathMLBlock&gt;(child)) {
&gt;   auto renderOperator =
&gt; downcast&lt;RenderMathMLBlock&gt;(child)-&gt;unembellishedOperator();
&gt;   if (renderOperator &amp;&amp;
&gt; renderOperator-&gt;hasOperatorFlag(MathMLOperatorDictionary::Stretchy) &amp;&amp;
&gt; renderOperator-&gt;isVertical())
&gt;     renderOperator-&gt;stretchTo(stretchHeightAboveBaseline,
&gt; stretchDepthBelowBaseline);
&gt; }

Just tested the change does not work. The rationale is correct and without the anonymous and the flexbox we should be able to get the code to look like you say but not with this first patch I&apos;m afraid, that is what makes all this tree structure so complex. I&apos;ve used your initial proposal and changed the patch, I&apos;ll upload again a rebased version.

Thanks for the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160087</commentid>
    <comment_count>9</comment_count>
      <attachid>270200</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-01-29 04:39:47 -0800</bug_when>
    <thetext>Created attachment 270200
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162846</commentid>
    <comment_count>10</comment_count>
      <attachid>270850</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-02-08 01:54:43 -0800</bug_when>
    <thetext>Created attachment 270850
testcase Arabic characters

At the moment, the MathML code does not make any distinction between logical and ink vertical metrics and so the user agent stylesheet contains the rule &quot;math { -webkit-line-box-contain: glyphs replaced; }&quot; to force the use of ink bounds. This seems to work well in general but fails for Arabic characters. At least on WebKitGTK the computed height is 0 for me and so in the attached testcase, the background is not drawn at all for Arabic characters.

With the refactoring done in this bug, the glyph height is really used to determine the logical height of MathML elements and so Arabic characters do not appear at all. I&apos;m not sure that&apos;s something we should care for now, but we should think about that in the future. See bug 151592 for more discussions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163254</commentid>
    <comment_count>11</comment_count>
      <attachid>270200</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-02-09 12:08:14 -0800</bug_when>
    <thetext>Comment on attachment 270200
Patch

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

&gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp:333
&gt; +

there is an extra space here

&gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp:340
&gt; +

here too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163267</commentid>
    <comment_count>12</comment_count>
      <attachid>270200</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-02-09 13:15:21 -0800</bug_when>
    <thetext>Comment on attachment 270200
Patch

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

&gt; Source/WebCore/rendering/mathml/RenderMathMLRow.cpp:165
&gt; +        LayoutUnit ascent = WebCore::marginBoxAscentForChild(*child);

Is the WebCore:: prefix really needed? Javier &amp; Rego removed it in a follow-up commit.

&gt; Source/WebCore/rendering/mathml/RenderMathMLRow.cpp:190
&gt; +        LayoutUnit ascent = WebCore::marginBoxAscentForChild(*child);

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164090</commentid>
    <comment_count>13</comment_count>
      <attachid>271160</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-02-12 03:29:53 -0800</bug_when>
    <thetext>Created attachment 271160
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164091</commentid>
    <comment_count>14</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-02-12 03:30:41 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Comment on attachment 270200 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=270200&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLRow.cpp:165
&gt; &gt; +        LayoutUnit ascent = WebCore::marginBoxAscentForChild(*child);
&gt; 
&gt; Is the WebCore:: prefix really needed? Javier &amp; Rego removed it in a
&gt; follow-up commit.
&gt; 
&gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLRow.cpp:190
&gt; &gt; +        LayoutUnit ascent = WebCore::marginBoxAscentForChild(*child);
&gt; 
&gt; ditto

Thanks for the comments, I&apos;ve just uploaded a new version with your proposals.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164094</commentid>
    <comment_count>15</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-02-12 03:47:48 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLRow.cpp:190
&gt; &gt; &gt; +        LayoutUnit ascent = WebCore::marginBoxAscentForChild(*child);
&gt; &gt; 
&gt; &gt; ditto
&gt; 
&gt; Thanks for the comments, I&apos;ve just uploaded a new version with your
&gt; proposals.

I was wrong, I did not test your proposal properly, we need them because we want to use the local version and not the one in flexbox, which is private. I&apos;ll review it properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164097</commentid>
    <comment_count>16</comment_count>
      <attachid>271162</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-02-12 03:57:06 -0800</bug_when>
    <thetext>Created attachment 271162
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164168</commentid>
    <comment_count>17</comment_count>
      <attachid>271162</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2016-02-12 09:17:51 -0800</bug_when>
    <thetext>Comment on attachment 271162
Patch

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

Looks good. Before landing, do you mind having people more familiar with flex box to double-check the bits from flex box.

&gt; Source/WebCore/rendering/mathml/RenderMathMLRow.cpp:105
&gt; +    // FIXME: What about the RenderBlocks?

If this FIXME is no longer relevant, it should probably just be removed.

&gt; Source/WebCore/rendering/mathml/RenderMathMLRow.cpp:187
&gt; +        centerBlockOffset = - centerBlockOffset;

Nit: = - should be =-</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164260</commentid>
    <comment_count>18</comment_count>
      <attachid>271162</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-02-12 12:22:47 -0800</bug_when>
    <thetext>Comment on attachment 271162
Patch

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

&gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp:356
&gt; +        return style().writingMode() == TopToBottomWritingMode || style().writingMode() == LeftToRightWritingMode;

I do not understand this part. Why does the the writing mode solely decides the flow direction for vertical flow?

&gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp:400
&gt; +}

Similar code exists for borders, margins and paddings in RenderStyle and RenderBox. I wish we can have one place which does this confusing calculations.

&gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp:415
&gt; +    return marginTop();

If you add the following function to RenderBox: const LayoutBoxExtent&amp; margins() const { return m_marginBox; }

This function can be written like this:

return child.margins().before(transformedWritingMode());

&gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp:431
&gt; +    return marginBottom();

If you add the following function to RenderBox: const LayoutBoxExtent&amp; margins() const { return m_marginBox; }

This function can be written like this:

return child.margins().after(transformedWritingMode());

&gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp:449
&gt; +    return TopToBottomWritingMode;

I do not understand this part. Why does the text direction affect the writing mode transformation for horizontal flow?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164717</commentid>
    <comment_count>19</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-02-15 03:46:15 -0800</bug_when>
    <thetext>
Thanks for the review, I&apos;m adding hyatt to check all the rationale of the patches to check if it is ok to proceed.

FYI main idea with these initial set of patches is to remove the flexbox dependency, which means it is not a very clean code until we refactor without the flexbox. The other option would be a huge patch with all the refactors and rebases of the dump render tree tests. It seemed to us this iterative plan makes it easy to divide the work and smaller patches to review, because the amount of code controlling the old flexbox logic added in RenderMathMLBlock is not big and very well identified to try to remove it in the future.

(In reply to comment #17)
&gt; Comment on attachment 271162 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=271162&amp;action=review
&gt; 
&gt; Looks good. Before landing, do you mind having people more familiar with
&gt; flex box to double-check the bits from flex box.
&gt; 

Added hyatt to check if he can validate the code. The only part from flexbox are the functions added to RenderMathMLBlock, we tried to minimize that part.

&gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLRow.cpp:105
&gt; &gt; +    // FIXME: What about the RenderBlocks?
&gt; 
&gt; If this FIXME is no longer relevant, it should probably just be removed.
&gt; 

Yep, I&apos;ll do it.

&gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLRow.cpp:187
&gt; &gt; +        centerBlockOffset = - centerBlockOffset;
&gt; 
&gt; Nit: = - should be =-

Yep.

Thanks again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164724</commentid>
    <comment_count>20</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2016-02-15 04:31:39 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; Comment on attachment 271162 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=271162&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp:356
&gt; &gt; +        return style().writingMode() == TopToBottomWritingMode || style().writingMode() == LeftToRightWritingMode;
&gt; 
&gt; I do not understand this part. Why does the the writing mode solely decides
&gt; the flow direction for vertical flow?
&gt; 

Good point, we are basically duplicating what flexbox is currently doing for these cases. If I understand correctly the reason it just uses the writing mode for the column flow is because it tries to get the inline base direction, to get the start and end distances, but I&apos;m not an expert on that code so take my comment with a grain of salt, some references:

https://www.w3.org/TR/css-flexbox-1/#valdef-flex-direction-column
https://drafts.csswg.org/css-writing-modes-3/#text-flow

&gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp:400
&gt; &gt; +}
&gt; 
&gt; Similar code exists for borders, margins and paddings in RenderStyle and
&gt; RenderBox. I wish we can have one place which does this confusing
&gt; calculations.
&gt; 

Great point, I&apos;ll try to check if we can use those.

&gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp:415
&gt; &gt; +    return marginTop();
&gt; 
&gt; If you add the following function to RenderBox: const LayoutBoxExtent&amp;
&gt; margins() const { return m_marginBox; }
&gt; 
&gt; This function can be written like this:
&gt; 
&gt; return child.margins().before(transformedWritingMode());
&gt; 

I&apos;ll do it thanks.

&gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp:431
&gt; &gt; +    return marginBottom();
&gt; 
&gt; If you add the following function to RenderBox: const LayoutBoxExtent&amp;
&gt; margins() const { return m_marginBox; }
&gt; 
&gt; This function can be written like this:
&gt; 
&gt; return child.margins().after(transformedWritingMode());
&gt; 
&gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp:449
&gt; &gt; +    return TopToBottomWritingMode;
&gt; 
&gt; I do not understand this part. Why does the text direction affect the
&gt; writing mode transformation for horizontal flow?

In this case we are also doing what flexbox is currently doing, we basically want to keep it like it was until we can replace the code with more specific code for MathML. Anyway, I&apos;ll try to check if we can reduce the amount of code using your suggestions and upload the patch.

Thanks again :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169782</commentid>
    <comment_count>21</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-03-02 00:50:19 -0800</bug_when>
    <thetext>I&apos;m going to upload a new patch with Martin&apos;s nits addressed.

Regarding Said&apos;s feedback, here are my two cents:

&gt; I do not understand this part. Why does the the writing mode solely decides the flow direction for vertical flow?
&gt; I do not understand this part. Why does the text direction affect the writing mode transformation for horizontal flow?

As Alejandro said, we are basically duplicating flexbox behavior as our idea was to do a smooth transition before a complete refactoring. One of the issue with the current MathML code is that on the one hand flexbox rules are more complex than what is really needed for MathML and on the other hand MathML layout does not always follow layout invariants. So it&apos;s often hard to understand the actual rendering behavior and thus to work on MathML &amp; review patches. We plan to submit our simplification in future patches so that all will be much more understandable (in particular, only horizontal RTL and LTR will matter). For now, we have to trust that the flexbox implementation is correct...

&gt; Similar code exists for borders, margins and paddings in RenderStyle and RenderBox. I wish we can have one place which does this confusing calculations.

Yes, that&apos;s bad. However, it&apos;s now exactly the same code (it uses &quot;flow&quot; functions) so I&apos;m not sure they would produce the same behavior as flexbox. I suspect we may be able to do that at the current status of our MathML development branch, since we do not care about flow stuff anymore.

&gt; If you add the following function to RenderBox: const LayoutBoxExtent&amp; margins() const { return m_marginBox; }
&gt; If you add the following function to RenderBox: const LayoutBoxExtent&amp; margins() const { return m_marginBox; }

We can certainly do that to simplify the code. However, that would be at the price of adding some code to RenderBox/RenderStyle for MathML&apos;s own sake and someone already complained on the webkit-dev mailing list that we should avoid that as much as possible. Again, the plan is to remove/rewrite these functions in the future so I guess it&apos;s acceptable to have this temporary functions, given that we will significantly reduce the code size in follow-up patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169784</commentid>
    <comment_count>22</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-03-02 00:51:37 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; it&apos;s now exactly

*not*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170174</commentid>
    <comment_count>23</comment_count>
      <attachid>272750</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-03-03 03:17:27 -0800</bug_when>
    <thetext>Created attachment 272750
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170175</commentid>
    <comment_count>24</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-03-03 03:19:05 -0800</bug_when>
    <thetext>I uploaded a new version of the patch which includes future refactoring/simplification/cleanup from the MathMLLayout branch. The advantage is that we no longer need to add all these flexbox-like functions that are unrelated to math layout (although I suspect they will be needed later in the other bugs opened by Alex). The disadvantages are that:

1) There are (maybe?) more changes to review in one go.
2) This needs some minor test adjustments. More specifically, the one stretching selection of horizontal stretchy operators has rendering changes that are not important. And I disabled one fraction reftest for now, which has a small 1px size difference (for some reason it only pass after the complete refactoring of RenderMathMLFraction from the MathMLLayout branch).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1173643</commentid>
    <comment_count>25</comment_count>
      <attachid>273700</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-03-11 01:22:38 -0800</bug_when>
    <thetext>Created attachment 273700
Patch

I&apos;m uploading updated version of the MathML refactoring patches to solve conflicts after bug 154388 and bug 155005 ; and to do other minor changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179401</commentid>
    <comment_count>26</comment_count>
      <attachid>275283</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-03-31 08:16:40 -0700</bug_when>
    <thetext>Created attachment 275283
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179856</commentid>
    <comment_count>27</comment_count>
      <attachid>275283</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2016-04-01 08:44:06 -0700</bug_when>
    <thetext>Comment on attachment 275283
Patch

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

Looks good with a couple nits.

&gt; Source/WebCore/ChangeLog:17
&gt; +        This is the first patch in the set to remove the flexbox
&gt; +        dependency of the MathML layout without changing the render tree
&gt; +        structure. We have done some temporary changes to allow overriding of
&gt; +        layoutBlock and to implement paintChildren, but this will be remove in a
&gt; +        follow-up patch. We also implement firstLineBaseline,
&gt; +        computePreferredLogicalWidths and layoutBlock of RenderMathMLRow without
&gt; +        using any flexbox functions. We adjust a bit the MathML CSS to take into
&gt; +        account these changes. Finally, we delete the unused helper function to
&gt; +        create anonymous RenderMathMLRow.
&gt; +

Perhaps update this to reflect the most recent version of this patch?

&gt; Source/WebCore/rendering/mathml/RenderMathMLRow.cpp:115
&gt; +    LayoutUnit horizontalOffset = borderAndPaddingStart();

Let&apos;s move this declarations down to right before they are first used (line 142).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180298</commentid>
    <comment_count>28</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-04-04 01:25:41 -0700</bug_when>
    <thetext>Committed r198998: &lt;http://trac.webkit.org/changeset/198998&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>269230</attachid>
            <date>2016-01-18 10:32:39 -0800</date>
            <delta_ts>2016-01-29 04:39:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153208-20160118193209.patch</filename>
            <type>text/plain</type>
            <size>23100</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk1MTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjM1NDdmOGE2YmE0MWM3
YWUzYzJjZWE1MjhiOThiYjY1M2I0NGUyYS4uMmE1NDVlZWEzMTg3YWRhNDM3ZTgzZGQzMGEzM2Yw
M2Q5MmVkNzkyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDE2LTAxLTE4ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFJlZmFjdG9yIFJl
bmRlck1hdGhNTFJvdyBsYXlvdXQgZnVuY3Rpb25zIHRvIGF2b2lkIHVzaW5nIGZsZXhib3gKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzIwOAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgdGhl
IGZpcnN0IHBhdGNoIGluIHRoZSBzZXQgdG8gcmVtb3ZlIHRoZSBmbGV4Ym94CisgICAgICAgIGRl
cGVuZGVuY3kgb2YgdGhlIE1hdGhNTCBsYXlvdXQgd2l0aG91dCBjaGFuZ2luZyB0aGUgcmVuZGVy
IHRyZWUKKyAgICAgICAgc3RydWN0dXJlLiBXZSBoYXZlIGFkZGVkIHNvbWUgZnVuY3Rpb25zIGZv
IHRoZSBSZW5kZXJNYXRoTUxCbG9jaworICAgICAgICB1c2VkIGluIHRoZSBuZXh0IHBhdGNoZXMs
IGFsc28gd2UgaGF2ZSBhbGxvd2VkIHRoZSBvdmVycmlkZSBvZiB0aGUKKyAgICAgICAgbGF5b3V0
QmxvY2sgZnVuY3Rpb24gaW4gdGhlIEZsZXhCb3ggY2xhc3MgdGhhdCB3ZSB3aWxsIHJlbW92ZSBp
bgorICAgICAgICB0aGUgbGFzdCBwYXRjaC4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5oOiBBbGxvdyBvdmVycmlkZXIgb2YgdGhlCisgICAgICAgIExheW91dEJsb2Nr
IGZvciB0aGUgbW9tZW50LgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
QmxvY2suY3BwOiBBZGRlZCBmdW5jdGlvbnMgdG8KKyAgICAgICAgY2FsY3VsYXRlIHNvbWUgZGlz
dGFuY2VzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6OmNvbXB1dGVNYWlu
QXhpc0V4dGVudEZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJsb2Nr
OjpoYXNPcnRob2dvbmFsRmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9j
azo6bWFpbkF4aXNCb3JkZXJBbmRQYWRkaW5nRXh0ZW50Rm9yQ2hpbGQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6OnByZWZlcnJlZE1haW5BeGlzQ29udGVudEV4dGVudEZv
ckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJsb2NrOjppc0xlZnRUb1Jp
Z2h0Rmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6Zmxvd0F3YXJl
Qm9yZGVyU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6OmZsb3dB
d2FyZUJvcmRlckVuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6Zmxv
d0F3YXJlUGFkZGluZ1N0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJsb2Nr
OjpmbG93QXdhcmVQYWRkaW5nRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJs
b2NrOjpmbG93QXdhcmVNYXJnaW5TdGFydEZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck1hdGhNTEJsb2NrOjpmbG93QXdhcmVNYXJnaW5FbmRGb3JDaGlsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6Zmxvd0F3YXJlTWFyZ2luQmVmb3JlRm9yQ2hpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6OmZsb3dBd2FyZU1hcmdpbkFm
dGVyRm9yQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6OnRyYW5z
Zm9ybWVkV3JpdGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6
OmlzQ29sdW1uRmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxC
bG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcDog
UmVpbXBsZW1lbnQgTGF5b3V0QmxvY2sKKyAgICAgICAgd2l0aG91dCB1c2luZyB0aGUgZmxleGJv
eCBsYXlvdXQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb3c6OmNyZWF0ZUFub255
bW91c1dpdGhQYXJlbnRSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjptYXJnaW5Cb3hBc2Nl
bnRGb3JDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb3c6OmZpcnN0TGlu
ZUJhc2VsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvdzo6cHJlcGFyZUNo
aWxkRm9yUG9zaXRpb25lZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxS
b3c6OmNvbXB1dGVMaW5lVmVydGljYWxTdHJldGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck1hdGhNTFJvdzo6bGF5b3V0Um93SXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0
aE1MUm93OjpsYXlvdXRCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb3c6
OnBhaW50Q2hpbGRyZW4pOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
Um93Lmg6CisKIDIwMTYtMDEtMTcgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5j
b20+CiAKICAgICAgICAgTW9yZSBkaXNwbGF5bGlzdCB0ZXN0cywgYW5kIG1pbm9yIGNsZWFudXAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgKaW5kZXggOWJh
ZTMxNmFhZjM3ZDBlZDI0YTEwMzI2MTBiOWY3ZjcwMTdmMzVlMC4uOWZkOTJjMmM1ZWEwOGVkMmI4
ZDMyZjEwZTAyZTI1OTU0YTQ4MDdiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZsZXhpYmxlQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZsZXhpYmxlQm94LmgKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCBib29sIGF2b2lkc0Zsb2F0cygpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIHRydWU7
IH0KICAgICB2aXJ0dWFsIGJvb2wgY2FuRHJvcEFub255bW91c0Jsb2NrQ2hpbGQoKSBjb25zdCBv
dmVycmlkZSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRC
bG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQg
PSAwKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCBy
ZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgb3ZlcnJp
ZGU7CiAKICAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9v
bCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRp
b25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIE9wdGlvbmFs
PGludD4gZmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAKaW5kZXgg
MWY0MjZiODRlOGZjOGZkOWQ3ODY2MDdhNzhiMmVmMmYxZGU3MDZiNC4uZjE4MWQwYTRjZDY4MDI2
MjE3OWU2ODU0YTk3MzQ3NjZhMGUyNTdhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAKQEAgLTMwNiw2ICszMDYsMTU2
IEBAIE9wdGlvbmFsPGludD4gUmVuZGVyTWF0aE1MVGFibGU6OmZpcnN0TGluZUJhc2VsaW5lKCkg
Y29uc3QKICAgICByZXR1cm4gKGxvZ2ljYWxIZWlnaHQoKSArIHN0eWxlKCkuZm9udE1ldHJpY3Mo
KS54SGVpZ2h0KCkpIC8gMjsKIH0KIAorT3B0aW9uYWw8TGF5b3V0VW5pdD4gUmVuZGVyTWF0aE1M
QmxvY2s6OmNvbXB1dGVNYWluQXhpc0V4dGVudEZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQsIFNp
emVUeXBlIHNpemVUeXBlLCBjb25zdCBMZW5ndGgmIHNpemUpCit7CisgICAgaWYgKGlzQ29sdW1u
RmxvdygpKSB7CisgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgZm9yICJhdXRvIiBo
ZXJlIC0gY29tcHV0ZUNvbnRlbnRMb2dpY2FsSGVpZ2h0IHdpbGwganVzdCByZXR1cm4gTnVsbG9w
dCBmb3IgdGhhdCBjYXNlIGFueXdheS4KKyAgICAgICAgaWYgKHNpemUuaXNJbnRyaW5zaWMoKSkK
KyAgICAgICAgICAgIGNoaWxkLmxheW91dElmTmVlZGVkKCk7CisgICAgICAgIHJldHVybiBjaGls
ZC5jb21wdXRlQ29udGVudExvZ2ljYWxIZWlnaHQoc2l6ZVR5cGUsIHNpemUsIGNoaWxkLmxvZ2lj
YWxIZWlnaHQoKSAtIGNoaWxkLmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkpOworICAg
IH0KKyAgICAvLyBGSVhNRTogRmlndXJlIG91dCBob3cgdGhpcyBzaG91bGQgd29yayBmb3IgcmVn
aW9ucyBhbmQgcGFzcyBpbiB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzLgorICAgIFJlbmRlclJlZ2lv
biogcmVnaW9uID0gbnVsbHB0cjsKKyAgICByZXR1cm4gY2hpbGQuY29tcHV0ZUxvZ2ljYWxXaWR0
aEluUmVnaW9uVXNpbmcoc2l6ZVR5cGUsIHNpemUsIGNvbnRlbnRMb2dpY2FsV2lkdGgoKSwgdGhp
cywgcmVnaW9uKSAtIGNoaWxkLmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKTsKK30KKwor
Ym9vbCBSZW5kZXJNYXRoTUxCbG9jazo6aGFzT3J0aG9nb25hbEZsb3coUmVuZGVyQm94JiBjaGls
ZCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSWYgdGhlIGNoaWxkIGlzIGEgZmxleGJveCwgdGhl
biB3ZSBuZWVkIHRvIGNoZWNrIGlzSG9yaXpvbnRhbEZsb3cuCisgICAgcmV0dXJuIGlzSG9yaXpv
bnRhbEZsb3coKSAhPSBjaGlsZC5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOworfQorCitMYXlv
dXRVbml0IFJlbmRlck1hdGhNTEJsb2NrOjptYWluQXhpc0JvcmRlckFuZFBhZGRpbmdFeHRlbnRG
b3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAoreworICAgIHJldHVybiBpc0hvcml6b250
YWxGbG93KCkgPyBjaGlsZC5ob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpIDogY2hp
bGQudmVydGljYWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCk7Cit9CisKKworTGF5b3V0VW5pdCBS
ZW5kZXJNYXRoTUxCbG9jazo6cHJlZmVycmVkTWFpbkF4aXNDb250ZW50RXh0ZW50Rm9yQ2hpbGQo
UmVuZGVyQm94JiBjaGlsZCwgYm9vbCBoYXNJbmZpbml0ZUxpbmVMZW5ndGgpCit7CisgICAgYm9v
bCBoYXNPdmVycmlkZVNpemUgPSBjaGlsZC5oYXNPdmVycmlkZUxvZ2ljYWxDb250ZW50V2lkdGgo
KSB8fCBjaGlsZC5oYXNPdmVycmlkZUxvZ2ljYWxDb250ZW50SGVpZ2h0KCk7CisgICAgaWYgKGhh
c092ZXJyaWRlU2l6ZSkKKyAgICAgICAgY2hpbGQuY2xlYXJPdmVycmlkZVNpemUoKTsKKworCisg
ICAgTGVuZ3RoIGNoaWxkTWFpbkV4dGVudCA9IGlzSG9yaXpvbnRhbEZsb3coKSA/IGNoaWxkLnN0
eWxlKCkud2lkdGgoKSA6IGNoaWxkLnN0eWxlKCkuaGVpZ2h0KCk7CisgICAgaWYgKGNoaWxkTWFp
bkV4dGVudC5pc0F1dG8oKSB8fCAoY2hpbGRNYWluRXh0ZW50LmlzRml4ZWQoKSAmJiAhY2hpbGRN
YWluRXh0ZW50LnZhbHVlKCkgJiYgaGFzSW5maW5pdGVMaW5lTGVuZ3RoKSkgeworICAgICAgICBp
ZiAoaGFzT3J0aG9nb25hbEZsb3coY2hpbGQpKSB7CisgICAgICAgICAgICBpZiAoaGFzT3ZlcnJp
ZGVTaXplKQorICAgICAgICAgICAgICAgIGNoaWxkLnNldENoaWxkTmVlZHNMYXlvdXQoTWFya09u
bHlUaGlzKTsKKyAgICAgICAgICAgIGNoaWxkLmxheW91dElmTmVlZGVkKCk7CisgICAgICAgIH0K
KyAgICAgICAgTGF5b3V0VW5pdCBtYWluQXhpc0V4dGVudCA9IGhhc09ydGhvZ29uYWxGbG93KGNo
aWxkKSA/IGNoaWxkLmxvZ2ljYWxIZWlnaHQoKSA6IGNoaWxkLm1heFByZWZlcnJlZExvZ2ljYWxX
aWR0aCgpOworICAgICAgICBBU1NFUlQobWFpbkF4aXNFeHRlbnQgLSBtYWluQXhpc0JvcmRlckFu
ZFBhZGRpbmdFeHRlbnRGb3JDaGlsZChjaGlsZCkgPj0gMCk7CisgICAgICAgIHJldHVybiBtYWlu
QXhpc0V4dGVudCAtIG1haW5BeGlzQm9yZGVyQW5kUGFkZGluZ0V4dGVudEZvckNoaWxkKGNoaWxk
KTsKKyAgICB9CisgICAgcmV0dXJuIGNvbXB1dGVNYWluQXhpc0V4dGVudEZvckNoaWxkKGNoaWxk
LCBNYWluT3JQcmVmZXJyZWRTaXplLCBjaGlsZE1haW5FeHRlbnQpLnZhbHVlT3IoMCk7Cit9CisK
K2Jvb2wgUmVuZGVyTWF0aE1MQmxvY2s6OmlzTGVmdFRvUmlnaHRGbG93KCkgY29uc3QKK3sKKyAg
ICBpZiAoaXNDb2x1bW5GbG93KCkpCisgICAgICAgIHJldHVybiBzdHlsZSgpLndyaXRpbmdNb2Rl
KCkgPT0gVG9wVG9Cb3R0b21Xcml0aW5nTW9kZSB8fCBzdHlsZSgpLndyaXRpbmdNb2RlKCkgPT0g
TGVmdFRvUmlnaHRXcml0aW5nTW9kZTsKKyAgICByZXR1cm4gc3R5bGUoKS5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTWF0aE1MQmxvY2s6OmZsb3dBd2Fy
ZUJvcmRlclN0YXJ0KCkgY29uc3QKK3sKKyAgICBpZiAoaXNIb3Jpem9udGFsRmxvdygpKQorICAg
ICAgICByZXR1cm4gaXNMZWZ0VG9SaWdodEZsb3coKSA/IGJvcmRlckxlZnQoKSA6IGJvcmRlclJp
Z2h0KCk7CisgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHRGbG93KCkgPyBib3JkZXJUb3AoKSA6IGJv
cmRlckJvdHRvbSgpOworfQorCitMYXlvdXRVbml0IFJlbmRlck1hdGhNTEJsb2NrOjpmbG93QXdh
cmVCb3JkZXJFbmQoKSBjb25zdAoreworICAgIGlmIChpc0hvcml6b250YWxGbG93KCkpCisgICAg
ICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RmxvdygpID8gYm9yZGVyUmlnaHQoKSA6IGJvcmRlckxl
ZnQoKTsKKyAgICByZXR1cm4gaXNMZWZ0VG9SaWdodEZsb3coKSA/IGJvcmRlckJvdHRvbSgpIDog
Ym9yZGVyVG9wKCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTWF0aE1MQmxvY2s6OmZsb3dBd2Fy
ZVBhZGRpbmdTdGFydCgpIGNvbnN0Cit7CisgICAgaWYgKGlzSG9yaXpvbnRhbEZsb3coKSkKKyAg
ICAgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHRGbG93KCkgPyBwYWRkaW5nTGVmdCgpIDogcGFkZGlu
Z1JpZ2h0KCk7CisgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHRGbG93KCkgPyBwYWRkaW5nVG9wKCkg
OiBwYWRkaW5nQm90dG9tKCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTWF0aE1MQmxvY2s6OmZs
b3dBd2FyZVBhZGRpbmdFbmQoKSBjb25zdAoreworICAgIGlmIChpc0hvcml6b250YWxGbG93KCkp
CisgICAgICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RmxvdygpID8gcGFkZGluZ1JpZ2h0KCkgOiBw
YWRkaW5nTGVmdCgpOworICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RmxvdygpID8gcGFkZGluZ0Jv
dHRvbSgpIDogcGFkZGluZ1RvcCgpOworfQorCitMYXlvdXRVbml0IFJlbmRlck1hdGhNTEJsb2Nr
OjpmbG93QXdhcmVNYXJnaW5TdGFydEZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQpIGNvbnN0Cit7
CisgICAgaWYgKGlzSG9yaXpvbnRhbEZsb3coKSkKKyAgICAgICAgcmV0dXJuIGlzTGVmdFRvUmln
aHRGbG93KCkgPyBjaGlsZC5tYXJnaW5MZWZ0KCkgOiBjaGlsZC5tYXJnaW5SaWdodCgpOworICAg
IHJldHVybiBpc0xlZnRUb1JpZ2h0RmxvdygpID8gY2hpbGQubWFyZ2luVG9wKCkgOiBjaGlsZC5t
YXJnaW5Cb3R0b20oKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxCbG9jazo6Zmxvd0F3
YXJlTWFyZ2luRW5kRm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKK3sKKyAgICBpZiAo
aXNIb3Jpem9udGFsRmxvdygpKQorICAgICAgICByZXR1cm4gaXNMZWZ0VG9SaWdodEZsb3coKSA/
IGNoaWxkLm1hcmdpblJpZ2h0KCkgOiBjaGlsZC5tYXJnaW5MZWZ0KCk7CisgICAgcmV0dXJuIGlz
TGVmdFRvUmlnaHRGbG93KCkgPyBjaGlsZC5tYXJnaW5Cb3R0b20oKSA6IGNoaWxkLm1hcmdpblRv
cCgpOworfQorCitMYXlvdXRVbml0IFJlbmRlck1hdGhNTEJsb2NrOjpmbG93QXdhcmVNYXJnaW5C
ZWZvcmVGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAoreworICAgIHN3aXRjaCAodHJh
bnNmb3JtZWRXcml0aW5nTW9kZSgpKSB7CisgICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdNb2Rl
OgorICAgICAgICByZXR1cm4gY2hpbGQubWFyZ2luVG9wKCk7CisgICAgY2FzZSBCb3R0b21Ub1Rv
cFdyaXRpbmdNb2RlOgorICAgICAgICByZXR1cm4gY2hpbGQubWFyZ2luQm90dG9tKCk7CisgICAg
Y2FzZSBMZWZ0VG9SaWdodFdyaXRpbmdNb2RlOgorICAgICAgICByZXR1cm4gY2hpbGQubWFyZ2lu
TGVmdCgpOworICAgIGNhc2UgUmlnaHRUb0xlZnRXcml0aW5nTW9kZToKKyAgICAgICAgcmV0dXJu
IGNoaWxkLm1hcmdpblJpZ2h0KCk7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBtYXJnaW5Ub3AoKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxCbG9j
azo6Zmxvd0F3YXJlTWFyZ2luQWZ0ZXJGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAor
eworICAgIHN3aXRjaCAodHJhbnNmb3JtZWRXcml0aW5nTW9kZSgpKSB7CisgICAgY2FzZSBUb3BU
b0JvdHRvbVdyaXRpbmdNb2RlOgorICAgICAgICByZXR1cm4gY2hpbGQubWFyZ2luQm90dG9tKCk7
CisgICAgY2FzZSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlOgorICAgICAgICByZXR1cm4gY2hpbGQu
bWFyZ2luVG9wKCk7CisgICAgY2FzZSBMZWZ0VG9SaWdodFdyaXRpbmdNb2RlOgorICAgICAgICBy
ZXR1cm4gY2hpbGQubWFyZ2luUmlnaHQoKTsKKyAgICBjYXNlIFJpZ2h0VG9MZWZ0V3JpdGluZ01v
ZGU6CisgICAgICAgIHJldHVybiBjaGlsZC5tYXJnaW5MZWZ0KCk7CisgICAgfQorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBtYXJnaW5Cb3R0b20oKTsKK30KKworV3JpdGlu
Z01vZGUgUmVuZGVyTWF0aE1MQmxvY2s6OnRyYW5zZm9ybWVkV3JpdGluZ01vZGUoKSBjb25zdAor
eworICAgIFdyaXRpbmdNb2RlIG1vZGUgPSBzdHlsZSgpLndyaXRpbmdNb2RlKCk7CisgICAgaWYg
KCFpc0NvbHVtbkZsb3coKSkKKyAgICAgICAgcmV0dXJuIG1vZGU7CisKKyAgICBzd2l0Y2ggKG1v
ZGUpIHsKKyAgICBjYXNlIFRvcFRvQm90dG9tV3JpdGluZ01vZGU6CisgICAgY2FzZSBCb3R0b21U
b1RvcFdyaXRpbmdNb2RlOgorICAgICAgICByZXR1cm4gc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkgPyBMZWZ0VG9SaWdodFdyaXRpbmdNb2RlIDogUmlnaHRUb0xlZnRXcml0aW5nTW9k
ZTsKKyAgICBjYXNlIExlZnRUb1JpZ2h0V3JpdGluZ01vZGU6CisgICAgY2FzZSBSaWdodFRvTGVm
dFdyaXRpbmdNb2RlOgorICAgICAgICByZXR1cm4gc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgPyBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlIDogQm90dG9tVG9Ub3BXcml0aW5nTW9kZTsK
KyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFRvcFRvQm90dG9t
V3JpdGluZ01vZGU7Cit9CisKK2Jvb2wgUmVuZGVyTWF0aE1MQmxvY2s6OmlzQ29sdW1uRmxvdygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHN0eWxlKCkuaXNDb2x1bW5GbGV4RGlyZWN0aW9uKCk7Cit9
CisKIH0gICAgCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oCmluZGV4IDZjYjZlN2JiODYyY2I1YzZhYzA5NTZkMmIy
NjA1ZjJlZGQ5MjQzNzMuLjU4YzM0YmMwMTI2ZGE4ZTllZGFjNTI0YTU4MTgxYTA4MzYxOGRkZDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
QmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TEJsb2NrLmgKQEAgLTYzLDExICs2MywzMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gQ3JlYXRl
IGEgbmV3IFJlbmRlck1hdGhNTEJsb2NrLCB3aXRoIGEgbmV3IHN0eWxlIGluaGVyaXRpbmcgZnJv
bSB0aGlzLT5zdHlsZSgpLgogICAgIFJlbmRlclB0cjxSZW5kZXJNYXRoTUxCbG9jaz4gY3JlYXRl
QW5vbnltb3VzTWF0aE1MQmxvY2soKTsKLSAgICAKKworcHJvdGVjdGVkOgorICAgIGJvb2wgaXNM
ZWZ0VG9SaWdodEZsb3coKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGZsb3dBd2FyZUJvcmRlclN0
YXJ0KCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBmbG93QXdhcmVCb3JkZXJFbmQoKSBjb25zdDsK
KyAgICBMYXlvdXRVbml0IGZsb3dBd2FyZVBhZGRpbmdTdGFydCgpIGNvbnN0OworICAgIExheW91
dFVuaXQgZmxvd0F3YXJlUGFkZGluZ0VuZCgpIGNvbnN0OworICAgIExheW91dFVuaXQgZmxvd0F3
YXJlTWFyZ2luU3RhcnRGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjb25zdDsKKyAgICBMYXlv
dXRVbml0IGZsb3dBd2FyZU1hcmdpbkVuZEZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQpIGNvbnN0
OworICAgIExheW91dFVuaXQgZmxvd0F3YXJlTWFyZ2luQmVmb3JlRm9yQ2hpbGQoUmVuZGVyQm94
JiBjaGlsZCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBmbG93QXdhcmVNYXJnaW5BZnRlckZvckNo
aWxkKFJlbmRlckJveCYgY2hpbGQpIGNvbnN0OworICAgIGJvb2wgaGFzT3J0aG9nb25hbEZsb3co
UmVuZGVyQm94JiBjaGlsZCkgY29uc3Q7CisKKyAgICBMYXlvdXRVbml0IG1haW5BeGlzQm9yZGVy
QW5kUGFkZGluZ0V4dGVudEZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQpIGNvbnN0OworICAgIE9w
dGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVNYWluQXhpc0V4dGVudEZvckNoaWxkKFJlbmRlckJv
eCYgY2hpbGQsIFNpemVUeXBlLCBjb25zdCBMZW5ndGgmIHNpemUpOworICAgIExheW91dFVuaXQg
cHJlZmVycmVkTWFpbkF4aXNDb250ZW50RXh0ZW50Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwg
Ym9vbCBoYXNJbmZpbml0ZUxpbmVMZW5ndGgpOworCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9v
bCBpc1JlbmRlck1hdGhNTEJsb2NrKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gdHJ1
ZTsgfQogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRl
OwogICAgIGJvb2wgaXNGbGV4aWJsZUJveEltcGwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9CisgICAgYm9vbCBpc0NvbHVtbkZsb3coKSBjb25zdDsKKyAgICBXcml0aW5nTW9kZSB0
cmFuc2Zvcm1lZFdyaXRpbmdNb2RlKCkgY29uc3Q7CisKKyAgICBib29sIGNvbXB1dGVQcmVmZXJy
ZWRNYWluQXhpc0V4dGVudChMYXlvdXRVbml0JiBwcmVmZXJyZWRNYWluQXhpc0V4dGVudCk7CiB9
OwogCiBjbGFzcyBSZW5kZXJNYXRoTUxUYWJsZSBmaW5hbCA6IHB1YmxpYyBSZW5kZXJUYWJsZSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TFJvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJv
dy5jcHAKaW5kZXggNWNmMmM5ZGRjNGM4N2UyZGNjNDdmNTBiODJkNjg4MmY1NzU4NzcwMi4uMjdl
NDE0MDQ0ZGU4ZjQ2MzU0ZTYxNTM3YmViNjk1OGJjNDU4NTgxYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcApAQCAtMzEsOCAr
MzEsMTAgQEAKIAogI2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRl
cmF0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlck1hdGhN
TE9wZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWF0aE1MUm9vdC5oIgorI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MCw3ICs1Miw3IEBAIFJl
bmRlck1hdGhNTFJvdzo6UmVuZGVyTWF0aE1MUm93KERvY3VtZW50JiBkb2N1bWVudCwgUmVmPFJl
bmRlclN0eWxlPiYmIHN0eWxlKQogCiBSZW5kZXJQdHI8UmVuZGVyTWF0aE1MUm93PiBSZW5kZXJN
YXRoTUxSb3c6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihSZW5kZXJNYXRoTUxS
b290JiBwYXJlbnQpCiB7Ci0gICAgUmVuZGVyUHRyPFJlbmRlck1hdGhNTFJvdz4gbmV3TVJvdyA9
IGNyZWF0ZVJlbmRlcmVyPFJlbmRlck1hdGhNTFJvdz4ocGFyZW50LmRvY3VtZW50KCksIFJlbmRl
clN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KCZwYXJlbnQuc3R5bGUoKSwg
RkxFWCkpOworICAgIFJlbmRlclB0cjxSZW5kZXJNYXRoTUxSb3c+IG5ld01Sb3cgPSBjcmVhdGVS
ZW5kZXJlcjxSZW5kZXJNYXRoTUxSb3c+KHBhcmVudC5kb2N1bWVudCgpLCBSZW5kZXJTdHlsZTo6
Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheSgmcGFyZW50LnN0eWxlKCksIEJMT0NLKSk7
CiAgICAgbmV3TVJvdy0+aW5pdGlhbGl6ZVN0eWxlKCk7CiAgICAgcmV0dXJuIG5ld01Sb3c7CiB9
CkBAIC02Niw0NCArNjgsMTU3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm93Ojp1cGRhdGVPcGVyYXRv
clByb3BlcnRpZXMoKQogICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwog
fQogCi12b2lkIFJlbmRlck1hdGhNTFJvdzo6bGF5b3V0KCkKK3N0YXRpYyBpbmxpbmUgTGF5b3V0
VW5pdCBtYXJnaW5Cb3hBc2NlbnRGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKQogewot
ICAgIGludCBzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IDAsIHN0cmV0Y2hEZXB0aEJlbG93
QmFzZWxpbmUgPSAwOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGNo
aWxkLT5uZWVkc0xheW91dCgpKQotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4o
KmNoaWxkKS5sYXlvdXQoKTsKLSAgICAgICAgaWYgKGlzPFJlbmRlck1hdGhNTEJsb2NrPigqY2hp
bGQpKSB7Ci0gICAgICAgICAgICAvLyBXZSBza2lwIHRoZSBzdHJldGNoeSBvcGVyYXRvcnMgYXMg
dGhleSBtdXN0IG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgY29tcHV0YXRpb24gb2YgdGhlIHN0cmV0
Y2ggc2l6ZS4KLSAgICAgICAgICAgIGF1dG8qIHJlbmRlck9wZXJhdG9yID0gZG93bmNhc3Q8UmVu
ZGVyTWF0aE1MQmxvY2s+KCpjaGlsZCkudW5lbWJlbGxpc2hlZE9wZXJhdG9yKCk7CisgICAgcmV0
dXJuIGNoaWxkLmZpcnN0TGluZUJhc2VsaW5lKCkudmFsdWVPcihjaGlsZC5oZWlnaHQoKSkgKyBj
aGlsZC5tYXJnaW5Ub3AoKTsKK30KKworT3B0aW9uYWw8aW50PiBSZW5kZXJNYXRoTUxSb3c6OmZp
cnN0TGluZUJhc2VsaW5lKCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJhc2VsaW5lQ2hpbGQg
PSBmaXJzdENoaWxkQm94KCk7CisgICAgaWYgKCFiYXNlbGluZUNoaWxkKQorICAgICAgICByZXR1
cm4gT3B0aW9uYWw8aW50PigpOworCisgICAgT3B0aW9uYWw8aW50PiBiYXNlbGluZSA9IGJhc2Vs
aW5lQ2hpbGQtPmZpcnN0TGluZUJhc2VsaW5lKCk7CisgICAgaWYgKCFiYXNlbGluZSkKKyAgICAg
ICAgcmV0dXJuIE9wdGlvbmFsPGludD4oYmFzZWxpbmVDaGlsZC0+Ym9yZGVyVG9wKCkgKyBiYXNl
bGluZUNoaWxkLT5wYWRkaW5nVG9wKCkgKyBiYXNlbGluZUNoaWxkLT5jb250ZW50SGVpZ2h0KCkg
KyBiYXNlbGluZUNoaWxkLT5sb2dpY2FsVG9wKCkpOworCisgICAgcmV0dXJuIE9wdGlvbmFsPGlu
dD4oYmFzZWxpbmUudmFsdWUoKSArIGJhc2VsaW5lQ2hpbGQtPmxvZ2ljYWxUb3AoKSk7Cit9CisK
K3ZvaWQgUmVuZGVyTWF0aE1MUm93OjpwcmVwYXJlQ2hpbGRGb3JQb3NpdGlvbmVkTGF5b3V0KFJl
bmRlckJveCYgY2hpbGQsIExheW91dFVuaXQgaG9yaXpvbnRhbE9mZnNldCwgTGF5b3V0VW5pdCB2
ZXJ0aWNhbE9mZnNldCkKK3sKKyAgICBBU1NFUlQoY2hpbGQuaXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkpOworICAgIGNoaWxkLmNvbnRhaW5pbmdCbG9jaygpLT5pbnNlcnRQb3NpdGlvbmVkT2JqZWN0
KGNoaWxkKTsKKyAgICBSZW5kZXJMYXllciogY2hpbGRMYXllciA9IGNoaWxkLmxheWVyKCk7Cisg
ICAgY2hpbGRMYXllci0+c2V0U3RhdGljSW5saW5lUG9zaXRpb24oaG9yaXpvbnRhbE9mZnNldCk7
CisKKyAgICBpZiAoY2hpbGRMYXllci0+c3RhdGljQmxvY2tQb3NpdGlvbigpICE9IHZlcnRpY2Fs
T2Zmc2V0KSB7CisgICAgICAgIGNoaWxkTGF5ZXItPnNldFN0YXRpY0Jsb2NrUG9zaXRpb24odmVy
dGljYWxPZmZzZXQpOworICAgICAgICBpZiAoY2hpbGQuc3R5bGUoKS5oYXNTdGF0aWNCbG9ja1Bv
c2l0aW9uKHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpCisgICAgICAgICAgICBj
aGlsZC5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CisgICAgfQorfQorCit2b2lk
IFJlbmRlck1hdGhNTFJvdzo6Y29tcHV0ZUxpbmVWZXJ0aWNhbFN0cmV0Y2goaW50JiBzdHJldGNo
SGVpZ2h0QWJvdmVCYXNlbGluZSwgaW50JiBzdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lKQorewor
ICAgIC8vIEZJWE1FOiBXaGF0IGFib3V0IHRoZSBSZW5kZXJCbG9ja3M/CisgICAgZm9yIChSZW5k
ZXJCb3gqIGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmdCb3goKSkgeworICAgICAgICBjaGlsZC0+bGF5b3V0SWZOZWVkZWQoKTsKKworICAg
ICAgICBpZiAoaXM8UmVuZGVyTWF0aE1MQmxvY2s+KGNoaWxkKSkgeworICAgICAgICAgICAgYXV0
byogcmVuZGVyT3BlcmF0b3IgPSBkb3duY2FzdDxSZW5kZXJNYXRoTUxCbG9jaz4oY2hpbGQpLT51
bmVtYmVsbGlzaGVkT3BlcmF0b3IoKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJPcGVyYXRvciAm
JiByZW5kZXJPcGVyYXRvci0+aGFzT3BlcmF0b3JGbGFnKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFy
eTo6U3RyZXRjaHkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CisKICAg
ICAgICAgTGF5b3V0VW5pdCBjaGlsZEhlaWdodEFib3ZlQmFzZWxpbmUgPSAwLCBjaGlsZERlcHRo
QmVsb3dCYXNlbGluZSA9IDA7Ci0gICAgICAgIGlmIChpczxSZW5kZXJNYXRoTUxCbG9jaz4oKmNo
aWxkKSkgewotICAgICAgICAgICAgUmVuZGVyTWF0aE1MQmxvY2smIG1hdGhtbENoaWxkID0gZG93
bmNhc3Q8UmVuZGVyTWF0aE1MQmxvY2s+KCpjaGlsZCk7Ci0gICAgICAgICAgICBjaGlsZEhlaWdo
dEFib3ZlQmFzZWxpbmUgPSBtYXRobWxDaGlsZC5maXJzdExpbmVCYXNlbGluZSgpLnZhbHVlT3Io
bWF0aG1sQ2hpbGQubG9naWNhbEhlaWdodCgpKTsKLSAgICAgICAgICAgIGNoaWxkRGVwdGhCZWxv
d0Jhc2VsaW5lID0gbWF0aG1sQ2hpbGQubG9naWNhbEhlaWdodCgpIC0gY2hpbGRIZWlnaHRBYm92
ZUJhc2VsaW5lOwotICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlck1hdGhNTFRhYmxlPigqY2hp
bGQpKSB7Ci0gICAgICAgICAgICBSZW5kZXJNYXRoTUxUYWJsZSYgdGFibGVDaGlsZCA9IGRvd25j
YXN0PFJlbmRlck1hdGhNTFRhYmxlPigqY2hpbGQpOwotICAgICAgICAgICAgY2hpbGRIZWlnaHRB
Ym92ZUJhc2VsaW5lID0gdGFibGVDaGlsZC5maXJzdExpbmVCYXNlbGluZSgpLnZhbHVlT3IoLTEp
OwotICAgICAgICAgICAgY2hpbGREZXB0aEJlbG93QmFzZWxpbmUgPSB0YWJsZUNoaWxkLmxvZ2lj
YWxIZWlnaHQoKSAtIGNoaWxkSGVpZ2h0QWJvdmVCYXNlbGluZTsKLSAgICAgICAgfSBlbHNlIGlm
IChpczxSZW5kZXJCb3g+KCpjaGlsZCkpIHsKLSAgICAgICAgICAgIGNoaWxkSGVpZ2h0QWJvdmVC
YXNlbGluZSA9IGRvd25jYXN0PFJlbmRlckJveD4oKmNoaWxkKS5sb2dpY2FsSGVpZ2h0KCk7Cisg
ICAgICAgIGlmIChpczxSZW5kZXJNYXRoTUxCbG9jaz4oY2hpbGQpKSB7CisgICAgICAgICAgICBS
ZW5kZXJNYXRoTUxCbG9jayogbWF0aG1sQ2hpbGQgPSBkb3duY2FzdDxSZW5kZXJNYXRoTUxCbG9j
az4oY2hpbGQpOworICAgICAgICAgICAgY2hpbGRIZWlnaHRBYm92ZUJhc2VsaW5lID0gbWF0aG1s
Q2hpbGQtPmZpcnN0TGluZUJhc2VsaW5lKCkudmFsdWVPcihtYXRobWxDaGlsZC0+bG9naWNhbEhl
aWdodCgpKTsKKyAgICAgICAgICAgIGNoaWxkRGVwdGhCZWxvd0Jhc2VsaW5lID0gbWF0aG1sQ2hp
bGQtPmxvZ2ljYWxIZWlnaHQoKSAtIGNoaWxkSGVpZ2h0QWJvdmVCYXNlbGluZTsKKyAgICAgICAg
fSBlbHNlIGlmIChpczxSZW5kZXJNYXRoTUxUYWJsZT4oY2hpbGQpKSB7CisgICAgICAgICAgICBS
ZW5kZXJNYXRoTUxUYWJsZSogdGFibGVDaGlsZCA9IGRvd25jYXN0PFJlbmRlck1hdGhNTFRhYmxl
PihjaGlsZCk7CisgICAgICAgICAgICBjaGlsZEhlaWdodEFib3ZlQmFzZWxpbmUgPSB0YWJsZUNo
aWxkLT5maXJzdExpbmVCYXNlbGluZSgpLnZhbHVlT3IoLTEpOworICAgICAgICAgICAgY2hpbGRE
ZXB0aEJlbG93QmFzZWxpbmUgPSB0YWJsZUNoaWxkLT5sb2dpY2FsSGVpZ2h0KCkgLSBjaGlsZEhl
aWdodEFib3ZlQmFzZWxpbmU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaGlsZEhl
aWdodEFib3ZlQmFzZWxpbmUgPSBjaGlsZC0+bG9naWNhbEhlaWdodCgpOwogICAgICAgICAgICAg
Y2hpbGREZXB0aEJlbG93QmFzZWxpbmUgPSAwOwogICAgICAgICB9CiAgICAgICAgIHN0cmV0Y2hI
ZWlnaHRBYm92ZUJhc2VsaW5lID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oc3RyZXRjaEhlaWdodEFi
b3ZlQmFzZWxpbmUsIGNoaWxkSGVpZ2h0QWJvdmVCYXNlbGluZSk7CiAgICAgICAgIHN0cmV0Y2hE
ZXB0aEJlbG93QmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihzdHJldGNoRGVwdGhCZWxv
d0Jhc2VsaW5lLCBjaGlsZERlcHRoQmVsb3dCYXNlbGluZSk7CiAgICAgfQorCiAgICAgaWYgKHN0
cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lICsgc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSA8PSAw
KQogICAgICAgICBzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IHN0eWxlKCkuZm9udFNpemUo
KTsKLSAgICAKLSAgICAvLyBTZXQgdGhlIHNpemVzIG9mIChwb3NzaWJseSBlbWJlbGxpc2hlZCkg
c3RyZXRjaHkgb3BlcmF0b3IgY2hpbGRyZW4uCi0gICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxk
cmVuT2ZUeXBlPFJlbmRlck1hdGhNTEJsb2NrPigqdGhpcykpIHsKLSAgICAgICAgaWYgKGF1dG8g
cmVuZGVyT3BlcmF0b3IgPSBjaGlsZC51bmVtYmVsbGlzaGVkT3BlcmF0b3IoKSkKLSAgICAgICAg
ICAgIHJlbmRlck9wZXJhdG9yLT5zdHJldGNoVG8oc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUs
IHN0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUpOworfQorCit2b2lkIFJlbmRlck1hdGhNTFJvdzo6
bGF5b3V0Um93SXRlbXMoaW50IHN0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCBpbnQgc3RyZXRj
aERlcHRoQmVsb3dCYXNlbGluZSkKK3sKKyAgICBib29sIGhhc0luZmluaXRlTGluZUxlbmd0aCA9
IHRydWU7CisKKyAgICBMYXlvdXRVbml0IGhvcml6b250YWxPZmZzZXQgPSBmbG93QXdhcmVCb3Jk
ZXJTdGFydCgpICsgZmxvd0F3YXJlUGFkZGluZ1N0YXJ0KCk7CisgICAgTGF5b3V0VW5pdCB2ZXJ0
aWNhbE9mZnNldCA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpOworICAgIExheW91dFVuaXQg
bWF4QXNjZW50ID0gMCwgbWF4RGVzY2VudCA9IDA7IC8vIFVzZWQgYmFzZWxpbmUgYWxpZ25tZW50
LgorICAgIGJvb2wgc2hvdWxkRmxpcEhvcml6b250YWwgPSAhaXNMZWZ0VG9SaWdodEZsb3coKTsK
KworICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5pc091
dE9mRmxvd1Bvc2l0aW9uZWQoKSkgeworICAgICAgICAgICAgcHJlcGFyZUNoaWxkRm9yUG9zaXRp
b25lZExheW91dCgqY2hpbGQsIGhvcml6b250YWxPZmZzZXQsIHZlcnRpY2FsT2Zmc2V0KTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzPFJlbmRlck1h
dGhNTE9wZXJhdG9yPihjaGlsZCkgJiYgIGRvd25jYXN0PFJlbmRlck1hdGhNTEJsb2NrPihjaGls
ZCktPnVuZW1iZWxsaXNoZWRPcGVyYXRvcigpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVy
TWF0aE1MT3BlcmF0b3I+KGNoaWxkKS0+c3RyZXRjaFRvKHN0cmV0Y2hIZWlnaHRBYm92ZUJhc2Vs
aW5lLCBzdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lKTsKKworICAgICAgICBMYXlvdXRVbml0IGNo
aWxkSG9yaXpvbnRhbEV4dGVudCA9IHByZWZlcnJlZE1haW5BeGlzQ29udGVudEV4dGVudEZvckNo
aWxkKCpjaGlsZCwgaGFzSW5maW5pdGVMaW5lTGVuZ3RoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBj
aGlsZEhvcml6b250YWxNYXJnaW5Cb3hFeHRlbnQgPSBjaGlsZC0+aG9yaXpvbnRhbEJvcmRlckFu
ZFBhZGRpbmdFeHRlbnQoKSArIGNoaWxkSG9yaXpvbnRhbEV4dGVudDsKKyAgICAgICAgY2hpbGQt
PnNldE92ZXJyaWRlTG9naWNhbENvbnRlbnRXaWR0aChjaGlsZEhvcml6b250YWxFeHRlbnQpOwor
CisgICAgICAgIGlmIChjaGlsZEhvcml6b250YWxFeHRlbnQgIT0gY2hpbGQtPndpZHRoKCkpCisg
ICAgICAgICAgICBjaGlsZC0+c2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMpOworCisg
ICAgICAgIGNoaWxkLT5sYXlvdXRJZk5lZWRlZCgpOworCisgICAgICAgIExheW91dFVuaXQgYXNj
ZW50ID0gV2ViQ29yZTo6bWFyZ2luQm94QXNjZW50Rm9yQ2hpbGQoKmNoaWxkKTsKKyAgICAgICAg
TGF5b3V0VW5pdCBkZXNjZW50ID0gY2hpbGQtPnZlcnRpY2FsTWFyZ2luRXh0ZW50KCkgKyBjaGls
ZC0+aGVpZ2h0KCkgLSBhc2NlbnQ7CisgICAgICAgIG1heEFzY2VudCA9IHN0ZDo6bWF4KG1heEFz
Y2VudCwgYXNjZW50KTsKKyAgICAgICAgbWF4RGVzY2VudCA9IHN0ZDo6bWF4KG1heERlc2NlbnQs
IGRlc2NlbnQpOworICAgICAgICBMYXlvdXRVbml0IGNoaWxkVmVydGljYWxNYXJnaW5Cb3hFeHRl
bnQgPSBtYXhBc2NlbnQgKyBtYXhEZXNjZW50OworCisgICAgICAgIGhvcml6b250YWxPZmZzZXQg
Kz0gZmxvd0F3YXJlTWFyZ2luU3RhcnRGb3JDaGlsZCgqY2hpbGQpOworCisgICAgICAgIHNldExv
Z2ljYWxIZWlnaHQoc3RkOjptYXgobG9naWNhbEhlaWdodCgpLCB2ZXJ0aWNhbE9mZnNldCArIGJv
cmRlckJvdHRvbSgpICsgcGFkZGluZ0JvdHRvbSgpICsgY2hpbGRWZXJ0aWNhbE1hcmdpbkJveEV4
dGVudCArIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSkpOworCisgICAgICAgIExheW91dFBv
aW50IGNoaWxkTG9jYXRpb24oc2hvdWxkRmxpcEhvcml6b250YWwgPyB3aWR0aCgpIC0gaG9yaXpv
bnRhbE9mZnNldCAtIGNoaWxkSG9yaXpvbnRhbEV4dGVudCA6IGhvcml6b250YWxPZmZzZXQsIHZl
cnRpY2FsT2Zmc2V0ICsgY2hpbGQtPm1hcmdpblRvcCgpKTsKKyAgICAgICAgY2hpbGQtPnNldExv
Y2F0aW9uKGNoaWxkTG9jYXRpb24pOworCisgICAgICAgIGhvcml6b250YWxPZmZzZXQgKz0gY2hp
bGRIb3Jpem9udGFsTWFyZ2luQm94RXh0ZW50ICsgZmxvd0F3YXJlTWFyZ2luRW5kRm9yQ2hpbGQo
KmNoaWxkKTsKKyAgICB9CisKKyAgICBMYXlvdXRVbml0IGNlbnRlckJsb2NrT2Zmc2V0ID0gMDsK
KyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBGTEVYIHdoZW4gaXQgaXMgbm90IHJlcXVpcmVkIGJ5
IHRoZSBjc3MuCisgICAgaWYgKHN0eWxlKCkuZGlzcGxheSgpID09IEJMT0NLIHx8IHN0eWxlKCku
ZGlzcGxheSgpID09IEZMRVgpCisgICAgICAgIGNlbnRlckJsb2NrT2Zmc2V0ID0gc3RkOjptYXg8
TGF5b3V0VW5pdD4oMCwgKHdpZHRoKCkgLSAoaG9yaXpvbnRhbE9mZnNldCArIGZsb3dBd2FyZUJv
cmRlclN0YXJ0KCkgKyBmbG93QXdhcmVQYWRkaW5nU3RhcnQoKSkpIC8gMik7CisKKyAgICBpZiAo
c2hvdWxkRmxpcEhvcml6b250YWwgJiYgY2VudGVyQmxvY2tPZmZzZXQgPiAwKQorICAgICAgICBj
ZW50ZXJCbG9ja09mZnNldCA9IC0gY2VudGVyQmxvY2tPZmZzZXQ7CisKKyAgICBmb3IgKFJlbmRl
ckJveCogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZ0JveCgpKSB7CisgICAgICAgIExheW91dFVuaXQgYXNjZW50ID0gV2ViQ29yZTo6bWFy
Z2luQm94QXNjZW50Rm9yQ2hpbGQoKmNoaWxkKTsKKyAgICAgICAgTGF5b3V0VW5pdCBzdGFydE9m
ZnNldCA9IG1heEFzY2VudCAtIGFzY2VudDsKKyAgICAgICAgY2hpbGQtPnNldExvY2F0aW9uKGNo
aWxkLT5sb2NhdGlvbigpICsgTGF5b3V0UG9pbnQoY2VudGVyQmxvY2tPZmZzZXQsIHN0YXJ0T2Zm
c2V0KSk7CiAgICAgfQorfQogCi0gICAgUmVuZGVyTWF0aE1MQmxvY2s6OmxheW91dCgpOwordm9p
ZCBSZW5kZXJNYXRoTUxSb3c6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5
b3V0VW5pdCkKK3sKKyAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CisKKyAgICBpZiAoIXJlbGF5
b3V0Q2hpbGRyZW4gJiYgc2ltcGxpZmllZExheW91dCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpbnQgc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgPSAwOworICAgIGludCBzdHJldGNoRGVw
dGhCZWxvd0Jhc2VsaW5lID0gMDsKKyAgICBjb21wdXRlTGluZVZlcnRpY2FsU3RyZXRjaChzdHJl
dGNoSGVpZ2h0QWJvdmVCYXNlbGluZSwgc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSk7CisKKyAg
ICByZWNvbXB1dGVMb2dpY2FsV2lkdGgoKTsKKworICAgIHNldExvZ2ljYWxIZWlnaHQoYm9yZGVy
QW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSArIHNjcm9sbGJhckxvZ2ljYWxIZWlnaHQoKSk7CisK
KyAgICBsYXlvdXRSb3dJdGVtcyhzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSwgc3RyZXRjaERl
cHRoQmVsb3dCYXNlbGluZSk7CisKKyAgICB1cGRhdGVMb2dpY2FsSGVpZ2h0KCk7CisKKyAgICBj
bGVhck5lZWRzTGF5b3V0KCk7Cit9CisKK3ZvaWQgUmVuZGVyTWF0aE1MUm93OjpwYWludENoaWxk
cmVuKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQs
IFBhaW50SW5mbyYgcGFpbnRJbmZvRm9yQ2hpbGQsIGJvb2wgdXNlUHJpbnRSZWN0KQoreworICAg
IGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsKKyAgICAgICAgaWYgKCFwYWludENoaWxkKCpjaGls
ZCwgcGFpbnRJbmZvLCBwYWludE9mZnNldCwgcGFpbnRJbmZvRm9yQ2hpbGQsIHVzZVByaW50UmVj
dCwgUGFpbnRBc0lubGluZUJsb2NrKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MUm93LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJv
dy5oCmluZGV4IDA2NDA4YjVkOTZkYmIzNGQ3OGU1ODIyMWRkMmRkZjc3NmQzNDFhZGYuLjIyMzU3
Mjc5YTg1YzM3ZWFmOTg2MWFlNTg1YmUzZmM4YWYzOGZjMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuaApAQCAtNDIsMTIgKzQyLDE3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVuZGVyUHRyPFJlbmRlck1hdGhNTFJvdz4gY3JlYXRl
QW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKFJlbmRlck1hdGhNTFJvb3QmKTsKICAgICB2b2lk
IHVwZGF0ZU9wZXJhdG9yUHJvcGVydGllcygpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2
b2lkIGxheW91dCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29s
IHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBvdmVy
cmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDaGlsZHJlbihQYWludEluZm8mIGZv
clNlbGYsIGNvbnN0IExheW91dFBvaW50JiwgUGFpbnRJbmZvJiBmb3JDaGlsZCwgYm9vbCB1c2VQ
cmludFJlY3QpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgT3B0aW9uYWw8aW50PiBmaXJz
dExpbmVCYXNlbGluZSgpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwg
Ym9vbCBpc1JlbmRlck1hdGhNTFJvdygpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIHRy
dWU7IH0KICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBpc0Fub255bW91cygpID8gIlJlbmRlck1hdGhNTFJvdyAoYW5vbnltb3VzKSIg
OiAiUmVuZGVyTWF0aE1MUm93IjsgfQorCisgICAgdm9pZCBsYXlvdXRSb3dJdGVtcyhpbnQgc3Ry
ZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUsIGludCBzdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lKTsK
KyAgICB2b2lkIHByZXBhcmVDaGlsZEZvclBvc2l0aW9uZWRMYXlvdXQoUmVuZGVyQm94JiwgTGF5
b3V0VW5pdCBtYWluQXhpc09mZnNldCwgTGF5b3V0VW5pdCBjcm9zc0F4aXNPZmZzZXQpOworICAg
IHZvaWQgY29tcHV0ZUxpbmVWZXJ0aWNhbFN0cmV0Y2goaW50JiBzdHJldGNoSGVpZ2h0QWJvdmVC
YXNlbGluZSwgaW50JiBzdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lKTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>270103</attachid>
            <date>2016-01-28 01:27:40 -0800</date>
            <delta_ts>2016-01-28 01:28:36 -0800</delta_ts>
            <desc>testcase embellished operator</desc>
            <filename>embellished-op.html</filename>
            <type>text/html</type>
            <size>422</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPmVtYmVsbGlzaGVkIG9w
PC90aXRsZT4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+CiAgPC9oZWFkPgogIDxib2R5PgoK
ICAgIDxwPlRoZSBwYXJlbnRoZXNpcyBzaG91bGQgc3RyZXRjaCB0byBjb3ZlciB0aGUgc2l6ZSBv
ZiB0aGUgcmVkIGJveDo8L3A+CiAgICAKICAgIDxtYXRoPgogICAgICA8bXJvdz4KICAgICAgICA8
bXN1Yj4KICAgICAgICAgIDxtbz4oPC9tbz4KICAgICAgICAgIDxtc3BhY2UvPgogICAgICAgIDwv
bXN1Yj4KICAgICAgICA8bXNwYWNlIGhlaWdodD0iM2VtIiBkZXB0aD0iM2VtIiB3aWR0aD0iMTBw
eCIgbWF0aGJhY2tncm91bmQ9InJlZCIvPgogICAgICA8L21yb3c+CiAgICA8L21hdGg+CiAgICAg
ICAgIAogIDwvYm9keT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270200</attachid>
            <date>2016-01-29 04:39:47 -0800</date>
            <delta_ts>2016-02-12 03:29:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153208-20160129133921.patch</filename>
            <type>text/plain</type>
            <size>23124</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk1ODEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDI0MzllZTcwYWI3MmQ4
OTliNmFmNzA1YzUzOWVjMzQzYTk3ODhjZC4uYTlkYTBlNjNlOGI0ZTNlYTZlZmI4YTJmMzY5Njcx
YTc0NWIzOGVhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDE2LTAxLTI5ICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFJlZmFjdG9yIFJl
bmRlck1hdGhNTFJvdyBsYXlvdXQgZnVuY3Rpb25zIHRvIGF2b2lkIHVzaW5nIGZsZXhib3gKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzIwOAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgdGhl
IGZpcnN0IHBhdGNoIGluIHRoZSBzZXQgdG8gcmVtb3ZlIHRoZSBmbGV4Ym94CisgICAgICAgIGRl
cGVuZGVuY3kgb2YgdGhlIE1hdGhNTCBsYXlvdXQgd2l0aG91dCBjaGFuZ2luZyB0aGUgcmVuZGVy
IHRyZWUKKyAgICAgICAgc3RydWN0dXJlLiBXZSBoYXZlIGFkZGVkIHNvbWUgZnVuY3Rpb25zIGZv
IHRoZSBSZW5kZXJNYXRoTUxCbG9jaworICAgICAgICB1c2VkIGluIHRoZSBuZXh0IHBhdGNoZXMs
IGFsc28gd2UgaGF2ZSBhbGxvd2VkIHRoZSBvdmVycmlkZSBvZiB0aGUKKyAgICAgICAgbGF5b3V0
QmxvY2sgZnVuY3Rpb24gaW4gdGhlIEZsZXhCb3ggY2xhc3MgdGhhdCB3ZSB3aWxsIHJlbW92ZSBp
bgorICAgICAgICB0aGUgbGFzdCBwYXRjaC4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5oOiBBbGxvdyBvdmVycmlkZXIgb2YgdGhlCisgICAgICAgIExheW91dEJsb2Nr
IGZvciB0aGUgbW9tZW50LgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
QmxvY2suY3BwOiBBZGRlZCBmdW5jdGlvbnMgdG8KKyAgICAgICAgY2FsY3VsYXRlIHNvbWUgZGlz
dGFuY2VzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6OmNvbXB1dGVNYWlu
QXhpc0V4dGVudEZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJsb2Nr
OjpoYXNPcnRob2dvbmFsRmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9j
azo6bWFpbkF4aXNCb3JkZXJBbmRQYWRkaW5nRXh0ZW50Rm9yQ2hpbGQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6OnByZWZlcnJlZE1haW5BeGlzQ29udGVudEV4dGVudEZv
ckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJsb2NrOjppc0xlZnRUb1Jp
Z2h0Rmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6Zmxvd0F3YXJl
Qm9yZGVyU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6OmZsb3dB
d2FyZUJvcmRlckVuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6Zmxv
d0F3YXJlUGFkZGluZ1N0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJsb2Nr
OjpmbG93QXdhcmVQYWRkaW5nRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJs
b2NrOjpmbG93QXdhcmVNYXJnaW5TdGFydEZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck1hdGhNTEJsb2NrOjpmbG93QXdhcmVNYXJnaW5FbmRGb3JDaGlsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6Zmxvd0F3YXJlTWFyZ2luQmVmb3JlRm9yQ2hpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6OmZsb3dBd2FyZU1hcmdpbkFm
dGVyRm9yQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6OnRyYW5z
Zm9ybWVkV3JpdGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6
OmlzQ29sdW1uRmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxC
bG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcDog
UmVpbXBsZW1lbnQgTGF5b3V0QmxvY2sKKyAgICAgICAgd2l0aG91dCB1c2luZyB0aGUgZmxleGJv
eCBsYXlvdXQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb3c6OmNyZWF0ZUFub255
bW91c1dpdGhQYXJlbnRSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjptYXJnaW5Cb3hBc2Nl
bnRGb3JDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb3c6OmZpcnN0TGlu
ZUJhc2VsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvdzo6cHJlcGFyZUNo
aWxkRm9yUG9zaXRpb25lZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxS
b3c6OmNvbXB1dGVMaW5lVmVydGljYWxTdHJldGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck1hdGhNTFJvdzo6bGF5b3V0Um93SXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0
aE1MUm93OjpsYXlvdXRCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb3c6
OnBhaW50Q2hpbGRyZW4pOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
Um93Lmg6CisKIDIwMTYtMDEtMjkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtHVEtdIEltcGxlbWVudCBvdmVybGF5IHNjcm9sbGJhcnMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgKaW5kZXggOWJhZTMx
NmFhZjM3ZDBlZDI0YTEwMzI2MTBiOWY3ZjcwMTdmMzVlMC4uOWZkOTJjMmM1ZWEwOGVkMmI4ZDMy
ZjEwZTAyZTI1OTU0YTQ4MDdiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsZXhpYmxlQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZsZXhpYmxlQm94LmgKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBi
b29sIGF2b2lkc0Zsb2F0cygpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgY2FuRHJvcEFub255bW91c0Jsb2NrQ2hpbGQoKSBjb25zdCBvdmVy
cmlkZSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9j
ayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAw
KSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxh
eW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgb3ZlcnJpZGU7
CiAKICAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCBm
aXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25P
bkNvbnRhaW5pbmdMaW5lKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIE9wdGlvbmFsPGlu
dD4gZmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAKaW5kZXggMWY0
MjZiODRlOGZjOGZkOWQ3ODY2MDdhNzhiMmVmMmYxZGU3MDZiNC4uZjE4MWQwYTRjZDY4MDI2MjE3
OWU2ODU0YTk3MzQ3NjZhMGUyNTdhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAKQEAgLTMwNiw2ICszMDYsMTU2IEBA
IE9wdGlvbmFsPGludD4gUmVuZGVyTWF0aE1MVGFibGU6OmZpcnN0TGluZUJhc2VsaW5lKCkgY29u
c3QKICAgICByZXR1cm4gKGxvZ2ljYWxIZWlnaHQoKSArIHN0eWxlKCkuZm9udE1ldHJpY3MoKS54
SGVpZ2h0KCkpIC8gMjsKIH0KIAorT3B0aW9uYWw8TGF5b3V0VW5pdD4gUmVuZGVyTWF0aE1MQmxv
Y2s6OmNvbXB1dGVNYWluQXhpc0V4dGVudEZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQsIFNpemVU
eXBlIHNpemVUeXBlLCBjb25zdCBMZW5ndGgmIHNpemUpCit7CisgICAgaWYgKGlzQ29sdW1uRmxv
dygpKSB7CisgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgZm9yICJhdXRvIiBoZXJl
IC0gY29tcHV0ZUNvbnRlbnRMb2dpY2FsSGVpZ2h0IHdpbGwganVzdCByZXR1cm4gTnVsbG9wdCBm
b3IgdGhhdCBjYXNlIGFueXdheS4KKyAgICAgICAgaWYgKHNpemUuaXNJbnRyaW5zaWMoKSkKKyAg
ICAgICAgICAgIGNoaWxkLmxheW91dElmTmVlZGVkKCk7CisgICAgICAgIHJldHVybiBjaGlsZC5j
b21wdXRlQ29udGVudExvZ2ljYWxIZWlnaHQoc2l6ZVR5cGUsIHNpemUsIGNoaWxkLmxvZ2ljYWxI
ZWlnaHQoKSAtIGNoaWxkLmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkpOworICAgIH0K
KyAgICAvLyBGSVhNRTogRmlndXJlIG91dCBob3cgdGhpcyBzaG91bGQgd29yayBmb3IgcmVnaW9u
cyBhbmQgcGFzcyBpbiB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzLgorICAgIFJlbmRlclJlZ2lvbiog
cmVnaW9uID0gbnVsbHB0cjsKKyAgICByZXR1cm4gY2hpbGQuY29tcHV0ZUxvZ2ljYWxXaWR0aElu
UmVnaW9uVXNpbmcoc2l6ZVR5cGUsIHNpemUsIGNvbnRlbnRMb2dpY2FsV2lkdGgoKSwgdGhpcywg
cmVnaW9uKSAtIGNoaWxkLmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKTsKK30KKworYm9v
bCBSZW5kZXJNYXRoTUxCbG9jazo6aGFzT3J0aG9nb25hbEZsb3coUmVuZGVyQm94JiBjaGlsZCkg
Y29uc3QKK3sKKyAgICAvLyBGSVhNRTogSWYgdGhlIGNoaWxkIGlzIGEgZmxleGJveCwgdGhlbiB3
ZSBuZWVkIHRvIGNoZWNrIGlzSG9yaXpvbnRhbEZsb3cuCisgICAgcmV0dXJuIGlzSG9yaXpvbnRh
bEZsb3coKSAhPSBjaGlsZC5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOworfQorCitMYXlvdXRV
bml0IFJlbmRlck1hdGhNTEJsb2NrOjptYWluQXhpc0JvcmRlckFuZFBhZGRpbmdFeHRlbnRGb3JD
aGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAoreworICAgIHJldHVybiBpc0hvcml6b250YWxG
bG93KCkgPyBjaGlsZC5ob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpIDogY2hpbGQu
dmVydGljYWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCk7Cit9CisKKworTGF5b3V0VW5pdCBSZW5k
ZXJNYXRoTUxCbG9jazo6cHJlZmVycmVkTWFpbkF4aXNDb250ZW50RXh0ZW50Rm9yQ2hpbGQoUmVu
ZGVyQm94JiBjaGlsZCwgYm9vbCBoYXNJbmZpbml0ZUxpbmVMZW5ndGgpCit7CisgICAgYm9vbCBo
YXNPdmVycmlkZVNpemUgPSBjaGlsZC5oYXNPdmVycmlkZUxvZ2ljYWxDb250ZW50V2lkdGgoKSB8
fCBjaGlsZC5oYXNPdmVycmlkZUxvZ2ljYWxDb250ZW50SGVpZ2h0KCk7CisgICAgaWYgKGhhc092
ZXJyaWRlU2l6ZSkKKyAgICAgICAgY2hpbGQuY2xlYXJPdmVycmlkZVNpemUoKTsKKworCisgICAg
TGVuZ3RoIGNoaWxkTWFpbkV4dGVudCA9IGlzSG9yaXpvbnRhbEZsb3coKSA/IGNoaWxkLnN0eWxl
KCkud2lkdGgoKSA6IGNoaWxkLnN0eWxlKCkuaGVpZ2h0KCk7CisgICAgaWYgKGNoaWxkTWFpbkV4
dGVudC5pc0F1dG8oKSB8fCAoY2hpbGRNYWluRXh0ZW50LmlzRml4ZWQoKSAmJiAhY2hpbGRNYWlu
RXh0ZW50LnZhbHVlKCkgJiYgaGFzSW5maW5pdGVMaW5lTGVuZ3RoKSkgeworICAgICAgICBpZiAo
aGFzT3J0aG9nb25hbEZsb3coY2hpbGQpKSB7CisgICAgICAgICAgICBpZiAoaGFzT3ZlcnJpZGVT
aXplKQorICAgICAgICAgICAgICAgIGNoaWxkLnNldENoaWxkTmVlZHNMYXlvdXQoTWFya09ubHlU
aGlzKTsKKyAgICAgICAgICAgIGNoaWxkLmxheW91dElmTmVlZGVkKCk7CisgICAgICAgIH0KKyAg
ICAgICAgTGF5b3V0VW5pdCBtYWluQXhpc0V4dGVudCA9IGhhc09ydGhvZ29uYWxGbG93KGNoaWxk
KSA/IGNoaWxkLmxvZ2ljYWxIZWlnaHQoKSA6IGNoaWxkLm1heFByZWZlcnJlZExvZ2ljYWxXaWR0
aCgpOworICAgICAgICBBU1NFUlQobWFpbkF4aXNFeHRlbnQgLSBtYWluQXhpc0JvcmRlckFuZFBh
ZGRpbmdFeHRlbnRGb3JDaGlsZChjaGlsZCkgPj0gMCk7CisgICAgICAgIHJldHVybiBtYWluQXhp
c0V4dGVudCAtIG1haW5BeGlzQm9yZGVyQW5kUGFkZGluZ0V4dGVudEZvckNoaWxkKGNoaWxkKTsK
KyAgICB9CisgICAgcmV0dXJuIGNvbXB1dGVNYWluQXhpc0V4dGVudEZvckNoaWxkKGNoaWxkLCBN
YWluT3JQcmVmZXJyZWRTaXplLCBjaGlsZE1haW5FeHRlbnQpLnZhbHVlT3IoMCk7Cit9CisKK2Jv
b2wgUmVuZGVyTWF0aE1MQmxvY2s6OmlzTGVmdFRvUmlnaHRGbG93KCkgY29uc3QKK3sKKyAgICBp
ZiAoaXNDb2x1bW5GbG93KCkpCisgICAgICAgIHJldHVybiBzdHlsZSgpLndyaXRpbmdNb2RlKCkg
PT0gVG9wVG9Cb3R0b21Xcml0aW5nTW9kZSB8fCBzdHlsZSgpLndyaXRpbmdNb2RlKCkgPT0gTGVm
dFRvUmlnaHRXcml0aW5nTW9kZTsKKyAgICByZXR1cm4gc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTWF0aE1MQmxvY2s6OmZsb3dBd2FyZUJv
cmRlclN0YXJ0KCkgY29uc3QKK3sKKyAgICBpZiAoaXNIb3Jpem9udGFsRmxvdygpKQorICAgICAg
ICByZXR1cm4gaXNMZWZ0VG9SaWdodEZsb3coKSA/IGJvcmRlckxlZnQoKSA6IGJvcmRlclJpZ2h0
KCk7CisgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHRGbG93KCkgPyBib3JkZXJUb3AoKSA6IGJvcmRl
ckJvdHRvbSgpOworfQorCitMYXlvdXRVbml0IFJlbmRlck1hdGhNTEJsb2NrOjpmbG93QXdhcmVC
b3JkZXJFbmQoKSBjb25zdAoreworICAgIGlmIChpc0hvcml6b250YWxGbG93KCkpCisgICAgICAg
IHJldHVybiBpc0xlZnRUb1JpZ2h0RmxvdygpID8gYm9yZGVyUmlnaHQoKSA6IGJvcmRlckxlZnQo
KTsKKyAgICByZXR1cm4gaXNMZWZ0VG9SaWdodEZsb3coKSA/IGJvcmRlckJvdHRvbSgpIDogYm9y
ZGVyVG9wKCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTWF0aE1MQmxvY2s6OmZsb3dBd2FyZVBh
ZGRpbmdTdGFydCgpIGNvbnN0Cit7CisgICAgaWYgKGlzSG9yaXpvbnRhbEZsb3coKSkKKyAgICAg
ICAgcmV0dXJuIGlzTGVmdFRvUmlnaHRGbG93KCkgPyBwYWRkaW5nTGVmdCgpIDogcGFkZGluZ1Jp
Z2h0KCk7CisgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHRGbG93KCkgPyBwYWRkaW5nVG9wKCkgOiBw
YWRkaW5nQm90dG9tKCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTWF0aE1MQmxvY2s6OmZsb3dB
d2FyZVBhZGRpbmdFbmQoKSBjb25zdAoreworICAgIGlmIChpc0hvcml6b250YWxGbG93KCkpCisg
ICAgICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RmxvdygpID8gcGFkZGluZ1JpZ2h0KCkgOiBwYWRk
aW5nTGVmdCgpOworICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RmxvdygpID8gcGFkZGluZ0JvdHRv
bSgpIDogcGFkZGluZ1RvcCgpOworfQorCitMYXlvdXRVbml0IFJlbmRlck1hdGhNTEJsb2NrOjpm
bG93QXdhcmVNYXJnaW5TdGFydEZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQpIGNvbnN0Cit7Cisg
ICAgaWYgKGlzSG9yaXpvbnRhbEZsb3coKSkKKyAgICAgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHRG
bG93KCkgPyBjaGlsZC5tYXJnaW5MZWZ0KCkgOiBjaGlsZC5tYXJnaW5SaWdodCgpOworICAgIHJl
dHVybiBpc0xlZnRUb1JpZ2h0RmxvdygpID8gY2hpbGQubWFyZ2luVG9wKCkgOiBjaGlsZC5tYXJn
aW5Cb3R0b20oKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxCbG9jazo6Zmxvd0F3YXJl
TWFyZ2luRW5kRm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKK3sKKyAgICBpZiAoaXNI
b3Jpem9udGFsRmxvdygpKQorICAgICAgICByZXR1cm4gaXNMZWZ0VG9SaWdodEZsb3coKSA/IGNo
aWxkLm1hcmdpblJpZ2h0KCkgOiBjaGlsZC5tYXJnaW5MZWZ0KCk7CisgICAgcmV0dXJuIGlzTGVm
dFRvUmlnaHRGbG93KCkgPyBjaGlsZC5tYXJnaW5Cb3R0b20oKSA6IGNoaWxkLm1hcmdpblRvcCgp
OworfQorCitMYXlvdXRVbml0IFJlbmRlck1hdGhNTEJsb2NrOjpmbG93QXdhcmVNYXJnaW5CZWZv
cmVGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAoreworICAgIHN3aXRjaCAodHJhbnNm
b3JtZWRXcml0aW5nTW9kZSgpKSB7CisgICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlOgor
ICAgICAgICByZXR1cm4gY2hpbGQubWFyZ2luVG9wKCk7CisgICAgY2FzZSBCb3R0b21Ub1RvcFdy
aXRpbmdNb2RlOgorICAgICAgICByZXR1cm4gY2hpbGQubWFyZ2luQm90dG9tKCk7CisgICAgY2Fz
ZSBMZWZ0VG9SaWdodFdyaXRpbmdNb2RlOgorICAgICAgICByZXR1cm4gY2hpbGQubWFyZ2luTGVm
dCgpOworICAgIGNhc2UgUmlnaHRUb0xlZnRXcml0aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIGNo
aWxkLm1hcmdpblJpZ2h0KCk7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBtYXJnaW5Ub3AoKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxCbG9jazo6
Zmxvd0F3YXJlTWFyZ2luQWZ0ZXJGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAorewor
ICAgIHN3aXRjaCAodHJhbnNmb3JtZWRXcml0aW5nTW9kZSgpKSB7CisgICAgY2FzZSBUb3BUb0Jv
dHRvbVdyaXRpbmdNb2RlOgorICAgICAgICByZXR1cm4gY2hpbGQubWFyZ2luQm90dG9tKCk7Cisg
ICAgY2FzZSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlOgorICAgICAgICByZXR1cm4gY2hpbGQubWFy
Z2luVG9wKCk7CisgICAgY2FzZSBMZWZ0VG9SaWdodFdyaXRpbmdNb2RlOgorICAgICAgICByZXR1
cm4gY2hpbGQubWFyZ2luUmlnaHQoKTsKKyAgICBjYXNlIFJpZ2h0VG9MZWZ0V3JpdGluZ01vZGU6
CisgICAgICAgIHJldHVybiBjaGlsZC5tYXJnaW5MZWZ0KCk7CisgICAgfQorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBtYXJnaW5Cb3R0b20oKTsKK30KKworV3JpdGluZ01v
ZGUgUmVuZGVyTWF0aE1MQmxvY2s6OnRyYW5zZm9ybWVkV3JpdGluZ01vZGUoKSBjb25zdAorewor
ICAgIFdyaXRpbmdNb2RlIG1vZGUgPSBzdHlsZSgpLndyaXRpbmdNb2RlKCk7CisgICAgaWYgKCFp
c0NvbHVtbkZsb3coKSkKKyAgICAgICAgcmV0dXJuIG1vZGU7CisKKyAgICBzd2l0Y2ggKG1vZGUp
IHsKKyAgICBjYXNlIFRvcFRvQm90dG9tV3JpdGluZ01vZGU6CisgICAgY2FzZSBCb3R0b21Ub1Rv
cFdyaXRpbmdNb2RlOgorICAgICAgICByZXR1cm4gc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgPyBMZWZ0VG9SaWdodFdyaXRpbmdNb2RlIDogUmlnaHRUb0xlZnRXcml0aW5nTW9kZTsK
KyAgICBjYXNlIExlZnRUb1JpZ2h0V3JpdGluZ01vZGU6CisgICAgY2FzZSBSaWdodFRvTGVmdFdy
aXRpbmdNb2RlOgorICAgICAgICByZXR1cm4gc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgPyBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlIDogQm90dG9tVG9Ub3BXcml0aW5nTW9kZTsKKyAg
ICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFRvcFRvQm90dG9tV3Jp
dGluZ01vZGU7Cit9CisKK2Jvb2wgUmVuZGVyTWF0aE1MQmxvY2s6OmlzQ29sdW1uRmxvdygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHN0eWxlKCkuaXNDb2x1bW5GbGV4RGlyZWN0aW9uKCk7Cit9CisK
IH0gICAgCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxCbG9jay5oCmluZGV4IDZjYjZlN2JiODYyY2I1YzZhYzA5NTZkMmIyNjA1
ZjJlZGQ5MjQzNzMuLjU4YzM0YmMwMTI2ZGE4ZTllZGFjNTI0YTU4MTgxYTA4MzYxOGRkZDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxv
Y2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJs
b2NrLmgKQEAgLTYzLDExICs2MywzMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gQ3JlYXRlIGEg
bmV3IFJlbmRlck1hdGhNTEJsb2NrLCB3aXRoIGEgbmV3IHN0eWxlIGluaGVyaXRpbmcgZnJvbSB0
aGlzLT5zdHlsZSgpLgogICAgIFJlbmRlclB0cjxSZW5kZXJNYXRoTUxCbG9jaz4gY3JlYXRlQW5v
bnltb3VzTWF0aE1MQmxvY2soKTsKLSAgICAKKworcHJvdGVjdGVkOgorICAgIGJvb2wgaXNMZWZ0
VG9SaWdodEZsb3coKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGZsb3dBd2FyZUJvcmRlclN0YXJ0
KCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBmbG93QXdhcmVCb3JkZXJFbmQoKSBjb25zdDsKKyAg
ICBMYXlvdXRVbml0IGZsb3dBd2FyZVBhZGRpbmdTdGFydCgpIGNvbnN0OworICAgIExheW91dFVu
aXQgZmxvd0F3YXJlUGFkZGluZ0VuZCgpIGNvbnN0OworICAgIExheW91dFVuaXQgZmxvd0F3YXJl
TWFyZ2luU3RhcnRGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjb25zdDsKKyAgICBMYXlvdXRV
bml0IGZsb3dBd2FyZU1hcmdpbkVuZEZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQpIGNvbnN0Owor
ICAgIExheW91dFVuaXQgZmxvd0F3YXJlTWFyZ2luQmVmb3JlRm9yQ2hpbGQoUmVuZGVyQm94JiBj
aGlsZCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBmbG93QXdhcmVNYXJnaW5BZnRlckZvckNoaWxk
KFJlbmRlckJveCYgY2hpbGQpIGNvbnN0OworICAgIGJvb2wgaGFzT3J0aG9nb25hbEZsb3coUmVu
ZGVyQm94JiBjaGlsZCkgY29uc3Q7CisKKyAgICBMYXlvdXRVbml0IG1haW5BeGlzQm9yZGVyQW5k
UGFkZGluZ0V4dGVudEZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQpIGNvbnN0OworICAgIE9wdGlv
bmFsPExheW91dFVuaXQ+IGNvbXB1dGVNYWluQXhpc0V4dGVudEZvckNoaWxkKFJlbmRlckJveCYg
Y2hpbGQsIFNpemVUeXBlLCBjb25zdCBMZW5ndGgmIHNpemUpOworICAgIExheW91dFVuaXQgcHJl
ZmVycmVkTWFpbkF4aXNDb250ZW50RXh0ZW50Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgYm9v
bCBoYXNJbmZpbml0ZUxpbmVMZW5ndGgpOworCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBp
c1JlbmRlck1hdGhNTEJsb2NrKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIGJvb2wgaXNGbGV4aWJsZUJveEltcGwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CisgICAgYm9vbCBpc0NvbHVtbkZsb3coKSBjb25zdDsKKyAgICBXcml0aW5nTW9kZSB0cmFu
c2Zvcm1lZFdyaXRpbmdNb2RlKCkgY29uc3Q7CisKKyAgICBib29sIGNvbXB1dGVQcmVmZXJyZWRN
YWluQXhpc0V4dGVudChMYXlvdXRVbml0JiBwcmVmZXJyZWRNYWluQXhpc0V4dGVudCk7CiB9Owog
CiBjbGFzcyBSZW5kZXJNYXRoTUxUYWJsZSBmaW5hbCA6IHB1YmxpYyBSZW5kZXJUYWJsZSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJv
dy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5j
cHAKaW5kZXggNWNmMmM5ZGRjNGM4N2UyZGNjNDdmNTBiODJkNjg4MmY1NzU4NzcwMi4uM2M3ZGJl
ZTVhZDVmMGQ5NjQ3NWMyOGRmMmFhNjU3MDUwNzQ3MWI0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcApAQCAtMzEsOCArMzEs
MTAgQEAKIAogI2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0
b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlck1hdGhNTE9w
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWF0aE1MUm9vdC5oIgorI2luY2x1ZGUgIlJlbmRl
clZpZXcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MCw3ICs1Miw3IEBAIFJlbmRl
ck1hdGhNTFJvdzo6UmVuZGVyTWF0aE1MUm93KERvY3VtZW50JiBkb2N1bWVudCwgUmVmPFJlbmRl
clN0eWxlPiYmIHN0eWxlKQogCiBSZW5kZXJQdHI8UmVuZGVyTWF0aE1MUm93PiBSZW5kZXJNYXRo
TUxSb3c6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihSZW5kZXJNYXRoTUxSb290
JiBwYXJlbnQpCiB7Ci0gICAgUmVuZGVyUHRyPFJlbmRlck1hdGhNTFJvdz4gbmV3TVJvdyA9IGNy
ZWF0ZVJlbmRlcmVyPFJlbmRlck1hdGhNTFJvdz4ocGFyZW50LmRvY3VtZW50KCksIFJlbmRlclN0
eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KCZwYXJlbnQuc3R5bGUoKSwgRkxF
WCkpOworICAgIFJlbmRlclB0cjxSZW5kZXJNYXRoTUxSb3c+IG5ld01Sb3cgPSBjcmVhdGVSZW5k
ZXJlcjxSZW5kZXJNYXRoTUxSb3c+KHBhcmVudC5kb2N1bWVudCgpLCBSZW5kZXJTdHlsZTo6Y3Jl
YXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheSgmcGFyZW50LnN0eWxlKCksIEJMT0NLKSk7CiAg
ICAgbmV3TVJvdy0+aW5pdGlhbGl6ZVN0eWxlKCk7CiAgICAgcmV0dXJuIG5ld01Sb3c7CiB9CkBA
IC02Niw0NCArNjgsMTU5IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm93Ojp1cGRhdGVPcGVyYXRvclBy
b3BlcnRpZXMoKQogICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogfQog
Ci12b2lkIFJlbmRlck1hdGhNTFJvdzo6bGF5b3V0KCkKK3N0YXRpYyBpbmxpbmUgTGF5b3V0VW5p
dCBtYXJnaW5Cb3hBc2NlbnRGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKQogewotICAg
IGludCBzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IDAsIHN0cmV0Y2hEZXB0aEJlbG93QmFz
ZWxpbmUgPSAwOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGNoaWxk
LT5uZWVkc0xheW91dCgpKQotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oKmNo
aWxkKS5sYXlvdXQoKTsKLSAgICAgICAgaWYgKGlzPFJlbmRlck1hdGhNTEJsb2NrPigqY2hpbGQp
KSB7Ci0gICAgICAgICAgICAvLyBXZSBza2lwIHRoZSBzdHJldGNoeSBvcGVyYXRvcnMgYXMgdGhl
eSBtdXN0IG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgY29tcHV0YXRpb24gb2YgdGhlIHN0cmV0Y2gg
c2l6ZS4KLSAgICAgICAgICAgIGF1dG8qIHJlbmRlck9wZXJhdG9yID0gZG93bmNhc3Q8UmVuZGVy
TWF0aE1MQmxvY2s+KCpjaGlsZCkudW5lbWJlbGxpc2hlZE9wZXJhdG9yKCk7CisgICAgcmV0dXJu
IGNoaWxkLmZpcnN0TGluZUJhc2VsaW5lKCkudmFsdWVPcihjaGlsZC5oZWlnaHQoKSkgKyBjaGls
ZC5tYXJnaW5Ub3AoKTsKK30KKworT3B0aW9uYWw8aW50PiBSZW5kZXJNYXRoTUxSb3c6OmZpcnN0
TGluZUJhc2VsaW5lKCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJhc2VsaW5lQ2hpbGQgPSBm
aXJzdENoaWxkQm94KCk7CisgICAgaWYgKCFiYXNlbGluZUNoaWxkKQorICAgICAgICByZXR1cm4g
T3B0aW9uYWw8aW50PigpOworCisgICAgT3B0aW9uYWw8aW50PiBiYXNlbGluZSA9IGJhc2VsaW5l
Q2hpbGQtPmZpcnN0TGluZUJhc2VsaW5lKCk7CisgICAgaWYgKCFiYXNlbGluZSkKKyAgICAgICAg
cmV0dXJuIE9wdGlvbmFsPGludD4oYmFzZWxpbmVDaGlsZC0+Ym9yZGVyVG9wKCkgKyBiYXNlbGlu
ZUNoaWxkLT5wYWRkaW5nVG9wKCkgKyBiYXNlbGluZUNoaWxkLT5jb250ZW50SGVpZ2h0KCkgKyBi
YXNlbGluZUNoaWxkLT5sb2dpY2FsVG9wKCkpOworCisgICAgcmV0dXJuIE9wdGlvbmFsPGludD4o
YmFzZWxpbmUudmFsdWUoKSArIGJhc2VsaW5lQ2hpbGQtPmxvZ2ljYWxUb3AoKSk7Cit9CisKK3Zv
aWQgUmVuZGVyTWF0aE1MUm93OjpwcmVwYXJlQ2hpbGRGb3JQb3NpdGlvbmVkTGF5b3V0KFJlbmRl
ckJveCYgY2hpbGQsIExheW91dFVuaXQgaG9yaXpvbnRhbE9mZnNldCwgTGF5b3V0VW5pdCB2ZXJ0
aWNhbE9mZnNldCkKK3sKKyAgICBBU1NFUlQoY2hpbGQuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkp
OworICAgIGNoaWxkLmNvbnRhaW5pbmdCbG9jaygpLT5pbnNlcnRQb3NpdGlvbmVkT2JqZWN0KGNo
aWxkKTsKKyAgICBSZW5kZXJMYXllciogY2hpbGRMYXllciA9IGNoaWxkLmxheWVyKCk7CisgICAg
Y2hpbGRMYXllci0+c2V0U3RhdGljSW5saW5lUG9zaXRpb24oaG9yaXpvbnRhbE9mZnNldCk7CisK
KyAgICBpZiAoY2hpbGRMYXllci0+c3RhdGljQmxvY2tQb3NpdGlvbigpICE9IHZlcnRpY2FsT2Zm
c2V0KSB7CisgICAgICAgIGNoaWxkTGF5ZXItPnNldFN0YXRpY0Jsb2NrUG9zaXRpb24odmVydGlj
YWxPZmZzZXQpOworICAgICAgICBpZiAoY2hpbGQuc3R5bGUoKS5oYXNTdGF0aWNCbG9ja1Bvc2l0
aW9uKHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpCisgICAgICAgICAgICBjaGls
ZC5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CisgICAgfQorfQorCit2b2lkIFJl
bmRlck1hdGhNTFJvdzo6Y29tcHV0ZUxpbmVWZXJ0aWNhbFN0cmV0Y2goaW50JiBzdHJldGNoSGVp
Z2h0QWJvdmVCYXNlbGluZSwgaW50JiBzdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lKQoreworICAg
IC8vIEZJWE1FOiBXaGF0IGFib3V0IHRoZSBSZW5kZXJCbG9ja3M/CisgICAgZm9yIChSZW5kZXJC
b3gqIGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmdCb3goKSkgeworICAgICAgICBjaGlsZC0+bGF5b3V0SWZOZWVkZWQoKTsKKworICAgICAg
ICBpZiAoaXM8UmVuZGVyTWF0aE1MQmxvY2s+KGNoaWxkKSkgeworICAgICAgICAgICAgYXV0byog
cmVuZGVyT3BlcmF0b3IgPSBkb3duY2FzdDxSZW5kZXJNYXRoTUxCbG9jaz4oY2hpbGQpLT51bmVt
YmVsbGlzaGVkT3BlcmF0b3IoKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJPcGVyYXRvciAmJiBy
ZW5kZXJPcGVyYXRvci0+aGFzT3BlcmF0b3JGbGFnKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6
U3RyZXRjaHkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CisKICAgICAg
ICAgTGF5b3V0VW5pdCBjaGlsZEhlaWdodEFib3ZlQmFzZWxpbmUgPSAwLCBjaGlsZERlcHRoQmVs
b3dCYXNlbGluZSA9IDA7Ci0gICAgICAgIGlmIChpczxSZW5kZXJNYXRoTUxCbG9jaz4oKmNoaWxk
KSkgewotICAgICAgICAgICAgUmVuZGVyTWF0aE1MQmxvY2smIG1hdGhtbENoaWxkID0gZG93bmNh
c3Q8UmVuZGVyTWF0aE1MQmxvY2s+KCpjaGlsZCk7Ci0gICAgICAgICAgICBjaGlsZEhlaWdodEFi
b3ZlQmFzZWxpbmUgPSBtYXRobWxDaGlsZC5maXJzdExpbmVCYXNlbGluZSgpLnZhbHVlT3IobWF0
aG1sQ2hpbGQubG9naWNhbEhlaWdodCgpKTsKLSAgICAgICAgICAgIGNoaWxkRGVwdGhCZWxvd0Jh
c2VsaW5lID0gbWF0aG1sQ2hpbGQubG9naWNhbEhlaWdodCgpIC0gY2hpbGRIZWlnaHRBYm92ZUJh
c2VsaW5lOwotICAgICAgICB9IGVsc2UgaWYgKGlzPFJlbmRlck1hdGhNTFRhYmxlPigqY2hpbGQp
KSB7Ci0gICAgICAgICAgICBSZW5kZXJNYXRoTUxUYWJsZSYgdGFibGVDaGlsZCA9IGRvd25jYXN0
PFJlbmRlck1hdGhNTFRhYmxlPigqY2hpbGQpOwotICAgICAgICAgICAgY2hpbGRIZWlnaHRBYm92
ZUJhc2VsaW5lID0gdGFibGVDaGlsZC5maXJzdExpbmVCYXNlbGluZSgpLnZhbHVlT3IoLTEpOwot
ICAgICAgICAgICAgY2hpbGREZXB0aEJlbG93QmFzZWxpbmUgPSB0YWJsZUNoaWxkLmxvZ2ljYWxI
ZWlnaHQoKSAtIGNoaWxkSGVpZ2h0QWJvdmVCYXNlbGluZTsKLSAgICAgICAgfSBlbHNlIGlmIChp
czxSZW5kZXJCb3g+KCpjaGlsZCkpIHsKLSAgICAgICAgICAgIGNoaWxkSGVpZ2h0QWJvdmVCYXNl
bGluZSA9IGRvd25jYXN0PFJlbmRlckJveD4oKmNoaWxkKS5sb2dpY2FsSGVpZ2h0KCk7CisgICAg
ICAgIGlmIChpczxSZW5kZXJNYXRoTUxCbG9jaz4oY2hpbGQpKSB7CisgICAgICAgICAgICBSZW5k
ZXJNYXRoTUxCbG9jayogbWF0aG1sQ2hpbGQgPSBkb3duY2FzdDxSZW5kZXJNYXRoTUxCbG9jaz4o
Y2hpbGQpOworICAgICAgICAgICAgY2hpbGRIZWlnaHRBYm92ZUJhc2VsaW5lID0gbWF0aG1sQ2hp
bGQtPmZpcnN0TGluZUJhc2VsaW5lKCkudmFsdWVPcihtYXRobWxDaGlsZC0+bG9naWNhbEhlaWdo
dCgpKTsKKyAgICAgICAgICAgIGNoaWxkRGVwdGhCZWxvd0Jhc2VsaW5lID0gbWF0aG1sQ2hpbGQt
PmxvZ2ljYWxIZWlnaHQoKSAtIGNoaWxkSGVpZ2h0QWJvdmVCYXNlbGluZTsKKyAgICAgICAgfSBl
bHNlIGlmIChpczxSZW5kZXJNYXRoTUxUYWJsZT4oY2hpbGQpKSB7CisgICAgICAgICAgICBSZW5k
ZXJNYXRoTUxUYWJsZSogdGFibGVDaGlsZCA9IGRvd25jYXN0PFJlbmRlck1hdGhNTFRhYmxlPihj
aGlsZCk7CisgICAgICAgICAgICBjaGlsZEhlaWdodEFib3ZlQmFzZWxpbmUgPSB0YWJsZUNoaWxk
LT5maXJzdExpbmVCYXNlbGluZSgpLnZhbHVlT3IoLTEpOworICAgICAgICAgICAgY2hpbGREZXB0
aEJlbG93QmFzZWxpbmUgPSB0YWJsZUNoaWxkLT5sb2dpY2FsSGVpZ2h0KCkgLSBjaGlsZEhlaWdo
dEFib3ZlQmFzZWxpbmU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaGlsZEhlaWdo
dEFib3ZlQmFzZWxpbmUgPSBjaGlsZC0+bG9naWNhbEhlaWdodCgpOwogICAgICAgICAgICAgY2hp
bGREZXB0aEJlbG93QmFzZWxpbmUgPSAwOwogICAgICAgICB9CiAgICAgICAgIHN0cmV0Y2hIZWln
aHRBYm92ZUJhc2VsaW5lID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oc3RyZXRjaEhlaWdodEFib3Zl
QmFzZWxpbmUsIGNoaWxkSGVpZ2h0QWJvdmVCYXNlbGluZSk7CiAgICAgICAgIHN0cmV0Y2hEZXB0
aEJlbG93QmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihzdHJldGNoRGVwdGhCZWxvd0Jh
c2VsaW5lLCBjaGlsZERlcHRoQmVsb3dCYXNlbGluZSk7CiAgICAgfQorCiAgICAgaWYgKHN0cmV0
Y2hIZWlnaHRBYm92ZUJhc2VsaW5lICsgc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSA8PSAwKQog
ICAgICAgICBzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IHN0eWxlKCkuZm9udFNpemUoKTsK
LSAgICAKLSAgICAvLyBTZXQgdGhlIHNpemVzIG9mIChwb3NzaWJseSBlbWJlbGxpc2hlZCkgc3Ry
ZXRjaHkgb3BlcmF0b3IgY2hpbGRyZW4uCi0gICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVu
T2ZUeXBlPFJlbmRlck1hdGhNTEJsb2NrPigqdGhpcykpIHsKLSAgICAgICAgaWYgKGF1dG8gcmVu
ZGVyT3BlcmF0b3IgPSBjaGlsZC51bmVtYmVsbGlzaGVkT3BlcmF0b3IoKSkKLSAgICAgICAgICAg
IHJlbmRlck9wZXJhdG9yLT5zdHJldGNoVG8oc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUsIHN0
cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUpOworfQorCit2b2lkIFJlbmRlck1hdGhNTFJvdzo6bGF5
b3V0Um93SXRlbXMoaW50IHN0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCBpbnQgc3RyZXRjaERl
cHRoQmVsb3dCYXNlbGluZSkKK3sKKyAgICBib29sIGhhc0luZmluaXRlTGluZUxlbmd0aCA9IHRy
dWU7CisKKyAgICBMYXlvdXRVbml0IGhvcml6b250YWxPZmZzZXQgPSBmbG93QXdhcmVCb3JkZXJT
dGFydCgpICsgZmxvd0F3YXJlUGFkZGluZ1N0YXJ0KCk7CisgICAgTGF5b3V0VW5pdCB2ZXJ0aWNh
bE9mZnNldCA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpOworICAgIExheW91dFVuaXQgbWF4
QXNjZW50ID0gMCwgbWF4RGVzY2VudCA9IDA7IC8vIFVzZWQgYmFzZWxpbmUgYWxpZ25tZW50Lgor
ICAgIGJvb2wgc2hvdWxkRmxpcEhvcml6b250YWwgPSAhaXNMZWZ0VG9SaWdodEZsb3coKTsKKwor
ICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5pc091dE9m
Rmxvd1Bvc2l0aW9uZWQoKSkgeworICAgICAgICAgICAgcHJlcGFyZUNoaWxkRm9yUG9zaXRpb25l
ZExheW91dCgqY2hpbGQsIGhvcml6b250YWxPZmZzZXQsIHZlcnRpY2FsT2Zmc2V0KTsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzPFJlbmRlck1hdGhN
TEJsb2NrPihjaGlsZCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHJlbmRlck9wZXJhdG9yID0g
ZG93bmNhc3Q8UmVuZGVyTWF0aE1MQmxvY2s+KGNoaWxkKS0+dW5lbWJlbGxpc2hlZE9wZXJhdG9y
KCkpCisgICAgICAgICAgICAgICAgcmVuZGVyT3BlcmF0b3ItPnN0cmV0Y2hUbyhzdHJldGNoSGVp
Z2h0QWJvdmVCYXNlbGluZSwgc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSk7CisgICAgICAgIH0K
KworICAgICAgICBMYXlvdXRVbml0IGNoaWxkSG9yaXpvbnRhbEV4dGVudCA9IHByZWZlcnJlZE1h
aW5BeGlzQ29udGVudEV4dGVudEZvckNoaWxkKCpjaGlsZCwgaGFzSW5maW5pdGVMaW5lTGVuZ3Ro
KTsKKyAgICAgICAgTGF5b3V0VW5pdCBjaGlsZEhvcml6b250YWxNYXJnaW5Cb3hFeHRlbnQgPSBj
aGlsZC0+aG9yaXpvbnRhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSArIGNoaWxkSG9yaXpvbnRh
bEV4dGVudDsKKyAgICAgICAgY2hpbGQtPnNldE92ZXJyaWRlTG9naWNhbENvbnRlbnRXaWR0aChj
aGlsZEhvcml6b250YWxFeHRlbnQpOworCisgICAgICAgIGlmIChjaGlsZEhvcml6b250YWxFeHRl
bnQgIT0gY2hpbGQtPndpZHRoKCkpCisgICAgICAgICAgICBjaGlsZC0+c2V0Q2hpbGROZWVkc0xh
eW91dChNYXJrT25seVRoaXMpOworCisgICAgICAgIGNoaWxkLT5sYXlvdXRJZk5lZWRlZCgpOwor
CisgICAgICAgIExheW91dFVuaXQgYXNjZW50ID0gV2ViQ29yZTo6bWFyZ2luQm94QXNjZW50Rm9y
Q2hpbGQoKmNoaWxkKTsKKyAgICAgICAgTGF5b3V0VW5pdCBkZXNjZW50ID0gY2hpbGQtPnZlcnRp
Y2FsTWFyZ2luRXh0ZW50KCkgKyBjaGlsZC0+aGVpZ2h0KCkgLSBhc2NlbnQ7CisgICAgICAgIG1h
eEFzY2VudCA9IHN0ZDo6bWF4KG1heEFzY2VudCwgYXNjZW50KTsKKyAgICAgICAgbWF4RGVzY2Vu
dCA9IHN0ZDo6bWF4KG1heERlc2NlbnQsIGRlc2NlbnQpOworICAgICAgICBMYXlvdXRVbml0IGNo
aWxkVmVydGljYWxNYXJnaW5Cb3hFeHRlbnQgPSBtYXhBc2NlbnQgKyBtYXhEZXNjZW50OworCisg
ICAgICAgIGhvcml6b250YWxPZmZzZXQgKz0gZmxvd0F3YXJlTWFyZ2luU3RhcnRGb3JDaGlsZCgq
Y2hpbGQpOworCisgICAgICAgIHNldExvZ2ljYWxIZWlnaHQoc3RkOjptYXgobG9naWNhbEhlaWdo
dCgpLCB2ZXJ0aWNhbE9mZnNldCArIGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ0JvdHRvbSgpICsg
Y2hpbGRWZXJ0aWNhbE1hcmdpbkJveEV4dGVudCArIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQo
KSkpOworCisgICAgICAgIExheW91dFBvaW50IGNoaWxkTG9jYXRpb24oc2hvdWxkRmxpcEhvcml6
b250YWwgPyB3aWR0aCgpIC0gaG9yaXpvbnRhbE9mZnNldCAtIGNoaWxkSG9yaXpvbnRhbEV4dGVu
dCA6IGhvcml6b250YWxPZmZzZXQsIHZlcnRpY2FsT2Zmc2V0ICsgY2hpbGQtPm1hcmdpblRvcCgp
KTsKKyAgICAgICAgY2hpbGQtPnNldExvY2F0aW9uKGNoaWxkTG9jYXRpb24pOworCisgICAgICAg
IGhvcml6b250YWxPZmZzZXQgKz0gY2hpbGRIb3Jpem9udGFsTWFyZ2luQm94RXh0ZW50ICsgZmxv
d0F3YXJlTWFyZ2luRW5kRm9yQ2hpbGQoKmNoaWxkKTsKKyAgICB9CisKKyAgICBMYXlvdXRVbml0
IGNlbnRlckJsb2NrT2Zmc2V0ID0gMDsKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBGTEVYIHdo
ZW4gaXQgaXMgbm90IHJlcXVpcmVkIGJ5IHRoZSBjc3MuCisgICAgaWYgKHN0eWxlKCkuZGlzcGxh
eSgpID09IEJMT0NLIHx8IHN0eWxlKCkuZGlzcGxheSgpID09IEZMRVgpCisgICAgICAgIGNlbnRl
ckJsb2NrT2Zmc2V0ID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgKHdpZHRoKCkgLSAoaG9yaXpv
bnRhbE9mZnNldCArIGZsb3dBd2FyZUJvcmRlclN0YXJ0KCkgKyBmbG93QXdhcmVQYWRkaW5nU3Rh
cnQoKSkpIC8gMik7CisKKyAgICBpZiAoc2hvdWxkRmxpcEhvcml6b250YWwgJiYgY2VudGVyQmxv
Y2tPZmZzZXQgPiAwKQorICAgICAgICBjZW50ZXJCbG9ja09mZnNldCA9IC0gY2VudGVyQmxvY2tP
ZmZzZXQ7CisKKyAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKSB7CisgICAgICAgIExheW91dFVu
aXQgYXNjZW50ID0gV2ViQ29yZTo6bWFyZ2luQm94QXNjZW50Rm9yQ2hpbGQoKmNoaWxkKTsKKyAg
ICAgICAgTGF5b3V0VW5pdCBzdGFydE9mZnNldCA9IG1heEFzY2VudCAtIGFzY2VudDsKKyAgICAg
ICAgY2hpbGQtPnNldExvY2F0aW9uKGNoaWxkLT5sb2NhdGlvbigpICsgTGF5b3V0UG9pbnQoY2Vu
dGVyQmxvY2tPZmZzZXQsIHN0YXJ0T2Zmc2V0KSk7CiAgICAgfQorfQorCit2b2lkIFJlbmRlck1h
dGhNTFJvdzo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0KQor
eworICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKKworICAgIGlmICghcmVsYXlvdXRDaGlsZHJl
biAmJiBzaW1wbGlmaWVkTGF5b3V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBzdHJl
dGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IDA7CisgICAgaW50IHN0cmV0Y2hEZXB0aEJlbG93QmFz
ZWxpbmUgPSAwOworICAgIGNvbXB1dGVMaW5lVmVydGljYWxTdHJldGNoKHN0cmV0Y2hIZWlnaHRB
Ym92ZUJhc2VsaW5lLCBzdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lKTsKKworICAgIHJlY29tcHV0
ZUxvZ2ljYWxXaWR0aCgpOworCisgICAgc2V0TG9naWNhbEhlaWdodChib3JkZXJBbmRQYWRkaW5n
TG9naWNhbEhlaWdodCgpICsgc2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpKTsKIAotICAgIFJlbmRl
ck1hdGhNTEJsb2NrOjpsYXlvdXQoKTsKKyAgICBsYXlvdXRSb3dJdGVtcyhzdHJldGNoSGVpZ2h0
QWJvdmVCYXNlbGluZSwgc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSk7CisKKyAgICB1cGRhdGVM
b2dpY2FsSGVpZ2h0KCk7CisKKyAgICBjbGVhck5lZWRzTGF5b3V0KCk7Cit9CisKK3ZvaWQgUmVu
ZGVyTWF0aE1MUm93OjpwYWludENoaWxkcmVuKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBM
YXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIFBhaW50SW5mbyYgcGFpbnRJbmZvRm9yQ2hpbGQsIGJv
b2wgdXNlUHJpbnRSZWN0KQoreworICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0Q2hp
bGRCb3goKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsKKyAgICAg
ICAgaWYgKCFwYWludENoaWxkKCpjaGlsZCwgcGFpbnRJbmZvLCBwYWludE9mZnNldCwgcGFpbnRJ
bmZvRm9yQ2hpbGQsIHVzZVByaW50UmVjdCwgUGFpbnRBc0lubGluZUJsb2NrKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICB9CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5oCmluZGV4IDA2NDA4YjVkOTZkYmIzNGQ3OGU1ODIy
MWRkMmRkZjc3NmQzNDFhZGYuLjIyMzU3Mjc5YTg1YzM3ZWFmOTg2MWFlNTg1YmUzZmM4YWYzOGZj
MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MUm93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxSb3cuaApAQCAtNDIsMTIgKzQyLDE3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVuZGVyUHRy
PFJlbmRlck1hdGhNTFJvdz4gY3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKFJlbmRl
ck1hdGhNTFJvb3QmKTsKICAgICB2b2lkIHVwZGF0ZU9wZXJhdG9yUHJvcGVydGllcygpOwogCi1w
cm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGxheW91dCgpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFn
ZUxvZ2ljYWxIZWlnaHQgPSAwKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRDaGlsZHJlbihQYWludEluZm8mIGZvclNlbGYsIGNvbnN0IExheW91dFBvaW50JiwgUGFpbnRJ
bmZvJiBmb3JDaGlsZCwgYm9vbCB1c2VQcmludFJlY3QpIG92ZXJyaWRlIGZpbmFsOworICAgIHZp
cnR1YWwgT3B0aW9uYWw8aW50PiBmaXJzdExpbmVCYXNlbGluZSgpIGNvbnN0IG92ZXJyaWRlOwog
CiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlck1hdGhNTFJvdygpIGNvbnN0IG92
ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJl
bmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBpc0Fub255bW91cygpID8gIlJlbmRl
ck1hdGhNTFJvdyAoYW5vbnltb3VzKSIgOiAiUmVuZGVyTWF0aE1MUm93IjsgfQorCisgICAgdm9p
ZCBsYXlvdXRSb3dJdGVtcyhpbnQgc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUsIGludCBzdHJl
dGNoRGVwdGhCZWxvd0Jhc2VsaW5lKTsKKyAgICB2b2lkIHByZXBhcmVDaGlsZEZvclBvc2l0aW9u
ZWRMYXlvdXQoUmVuZGVyQm94JiwgTGF5b3V0VW5pdCBtYWluQXhpc09mZnNldCwgTGF5b3V0VW5p
dCBjcm9zc0F4aXNPZmZzZXQpOworICAgIHZvaWQgY29tcHV0ZUxpbmVWZXJ0aWNhbFN0cmV0Y2go
aW50JiBzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSwgaW50JiBzdHJldGNoRGVwdGhCZWxvd0Jh
c2VsaW5lKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>270850</attachid>
            <date>2016-02-08 01:54:43 -0800</date>
            <delta_ts>2016-02-08 01:54:43 -0800</delta_ts>
            <desc>testcase Arabic characters</desc>
            <filename>arabic.html</filename>
            <type>text/html</type>
            <size>538</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkFyYWJpYyB0ZXN0Y2Fz
ZTwvdGl0bGU+CiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPgogICAgPHN0eWxlPgogICAgICAu
YzEgewogICAgICAgIGJhY2tncm91bmQ6IHJlZDsKICAgICAgICAtd2Via2l0LWxpbmUtYm94LWNv
bnRhaW46IGdseXBocyByZXBsYWNlZDsKICAgICAgfQogICAgICAuYzIgewogICAgICAgIGJhY2tn
cm91bmQ6IGdyZWVuOwogICAgICB9CiAgICAgIC5jMyB7CiAgICAgICAgYmFja2dyb3VuZDogYmx1
ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CgogICAgPHAgY2xhc3M9
ImMxIj7YujwvcD4KICAgIDxwIGNsYXNzPSJjMSI+eTwvcD4KICAgIDxwIGNsYXNzPSJjMiI+2Lo8
L3A+CiAgICA8cCBjbGFzcz0iYzIiPnk8L3A+CiAgICA8cD48bWF0aD48bWkgY2xhc3M9ImMzIj7Y
ujwvbWk+PC9tYXRoPjwvcD4KICAgIDxwPjxtYXRoPjxtaSBjbGFzcz0iYzMiPnk8L21pPjwvbWF0
aD48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271160</attachid>
            <date>2016-02-12 03:29:53 -0800</date>
            <delta_ts>2016-02-12 03:57:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153208-20160212122931.patch</filename>
            <type>text/plain</type>
            <size>23140</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2MzA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjAyOWM0Nzc4ZjVmNDYw
MjNhYTU2ZGRkZjgyMzk5MGJhNTdmM2VkOC4uZTE4ZmUxMjY0MjJlMWRmNzFiNjM1YzU1ZGM4ZGU1
ZThjNWY5MzkwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDE2LTAyLTEyICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFJlZmFjdG9yIFJl
bmRlck1hdGhNTFJvdyBsYXlvdXQgZnVuY3Rpb25zIHRvIGF2b2lkIHVzaW5nIGZsZXhib3gKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzIwOAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgdGhl
IGZpcnN0IHBhdGNoIGluIHRoZSBzZXQgdG8gcmVtb3ZlIHRoZSBmbGV4Ym94CisgICAgICAgIGRl
cGVuZGVuY3kgb2YgdGhlIE1hdGhNTCBsYXlvdXQgd2l0aG91dCBjaGFuZ2luZyB0aGUgcmVuZGVy
IHRyZWUKKyAgICAgICAgc3RydWN0dXJlLiBXZSBoYXZlIGFkZGVkIHNvbWUgZnVuY3Rpb25zIGZv
IHRoZSBSZW5kZXJNYXRoTUxCbG9jaworICAgICAgICB1c2VkIGluIHRoZSBuZXh0IHBhdGNoZXMs
IGFsc28gd2UgaGF2ZSBhbGxvd2VkIHRoZSBvdmVycmlkZSBvZiB0aGUKKyAgICAgICAgbGF5b3V0
QmxvY2sgZnVuY3Rpb24gaW4gdGhlIEZsZXhCb3ggY2xhc3MgdGhhdCB3ZSB3aWxsIHJlbW92ZSBp
bgorICAgICAgICB0aGUgbGFzdCBwYXRjaC4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5oOiBBbGxvdyBvdmVycmlkZXIgb2YgdGhlCisgICAgICAgIExheW91dEJsb2Nr
IGZvciB0aGUgbW9tZW50LgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
QmxvY2suY3BwOiBBZGRlZCBmdW5jdGlvbnMgdG8KKyAgICAgICAgY2FsY3VsYXRlIHNvbWUgZGlz
dGFuY2VzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6OmNvbXB1dGVNYWlu
QXhpc0V4dGVudEZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJsb2Nr
OjpoYXNPcnRob2dvbmFsRmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9j
azo6bWFpbkF4aXNCb3JkZXJBbmRQYWRkaW5nRXh0ZW50Rm9yQ2hpbGQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6OnByZWZlcnJlZE1haW5BeGlzQ29udGVudEV4dGVudEZv
ckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJsb2NrOjppc0xlZnRUb1Jp
Z2h0Rmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6Zmxvd0F3YXJl
Qm9yZGVyU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6OmZsb3dB
d2FyZUJvcmRlckVuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6Zmxv
d0F3YXJlUGFkZGluZ1N0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJsb2Nr
OjpmbG93QXdhcmVQYWRkaW5nRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJs
b2NrOjpmbG93QXdhcmVNYXJnaW5TdGFydEZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck1hdGhNTEJsb2NrOjpmbG93QXdhcmVNYXJnaW5FbmRGb3JDaGlsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6Zmxvd0F3YXJlTWFyZ2luQmVmb3JlRm9yQ2hpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6OmZsb3dBd2FyZU1hcmdpbkFm
dGVyRm9yQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6OnRyYW5z
Zm9ybWVkV3JpdGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6
OmlzQ29sdW1uRmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxC
bG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcDog
UmVpbXBsZW1lbnQgTGF5b3V0QmxvY2sKKyAgICAgICAgd2l0aG91dCB1c2luZyB0aGUgZmxleGJv
eCBsYXlvdXQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb3c6OmNyZWF0ZUFub255
bW91c1dpdGhQYXJlbnRSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjptYXJnaW5Cb3hBc2Nl
bnRGb3JDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb3c6OmZpcnN0TGlu
ZUJhc2VsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvdzo6cHJlcGFyZUNo
aWxkRm9yUG9zaXRpb25lZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxS
b3c6OmNvbXB1dGVMaW5lVmVydGljYWxTdHJldGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck1hdGhNTFJvdzo6bGF5b3V0Um93SXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0
aE1MUm93OjpsYXlvdXRCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb3c6
OnBhaW50Q2hpbGRyZW4pOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
Um93Lmg6CisKIDIwMTYtMDItMDggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBBdHRyaWJ1dGUgZ2V0dGVycyBzaG91bGQgbm90IHJlcXVpcmUgYW4gZXhwbGljaXQg
J3RoaXMnIHZhbHVlIGZvciBXaW5kb3cgcHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAppbmRleCA5YmFlMzE2YWFmMzdkMGVkMjRhMTAzMjYx
MGI5ZjdmNzAxN2YzNWUwLi45ZmQ5MmMyYzVlYTA4ZWQyYjhkMzJmMTBlMDJlMjU5NTRhNDgwN2I1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3gu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaApAQCAt
NDYsNyArNDYsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgYXZvaWRzRmxvYXRzKCkg
Y29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBj
YW5Ecm9wQW5vbnltb3VzQmxvY2tDaGlsZCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGls
ZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IDApIG92ZXJyaWRlIGZpbmFsOwor
ICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91
dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgaW50
IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIGZpcnN0TGluZSwgTGluZURpcmVj
dGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNv
bnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgT3B0aW9uYWw8aW50PiBmaXJzdExpbmVCYXNlbGlu
ZSgpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAppbmRleCAxZjQyNmI4NGU4ZmM4ZmQ5ZDc4NjYw
N2E3OGIyZWYyZjFkZTcwNmI0Li4yMTkyZDY3Mjc4NjY4MTJhZWU3MmMwYjZlZGQ1YzkwZDI1MjJk
ZGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTEJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTEJsb2NrLmNwcApAQCAtMzA2LDYgKzMwNiwxNTQgQEAgT3B0aW9uYWw8aW50PiBSZW5k
ZXJNYXRoTUxUYWJsZTo6Zmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdAogICAgIHJldHVybiAobG9n
aWNhbEhlaWdodCgpICsgc3R5bGUoKS5mb250TWV0cmljcygpLnhIZWlnaHQoKSkgLyAyOwogfQog
CitPcHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJNYXRoTUxCbG9jazo6Y29tcHV0ZU1haW5BeGlz
RXh0ZW50Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgU2l6ZVR5cGUgc2l6ZVR5cGUsIGNvbnN0
IExlbmd0aCYgc2l6ZSkKK3sKKyAgICBpZiAoaXNDb2x1bW5GbG93KCkpIHsKKyAgICAgICAgLy8g
V2UgZG9uJ3QgaGF2ZSB0byBjaGVjayBmb3IgImF1dG8iIGhlcmUgLSBjb21wdXRlQ29udGVudExv
Z2ljYWxIZWlnaHQgd2lsbCBqdXN0IHJldHVybiBOdWxsb3B0IGZvciB0aGF0IGNhc2UgYW55d2F5
LgorICAgICAgICBpZiAoc2l6ZS5pc0ludHJpbnNpYygpKQorICAgICAgICAgICAgY2hpbGQubGF5
b3V0SWZOZWVkZWQoKTsKKyAgICAgICAgcmV0dXJuIGNoaWxkLmNvbXB1dGVDb250ZW50TG9naWNh
bEhlaWdodChzaXplVHlwZSwgc2l6ZSwgY2hpbGQubG9naWNhbEhlaWdodCgpIC0gY2hpbGQuYm9y
ZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSk7CisgICAgfQorICAgIC8vIEZJWE1FOiBGaWd1
cmUgb3V0IGhvdyB0aGlzIHNob3VsZCB3b3JrIGZvciByZWdpb25zIGFuZCBwYXNzIGluIHRoZSBh
cHByb3ByaWF0ZSB2YWx1ZXMuCisgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSBudWxscHRyOwor
ICAgIHJldHVybiBjaGlsZC5jb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb25Vc2luZyhzaXplVHlw
ZSwgc2l6ZSwgY29udGVudExvZ2ljYWxXaWR0aCgpLCB0aGlzLCByZWdpb24pIC0gY2hpbGQuYm9y
ZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpOworfQorCitib29sIFJlbmRlck1hdGhNTEJsb2Nr
OjpoYXNPcnRob2dvbmFsRmxvdyhSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAoreworICAgIC8vIEZJ
WE1FOiBJZiB0aGUgY2hpbGQgaXMgYSBmbGV4Ym94LCB0aGVuIHdlIG5lZWQgdG8gY2hlY2sgaXNI
b3Jpem9udGFsRmxvdy4KKyAgICByZXR1cm4gaXNIb3Jpem9udGFsRmxvdygpICE9IGNoaWxkLmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTWF0aE1MQmxv
Y2s6Om1haW5BeGlzQm9yZGVyQW5kUGFkZGluZ0V4dGVudEZvckNoaWxkKFJlbmRlckJveCYgY2hp
bGQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzSG9yaXpvbnRhbEZsb3coKSA/IGNoaWxkLmhvcml6
b250YWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkgOiBjaGlsZC52ZXJ0aWNhbEJvcmRlckFuZFBh
ZGRpbmdFeHRlbnQoKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxCbG9jazo6cHJlZmVy
cmVkTWFpbkF4aXNDb250ZW50RXh0ZW50Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgYm9vbCBo
YXNJbmZpbml0ZUxpbmVMZW5ndGgpCit7CisgICAgYm9vbCBoYXNPdmVycmlkZVNpemUgPSBjaGls
ZC5oYXNPdmVycmlkZUxvZ2ljYWxDb250ZW50V2lkdGgoKSB8fCBjaGlsZC5oYXNPdmVycmlkZUxv
Z2ljYWxDb250ZW50SGVpZ2h0KCk7CisgICAgaWYgKGhhc092ZXJyaWRlU2l6ZSkKKyAgICAgICAg
Y2hpbGQuY2xlYXJPdmVycmlkZVNpemUoKTsKKworICAgIExlbmd0aCBjaGlsZE1haW5FeHRlbnQg
PSBpc0hvcml6b250YWxGbG93KCkgPyBjaGlsZC5zdHlsZSgpLndpZHRoKCkgOiBjaGlsZC5zdHls
ZSgpLmhlaWdodCgpOworICAgIGlmIChjaGlsZE1haW5FeHRlbnQuaXNBdXRvKCkgfHwgKGNoaWxk
TWFpbkV4dGVudC5pc0ZpeGVkKCkgJiYgIWNoaWxkTWFpbkV4dGVudC52YWx1ZSgpICYmIGhhc0lu
ZmluaXRlTGluZUxlbmd0aCkpIHsKKyAgICAgICAgaWYgKGhhc09ydGhvZ29uYWxGbG93KGNoaWxk
KSkgeworICAgICAgICAgICAgaWYgKGhhc092ZXJyaWRlU2l6ZSkKKyAgICAgICAgICAgICAgICBj
aGlsZC5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICBjaGls
ZC5sYXlvdXRJZk5lZWRlZCgpOworICAgICAgICB9CisgICAgICAgIExheW91dFVuaXQgbWFpbkF4
aXNFeHRlbnQgPSBoYXNPcnRob2dvbmFsRmxvdyhjaGlsZCkgPyBjaGlsZC5sb2dpY2FsSGVpZ2h0
KCkgOiBjaGlsZC5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgQVNTRVJUKG1h
aW5BeGlzRXh0ZW50IC0gbWFpbkF4aXNCb3JkZXJBbmRQYWRkaW5nRXh0ZW50Rm9yQ2hpbGQoY2hp
bGQpID49IDApOworICAgICAgICByZXR1cm4gbWFpbkF4aXNFeHRlbnQgLSBtYWluQXhpc0JvcmRl
ckFuZFBhZGRpbmdFeHRlbnRGb3JDaGlsZChjaGlsZCk7CisgICAgfQorICAgIHJldHVybiBjb21w
dXRlTWFpbkF4aXNFeHRlbnRGb3JDaGlsZChjaGlsZCwgTWFpbk9yUHJlZmVycmVkU2l6ZSwgY2hp
bGRNYWluRXh0ZW50KS52YWx1ZU9yKDApOworfQorCitib29sIFJlbmRlck1hdGhNTEJsb2NrOjpp
c0xlZnRUb1JpZ2h0RmxvdygpIGNvbnN0Cit7CisgICAgaWYgKGlzQ29sdW1uRmxvdygpKQorICAg
ICAgICByZXR1cm4gc3R5bGUoKS53cml0aW5nTW9kZSgpID09IFRvcFRvQm90dG9tV3JpdGluZ01v
ZGUgfHwgc3R5bGUoKS53cml0aW5nTW9kZSgpID09IExlZnRUb1JpZ2h0V3JpdGluZ01vZGU7Cisg
ICAgcmV0dXJuIHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOworfQorCitMYXlvdXRV
bml0IFJlbmRlck1hdGhNTEJsb2NrOjpmbG93QXdhcmVCb3JkZXJTdGFydCgpIGNvbnN0Cit7Cisg
ICAgaWYgKGlzSG9yaXpvbnRhbEZsb3coKSkKKyAgICAgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHRG
bG93KCkgPyBib3JkZXJMZWZ0KCkgOiBib3JkZXJSaWdodCgpOworICAgIHJldHVybiBpc0xlZnRU
b1JpZ2h0RmxvdygpID8gYm9yZGVyVG9wKCkgOiBib3JkZXJCb3R0b20oKTsKK30KKworTGF5b3V0
VW5pdCBSZW5kZXJNYXRoTUxCbG9jazo6Zmxvd0F3YXJlQm9yZGVyRW5kKCkgY29uc3QKK3sKKyAg
ICBpZiAoaXNIb3Jpem9udGFsRmxvdygpKQorICAgICAgICByZXR1cm4gaXNMZWZ0VG9SaWdodEZs
b3coKSA/IGJvcmRlclJpZ2h0KCkgOiBib3JkZXJMZWZ0KCk7CisgICAgcmV0dXJuIGlzTGVmdFRv
UmlnaHRGbG93KCkgPyBib3JkZXJCb3R0b20oKSA6IGJvcmRlclRvcCgpOworfQorCitMYXlvdXRV
bml0IFJlbmRlck1hdGhNTEJsb2NrOjpmbG93QXdhcmVQYWRkaW5nU3RhcnQoKSBjb25zdAorewor
ICAgIGlmIChpc0hvcml6b250YWxGbG93KCkpCisgICAgICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0
RmxvdygpID8gcGFkZGluZ0xlZnQoKSA6IHBhZGRpbmdSaWdodCgpOworICAgIHJldHVybiBpc0xl
ZnRUb1JpZ2h0RmxvdygpID8gcGFkZGluZ1RvcCgpIDogcGFkZGluZ0JvdHRvbSgpOworfQorCitM
YXlvdXRVbml0IFJlbmRlck1hdGhNTEJsb2NrOjpmbG93QXdhcmVQYWRkaW5nRW5kKCkgY29uc3QK
K3sKKyAgICBpZiAoaXNIb3Jpem9udGFsRmxvdygpKQorICAgICAgICByZXR1cm4gaXNMZWZ0VG9S
aWdodEZsb3coKSA/IHBhZGRpbmdSaWdodCgpIDogcGFkZGluZ0xlZnQoKTsKKyAgICByZXR1cm4g
aXNMZWZ0VG9SaWdodEZsb3coKSA/IHBhZGRpbmdCb3R0b20oKSA6IHBhZGRpbmdUb3AoKTsKK30K
KworTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxCbG9jazo6Zmxvd0F3YXJlTWFyZ2luU3RhcnRGb3JD
aGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAoreworICAgIGlmIChpc0hvcml6b250YWxGbG93
KCkpCisgICAgICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RmxvdygpID8gY2hpbGQubWFyZ2luTGVm
dCgpIDogY2hpbGQubWFyZ2luUmlnaHQoKTsKKyAgICByZXR1cm4gaXNMZWZ0VG9SaWdodEZsb3co
KSA/IGNoaWxkLm1hcmdpblRvcCgpIDogY2hpbGQubWFyZ2luQm90dG9tKCk7Cit9CisKK0xheW91
dFVuaXQgUmVuZGVyTWF0aE1MQmxvY2s6OmZsb3dBd2FyZU1hcmdpbkVuZEZvckNoaWxkKFJlbmRl
ckJveCYgY2hpbGQpIGNvbnN0Cit7CisgICAgaWYgKGlzSG9yaXpvbnRhbEZsb3coKSkKKyAgICAg
ICAgcmV0dXJuIGlzTGVmdFRvUmlnaHRGbG93KCkgPyBjaGlsZC5tYXJnaW5SaWdodCgpIDogY2hp
bGQubWFyZ2luTGVmdCgpOworICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RmxvdygpID8gY2hpbGQu
bWFyZ2luQm90dG9tKCkgOiBjaGlsZC5tYXJnaW5Ub3AoKTsKK30KKworTGF5b3V0VW5pdCBSZW5k
ZXJNYXRoTUxCbG9jazo6Zmxvd0F3YXJlTWFyZ2luQmVmb3JlRm9yQ2hpbGQoUmVuZGVyQm94JiBj
aGlsZCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHRyYW5zZm9ybWVkV3JpdGluZ01vZGUoKSkgewor
ICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIGNoaWxkLm1h
cmdpblRvcCgpOworICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0aW5nTW9kZToKKyAgICAgICAgcmV0
dXJuIGNoaWxkLm1hcmdpbkJvdHRvbSgpOworICAgIGNhc2UgTGVmdFRvUmlnaHRXcml0aW5nTW9k
ZToKKyAgICAgICAgcmV0dXJuIGNoaWxkLm1hcmdpbkxlZnQoKTsKKyAgICBjYXNlIFJpZ2h0VG9M
ZWZ0V3JpdGluZ01vZGU6CisgICAgICAgIHJldHVybiBjaGlsZC5tYXJnaW5SaWdodCgpOworICAg
IH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbWFyZ2luVG9wKCk7Cit9
CisKK0xheW91dFVuaXQgUmVuZGVyTWF0aE1MQmxvY2s6OmZsb3dBd2FyZU1hcmdpbkFmdGVyRm9y
Q2hpbGQoUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHRyYW5zZm9ybWVk
V3JpdGluZ01vZGUoKSkgeworICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9kZToKKyAgICAg
ICAgcmV0dXJuIGNoaWxkLm1hcmdpbkJvdHRvbSgpOworICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0
aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIGNoaWxkLm1hcmdpblRvcCgpOworICAgIGNhc2UgTGVm
dFRvUmlnaHRXcml0aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIGNoaWxkLm1hcmdpblJpZ2h0KCk7
CisgICAgY2FzZSBSaWdodFRvTGVmdFdyaXRpbmdNb2RlOgorICAgICAgICByZXR1cm4gY2hpbGQu
bWFyZ2luTGVmdCgpOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gbWFyZ2luQm90dG9tKCk7Cit9CisKK1dyaXRpbmdNb2RlIFJlbmRlck1hdGhNTEJsb2NrOjp0
cmFuc2Zvcm1lZFdyaXRpbmdNb2RlKCkgY29uc3QKK3sKKyAgICBXcml0aW5nTW9kZSBtb2RlID0g
c3R5bGUoKS53cml0aW5nTW9kZSgpOworICAgIGlmICghaXNDb2x1bW5GbG93KCkpCisgICAgICAg
IHJldHVybiBtb2RlOworCisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBUb3BUb0JvdHRv
bVdyaXRpbmdNb2RlOgorICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0aW5nTW9kZToKKyAgICAgICAg
cmV0dXJuIHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gTGVmdFRvUmlnaHRXcml0
aW5nTW9kZSA6IFJpZ2h0VG9MZWZ0V3JpdGluZ01vZGU7CisgICAgY2FzZSBMZWZ0VG9SaWdodFdy
aXRpbmdNb2RlOgorICAgIGNhc2UgUmlnaHRUb0xlZnRXcml0aW5nTW9kZToKKyAgICAgICAgcmV0
dXJuIHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gVG9wVG9Cb3R0b21Xcml0aW5n
TW9kZSA6IEJvdHRvbVRvVG9wV3JpdGluZ01vZGU7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlOworfQorCitib29sIFJl
bmRlck1hdGhNTEJsb2NrOjppc0NvbHVtbkZsb3coKSBjb25zdAoreworICAgIHJldHVybiBzdHls
ZSgpLmlzQ29sdW1uRmxleERpcmVjdGlvbigpOworfQorCiB9ICAgIAogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2su
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suaApp
bmRleCA2Y2I2ZTdiYjg2MmNiNWM2YWMwOTU2ZDJiMjYwNWYyZWRkOTI0MzczLi41OGMzNGJjMDEy
NmRhOGU5ZWRhYzUyNGE1ODE4MWEwODM2MThkZGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oCkBAIC02MywxMSArNjMsMzEg
QEAgcHVibGljOgogICAgIAogICAgIC8vIENyZWF0ZSBhIG5ldyBSZW5kZXJNYXRoTUxCbG9jaywg
d2l0aCBhIG5ldyBzdHlsZSBpbmhlcml0aW5nIGZyb20gdGhpcy0+c3R5bGUoKS4KICAgICBSZW5k
ZXJQdHI8UmVuZGVyTWF0aE1MQmxvY2s+IGNyZWF0ZUFub255bW91c01hdGhNTEJsb2NrKCk7Ci0g
ICAgCisKK3Byb3RlY3RlZDoKKyAgICBib29sIGlzTGVmdFRvUmlnaHRGbG93KCkgY29uc3Q7Cisg
ICAgTGF5b3V0VW5pdCBmbG93QXdhcmVCb3JkZXJTdGFydCgpIGNvbnN0OworICAgIExheW91dFVu
aXQgZmxvd0F3YXJlQm9yZGVyRW5kKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBmbG93QXdhcmVQ
YWRkaW5nU3RhcnQoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGZsb3dBd2FyZVBhZGRpbmdFbmQo
KSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGZsb3dBd2FyZU1hcmdpblN0YXJ0Rm9yQ2hpbGQoUmVu
ZGVyQm94JiBjaGlsZCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBmbG93QXdhcmVNYXJnaW5FbmRG
b3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGZsb3dBd2Fy
ZU1hcmdpbkJlZm9yZUZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQpIGNvbnN0OworICAgIExheW91
dFVuaXQgZmxvd0F3YXJlTWFyZ2luQWZ0ZXJGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjb25z
dDsKKyAgICBib29sIGhhc09ydGhvZ29uYWxGbG93KFJlbmRlckJveCYgY2hpbGQpIGNvbnN0Owor
CisgICAgTGF5b3V0VW5pdCBtYWluQXhpc0JvcmRlckFuZFBhZGRpbmdFeHRlbnRGb3JDaGlsZChS
ZW5kZXJCb3gmIGNoaWxkKSBjb25zdDsKKyAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRl
TWFpbkF4aXNFeHRlbnRGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBTaXplVHlwZSwgY29uc3Qg
TGVuZ3RoJiBzaXplKTsKKyAgICBMYXlvdXRVbml0IHByZWZlcnJlZE1haW5BeGlzQ29udGVudEV4
dGVudEZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQsIGJvb2wgaGFzSW5maW5pdGVMaW5lTGVuZ3Ro
KTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJNYXRoTUxCbG9jaygpIGNv
bnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIGlzRmxleGlibGVCb3hJ
bXBsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgaXNDb2x1bW5G
bG93KCkgY29uc3Q7CisgICAgV3JpdGluZ01vZGUgdHJhbnNmb3JtZWRXcml0aW5nTW9kZSgpIGNv
bnN0OworCisgICAgYm9vbCBjb21wdXRlUHJlZmVycmVkTWFpbkF4aXNFeHRlbnQoTGF5b3V0VW5p
dCYgcHJlZmVycmVkTWFpbkF4aXNFeHRlbnQpOwogfTsKIAogY2xhc3MgUmVuZGVyTWF0aE1MVGFi
bGUgZmluYWwgOiBwdWJsaWMgUmVuZGVyVGFibGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwCmluZGV4IDVjZjJjOWRkYzRjODdl
MmRjYzQ3ZjUwYjgyZDY4ODJmNTc1ODc3MDIuLjRkYWRlZGMzZDgzNDgzNzdkMmUwMjNmYmYxNmVh
NWNhZjJlZThhYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MUm93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFJvdy5jcHAKQEAgLTMxLDggKzMxLDEwIEBACiAKICNpbmNsdWRlICJNYXRo
TUxOYW1lcy5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJNYXRoTUxPcGVyYXRvci5oIgogI2luY2x1ZGUgIlJl
bmRlck1hdGhNTFJvb3QuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNTAsNyArNTIsNyBAQCBSZW5kZXJNYXRoTUxSb3c6OlJlbmRlck1hdGhN
TFJvdyhEb2N1bWVudCYgZG9jdW1lbnQsIFJlZjxSZW5kZXJTdHlsZT4mJiBzdHlsZSkKIAogUmVu
ZGVyUHRyPFJlbmRlck1hdGhNTFJvdz4gUmVuZGVyTWF0aE1MUm93OjpjcmVhdGVBbm9ueW1vdXNX
aXRoUGFyZW50UmVuZGVyZXIoUmVuZGVyTWF0aE1MUm9vdCYgcGFyZW50KQogewotICAgIFJlbmRl
clB0cjxSZW5kZXJNYXRoTUxSb3c+IG5ld01Sb3cgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJNYXRo
TUxSb3c+KHBhcmVudC5kb2N1bWVudCgpLCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5
bGVXaXRoRGlzcGxheSgmcGFyZW50LnN0eWxlKCksIEZMRVgpKTsKKyAgICBSZW5kZXJQdHI8UmVu
ZGVyTWF0aE1MUm93PiBuZXdNUm93ID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyTWF0aE1MUm93Pihw
YXJlbnQuZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERp
c3BsYXkoJnBhcmVudC5zdHlsZSgpLCBCTE9DSykpOwogICAgIG5ld01Sb3ctPmluaXRpYWxpemVT
dHlsZSgpOwogICAgIHJldHVybiBuZXdNUm93OwogfQpAQCAtNjYsNDQgKzY4LDE1OSBAQCB2b2lk
IFJlbmRlck1hdGhNTFJvdzo6dXBkYXRlT3BlcmF0b3JQcm9wZXJ0aWVzKCkKICAgICBzZXROZWVk
c0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKIH0KIAotdm9pZCBSZW5kZXJNYXRoTUxSb3c6
OmxheW91dCgpCitzdGF0aWMgaW5saW5lIExheW91dFVuaXQgbWFyZ2luQm94QXNjZW50Rm9yQ2hp
bGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkKIHsKLSAgICBpbnQgc3RyZXRjaEhlaWdodEFib3Zl
QmFzZWxpbmUgPSAwLCBzdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0gMDsKLSAgICBmb3IgKFJl
bmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+bmVlZHNMYXlvdXQoKSkKLSAgICAg
ICAgICAgIGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCpjaGlsZCkubGF5b3V0KCk7Ci0gICAgICAg
IGlmIChpczxSZW5kZXJNYXRoTUxCbG9jaz4oKmNoaWxkKSkgewotICAgICAgICAgICAgLy8gV2Ug
c2tpcCB0aGUgc3RyZXRjaHkgb3BlcmF0b3JzIGFzIHRoZXkgbXVzdCBub3QgYmUgaW5jbHVkZWQg
aW4gdGhlIGNvbXB1dGF0aW9uIG9mIHRoZSBzdHJldGNoIHNpemUuCi0gICAgICAgICAgICBhdXRv
KiByZW5kZXJPcGVyYXRvciA9IGRvd25jYXN0PFJlbmRlck1hdGhNTEJsb2NrPigqY2hpbGQpLnVu
ZW1iZWxsaXNoZWRPcGVyYXRvcigpOworICAgIHJldHVybiBjaGlsZC5maXJzdExpbmVCYXNlbGlu
ZSgpLnZhbHVlT3IoY2hpbGQuaGVpZ2h0KCkpICsgY2hpbGQubWFyZ2luVG9wKCk7Cit9CisKK09w
dGlvbmFsPGludD4gUmVuZGVyTWF0aE1MUm93OjpmaXJzdExpbmVCYXNlbGluZSgpIGNvbnN0Cit7
CisgICAgUmVuZGVyQm94KiBiYXNlbGluZUNoaWxkID0gZmlyc3RDaGlsZEJveCgpOworICAgIGlm
ICghYmFzZWxpbmVDaGlsZCkKKyAgICAgICAgcmV0dXJuIE9wdGlvbmFsPGludD4oKTsKKworICAg
IE9wdGlvbmFsPGludD4gYmFzZWxpbmUgPSBiYXNlbGluZUNoaWxkLT5maXJzdExpbmVCYXNlbGlu
ZSgpOworICAgIGlmICghYmFzZWxpbmUpCisgICAgICAgIHJldHVybiBPcHRpb25hbDxpbnQ+KGJh
c2VsaW5lQ2hpbGQtPmJvcmRlclRvcCgpICsgYmFzZWxpbmVDaGlsZC0+cGFkZGluZ1RvcCgpICsg
YmFzZWxpbmVDaGlsZC0+Y29udGVudEhlaWdodCgpICsgYmFzZWxpbmVDaGlsZC0+bG9naWNhbFRv
cCgpKTsKKworICAgIHJldHVybiBPcHRpb25hbDxpbnQ+KGJhc2VsaW5lLnZhbHVlKCkgKyBiYXNl
bGluZUNoaWxkLT5sb2dpY2FsVG9wKCkpOworfQorCit2b2lkIFJlbmRlck1hdGhNTFJvdzo6cHJl
cGFyZUNoaWxkRm9yUG9zaXRpb25lZExheW91dChSZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRVbml0
IGhvcml6b250YWxPZmZzZXQsIExheW91dFVuaXQgdmVydGljYWxPZmZzZXQpCit7CisgICAgQVNT
RVJUKGNoaWxkLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKTsKKyAgICBjaGlsZC5jb250YWluaW5n
QmxvY2soKS0+aW5zZXJ0UG9zaXRpb25lZE9iamVjdChjaGlsZCk7CisgICAgUmVuZGVyTGF5ZXIq
IGNoaWxkTGF5ZXIgPSBjaGlsZC5sYXllcigpOworICAgIGNoaWxkTGF5ZXItPnNldFN0YXRpY0lu
bGluZVBvc2l0aW9uKGhvcml6b250YWxPZmZzZXQpOworCisgICAgaWYgKGNoaWxkTGF5ZXItPnN0
YXRpY0Jsb2NrUG9zaXRpb24oKSAhPSB2ZXJ0aWNhbE9mZnNldCkgeworICAgICAgICBjaGlsZExh
eWVyLT5zZXRTdGF0aWNCbG9ja1Bvc2l0aW9uKHZlcnRpY2FsT2Zmc2V0KTsKKyAgICAgICAgaWYg
KGNoaWxkLnN0eWxlKCkuaGFzU3RhdGljQmxvY2tQb3NpdGlvbihzdHlsZSgpLmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpKQorICAgICAgICAgICAgY2hpbGQuc2V0Q2hpbGROZWVkc0xheW91dChN
YXJrT25seVRoaXMpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJNYXRoTUxSb3c6OmNvbXB1dGVM
aW5lVmVydGljYWxTdHJldGNoKGludCYgc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUsIGludCYg
c3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSkKK3sKKyAgICAvLyBGSVhNRTogV2hhdCBhYm91dCB0
aGUgUmVuZGVyQmxvY2tzPworICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGRC
b3goKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsKKyAgICAgICAg
Y2hpbGQtPmxheW91dElmTmVlZGVkKCk7CisKKyAgICAgICAgaWYgKGlzPFJlbmRlck1hdGhNTEJs
b2NrPihjaGlsZCkpIHsKKyAgICAgICAgICAgIGF1dG8qIHJlbmRlck9wZXJhdG9yID0gZG93bmNh
c3Q8UmVuZGVyTWF0aE1MQmxvY2s+KGNoaWxkKS0+dW5lbWJlbGxpc2hlZE9wZXJhdG9yKCk7CiAg
ICAgICAgICAgICBpZiAocmVuZGVyT3BlcmF0b3IgJiYgcmVuZGVyT3BlcmF0b3ItPmhhc09wZXJh
dG9yRmxhZyhNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OlN0cmV0Y2h5KSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQorCiAgICAgICAgIExheW91dFVuaXQgY2hpbGRIZWln
aHRBYm92ZUJhc2VsaW5lID0gMCwgY2hpbGREZXB0aEJlbG93QmFzZWxpbmUgPSAwOwotICAgICAg
ICBpZiAoaXM8UmVuZGVyTWF0aE1MQmxvY2s+KCpjaGlsZCkpIHsKLSAgICAgICAgICAgIFJlbmRl
ck1hdGhNTEJsb2NrJiBtYXRobWxDaGlsZCA9IGRvd25jYXN0PFJlbmRlck1hdGhNTEJsb2NrPigq
Y2hpbGQpOwotICAgICAgICAgICAgY2hpbGRIZWlnaHRBYm92ZUJhc2VsaW5lID0gbWF0aG1sQ2hp
bGQuZmlyc3RMaW5lQmFzZWxpbmUoKS52YWx1ZU9yKG1hdGhtbENoaWxkLmxvZ2ljYWxIZWlnaHQo
KSk7Ci0gICAgICAgICAgICBjaGlsZERlcHRoQmVsb3dCYXNlbGluZSA9IG1hdGhtbENoaWxkLmxv
Z2ljYWxIZWlnaHQoKSAtIGNoaWxkSGVpZ2h0QWJvdmVCYXNlbGluZTsKLSAgICAgICAgfSBlbHNl
IGlmIChpczxSZW5kZXJNYXRoTUxUYWJsZT4oKmNoaWxkKSkgewotICAgICAgICAgICAgUmVuZGVy
TWF0aE1MVGFibGUmIHRhYmxlQ2hpbGQgPSBkb3duY2FzdDxSZW5kZXJNYXRoTUxUYWJsZT4oKmNo
aWxkKTsKLSAgICAgICAgICAgIGNoaWxkSGVpZ2h0QWJvdmVCYXNlbGluZSA9IHRhYmxlQ2hpbGQu
Zmlyc3RMaW5lQmFzZWxpbmUoKS52YWx1ZU9yKC0xKTsKLSAgICAgICAgICAgIGNoaWxkRGVwdGhC
ZWxvd0Jhc2VsaW5lID0gdGFibGVDaGlsZC5sb2dpY2FsSGVpZ2h0KCkgLSBjaGlsZEhlaWdodEFi
b3ZlQmFzZWxpbmU7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyQm94PigqY2hpbGQpKSB7
Ci0gICAgICAgICAgICBjaGlsZEhlaWdodEFib3ZlQmFzZWxpbmUgPSBkb3duY2FzdDxSZW5kZXJC
b3g+KCpjaGlsZCkubG9naWNhbEhlaWdodCgpOworICAgICAgICBpZiAoaXM8UmVuZGVyTWF0aE1M
QmxvY2s+KGNoaWxkKSkgeworICAgICAgICAgICAgUmVuZGVyTWF0aE1MQmxvY2sqIG1hdGhtbENo
aWxkID0gZG93bmNhc3Q8UmVuZGVyTWF0aE1MQmxvY2s+KGNoaWxkKTsKKyAgICAgICAgICAgIGNo
aWxkSGVpZ2h0QWJvdmVCYXNlbGluZSA9IG1hdGhtbENoaWxkLT5maXJzdExpbmVCYXNlbGluZSgp
LnZhbHVlT3IobWF0aG1sQ2hpbGQtPmxvZ2ljYWxIZWlnaHQoKSk7CisgICAgICAgICAgICBjaGls
ZERlcHRoQmVsb3dCYXNlbGluZSA9IG1hdGhtbENoaWxkLT5sb2dpY2FsSGVpZ2h0KCkgLSBjaGls
ZEhlaWdodEFib3ZlQmFzZWxpbmU7CisgICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyTWF0aE1M
VGFibGU+KGNoaWxkKSkgeworICAgICAgICAgICAgUmVuZGVyTWF0aE1MVGFibGUqIHRhYmxlQ2hp
bGQgPSBkb3duY2FzdDxSZW5kZXJNYXRoTUxUYWJsZT4oY2hpbGQpOworICAgICAgICAgICAgY2hp
bGRIZWlnaHRBYm92ZUJhc2VsaW5lID0gdGFibGVDaGlsZC0+Zmlyc3RMaW5lQmFzZWxpbmUoKS52
YWx1ZU9yKC0xKTsKKyAgICAgICAgICAgIGNoaWxkRGVwdGhCZWxvd0Jhc2VsaW5lID0gdGFibGVD
aGlsZC0+bG9naWNhbEhlaWdodCgpIC0gY2hpbGRIZWlnaHRBYm92ZUJhc2VsaW5lOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgY2hpbGRIZWlnaHRBYm92ZUJhc2VsaW5lID0gY2hpbGQt
PmxvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgICAgIGNoaWxkRGVwdGhCZWxvd0Jhc2VsaW5lID0g
MDsKICAgICAgICAgfQogICAgICAgICBzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IHN0ZDo6
bWF4PExheW91dFVuaXQ+KHN0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCBjaGlsZEhlaWdodEFi
b3ZlQmFzZWxpbmUpOwogICAgICAgICBzdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0gc3RkOjpt
YXg8TGF5b3V0VW5pdD4oc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSwgY2hpbGREZXB0aEJlbG93
QmFzZWxpbmUpOwogICAgIH0KKwogICAgIGlmIChzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSAr
IHN0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPD0gMCkKICAgICAgICAgc3RyZXRjaEhlaWdodEFi
b3ZlQmFzZWxpbmUgPSBzdHlsZSgpLmZvbnRTaXplKCk7Ci0gICAgCi0gICAgLy8gU2V0IHRoZSBz
aXplcyBvZiAocG9zc2libHkgZW1iZWxsaXNoZWQpIHN0cmV0Y2h5IG9wZXJhdG9yIGNoaWxkcmVu
LgotICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJNYXRoTUxCbG9j
az4oKnRoaXMpKSB7Ci0gICAgICAgIGlmIChhdXRvIHJlbmRlck9wZXJhdG9yID0gY2hpbGQudW5l
bWJlbGxpc2hlZE9wZXJhdG9yKCkpCi0gICAgICAgICAgICByZW5kZXJPcGVyYXRvci0+c3RyZXRj
aFRvKHN0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCBzdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5l
KTsKK30KKwordm9pZCBSZW5kZXJNYXRoTUxSb3c6OmxheW91dFJvd0l0ZW1zKGludCBzdHJldGNo
SGVpZ2h0QWJvdmVCYXNlbGluZSwgaW50IHN0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUpCit7Cisg
ICAgYm9vbCBoYXNJbmZpbml0ZUxpbmVMZW5ndGggPSB0cnVlOworCisgICAgTGF5b3V0VW5pdCBo
b3Jpem9udGFsT2Zmc2V0ID0gZmxvd0F3YXJlQm9yZGVyU3RhcnQoKSArIGZsb3dBd2FyZVBhZGRp
bmdTdGFydCgpOworICAgIExheW91dFVuaXQgdmVydGljYWxPZmZzZXQgPSBib3JkZXJUb3AoKSAr
IHBhZGRpbmdUb3AoKTsKKyAgICBMYXlvdXRVbml0IG1heEFzY2VudCA9IDAsIG1heERlc2NlbnQg
PSAwOyAvLyBVc2VkIGJhc2VsaW5lIGFsaWdubWVudC4KKyAgICBib29sIHNob3VsZEZsaXBIb3Jp
em9udGFsID0gIWlzTGVmdFRvUmlnaHRGbG93KCk7CisKKyAgICBmb3IgKFJlbmRlckJveCogY2hp
bGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0Jv
eCgpKSB7CisgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKKyAg
ICAgICAgICAgIHByZXBhcmVDaGlsZEZvclBvc2l0aW9uZWRMYXlvdXQoKmNoaWxkLCBob3Jpem9u
dGFsT2Zmc2V0LCB2ZXJ0aWNhbE9mZnNldCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChpczxSZW5kZXJNYXRoTUxCbG9jaz4oY2hpbGQpKSB7CisgICAg
ICAgICAgICBpZiAoYXV0byByZW5kZXJPcGVyYXRvciA9IGRvd25jYXN0PFJlbmRlck1hdGhNTEJs
b2NrPihjaGlsZCktPnVuZW1iZWxsaXNoZWRPcGVyYXRvcigpKQorICAgICAgICAgICAgICAgIHJl
bmRlck9wZXJhdG9yLT5zdHJldGNoVG8oc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUsIHN0cmV0
Y2hEZXB0aEJlbG93QmFzZWxpbmUpOworICAgICAgICB9CisKKyAgICAgICAgTGF5b3V0VW5pdCBj
aGlsZEhvcml6b250YWxFeHRlbnQgPSBwcmVmZXJyZWRNYWluQXhpc0NvbnRlbnRFeHRlbnRGb3JD
aGlsZCgqY2hpbGQsIGhhc0luZmluaXRlTGluZUxlbmd0aCk7CisgICAgICAgIExheW91dFVuaXQg
Y2hpbGRIb3Jpem9udGFsTWFyZ2luQm94RXh0ZW50ID0gY2hpbGQtPmhvcml6b250YWxCb3JkZXJB
bmRQYWRkaW5nRXh0ZW50KCkgKyBjaGlsZEhvcml6b250YWxFeHRlbnQ7CisgICAgICAgIGNoaWxk
LT5zZXRPdmVycmlkZUxvZ2ljYWxDb250ZW50V2lkdGgoY2hpbGRIb3Jpem9udGFsRXh0ZW50KTsK
KworICAgICAgICBpZiAoY2hpbGRIb3Jpem9udGFsRXh0ZW50ICE9IGNoaWxkLT53aWR0aCgpKQor
ICAgICAgICAgICAgY2hpbGQtPnNldENoaWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKKwor
ICAgICAgICBjaGlsZC0+bGF5b3V0SWZOZWVkZWQoKTsKKworICAgICAgICBMYXlvdXRVbml0IGFz
Y2VudCA9IG1hcmdpbkJveEFzY2VudEZvckNoaWxkKCpjaGlsZCk7CisgICAgICAgIExheW91dFVu
aXQgZGVzY2VudCA9IGNoaWxkLT52ZXJ0aWNhbE1hcmdpbkV4dGVudCgpICsgY2hpbGQtPmhlaWdo
dCgpIC0gYXNjZW50OworICAgICAgICBtYXhBc2NlbnQgPSBzdGQ6Om1heChtYXhBc2NlbnQsIGFz
Y2VudCk7CisgICAgICAgIG1heERlc2NlbnQgPSBzdGQ6Om1heChtYXhEZXNjZW50LCBkZXNjZW50
KTsKKyAgICAgICAgTGF5b3V0VW5pdCBjaGlsZFZlcnRpY2FsTWFyZ2luQm94RXh0ZW50ID0gbWF4
QXNjZW50ICsgbWF4RGVzY2VudDsKKworICAgICAgICBob3Jpem9udGFsT2Zmc2V0ICs9IGZsb3dB
d2FyZU1hcmdpblN0YXJ0Rm9yQ2hpbGQoKmNoaWxkKTsKKworICAgICAgICBzZXRMb2dpY2FsSGVp
Z2h0KHN0ZDo6bWF4KGxvZ2ljYWxIZWlnaHQoKSwgdmVydGljYWxPZmZzZXQgKyBib3JkZXJCb3R0
b20oKSArIHBhZGRpbmdCb3R0b20oKSArIGNoaWxkVmVydGljYWxNYXJnaW5Cb3hFeHRlbnQgKyBo
b3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkpKTsKKworICAgICAgICBMYXlvdXRQb2ludCBjaGls
ZExvY2F0aW9uKHNob3VsZEZsaXBIb3Jpem9udGFsID8gd2lkdGgoKSAtIGhvcml6b250YWxPZmZz
ZXQgLSBjaGlsZEhvcml6b250YWxFeHRlbnQgOiBob3Jpem9udGFsT2Zmc2V0LCB2ZXJ0aWNhbE9m
ZnNldCArIGNoaWxkLT5tYXJnaW5Ub3AoKSk7CisgICAgICAgIGNoaWxkLT5zZXRMb2NhdGlvbihj
aGlsZExvY2F0aW9uKTsKKworICAgICAgICBob3Jpem9udGFsT2Zmc2V0ICs9IGNoaWxkSG9yaXpv
bnRhbE1hcmdpbkJveEV4dGVudCArIGZsb3dBd2FyZU1hcmdpbkVuZEZvckNoaWxkKCpjaGlsZCk7
CisgICAgfQorCisgICAgTGF5b3V0VW5pdCBjZW50ZXJCbG9ja09mZnNldCA9IDA7CisgICAgLy8g
RklYTUU6IFJlbW92ZSB0aGUgRkxFWCB3aGVuIGl0IGlzIG5vdCByZXF1aXJlZCBieSB0aGUgY3Nz
LgorICAgIGlmIChzdHlsZSgpLmRpc3BsYXkoKSA9PSBCTE9DSyB8fCBzdHlsZSgpLmRpc3BsYXko
KSA9PSBGTEVYKQorICAgICAgICBjZW50ZXJCbG9ja09mZnNldCA9IHN0ZDo6bWF4PExheW91dFVu
aXQ+KDAsICh3aWR0aCgpIC0gKGhvcml6b250YWxPZmZzZXQgKyBmbG93QXdhcmVCb3JkZXJTdGFy
dCgpICsgZmxvd0F3YXJlUGFkZGluZ1N0YXJ0KCkpKSAvIDIpOworCisgICAgaWYgKHNob3VsZEZs
aXBIb3Jpem9udGFsICYmIGNlbnRlckJsb2NrT2Zmc2V0ID4gMCkKKyAgICAgICAgY2VudGVyQmxv
Y2tPZmZzZXQgPSAtIGNlbnRlckJsb2NrT2Zmc2V0OworCisgICAgZm9yIChSZW5kZXJCb3gqIGNo
aWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdC
b3goKSkgeworICAgICAgICBMYXlvdXRVbml0IGFzY2VudCA9IG1hcmdpbkJveEFzY2VudEZvckNo
aWxkKCpjaGlsZCk7CisgICAgICAgIExheW91dFVuaXQgc3RhcnRPZmZzZXQgPSBtYXhBc2NlbnQg
LSBhc2NlbnQ7CisgICAgICAgIGNoaWxkLT5zZXRMb2NhdGlvbihjaGlsZC0+bG9jYXRpb24oKSAr
IExheW91dFBvaW50KGNlbnRlckJsb2NrT2Zmc2V0LCBzdGFydE9mZnNldCkpOwogICAgIH0KK30K
Kwordm9pZCBSZW5kZXJNYXRoTUxSb3c6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJl
biwgTGF5b3V0VW5pdCkKK3sKKyAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CisKKyAgICBpZiAo
IXJlbGF5b3V0Q2hpbGRyZW4gJiYgc2ltcGxpZmllZExheW91dCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpbnQgc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgPSAwOworICAgIGludCBzdHJl
dGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0gMDsKKyAgICBjb21wdXRlTGluZVZlcnRpY2FsU3RyZXRj
aChzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSwgc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSk7
CisKKyAgICByZWNvbXB1dGVMb2dpY2FsV2lkdGgoKTsKKworICAgIHNldExvZ2ljYWxIZWlnaHQo
Ym9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSArIHNjcm9sbGJhckxvZ2ljYWxIZWlnaHQo
KSk7CiAKLSAgICBSZW5kZXJNYXRoTUxCbG9jazo6bGF5b3V0KCk7CisgICAgbGF5b3V0Um93SXRl
bXMoc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUsIHN0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUp
OworCisgICAgdXBkYXRlTG9naWNhbEhlaWdodCgpOworCisgICAgY2xlYXJOZWVkc0xheW91dCgp
OworfQorCit2b2lkIFJlbmRlck1hdGhNTFJvdzo6cGFpbnRDaGlsZHJlbihQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBQYWludEluZm8mIHBhaW50
SW5mb0ZvckNoaWxkLCBib29sIHVzZVByaW50UmVjdCkKK3sKKyAgICBmb3IgKFJlbmRlckJveCog
Y2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
Z0JveCgpKSB7CisgICAgICAgIGlmICghcGFpbnRDaGlsZCgqY2hpbGQsIHBhaW50SW5mbywgcGFp
bnRPZmZzZXQsIHBhaW50SW5mb0ZvckNoaWxkLCB1c2VQcmludFJlY3QsIFBhaW50QXNJbmxpbmVC
bG9jaykpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQogfQogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuaAppbmRleCAwNjQwOGI1
ZDk2ZGJiMzRkNzhlNTgyMjFkZDJkZGY3NzZkMzQxYWRmLi4yMjM1NzI3OWE4NWMzN2VhZjk4NjFh
ZTU4NWJlM2ZjOGFmMzhmYzIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFJvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MUm93LmgKQEAgLTQyLDEyICs0MiwxNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFJlbmRlclB0cjxSZW5kZXJNYXRoTUxSb3c+IGNyZWF0ZUFub255bW91c1dpdGhQYXJl
bnRSZW5kZXJlcihSZW5kZXJNYXRoTUxSb290Jik7CiAgICAgdm9pZCB1cGRhdGVPcGVyYXRvclBy
b3BlcnRpZXMoKTsKIAotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVu
LCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgb3ZlcnJpZGUgZmluYWw7CisgICAg
dmlydHVhbCB2b2lkIHBhaW50Q2hpbGRyZW4oUGFpbnRJbmZvJiBmb3JTZWxmLCBjb25zdCBMYXlv
dXRQb2ludCYsIFBhaW50SW5mbyYgZm9yQ2hpbGQsIGJvb2wgdXNlUHJpbnRSZWN0KSBvdmVycmlk
ZSBmaW5hbDsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPGludD4gZmlyc3RMaW5lQmFzZWxpbmUoKSBj
b25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJNYXRo
TUxSb3coKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVh
bCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gaXNBbm9u
eW1vdXMoKSA/ICJSZW5kZXJNYXRoTUxSb3cgKGFub255bW91cykiIDogIlJlbmRlck1hdGhNTFJv
dyI7IH0KKworICAgIHZvaWQgbGF5b3V0Um93SXRlbXMoaW50IHN0cmV0Y2hIZWlnaHRBYm92ZUJh
c2VsaW5lLCBpbnQgc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSk7CisgICAgdm9pZCBwcmVwYXJl
Q2hpbGRGb3JQb3NpdGlvbmVkTGF5b3V0KFJlbmRlckJveCYsIExheW91dFVuaXQgbWFpbkF4aXNP
ZmZzZXQsIExheW91dFVuaXQgY3Jvc3NBeGlzT2Zmc2V0KTsKKyAgICB2b2lkIGNvbXB1dGVMaW5l
VmVydGljYWxTdHJldGNoKGludCYgc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUsIGludCYgc3Ry
ZXRjaERlcHRoQmVsb3dCYXNlbGluZSk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271162</attachid>
            <date>2016-02-12 03:57:06 -0800</date>
            <delta_ts>2016-03-03 03:17:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153208-20160212125644.patch</filename>
            <type>text/plain</type>
            <size>23158</size>
            <attacher name="Alejandro G. Castro">alex</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2MzA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjAyOWM0Nzc4ZjVmNDYw
MjNhYTU2ZGRkZjgyMzk5MGJhNTdmM2VkOC4uZTE4ZmUxMjY0MjJlMWRmNzFiNjM1YzU1ZGM4ZGU1
ZThjNWY5MzkwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDE2LTAyLTEyICBBbGVq
YW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgorCisgICAgICAgIFJlZmFjdG9yIFJl
bmRlck1hdGhNTFJvdyBsYXlvdXQgZnVuY3Rpb25zIHRvIGF2b2lkIHVzaW5nIGZsZXhib3gKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzIwOAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgdGhl
IGZpcnN0IHBhdGNoIGluIHRoZSBzZXQgdG8gcmVtb3ZlIHRoZSBmbGV4Ym94CisgICAgICAgIGRl
cGVuZGVuY3kgb2YgdGhlIE1hdGhNTCBsYXlvdXQgd2l0aG91dCBjaGFuZ2luZyB0aGUgcmVuZGVy
IHRyZWUKKyAgICAgICAgc3RydWN0dXJlLiBXZSBoYXZlIGFkZGVkIHNvbWUgZnVuY3Rpb25zIGZv
IHRoZSBSZW5kZXJNYXRoTUxCbG9jaworICAgICAgICB1c2VkIGluIHRoZSBuZXh0IHBhdGNoZXMs
IGFsc28gd2UgaGF2ZSBhbGxvd2VkIHRoZSBvdmVycmlkZSBvZiB0aGUKKyAgICAgICAgbGF5b3V0
QmxvY2sgZnVuY3Rpb24gaW4gdGhlIEZsZXhCb3ggY2xhc3MgdGhhdCB3ZSB3aWxsIHJlbW92ZSBp
bgorICAgICAgICB0aGUgbGFzdCBwYXRjaC4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5oOiBBbGxvdyBvdmVycmlkZXIgb2YgdGhlCisgICAgICAgIExheW91dEJsb2Nr
IGZvciB0aGUgbW9tZW50LgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
QmxvY2suY3BwOiBBZGRlZCBmdW5jdGlvbnMgdG8KKyAgICAgICAgY2FsY3VsYXRlIHNvbWUgZGlz
dGFuY2VzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6OmNvbXB1dGVNYWlu
QXhpc0V4dGVudEZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJsb2Nr
OjpoYXNPcnRob2dvbmFsRmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9j
azo6bWFpbkF4aXNCb3JkZXJBbmRQYWRkaW5nRXh0ZW50Rm9yQ2hpbGQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6OnByZWZlcnJlZE1haW5BeGlzQ29udGVudEV4dGVudEZv
ckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJsb2NrOjppc0xlZnRUb1Jp
Z2h0Rmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6Zmxvd0F3YXJl
Qm9yZGVyU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6OmZsb3dB
d2FyZUJvcmRlckVuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6Zmxv
d0F3YXJlUGFkZGluZ1N0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJsb2Nr
OjpmbG93QXdhcmVQYWRkaW5nRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJs
b2NrOjpmbG93QXdhcmVNYXJnaW5TdGFydEZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck1hdGhNTEJsb2NrOjpmbG93QXdhcmVNYXJnaW5FbmRGb3JDaGlsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6Zmxvd0F3YXJlTWFyZ2luQmVmb3JlRm9yQ2hpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6OmZsb3dBd2FyZU1hcmdpbkFm
dGVyRm9yQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6OnRyYW5z
Zm9ybWVkV3JpdGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MQmxvY2s6
OmlzQ29sdW1uRmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxC
bG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcDog
UmVpbXBsZW1lbnQgTGF5b3V0QmxvY2sKKyAgICAgICAgd2l0aG91dCB1c2luZyB0aGUgZmxleGJv
eCBsYXlvdXQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb3c6OmNyZWF0ZUFub255
bW91c1dpdGhQYXJlbnRSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjptYXJnaW5Cb3hBc2Nl
bnRGb3JDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb3c6OmZpcnN0TGlu
ZUJhc2VsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvdzo6cHJlcGFyZUNo
aWxkRm9yUG9zaXRpb25lZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxS
b3c6OmNvbXB1dGVMaW5lVmVydGljYWxTdHJldGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck1hdGhNTFJvdzo6bGF5b3V0Um93SXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0
aE1MUm93OjpsYXlvdXRCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb3c6
OnBhaW50Q2hpbGRyZW4pOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
Um93Lmg6CisKIDIwMTYtMDItMDggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBBdHRyaWJ1dGUgZ2V0dGVycyBzaG91bGQgbm90IHJlcXVpcmUgYW4gZXhwbGljaXQg
J3RoaXMnIHZhbHVlIGZvciBXaW5kb3cgcHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAppbmRleCA5YmFlMzE2YWFmMzdkMGVkMjRhMTAzMjYx
MGI5ZjdmNzAxN2YzNWUwLi45ZmQ5MmMyYzVlYTA4ZWQyYjhkMzJmMTBlMDJlMjU5NTRhNDgwN2I1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3gu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaApAQCAt
NDYsNyArNDYsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgYXZvaWRzRmxvYXRzKCkg
Y29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBj
YW5Ecm9wQW5vbnltb3VzQmxvY2tDaGlsZCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGls
ZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IDApIG92ZXJyaWRlIGZpbmFsOwor
ICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91
dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgaW50
IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIGZpcnN0TGluZSwgTGluZURpcmVj
dGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNv
bnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgT3B0aW9uYWw8aW50PiBmaXJzdExpbmVCYXNlbGlu
ZSgpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAppbmRleCAxZjQyNmI4NGU4ZmM4ZmQ5ZDc4NjYw
N2E3OGIyZWYyZjFkZTcwNmI0Li4yMTkyZDY3Mjc4NjY4MTJhZWU3MmMwYjZlZGQ1YzkwZDI1MjJk
ZGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTEJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTEJsb2NrLmNwcApAQCAtMzA2LDYgKzMwNiwxNTQgQEAgT3B0aW9uYWw8aW50PiBSZW5k
ZXJNYXRoTUxUYWJsZTo6Zmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdAogICAgIHJldHVybiAobG9n
aWNhbEhlaWdodCgpICsgc3R5bGUoKS5mb250TWV0cmljcygpLnhIZWlnaHQoKSkgLyAyOwogfQog
CitPcHRpb25hbDxMYXlvdXRVbml0PiBSZW5kZXJNYXRoTUxCbG9jazo6Y29tcHV0ZU1haW5BeGlz
RXh0ZW50Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgU2l6ZVR5cGUgc2l6ZVR5cGUsIGNvbnN0
IExlbmd0aCYgc2l6ZSkKK3sKKyAgICBpZiAoaXNDb2x1bW5GbG93KCkpIHsKKyAgICAgICAgLy8g
V2UgZG9uJ3QgaGF2ZSB0byBjaGVjayBmb3IgImF1dG8iIGhlcmUgLSBjb21wdXRlQ29udGVudExv
Z2ljYWxIZWlnaHQgd2lsbCBqdXN0IHJldHVybiBOdWxsb3B0IGZvciB0aGF0IGNhc2UgYW55d2F5
LgorICAgICAgICBpZiAoc2l6ZS5pc0ludHJpbnNpYygpKQorICAgICAgICAgICAgY2hpbGQubGF5
b3V0SWZOZWVkZWQoKTsKKyAgICAgICAgcmV0dXJuIGNoaWxkLmNvbXB1dGVDb250ZW50TG9naWNh
bEhlaWdodChzaXplVHlwZSwgc2l6ZSwgY2hpbGQubG9naWNhbEhlaWdodCgpIC0gY2hpbGQuYm9y
ZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSk7CisgICAgfQorICAgIC8vIEZJWE1FOiBGaWd1
cmUgb3V0IGhvdyB0aGlzIHNob3VsZCB3b3JrIGZvciByZWdpb25zIGFuZCBwYXNzIGluIHRoZSBh
cHByb3ByaWF0ZSB2YWx1ZXMuCisgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSBudWxscHRyOwor
ICAgIHJldHVybiBjaGlsZC5jb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb25Vc2luZyhzaXplVHlw
ZSwgc2l6ZSwgY29udGVudExvZ2ljYWxXaWR0aCgpLCB0aGlzLCByZWdpb24pIC0gY2hpbGQuYm9y
ZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpOworfQorCitib29sIFJlbmRlck1hdGhNTEJsb2Nr
OjpoYXNPcnRob2dvbmFsRmxvdyhSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAoreworICAgIC8vIEZJ
WE1FOiBJZiB0aGUgY2hpbGQgaXMgYSBmbGV4Ym94LCB0aGVuIHdlIG5lZWQgdG8gY2hlY2sgaXNI
b3Jpem9udGFsRmxvdy4KKyAgICByZXR1cm4gaXNIb3Jpem9udGFsRmxvdygpICE9IGNoaWxkLmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTWF0aE1MQmxv
Y2s6Om1haW5BeGlzQm9yZGVyQW5kUGFkZGluZ0V4dGVudEZvckNoaWxkKFJlbmRlckJveCYgY2hp
bGQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzSG9yaXpvbnRhbEZsb3coKSA/IGNoaWxkLmhvcml6
b250YWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkgOiBjaGlsZC52ZXJ0aWNhbEJvcmRlckFuZFBh
ZGRpbmdFeHRlbnQoKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxCbG9jazo6cHJlZmVy
cmVkTWFpbkF4aXNDb250ZW50RXh0ZW50Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgYm9vbCBo
YXNJbmZpbml0ZUxpbmVMZW5ndGgpCit7CisgICAgYm9vbCBoYXNPdmVycmlkZVNpemUgPSBjaGls
ZC5oYXNPdmVycmlkZUxvZ2ljYWxDb250ZW50V2lkdGgoKSB8fCBjaGlsZC5oYXNPdmVycmlkZUxv
Z2ljYWxDb250ZW50SGVpZ2h0KCk7CisgICAgaWYgKGhhc092ZXJyaWRlU2l6ZSkKKyAgICAgICAg
Y2hpbGQuY2xlYXJPdmVycmlkZVNpemUoKTsKKworICAgIExlbmd0aCBjaGlsZE1haW5FeHRlbnQg
PSBpc0hvcml6b250YWxGbG93KCkgPyBjaGlsZC5zdHlsZSgpLndpZHRoKCkgOiBjaGlsZC5zdHls
ZSgpLmhlaWdodCgpOworICAgIGlmIChjaGlsZE1haW5FeHRlbnQuaXNBdXRvKCkgfHwgKGNoaWxk
TWFpbkV4dGVudC5pc0ZpeGVkKCkgJiYgIWNoaWxkTWFpbkV4dGVudC52YWx1ZSgpICYmIGhhc0lu
ZmluaXRlTGluZUxlbmd0aCkpIHsKKyAgICAgICAgaWYgKGhhc09ydGhvZ29uYWxGbG93KGNoaWxk
KSkgeworICAgICAgICAgICAgaWYgKGhhc092ZXJyaWRlU2l6ZSkKKyAgICAgICAgICAgICAgICBj
aGlsZC5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICBjaGls
ZC5sYXlvdXRJZk5lZWRlZCgpOworICAgICAgICB9CisgICAgICAgIExheW91dFVuaXQgbWFpbkF4
aXNFeHRlbnQgPSBoYXNPcnRob2dvbmFsRmxvdyhjaGlsZCkgPyBjaGlsZC5sb2dpY2FsSGVpZ2h0
KCkgOiBjaGlsZC5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgQVNTRVJUKG1h
aW5BeGlzRXh0ZW50IC0gbWFpbkF4aXNCb3JkZXJBbmRQYWRkaW5nRXh0ZW50Rm9yQ2hpbGQoY2hp
bGQpID49IDApOworICAgICAgICByZXR1cm4gbWFpbkF4aXNFeHRlbnQgLSBtYWluQXhpc0JvcmRl
ckFuZFBhZGRpbmdFeHRlbnRGb3JDaGlsZChjaGlsZCk7CisgICAgfQorICAgIHJldHVybiBjb21w
dXRlTWFpbkF4aXNFeHRlbnRGb3JDaGlsZChjaGlsZCwgTWFpbk9yUHJlZmVycmVkU2l6ZSwgY2hp
bGRNYWluRXh0ZW50KS52YWx1ZU9yKDApOworfQorCitib29sIFJlbmRlck1hdGhNTEJsb2NrOjpp
c0xlZnRUb1JpZ2h0RmxvdygpIGNvbnN0Cit7CisgICAgaWYgKGlzQ29sdW1uRmxvdygpKQorICAg
ICAgICByZXR1cm4gc3R5bGUoKS53cml0aW5nTW9kZSgpID09IFRvcFRvQm90dG9tV3JpdGluZ01v
ZGUgfHwgc3R5bGUoKS53cml0aW5nTW9kZSgpID09IExlZnRUb1JpZ2h0V3JpdGluZ01vZGU7Cisg
ICAgcmV0dXJuIHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOworfQorCitMYXlvdXRV
bml0IFJlbmRlck1hdGhNTEJsb2NrOjpmbG93QXdhcmVCb3JkZXJTdGFydCgpIGNvbnN0Cit7Cisg
ICAgaWYgKGlzSG9yaXpvbnRhbEZsb3coKSkKKyAgICAgICAgcmV0dXJuIGlzTGVmdFRvUmlnaHRG
bG93KCkgPyBib3JkZXJMZWZ0KCkgOiBib3JkZXJSaWdodCgpOworICAgIHJldHVybiBpc0xlZnRU
b1JpZ2h0RmxvdygpID8gYm9yZGVyVG9wKCkgOiBib3JkZXJCb3R0b20oKTsKK30KKworTGF5b3V0
VW5pdCBSZW5kZXJNYXRoTUxCbG9jazo6Zmxvd0F3YXJlQm9yZGVyRW5kKCkgY29uc3QKK3sKKyAg
ICBpZiAoaXNIb3Jpem9udGFsRmxvdygpKQorICAgICAgICByZXR1cm4gaXNMZWZ0VG9SaWdodEZs
b3coKSA/IGJvcmRlclJpZ2h0KCkgOiBib3JkZXJMZWZ0KCk7CisgICAgcmV0dXJuIGlzTGVmdFRv
UmlnaHRGbG93KCkgPyBib3JkZXJCb3R0b20oKSA6IGJvcmRlclRvcCgpOworfQorCitMYXlvdXRV
bml0IFJlbmRlck1hdGhNTEJsb2NrOjpmbG93QXdhcmVQYWRkaW5nU3RhcnQoKSBjb25zdAorewor
ICAgIGlmIChpc0hvcml6b250YWxGbG93KCkpCisgICAgICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0
RmxvdygpID8gcGFkZGluZ0xlZnQoKSA6IHBhZGRpbmdSaWdodCgpOworICAgIHJldHVybiBpc0xl
ZnRUb1JpZ2h0RmxvdygpID8gcGFkZGluZ1RvcCgpIDogcGFkZGluZ0JvdHRvbSgpOworfQorCitM
YXlvdXRVbml0IFJlbmRlck1hdGhNTEJsb2NrOjpmbG93QXdhcmVQYWRkaW5nRW5kKCkgY29uc3QK
K3sKKyAgICBpZiAoaXNIb3Jpem9udGFsRmxvdygpKQorICAgICAgICByZXR1cm4gaXNMZWZ0VG9S
aWdodEZsb3coKSA/IHBhZGRpbmdSaWdodCgpIDogcGFkZGluZ0xlZnQoKTsKKyAgICByZXR1cm4g
aXNMZWZ0VG9SaWdodEZsb3coKSA/IHBhZGRpbmdCb3R0b20oKSA6IHBhZGRpbmdUb3AoKTsKK30K
KworTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxCbG9jazo6Zmxvd0F3YXJlTWFyZ2luU3RhcnRGb3JD
aGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAoreworICAgIGlmIChpc0hvcml6b250YWxGbG93
KCkpCisgICAgICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RmxvdygpID8gY2hpbGQubWFyZ2luTGVm
dCgpIDogY2hpbGQubWFyZ2luUmlnaHQoKTsKKyAgICByZXR1cm4gaXNMZWZ0VG9SaWdodEZsb3co
KSA/IGNoaWxkLm1hcmdpblRvcCgpIDogY2hpbGQubWFyZ2luQm90dG9tKCk7Cit9CisKK0xheW91
dFVuaXQgUmVuZGVyTWF0aE1MQmxvY2s6OmZsb3dBd2FyZU1hcmdpbkVuZEZvckNoaWxkKFJlbmRl
ckJveCYgY2hpbGQpIGNvbnN0Cit7CisgICAgaWYgKGlzSG9yaXpvbnRhbEZsb3coKSkKKyAgICAg
ICAgcmV0dXJuIGlzTGVmdFRvUmlnaHRGbG93KCkgPyBjaGlsZC5tYXJnaW5SaWdodCgpIDogY2hp
bGQubWFyZ2luTGVmdCgpOworICAgIHJldHVybiBpc0xlZnRUb1JpZ2h0RmxvdygpID8gY2hpbGQu
bWFyZ2luQm90dG9tKCkgOiBjaGlsZC5tYXJnaW5Ub3AoKTsKK30KKworTGF5b3V0VW5pdCBSZW5k
ZXJNYXRoTUxCbG9jazo6Zmxvd0F3YXJlTWFyZ2luQmVmb3JlRm9yQ2hpbGQoUmVuZGVyQm94JiBj
aGlsZCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHRyYW5zZm9ybWVkV3JpdGluZ01vZGUoKSkgewor
ICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIGNoaWxkLm1h
cmdpblRvcCgpOworICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0aW5nTW9kZToKKyAgICAgICAgcmV0
dXJuIGNoaWxkLm1hcmdpbkJvdHRvbSgpOworICAgIGNhc2UgTGVmdFRvUmlnaHRXcml0aW5nTW9k
ZToKKyAgICAgICAgcmV0dXJuIGNoaWxkLm1hcmdpbkxlZnQoKTsKKyAgICBjYXNlIFJpZ2h0VG9M
ZWZ0V3JpdGluZ01vZGU6CisgICAgICAgIHJldHVybiBjaGlsZC5tYXJnaW5SaWdodCgpOworICAg
IH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbWFyZ2luVG9wKCk7Cit9
CisKK0xheW91dFVuaXQgUmVuZGVyTWF0aE1MQmxvY2s6OmZsb3dBd2FyZU1hcmdpbkFmdGVyRm9y
Q2hpbGQoUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHRyYW5zZm9ybWVk
V3JpdGluZ01vZGUoKSkgeworICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9kZToKKyAgICAg
ICAgcmV0dXJuIGNoaWxkLm1hcmdpbkJvdHRvbSgpOworICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0
aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIGNoaWxkLm1hcmdpblRvcCgpOworICAgIGNhc2UgTGVm
dFRvUmlnaHRXcml0aW5nTW9kZToKKyAgICAgICAgcmV0dXJuIGNoaWxkLm1hcmdpblJpZ2h0KCk7
CisgICAgY2FzZSBSaWdodFRvTGVmdFdyaXRpbmdNb2RlOgorICAgICAgICByZXR1cm4gY2hpbGQu
bWFyZ2luTGVmdCgpOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gbWFyZ2luQm90dG9tKCk7Cit9CisKK1dyaXRpbmdNb2RlIFJlbmRlck1hdGhNTEJsb2NrOjp0
cmFuc2Zvcm1lZFdyaXRpbmdNb2RlKCkgY29uc3QKK3sKKyAgICBXcml0aW5nTW9kZSBtb2RlID0g
c3R5bGUoKS53cml0aW5nTW9kZSgpOworICAgIGlmICghaXNDb2x1bW5GbG93KCkpCisgICAgICAg
IHJldHVybiBtb2RlOworCisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBUb3BUb0JvdHRv
bVdyaXRpbmdNb2RlOgorICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0aW5nTW9kZToKKyAgICAgICAg
cmV0dXJuIHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gTGVmdFRvUmlnaHRXcml0
aW5nTW9kZSA6IFJpZ2h0VG9MZWZ0V3JpdGluZ01vZGU7CisgICAgY2FzZSBMZWZ0VG9SaWdodFdy
aXRpbmdNb2RlOgorICAgIGNhc2UgUmlnaHRUb0xlZnRXcml0aW5nTW9kZToKKyAgICAgICAgcmV0
dXJuIHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gVG9wVG9Cb3R0b21Xcml0aW5n
TW9kZSA6IEJvdHRvbVRvVG9wV3JpdGluZ01vZGU7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlOworfQorCitib29sIFJl
bmRlck1hdGhNTEJsb2NrOjppc0NvbHVtbkZsb3coKSBjb25zdAoreworICAgIHJldHVybiBzdHls
ZSgpLmlzQ29sdW1uRmxleERpcmVjdGlvbigpOworfQorCiB9ICAgIAogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2su
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suaApp
bmRleCA2Y2I2ZTdiYjg2MmNiNWM2YWMwOTU2ZDJiMjYwNWYyZWRkOTI0MzczLi41OGMzNGJjMDEy
NmRhOGU5ZWRhYzUyNGE1ODE4MWEwODM2MThkZGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oCkBAIC02MywxMSArNjMsMzEg
QEAgcHVibGljOgogICAgIAogICAgIC8vIENyZWF0ZSBhIG5ldyBSZW5kZXJNYXRoTUxCbG9jaywg
d2l0aCBhIG5ldyBzdHlsZSBpbmhlcml0aW5nIGZyb20gdGhpcy0+c3R5bGUoKS4KICAgICBSZW5k
ZXJQdHI8UmVuZGVyTWF0aE1MQmxvY2s+IGNyZWF0ZUFub255bW91c01hdGhNTEJsb2NrKCk7Ci0g
ICAgCisKK3Byb3RlY3RlZDoKKyAgICBib29sIGlzTGVmdFRvUmlnaHRGbG93KCkgY29uc3Q7Cisg
ICAgTGF5b3V0VW5pdCBmbG93QXdhcmVCb3JkZXJTdGFydCgpIGNvbnN0OworICAgIExheW91dFVu
aXQgZmxvd0F3YXJlQm9yZGVyRW5kKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBmbG93QXdhcmVQ
YWRkaW5nU3RhcnQoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGZsb3dBd2FyZVBhZGRpbmdFbmQo
KSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGZsb3dBd2FyZU1hcmdpblN0YXJ0Rm9yQ2hpbGQoUmVu
ZGVyQm94JiBjaGlsZCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBmbG93QXdhcmVNYXJnaW5FbmRG
b3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGZsb3dBd2Fy
ZU1hcmdpbkJlZm9yZUZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQpIGNvbnN0OworICAgIExheW91
dFVuaXQgZmxvd0F3YXJlTWFyZ2luQWZ0ZXJGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjb25z
dDsKKyAgICBib29sIGhhc09ydGhvZ29uYWxGbG93KFJlbmRlckJveCYgY2hpbGQpIGNvbnN0Owor
CisgICAgTGF5b3V0VW5pdCBtYWluQXhpc0JvcmRlckFuZFBhZGRpbmdFeHRlbnRGb3JDaGlsZChS
ZW5kZXJCb3gmIGNoaWxkKSBjb25zdDsKKyAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRl
TWFpbkF4aXNFeHRlbnRGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBTaXplVHlwZSwgY29uc3Qg
TGVuZ3RoJiBzaXplKTsKKyAgICBMYXlvdXRVbml0IHByZWZlcnJlZE1haW5BeGlzQ29udGVudEV4
dGVudEZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQsIGJvb2wgaGFzSW5maW5pdGVMaW5lTGVuZ3Ro
KTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJNYXRoTUxCbG9jaygpIGNv
bnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIGlzRmxleGlibGVCb3hJ
bXBsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgaXNDb2x1bW5G
bG93KCkgY29uc3Q7CisgICAgV3JpdGluZ01vZGUgdHJhbnNmb3JtZWRXcml0aW5nTW9kZSgpIGNv
bnN0OworCisgICAgYm9vbCBjb21wdXRlUHJlZmVycmVkTWFpbkF4aXNFeHRlbnQoTGF5b3V0VW5p
dCYgcHJlZmVycmVkTWFpbkF4aXNFeHRlbnQpOwogfTsKIAogY2xhc3MgUmVuZGVyTWF0aE1MVGFi
bGUgZmluYWwgOiBwdWJsaWMgUmVuZGVyVGFibGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwCmluZGV4IDVjZjJjOWRkYzRjODdl
MmRjYzQ3ZjUwYjgyZDY4ODJmNTc1ODc3MDIuLjNjN2RiZWU1YWQ1ZjBkOTY0NzVjMjhkZjJhYTY1
NzA1MDc0NzFiNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MUm93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFJvdy5jcHAKQEAgLTMxLDggKzMxLDEwIEBACiAKICNpbmNsdWRlICJNYXRo
TUxOYW1lcy5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJNYXRoTUxPcGVyYXRvci5oIgogI2luY2x1ZGUgIlJl
bmRlck1hdGhNTFJvb3QuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNTAsNyArNTIsNyBAQCBSZW5kZXJNYXRoTUxSb3c6OlJlbmRlck1hdGhN
TFJvdyhEb2N1bWVudCYgZG9jdW1lbnQsIFJlZjxSZW5kZXJTdHlsZT4mJiBzdHlsZSkKIAogUmVu
ZGVyUHRyPFJlbmRlck1hdGhNTFJvdz4gUmVuZGVyTWF0aE1MUm93OjpjcmVhdGVBbm9ueW1vdXNX
aXRoUGFyZW50UmVuZGVyZXIoUmVuZGVyTWF0aE1MUm9vdCYgcGFyZW50KQogewotICAgIFJlbmRl
clB0cjxSZW5kZXJNYXRoTUxSb3c+IG5ld01Sb3cgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJNYXRo
TUxSb3c+KHBhcmVudC5kb2N1bWVudCgpLCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5
bGVXaXRoRGlzcGxheSgmcGFyZW50LnN0eWxlKCksIEZMRVgpKTsKKyAgICBSZW5kZXJQdHI8UmVu
ZGVyTWF0aE1MUm93PiBuZXdNUm93ID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyTWF0aE1MUm93Pihw
YXJlbnQuZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERp
c3BsYXkoJnBhcmVudC5zdHlsZSgpLCBCTE9DSykpOwogICAgIG5ld01Sb3ctPmluaXRpYWxpemVT
dHlsZSgpOwogICAgIHJldHVybiBuZXdNUm93OwogfQpAQCAtNjYsNDQgKzY4LDE1OSBAQCB2b2lk
IFJlbmRlck1hdGhNTFJvdzo6dXBkYXRlT3BlcmF0b3JQcm9wZXJ0aWVzKCkKICAgICBzZXROZWVk
c0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKIH0KIAotdm9pZCBSZW5kZXJNYXRoTUxSb3c6
OmxheW91dCgpCitzdGF0aWMgaW5saW5lIExheW91dFVuaXQgbWFyZ2luQm94QXNjZW50Rm9yQ2hp
bGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkKIHsKLSAgICBpbnQgc3RyZXRjaEhlaWdodEFib3Zl
QmFzZWxpbmUgPSAwLCBzdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0gMDsKLSAgICBmb3IgKFJl
bmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChjaGlsZC0+bmVlZHNMYXlvdXQoKSkKLSAgICAg
ICAgICAgIGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCpjaGlsZCkubGF5b3V0KCk7Ci0gICAgICAg
IGlmIChpczxSZW5kZXJNYXRoTUxCbG9jaz4oKmNoaWxkKSkgewotICAgICAgICAgICAgLy8gV2Ug
c2tpcCB0aGUgc3RyZXRjaHkgb3BlcmF0b3JzIGFzIHRoZXkgbXVzdCBub3QgYmUgaW5jbHVkZWQg
aW4gdGhlIGNvbXB1dGF0aW9uIG9mIHRoZSBzdHJldGNoIHNpemUuCi0gICAgICAgICAgICBhdXRv
KiByZW5kZXJPcGVyYXRvciA9IGRvd25jYXN0PFJlbmRlck1hdGhNTEJsb2NrPigqY2hpbGQpLnVu
ZW1iZWxsaXNoZWRPcGVyYXRvcigpOworICAgIHJldHVybiBjaGlsZC5maXJzdExpbmVCYXNlbGlu
ZSgpLnZhbHVlT3IoY2hpbGQuaGVpZ2h0KCkpICsgY2hpbGQubWFyZ2luVG9wKCk7Cit9CisKK09w
dGlvbmFsPGludD4gUmVuZGVyTWF0aE1MUm93OjpmaXJzdExpbmVCYXNlbGluZSgpIGNvbnN0Cit7
CisgICAgUmVuZGVyQm94KiBiYXNlbGluZUNoaWxkID0gZmlyc3RDaGlsZEJveCgpOworICAgIGlm
ICghYmFzZWxpbmVDaGlsZCkKKyAgICAgICAgcmV0dXJuIE9wdGlvbmFsPGludD4oKTsKKworICAg
IE9wdGlvbmFsPGludD4gYmFzZWxpbmUgPSBiYXNlbGluZUNoaWxkLT5maXJzdExpbmVCYXNlbGlu
ZSgpOworICAgIGlmICghYmFzZWxpbmUpCisgICAgICAgIHJldHVybiBPcHRpb25hbDxpbnQ+KGJh
c2VsaW5lQ2hpbGQtPmJvcmRlclRvcCgpICsgYmFzZWxpbmVDaGlsZC0+cGFkZGluZ1RvcCgpICsg
YmFzZWxpbmVDaGlsZC0+Y29udGVudEhlaWdodCgpICsgYmFzZWxpbmVDaGlsZC0+bG9naWNhbFRv
cCgpKTsKKworICAgIHJldHVybiBPcHRpb25hbDxpbnQ+KGJhc2VsaW5lLnZhbHVlKCkgKyBiYXNl
bGluZUNoaWxkLT5sb2dpY2FsVG9wKCkpOworfQorCit2b2lkIFJlbmRlck1hdGhNTFJvdzo6cHJl
cGFyZUNoaWxkRm9yUG9zaXRpb25lZExheW91dChSZW5kZXJCb3gmIGNoaWxkLCBMYXlvdXRVbml0
IGhvcml6b250YWxPZmZzZXQsIExheW91dFVuaXQgdmVydGljYWxPZmZzZXQpCit7CisgICAgQVNT
RVJUKGNoaWxkLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKTsKKyAgICBjaGlsZC5jb250YWluaW5n
QmxvY2soKS0+aW5zZXJ0UG9zaXRpb25lZE9iamVjdChjaGlsZCk7CisgICAgUmVuZGVyTGF5ZXIq
IGNoaWxkTGF5ZXIgPSBjaGlsZC5sYXllcigpOworICAgIGNoaWxkTGF5ZXItPnNldFN0YXRpY0lu
bGluZVBvc2l0aW9uKGhvcml6b250YWxPZmZzZXQpOworCisgICAgaWYgKGNoaWxkTGF5ZXItPnN0
YXRpY0Jsb2NrUG9zaXRpb24oKSAhPSB2ZXJ0aWNhbE9mZnNldCkgeworICAgICAgICBjaGlsZExh
eWVyLT5zZXRTdGF0aWNCbG9ja1Bvc2l0aW9uKHZlcnRpY2FsT2Zmc2V0KTsKKyAgICAgICAgaWYg
KGNoaWxkLnN0eWxlKCkuaGFzU3RhdGljQmxvY2tQb3NpdGlvbihzdHlsZSgpLmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpKQorICAgICAgICAgICAgY2hpbGQuc2V0Q2hpbGROZWVkc0xheW91dChN
YXJrT25seVRoaXMpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJNYXRoTUxSb3c6OmNvbXB1dGVM
aW5lVmVydGljYWxTdHJldGNoKGludCYgc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUsIGludCYg
c3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSkKK3sKKyAgICAvLyBGSVhNRTogV2hhdCBhYm91dCB0
aGUgUmVuZGVyQmxvY2tzPworICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGRC
b3goKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsKKyAgICAgICAg
Y2hpbGQtPmxheW91dElmTmVlZGVkKCk7CisKKyAgICAgICAgaWYgKGlzPFJlbmRlck1hdGhNTEJs
b2NrPihjaGlsZCkpIHsKKyAgICAgICAgICAgIGF1dG8qIHJlbmRlck9wZXJhdG9yID0gZG93bmNh
c3Q8UmVuZGVyTWF0aE1MQmxvY2s+KGNoaWxkKS0+dW5lbWJlbGxpc2hlZE9wZXJhdG9yKCk7CiAg
ICAgICAgICAgICBpZiAocmVuZGVyT3BlcmF0b3IgJiYgcmVuZGVyT3BlcmF0b3ItPmhhc09wZXJh
dG9yRmxhZyhNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OlN0cmV0Y2h5KSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQorCiAgICAgICAgIExheW91dFVuaXQgY2hpbGRIZWln
aHRBYm92ZUJhc2VsaW5lID0gMCwgY2hpbGREZXB0aEJlbG93QmFzZWxpbmUgPSAwOwotICAgICAg
ICBpZiAoaXM8UmVuZGVyTWF0aE1MQmxvY2s+KCpjaGlsZCkpIHsKLSAgICAgICAgICAgIFJlbmRl
ck1hdGhNTEJsb2NrJiBtYXRobWxDaGlsZCA9IGRvd25jYXN0PFJlbmRlck1hdGhNTEJsb2NrPigq
Y2hpbGQpOwotICAgICAgICAgICAgY2hpbGRIZWlnaHRBYm92ZUJhc2VsaW5lID0gbWF0aG1sQ2hp
bGQuZmlyc3RMaW5lQmFzZWxpbmUoKS52YWx1ZU9yKG1hdGhtbENoaWxkLmxvZ2ljYWxIZWlnaHQo
KSk7Ci0gICAgICAgICAgICBjaGlsZERlcHRoQmVsb3dCYXNlbGluZSA9IG1hdGhtbENoaWxkLmxv
Z2ljYWxIZWlnaHQoKSAtIGNoaWxkSGVpZ2h0QWJvdmVCYXNlbGluZTsKLSAgICAgICAgfSBlbHNl
IGlmIChpczxSZW5kZXJNYXRoTUxUYWJsZT4oKmNoaWxkKSkgewotICAgICAgICAgICAgUmVuZGVy
TWF0aE1MVGFibGUmIHRhYmxlQ2hpbGQgPSBkb3duY2FzdDxSZW5kZXJNYXRoTUxUYWJsZT4oKmNo
aWxkKTsKLSAgICAgICAgICAgIGNoaWxkSGVpZ2h0QWJvdmVCYXNlbGluZSA9IHRhYmxlQ2hpbGQu
Zmlyc3RMaW5lQmFzZWxpbmUoKS52YWx1ZU9yKC0xKTsKLSAgICAgICAgICAgIGNoaWxkRGVwdGhC
ZWxvd0Jhc2VsaW5lID0gdGFibGVDaGlsZC5sb2dpY2FsSGVpZ2h0KCkgLSBjaGlsZEhlaWdodEFi
b3ZlQmFzZWxpbmU7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyQm94PigqY2hpbGQpKSB7
Ci0gICAgICAgICAgICBjaGlsZEhlaWdodEFib3ZlQmFzZWxpbmUgPSBkb3duY2FzdDxSZW5kZXJC
b3g+KCpjaGlsZCkubG9naWNhbEhlaWdodCgpOworICAgICAgICBpZiAoaXM8UmVuZGVyTWF0aE1M
QmxvY2s+KGNoaWxkKSkgeworICAgICAgICAgICAgUmVuZGVyTWF0aE1MQmxvY2sqIG1hdGhtbENo
aWxkID0gZG93bmNhc3Q8UmVuZGVyTWF0aE1MQmxvY2s+KGNoaWxkKTsKKyAgICAgICAgICAgIGNo
aWxkSGVpZ2h0QWJvdmVCYXNlbGluZSA9IG1hdGhtbENoaWxkLT5maXJzdExpbmVCYXNlbGluZSgp
LnZhbHVlT3IobWF0aG1sQ2hpbGQtPmxvZ2ljYWxIZWlnaHQoKSk7CisgICAgICAgICAgICBjaGls
ZERlcHRoQmVsb3dCYXNlbGluZSA9IG1hdGhtbENoaWxkLT5sb2dpY2FsSGVpZ2h0KCkgLSBjaGls
ZEhlaWdodEFib3ZlQmFzZWxpbmU7CisgICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyTWF0aE1M
VGFibGU+KGNoaWxkKSkgeworICAgICAgICAgICAgUmVuZGVyTWF0aE1MVGFibGUqIHRhYmxlQ2hp
bGQgPSBkb3duY2FzdDxSZW5kZXJNYXRoTUxUYWJsZT4oY2hpbGQpOworICAgICAgICAgICAgY2hp
bGRIZWlnaHRBYm92ZUJhc2VsaW5lID0gdGFibGVDaGlsZC0+Zmlyc3RMaW5lQmFzZWxpbmUoKS52
YWx1ZU9yKC0xKTsKKyAgICAgICAgICAgIGNoaWxkRGVwdGhCZWxvd0Jhc2VsaW5lID0gdGFibGVD
aGlsZC0+bG9naWNhbEhlaWdodCgpIC0gY2hpbGRIZWlnaHRBYm92ZUJhc2VsaW5lOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgY2hpbGRIZWlnaHRBYm92ZUJhc2VsaW5lID0gY2hpbGQt
PmxvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgICAgIGNoaWxkRGVwdGhCZWxvd0Jhc2VsaW5lID0g
MDsKICAgICAgICAgfQogICAgICAgICBzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IHN0ZDo6
bWF4PExheW91dFVuaXQ+KHN0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCBjaGlsZEhlaWdodEFi
b3ZlQmFzZWxpbmUpOwogICAgICAgICBzdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0gc3RkOjpt
YXg8TGF5b3V0VW5pdD4oc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSwgY2hpbGREZXB0aEJlbG93
QmFzZWxpbmUpOwogICAgIH0KKwogICAgIGlmIChzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSAr
IHN0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPD0gMCkKICAgICAgICAgc3RyZXRjaEhlaWdodEFi
b3ZlQmFzZWxpbmUgPSBzdHlsZSgpLmZvbnRTaXplKCk7Ci0gICAgCi0gICAgLy8gU2V0IHRoZSBz
aXplcyBvZiAocG9zc2libHkgZW1iZWxsaXNoZWQpIHN0cmV0Y2h5IG9wZXJhdG9yIGNoaWxkcmVu
LgotICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJNYXRoTUxCbG9j
az4oKnRoaXMpKSB7Ci0gICAgICAgIGlmIChhdXRvIHJlbmRlck9wZXJhdG9yID0gY2hpbGQudW5l
bWJlbGxpc2hlZE9wZXJhdG9yKCkpCi0gICAgICAgICAgICByZW5kZXJPcGVyYXRvci0+c3RyZXRj
aFRvKHN0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCBzdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5l
KTsKK30KKwordm9pZCBSZW5kZXJNYXRoTUxSb3c6OmxheW91dFJvd0l0ZW1zKGludCBzdHJldGNo
SGVpZ2h0QWJvdmVCYXNlbGluZSwgaW50IHN0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUpCit7Cisg
ICAgYm9vbCBoYXNJbmZpbml0ZUxpbmVMZW5ndGggPSB0cnVlOworCisgICAgTGF5b3V0VW5pdCBo
b3Jpem9udGFsT2Zmc2V0ID0gZmxvd0F3YXJlQm9yZGVyU3RhcnQoKSArIGZsb3dBd2FyZVBhZGRp
bmdTdGFydCgpOworICAgIExheW91dFVuaXQgdmVydGljYWxPZmZzZXQgPSBib3JkZXJUb3AoKSAr
IHBhZGRpbmdUb3AoKTsKKyAgICBMYXlvdXRVbml0IG1heEFzY2VudCA9IDAsIG1heERlc2NlbnQg
PSAwOyAvLyBVc2VkIGJhc2VsaW5lIGFsaWdubWVudC4KKyAgICBib29sIHNob3VsZEZsaXBIb3Jp
em9udGFsID0gIWlzTGVmdFRvUmlnaHRGbG93KCk7CisKKyAgICBmb3IgKFJlbmRlckJveCogY2hp
bGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0Jv
eCgpKSB7CisgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKKyAg
ICAgICAgICAgIHByZXBhcmVDaGlsZEZvclBvc2l0aW9uZWRMYXlvdXQoKmNoaWxkLCBob3Jpem9u
dGFsT2Zmc2V0LCB2ZXJ0aWNhbE9mZnNldCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChpczxSZW5kZXJNYXRoTUxCbG9jaz4oY2hpbGQpKSB7CisgICAg
ICAgICAgICBpZiAoYXV0byByZW5kZXJPcGVyYXRvciA9IGRvd25jYXN0PFJlbmRlck1hdGhNTEJs
b2NrPihjaGlsZCktPnVuZW1iZWxsaXNoZWRPcGVyYXRvcigpKQorICAgICAgICAgICAgICAgIHJl
bmRlck9wZXJhdG9yLT5zdHJldGNoVG8oc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUsIHN0cmV0
Y2hEZXB0aEJlbG93QmFzZWxpbmUpOworICAgICAgICB9CisKKyAgICAgICAgTGF5b3V0VW5pdCBj
aGlsZEhvcml6b250YWxFeHRlbnQgPSBwcmVmZXJyZWRNYWluQXhpc0NvbnRlbnRFeHRlbnRGb3JD
aGlsZCgqY2hpbGQsIGhhc0luZmluaXRlTGluZUxlbmd0aCk7CisgICAgICAgIExheW91dFVuaXQg
Y2hpbGRIb3Jpem9udGFsTWFyZ2luQm94RXh0ZW50ID0gY2hpbGQtPmhvcml6b250YWxCb3JkZXJB
bmRQYWRkaW5nRXh0ZW50KCkgKyBjaGlsZEhvcml6b250YWxFeHRlbnQ7CisgICAgICAgIGNoaWxk
LT5zZXRPdmVycmlkZUxvZ2ljYWxDb250ZW50V2lkdGgoY2hpbGRIb3Jpem9udGFsRXh0ZW50KTsK
KworICAgICAgICBpZiAoY2hpbGRIb3Jpem9udGFsRXh0ZW50ICE9IGNoaWxkLT53aWR0aCgpKQor
ICAgICAgICAgICAgY2hpbGQtPnNldENoaWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKKwor
ICAgICAgICBjaGlsZC0+bGF5b3V0SWZOZWVkZWQoKTsKKworICAgICAgICBMYXlvdXRVbml0IGFz
Y2VudCA9IFdlYkNvcmU6Om1hcmdpbkJveEFzY2VudEZvckNoaWxkKCpjaGlsZCk7CisgICAgICAg
IExheW91dFVuaXQgZGVzY2VudCA9IGNoaWxkLT52ZXJ0aWNhbE1hcmdpbkV4dGVudCgpICsgY2hp
bGQtPmhlaWdodCgpIC0gYXNjZW50OworICAgICAgICBtYXhBc2NlbnQgPSBzdGQ6Om1heChtYXhB
c2NlbnQsIGFzY2VudCk7CisgICAgICAgIG1heERlc2NlbnQgPSBzdGQ6Om1heChtYXhEZXNjZW50
LCBkZXNjZW50KTsKKyAgICAgICAgTGF5b3V0VW5pdCBjaGlsZFZlcnRpY2FsTWFyZ2luQm94RXh0
ZW50ID0gbWF4QXNjZW50ICsgbWF4RGVzY2VudDsKKworICAgICAgICBob3Jpem9udGFsT2Zmc2V0
ICs9IGZsb3dBd2FyZU1hcmdpblN0YXJ0Rm9yQ2hpbGQoKmNoaWxkKTsKKworICAgICAgICBzZXRM
b2dpY2FsSGVpZ2h0KHN0ZDo6bWF4KGxvZ2ljYWxIZWlnaHQoKSwgdmVydGljYWxPZmZzZXQgKyBi
b3JkZXJCb3R0b20oKSArIHBhZGRpbmdCb3R0b20oKSArIGNoaWxkVmVydGljYWxNYXJnaW5Cb3hF
eHRlbnQgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkpKTsKKworICAgICAgICBMYXlvdXRQ
b2ludCBjaGlsZExvY2F0aW9uKHNob3VsZEZsaXBIb3Jpem9udGFsID8gd2lkdGgoKSAtIGhvcml6
b250YWxPZmZzZXQgLSBjaGlsZEhvcml6b250YWxFeHRlbnQgOiBob3Jpem9udGFsT2Zmc2V0LCB2
ZXJ0aWNhbE9mZnNldCArIGNoaWxkLT5tYXJnaW5Ub3AoKSk7CisgICAgICAgIGNoaWxkLT5zZXRM
b2NhdGlvbihjaGlsZExvY2F0aW9uKTsKKworICAgICAgICBob3Jpem9udGFsT2Zmc2V0ICs9IGNo
aWxkSG9yaXpvbnRhbE1hcmdpbkJveEV4dGVudCArIGZsb3dBd2FyZU1hcmdpbkVuZEZvckNoaWxk
KCpjaGlsZCk7CisgICAgfQorCisgICAgTGF5b3V0VW5pdCBjZW50ZXJCbG9ja09mZnNldCA9IDA7
CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgRkxFWCB3aGVuIGl0IGlzIG5vdCByZXF1aXJlZCBi
eSB0aGUgY3NzLgorICAgIGlmIChzdHlsZSgpLmRpc3BsYXkoKSA9PSBCTE9DSyB8fCBzdHlsZSgp
LmRpc3BsYXkoKSA9PSBGTEVYKQorICAgICAgICBjZW50ZXJCbG9ja09mZnNldCA9IHN0ZDo6bWF4
PExheW91dFVuaXQ+KDAsICh3aWR0aCgpIC0gKGhvcml6b250YWxPZmZzZXQgKyBmbG93QXdhcmVC
b3JkZXJTdGFydCgpICsgZmxvd0F3YXJlUGFkZGluZ1N0YXJ0KCkpKSAvIDIpOworCisgICAgaWYg
KHNob3VsZEZsaXBIb3Jpem9udGFsICYmIGNlbnRlckJsb2NrT2Zmc2V0ID4gMCkKKyAgICAgICAg
Y2VudGVyQmxvY2tPZmZzZXQgPSAtIGNlbnRlckJsb2NrT2Zmc2V0OworCisgICAgZm9yIChSZW5k
ZXJCb3gqIGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmdCb3goKSkgeworICAgICAgICBMYXlvdXRVbml0IGFzY2VudCA9IFdlYkNvcmU6Om1h
cmdpbkJveEFzY2VudEZvckNoaWxkKCpjaGlsZCk7CisgICAgICAgIExheW91dFVuaXQgc3RhcnRP
ZmZzZXQgPSBtYXhBc2NlbnQgLSBhc2NlbnQ7CisgICAgICAgIGNoaWxkLT5zZXRMb2NhdGlvbihj
aGlsZC0+bG9jYXRpb24oKSArIExheW91dFBvaW50KGNlbnRlckJsb2NrT2Zmc2V0LCBzdGFydE9m
ZnNldCkpOwogICAgIH0KK30KKwordm9pZCBSZW5kZXJNYXRoTUxSb3c6OmxheW91dEJsb2NrKGJv
b2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCkKK3sKKyAgICBBU1NFUlQobmVlZHNMYXlv
dXQoKSk7CisKKyAgICBpZiAoIXJlbGF5b3V0Q2hpbGRyZW4gJiYgc2ltcGxpZmllZExheW91dCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUg
PSAwOworICAgIGludCBzdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0gMDsKKyAgICBjb21wdXRl
TGluZVZlcnRpY2FsU3RyZXRjaChzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSwgc3RyZXRjaERl
cHRoQmVsb3dCYXNlbGluZSk7CisKKyAgICByZWNvbXB1dGVMb2dpY2FsV2lkdGgoKTsKKworICAg
IHNldExvZ2ljYWxIZWlnaHQoYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSArIHNjcm9s
bGJhckxvZ2ljYWxIZWlnaHQoKSk7CiAKLSAgICBSZW5kZXJNYXRoTUxCbG9jazo6bGF5b3V0KCk7
CisgICAgbGF5b3V0Um93SXRlbXMoc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUsIHN0cmV0Y2hE
ZXB0aEJlbG93QmFzZWxpbmUpOworCisgICAgdXBkYXRlTG9naWNhbEhlaWdodCgpOworCisgICAg
Y2xlYXJOZWVkc0xheW91dCgpOworfQorCit2b2lkIFJlbmRlck1hdGhNTFJvdzo6cGFpbnRDaGls
ZHJlbihQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0
LCBQYWludEluZm8mIHBhaW50SW5mb0ZvckNoaWxkLCBib29sIHVzZVByaW50UmVjdCkKK3sKKyAg
ICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKSB7CisgICAgICAgIGlmICghcGFpbnRDaGlsZCgqY2hp
bGQsIHBhaW50SW5mbywgcGFpbnRPZmZzZXQsIHBhaW50SW5mb0ZvckNoaWxkLCB1c2VQcmludFJl
Y3QsIFBhaW50QXNJbmxpbmVCbG9jaykpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTFJvdy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxS
b3cuaAppbmRleCAwNjQwOGI1ZDk2ZGJiMzRkNzhlNTgyMjFkZDJkZGY3NzZkMzQxYWRmLi4yMjM1
NzI3OWE4NWMzN2VhZjk4NjFhZTU4NWJlM2ZjOGFmMzhmYzIxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmgKQEAgLTQyLDEyICs0Miwx
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlbmRlclB0cjxSZW5kZXJNYXRoTUxSb3c+IGNyZWF0
ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihSZW5kZXJNYXRoTUxSb290Jik7CiAgICAgdm9p
ZCB1cGRhdGVPcGVyYXRvclByb3BlcnRpZXMoKTsKIAotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwg
dm9pZCBsYXlvdXQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9v
bCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgb3Zl
cnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q2hpbGRyZW4oUGFpbnRJbmZvJiBm
b3JTZWxmLCBjb25zdCBMYXlvdXRQb2ludCYsIFBhaW50SW5mbyYgZm9yQ2hpbGQsIGJvb2wgdXNl
UHJpbnRSZWN0KSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPGludD4gZmly
c3RMaW5lQmFzZWxpbmUoKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFs
IGJvb2wgaXNSZW5kZXJNYXRoTUxSb3coKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiB0
cnVlOyB9CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gaXNBbm9ueW1vdXMoKSA/ICJSZW5kZXJNYXRoTUxSb3cgKGFub255bW91cyki
IDogIlJlbmRlck1hdGhNTFJvdyI7IH0KKworICAgIHZvaWQgbGF5b3V0Um93SXRlbXMoaW50IHN0
cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCBpbnQgc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSk7
CisgICAgdm9pZCBwcmVwYXJlQ2hpbGRGb3JQb3NpdGlvbmVkTGF5b3V0KFJlbmRlckJveCYsIExh
eW91dFVuaXQgbWFpbkF4aXNPZmZzZXQsIExheW91dFVuaXQgY3Jvc3NBeGlzT2Zmc2V0KTsKKyAg
ICB2b2lkIGNvbXB1dGVMaW5lVmVydGljYWxTdHJldGNoKGludCYgc3RyZXRjaEhlaWdodEFib3Zl
QmFzZWxpbmUsIGludCYgc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSk7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272750</attachid>
            <date>2016-03-03 03:17:27 -0800</date>
            <delta_ts>2016-03-11 01:22:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153208-20160303121710.patch</filename>
            <type>text/plain</type>
            <size>37549</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk3NDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWJhZTM3ZWI4Y2U3OTRh
NWE0Nzg3Y2JlZDEwYmYyODhjOGRhNmQ5Yi4uY2FlMTY0MTU5OTE1NmI3M2M2MjBkNDY5MjJlNTQ5
YTAxMzI3OWIzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE2LTAzLTAzICBGcmVk
ZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KKworICAgICAgICBSZWZhY3RvciBSZW5kZXJN
YXRoTUxSb3cgbGF5b3V0IGZ1bmN0aW9ucyB0byBhdm9pZCB1c2luZyBmbGV4Ym94CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTMyMDgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmaXJz
dCBwYXRjaCBpbiB0aGUgc2V0IHRvIHJlbW92ZSB0aGUgZmxleGJveAorICAgICAgICBkZXBlbmRl
bmN5IG9mIHRoZSBNYXRoTUwgbGF5b3V0IHdpdGhvdXQgY2hhbmdpbmcgdGhlIHJlbmRlciB0cmVl
CisgICAgICAgIHN0cnVjdHVyZS4gV2UgaGF2ZSBkb25lIHNvbWUgdGVtcG9yYXJ5IGNoYW5nZXMg
dG8gYWxsb3cgb3ZlcnJpZGluZyBvZgorICAgICAgICBsYXlvdXRCbG9jayBhbmQgdG8gaW1wbGVt
ZW50IHBhaW50Q2hpbGRyZW4sIGJ1dCB0aGlzIHdpbGwgYmUgcmVtb3ZlIGluIGEKKyAgICAgICAg
Zm9sbG93LXVwIHBhdGNoLiBXZSBhbHNvIGltcGxlbWVudCBmaXJzdExpbmVCYXNlbGluZSwKKyAg
ICAgICAgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMgYW5kIGxheW91dEJsb2NrIG9mIFJl
bmRlck1hdGhNTFJvdyB3aXRob3V0CisgICAgICAgIHVzaW5nIGFueSBmbGV4Ym94IGZ1bmN0aW9u
cy4gV2UgYWRqdXN0IGEgYml0IHRoZSBNYXRoTUwgQ1NTIHRvIHRha2UgaW50bworICAgICAgICBh
Y2NvdW50IHRoZXNlIGNoYW5nZXMuIEZpbmFsbHksIHdlIGRlbGV0ZSB0aGUgdW51c2VkIGhlbHBl
ciBmdW5jdGlvbiB0bworICAgICAgICBjcmVhdGUgYW5vbnltb3VzIFJlbmRlck1hdGhNTFJvdy4K
KworICAgICAgICAqIGNzcy9tYXRobWwuY3NzOgorICAgICAgICAobXMsIG10ZXh0LCBtaSwgbW4s
IG1vLCBhbm5vdGF0aW9uLCBtdGQpOiBQcmV2ZW50IGxpbmVicmVha2luZyBpbnNpZGUgdG9rZW4g
ZWxlbWVudHMgYW5kIHRhYmxlIGNlbGxzLCBvdGhlcndpc2UgdGhpcyBjYXVzZSB0ZXN0IGZhaWx1
cmVzIHdpdGggdGhlIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiBSZW5kZXJNYXRoTUxSb3cuCisgICAg
ICAgIChtYXRoLCBtcm93LCBtZmVuY2VkLCBtZXJyb3IsIG1waGFudG9tLCBtc3R5bGUsIG1lbmNs
b3NlKTogRGVsZXRlZC4gV2Ugbm8gbG9uZ2VyIHJlbHkgb24gZmxleGJveCBmb3IgYmFzZWxpbmUg
YWxpZ25tZW50IG9mIFJlbmRlck1hdGhNTFJvdy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
RmxleGlibGVCb3guaDogQWxsb3cgb3ZlcnJpZGVyIG9mIHRoZSBMYXlvdXRCbG9jayBmb3IgdGhl
IG1vbWVudC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzUmVuZGVyTWF0aE1MTWVuY2xvc2UpOiBBZGQgaGVscGVy
IGZ1bmN0aW9uLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MTWVuY2xv
c2UuaDogZGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cu
Y3BwOiBSZWltcGxlbWVudCB0aGUgY2xhc3Mgd2l0aG91dCB1c2luZyB0aGUgZmxleGJveCBsYXlv
dXQuCisgICAgICAgIChXZWJDb3JlOjptYXJnaW5Cb3hBc2NlbnRGb3JDaGlsZCk6IEFkZCBoZWxw
ZXIgZnVuY3Rpb24gdG8gZWFzaWx5IGNvbXB1dGUgdGhlIGFzY2VudCBvZiBhIGNoaWxkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MUm93OjpmaXJzdExpbmVCYXNlbGluZSk6IEltcGxl
bWVudCB0aGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHRoZSBiYXNlbGluZS4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck1hdGhNTFJvdzo6Y29tcHV0ZUxpbmVWZXJ0aWNhbFN0cmV0Y2gpOiBBZGQg
YSBmdW5jdGlvbiB0aGF0IGJyb3dzZXMgbm9uLXN0cmV0Y2h5IGNoaWxkcmVuIHRvIGRldGVybWlu
ZSB0aGUgZGVzaXJlZCB2ZXJ0aWNhbCBzdHJldGNoIG1ldHJpY3MuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJNYXRoTUxSb3c6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKTogSW1wbGVt
ZW50IHRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIHByZWZlcnJlZCB3aWR0aHMgb2YgdGhl
IFJlbmRlck1hdGhNTFJvdy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvdzo6bGF5
b3V0Um93SXRlbXMpOiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBsYXlvdXRzIGNoaWxkcmVuIChzdHJl
dGNoaW5nIHZlcnRpY2FsIG9wZXJhdG9ycyBpZiBuZWVkZWQpLCBjYWxjdWxhdGUgdGhlIGV4YWN0
IGxvZ2ljYWwgd2lkdGggYW5kIHBvc2l0aW9uIGNoaWxkcmVuLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWF0aE1MUm93OjpsYXlvdXRCbG9jayk6IEltcGxlbWVudCB0aGUgZnVuY3Rpb24gdG8g
ZG8gdGhlIGFjdHVhbCBsYXlvdXQsIHdoaWNoIGVzc2VudGlhbGx5IGNhbGxzIGxheW91dFJvd0l0
ZW1zLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MUm93OjpwYWludENoaWxkcmVuKTog
VGVtcG9yYXJpbHkgaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24sIHdoaWNoIGp1c3QgY2FsbHMgcGFp
bnRDaGlsZCBvbiBlYWNoIGNoaWxkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MUm93
OjpjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIpOiBEZWxldGVkLiBXZSBhY3R1YWxs
eSBkb24ndCBjcmVhdGUgYW5vbnltb3VzIFJlbmRlck1hdGhNTFJvdyBhdCB0aGUgbW9tZW50Lgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MUm93OjpsYXlvdXQpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93Lmg6IFVwZGF0ZSBkZWNsYXJh
dGlvbnMgb2YgZnVuY3Rpb25zLgorCiAyMDE2LTAzLTAyICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgRHJvcCBbVHJlYXROdWxsQXM9TGVnYWN5TnVsbFN0cmluZ10g
ZnJvbSBIVE1MQmFzZUVsZW1lbnQuaHJlZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L21hdGhtbC5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvbWF0aG1sLmNzcwppbmRleCAxODY4ODFj
ZDViMGJhNThjMzg0ZmUxZDVmNzcwZjBjZmM0NmMxYTYzLi41NTJiYzUzYmRmYjk0M2ZkMDhiMmQ5
MjRlODFlZDZhMzBjZjA0YjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvbWF0aG1s
LmNzcworKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvbWF0aG1sLmNzcwpAQCAtMzcsOCArMzcsOCBA
QCBtcywgbWksIG1vLCBtcm93LCBtZmVuY2VkLCBtZnJhYywgbXN1YiwgbXN1cCwgbXN1YnN1cCwg
bW11bHRpc2NyaXB0cywgbXByZXNjcmlwdAogICAgIGRpc3BsYXk6IC13ZWJraXQtaW5saW5lLWZs
ZXggIWltcG9ydGFudDsKIH0KIAotbWF0aCwgbXJvdywgbWZlbmNlZCwgbWVycm9yLCBtcGhhbnRv
bSwgbXN0eWxlLCBtZW5jbG9zZSB7Ci0gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOworbXMsIG10
ZXh0LCBtaSwgbW4sIG1vLCBhbm5vdGF0aW9uLCBtdGQgeworICAgIHdoaXRlLXNwYWNlOiBub3dy
YXAgIWltcG9ydGFudDsKIH0KIAogbW8sIG1mcmFjLCBtdW5kZXIsIG1vdmVyLCBtdW5kZXJvdmVy
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJv
eC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgKaW5kZXgg
OWJhZTMxNmFhZjM3ZDBlZDI0YTEwMzI2MTBiOWY3ZjcwMTdmMzVlMC4uOWZkOTJjMmM1ZWEwOGVk
MmI4ZDMyZjEwZTAyZTI1OTU0YTQ4MDdiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsZXhpYmxlQm94LmgKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBib29sIGF2b2lkc0Zsb2F0cygpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIHRy
dWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2FuRHJvcEFub255bW91c0Jsb2NrQ2hpbGQoKSBjb25z
dCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBsYXlv
dXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWln
aHQgPSAwKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9v
bCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgb3Zl
cnJpZGU7CiAKICAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwg
Ym9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9z
aXRpb25PbkNvbnRhaW5pbmdMaW5lKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIE9wdGlv
bmFsPGludD4gZmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBhZDI1ODM2MTljOThhMDlhMTUzOTczOTMz
MzlhMzg1NGI3ZDRjMjg4Li40ZmM4YThlMmI4YjA5MjE2ODUwMGQ2NzBkYTE4N2JlYjc3MmFjZjk1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0zODgsNiArMzg4
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlck1hdGhNTFJhZGljYWxPcGVy
YXRvcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVy
TWF0aE1MUm93KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNS
ZW5kZXJNYXRoTUxNYXRoKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaXNSZW5kZXJNYXRoTUxNZW5jbG9zZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzUmVuZGVyTWF0aE1MRmVuY2VkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJNYXRoTUxGcmFjdGlvbigpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyTWF0aE1MUm9vdCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTE1lbmNsb3NlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTE1lbmNsb3NlLmgKaW5kZXggZDQyMzFlNThkZDhhM2JjZTgzNTA0
ZDE3NDEwOTM0NjQ4NmM1NGNiOS4uMDAwMzAxNTE2Yjg2ZDYxYWI0OTYwZDkwZmFlMWIyMWY4OGEy
YzE5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxNZW5jbG9zZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MTWVuY2xvc2UuaApAQCAtMzYsNiArMzYsNyBAQCBwdWJsaWM6CiAgICAgUmVuZGVy
TWF0aE1MTWVuY2xvc2UoRWxlbWVudCYsIFJlZjxSZW5kZXJTdHlsZT4mJik7CiAKIHByaXZhdGU6
CisgICAgdmlydHVhbCBib29sIGlzUmVuZGVyTWF0aE1MTWVuY2xvc2UoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIlJlbmRlck1hdGhNTE1lbmNsb3NlIjsgfQogICAgIHZp
cnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMb2dpY2FsSGVpZ2h0KCkgb3ZlcnJpZGU7CkBAIC00
Niw1ICs0Nyw3IEBAIHByaXZhdGU6CiAgICAgCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
UkVOREVSX09CSkVDVChSZW5kZXJNYXRoTUxNZW5jbG9zZSwgaXNSZW5kZXJNYXRoTUxNZW5jbG9z
ZSgpKQorCiAjZW5kaWYgLy8gRU5BQkxFKE1BVEhNTCkKICNlbmRpZiAvLyBSZW5kZXJNYXRoTUxN
ZW5jbG9zZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTFJvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTFJvdy5jcHAKaW5kZXggNWNmMmM5ZGRjNGM4N2UyZGNjNDdmNTBiODJkNjg4MmY1NzU4
NzcwMi4uNzJjNGRiMWYxODMwNWM2NmM2NjY3MWZmMWUzNTBhNjQ1ZTE5Y2JmMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcApA
QCAtNDgsMTMgKzQ4LDYgQEAgUmVuZGVyTWF0aE1MUm93OjpSZW5kZXJNYXRoTUxSb3coRG9jdW1l
bnQmIGRvY3VtZW50LCBSZWY8UmVuZGVyU3R5bGU+JiYgc3R5bGUpCiB7CiB9CiAKLVJlbmRlclB0
cjxSZW5kZXJNYXRoTUxSb3c+IFJlbmRlck1hdGhNTFJvdzo6Y3JlYXRlQW5vbnltb3VzV2l0aFBh
cmVudFJlbmRlcmVyKFJlbmRlck1hdGhNTFJvb3QmIHBhcmVudCkKLXsKLSAgICBSZW5kZXJQdHI8
UmVuZGVyTWF0aE1MUm93PiBuZXdNUm93ID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyTWF0aE1MUm93
PihwYXJlbnQuZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0
aERpc3BsYXkoJnBhcmVudC5zdHlsZSgpLCBGTEVYKSk7Ci0gICAgbmV3TVJvdy0+aW5pdGlhbGl6
ZVN0eWxlKCk7Ci0gICAgcmV0dXJuIG5ld01Sb3c7Ci19Ci0KIHZvaWQgUmVuZGVyTWF0aE1MUm93
Ojp1cGRhdGVPcGVyYXRvclByb3BlcnRpZXMoKQogewogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBj
aGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkp
IHsKQEAgLTY2LDQ0ICs1OSwxNjAgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb3c6OnVwZGF0ZU9wZXJh
dG9yUHJvcGVydGllcygpCiAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7
CiB9CiAKLXZvaWQgUmVuZGVyTWF0aE1MUm93OjpsYXlvdXQoKQorc3RhdGljIGlubGluZSBMYXlv
dXRVbml0IG1hcmdpbkJveEFzY2VudEZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpCiB7
Ci0gICAgaW50IHN0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lID0gMCwgc3RyZXRjaERlcHRoQmVs
b3dCYXNlbGluZSA9IDA7Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGls
ZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAo
Y2hpbGQtPm5lZWRzTGF5b3V0KCkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJFbGVtZW50
PigqY2hpbGQpLmxheW91dCgpOwotICAgICAgICBpZiAoaXM8UmVuZGVyTWF0aE1MQmxvY2s+KCpj
aGlsZCkpIHsKLSAgICAgICAgICAgIC8vIFdlIHNraXAgdGhlIHN0cmV0Y2h5IG9wZXJhdG9ycyBh
cyB0aGV5IG11c3Qgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBjb21wdXRhdGlvbiBvZiB0aGUgc3Ry
ZXRjaCBzaXplLgotICAgICAgICAgICAgYXV0byogcmVuZGVyT3BlcmF0b3IgPSBkb3duY2FzdDxS
ZW5kZXJNYXRoTUxCbG9jaz4oKmNoaWxkKS51bmVtYmVsbGlzaGVkT3BlcmF0b3IoKTsKKyAgICBy
ZXR1cm4gY2hpbGQuZmlyc3RMaW5lQmFzZWxpbmUoKS52YWx1ZU9yKGNoaWxkLmhlaWdodCgpKSAr
IGNoaWxkLm1hcmdpblRvcCgpOworfQorCitPcHRpb25hbDxpbnQ+IFJlbmRlck1hdGhNTFJvdzo6
Zmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdAoreworICAgIFJlbmRlckJveCogYmFzZWxpbmVDaGls
ZCA9IGZpcnN0Q2hpbGRCb3goKTsKKyAgICBpZiAoIWJhc2VsaW5lQ2hpbGQpCisgICAgICAgIHJl
dHVybiBPcHRpb25hbDxpbnQ+KCk7CisKKyAgICBPcHRpb25hbDxpbnQ+IGJhc2VsaW5lID0gYmFz
ZWxpbmVDaGlsZC0+Zmlyc3RMaW5lQmFzZWxpbmUoKTsKKyAgICBpZiAoIWJhc2VsaW5lKQorICAg
ICAgICByZXR1cm4gT3B0aW9uYWw8aW50PihiYXNlbGluZUNoaWxkLT5ib3JkZXJUb3AoKSArIGJh
c2VsaW5lQ2hpbGQtPnBhZGRpbmdUb3AoKSArIGJhc2VsaW5lQ2hpbGQtPmNvbnRlbnRIZWlnaHQo
KSArIGJhc2VsaW5lQ2hpbGQtPmxvZ2ljYWxUb3AoKSk7CisKKyAgICByZXR1cm4gT3B0aW9uYWw8
aW50PihiYXNlbGluZS52YWx1ZSgpICsgYmFzZWxpbmVDaGlsZC0+bG9naWNhbFRvcCgpKTsKK30K
Kwordm9pZCBSZW5kZXJNYXRoTUxSb3c6OmNvbXB1dGVMaW5lVmVydGljYWxTdHJldGNoKGludCYg
c3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUsIGludCYgc3RyZXRjaERlcHRoQmVsb3dCYXNlbGlu
ZSkKK3sKKyAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKSB7CisgICAgICAgIGlmIChpczxSZW5k
ZXJNYXRoTUxCbG9jaz4oY2hpbGQpKSB7CisgICAgICAgICAgICBhdXRvKiByZW5kZXJPcGVyYXRv
ciA9IGRvd25jYXN0PFJlbmRlck1hdGhNTEJsb2NrPihjaGlsZCktPnVuZW1iZWxsaXNoZWRPcGVy
YXRvcigpOwogICAgICAgICAgICAgaWYgKHJlbmRlck9wZXJhdG9yICYmIHJlbmRlck9wZXJhdG9y
LT5oYXNPcGVyYXRvckZsYWcoTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpTdHJldGNoeSkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgTGF5b3V0VW5pdCBj
aGlsZEhlaWdodEFib3ZlQmFzZWxpbmUgPSAwLCBjaGlsZERlcHRoQmVsb3dCYXNlbGluZSA9IDA7
Ci0gICAgICAgIGlmIChpczxSZW5kZXJNYXRoTUxCbG9jaz4oKmNoaWxkKSkgewotICAgICAgICAg
ICAgUmVuZGVyTWF0aE1MQmxvY2smIG1hdGhtbENoaWxkID0gZG93bmNhc3Q8UmVuZGVyTWF0aE1M
QmxvY2s+KCpjaGlsZCk7Ci0gICAgICAgICAgICBjaGlsZEhlaWdodEFib3ZlQmFzZWxpbmUgPSBt
YXRobWxDaGlsZC5maXJzdExpbmVCYXNlbGluZSgpLnZhbHVlT3IobWF0aG1sQ2hpbGQubG9naWNh
bEhlaWdodCgpKTsKLSAgICAgICAgICAgIGNoaWxkRGVwdGhCZWxvd0Jhc2VsaW5lID0gbWF0aG1s
Q2hpbGQubG9naWNhbEhlaWdodCgpIC0gY2hpbGRIZWlnaHRBYm92ZUJhc2VsaW5lOwotICAgICAg
ICB9IGVsc2UgaWYgKGlzPFJlbmRlck1hdGhNTFRhYmxlPigqY2hpbGQpKSB7Ci0gICAgICAgICAg
ICBSZW5kZXJNYXRoTUxUYWJsZSYgdGFibGVDaGlsZCA9IGRvd25jYXN0PFJlbmRlck1hdGhNTFRh
YmxlPigqY2hpbGQpOwotICAgICAgICAgICAgY2hpbGRIZWlnaHRBYm92ZUJhc2VsaW5lID0gdGFi
bGVDaGlsZC5maXJzdExpbmVCYXNlbGluZSgpLnZhbHVlT3IoLTEpOwotICAgICAgICAgICAgY2hp
bGREZXB0aEJlbG93QmFzZWxpbmUgPSB0YWJsZUNoaWxkLmxvZ2ljYWxIZWlnaHQoKSAtIGNoaWxk
SGVpZ2h0QWJvdmVCYXNlbGluZTsKLSAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJCb3g+KCpj
aGlsZCkpIHsKLSAgICAgICAgICAgIGNoaWxkSGVpZ2h0QWJvdmVCYXNlbGluZSA9IGRvd25jYXN0
PFJlbmRlckJveD4oKmNoaWxkKS5sb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgICAgICBjaGlsZERl
cHRoQmVsb3dCYXNlbGluZSA9IDA7Ci0gICAgICAgIH0KKworICAgICAgICBjaGlsZC0+bGF5b3V0
SWZOZWVkZWQoKTsKKworICAgICAgICBMYXlvdXRVbml0IGNoaWxkTG9naWNhbEhlaWdodCA9IGNo
aWxkLT5sb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgIExheW91dFVuaXQgY2hpbGRIZWlnaHRBYm92
ZUJhc2VsaW5lID0gY2hpbGQtPmZpcnN0TGluZUJhc2VsaW5lKCkudmFsdWVPcihjaGlsZExvZ2lj
YWxIZWlnaHQpOworICAgICAgICBMYXlvdXRVbml0IGNoaWxkRGVwdGhCZWxvd0Jhc2VsaW5lID0g
Y2hpbGRMb2dpY2FsSGVpZ2h0IC0gY2hpbGRIZWlnaHRBYm92ZUJhc2VsaW5lOworCiAgICAgICAg
IHN0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oc3RyZXRj
aEhlaWdodEFib3ZlQmFzZWxpbmUsIGNoaWxkSGVpZ2h0QWJvdmVCYXNlbGluZSk7CiAgICAgICAg
IHN0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRVbml0PihzdHJldGNo
RGVwdGhCZWxvd0Jhc2VsaW5lLCBjaGlsZERlcHRoQmVsb3dCYXNlbGluZSk7CiAgICAgfQotICAg
IGlmIChzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSArIHN0cmV0Y2hEZXB0aEJlbG93QmFzZWxp
bmUgPD0gMCkKKworICAgIC8vIFdlIGVuc3VyZSBhIG1pbmltYWwgc3RyZXRjaCBzaXplLgorICAg
IGlmIChzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSArIHN0cmV0Y2hEZXB0aEJlbG93QmFzZWxp
bmUgPD0gMCkgewogICAgICAgICBzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IHN0eWxlKCku
Zm9udFNpemUoKTsKLSAgICAKLSAgICAvLyBTZXQgdGhlIHNpemVzIG9mIChwb3NzaWJseSBlbWJl
bGxpc2hlZCkgc3RyZXRjaHkgb3BlcmF0b3IgY2hpbGRyZW4uCi0gICAgZm9yIChhdXRvJiBjaGls
ZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck1hdGhNTEJsb2NrPigqdGhpcykpIHsKLSAgICAgICAg
aWYgKGF1dG8gcmVuZGVyT3BlcmF0b3IgPSBjaGlsZC51bmVtYmVsbGlzaGVkT3BlcmF0b3IoKSkK
LSAgICAgICAgICAgIHJlbmRlck9wZXJhdG9yLT5zdHJldGNoVG8oc3RyZXRjaEhlaWdodEFib3Zl
QmFzZWxpbmUsIHN0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUpOworICAgICAgICBzdHJldGNoRGVw
dGhCZWxvd0Jhc2VsaW5lID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTWF0aE1MUm93Ojpj
b21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCit7CisgICAgQVNTRVJUKHByZWZlcnJlZExv
Z2ljYWxXaWR0aHNEaXJ0eSgpKTsKKworICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0g
bV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSAwOworCisgICAgTGF5b3V0VW5pdCBwcmVmZXJy
ZWRXaWR0aCA9IDA7CisgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gZmlyc3RDaGlsZEJveCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkKKyAgICAgICAgcHJlZmVy
cmVkV2lkdGggKz0gY2hpbGQtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpICsgY2hpbGQtPm1h
cmdpbkxvZ2ljYWxXaWR0aCgpOworCisgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBt
X21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoICsgYm9yZGVyQW5kUGFk
ZGluZ0xvZ2ljYWxXaWR0aCgpOworCisgICAgc2V0UHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5
KGZhbHNlKTsKK30KKwordm9pZCBSZW5kZXJNYXRoTUxSb3c6OmxheW91dFJvd0l0ZW1zKGludCBz
dHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSwgaW50IHN0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUp
Cit7CisgICAgTGF5b3V0VW5pdCBob3Jpem9udGFsT2Zmc2V0ID0gYm9yZGVyQW5kUGFkZGluZ1N0
YXJ0KCk7CisgICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbE9mZnNldCA9IGJvcmRlclRvcCgpICsgcGFk
ZGluZ1RvcCgpOworICAgIExheW91dFVuaXQgbWF4QXNjZW50ID0gMCwgbWF4RGVzY2VudCA9IDA7
IC8vIFVzZWQgYmFzZWxpbmUgYWxpZ25tZW50LgorICAgIGJvb2wgc2hvdWxkRmxpcEhvcml6b250
YWwgPSAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CisKKyAgICAvLyBXZSBmaXJz
dCBzdHJldGNoIHRoZSB2ZXJ0aWNhbCBvcGVyYXRvcnMuCisgICAgLy8gRm9yIGlubGluZSBmb3Jt
dWxhcywgd2UgY2FuIHRoZW4gY2FsY3VsYXRlIHRoZSBsb2dpY2FsIHdpZHRoLgorICAgIExheW91
dFVuaXQgbG9naWNhbFdpZHRoID0gYm9yZGVyQW5kUGFkZGluZ1N0YXJ0KCk7CisgICAgZm9yIChS
ZW5kZXJCb3gqIGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmdCb3goKSkgeworICAgICAgICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRp
b25lZCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGlzPFJlbmRlck1h
dGhNTEJsb2NrPihjaGlsZCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHJlbmRlck9wZXJhdG9y
ID0gZG93bmNhc3Q8UmVuZGVyTWF0aE1MQmxvY2s+KGNoaWxkKS0+dW5lbWJlbGxpc2hlZE9wZXJh
dG9yKCkpCisgICAgICAgICAgICAgICAgcmVuZGVyT3BlcmF0b3ItPnN0cmV0Y2hUbyhzdHJldGNo
SGVpZ2h0QWJvdmVCYXNlbGluZSwgc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSk7CisgICAgICAg
IH0KKworICAgICAgICBjaGlsZC0+bGF5b3V0SWZOZWVkZWQoKTsKKworICAgICAgICBsb2dpY2Fs
V2lkdGggKz0gY2hpbGQtPm1hcmdpblN0YXJ0KCkgKyBjaGlsZC0+d2lkdGgoKSArIGNoaWxkLT5t
YXJnaW5FbmQoKTsKKyAgICB9CisKKyAgICBsb2dpY2FsV2lkdGggKz0gYm9yZGVyRW5kKCkgKyBw
YWRkaW5nRW5kKCk7CisgICAgLy8gRklYTUU6IFJlbmRlck1hdGhNTFJvb3QgYW5kIFJlbmRlck1h
dGhNTEVuY2xvc2UgY2xhc3NlcyBzaG91bGQgYWxzbyByZWNhbGN1bGF0ZSB0aGUgZXhhY3QgbG9n
aWNhbCB3aWR0aCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBwcmVmZXJyZWQgd2lkdGguCisgICAgLy8g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAzMjYKKyAgICBp
ZiAoKCFpc1JlbmRlck1hdGhNTE1hdGgoKSB8fCBzdHlsZSgpLmRpc3BsYXkoKSA9PSBJTkxJTkUp
ICYmICFpc1JlbmRlck1hdGhNTFJvb3QoKSAmJiAhaXNSZW5kZXJNYXRoTUxNZW5jbG9zZSgpKQor
ICAgICAgICBzZXRMb2dpY2FsV2lkdGgobG9naWNhbFdpZHRoKTsKKworICAgIGZvciAoUmVuZGVy
Qm94KiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nQm94KCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQo
KSkgeworICAgICAgICAgICAgY2hpbGQtPmNvbnRhaW5pbmdCbG9jaygpLT5pbnNlcnRQb3NpdGlv
bmVkT2JqZWN0KCpjaGlsZCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAg
ICAgICBMYXlvdXRVbml0IGNoaWxkSG9yaXpvbnRhbEV4dGVudCA9IGNoaWxkLT53aWR0aCgpOwor
ICAgICAgICBMYXlvdXRVbml0IGFzY2VudCA9IFdlYkNvcmU6Om1hcmdpbkJveEFzY2VudEZvckNo
aWxkKCpjaGlsZCk7CisgICAgICAgIExheW91dFVuaXQgZGVzY2VudCA9IGNoaWxkLT52ZXJ0aWNh
bE1hcmdpbkV4dGVudCgpICsgY2hpbGQtPmhlaWdodCgpIC0gYXNjZW50OworICAgICAgICBtYXhB
c2NlbnQgPSBzdGQ6Om1heChtYXhBc2NlbnQsIGFzY2VudCk7CisgICAgICAgIG1heERlc2NlbnQg
PSBzdGQ6Om1heChtYXhEZXNjZW50LCBkZXNjZW50KTsKKyAgICAgICAgTGF5b3V0VW5pdCBjaGls
ZFZlcnRpY2FsTWFyZ2luQm94RXh0ZW50ID0gbWF4QXNjZW50ICsgbWF4RGVzY2VudDsKKworICAg
ICAgICBob3Jpem9udGFsT2Zmc2V0ICs9IGNoaWxkLT5tYXJnaW5TdGFydCgpOworCisgICAgICAg
IHNldExvZ2ljYWxIZWlnaHQoc3RkOjptYXgobG9naWNhbEhlaWdodCgpLCB2ZXJ0aWNhbE9mZnNl
dCArIGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ0JvdHRvbSgpICsgY2hpbGRWZXJ0aWNhbE1hcmdp
bkJveEV4dGVudCArIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSkpOworCisgICAgICAgIExh
eW91dFBvaW50IGNoaWxkTG9jYXRpb24oc2hvdWxkRmxpcEhvcml6b250YWwgPyB3aWR0aCgpIC0g
aG9yaXpvbnRhbE9mZnNldCAtIGNoaWxkSG9yaXpvbnRhbEV4dGVudCA6IGhvcml6b250YWxPZmZz
ZXQsIHZlcnRpY2FsT2Zmc2V0ICsgY2hpbGQtPm1hcmdpblRvcCgpKTsKKyAgICAgICAgY2hpbGQt
PnNldExvY2F0aW9uKGNoaWxkTG9jYXRpb24pOworCisgICAgICAgIGhvcml6b250YWxPZmZzZXQg
Kz0gY2hpbGRIb3Jpem9udGFsRXh0ZW50ICsgY2hpbGQtPm1hcmdpbkVuZCgpOworICAgIH0KKwor
ICAgIExheW91dFVuaXQgY2VudGVyQmxvY2tPZmZzZXQgPSAwOworICAgIC8vIEZJWE1FOiBSZW1v
dmUgdGhlIEZMRVggd2hlbiBpdCBpcyBub3QgcmVxdWlyZWQgYnkgdGhlIGNzcy4KKyAgICBpZiAo
c3R5bGUoKS5kaXNwbGF5KCkgPT0gQkxPQ0sgfHwgc3R5bGUoKS5kaXNwbGF5KCkgPT0gRkxFWCkK
KyAgICAgICAgY2VudGVyQmxvY2tPZmZzZXQgPSBzdGQ6Om1heDxMYXlvdXRVbml0PigwLCAod2lk
dGgoKSAtIChob3Jpem9udGFsT2Zmc2V0ICsgYm9yZGVyRW5kKCkgKyBwYWRkaW5nRW5kKCkpKSAv
IDIpOworCisgICAgaWYgKHNob3VsZEZsaXBIb3Jpem9udGFsICYmIGNlbnRlckJsb2NrT2Zmc2V0
ID4gMCkKKyAgICAgICAgY2VudGVyQmxvY2tPZmZzZXQgPSAtY2VudGVyQmxvY2tPZmZzZXQ7CisK
KyAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKSB7CisgICAgICAgIExheW91dFVuaXQgYXNjZW50
ID0gV2ViQ29yZTo6bWFyZ2luQm94QXNjZW50Rm9yQ2hpbGQoKmNoaWxkKTsKKyAgICAgICAgTGF5
b3V0VW5pdCBzdGFydE9mZnNldCA9IG1heEFzY2VudCAtIGFzY2VudDsKKyAgICAgICAgY2hpbGQt
PnNldExvY2F0aW9uKGNoaWxkLT5sb2NhdGlvbigpICsgTGF5b3V0UG9pbnQoY2VudGVyQmxvY2tP
ZmZzZXQsIHN0YXJ0T2Zmc2V0KSk7CiAgICAgfQorfQorCit2b2lkIFJlbmRlck1hdGhNTFJvdzo6
bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0KQoreworICAgIEFT
U0VSVChuZWVkc0xheW91dCgpKTsKKworICAgIGlmICghcmVsYXlvdXRDaGlsZHJlbiAmJiBzaW1w
bGlmaWVkTGF5b3V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBzdHJldGNoSGVpZ2h0
QWJvdmVCYXNlbGluZSA9IDA7CisgICAgaW50IHN0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSAw
OworICAgIGNvbXB1dGVMaW5lVmVydGljYWxTdHJldGNoKHN0cmV0Y2hIZWlnaHRBYm92ZUJhc2Vs
aW5lLCBzdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lKTsKKworICAgIHJlY29tcHV0ZUxvZ2ljYWxX
aWR0aCgpOwogCi0gICAgUmVuZGVyTWF0aE1MQmxvY2s6OmxheW91dCgpOworICAgIHNldExvZ2lj
YWxIZWlnaHQoYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSArIHNjcm9sbGJhckxvZ2lj
YWxIZWlnaHQoKSk7CisKKyAgICBsYXlvdXRSb3dJdGVtcyhzdHJldGNoSGVpZ2h0QWJvdmVCYXNl
bGluZSwgc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSk7CisKKyAgICB1cGRhdGVMb2dpY2FsSGVp
Z2h0KCk7CisKKyAgICBjbGVhck5lZWRzTGF5b3V0KCk7Cit9CisKK3ZvaWQgUmVuZGVyTWF0aE1M
Um93OjpwYWludENoaWxkcmVuKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2lu
dCYgcGFpbnRPZmZzZXQsIFBhaW50SW5mbyYgcGFpbnRJbmZvRm9yQ2hpbGQsIGJvb2wgdXNlUHJp
bnRSZWN0KQoreworICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsKKyAgICAgICAgaWYgKCFw
YWludENoaWxkKCpjaGlsZCwgcGFpbnRJbmZvLCBwYWludE9mZnNldCwgcGFpbnRJbmZvRm9yQ2hp
bGQsIHVzZVByaW50UmVjdCwgUGFpbnRBc0lubGluZUJsb2NrKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICB9CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MUm93LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFJvdy5oCmluZGV4IDA2NDA4YjVkOTZkYmIzNGQ3OGU1ODIyMWRkMmRkZjc3
NmQzNDFhZGYuLmM3OTZhNzNiZGUyNzEwNjAyNmZiYjUwYjNiZGQ2NDkwZjlmZDE1M2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuaApA
QCAtMzksMTUgKzM5LDE5IEBAIHB1YmxpYzoKICAgICBSZW5kZXJNYXRoTUxSb3coRWxlbWVudCYs
IFJlZjxSZW5kZXJTdHlsZT4mJik7CiAgICAgUmVuZGVyTWF0aE1MUm93KERvY3VtZW50JiwgUmVm
PFJlbmRlclN0eWxlPiYmKTsKIAotICAgIHN0YXRpYyBSZW5kZXJQdHI8UmVuZGVyTWF0aE1MUm93
PiBjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoUmVuZGVyTWF0aE1MUm9vdCYpOwog
ICAgIHZvaWQgdXBkYXRlT3BlcmF0b3JQcm9wZXJ0aWVzKCk7CiAKLXByb3RlY3RlZDoKLSAgICB2
aXJ0dWFsIHZvaWQgbGF5b3V0KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGxheW91dEJs
b2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9
IDApIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBwYWludENoaWxkcmVuKFBhaW50
SW5mbyYgZm9yU2VsZiwgY29uc3QgTGF5b3V0UG9pbnQmLCBQYWludEluZm8mIGZvckNoaWxkLCBi
b29sIHVzZVByaW50UmVjdCkgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCBPcHRpb25hbDxp
bnQ+IGZpcnN0TGluZUJhc2VsaW5lKCkgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAg
dmlydHVhbCBib29sIGlzUmVuZGVyTWF0aE1MUm93KCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyBy
ZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGlzQW5vbnltb3VzKCkgPyAiUmVuZGVyTWF0aE1MUm93IChhbm9u
eW1vdXMpIiA6ICJSZW5kZXJNYXRoTUxSb3ciOyB9CisKKyAgICB2b2lkIGxheW91dFJvd0l0ZW1z
KGludCBzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSwgaW50IHN0cmV0Y2hEZXB0aEJlbG93QmFz
ZWxpbmUpOworICAgIHZvaWQgY29tcHV0ZUxpbmVWZXJ0aWNhbFN0cmV0Y2goaW50JiBzdHJldGNo
SGVpZ2h0QWJvdmVCYXNlbGluZSwgaW50JiBzdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lKTsKKyAg
ICB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkgb3ZlcnJpZGU7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNjRhOTk2MjYzNDE3ZWY3ZjYzNGFhY2UxNDFh
YjRhNjRiZTFiNTViNS4uYjQ4NmFmNWEzMGMwODgwOWVhMGMxZDc2MWE2MzA3NTc2OTE5NzIyZiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE2LTAzLTAzICBGcmVkZXJpYyBXYW5nICA8ZndhbmdA
aWdhbGlhLmNvbT4KKworICAgICAgICBSZWZhY3RvciBSZW5kZXJNYXRoTUxSb3cgbGF5b3V0IGZ1
bmN0aW9ucyB0byBhdm9pZCB1c2luZyBmbGV4Ym94CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTMyMDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBcHBseSBzb21lIHNtYWxsIGFkanVzdG1lbnRzIHRvIE1h
dGhNTCB0ZXN0cyBhZnRlciB0aGUgcmVmYWN0b3Jpbmcgb2YgUmVuZGVyTWF0aE1MUm93LgorCisg
ICAgICAgICogVGVzdEV4cGVjdGF0aW9uczogU2tpcCBmcmFjdGlvbnMtcG9zaXRpb25zIHJlZnRl
c3QgZm9yIG5vdy4gVGhlIHNtYWxsIGRpZmZlcmVuY2Ugd2lsbCBiZSBmaXhlZCBhZnRlciByZWZh
Y3RvcmluZyBjb21wbGV0ZWx5IFJlbmRlck1hdGhNTEZyYWN0aW9uLgorICAgICAgICAqIHBsYXRm
b3JtL2d0ay9tYXRobWwvb3BlbnR5cGUvb3BlbnR5cGUtc3RyZXRjaHktaG9yaXpvbnRhbC1leHBl
Y3RlZC5wbmc6IFVwZGF0ZSByZWZlcmVuY2UgdG8gdGFrZSBpbnRvIGFjY291bnQgc21hbGwgY2hh
bmdlcyBpbiBzdHJldGNoIHNpemUuCisgICAgICAgIFRoZSBpbnRlbmRlZCB0ZXN0IGJlaGF2aW9y
IChyZWFkaW5nIHZhcmlhbnRzIGFuZCBjb25zdHJ1Y3Rpb24gZnJvbSB0aGUgTUFUSCB0YWJsZSkg
aXMgcHJlc2VydmVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9tYXRobWwvb3BlbnR5cGUvb3Bl
bnR5cGUtc3RyZXRjaHktaG9yaXpvbnRhbC1leHBlY3RlZC50eHQ6IGRpdHRvLgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9tYXRobWwvb3BlbnR5cGUvb3BlbnR5cGUtc3RyZXRjaHktaG9yaXpvbnRh
bC1leHBlY3RlZC5wbmc6IGRpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9tYXRobWwvb3Bl
bnR5cGUvb3BlbnR5cGUtc3RyZXRjaHktaG9yaXpvbnRhbC1leHBlY3RlZC50eHQ6IGRpdHRvLgor
CiAyMDE2LTAzLTAyICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
RHJvcCBbVHJlYXROdWxsQXM9TGVnYWN5TnVsbFN0cmluZ10gZnJvbSBIVE1MQmFzZUVsZW1lbnQu
aHJlZgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRl
c3RzL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggNjRjZTMyOWM1OTBkZDMwMTM1MDRkZjZiY2FmYjE4
Mjk2OWY0MjkyMi4uZGRhNWQ2OWEyODc2MTg0NjhjMTUyODYyYzNjYjliOTk3YjNlYmE2ZCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9U
ZXN0RXhwZWN0YXRpb25zCkBAIC0xMTIsNiArMTEyLDkgQEAgd2Via2l0Lm9yZy9iLzEyNzg2MCBb
IERlYnVnIF0ganMvZnVuY3Rpb24tYXBwbHktYWxpYXNlZC5odG1sIFsgU2tpcCBdCiAjIFRoaXMg
dGVzdCB2ZXJpZmllcyBkeW5hbWljIG1hbmlwdWxhdGlvbiBvZiB0aGUgbXJvb3QgYW5kIG1zcXJ0
IGVsZW1lbnRzLgogbWF0aG1sL3Jvb3RzLXJlbW92ZUNoaWxkLmh0bWwgWyBJbWFnZU9ubHlGYWls
dXJlIF0KIAorIyBUaGVyZSBpcyBhIHNtYWxsIDFweCBzaXplIGRpZmZlcmVuY2UgYnV0IHRoaXMg
d2lsbCBiZSBmaXhlZCB3aGVuIHdlIHJlZmFjdG9yIGNvbXBsZXRlbHkgUmVuZGVyTWF0aE1MRnJh
Y3Rpb24uCittYXRobWwvcHJlc2VudGF0aW9uL2ZyYWN0aW9ucy1wb3NpdGlvbnMuaHRtbCBbIFNr
aXAgXQorCiAjIFRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IGEgbWlzbWF0Y2ggcmVmdGVzdCB3aWxs
IGZhaWwgYXMgaW50ZW5kZWQgaWYgYm90aCByZXN1bHRzIGFyZSBzYW1lLiAoaW50cm9kdWNlZCBp
biByOTMxODcpCiBmYXN0L2hhcm5lc3Mvc2FtcGxlLWZhaWwtbWlzbWF0Y2gtcmVmdGVzdC5odG1s
IFsgV29udEZpeCBJbWFnZU9ubHlGYWlsdXJlIF0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZ3RrL21hdGhtbC9vcGVudHlwZS9vcGVudHlwZS1zdHJldGNoeS1ob3Jpem9udGFs
LWV4cGVjdGVkLnBuZyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9tYXRobWwvb3BlbnR5cGUv
b3BlbnR5cGUtc3RyZXRjaHktaG9yaXpvbnRhbC1leHBlY3RlZC5wbmcKaW5kZXggZTRiNTNhYzg4
MTFhZjA0NzhlYzkzNWY5N2VhOTE4YjgzMzkwOWI5Ni4uM2QwMTUxYzI3ZDkxZjc5NTExYWU1MDYy
ZWIzMzAwYTY5NmEwZmQ1ZiAxMDA2NDQKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDM3MjkKemNt
ZUFTQE4/KG9sSHlgdVZCcSFpYTB5fnlVeyt2WVYyYT5pMCpaKT1oXmhsQSVAV3MkbEhgb2s8bX0/
b1RuMXhICnpPQUU3UEdnQ3QmQkxqMElpKTIkezNrIyFeQnkmUihHaDxeVEduNCZgZWB5MFh1X2J4
Q3lEPEMqITNCR2xQaUExPwp6NlpDWCg0NV5zJl9Lc25tMilsSHshK0pzOW9YS157dTJWYCU2bDF3
S0F7YVkwKXw/bDNDIXB5dXI8cSZnVmFVVmAKenJSTHhRTSF0PTY2a0A7V2haWCZoR311c0FlKG0x
Pk8wOWt5PEtNTVk8SWlUO00oUiFmJiZhVCNJUCozJDFIJjdzCnpNcGd5XjtScHI+TG48KEt8R0Q/
Xl5tS2lIJWlxVShyUT5WQVVTJkpaJGd0eXcrVWNqQz5pZzZ1MmNOVUV2aWtNIQp6X2pffHxMNTJn
WSZxV20oOURFV084SUdgc1FJR05GUX11Q29jbFlJVVk5QWwjXzJwd2AqdVZ8Nnp2Izl4KDZiYHoK
eklUI3N8bjdBMWYpSFgwc2c7RG5OWnU0fmdfO3QwNXYjK25Le2UwRnVVNiE1VSFLMndhKEApcCl0
NC1kVHxLLVdhCnokP140bndAUHBfSlZeVDdCfHRyXjthJmlfVmUjVXtUa31pYS1yOCErUGE3WVhN
SjQ8TiMkNWdYenV6KyE9YlhPMQp6SiU3R2s/WE8+N1UpVFRwblNPaDcmSU8+enwzOUQ0PWxVfTt7
MSpxc19+UU11ZVVARSpgUzxzQ0FiNVhvWn1ybnQKelF3YE5gWiNrTSZTVylyZyZDU2heQTNxTF9z
e1EtKkk9e1QjbyV7RnlmNGlOcEFBNChKZGlERXRtQX04ZTcxeGk7CnpzYTlnUlE5R1l3JkUpeXol
ZUoofG5yPmxVYHRfamNgI1U/OEghdml5JSRKVCgqVVFNUF4kWHtYLUVxbVApKSR6Qgp6QU9Db0N6
LXB0YCtNaE4xd3I/LWJeTTAqajV4MkxoXndoSFhUUj8oIXBQIXZBaik8RFNiSitvPWhRYy1TNSRm
aj4KekdlY3VkT1YpWTRfUCNDPiFDPXMqdSkhfjlAMFBIR2cjYHIjSDhwcTJ1M3BHN258PU95d0Mz
OGE1Q3VqWHtDWi1kCnpsN1NLI09IMDMqdldoWUVCcjcrVEszY05uOW5oQ3dVdEtsNl90eTZJK2ZA
c0JyLXRuUyttbUNxIU92Jjs8PzhTNgp6KjZ5cFdJQ2QjWU45X0UzYH1vP3hjUXojOzxEK1o4ZjYh
VUZ3RygzMjYwaXMyPndjIzBKdVBvdlNDaDlwRDxkP0QKelUoVipvQzJzUkFVO30kKEJYVEIhZEB5
SHN7WXdeeGZ7VUN3Mz1LMDVGZm52Y2l4RGdMXkR7OF5gdEFTeWN5ViNACnpTSDFzbHg4TUt3Pi1H
QWxNS31HbkRzSH57PUsxe2tlPW5FTS19bUtFX2Z8RUE1QSFCNlduMGE/eDRTJndadk9rWAp6Wikx
VUJ7YFU4dHM7XmxhQlcmdmJ7ZHdAPCE1eV58SWNDKkFLMEtfa2B+UG5EZCVmN0c9YUxVd0JaTGAj
JXM4bzgKenplaiFZTnkremRyQn5WS1pmQ0txNHpDVF5Ab2NWamRFQjBnS3dkVjZubG8tcCpeN2Jr
Pz0+Tyl7NSlCQ2BUcURRCno9fnReM1plRmhtT2I5Wm0zQjdraG9zKnxzJUskMypIVmNAK2p8czl8
eTlOeG07LXk9VXU5Tno4MkA8a0A0QDh3LQp6e3JCKFJ5P2doallLTk57TEAmQDw4eWYhaHtybWZT
RHZNdm9udHF2PyY4NVIyYWFeNEpUSS04ZDMlYDIzbz5QQUgKeiFiXnpZYkdCPEdSKHRGSnw5ZlRv
ZkU4I3JJMn42MjZOeSptKnxnMCtZd1lIcSpZXnROdHUyNWdMempmTktIPEUpCnohWVM7I3ZSPlJa
dF5lX205aGZ8b0VwI3tWQCQ7OWpVKT82d2VOP3t3UHZQSFJVdF9faGVTQ0l5Y0olaFYrLWQ8fQp6
bnFMa35SU2VsVFpuQiMoRngqejZRZWchekYtOTN3dE83O0BiMktvaSh2fSFhTlRVZzlHJEQ9VjBe
R1VhS2RZZUIKV0trYVd7Z0JKbjJpd3ZId2VsRntyNX1FKVEkPjkzewoKbGl0ZXJhbCAzNzMzCnpj
bWVIfllmdXdjNnZ1QUAydEZkVjNNeEs9I2ZtNW1wb0U4dFNWUkYpPX55dWwwWWVaZjFQY3d3RH1n
ez9Yc0o0Zwp6aHtfezZsfVJUTTJ2NVpYaCQ3bVUwVGh9aj8/eWwmQXNDNFMwKSpgYTljVFF+RlVg
bHllJUxjLWNrZW1wY21DKEAKej8paCZIZHRudz9FQ0sqdmU3cnI2MEFPR1YwR2VvbWg5MHZPWDRk
ZHo2U3QyVDdrV0FAbG9FVVAzPHdYa2NYaSVRCnp3aHlzKWFkSkl7Y1A2YHA7MmxGODliQzNNeU9R
bjYrY2MoUzU4Kj0jJGk3fmwwR1ReKCowSGh5U1plMHVgU3NEbgp6ZF99anpfYlU/QzImQj1VVldQ
WnZTPEF3MVJCaWFgMEokWFglSTE+UkopPiFjTV9SSEx1YVh8az5iNFp2K3kmcEEKenlTbl9nRDdF
UnBuJWgyV3hyfEMpdSQkanRSdVJJRjklUDApN1RWXkQ1RU9WP1RjYmIkcHVRa0xnTDRhUUxFMUdQ
Cno3KHN+ZzwrJUwkJUgyYVAxdn5GVl90bFRNMDZeJEZSVTBeKTsmNDUxQCtPbHBzfVd7ZkgrZSZN
OV5xI0k5TVgtegp6dmdKaEc4UmM/cEZoNi0qX1ExSE9IdWlOfUJMRXttMzh9VCs+TG1jc256bmxB
cnFHWVRLMiZWZ15HZD13YWd6U0YKeiR2ZVhVajloXmNYUXMqOVJ1NE5GOHltQSZFVVJAKDByeSt9
N2x5aUh7WWVWcVYjNTBydE99TEBFQGhLd2tsTTghCnptVHAjTmYmeWdwVnFtJDYzO3ZIMEE1Nzl0
JDspOC1VTyhGM2FjfDtIQTJLR2dnQntrJiVObENqTF9Ac3wzfWtGagp6YmpBK19yWHdsPmFtYVc9
d2xIby0lQWB7ST9BYkh6Xmg5KmAtRXlKT0RaSEdScFAjPnJGKmBGZDV8d2p8bldGQ2EKeiF8VCQ7
aXg9eD4jemQ2b1lUMVVxM3trNDgqJT95bkRsYEc9cndse00pTkFjbFA2ej5gSTI1N251WWdFbE1V
UnhfCno+REJSS1V3UD1nJGY0aF5OO0lOSHdxVFhlK0V+KWJ1Nm1gP05UdCV6VCooZjZGRnpAXjxw
fm51QUU0NkFqUH4kJAp6byhSQyFtSSU7a1MlSkhfbEs5I3hjQndfQHtrRXlVITtIK3E/O0F9QHMo
V2xXeyppMDNTWXw7JWJyOVkkdU5rZ3AKej9raiZWQUhaaWRrPHp0PWIwfVc/XmpCWmAqISFUSCky
bk42b019amZwUU82WCgmajFQPHYpd2VhOWc+Nnc2VEFJCnpxIVdAKnsmUWN9KXlTP2cmdXEkRVg/
S2tJbSVAWDlYJTRSeC1ec3xlPDJZUDNCTGUlJjdeQXVMKlNufEVnfFVUaAp6dzNeQndlQU8xdG4r
OWF8ZnBzQDghUzNXUzU9ITlodzJuQms2aSR2KyQ5Y3BLMElyeypJb05aTWdhUXdCV3QydXcKenJu
VjJpPEdyYiQ5JWVDZE5pRlJ4S0woPG03XkdmNWhfQzYwUXVra1NwSCgpUnVHfXJ7dCltZ2Jqc3ch
KGJiUF5LCno/NTskNld+LV5HWCpBQG5GQFFXT2lNR01+IzJASCVlcXw5cHVYKComdkxteSNWTTxt
XmQ1IzxCRCZhQ08taUQjbAp6cyllbyRqJi0qMU9UU2owNDY2dTtfJDNJeDAhTkY5aUFoY2x6JF5l
STdkfEtFNFlQMGcoPzRpT1JmTFp1VjFpUFEKeiZ2Q0ZacHF6bERnbChOTSgzZCN4VFpwRDQrPjFR
VFp8aDdaVXtZaWlQJjUwZlp2X0VvI1padD85VChPKEA0dj01Cnpuaj5Lc0wtfiNOKjcyLUBAYjl1
ZCUxQTZALV4kRjk8UDVRSXNkREY9YXx1JjI5NTx6dUhpfkoyO3VycFZHbi14eAp6Mz1CKzhQVWc0
V1hieDl0PSkwTEdJaShnO2tMUlR7O0V0dnNGbzlLQVREJCpWRU4pdEhyKkJUOGpZO1dlc25tK2MK
ekZraGw9RCloRnhCbE5pJiVaWXMyIzMtRG5VYlE5UVgwJEF9MXByNUNXd3J3bFJqN21BYFF3aEVI
KzE7VSk1RnhtCnEpWEIkX1VQeVcmPjRsYDlnOCFaWkUhTmA2XyZFYj1fR2I5WTJ6PlMoX0FLPXZ7
ckUzZkdhcjhkCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL21hdGhtbC9v
cGVudHlwZS9vcGVudHlwZS1zdHJldGNoeS1ob3Jpem9udGFsLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2d0ay9tYXRobWwvb3BlbnR5cGUvb3BlbnR5cGUtc3RyZXRjaHktaG9y
aXpvbnRhbC1leHBlY3RlZC50eHQKaW5kZXggNjQ2MDk3N2EyZTI0ZDgwZjhhYzgzY2I1ZjUxMzk3
NDEwZjE1ZmY1Yy4uNTJjMDZlMjFiMmMzYjZiMTg0MTRiYzgyZGUyZjExYmFhMmNkMjEzZSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL21hdGhtbC9vcGVudHlwZS9vcGVudHlw
ZS1zdHJldGNoeS1ob3Jpem9udGFsLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvbWF0aG1sL29wZW50eXBlL29wZW50eXBlLXN0cmV0Y2h5LWhvcml6b250YWwtZXhw
ZWN0ZWQudHh0CkBAIC00LDM1ICs0LDM1IEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDE1Nwog
ICBSZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4MTU3CiAgICAgUmVuZGVyQm9k
eSB7Qk9EWX0gYXQgKDgsMTYpIHNpemUgNzg0eDEyNQogICAgICAgUmVuZGVyQmxvY2sge1B9IGF0
ICgwLDApIHNpemUgNzg0eDI1Ci0gICAgICAgIFJlbmRlck1hdGhNTE1hdGgge21hdGh9IGF0ICgw
LDIpIHNpemUgMTh4MjMgW3BhZGRpbmc6IDAgMSAwIDFdCi0gICAgICAgICAgUmVuZGVyTWF0aE1M
Um93IHttc3R5bGV9IGF0ICgxLDApIHNpemUgMTZ4MjMKLSAgICAgICAgICAgIFJlbmRlck1hdGhN
TFVuZGVyT3ZlciB7bW92ZXJ9IGF0ICgwLDApIHNpemUgMTZ4MjMKLSAgICAgICAgICAgICAgUmVu
ZGVyTWF0aE1MT3BlcmF0b3Ige21vfSBhdCAoMCwxKSBzaXplIDE2eDIyCisgICAgICAgIFJlbmRl
ck1hdGhNTE1hdGgge21hdGh9IGF0ICgwLDIpIHNpemUgMTB4MjMgW3BhZGRpbmc6IDAgMSAwIDFd
CisgICAgICAgICAgUmVuZGVyTWF0aE1MUm93IHttc3R5bGV9IGF0ICgxLDApIHNpemUgOHgyMwor
ICAgICAgICAgICAgUmVuZGVyTWF0aE1MVW5kZXJPdmVyIHttb3Zlcn0gYXQgKDAsMCkgc2l6ZSA4
eDIzCisgICAgICAgICAgICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yIHttb30gYXQgKC01LDEpIHNp
emUgMTd4MjIKICAgICAgICAgICAgICAgICBSZW5kZXJNYXRoTUxCbG9jayAoYW5vbnltb3VzLCBm
bGV4KSBhdCAoMiwwKSBzaXplIDExeDQKICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrIChh
bm9ueW1vdXMpIGF0ICgwLDApIHNpemUgMXg0CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRl
eHQgYXQgKDAsLTMpIHNpemUgMXgwCiAgICAgICAgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQg
KDAsLTMpIHdpZHRoIDE6ICJceHsyMTlDfSIKLSAgICAgICAgICAgICAgUmVuZGVyTWF0aE1MU3Bh
Y2Uge21zcGFjZX0gYXQgKDQsMCkgc2l6ZSA4eDEKKyAgICAgICAgICAgICAgUmVuZGVyTWF0aE1M
U3BhY2Uge21zcGFjZX0gYXQgKDAsMCkgc2l6ZSA4eDEKICAgICAgICAgUmVuZGVyVGV4dCB7I3Rl
eHR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsNDEpIHNp
emUgNzg0eDI1Ci0gICAgICAgIFJlbmRlck1hdGhNTE1hdGgge21hdGh9IGF0ICgwLDIpIHNpemUg
Mjh4MjMgW3BhZGRpbmc6IDAgMSAwIDFdCi0gICAgICAgICAgUmVuZGVyTWF0aE1MUm93IHttc3R5
bGV9IGF0ICgxLDApIHNpemUgMjZ4MjMKLSAgICAgICAgICAgIFJlbmRlck1hdGhNTFVuZGVyT3Zl
ciB7bW92ZXJ9IGF0ICgwLDApIHNpemUgMjZ4MjMKLSAgICAgICAgICAgICAgUmVuZGVyTWF0aE1M
T3BlcmF0b3Ige21vfSBhdCAoMCwxKSBzaXplIDI2eDIyCisgICAgICAgIFJlbmRlck1hdGhNTE1h
dGgge21hdGh9IGF0ICgwLDIpIHNpemUgMTd4MjMgW3BhZGRpbmc6IDAgMSAwIDFdCisgICAgICAg
ICAgUmVuZGVyTWF0aE1MUm93IHttc3R5bGV9IGF0ICgxLDApIHNpemUgMTV4MjMKKyAgICAgICAg
ICAgIFJlbmRlck1hdGhNTFVuZGVyT3ZlciB7bW92ZXJ9IGF0ICgwLDApIHNpemUgMTV4MjMKKyAg
ICAgICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3Ige21vfSBhdCAoLTYsMSkgc2l6ZSAyN3gy
MgogICAgICAgICAgICAgICAgIFJlbmRlck1hdGhNTEJsb2NrIChhbm9ueW1vdXMsIGZsZXgpIGF0
ICgyLDApIHNpemUgMjF4NAogICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sgKGFub255bW91
cykgYXQgKDAsMCkgc2l6ZSAxeDQKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGV4dCBhdCAo
MCwtMykgc2l6ZSAxeDAKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwtMykg
d2lkdGggMTogIlx4ezIxOUN9IgotICAgICAgICAgICAgICBSZW5kZXJNYXRoTUxTcGFjZSB7bXNw
YWNlfSBhdCAoNSwwKSBzaXplIDE2eDEKKyAgICAgICAgICAgICAgUmVuZGVyTWF0aE1MU3BhY2Ug
e21zcGFjZX0gYXQgKDAsMCkgc2l6ZSAxNXgxCiAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBh
dCAoMCwwKSBzaXplIDB4MAogICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDgyKSBzaXplIDc4
NHg0MwotICAgICAgICBSZW5kZXJNYXRoTUxNYXRoIHttYXRofSBhdCAoMCwwKSBzaXplIDE1OHg0
MyBbcGFkZGluZzogMCAxIDAgMV0KLSAgICAgICAgICBSZW5kZXJNYXRoTUxSb3cge21zdHlsZX0g
YXQgKDEsMCkgc2l6ZSAxNTZ4NDMKLSAgICAgICAgICAgIFJlbmRlck1hdGhNTFVuZGVyT3ZlciB7
bW92ZXJ9IGF0ICgwLDApIHNpemUgMTU2eDQzCi0gICAgICAgICAgICAgIFJlbmRlck1hdGhNTE9w
ZXJhdG9yIHttb30gYXQgKDAsMSkgc2l6ZSAxNTZ4NDIKKyAgICAgICAgUmVuZGVyTWF0aE1MTWF0
aCB7bWF0aH0gYXQgKDAsMCkgc2l6ZSAxNTJ4NDMgW3BhZGRpbmc6IDAgMSAwIDFdCisgICAgICAg
ICAgUmVuZGVyTWF0aE1MUm93IHttc3R5bGV9IGF0ICgxLDApIHNpemUgMTUweDQzCisgICAgICAg
ICAgICBSZW5kZXJNYXRoTUxVbmRlck92ZXIge21vdmVyfSBhdCAoMCwwKSBzaXplIDE1MHg0Mwor
ICAgICAgICAgICAgICBSZW5kZXJNYXRoTUxPcGVyYXRvciB7bW99IGF0ICgtMywxKSBzaXplIDE1
Nng0MgogICAgICAgICAgICAgICAgIFJlbmRlck1hdGhNTEJsb2NrIChhbm9ueW1vdXMsIGZsZXgp
IGF0ICgyLDApIHNpemUgMTUxeDQKICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrIChhbm9u
eW1vdXMpIGF0ICgwLDApIHNpemUgMXg0CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRleHQg
YXQgKDAsLTMpIHNpemUgMXgwCiAgICAgICAgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAs
LTMpIHdpZHRoIDE6ICJceHsyMTlDfSIKLSAgICAgICAgICAgICAgUmVuZGVyTWF0aE1MU3BhY2Ug
e21zcGFjZX0gYXQgKDIsMCkgc2l6ZSAxNTF4MQorICAgICAgICAgICAgICBSZW5kZXJNYXRoTUxT
cGFjZSB7bXNwYWNlfSBhdCAoMCwwKSBzaXplIDE1MHgxCiAgICAgICAgIFJlbmRlclRleHQgeyN0
ZXh0fSBhdCAoMCwwKSBzaXplIDB4MApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL21hdGhtbC9vcGVudHlwZS9vcGVudHlwZS1zdHJldGNoeS1ob3Jpem9udGFsLWV4cGVjdGVk
LnBuZyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9tYXRobWwvb3BlbnR5cGUvb3BlbnR5cGUt
c3RyZXRjaHktaG9yaXpvbnRhbC1leHBlY3RlZC5wbmcKaW5kZXggYWExZDg1YjkzOGJkOGMwYTU3
NjA3NTcwNDdkOTcxZjkxYmRiN2E0Yy4uNDJiY2NkMWI4ZGY0MTY1NmYwMzUyMDExY2ExNTFmYjlh
Y2ZhOTUwYyAxMDA2NDQKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDExODI1CnpjbWVITlg7X24y
N1hGZVQjUldtQTBmQ2ZNS3lYMTRFSVdqIzVLITRfdENlYVk1PlA4Qml6dHlMaTtoTW01RUsrNgp6
RG1xZX13cGF2TzZgPj53NTwoVEI3Ujc9Zjhuei0zXzljUHojd1BoUCZvZSh9e2BIeVhgJGNsTWJN
ODZrSkAyX0UKem9ESz17KF9kaD0wRD5VPlA1d1N4QXFhenFBb0xEQlRgK1IjJGd3IV5YSnctQWp6
cnFOQ3xkTlAhdmBSTzghaFVTCnpDfDRxWjs3cDhJdz4hZWcqQF5neDNvWEtKazhATyVCVy10Wjd9
XjRDTExKKWJ3Km1VMCFKLWQ+P0MpJnlTXnFnNQp6SFNrSzFuS1JGRi1zX35RbkRyPikxRTE5aysq
YzFUeFA4c2ckaUlNPHdTJGhib0BnO0VVdWVFJSZVJmxpPk5DRSoKemZxMnZeYklnX1ZyP0ktRUo7
c2srOXA2NHxzQz9gOzhaeXdaV31SVTR2YzJjLTJqY1d4ZnYhTiQ1S21AN0Q2fGd2CnpLc1k4O1Ew
TkErPih2OGJoVjZ5SSlWUUdrVEpWMTVqcnBlZDg9dDBGejJFWkotYklFVDgwNyh+bGVqQ1dFR31n
cgp6MTBGRlhrVyZwYl5GWSFpN1J1ND1DenNgXzliaWZiNFNUYGdTaSpnMS1NVzNod1Z6Vnlya3Vq
bU9sb35ZfEQ2PiUKejY2T34tSXIhPkBtJUxhTWJsSF95SW9ZMH5OTiZAJWt8Rih5UTFhLVBAWF9G
YTcxYDZBRnhtOXI7OSVUe01FcnUoCnp2dEctJWRYRT1RRWgjIz5CO1F6VlVxayREWEF+eSN6PmlA
VVZTQktUZn15YVE5eFhvPDFxensxXklJaz5WN3BTbwp6Z2I/M2sqaUZseShaJlN3YjR2ZS1gTEtV
M25oP217ek50WlE5MC01Y1MoTm90UX1TKnQjayVKJCVLRT1qaWBzTHoKenhVIS1gY0F1amRaI2l2
akoyIXN1MUZhYXctfWF9RHl5K19UNE5rcmMrWn4xZXt6SXdOal8tZFBgJT1zRlluQnFvCno3ZT9z
aztDMVk2M3J6OUlEaURoUSolQj4kPUVVSHVpY3RleEA5MHwqJnA/IWteSnQ4b2RaSzAyTTdAQnBP
MVlESAp6bHEzSCFCbCRIP0Znd3hPKjxVT21OJkQkcTBqKURLUHAtRn0hNytqWmBxVUJ2SXBWdG5K
SXlMfkRoZ3ZRKmY8fHsKelo7aFRRcDE5MnxOOD5TYTYkXkUpPEdLIzRLbUA/UiNxVFVPWWhaeTc3
ZWVCcDVIdCk1QjNqbyFWQjJDRjRkU3ZLCnpzNFBqNjlTVzlnM00zYjw7dXZZclRuRXJMOypwfnts
fHw7VlApNDdmLXZ9ZDh2ZHxQaWpvWWpfbTVpcWRxMGBeaQp6VXgkPyYwY2V5anckWXI1SD8qUiVZ
Q2k3QGZ0OHlFJUtoKFZkR3xRe2Vub3xjcUxFR1ZYMl9ANTNfKFlMbWFlP18Kek56NXpXYGVSci1Z
QnVufF5BJmdCST5XLUZmYmhga1ooeUlhTTFxOHMtNVBIV281bTReREpUa3dobio1ciUwaVdqCnoy
a3ZGU1VnNUopVGV0dHE2fjRIMHMxU043SW5xWWFEME1BQjIoNFdHeGRramRady18ZGxpK2RDTn4y
PjQ7SGFGWAp6c317cTsxRjswTWIyO3dyNXsoSiVLeFY5OHUjfT9fRT9mY3Bra14qazNUdjFIKmY4
cUVuVDtDWjtPLU1uPGIkdjcKekpJU1llXjdBZyEtWDJWdWxUUztaMSQqbXZGY3FgWCk+eSVUd3pO
RVlXNDNNWiQkYU1BUVJDbzQjJWVXJFhMUGBCCnpsMHJWKGRFOV94U35jfTF5Xn58ZkFXKlFjMSFs
UEx3RElQK2NQJUJJNV47OFFaYUJqJmIqaHQ3LVNfTSFYUSljbgp6VjlHRGMlZ2xfZW4lKi10Xl9J
dXNrIUpReTRUfiYkc3ZoM2RTU3R7blpRe1Yze288TjlhKWpzTG1MUkUlOCpENEAKemUwWEFFaWVo
KEtae3V+UXJ5d3Z0eil2KFFvODxKckNebTQzWk1WMmVPMXVCYlR0aD1jKyNrUHY+czJ3QF5WR25Q
CnpfdDk0fjt+QnZ1aE1mTDFkakdgaDJnakt7bUM1Nk8jQzZyNVhMQCFVdDhMSHpoPCg9I1VwOU88
bz9GQDFkdld+SQp6RUlxSGJ1QyQzNTlsPzZNZUBhYllqa2E7R1FJMT1GXmB6fGE2Sj9tWW9aUzJM
Pkp5NSRSRnB4QjZ4XlU7cEY7ZCoKekROJHZtWXIpaVNGcChFLT8mZW1TO2E+ZGtSalh8SHlLVEo4
KEJoWjhZKkYzIU8rPUBaRFFSYStRQ2VDST5zYDlvCnpNRDVYdGRDIzU2ZHdkSU5sNk5vNXN2bzdC
eFhjWjRFNVo3SEN0M1ZNUUA3c1VpJSs4ZVRgTkw4I0Updk5BdilyNAp6ZlgtenloallBZlRVXjsl
KiklPTd3a3xPLUsjQGI2RiVmcmsyZkpndG9YQSkpVH09Jio5fXtONFVYUm8lWEB9eXsKemJOOyUk
Q3k1SERUUkhFZzRPZl8yXl8kXyEkYEBzWT5SWU9iZU1ZQ2Y1OGApTyg2fE1FLURhPC1aY09vVldL
SzVwCnpsJDNValhYJXdaSHRFZjtzUTIjTWsoaCVqXns7KWFheDhsPko3WEVYP0Q4e1dmXjFeb0Mx
P0F7QEhibT54NmMpUwp6YVo3VDBYO29iIXgyXm9wVVlsYjJeaG5xRkllSWZBKH4mJUpMbFVpeTw4
cmh8OShgcz1wZGg4cl54ZSMofDZiY00Kel85QzJGKG1IaikhZTE1SUVuI2ZNZiFJVmJvUnRoc2NN
NzNwSktKUHgxTTM7S0w7ejV5fDYrMGwjIUwkKzxYWWFlCnpeV1lJSUsrKD0hUmxTPDEpVHNzN3RI
bistO0VfOCEwSUpgTl99WGReT1NsN1MjeWpeV1ZHUTRYMWRoaCRJPUhMUgp6MUY9ZyQ3QSQlNnZu
NCFZNTAxV2JGU1E5KW5gO2xzUX5TWUxfMnFUK1ZvRUBvZEROOC03ZCtHJGFGM1l5QXdMK2AKej5F
TE1sd2MmfkMkVlE9UTsyeU59Nm1OS0JyIXZwUFB5Yld4UU45MXhMPkBGakMhPjh4K0Y0eWEoMFhA
cl5xYmYqCnpyYCl3KW5PKmZ0blY8LTQyaHgqezk2OU5jRyp+MmdfZS12V2ZxXkF5bXBKPDk1P0p6
USReZHhRNnQ2O2F3S0NvfAp6YXUobUp5ZEtWK0okeEB8czZCM1dYMXVmZU51Q29lKCVuN2lpdStH
e2xSI2VUPn18VFN4K0YjVmBoZ1VEQCskdDgKelBiQFhzP3l5MWFeITtxKko3STFNKXNaaU1rejNo
Mz5YJko7dGxfRngjcSp8Oy1yR0ctXlpqXmQ0YCpjaGhDTEhtCnpkTlZ3Q1JVQTFHbl5oRmUtU3U8
dztkPT5QXmArfVBIOHdPezEwWnFLJCRmMkRyUiF4PFRDelIhKld0cG4wYEEhKQp6cUJ9TTsybjJo
dVp7aExDXlJ5WiQpT3MqcGJ2WkllWG9tcVJodDFOUDMlUXhUPEFJXyZrZXcjeXMqe1p3MG55bk0K
eihla293bk0qS3tYRz13REMqI28zPUotdUZYckc9UitSd0VIb0F3bWZnNDZ2OW5IKShWYX5WRSVS
ZD5JN1o3NnkqCno0ekNaXnJZWUJXN3NhO1NEO1dfOHVYPyY7YDlEN35DNmNqVVl3RXFtazNwTEg3
MGhoJl5xPkBhN21rbmhKQFhCfQp6S1E+KDNSQU1KKGgpd31lSGZuKHFxYHA+SGNXbT0pQXVUZGJz
YzRrKVpVeDwxY2RQb35STVQrQjI/c01QaVlUSk8Kekh1JFExSGRxIzxYYUdtRylVUStIVGJHQHRw
U0FQdUxIKyEraUkpXzRjS09PKXBzajtJVU9LNjg0e2NVaDVOczUhCnpaRWlSI3JoSGY9NzJEPWxL
OGMtNyhMXnt9JHR2Z3MqUnZXQkxUcmV3bkFnX3AxQlp+I1d9UVZAPWF4VXhARTwtNAp6UGkweUVE
NTFiPll8eSY/bzZiaFNFYmI0VWMxQismU2l5aVowd2lBR1B0P2ZQdmomeWJlRVZgKEh1KkgqQFR+
PT0KekZ4cmlQPGJQYWZRPlBqe2BJLS0pQFJlSF4hSUl8IyRzNHZEd0FTUTxrbVoyRUtVfUVgT1Ym
WVF0Z3FYK3o/R0Y5CnpERWxeX2BTN15yKjVxVExyZldRQnVKKmwtVUpnKnMjYGdeVDxpKVFTTFl3
eDlHaHBRcXZqQkdeVz5MbCY1LWxKKAp6QVJ0bV5CX3l8aU93Mn03RjVvJFlpSW1rTUxlUExGay05
fSRZYSEqRmt8dlFWN3d7eGZ7M35lXmNAdSQoMzMpMGkKelglY3hzZ05nfWhFR1RJYlgpR1goMXl3
cj5YKUdYKDF5IyEoWClHWCgxdG1LbWpSbj1PM2BrPUVYKUxJSWxSX0VgCnROTWtgJkYoSGl3cV9M
bz9uRXFDYzEtMWYlezxfN2tpUismVnsrJTF6PFF3R2shdl5aSEtMUGFiSC1gV0sKCmxpdGVyYWwg
MTE3ODEKemNtZUhOY1R8JkU3WEswPTJCWm5QTD1uaHtmWHZYTUIyXk89MFVOZlZTcylUYiZyK3BJ
Tz0xQlEyJXh4RGpCWEd8CnpLQGVPPVAkNitCMn1LYmREU3tOR0RNZGpEV0MmcWlsemJtXiZZclZw
fEokP1lgenlTY2BgKyNNY2kjPFhifiFzTAp6RD10LXBBVl8oT2xsPmtEa3xSUDgpKlVZb2NDSkw2
Mm5IV1VWVm04PFhoI3B6ezZmUDZBa3UxWUFKUVFiXyNwWU4Kel4weE4lUysmflIhZ3tTMCQhaGZ+
T1lsZVhwN3Y+UTJvdCk7YVUrIWZWJWJMc0dDOH0mZSM2aGxGKz1halheWkZTCnomZyg0a1U3KG54
VjZib1pPT0c+YlhvMkRuT25YS0FuYlckQTNaNENXOWx1cWJCY0VBUmFUYV4zOWpBVnlpMWdDcQp6
XjNnK2BKJVFNZ3ZnKkBNPyQ+MzdfVEpvZ0YrLUhxPWlqQlUhMU93SWt+RiEyMGIjSD55YyZfaGZT
M3okPmpfPWoKem9gMmFwaD5AJCUjS0pUZkVKdU1yPG1gQEZJQT0+ZnNiSjB1PWImTHVhb2BBLSVr
Qmw9RFhEcU0mMm9gYXJXakJlCnpER28hTT1XRyMoVyVBI31fO3dYeDJNPTEzYFpqc2FtTl9MPmBK
MF5JZDZ7MmZVeyk9Q3NKVCFvYHU4bT1WeyQzNwp6cUVPZGg8YjJsci1FMjhiSztjMG43UlpYaEpC
cFBUOVIxelhVVW1iOCFOOSF0THNrJjgwakhHU0BKbmVEVmtUZ2EKenJhN3lCWEFzK35ZSGNOPE42
enlUWG5kQmtadjE0SUx3KXB8RTBgaCRWX15Qfm9hV0BwX2RDKUNDRX1zaE1+TlQhCnpYK2RMb2lF
fnVHI0FYQ055Vy1XU3RedXBuNEFkXk5oJkQ1VClpNVVtSFJIM2taSEw5Q2BUP35YYCU1cHVWKURk
NQp6NE48ciQ+QVJ1OFM+YD85JE5paU1aXlRQcWYhfShZTi03WXF7MGpXIXBXMj9SME5jSDhDbDkq
KGU8Nl9WKXUkcmkKelEwckJAd2FhV0h7NWdHZ2JBb19wSH03eHRVZ0FxZiF0Tmxkc31jNnw5I0s8
R2hUeytlYDVJRmhiO1lwXzJ2diMrCnoyeUsqUkhlUCo9Pz8yY2d3MmQ3MEE4b0Z4VSQhbmYlcXBa
P1Aqb3EzNHU+WWhSQUUrcilnLXFzSSRZQGZea2NAbAp6WHxYQzxZI3V4REU7OG5pTklOOHw4SSZA
UjRLPCY0VlVkc31WZGI1K3lRdHtIJCZoWUZXcHFjYiMyfDRfentzdTAKemA3dSEpJkxEeE5JYzN4
fjZWNFV9QzUzQGUtK04mYjs+N0wrMWZvY0xEfHs9Mz0paS17K15NO1ZjeiQlQVFvMn0wCnpBSEoy
U3JibEh8e01AcSg1bCNlemklKFJDYjRNKntwKmg5LVpwY2JSeEw2PEBjYXM4PUApZFhqaz5wflgz
N1pFZgp6alhCcUc2TmhtMiN3biM9eTFRJkV0Tl91QTJVWSpxVz9eUlNGZkVPbjUqbmxoaTBjfFNq
K1hJX0NsTXoyRn0kPXcKekhFMX1oQk1SWWlqNjMoPSZ1TD98QV84WkVHSUlGeiotZnhDKUVaRUhH
RnkqbkF6SDQmJFl0bTRJKSl0RD9nNlN1CnpoOzUpQVl+ZnY/KHF1MEZRM1d8PDFibmJKa1JPMV5S
MDkrKitGMURtZTh+SlRzQytkOyNpQHczRTtCSERUenwxYgp6NCZ7SWgtQ207bzIhVi19cHY9YE1F
PjQ2R0BpS3VnalVJaGlpKWVabnhYJEN8ZCZHNUBpZz8lTzNzU1cjNlgrN3IKemsoJGN9ayp5RG8p
RipoK3JeNj5kLWV4Q3xYVCtmKTZGV3czQFk4ZnZ4em9iZE1MUjxeV1hrWXRAcTx4fSp6cUBSCno8
JFBWYlVGYElEUStZamsjeT0oUjhRdDJaM3taQ29HVzV6dktKWEtSJTAjfUMtUkV+RW9IeUw1TFk3
USZOVGMrSwp6K0o9JG9pNElrRW9VcjghVjVZKHFrSmlxdD4oWWUtX1NMcz8peDBnSyh0Q3U+U0pr
I3piSW0lYCpENytqWko2JF4KellaY3J7Q1g7V3wtQzMtZGlENn44MCNFSUhGWWJEfnNMfTMrQmFz
bWkyXnhtWmdLeDllI1k5LWVQSlohWTJaXmc0Cnooe3pUU09gWj5UYUEoKl83dE9xTU9iPFJEVzdt
dTMlU149ZFhHWkR9YjRVOEQ5RTNKRHVCRVF6PiNxcT5AQX07Pgp6TkVCQyNTWHRLZ3QySC1haW5o
TThiOHZPIUtsRSEjeFZAOHw/P0NUTSk4WSRxSUpDdn1rakktWkdFbG0pc2sybCQKei1Re2AkWCo0
QTRLdU81cWlQbF9VT2p1c0B6NCZXKDR4VEw1dChLR1hSYjZRVFZ9K1FhaDM4P1ErPlBaWnJNcVBH
Cno1VWtfPTd6PnQmTWIkSHhHWGhkc0UoTEdXR156d29TZ2JjczxwcDtXKHEjNzEjJlQ1Q1U0QXVV
VyVUcUgxQyEqRQp6b3peI2c0JEZKJktSU3xHQj90KktyZUNDcT0ydigwTSVweT9TV3BfUEMrJWle
TnB6IzslSzJPdj5VPyZ4SyhoQVUKei1yTFR+RyljZmRCTSRBMi19cn1zbCNCQHI4YHNiISNONElw
V2U2UkgtfG94RTN0XkVRVU9EcGJIaHRwZih0SmNTCnp7LVM8UG5rKVR9dG84QWVVJUdPK3QwS3d0
K3E4R1A8cG5sTipvTHpxLW1TUGoxUk9ReDMhWSFLYlIkMUIpQWNHMgp6S0daUUl5Yz1panVTKjlp
bXhLPkFtV2pgNW50OFQwMXJAeVFVTWM2SnA8Z2VIK2FnPjxQVyYoa1FqNkc7TzNsNkcKeiZ+cD5o
UT1ocW0xfSFOWlN2RyFNSlZgQlUoM2kwVU4yJmZHdF5BTERNelloSzI2bjE/bEFWeihNYGB8cGVW
QUU9CnpVZDJybCtJR2ktaT0pMndkZEB0d1R1PC0lP1IzfTIqU0NYV08tMFBDdGdOb2FkOzYhPHlX
VXFPbXhJVV9fQjQkcQp6JVVwLUFiRUJTPF5SYyNoYW17LTVIUVVIUXRNRV8xMlkyJEFhWTZsUVdD
PnhvejB+JFZYPkBwVHtCLW5sZihNS0IKem1uMUgwZSNmUUxrQXVqe1orY1puWHdoYCM7JTZoNjhp
N3NqR205VjhBTk1ZN3VLbDF6al9INFN2dW9fKj4oQWp+CnpkQTdZUjR+e2dAeTVtdz07aHdlaTxt
aj1aI1VWWDQhXjl7clRLOHlBWlRZUWo3ZDt+cipsPWp6SEpVI2BROXcjSQp6blMyZFlsdjElWC0q
ZGBvaUMheH5kJSpaMmkxYTdSWWN+fEpYJSYhJTtxY2VseTM5UGxZP3UlNz81UzlJX2Y4NWMKemVC
NlhERDI8dGptP0A3fD84dmRXKWxtNHRwVWg5ZjZnanVfJCYkODJuJnNJSWg1MG9Cc1RycEwjYjZK
P0xvekhGCnp0eHEydVBzOXx0az9MaCNhKm8tVGM2cTFyZXN7TnlUMmhmJWItPUdGZWByZFZ4PkhB
Y3BzdzlGZytMcnc2TCk+Swp6ey1eKFJ6ZCRaS0RsOU1lY3pCOTJjZ0h+V2RCWHZueFM+OFJOQigy
cFJufGZ8cFI2MTMpZ2tsUnFab0NeMENofE8KeiZCdktUJVc0XkBrXyE1S2otV3ZubG9YYndXPzVo
Z0Z2NUB5SWJRcyFLekxBYzhDK0YqZmkxKFlZKClTSFpOPGxFCnpsY1RqfWg5aHBoSVhBZT1edGR5
VXNvfExjQUZpYTJWST1ENGViR1lAZnN7PUljcChtdWd3TWJUJCtNcCl3NCllWQp6RGZkOVk0dilq
ZnNzKGQyV0h0bGV0T1B5QiowWU9GIWV+YzEwVUM7ej1kPSktT3dlPWFaJDY3V2AtbUhPKDNZZHMK
enNtUjQhYVoyZ3VtUkJPKFBDQWp3U247b0oyTkBuPHU9KVRwd2A2JDNAdkcqZlc9Pkp4N29zT2FM
NVFnaWBoYVhGCnpsQzFMSkBHQWdrMShUOHRNN1QybXp4UU1sNVlGbT1eUW5LZElsLTBaaENMNTVH
VE5ocmE4Pn1FSCpPMUQwcnYmRgp6bVY7KHVrJiEmWThIYlR1YVp9JENYIyFFUjBCYlEodncmRGNx
ZVlycVhjQj9TaDFNMm5CfVBqd3omUSR2TDt6dD8KemZSQDR9K1A4cHkzfmxHNkZvfH0jcGtxUnRl
PEA2Jlp6OWshcC0pQldCTktmPU9GSmZYdW1FNVo5VzA9TzF0fmg5CnpnTjR+aUFVYXE7Mk1lPXZW
fDF7OTRpO3ZJXnlwdiM5VzJjTHE9T0M/KDgwb04kQWtfUig4MHBALXVadVF1cHBXTApabFNjRSg2
SGZuUmZgOEc1d3JxQmAmKS1OckBoNCFrRyRIXjEKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvbWF0aG1sL29wZW50eXBlL29wZW50eXBlLXN0cmV0Y2h5LWhvcml6b250YWwt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL21hdGhtbC9vcGVudHlwZS9v
cGVudHlwZS1zdHJldGNoeS1ob3Jpem9udGFsLWV4cGVjdGVkLnR4dAppbmRleCA5Mzg2MDgyMjIy
MmM0MjJiODIzM2Y3YTE0NDEzMzU1YmE5NzcxYWE1Li5hZDM3MTY5ODY2ZGRlMWRmNjRhMGJhN2Zj
N2M0MTA0MmU3YzdlYmRlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvbWF0
aG1sL29wZW50eXBlL29wZW50eXBlLXN0cmV0Y2h5LWhvcml6b250YWwtZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9tYXRobWwvb3BlbnR5cGUvb3BlbnR5cGUtc3Ry
ZXRjaHktaG9yaXpvbnRhbC1leHBlY3RlZC50eHQKQEAgLTQsMzUgKzQsMzUgQEAgbGF5ZXIgYXQg
KDAsMCkgc2l6ZSA4MDB4MTUzCiAgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgw
MHgxNTMKICAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCwxNikgc2l6ZSA3ODR4MTIxCiAgICAg
ICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMCkgc2l6ZSA3ODR4MjQKLSAgICAgICAgUmVuZGVyTWF0
aE1MTWF0aCB7bWF0aH0gYXQgKDAsMykgc2l6ZSAxOHgyMiBbcGFkZGluZzogMCAxIDAgMV0KLSAg
ICAgICAgICBSZW5kZXJNYXRoTUxSb3cge21zdHlsZX0gYXQgKDEsMCkgc2l6ZSAxNngyMgotICAg
ICAgICAgICAgUmVuZGVyTWF0aE1MVW5kZXJPdmVyIHttb3Zlcn0gYXQgKDAsMCkgc2l6ZSAxNngy
MgotICAgICAgICAgICAgICBSZW5kZXJNYXRoTUxPcGVyYXRvciB7bW99IGF0ICgwLDEpIHNpemUg
MTZ4MjEKKyAgICAgICAgUmVuZGVyTWF0aE1MTWF0aCB7bWF0aH0gYXQgKDAsMykgc2l6ZSAxMHgy
MiBbcGFkZGluZzogMCAxIDAgMV0KKyAgICAgICAgICBSZW5kZXJNYXRoTUxSb3cge21zdHlsZX0g
YXQgKDEsMCkgc2l6ZSA4eDIyCisgICAgICAgICAgICBSZW5kZXJNYXRoTUxVbmRlck92ZXIge21v
dmVyfSBhdCAoMCwwKSBzaXplIDh4MjIKKyAgICAgICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0
b3Ige21vfSBhdCAoLTUsMSkgc2l6ZSAxN3gyMQogICAgICAgICAgICAgICAgIFJlbmRlck1hdGhN
TEJsb2NrIChhbm9ueW1vdXMsIGZsZXgpIGF0ICgyLDApIHNpemUgMTF4NAogICAgICAgICAgICAg
ICAgICAgUmVuZGVyQmxvY2sgKGFub255bW91cykgYXQgKDAsMCkgc2l6ZSAyeDQKICAgICAgICAg
ICAgICAgICAgICAgUmVuZGVyVGV4dCBhdCAoMCwtMykgc2l6ZSAyeDAKICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0IHJ1biBhdCAoMCwtMykgd2lkdGggMjogIlx4ezIxOUN9IgotICAgICAgICAg
ICAgICBSZW5kZXJNYXRoTUxTcGFjZSB7bXNwYWNlfSBhdCAoNCwwKSBzaXplIDh4MQorICAgICAg
ICAgICAgICBSZW5kZXJNYXRoTUxTcGFjZSB7bXNwYWNlfSBhdCAoMCwwKSBzaXplIDh4MQogICAg
ICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICAgIFJlbmRlckJs
b2NrIHtQfSBhdCAoMCw0MCkgc2l6ZSA3ODR4MjQKLSAgICAgICAgUmVuZGVyTWF0aE1MTWF0aCB7
bWF0aH0gYXQgKDAsMykgc2l6ZSAyOHgyMiBbcGFkZGluZzogMCAxIDAgMV0KLSAgICAgICAgICBS
ZW5kZXJNYXRoTUxSb3cge21zdHlsZX0gYXQgKDEsMCkgc2l6ZSAyNngyMgotICAgICAgICAgICAg
UmVuZGVyTWF0aE1MVW5kZXJPdmVyIHttb3Zlcn0gYXQgKDAsMCkgc2l6ZSAyNngyMgotICAgICAg
ICAgICAgICBSZW5kZXJNYXRoTUxPcGVyYXRvciB7bW99IGF0ICgwLDEpIHNpemUgMjZ4MjEKKyAg
ICAgICAgUmVuZGVyTWF0aE1MTWF0aCB7bWF0aH0gYXQgKDAsMykgc2l6ZSAxN3gyMiBbcGFkZGlu
ZzogMCAxIDAgMV0KKyAgICAgICAgICBSZW5kZXJNYXRoTUxSb3cge21zdHlsZX0gYXQgKDEsMCkg
c2l6ZSAxNXgyMgorICAgICAgICAgICAgUmVuZGVyTWF0aE1MVW5kZXJPdmVyIHttb3Zlcn0gYXQg
KDAsMCkgc2l6ZSAxNXgyMgorICAgICAgICAgICAgICBSZW5kZXJNYXRoTUxPcGVyYXRvciB7bW99
IGF0ICgtNiwxKSBzaXplIDI3eDIxCiAgICAgICAgICAgICAgICAgUmVuZGVyTWF0aE1MQmxvY2sg
KGFub255bW91cywgZmxleCkgYXQgKDIsMCkgc2l6ZSAyMng0CiAgICAgICAgICAgICAgICAgICBS
ZW5kZXJCbG9jayAoYW5vbnltb3VzKSBhdCAoMCwwKSBzaXplIDJ4NAogICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJUZXh0IGF0ICgwLC0zKSBzaXplIDJ4MAogICAgICAgICAgICAgICAgICAgICAg
IHRleHQgcnVuIGF0ICgwLC0zKSB3aWR0aCAyOiAiXHh7MjE5Q30iCi0gICAgICAgICAgICAgIFJl
bmRlck1hdGhNTFNwYWNlIHttc3BhY2V9IGF0ICg1LDApIHNpemUgMTZ4MQorICAgICAgICAgICAg
ICBSZW5kZXJNYXRoTUxTcGFjZSB7bXNwYWNlfSBhdCAoMCwwKSBzaXplIDE1eDEKICAgICAgICAg
UmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgICBSZW5kZXJCbG9jayB7
UH0gYXQgKDAsODApIHNpemUgNzg0eDQxCi0gICAgICAgIFJlbmRlck1hdGhNTE1hdGgge21hdGh9
IGF0ICgwLDApIHNpemUgMTU4eDQyIFtwYWRkaW5nOiAwIDEgMCAxXQotICAgICAgICAgIFJlbmRl
ck1hdGhNTFJvdyB7bXN0eWxlfSBhdCAoMSwwKSBzaXplIDE1Nng0MgotICAgICAgICAgICAgUmVu
ZGVyTWF0aE1MVW5kZXJPdmVyIHttb3Zlcn0gYXQgKDAsMCkgc2l6ZSAxNTZ4NDIKLSAgICAgICAg
ICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3Ige21vfSBhdCAoMCwxKSBzaXplIDE1Nng0MQorICAg
ICAgICBSZW5kZXJNYXRoTUxNYXRoIHttYXRofSBhdCAoMCwwKSBzaXplIDE1Mng0MiBbcGFkZGlu
ZzogMCAxIDAgMV0KKyAgICAgICAgICBSZW5kZXJNYXRoTUxSb3cge21zdHlsZX0gYXQgKDEsMCkg
c2l6ZSAxNTB4NDIKKyAgICAgICAgICAgIFJlbmRlck1hdGhNTFVuZGVyT3ZlciB7bW92ZXJ9IGF0
ICgwLDApIHNpemUgMTUweDQyCisgICAgICAgICAgICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yIHtt
b30gYXQgKC0zLDEpIHNpemUgMTU2eDQxCiAgICAgICAgICAgICAgICAgUmVuZGVyTWF0aE1MQmxv
Y2sgKGFub255bW91cywgZmxleCkgYXQgKDIsMCkgc2l6ZSAxNTF4NAogICAgICAgICAgICAgICAg
ICAgUmVuZGVyQmxvY2sgKGFub255bW91cykgYXQgKDAsMCkgc2l6ZSAyeDQKICAgICAgICAgICAg
ICAgICAgICAgUmVuZGVyVGV4dCBhdCAoMCwtMykgc2l6ZSAyeDAKICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0IHJ1biBhdCAoMCwtMykgd2lkdGggMjogIlx4ezIxOUN9IgotICAgICAgICAgICAg
ICBSZW5kZXJNYXRoTUxTcGFjZSB7bXNwYWNlfSBhdCAoMiwwKSBzaXplIDE1MXgxCisgICAgICAg
ICAgICAgIFJlbmRlck1hdGhNTFNwYWNlIHttc3BhY2V9IGF0ICgwLDApIHNpemUgMTUweDEKICAg
ICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273700</attachid>
            <date>2016-03-11 01:22:38 -0800</date>
            <delta_ts>2016-03-31 08:16:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Bug-153208-Refactor-RenderMathMLRow-layout-functions.patch</filename>
            <type>text/plain</type>
            <size>38645</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSA2NzIyMGE0NTRhMjM4MGZlZjE4ZGU0NTVkMzY4NDg1MGJkMGRjMzYyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogVGh1LCAzIE1hciAyMDE2IDEzOjE4OjIyICswMTAwClN1YmplY3Q6IFtQQVRDSCAxLzldIEJ1
ZyAxNTMyMDggLSBSZWZhY3RvciBSZW5kZXJNYXRoTUxSb3cgbGF5b3V0IGZ1bmN0aW9ucyB0bwog
YXZvaWQgdXNpbmcgZmxleGJveAoKLS0tCiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAxNiArKwogTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9u
cyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKwogLi4uL29wZW50eXBlLXN0cmV0Y2h5LWhv
cml6b250YWwtZXhwZWN0ZWQucG5nICAgICAgfCBCaW4gMzczMyAtPiAzNzI5IGJ5dGVzCiAuLi4v
b3BlbnR5cGUtc3RyZXRjaHktaG9yaXpvbnRhbC1leHBlY3RlZC50eHQgICAgICB8ICAzMCArKy0t
CiAuLi4vb3BlbnR5cGUtc3RyZXRjaHktaG9yaXpvbnRhbC1leHBlY3RlZC5wbmcgICAgICB8IEJp
biAxMTc4MSAtPiAxMTgyNSBieXRlcwogLi4uL29wZW50eXBlLXN0cmV0Y2h5LWhvcml6b250YWwt
ZXhwZWN0ZWQudHh0ICAgICAgfCAgMzAgKystLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzYgKysrKysKIFNvdXJjZS9XZWJDb3JlL2Nzcy9t
YXRobWwuY3NzICAgICAgICAgICAgICAgICAgICAgIHwgICA0ICstCiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaCAgICAgICB8ICAgMiArLQogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oICAgICAgICAgICAgfCAgIDEgKwogLi4uL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MTWVuY2xvc2UuaCAgICAgICAgfCAgIDkgKy0KIC4uLi9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcCAgIHwgMTgwICsrKysr
KysrKysrKysrKysrLS0tLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxSb3cuaCAgfCAgMTEgKy0KIDEzIGZpbGVzIGNoYW5nZWQsIDI0OCBpbnNlcnRpb25zKCsp
LCA3NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNGNmNjdjNi4uNzVjNGQ3NCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE5IEBACisyMDE2LTAzLTAzICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4K
KworICAgICAgICBSZWZhY3RvciBSZW5kZXJNYXRoTUxSb3cgbGF5b3V0IGZ1bmN0aW9ucyB0byBh
dm9pZCB1c2luZyBmbGV4Ym94CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTMyMDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBcHBseSBzb21lIHNtYWxsIGFkanVzdG1lbnRzIHRvIE1hdGhNTCB0ZXN0cyBh
ZnRlciB0aGUgcmVmYWN0b3Jpbmcgb2YgUmVuZGVyTWF0aE1MUm93LgorCisgICAgICAgICogVGVz
dEV4cGVjdGF0aW9uczogU2tpcCBmcmFjdGlvbnMtcG9zaXRpb25zIHJlZnRlc3QgZm9yIG5vdy4g
VGhlIHNtYWxsIGRpZmZlcmVuY2Ugd2lsbCBiZSBmaXhlZCBhZnRlciByZWZhY3RvcmluZyBjb21w
bGV0ZWx5IFJlbmRlck1hdGhNTEZyYWN0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9tYXRo
bWwvb3BlbnR5cGUvb3BlbnR5cGUtc3RyZXRjaHktaG9yaXpvbnRhbC1leHBlY3RlZC5wbmc6IFVw
ZGF0ZSByZWZlcmVuY2UgdG8gdGFrZSBpbnRvIGFjY291bnQgc21hbGwgY2hhbmdlcyBpbiBzdHJl
dGNoIHNpemUuCisgICAgICAgIFRoZSBpbnRlbmRlZCB0ZXN0IGJlaGF2aW9yIChyZWFkaW5nIHZh
cmlhbnRzIGFuZCBjb25zdHJ1Y3Rpb24gZnJvbSB0aGUgTUFUSCB0YWJsZSkgaXMgcHJlc2VydmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9tYXRobWwvb3BlbnR5cGUvb3BlbnR5cGUtc3RyZXRj
aHktaG9yaXpvbnRhbC1leHBlY3RlZC50eHQ6IGRpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9tYXRobWwvb3BlbnR5cGUvb3BlbnR5cGUtc3RyZXRjaHktaG9yaXpvbnRhbC1leHBlY3RlZC5w
bmc6IGRpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9tYXRobWwvb3BlbnR5cGUvb3BlbnR5
cGUtc3RyZXRjaHktaG9yaXpvbnRhbC1leHBlY3RlZC50eHQ6IGRpdHRvLgorCiAyMDE2LTAzLTEw
ICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBBZGQg
c3VwcG9ydCBmb3IgV09GRjIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlv
bnMgYi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGU5OTJlMjEuLjU3OTg3ZWIg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVz
dHMvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMTEyLDYgKzExMiw5IEBAIHdlYmtpdC5vcmcvYi8xMjc4
NjAgWyBEZWJ1ZyBdIGpzL2Z1bmN0aW9uLWFwcGx5LWFsaWFzZWQuaHRtbCBbIFNraXAgXQogIyBU
aGlzIHRlc3QgdmVyaWZpZXMgZHluYW1pYyBtYW5pcHVsYXRpb24gb2YgdGhlIG1yb290IGFuZCBt
c3FydCBlbGVtZW50cy4KIG1hdGhtbC9yb290cy1yZW1vdmVDaGlsZC5odG1sIFsgSW1hZ2VPbmx5
RmFpbHVyZSBdCiAKKyMgVGhlcmUgaXMgYSBzbWFsbCAxcHggc2l6ZSBkaWZmZXJlbmNlIGJ1dCB0
aGlzIHdpbGwgYmUgZml4ZWQgd2hlbiB3ZSByZWZhY3RvciBjb21wbGV0ZWx5IFJlbmRlck1hdGhN
TEZyYWN0aW9uLgorbWF0aG1sL3ByZXNlbnRhdGlvbi9mcmFjdGlvbnMtcG9zaXRpb25zLmh0bWwg
WyBTa2lwIF0KKwogIyBUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCBhIG1pc21hdGNoIHJlZnRlc3Qg
d2lsbCBmYWlsIGFzIGludGVuZGVkIGlmIGJvdGggcmVzdWx0cyBhcmUgc2FtZS4gKGludHJvZHVj
ZWQgaW4gcjkzMTg3KQogZmFzdC9oYXJuZXNzL3NhbXBsZS1mYWlsLW1pc21hdGNoLXJlZnRlc3Qu
aHRtbCBbIFdvbnRGaXggSW1hZ2VPbmx5RmFpbHVyZSBdCiAKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9tYXRobWwvb3BlbnR5cGUvb3BlbnR5cGUtc3RyZXRjaHktaG9yaXpv
bnRhbC1leHBlY3RlZC5wbmcgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvbWF0aG1sL29wZW50
eXBlL29wZW50eXBlLXN0cmV0Y2h5LWhvcml6b250YWwtZXhwZWN0ZWQucG5nCmluZGV4IGU0YjUz
YWM4ODExYWYwNDc4ZWM5MzVmOTdlYTkxOGI4MzM5MDliOTYuLjNkMDE1MWMyN2Q5MWY3OTUxMWFl
NTA2MmViMzMwMGE2OTZhMGZkNWYgMTAwNjQ0CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAzNzI5
CnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEweX55VXsrdllWMmE+aTAqWik9aF5obEElQFdzJGxIYG9r
PG19P29UbjF4SAp6T0FFN1BHZ0N0JkJMajBJaSkyJHszayMhXkJ5JlIoR2g8XlRHbjQmYGVgeTBY
dV9ieEN5RDxDKiEzQkdsUGlBMT8KejZaQ1goNDVecyZfS3NubTIpbEh7IStKczlvWEtee3UyVmAl
Nmwxd0tBe2FZMCl8P2wzQyFweXVyPHEmZ1ZhVVZgCnpyUkx4UU0hdD02NmtAO1doWlgmaEd9dXNB
ZShtMT5PMDlreTxLTU1ZPElpVDtNKFIhZiYmYVQjSVAqMyQxSCY3cwp6TXBneV47UnByPkxuPChL
fEdEP15ebUtpSCVpcVUoclE+VkFVUyZKWiRndHl3K1VjakM+aWc2dTJjTlVFdmlrTSEKel9qX3x8
TDUyZ1kmcVdtKDlERVdPOElHYHNRSUdORlF9dUNvY2xZSVVZOUFsI18ycHdgKnVWfDZ6diM5eCg2
YmB6CnpJVCNzfG43QTFmKUhYMHNnO0RuTlp1NH5nXzt0MDV2IytuS3tlMEZ1VTYhNVUhSzJ3YShA
KXApdDQtZFR8Sy1XYQp6JD9eNG53QFBwX0pWXlQ3Qnx0cl47YSZpX1ZlI1V7VGt9aWEtcjghK1Bh
N1lYTUo0PE4jJDVnWHp1eishPWJYTzEKekolN0drP1hPPjdVKVRUcG5TT2g3JklPPnp8MzlEND1s
VX07ezEqcXNfflFNdWVVQEUqYFM8c0NBYjVYb1p9cm50CnpRd2BOYFoja00mU1cpcmcmQ1NoXkEz
cUxfc3tRLSpJPXtUI28le0Z5ZjRpTnBBQTQoSmRpREV0bUF9OGU3MXhpOwp6c2E5Z1JROUdZdyZF
KXl6JWVKKHxucj5sVWB0X2pjYCNVPzhIIXZpeSUkSlQoKlVRTVBeJFh7WC1FcW1QKSkkekIKekFP
Q29Dei1wdGArTWhOMXdyPy1iXk0wKmo1eDJMaF53aEhYVFI/KCFwUCF2QWopPERTYkorbz1oUWMt
UzUkZmo+CnpHZWN1ZE9WKVk0X1AjQz4hQz1zKnUpIX45QDBQSEdnI2ByI0g4cHEydTNwRzdufD1P
eXdDMzhhNUN1alh7Q1otZAp6bDdTSyNPSDAzKnZXaFlFQnI3K1RLM2NObjluaEN3VXRLbDZfdHk2
SStmQHNCci10blMrbW1DcSFPdiY7PD84UzYKeio2eXBXSUNkI1lOOV9FM2B9bz94Y1F6Izs8RCta
OGY2IVVGd0coMzI2MGlzMj53YyMwSnVQb3ZTQ2g5cEQ8ZD9ECnpVKFYqb0Myc1JBVTt9JChCWFRC
IWRAeUhze1l3Xnhme1VDdzM9SzA1RmZudmNpeERnTF5EezheYHRBU3ljeVYjQAp6U0gxc2x4OE1L
dz4tR0FsTUt9R25Ec0h+ez1LMXtrZT1uRU0tfW1LRV9mfEVBNUEhQjZXbjBhP3g0UyZ3WnZPa1gK
elopMVVCe2BVOHRzO15sYUJXJnZie2R3QDwhNXlefEljQypBSzBLX2tgflBuRGQlZjdHPWFMVXdC
WkxgIyVzOG84Cnp6ZWohWU55K3pkckJ+VktaZkNLcTR6Q1ReQG9jVmpkRUIwZ0t3ZFY2bmxvLXAq
Xjdiaz89Pk8pezUpQkNgVHFEUQp6PX50XjNaZUZobU9iOVptM0I3a2hvcyp8cyVLJDMqSFZjQCtq
fHM5fHk5TnhtOy15PVV1OU56ODJAPGtANEA4dy0KentyQihSeT9naGpZS05Oe0xAJkA8OHlmIWh7
cm1mU0R2TXZvbnRxdj8mODVSMmFhXjRKVEktOGQzJWAyM28+UEFICnohYl56WWJHQjxHUih0Rkp8
OWZUb2ZFOCNySTJ+NjI2TnkqbSp8ZzArWXdZSHEqWV50TnR1MjVnTHpqZk5LSDxFKQp6IVlTOyN2
Uj5SWnReZV9tOWhmfG9FcCN7VkAkOzlqVSk/NndlTj97d1B2UEhSVXRfX2hlU0NJeWNKJWhWKy1k
PH0Kem5xTGt+UlNlbFRabkIjKEZ4Kno2UWVnIXpGLTkzd3RPNztAYjJLb2kodn0hYU5UVWc5RyRE
PVYwXkdVYUtkWWVCCldLa2FXe2dCSm4yaXd2SHdlbEZ7cjV9RSlRJD45M3sKCmxpdGVyYWwgMzcz
Mwp6Y21lSH5ZZnV3YzZ2dUFAMnRGZFYzTXhLPSNmbTVtcG9FOHRTVlJGKT1+eXVsMFllWmYxUGN3
d0R9Z3s/WHNKNGcKemh7X3s2bH1SVE0ydjVaWGgkN21VMFRofWo/P3lsJkFzQzRTMCkqYGE5Y1RR
fkZVYGx5ZSVMYy1ja2VtcGNtQyhACno/KWgmSGR0bnc/RUNLKnZlN3JyNjBBT0dWMEdlb21oOTB2
T1g0ZGR6NlN0MlQ3a1dBQGxvRVVQMzx3WGtjWGklUQp6d2h5cylhZEpJe2NQNmBwOzJsRjg5YkMz
TXlPUW42K2NjKFM1OCo9IyRpN35sMEdUXigqMEhoeVNaZTB1YFNzRG4KemRffWp6X2JVP0MyJkI9
VVZXUFp2UzxBdzFSQmlhYDBKJFhYJUkxPlJKKT4hY01fUkhMdWFYfGs+YjRadit5JnBBCnp5U25f
Z0Q3RVJwbiVoMld4cnxDKXUkJGp0UnVSSUY5JVAwKTdUVl5ENUVPVj9UY2JiJHB1UWtMZ0w0YVFM
RTFHUAp6Nyhzfmc8KyVMJCVIMmFQMXZ+RlZfdGxUTTA2XiRGUlUwXik7JjQ1MUArT2xwc31Xe2ZI
K2UmTTlecSNJOU1YLXoKenZnSmhHOFJjP3BGaDYtKl9RMUhPSHVpTn1CTEV7bTM4fVQrPkxtY3Nu
em5sQXJxR1lUSzImVmdeR2Q9d2FnelNGCnokdmVYVWo5aF5jWFFzKjlSdTRORjh5bUEmRVVSQCgw
cnkrfTdseWlIe1llVnFWIzUwcnRPfUxARUBoS3drbE04IQp6bVRwI05mJnlncFZxbSQ2Mzt2SDBB
NTc5dCQ7KTgtVU8oRjNhY3w7SEEyS0dnZ0J7ayYlTmxDakxfQHN8M31rRmoKemJqQStfclh3bD5h
bWFXPXdsSG8tJUFge0k/QWJIel5oOSpgLUV5Sk9EWkhHUnBQIz5yRipgRmQ1fHdqfG5XRkNhCnoh
fFQkO2l4PXg+I3pkNm9ZVDFVcTN7azQ4KiU/eW5EbGBHPXJ3bHtNKU5BY2xQNno+YEkyNTdudVln
RWxNVVJ4Xwp6PkRCUktVd1A9ZyRmNGheTjtJTkh3cVRYZStFfilidTZtYD9OVHQlelQqKGY2RkZ6
QF48cH5udUFFNDZBalB+JCQKem8oUkMhbUklO2tTJUpIX2xLOSN4Y0J3X0B7a0V5VSE7SCtxPztB
fUBzKFdsV3sqaTAzU1l8OyVicjlZJHVOa2dwCno/a2omVkFIWmlkazx6dD1iMH1XP15qQlpgKiEh
VEgpMm5ONm9NfWpmcFFPNlgoJmoxUDx2KXdlYTlnPjZ3NlRBSQp6cSFXQCp7JlFjfSl5Uz9nJnVx
JEVYP0trSW0lQFg5WCU0UngtXnN8ZTwyWVAzQkxlJSY3XkF1TCpTbnxFZ3xVVGgKenczXkJ3ZUFP
MXRuKzlhfGZwc0A4IVMzV1M1PSE5aHcybkJrNmkkdiskOWNwSzBJcnsqSW9OWk1nYVF3Qld0MnV3
CnpyblYyaTxHcmIkOSVlQ2ROaUZSeEtMKDxtN15HZjVoX0M2MFF1a2tTcEgoKVJ1R31ye3QpbWdi
anN3IShiYlBeSwp6PzU7JDZXfi1eR1gqQUBuRkBRV09pTUdNfiMyQEglZXF8OXB1WCgqJnZMbXkj
Vk08bV5kNSM8QkQmYUNPLWlEI2wKenMpZW8kaiYtKjFPVFNqMDQ2NnU7XyQzSXgwIU5GOWlBaGNs
eiReZUk3ZHxLRTRZUDBnKD80aU9SZkxadVYxaVBRCnomdkNGWnBxemxEZ2woTk0oM2QjeFRacEQ0
Kz4xUVRafGg3WlV7WWlpUCY1MGZadl9FbyNaWnQ/OVQoTyhANHY9NQp6bmo+S3NMLX4jTio3Mi1A
QGI5dWQlMUE2QC1eJEY5PFA1UUlzZERGPWF8dSYyOTU8enVIaX5KMjt1cnBWR24teHgKejM9Qis4
UFVnNFdYYng5dD0pMExHSWkoZztrTFJUeztFdHZzRm85S0FURCQqVkVOKXRIcipCVDhqWTtXZXNu
bStjCnpGa2hsPUQpaEZ4QmxOaSYlWllzMiMzLURuVWJROVFYMCRBfTFwcjVDV3dyd2xSajdtQWBR
d2hFSCsxO1UpNUZ4bQpxKVhCJF9VUHlXJj40bGA5ZzghWlpFIU5gNl8mRWI9X0diOVkyej5TKF9B
Sz12e3JFM2ZHYXI4ZAoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9tYXRo
bWwvb3BlbnR5cGUvb3BlbnR5cGUtc3RyZXRjaHktaG9yaXpvbnRhbC1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvbWF0aG1sL29wZW50eXBlL29wZW50eXBlLXN0cmV0Y2h5
LWhvcml6b250YWwtZXhwZWN0ZWQudHh0CmluZGV4IDY0NjA5NzcuLjUyYzA2ZTIgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9tYXRobWwvb3BlbnR5cGUvb3BlbnR5cGUtc3Ry
ZXRjaHktaG9yaXpvbnRhbC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Z3RrL21hdGhtbC9vcGVudHlwZS9vcGVudHlwZS1zdHJldGNoeS1ob3Jpem9udGFsLWV4cGVjdGVk
LnR4dApAQCAtNCwzNSArNCwzNSBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHgxNTcKICAgUmVu
ZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDE1NwogICAgIFJlbmRlckJvZHkge0JP
RFl9IGF0ICg4LDE2KSBzaXplIDc4NHgxMjUKICAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoMCww
KSBzaXplIDc4NHgyNQotICAgICAgICBSZW5kZXJNYXRoTUxNYXRoIHttYXRofSBhdCAoMCwyKSBz
aXplIDE4eDIzIFtwYWRkaW5nOiAwIDEgMCAxXQotICAgICAgICAgIFJlbmRlck1hdGhNTFJvdyB7
bXN0eWxlfSBhdCAoMSwwKSBzaXplIDE2eDIzCi0gICAgICAgICAgICBSZW5kZXJNYXRoTUxVbmRl
ck92ZXIge21vdmVyfSBhdCAoMCwwKSBzaXplIDE2eDIzCi0gICAgICAgICAgICAgIFJlbmRlck1h
dGhNTE9wZXJhdG9yIHttb30gYXQgKDAsMSkgc2l6ZSAxNngyMgorICAgICAgICBSZW5kZXJNYXRo
TUxNYXRoIHttYXRofSBhdCAoMCwyKSBzaXplIDEweDIzIFtwYWRkaW5nOiAwIDEgMCAxXQorICAg
ICAgICAgIFJlbmRlck1hdGhNTFJvdyB7bXN0eWxlfSBhdCAoMSwwKSBzaXplIDh4MjMKKyAgICAg
ICAgICAgIFJlbmRlck1hdGhNTFVuZGVyT3ZlciB7bW92ZXJ9IGF0ICgwLDApIHNpemUgOHgyMwor
ICAgICAgICAgICAgICBSZW5kZXJNYXRoTUxPcGVyYXRvciB7bW99IGF0ICgtNSwxKSBzaXplIDE3
eDIyCiAgICAgICAgICAgICAgICAgUmVuZGVyTWF0aE1MQmxvY2sgKGFub255bW91cywgZmxleCkg
YXQgKDIsMCkgc2l6ZSAxMXg0CiAgICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayAoYW5vbnlt
b3VzKSBhdCAoMCwwKSBzaXplIDF4NAogICAgICAgICAgICAgICAgICAgICBSZW5kZXJUZXh0IGF0
ICgwLC0zKSBzaXplIDF4MAogICAgICAgICAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLC0z
KSB3aWR0aCAxOiAiXHh7MjE5Q30iCi0gICAgICAgICAgICAgIFJlbmRlck1hdGhNTFNwYWNlIHtt
c3BhY2V9IGF0ICg0LDApIHNpemUgOHgxCisgICAgICAgICAgICAgIFJlbmRlck1hdGhNTFNwYWNl
IHttc3BhY2V9IGF0ICgwLDApIHNpemUgOHgxCiAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBh
dCAoMCwwKSBzaXplIDB4MAogICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDQxKSBzaXplIDc4
NHgyNQotICAgICAgICBSZW5kZXJNYXRoTUxNYXRoIHttYXRofSBhdCAoMCwyKSBzaXplIDI4eDIz
IFtwYWRkaW5nOiAwIDEgMCAxXQotICAgICAgICAgIFJlbmRlck1hdGhNTFJvdyB7bXN0eWxlfSBh
dCAoMSwwKSBzaXplIDI2eDIzCi0gICAgICAgICAgICBSZW5kZXJNYXRoTUxVbmRlck92ZXIge21v
dmVyfSBhdCAoMCwwKSBzaXplIDI2eDIzCi0gICAgICAgICAgICAgIFJlbmRlck1hdGhNTE9wZXJh
dG9yIHttb30gYXQgKDAsMSkgc2l6ZSAyNngyMgorICAgICAgICBSZW5kZXJNYXRoTUxNYXRoIHtt
YXRofSBhdCAoMCwyKSBzaXplIDE3eDIzIFtwYWRkaW5nOiAwIDEgMCAxXQorICAgICAgICAgIFJl
bmRlck1hdGhNTFJvdyB7bXN0eWxlfSBhdCAoMSwwKSBzaXplIDE1eDIzCisgICAgICAgICAgICBS
ZW5kZXJNYXRoTUxVbmRlck92ZXIge21vdmVyfSBhdCAoMCwwKSBzaXplIDE1eDIzCisgICAgICAg
ICAgICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yIHttb30gYXQgKC02LDEpIHNpemUgMjd4MjIKICAg
ICAgICAgICAgICAgICBSZW5kZXJNYXRoTUxCbG9jayAoYW5vbnltb3VzLCBmbGV4KSBhdCAoMiww
KSBzaXplIDIxeDQKICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrIChhbm9ueW1vdXMpIGF0
ICgwLDApIHNpemUgMXg0CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRleHQgYXQgKDAsLTMp
IHNpemUgMXgwCiAgICAgICAgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsLTMpIHdpZHRo
IDE6ICJceHsyMTlDfSIKLSAgICAgICAgICAgICAgUmVuZGVyTWF0aE1MU3BhY2Uge21zcGFjZX0g
YXQgKDUsMCkgc2l6ZSAxNngxCisgICAgICAgICAgICAgIFJlbmRlck1hdGhNTFNwYWNlIHttc3Bh
Y2V9IGF0ICgwLDApIHNpemUgMTV4MQogICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAs
MCkgc2l6ZSAweDAKICAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoMCw4Mikgc2l6ZSA3ODR4NDMK
LSAgICAgICAgUmVuZGVyTWF0aE1MTWF0aCB7bWF0aH0gYXQgKDAsMCkgc2l6ZSAxNTh4NDMgW3Bh
ZGRpbmc6IDAgMSAwIDFdCi0gICAgICAgICAgUmVuZGVyTWF0aE1MUm93IHttc3R5bGV9IGF0ICgx
LDApIHNpemUgMTU2eDQzCi0gICAgICAgICAgICBSZW5kZXJNYXRoTUxVbmRlck92ZXIge21vdmVy
fSBhdCAoMCwwKSBzaXplIDE1Nng0MwotICAgICAgICAgICAgICBSZW5kZXJNYXRoTUxPcGVyYXRv
ciB7bW99IGF0ICgwLDEpIHNpemUgMTU2eDQyCisgICAgICAgIFJlbmRlck1hdGhNTE1hdGgge21h
dGh9IGF0ICgwLDApIHNpemUgMTUyeDQzIFtwYWRkaW5nOiAwIDEgMCAxXQorICAgICAgICAgIFJl
bmRlck1hdGhNTFJvdyB7bXN0eWxlfSBhdCAoMSwwKSBzaXplIDE1MHg0MworICAgICAgICAgICAg
UmVuZGVyTWF0aE1MVW5kZXJPdmVyIHttb3Zlcn0gYXQgKDAsMCkgc2l6ZSAxNTB4NDMKKyAgICAg
ICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3Ige21vfSBhdCAoLTMsMSkgc2l6ZSAxNTZ4NDIK
ICAgICAgICAgICAgICAgICBSZW5kZXJNYXRoTUxCbG9jayAoYW5vbnltb3VzLCBmbGV4KSBhdCAo
MiwwKSBzaXplIDE1MXg0CiAgICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayAoYW5vbnltb3Vz
KSBhdCAoMCwwKSBzaXplIDF4NAogICAgICAgICAgICAgICAgICAgICBSZW5kZXJUZXh0IGF0ICgw
LC0zKSBzaXplIDF4MAogICAgICAgICAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLC0zKSB3
aWR0aCAxOiAiXHh7MjE5Q30iCi0gICAgICAgICAgICAgIFJlbmRlck1hdGhNTFNwYWNlIHttc3Bh
Y2V9IGF0ICgyLDApIHNpemUgMTUxeDEKKyAgICAgICAgICAgICAgUmVuZGVyTWF0aE1MU3BhY2Ug
e21zcGFjZX0gYXQgKDAsMCkgc2l6ZSAxNTB4MQogICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0g
YXQgKDAsMCkgc2l6ZSAweDAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9t
YXRobWwvb3BlbnR5cGUvb3BlbnR5cGUtc3RyZXRjaHktaG9yaXpvbnRhbC1leHBlY3RlZC5wbmcg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvbWF0aG1sL29wZW50eXBlL29wZW50eXBlLXN0cmV0
Y2h5LWhvcml6b250YWwtZXhwZWN0ZWQucG5nCmluZGV4IGFhMWQ4NWI5MzhiZDhjMGE1NzYwNzU3
MDQ3ZDk3MWY5MWJkYjdhNGMuLjQyYmNjZDFiOGRmNDE2NTZmMDM1MjAxMWNhMTUxZmI5YWNmYTk1
MGMgMTAwNjQ0CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMTgyNQp6Y21lSE5YO19uMjdYRmVU
I1JXbUEwZkNmTUt5WDE0RUlXaiM1SyE0X3RDZWFZNT5QOEJpenR5TGk7aE1tNUVLKzYKekRtcWV9
d3Bhdk82YD4+dzU8KFRCN1I3PWY4bnotM185Y1B6I3dQaFAmb2UofXtgSHlYYCRjbE1iTTg2a0pA
Ml9FCnpvREs9eyhfZGg9MEQ+VT5QNXdTeEFxYXpxQW9MREJUYCtSIyRndyFeWEp3LUFqenJxTkN8
ZE5QIXZgUk84IWhVUwp6Q3w0cVo7N3A4SXc+IWVnKkBeZ3gzb1hLSms4QE8lQlctdFo3fV40Q0xM
SilidyptVTAhSi1kPj9DKSZ5U15xZzUKekhTa0sxbktSRkYtc19+UW5Ecj4pMUUxOWsrKmMxVHhQ
OHNnJGlJTTx3UyRoYm9AZztFVXVlRSUmVSZsaT5OQ0UqCnpmcTJ2XmJJZ19Wcj9JLUVKO3NrKzlw
NjR8c0M/YDs4Wnl3Wld9UlU0dmMyYy0yamNXeGZ2IU4kNUttQDdENnxndgp6S3NZODtRME5BKz4o
djhiaFY2eUkpVlFHa1RKVjE1anJwZWQ4PXQwRnoyRVpKLWJJRVQ4MDcofmxlakNXRUd9Z3IKejEw
RkZYa1cmcGJeRlkhaTdSdTQ9Q3pzYF85YmlmYjRTVGBnU2kqZzEtTVczaHdWelZ5cmt1am1PbG9+
WXxENj4lCno2Nk9+LUlyIT5AbSVMYU1ibEhfeUlvWTB+Tk4mQCVrfEYoeVExYS1QQFhfRmE3MWA2
QUZ4bTlyOzklVHtNRXJ1KAp6dnRHLSVkWEU9UUVoIyM+QjtRelZVcWskRFhBfnkjej5pQFVWU0JL
VGZ9eWFROXhYbzwxcXp7MV5JSWs+VjdwU28KemdiPzNrKmlGbHkoWiZTd2I0dmUtYExLVTNuaD9t
e3pOdFpROTAtNWNTKE5vdFF9Uyp0I2slSiQlS0U9amlgc0x6Cnp4VSEtYGNBdWpkWiNpdmpKMiFz
dTFGYWF3LX1hfUR5eStfVDROa3JjK1p+MWV7ekl3TmpfLWRQYCU9c0ZZbkJxbwp6N2U/c2s7QzFZ
NjNyejlJRGlEaFEqJUI+JD1FVUh1aWN0ZXhAOTB8KiZwPyFrXkp0OG9kWkswMk03QEJwTzFZREgK
emxxM0ghQmwkSD9GZ3d4Tyo8VU9tTiZEJHEwailES1BwLUZ9ITcralpgcVVCdklwVnRuSkl5TH5E
aGd2USpmPHx7CnpaO2hUUXAxOTJ8Tjg+U2E2JF5FKTxHSyM0S21AP1IjcVRVT1loWnk3N2VlQnA1
SHQpNUIzam8hVkIyQ0Y0ZFN2Swp6czRQajY5U1c5ZzNNM2I8O3V2WXJUbkVyTDsqcH57bHx8O1ZQ
KTQ3Zi12fWQ4dmR8UGlqb1lqX201aXFkcTBgXmkKelV4JD8mMGNleWp3JFlyNUg/KlIlWUNpN0Bm
dDh5RSVLaChWZEd8UXtlbm98Y3FMRUdWWDJfQDUzXyhZTG1hZT9fCnpOejV6V2BlUnItWUJ1bnxe
QSZnQkk+Vy1GZmJoYGtaKHlJYU0xcThzLTVQSFdvNW00XkRKVGt3aG4qNXIlMGlXagp6Mmt2RlNV
ZzVKKVRldHRxNn40SDBzMVNON0lucVlhRDBNQUIyKDRXR3hka2pkWnctfGRsaStkQ05+Mj40O0hh
RlgKenN9e3E7MUY7ME1iMjt3cjV7KEolS3hWOTh1I30/X0U/ZmNwa2teKmszVHYxSCpmOHFFblQ7
Q1o7Ty1NbjxiJHY3CnpKSVNZZV43QWchLVgyVnVsVFM7WjEkKm12RmNxYFgpPnklVHd6TkVZVzQz
TVokJGFNQVFSQ280IyVlVyRYTFBgQgp6bDByVihkRTlfeFN+Y30xeV5+fGZBVypRYzEhbFBMd0RJ
UCtjUCVCSTVeOzhRWmFCaiZiKmh0Ny1TX00hWFEpY24KelY5R0RjJWdsX2VuJSotdF5fSXVzayFK
UXk0VH4mJHN2aDNkU1N0e25aUXtWM3tvPE45YSlqc0xtTFJFJTgqRDRACnplMFhBRWllaChLWnt1
flFyeXd2dHopdihRbzg8SnJDXm00M1pNVjJlTzF1QmJUdGg9Yysja1B2PnMyd0BeVkduUAp6X3Q5
NH47fkJ2dWhNZkwxZGpHYGgyZ2pLe21DNTZPI0M2cjVYTEAhVXQ4TEh6aDwoPSNVcDlPPG8/RkAx
ZHZXfkkKekVJcUhidUMkMzU5bD82TWVAYWJZamthO0dRSTE9Rl5genxhNko/bVlvWlMyTD5KeTUk
UkZweEI2eF5VO3BGO2QqCnpETiR2bVlyKWlTRnAoRS0/JmVtUzthPmRrUmpYfEh5S1RKOChCaFo4
WSpGMyFPKz1AWkRRUmErUUNlQ0k+c2A5bwp6TUQ1WHRkQyM1NmR3ZElObDZObzVzdm83QnhYY1o0
RTVaN0hDdDNWTVFAN3NVaSUrOGVUYE5MOCNFKXZOQXYpcjQKemZYLXp5aGpZQWZUVV47JSopJT03
d2t8Ty1LI0BiNkYlZnJrMmZKZ3RvWEEpKVR9PSYqOX17TjRVWFJvJVhAfXl7CnpiTjslJEN5NUhE
VFJIRWc0T2ZfMl5fJF8hJGBAc1k+UllPYmVNWUNmNThgKU8oNnxNRS1EYTwtWmNPb1ZXS0s1cAp6
bCQzVWpYWCV3Wkh0RWY7c1EyI01rKGglal57OylhYXg4bD5KN1hFWD9EOHtXZl4xXm9DMT9Be0BI
Ym0+eDZjKVMKemFaN1QwWDtvYiF4Ml5vcFVZbGIyXmhucUZJZUlmQSh+JiVKTGxVaXk8OHJofDko
YHM9cGRoOHJeeGUjKHw2YmNNCnpfOUMyRihtSGopIWUxNUlFbiNmTWYhSVZib1J0aHNjTTczcEpL
SlB4MU0zO0tMO3o1eXw2KzBsIyFMJCs8WFlhZQp6XldZSUlLKyg9IVJsUzwxKVRzczd0SG4rLTtF
XzghMElKYE5ffVhkXk9TbDdTI3lqXldWR1E0WDFkaGgkST1ITFIKejFGPWckN0EkJTZ2bjQhWTUw
MVdiRlNROSluYDtsc1F+U1lMXzJxVCtWb0VAb2RETjgtN2QrRyRhRjNZeUF3TCtgCno+RUxNbHdj
Jn5DJFZRPVE7MnlOfTZtTktCciF2cFBQeWJXeFFOOTF4TD5ARmpDIT44eCtGNHlhKDBYQHJecWJm
Kgp6cmApdyluTypmdG5WPC00Mmh4Kns5NjlOY0cqfjJnX2UtdldmcV5BeW1wSjw5NT9KelEkXmR4
UTZ0Njthd0tDb3wKemF1KG1KeWRLVitKJHhAfHM2QjNXWDF1ZmVOdUNvZSglbjdpaXUrR3tsUiNl
VD59fFRTeCtGI1ZgaGdVREArJHQ4CnpQYkBYcz95eTFhXiE7cSpKN0kxTSlzWmlNa3ozaDM+WCZK
O3RsX0Z4I3EqfDstckdHLV5aal5kNGAqY2hoQ0xIbQp6ZE5Wd0NSVUExR25eaEZlLVN1PHc7ZD0+
UF5gK31QSDh3T3sxMFpxSyQkZjJEclIheDxUQ3pSISpXdHBuMGBBISkKenFCfU07Mm4yaHVae2hM
Q15SeVokKU9zKnBidlpJZVhvbXFSaHQxTlAzJVF4VDxBSV8ma2V3I3lzKntadzBueW5NCnooZWtv
d25NKkt7WEc9d0RDKiNvMz1KLXVGWHJHPVIrUndFSG9Bd21mZzQ2djluSCkoVmF+VkUlUmQ+STda
NzZ5Kgp6NHpDWl5yWVlCVzdzYTtTRDtXXzh1WD8mO2A5RDd+QzZjalVZd0VxbWszcExINzBoaCZe
cT5AYTdta25oSkBYQn0KektRPigzUkFNSihoKXd9ZUhmbihxcWBwPkhjV209KUF1VGRic2M0ayla
VXg8MWNkUG9+Uk1UK0IyP3NNUGlZVEpPCnpIdSRRMUhkcSM8WGFHbUcpVVErSFRiR0B0cFNBUHVM
SCshK2lJKV80Y0tPTylwc2o7SVVPSzY4NHtjVWg1TnM1IQp6WkVpUiNyaEhmPTcyRD1sSzhjLTco
TF57fSR0dmdzKlJ2V0JMVHJld25BZ19wMUJafiNXfVFWQD1heFV4QEU8LTQKelBpMHlFRDUxYj5Z
fHkmP282YmhTRWJiNFVjMUIrJlNpeWlaMHdpQUdQdD9mUHZqJnliZUVWYChIdSpIKkBUfj09CnpG
eHJpUDxiUGFmUT5QantgSS0tKUBSZUheIUlJfCMkczR2RHdBU1E8a21aMkVLVX1FYE9WJllRdGdx
WCt6P0dGOQp6REVsXl9gUzdecio1cVRMcmZXUUJ1SipsLVVKZypzI2BnXlQ8aSlRU0xZd3g5R2hw
UXF2akJHXlc+TGwmNS1sSigKekFSdG1eQl95fGlPdzJ9N0Y1byRZaUlta01MZVBMRmstOX0kWWEh
KkZrfHZRVjd3e3hmezN+ZV5jQHUkKDMzKTBpCnpYJWN4c2dOZ31oRUdUSWJYKUdYKDF5d3I+WClH
WCgxeSMhKFgpR1goMXRtS21qUm49TzNgaz1FWClMSUlsUl9FYAp0Tk1rYCZGKEhpd3FfTG8/bkVx
Q2MxLTFmJXs8XzdraVIrJlZ7KyUxejxRd0drIXZeWkhLTFBhYkgtYFdLCgpsaXRlcmFsIDExNzgx
CnpjbWVITmNUfCZFN1hLMD0yQlpuUEw9bmh7Zlh2WE1CMl5PPTBVTmZWU3MpVGImcitwSU89MUJR
MiV4eERqQlhHfAp6S0BlTz1QJDYrQjJ9S2JkRFN7TkdETWRqRFdDJnFpbHpibV4mWXJWcHxKJD9Z
YHp5U2NgYCsjTWNpIzxYYn4hc0wKekQ9dC1wQVZfKE9sbD5rRGt8UlA4KSpVWW9jQ0pMNjJuSFdV
VlZtODxYaCNwens2ZlA2QWt1MVlBSlFRYl8jcFlOCnpeMHhOJVMrJn5SIWd7UzAkIWhmfk9ZbGVY
cDd2PlEyb3QpO2FVKyFmViViTHNHQzh9JmUjNmhsRis9YWpYXlpGUwp6JmcoNGtVNyhueFY2Ym9a
T09HPmJYbzJEbk9uWEtBbmJXJEEzWjRDVzlsdXFiQmNFQVJhVGFeMzlqQVZ5aTFnQ3EKel4zZytg
SiVRTWd2ZypATT8kPjM3X1RKb2dGKy1IcT1pakJVITFPd0lrfkYhMjBiI0g+eWMmX2hmUzN6JD5q
Xz1qCnpvYDJhcGg+QCQlI0tKVGZFSnVNcjxtYEBGSUE9PmZzYkowdT1iJkx1YW9gQS0la0JsPURY
RHFNJjJvYGFyV2pCZQp6REdvIU09V0cjKFclQSN9Xzt3WHgyTT0xM2BaanNhbU5fTD5gSjBeSWQ2
ezJmVXspPUNzSlQhb2B1OG09VnskMzcKenFFT2RoPGIybHItRTI4Yks7YzBuN1JaWGhKQnBQVDlS
MXpYVVVtYjghTjkhdExzayY4MGpIR1NASm5lRFZrVGdhCnpyYTd5QlhBcyt+WUhjTjxONnp5VFhu
ZEJrWnYxNElMdylwfEUwYGgkVl9eUH5vYVdAcF9kQylDQ0V9c2hNfk5UIQp6WCtkTG9pRX51RyNB
WENOeVctV1N0XnVwbjRBZF5OaCZENVQpaTVVbUhSSDNrWkhMOUNgVD9+WGAlNXB1VilEZDUKejRO
PHIkPkFSdThTPmA/OSROaWlNWl5UUHFmIX0oWU4tN1lxezBqVyFwVzI/UjBOY0g4Q2w5KihlPDZf
Vil1JHJpCnpRMHJCQHdhYVdIezVnR2diQW9fcEh9N3h0VWdBcWYhdE5sZHN9YzZ8OSNLPEdoVHsr
ZWA1SUZoYjtZcF8ydnYjKwp6MnlLKlJIZVAqPT8/MmNndzJkNzBBOG9GeFUkIW5mJXFwWj9QKm9x
MzR1PlloUkFFK3IpZy1xc0kkWUBmXmtjQGwKelh8WEM8WSN1eERFOzhuaU5JTjh8OEkmQFI0Szwm
NFZVZHN9VmRiNSt5UXR7SCQmaFlGV3BxY2IjMnw0X3p7c3UwCnpgN3UhKSZMRHhOSWMzeH42VjRV
fUM1M0BlLStOJmI7PjdMKzFmb2NMRHx7PTM9KWkteyteTTtWY3okJUFRbzJ9MAp6QUhKMlNyYmxI
fHtNQHEoNWwjZXppJShSQ2I0TSp7cCpoOS1acGNiUnhMNjxAY2FzOD1AKWRYams+cH5YMzdaRWYK
empYQnFHNk5obTIjd24jPXkxUSZFdE5fdUEyVVkqcVc/XlJTRmZFT241Km5saGkwY3xTaitYSV9D
bE16MkZ9JD13CnpIRTF9aEJNUllpajYzKD0mdUw/fEFfOFpFR0lJRnoqLWZ4QylFWkVIR0Z5Km5B
ekg0JiRZdG00SSkpdEQ/ZzZTdQp6aDs1KUFZfmZ2PyhxdTBGUTNXfDwxYm5iSmtSTzFeUjA5Kyor
RjFEbWU4fkpUc0MrZDsjaUB3M0U7QkhEVHp8MWIKejQme0loLUNtO28yIVYtfXB2PWBNRT40NkdA
aUt1Z2pVSWhpaSllWm54WCRDfGQmRzVAaWc/JU8zc1NXIzZYKzdyCnprKCRjfWsqeURvKUYqaCty
XjY+ZC1leEN8WFQrZik2Rld3M0BZOGZ2eHpvYmRNTFI8XldYa1l0QHE8eH0qenFAUgp6PCRQVmJV
RmBJRFErWWprI3k9KFI4UXQyWjN7WkNvR1c1enZLSlhLUiUwI31DLVJFfkVvSHlMNUxZN1EmTlRj
K0sKeitKPSRvaTRJa0VvVXI4IVY1WShxa0ppcXQ+KFllLV9TTHM/KXgwZ0sodEN1PlNKayN6Yklt
JWAqRDcralpKNiReCnpZWmNye0NYO1d8LUMzLWRpRDZ+ODAjRUlIRlliRH5zTH0zK0Jhc21pMl54
bVpnS3g5ZSNZOS1lUEpaIVkyWl5nNAp6KHt6VFNPYFo+VGFBKCpfN3RPcU1PYjxSRFc3bXUzJVNe
PWRYR1pEfWI0VThEOUUzSkR1QkVRej4jcXE+QEF9Oz4Kek5FQkMjU1h0S2d0MkgtYWluaE04Yjh2
TyFLbEUhI3hWQDh8Pz9DVE0pOFkkcUlKQ3Z9a2pJLVpHRWxtKXNrMmwkCnotUXtgJFgqNEE0S3VP
NXFpUGxfVU9qdXNAejQmVyg0eFRMNXQoS0dYUmI2UVRWfStRYWgzOD9RKz5QWlpyTXFQRwp6NVVr
Xz03ej50Jk1iJEh4R1hoZHNFKExHV0deendvU2diY3M8cHA7VyhxIzcxIyZUNUNVNEF1VVclVHFI
MUMhKkUKem96XiNnNCRGSiZLUlN8R0I/dCpLcmVDQ3E9MnYoME0lcHk/U1dwX1BDKyVpXk5weiM7
JUsyT3Y+VT8meEsoaEFVCnotckxUfkcpY2ZkQk0kQTItfXJ9c2wjQkByOGBzYiEjTjRJcFdlNlJI
LXxveEUzdF5FUVVPRHBiSGh0cGYodEpjUwp6ey1TPFBuaylUfXRvOEFlVSVHTyt0MEt3dCtxOEdQ
PHBubE4qb0x6cS1tU1BqMVJPUXgzIVkhS2JSJDFCKUFjRzIKektHWlFJeWM9aWp1Uyo5aW14Sz5B
bVdqYDVudDhUMDFyQHlRVU1jNkpwPGdlSCthZz48UFcmKGtRajZHO08zbDZHCnomfnA+aFE9aHFt
MX0hTlpTdkchTUpWYEJVKDNpMFVOMiZmR3ReQUxETXpZaEsyNm4xP2xBVnooTWBgfHBlVkFFPQp6
VWQycmwrSUdpLWk9KTJ3ZGRAdHdUdTwtJT9SM30yKlNDWFdPLTBQQ3RnTm9hZDs2ITx5V1VxT214
SVVfX0I0JHEKeiVVcC1BYkVCUzxeUmMjaGFtey01SFFVSFF0TUVfMTJZMiRBYVk2bFFXQz54b3ow
fiRWWD5AcFR7Qi1ubGYoTUtCCnptbjFIMGUjZlFMa0F1antaK2Nablh3aGAjOyU2aDY4aTdzakdt
OVY4QU5NWTd1S2wxempfSDRTdnVvXyo+KEFqfgp6ZEE3WVI0fntnQHk1bXc9O2h3ZWk8bWo9WiNV
Vlg0IV45e3JUSzh5QVpUWVFqN2Q7fnIqbD1qekhKVSNgUTl3I0kKem5TMmRZbHYxJVgtKmRgb2lD
IXh+ZCUqWjJpMWE3UlljfnxKWCUmISU7cWNlbHkzOVBsWT91JTc/NVM5SV9mODVjCnplQjZYREQy
PHRqbT9AN3w/OHZkVylsbTR0cFVoOWY2Z2p1XyQmJDgybiZzSUloNTBvQnNUcnBMI2I2Sj9Mb3pI
Rgp6dHhxMnVQczl8dGs/TGgjYSpvLVRjNnExcmVze055VDJoZiViLT1HRmVgcmRWeD5IQWNwc3c5
RmcrTHJ3NkwpPksKenstXihSemQkWktEbDlNZWN6QjkyY2dIfldkQlh2bnhTPjhSTkIoMnBSbnxm
fHBSNjEzKWdrbFJxWm9DXjBDaHxPCnomQnZLVCVXNF5Aa18hNUtqLVd2bmxvWGJ3Vz81aGdGdjVA
eUliUXMhS3pMQWM4QytGKmZpMShZWSgpU0haTjxsRQp6bGNUan1oOWhwaElYQWU9XnRkeVVzb3xM
Y0FGaWEyVkk9RDRlYkdZQGZzez1JY3AobXVnd01iVCQrTXApdzQpZVkKekRmZDlZNHYpamZzcyhk
MldIdGxldE9QeUIqMFlPRiFlfmMxMFVDO3o9ZD0pLU93ZT1hWiQ2N1dgLW1ITygzWWRzCnpzbVI0
IWFaMmd1bVJCTyhQQ0Fqd1NuO29KMk5Abjx1PSlUcHdgNiQzQHZHKmZXPT5KeDdvc09hTDVRZ2lg
aGFYRgp6bEMxTEpAR0FnazEoVDh0TTdUMm16eFFNbDVZRm09XlFuS2RJbC0wWmhDTDU1R1ROaHJh
OD59RUgqTzFEMHJ2JkYKem1WOyh1ayYhJlk4SGJUdWFafSRDWCMhRVIwQmJRKHZ3JkRjcWVZcnFY
Y0I/U2gxTTJuQn1Qand6JlEkdkw7enQ/CnpmUkA0fStQOHB5M35sRzZGb3x9I3BrcVJ0ZTxANiZa
ejlrIXAtKUJXQk5LZj1PRkpmWHVtRTVaOVcwPU8xdH5oOQp6Z040fmlBVWFxOzJNZT12Vnwxezk0
aTt2SV55cHYjOVcyY0xxPU9DPyg4MG9OJEFrX1IoODBwQC11WnVRdXBwV0wKWmxTY0UoNkhmblJm
YDhHNXdycUJgJiktTnJAaDQha0ckSF4xCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL21hdGhtbC9vcGVudHlwZS9vcGVudHlwZS1zdHJldGNoeS1ob3Jpem9udGFsLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9tYXRobWwvb3BlbnR5cGUvb3BlbnR5
cGUtc3RyZXRjaHktaG9yaXpvbnRhbC1leHBlY3RlZC50eHQKaW5kZXggOTM4NjA4Mi4uYWQzNzE2
OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL21hdGhtbC9vcGVudHlwZS9v
cGVudHlwZS1zdHJldGNoeS1ob3Jpem9udGFsLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvbWF0aG1sL29wZW50eXBlL29wZW50eXBlLXN0cmV0Y2h5LWhvcml6b250
YWwtZXhwZWN0ZWQudHh0CkBAIC00LDM1ICs0LDM1IEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAw
eDE1MwogICBSZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4MTUzCiAgICAgUmVu
ZGVyQm9keSB7Qk9EWX0gYXQgKDgsMTYpIHNpemUgNzg0eDEyMQogICAgICAgUmVuZGVyQmxvY2sg
e1B9IGF0ICgwLDApIHNpemUgNzg0eDI0Ci0gICAgICAgIFJlbmRlck1hdGhNTE1hdGgge21hdGh9
IGF0ICgwLDMpIHNpemUgMTh4MjIgW3BhZGRpbmc6IDAgMSAwIDFdCi0gICAgICAgICAgUmVuZGVy
TWF0aE1MUm93IHttc3R5bGV9IGF0ICgxLDApIHNpemUgMTZ4MjIKLSAgICAgICAgICAgIFJlbmRl
ck1hdGhNTFVuZGVyT3ZlciB7bW92ZXJ9IGF0ICgwLDApIHNpemUgMTZ4MjIKLSAgICAgICAgICAg
ICAgUmVuZGVyTWF0aE1MT3BlcmF0b3Ige21vfSBhdCAoMCwxKSBzaXplIDE2eDIxCisgICAgICAg
IFJlbmRlck1hdGhNTE1hdGgge21hdGh9IGF0ICgwLDMpIHNpemUgMTB4MjIgW3BhZGRpbmc6IDAg
MSAwIDFdCisgICAgICAgICAgUmVuZGVyTWF0aE1MUm93IHttc3R5bGV9IGF0ICgxLDApIHNpemUg
OHgyMgorICAgICAgICAgICAgUmVuZGVyTWF0aE1MVW5kZXJPdmVyIHttb3Zlcn0gYXQgKDAsMCkg
c2l6ZSA4eDIyCisgICAgICAgICAgICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yIHttb30gYXQgKC01
LDEpIHNpemUgMTd4MjEKICAgICAgICAgICAgICAgICBSZW5kZXJNYXRoTUxCbG9jayAoYW5vbnlt
b3VzLCBmbGV4KSBhdCAoMiwwKSBzaXplIDExeDQKICAgICAgICAgICAgICAgICAgIFJlbmRlckJs
b2NrIChhbm9ueW1vdXMpIGF0ICgwLDApIHNpemUgMng0CiAgICAgICAgICAgICAgICAgICAgIFJl
bmRlclRleHQgYXQgKDAsLTMpIHNpemUgMngwCiAgICAgICAgICAgICAgICAgICAgICAgdGV4dCBy
dW4gYXQgKDAsLTMpIHdpZHRoIDI6ICJceHsyMTlDfSIKLSAgICAgICAgICAgICAgUmVuZGVyTWF0
aE1MU3BhY2Uge21zcGFjZX0gYXQgKDQsMCkgc2l6ZSA4eDEKKyAgICAgICAgICAgICAgUmVuZGVy
TWF0aE1MU3BhY2Uge21zcGFjZX0gYXQgKDAsMCkgc2l6ZSA4eDEKICAgICAgICAgUmVuZGVyVGV4
dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAs
NDApIHNpemUgNzg0eDI0Ci0gICAgICAgIFJlbmRlck1hdGhNTE1hdGgge21hdGh9IGF0ICgwLDMp
IHNpemUgMjh4MjIgW3BhZGRpbmc6IDAgMSAwIDFdCi0gICAgICAgICAgUmVuZGVyTWF0aE1MUm93
IHttc3R5bGV9IGF0ICgxLDApIHNpemUgMjZ4MjIKLSAgICAgICAgICAgIFJlbmRlck1hdGhNTFVu
ZGVyT3ZlciB7bW92ZXJ9IGF0ICgwLDApIHNpemUgMjZ4MjIKLSAgICAgICAgICAgICAgUmVuZGVy
TWF0aE1MT3BlcmF0b3Ige21vfSBhdCAoMCwxKSBzaXplIDI2eDIxCisgICAgICAgIFJlbmRlck1h
dGhNTE1hdGgge21hdGh9IGF0ICgwLDMpIHNpemUgMTd4MjIgW3BhZGRpbmc6IDAgMSAwIDFdCisg
ICAgICAgICAgUmVuZGVyTWF0aE1MUm93IHttc3R5bGV9IGF0ICgxLDApIHNpemUgMTV4MjIKKyAg
ICAgICAgICAgIFJlbmRlck1hdGhNTFVuZGVyT3ZlciB7bW92ZXJ9IGF0ICgwLDApIHNpemUgMTV4
MjIKKyAgICAgICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3Ige21vfSBhdCAoLTYsMSkgc2l6
ZSAyN3gyMQogICAgICAgICAgICAgICAgIFJlbmRlck1hdGhNTEJsb2NrIChhbm9ueW1vdXMsIGZs
ZXgpIGF0ICgyLDApIHNpemUgMjJ4NAogICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sgKGFu
b255bW91cykgYXQgKDAsMCkgc2l6ZSAyeDQKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGV4
dCBhdCAoMCwtMykgc2l6ZSAyeDAKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAo
MCwtMykgd2lkdGggMjogIlx4ezIxOUN9IgotICAgICAgICAgICAgICBSZW5kZXJNYXRoTUxTcGFj
ZSB7bXNwYWNlfSBhdCAoNSwwKSBzaXplIDE2eDEKKyAgICAgICAgICAgICAgUmVuZGVyTWF0aE1M
U3BhY2Uge21zcGFjZX0gYXQgKDAsMCkgc2l6ZSAxNXgxCiAgICAgICAgIFJlbmRlclRleHQgeyN0
ZXh0fSBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDgwKSBz
aXplIDc4NHg0MQotICAgICAgICBSZW5kZXJNYXRoTUxNYXRoIHttYXRofSBhdCAoMCwwKSBzaXpl
IDE1OHg0MiBbcGFkZGluZzogMCAxIDAgMV0KLSAgICAgICAgICBSZW5kZXJNYXRoTUxSb3cge21z
dHlsZX0gYXQgKDEsMCkgc2l6ZSAxNTZ4NDIKLSAgICAgICAgICAgIFJlbmRlck1hdGhNTFVuZGVy
T3ZlciB7bW92ZXJ9IGF0ICgwLDApIHNpemUgMTU2eDQyCi0gICAgICAgICAgICAgIFJlbmRlck1h
dGhNTE9wZXJhdG9yIHttb30gYXQgKDAsMSkgc2l6ZSAxNTZ4NDEKKyAgICAgICAgUmVuZGVyTWF0
aE1MTWF0aCB7bWF0aH0gYXQgKDAsMCkgc2l6ZSAxNTJ4NDIgW3BhZGRpbmc6IDAgMSAwIDFdCisg
ICAgICAgICAgUmVuZGVyTWF0aE1MUm93IHttc3R5bGV9IGF0ICgxLDApIHNpemUgMTUweDQyCisg
ICAgICAgICAgICBSZW5kZXJNYXRoTUxVbmRlck92ZXIge21vdmVyfSBhdCAoMCwwKSBzaXplIDE1
MHg0MgorICAgICAgICAgICAgICBSZW5kZXJNYXRoTUxPcGVyYXRvciB7bW99IGF0ICgtMywxKSBz
aXplIDE1Nng0MQogICAgICAgICAgICAgICAgIFJlbmRlck1hdGhNTEJsb2NrIChhbm9ueW1vdXMs
IGZsZXgpIGF0ICgyLDApIHNpemUgMTUxeDQKICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2Nr
IChhbm9ueW1vdXMpIGF0ICgwLDApIHNpemUgMng0CiAgICAgICAgICAgICAgICAgICAgIFJlbmRl
clRleHQgYXQgKDAsLTMpIHNpemUgMngwCiAgICAgICAgICAgICAgICAgICAgICAgdGV4dCBydW4g
YXQgKDAsLTMpIHdpZHRoIDI6ICJceHsyMTlDfSIKLSAgICAgICAgICAgICAgUmVuZGVyTWF0aE1M
U3BhY2Uge21zcGFjZX0gYXQgKDIsMCkgc2l6ZSAxNTF4MQorICAgICAgICAgICAgICBSZW5kZXJN
YXRoTUxTcGFjZSB7bXNwYWNlfSBhdCAoMCwwKSBzaXplIDE1MHgxCiAgICAgICAgIFJlbmRlclRl
eHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4MApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDExZjcxOGQuLjUxNGQy
ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAxNi0wMy0wMyAgRnJlZGVyaWMgV2Fu
ZyAgPGZ3YW5nQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgUmVuZGVyTWF0aE1MUm93
IGxheW91dCBmdW5jdGlvbnMgdG8gYXZvaWQgdXNpbmcgZmxleGJveAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzMjA4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyB0aGUgZmlyc3QgcGF0Y2gg
aW4gdGhlIHNldCB0byByZW1vdmUgdGhlIGZsZXhib3gKKyAgICAgICAgZGVwZW5kZW5jeSBvZiB0
aGUgTWF0aE1MIGxheW91dCB3aXRob3V0IGNoYW5naW5nIHRoZSByZW5kZXIgdHJlZQorICAgICAg
ICBzdHJ1Y3R1cmUuIFdlIGhhdmUgZG9uZSBzb21lIHRlbXBvcmFyeSBjaGFuZ2VzIHRvIGFsbG93
IG92ZXJyaWRpbmcgb2YKKyAgICAgICAgbGF5b3V0QmxvY2sgYW5kIHRvIGltcGxlbWVudCBwYWlu
dENoaWxkcmVuLCBidXQgdGhpcyB3aWxsIGJlIHJlbW92ZSBpbiBhCisgICAgICAgIGZvbGxvdy11
cCBwYXRjaC4gV2UgYWxzbyBpbXBsZW1lbnQgZmlyc3RMaW5lQmFzZWxpbmUsCisgICAgICAgIGNv
bXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzIGFuZCBsYXlvdXRCbG9jayBvZiBSZW5kZXJNYXRo
TUxSb3cgd2l0aG91dAorICAgICAgICB1c2luZyBhbnkgZmxleGJveCBmdW5jdGlvbnMuIFdlIGFk
anVzdCBhIGJpdCB0aGUgTWF0aE1MIENTUyB0byB0YWtlIGludG8KKyAgICAgICAgYWNjb3VudCB0
aGVzZSBjaGFuZ2VzLiBGaW5hbGx5LCB3ZSBkZWxldGUgdGhlIHVudXNlZCBoZWxwZXIgZnVuY3Rp
b24gdG8KKyAgICAgICAgY3JlYXRlIGFub255bW91cyBSZW5kZXJNYXRoTUxSb3cuCisKKyAgICAg
ICAgKiBjc3MvbWF0aG1sLmNzczoKKyAgICAgICAgKG1zLCBtdGV4dCwgbWksIG1uLCBtbywgYW5u
b3RhdGlvbiwgbXRkKTogUHJldmVudCBsaW5lYnJlYWtpbmcgaW5zaWRlIHRva2VuIGVsZW1lbnRz
IGFuZCB0YWJsZSBjZWxscywgb3RoZXJ3aXNlIHRoaXMgY2F1c2UgdGVzdCBmYWlsdXJlcyB3aXRo
IHRoZSBuZXcgaW1wbGVtZW50YXRpb24gb2YgUmVuZGVyTWF0aE1MUm93LgorICAgICAgICAobWF0
aCwgbXJvdywgbWZlbmNlZCwgbWVycm9yLCBtcGhhbnRvbSwgbXN0eWxlLCBtZW5jbG9zZSk6IERl
bGV0ZWQuIFdlIG5vIGxvbmdlciByZWx5IG9uIGZsZXhib3ggZm9yIGJhc2VsaW5lIGFsaWdubWVu
dCBvZiBSZW5kZXJNYXRoTUxSb3cuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxl
Qm94Lmg6IEFsbG93IG92ZXJyaWRlciBvZiB0aGUgTGF5b3V0QmxvY2sgZm9yIHRoZSBtb21lbnQu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0Ojppc1JlbmRlck1hdGhNTE1lbmNsb3NlKTogQWRkIGhlbHBlciBmdW5jdGlv
bi4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE1lbmNsb3NlLmg6IGRp
dHRvLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcDogUmVp
bXBsZW1lbnQgdGhlIGNsYXNzIHdpdGhvdXQgdXNpbmcgdGhlIGZsZXhib3ggbGF5b3V0LgorICAg
ICAgICAoV2ViQ29yZTo6bWFyZ2luQm94QXNjZW50Rm9yQ2hpbGQpOiBBZGQgaGVscGVyIGZ1bmN0
aW9uIHRvIGVhc2lseSBjb21wdXRlIHRoZSBhc2NlbnQgb2YgYSBjaGlsZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck1hdGhNTFJvdzo6Zmlyc3RMaW5lQmFzZWxpbmUpOiBJbXBsZW1lbnQgdGhl
IGZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGUgYmFzZWxpbmUuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJNYXRoTUxSb3c6OmNvbXB1dGVMaW5lVmVydGljYWxTdHJldGNoKTogQWRkIGEgZnVuY3Rp
b24gdGhhdCBicm93c2VzIG5vbi1zdHJldGNoeSBjaGlsZHJlbiB0byBkZXRlcm1pbmUgdGhlIGRl
c2lyZWQgdmVydGljYWwgc3RyZXRjaCBtZXRyaWNzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TWF0aE1MUm93Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6IEltcGxlbWVudCB0aGUg
ZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHRoZSBwcmVmZXJyZWQgd2lkdGhzIG9mIHRoZSBSZW5kZXJN
YXRoTUxSb3cuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb3c6OmxheW91dFJvd0l0
ZW1zKTogSGVscGVyIGZ1bmN0aW9uIHRoYXQgbGF5b3V0cyBjaGlsZHJlbiAoc3RyZXRjaGluZyB2
ZXJ0aWNhbCBvcGVyYXRvcnMgaWYgbmVlZGVkKSwgY2FsY3VsYXRlIHRoZSBleGFjdCBsb2dpY2Fs
IHdpZHRoIGFuZCBwb3NpdGlvbiBjaGlsZHJlbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
dGhNTFJvdzo6bGF5b3V0QmxvY2spOiBJbXBsZW1lbnQgdGhlIGZ1bmN0aW9uIHRvIGRvIHRoZSBh
Y3R1YWwgbGF5b3V0LCB3aGljaCBlc3NlbnRpYWxseSBjYWxscyBsYXlvdXRSb3dJdGVtcy4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvdzo6cGFpbnRDaGlsZHJlbik6IFRlbXBvcmFy
aWx5IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLCB3aGljaCBqdXN0IGNhbGxzIHBhaW50Q2hpbGQg
b24gZWFjaCBjaGlsZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvdzo6Y3JlYXRl
QW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKTogRGVsZXRlZC4gV2UgYWN0dWFsbHkgZG9uJ3Qg
Y3JlYXRlIGFub255bW91cyBSZW5kZXJNYXRoTUxSb3cgYXQgdGhlIG1vbWVudC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvdzo6bGF5b3V0KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5oOiBVcGRhdGUgZGVjbGFyYXRpb25zIG9m
IGZ1bmN0aW9ucy4KKwogMjAxNi0wMy0xMCAgRnJlZGVyaWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0dUS10gQWRkIHN1cHBvcnQgZm9yIFdPRkYyCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvbWF0aG1sLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9tYXRobWwu
Y3NzCmluZGV4IDE4Njg4MWMuLjU1MmJjNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9tYXRobWwuY3NzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9tYXRobWwuY3NzCkBAIC0zNyw4
ICszNyw4IEBAIG1zLCBtaSwgbW8sIG1yb3csIG1mZW5jZWQsIG1mcmFjLCBtc3ViLCBtc3VwLCBt
c3Vic3VwLCBtbXVsdGlzY3JpcHRzLCBtcHJlc2NyaXB0CiAgICAgZGlzcGxheTogLXdlYmtpdC1p
bmxpbmUtZmxleCAhaW1wb3J0YW50OwogfQogCi1tYXRoLCBtcm93LCBtZmVuY2VkLCBtZXJyb3Is
IG1waGFudG9tLCBtc3R5bGUsIG1lbmNsb3NlIHsKLSAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7
CittcywgbXRleHQsIG1pLCBtbiwgbW8sIGFubm90YXRpb24sIG10ZCB7CisgICAgd2hpdGUtc3Bh
Y2U6IG5vd3JhcCAhaW1wb3J0YW50OwogfQogCiBtbywgbWZyYWMsIG11bmRlciwgbW92ZXIsIG11
bmRlcm92ZXIgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
ZXhpYmxlQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3gu
aAppbmRleCBkMmQ2NTgyLi41YmIyNzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxleGlibGVCb3guaApAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAKICAgICBib29s
IGF2b2lkc0Zsb2F0cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICBib29sIGNh
bkRyb3BBbm9ueW1vdXNCbG9ja0NoaWxkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBw
YWdlTG9naWNhbEhlaWdodCA9IDApIGZpbmFsOworICAgIHZvaWQgbGF5b3V0QmxvY2soYm9vbCBy
ZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgb3ZlcnJp
ZGU7CiAKICAgICBpbnQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RM
aW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250
YWluaW5nTGluZSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgT3B0aW9uYWw8aW50PiBmaXJzdExpbmVC
YXNlbGluZSgpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oCmluZGV4IDkyMGY4NDkuLjBlYWI1ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgKQEAgLTM4OCw2ICszODgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIGlzUmVuZGVyTWF0aE1MUmFkaWNhbE9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJNYXRoTUxSb3coKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlck1hdGhNTE1hdGgoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlck1hdGhNTE1lbmNsb3NlKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJNYXRoTUxG
ZW5jZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRl
ck1hdGhNTEZyYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgaXNSZW5kZXJNYXRoTUxSb290KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MTWVuY2xvc2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MTWVuY2xvc2Uu
aAppbmRleCBmMGY1NmY5Li5hMTBlMTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE1lbmNsb3NlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxNZW5jbG9zZS5oCkBAIC0zNiwxNSArMzYsMTgg
QEAgcHVibGljOgogICAgIFJlbmRlck1hdGhNTE1lbmNsb3NlKEVsZW1lbnQmLCBSZWY8UmVuZGVy
U3R5bGU+JiYpOwogCiBwcml2YXRlOgotICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiAiUmVuZGVyTWF0aE1MTWVuY2xvc2UiOyB9Ci0gICAgdm9pZCBw
YWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIG92ZXJyaWRlOworICAgIGJvb2wg
aXNSZW5kZXJNYXRoTUxNZW5jbG9zZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAg
ICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlJlbmRlck1h
dGhNTE1lbmNsb3NlIjsgfQorICAgIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0
UG9pbnQmKSBmaW5hbDsKICAgICB2b2lkIHVwZGF0ZUxvZ2ljYWxIZWlnaHQoKSBvdmVycmlkZTsK
ICAgICB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQgPSBudWxscHRyKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbXB1dGVQcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9n
aWNhbFdpZHRocygpIGZpbmFsOwogICAgIGJvb2wgY2hlY2tOb3RhdGlvbmFsVmFsdWVzVmFsaWRp
dHkoY29uc3QgVmVjdG9yPFN0cmluZz4mKSBjb25zdDsKIH07CiAgICAgCiB9CiAKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfUkVOREVSX09CSkVDVChSZW5kZXJNYXRoTUxNZW5jbG9zZSwgaXNSZW5k
ZXJNYXRoTUxNZW5jbG9zZSgpKQorCiAjZW5kaWYgLy8gRU5BQkxFKE1BVEhNTCkKICNlbmRpZiAv
LyBSZW5kZXJNYXRoTUxNZW5jbG9zZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5jcHAKaW5kZXggNWNmMmM5ZC4uYWMxMDlkOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93
LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleCBNaWxv
d3NraSAoYWxleEBtaWxvd3NraS5jb20pLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ4LDEzICs0OSw2IEBAIFJlbmRlck1hdGhNTFJvdzo6UmVuZGVyTWF0aE1MUm93KERvY3Vt
ZW50JiBkb2N1bWVudCwgUmVmPFJlbmRlclN0eWxlPiYmIHN0eWxlKQogewogfQogCi1SZW5kZXJQ
dHI8UmVuZGVyTWF0aE1MUm93PiBSZW5kZXJNYXRoTUxSb3c6OmNyZWF0ZUFub255bW91c1dpdGhQ
YXJlbnRSZW5kZXJlcihSZW5kZXJNYXRoTUxSb290JiBwYXJlbnQpCi17Ci0gICAgUmVuZGVyUHRy
PFJlbmRlck1hdGhNTFJvdz4gbmV3TVJvdyA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlck1hdGhNTFJv
dz4ocGFyZW50LmRvY3VtZW50KCksIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdp
dGhEaXNwbGF5KCZwYXJlbnQuc3R5bGUoKSwgRkxFWCkpOwotICAgIG5ld01Sb3ctPmluaXRpYWxp
emVTdHlsZSgpOwotICAgIHJldHVybiBuZXdNUm93OwotfQotCiB2b2lkIFJlbmRlck1hdGhNTFJv
dzo6dXBkYXRlT3BlcmF0b3JQcm9wZXJ0aWVzKCkKIHsKICAgICBmb3IgKFJlbmRlck9iamVjdCog
Y2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KSB7CkBAIC02Niw0NCArNjAsMTYwIEBAIHZvaWQgUmVuZGVyTWF0aE1MUm93Ojp1cGRhdGVPcGVy
YXRvclByb3BlcnRpZXMoKQogICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygp
OwogfQogCi12b2lkIFJlbmRlck1hdGhNTFJvdzo6bGF5b3V0KCkKK3N0YXRpYyBpbmxpbmUgTGF5
b3V0VW5pdCBtYXJnaW5Cb3hBc2NlbnRGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKQog
ewotICAgIGludCBzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IDAsIHN0cmV0Y2hEZXB0aEJl
bG93QmFzZWxpbmUgPSAwOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hp
bGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYg
KGNoaWxkLT5uZWVkc0xheW91dCgpKQotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRWxlbWVu
dD4oKmNoaWxkKS5sYXlvdXQoKTsKLSAgICAgICAgaWYgKGlzPFJlbmRlck1hdGhNTEJsb2NrPigq
Y2hpbGQpKSB7Ci0gICAgICAgICAgICAvLyBXZSBza2lwIHRoZSBzdHJldGNoeSBvcGVyYXRvcnMg
YXMgdGhleSBtdXN0IG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgY29tcHV0YXRpb24gb2YgdGhlIHN0
cmV0Y2ggc2l6ZS4KLSAgICAgICAgICAgIGF1dG8qIHJlbmRlck9wZXJhdG9yID0gZG93bmNhc3Q8
UmVuZGVyTWF0aE1MQmxvY2s+KCpjaGlsZCkudW5lbWJlbGxpc2hlZE9wZXJhdG9yKCk7CisgICAg
cmV0dXJuIGNoaWxkLmZpcnN0TGluZUJhc2VsaW5lKCkudmFsdWVPcihjaGlsZC5oZWlnaHQoKSkg
KyBjaGlsZC5tYXJnaW5Ub3AoKTsKK30KKworT3B0aW9uYWw8aW50PiBSZW5kZXJNYXRoTUxSb3c6
OmZpcnN0TGluZUJhc2VsaW5lKCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJhc2VsaW5lQ2hp
bGQgPSBmaXJzdENoaWxkQm94KCk7CisgICAgaWYgKCFiYXNlbGluZUNoaWxkKQorICAgICAgICBy
ZXR1cm4gT3B0aW9uYWw8aW50PigpOworCisgICAgT3B0aW9uYWw8aW50PiBiYXNlbGluZSA9IGJh
c2VsaW5lQ2hpbGQtPmZpcnN0TGluZUJhc2VsaW5lKCk7CisgICAgaWYgKCFiYXNlbGluZSkKKyAg
ICAgICAgcmV0dXJuIE9wdGlvbmFsPGludD4oYmFzZWxpbmVDaGlsZC0+Ym9yZGVyVG9wKCkgKyBi
YXNlbGluZUNoaWxkLT5wYWRkaW5nVG9wKCkgKyBiYXNlbGluZUNoaWxkLT5jb250ZW50SGVpZ2h0
KCkgKyBiYXNlbGluZUNoaWxkLT5sb2dpY2FsVG9wKCkpOworCisgICAgcmV0dXJuIE9wdGlvbmFs
PGludD4oYmFzZWxpbmUudmFsdWUoKSArIGJhc2VsaW5lQ2hpbGQtPmxvZ2ljYWxUb3AoKSk7Cit9
CisKK3ZvaWQgUmVuZGVyTWF0aE1MUm93Ojpjb21wdXRlTGluZVZlcnRpY2FsU3RyZXRjaChpbnQm
IHN0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCBpbnQmIHN0cmV0Y2hEZXB0aEJlbG93QmFzZWxp
bmUpCit7CisgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgeworICAgICAgICBpZiAoaXM8UmVu
ZGVyTWF0aE1MQmxvY2s+KGNoaWxkKSkgeworICAgICAgICAgICAgYXV0byogcmVuZGVyT3BlcmF0
b3IgPSBkb3duY2FzdDxSZW5kZXJNYXRoTUxCbG9jaz4oY2hpbGQpLT51bmVtYmVsbGlzaGVkT3Bl
cmF0b3IoKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJPcGVyYXRvciAmJiByZW5kZXJPcGVyYXRv
ci0+aGFzT3BlcmF0b3JGbGFnKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6U3RyZXRjaHkpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIExheW91dFVuaXQg
Y2hpbGRIZWlnaHRBYm92ZUJhc2VsaW5lID0gMCwgY2hpbGREZXB0aEJlbG93QmFzZWxpbmUgPSAw
OwotICAgICAgICBpZiAoaXM8UmVuZGVyTWF0aE1MQmxvY2s+KCpjaGlsZCkpIHsKLSAgICAgICAg
ICAgIFJlbmRlck1hdGhNTEJsb2NrJiBtYXRobWxDaGlsZCA9IGRvd25jYXN0PFJlbmRlck1hdGhN
TEJsb2NrPigqY2hpbGQpOwotICAgICAgICAgICAgY2hpbGRIZWlnaHRBYm92ZUJhc2VsaW5lID0g
bWF0aG1sQ2hpbGQuZmlyc3RMaW5lQmFzZWxpbmUoKS52YWx1ZU9yKG1hdGhtbENoaWxkLmxvZ2lj
YWxIZWlnaHQoKSk7Ci0gICAgICAgICAgICBjaGlsZERlcHRoQmVsb3dCYXNlbGluZSA9IG1hdGht
bENoaWxkLmxvZ2ljYWxIZWlnaHQoKSAtIGNoaWxkSGVpZ2h0QWJvdmVCYXNlbGluZTsKLSAgICAg
ICAgfSBlbHNlIGlmIChpczxSZW5kZXJNYXRoTUxUYWJsZT4oKmNoaWxkKSkgewotICAgICAgICAg
ICAgUmVuZGVyTWF0aE1MVGFibGUmIHRhYmxlQ2hpbGQgPSBkb3duY2FzdDxSZW5kZXJNYXRoTUxU
YWJsZT4oKmNoaWxkKTsKLSAgICAgICAgICAgIGNoaWxkSGVpZ2h0QWJvdmVCYXNlbGluZSA9IHRh
YmxlQ2hpbGQuZmlyc3RMaW5lQmFzZWxpbmUoKS52YWx1ZU9yKC0xKTsKLSAgICAgICAgICAgIGNo
aWxkRGVwdGhCZWxvd0Jhc2VsaW5lID0gdGFibGVDaGlsZC5sb2dpY2FsSGVpZ2h0KCkgLSBjaGls
ZEhlaWdodEFib3ZlQmFzZWxpbmU7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyQm94Pigq
Y2hpbGQpKSB7Ci0gICAgICAgICAgICBjaGlsZEhlaWdodEFib3ZlQmFzZWxpbmUgPSBkb3duY2Fz
dDxSZW5kZXJCb3g+KCpjaGlsZCkubG9naWNhbEhlaWdodCgpOwotICAgICAgICAgICAgY2hpbGRE
ZXB0aEJlbG93QmFzZWxpbmUgPSAwOwotICAgICAgICB9CisKKyAgICAgICAgY2hpbGQtPmxheW91
dElmTmVlZGVkKCk7CisKKyAgICAgICAgTGF5b3V0VW5pdCBjaGlsZExvZ2ljYWxIZWlnaHQgPSBj
aGlsZC0+bG9naWNhbEhlaWdodCgpOworICAgICAgICBMYXlvdXRVbml0IGNoaWxkSGVpZ2h0QWJv
dmVCYXNlbGluZSA9IGNoaWxkLT5maXJzdExpbmVCYXNlbGluZSgpLnZhbHVlT3IoY2hpbGRMb2dp
Y2FsSGVpZ2h0KTsKKyAgICAgICAgTGF5b3V0VW5pdCBjaGlsZERlcHRoQmVsb3dCYXNlbGluZSA9
IGNoaWxkTG9naWNhbEhlaWdodCAtIGNoaWxkSGVpZ2h0QWJvdmVCYXNlbGluZTsKKwogICAgICAg
ICBzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KHN0cmV0
Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCBjaGlsZEhlaWdodEFib3ZlQmFzZWxpbmUpOwogICAgICAg
ICBzdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oc3RyZXRj
aERlcHRoQmVsb3dCYXNlbGluZSwgY2hpbGREZXB0aEJlbG93QmFzZWxpbmUpOwogICAgIH0KLSAg
ICBpZiAoc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgKyBzdHJldGNoRGVwdGhCZWxvd0Jhc2Vs
aW5lIDw9IDApCisKKyAgICAvLyBXZSBlbnN1cmUgYSBtaW5pbWFsIHN0cmV0Y2ggc2l6ZS4KKyAg
ICBpZiAoc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgKyBzdHJldGNoRGVwdGhCZWxvd0Jhc2Vs
aW5lIDw9IDApIHsKICAgICAgICAgc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgPSBzdHlsZSgp
LmZvbnRTaXplKCk7Ci0gICAgCi0gICAgLy8gU2V0IHRoZSBzaXplcyBvZiAocG9zc2libHkgZW1i
ZWxsaXNoZWQpIHN0cmV0Y2h5IG9wZXJhdG9yIGNoaWxkcmVuLgotICAgIGZvciAoYXV0byYgY2hp
bGQgOiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJNYXRoTUxCbG9jaz4oKnRoaXMpKSB7Ci0gICAgICAg
IGlmIChhdXRvIHJlbmRlck9wZXJhdG9yID0gY2hpbGQudW5lbWJlbGxpc2hlZE9wZXJhdG9yKCkp
Ci0gICAgICAgICAgICByZW5kZXJPcGVyYXRvci0+c3RyZXRjaFRvKHN0cmV0Y2hIZWlnaHRBYm92
ZUJhc2VsaW5lLCBzdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lKTsKKyAgICAgICAgc3RyZXRjaERl
cHRoQmVsb3dCYXNlbGluZSA9IDA7CisgICAgfQorfQorCit2b2lkIFJlbmRlck1hdGhNTFJvdzo6
Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQoreworICAgIEFTU0VSVChwcmVmZXJyZWRM
b2dpY2FsV2lkdGhzRGlydHkoKSk7CisKKyAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9
IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gMDsKKworICAgIExheW91dFVuaXQgcHJlZmVy
cmVkV2lkdGggPSAwOworICAgIGZvciAoUmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3go
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCkpCisgICAgICAgIHByZWZl
cnJlZFdpZHRoICs9IGNoaWxkLT5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSArIGNoaWxkLT5t
YXJnaW5Mb2dpY2FsV2lkdGgoKTsKKworICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0g
bV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBwcmVmZXJyZWRXaWR0aCArIGJvcmRlckFuZFBh
ZGRpbmdMb2dpY2FsV2lkdGgoKTsKKworICAgIHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0
eShmYWxzZSk7Cit9CisKK3ZvaWQgUmVuZGVyTWF0aE1MUm93OjpsYXlvdXRSb3dJdGVtcyhpbnQg
c3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUsIGludCBzdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5l
KQoreworICAgIExheW91dFVuaXQgaG9yaXpvbnRhbE9mZnNldCA9IGJvcmRlckFuZFBhZGRpbmdT
dGFydCgpOworICAgIExheW91dFVuaXQgdmVydGljYWxPZmZzZXQgPSBib3JkZXJUb3AoKSArIHBh
ZGRpbmdUb3AoKTsKKyAgICBMYXlvdXRVbml0IG1heEFzY2VudCA9IDAsIG1heERlc2NlbnQgPSAw
OyAvLyBVc2VkIGJhc2VsaW5lIGFsaWdubWVudC4KKyAgICBib29sIHNob3VsZEZsaXBIb3Jpem9u
dGFsID0gIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOworCisgICAgLy8gV2UgZmly
c3Qgc3RyZXRjaCB0aGUgdmVydGljYWwgb3BlcmF0b3JzLgorICAgIC8vIEZvciBpbmxpbmUgZm9y
bXVsYXMsIHdlIGNhbiB0aGVuIGNhbGN1bGF0ZSB0aGUgbG9naWNhbCB3aWR0aC4KKyAgICBMYXlv
dXRVbml0IGxvZ2ljYWxXaWR0aCA9IGJvcmRlckFuZFBhZGRpbmdTdGFydCgpOworICAgIGZvciAo
UmVuZGVyQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nQm94KCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5pc091dE9mRmxvd1Bvc2l0
aW9uZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChpczxSZW5kZXJN
YXRoTUxCbG9jaz4oY2hpbGQpKSB7CisgICAgICAgICAgICBpZiAoYXV0byByZW5kZXJPcGVyYXRv
ciA9IGRvd25jYXN0PFJlbmRlck1hdGhNTEJsb2NrPihjaGlsZCktPnVuZW1iZWxsaXNoZWRPcGVy
YXRvcigpKQorICAgICAgICAgICAgICAgIHJlbmRlck9wZXJhdG9yLT5zdHJldGNoVG8oc3RyZXRj
aEhlaWdodEFib3ZlQmFzZWxpbmUsIHN0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUpOworICAgICAg
ICB9CisKKyAgICAgICAgY2hpbGQtPmxheW91dElmTmVlZGVkKCk7CisKKyAgICAgICAgbG9naWNh
bFdpZHRoICs9IGNoaWxkLT5tYXJnaW5TdGFydCgpICsgY2hpbGQtPndpZHRoKCkgKyBjaGlsZC0+
bWFyZ2luRW5kKCk7CisgICAgfQorCisgICAgbG9naWNhbFdpZHRoICs9IGJvcmRlckVuZCgpICsg
cGFkZGluZ0VuZCgpOworICAgIC8vIEZJWE1FOiBSZW5kZXJNYXRoTUxSb290IGFuZCBSZW5kZXJN
YXRoTUxFbmNsb3NlIGNsYXNzZXMgc2hvdWxkIGFsc28gcmVjYWxjdWxhdGUgdGhlIGV4YWN0IGxv
Z2ljYWwgd2lkdGggaW5zdGVhZCBvZiB1c2luZyB0aGUgcHJlZmVycmVkIHdpZHRoLgorICAgIC8v
IFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMzI2CisgICAg
aWYgKCghaXNSZW5kZXJNYXRoTUxNYXRoKCkgfHwgc3R5bGUoKS5kaXNwbGF5KCkgPT0gSU5MSU5F
KSAmJiAhaXNSZW5kZXJNYXRoTUxSb290KCkgJiYgIWlzUmVuZGVyTWF0aE1MTWVuY2xvc2UoKSkK
KyAgICAgICAgc2V0TG9naWNhbFdpZHRoKGxvZ2ljYWxXaWR0aCk7CisKKyAgICBmb3IgKFJlbmRl
ckJveCogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZ0JveCgpKSB7CisgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkpIHsKKyAgICAgICAgICAgIGNoaWxkLT5jb250YWluaW5nQmxvY2soKS0+aW5zZXJ0UG9zaXRp
b25lZE9iamVjdCgqY2hpbGQpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAg
ICAgICAgTGF5b3V0VW5pdCBjaGlsZEhvcml6b250YWxFeHRlbnQgPSBjaGlsZC0+d2lkdGgoKTsK
KyAgICAgICAgTGF5b3V0VW5pdCBhc2NlbnQgPSBXZWJDb3JlOjptYXJnaW5Cb3hBc2NlbnRGb3JD
aGlsZCgqY2hpbGQpOworICAgICAgICBMYXlvdXRVbml0IGRlc2NlbnQgPSBjaGlsZC0+dmVydGlj
YWxNYXJnaW5FeHRlbnQoKSArIGNoaWxkLT5oZWlnaHQoKSAtIGFzY2VudDsKKyAgICAgICAgbWF4
QXNjZW50ID0gc3RkOjptYXgobWF4QXNjZW50LCBhc2NlbnQpOworICAgICAgICBtYXhEZXNjZW50
ID0gc3RkOjptYXgobWF4RGVzY2VudCwgZGVzY2VudCk7CisgICAgICAgIExheW91dFVuaXQgY2hp
bGRWZXJ0aWNhbE1hcmdpbkJveEV4dGVudCA9IG1heEFzY2VudCArIG1heERlc2NlbnQ7CisKKyAg
ICAgICAgaG9yaXpvbnRhbE9mZnNldCArPSBjaGlsZC0+bWFyZ2luU3RhcnQoKTsKKworICAgICAg
ICBzZXRMb2dpY2FsSGVpZ2h0KHN0ZDo6bWF4KGxvZ2ljYWxIZWlnaHQoKSwgdmVydGljYWxPZmZz
ZXQgKyBib3JkZXJCb3R0b20oKSArIHBhZGRpbmdCb3R0b20oKSArIGNoaWxkVmVydGljYWxNYXJn
aW5Cb3hFeHRlbnQgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkpKTsKKworICAgICAgICBM
YXlvdXRQb2ludCBjaGlsZExvY2F0aW9uKHNob3VsZEZsaXBIb3Jpem9udGFsID8gd2lkdGgoKSAt
IGhvcml6b250YWxPZmZzZXQgLSBjaGlsZEhvcml6b250YWxFeHRlbnQgOiBob3Jpem9udGFsT2Zm
c2V0LCB2ZXJ0aWNhbE9mZnNldCArIGNoaWxkLT5tYXJnaW5Ub3AoKSk7CisgICAgICAgIGNoaWxk
LT5zZXRMb2NhdGlvbihjaGlsZExvY2F0aW9uKTsKKworICAgICAgICBob3Jpem9udGFsT2Zmc2V0
ICs9IGNoaWxkSG9yaXpvbnRhbEV4dGVudCArIGNoaWxkLT5tYXJnaW5FbmQoKTsKKyAgICB9CisK
KyAgICBMYXlvdXRVbml0IGNlbnRlckJsb2NrT2Zmc2V0ID0gMDsKKyAgICAvLyBGSVhNRTogUmVt
b3ZlIHRoZSBGTEVYIHdoZW4gaXQgaXMgbm90IHJlcXVpcmVkIGJ5IHRoZSBjc3MuCisgICAgaWYg
KHN0eWxlKCkuZGlzcGxheSgpID09IEJMT0NLIHx8IHN0eWxlKCkuZGlzcGxheSgpID09IEZMRVgp
CisgICAgICAgIGNlbnRlckJsb2NrT2Zmc2V0ID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgKHdp
ZHRoKCkgLSAoaG9yaXpvbnRhbE9mZnNldCArIGJvcmRlckVuZCgpICsgcGFkZGluZ0VuZCgpKSkg
LyAyKTsKKworICAgIGlmIChzaG91bGRGbGlwSG9yaXpvbnRhbCAmJiBjZW50ZXJCbG9ja09mZnNl
dCA+IDApCisgICAgICAgIGNlbnRlckJsb2NrT2Zmc2V0ID0gLWNlbnRlckJsb2NrT2Zmc2V0Owor
CisgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgeworICAgICAgICBMYXlvdXRVbml0IGFzY2Vu
dCA9IFdlYkNvcmU6Om1hcmdpbkJveEFzY2VudEZvckNoaWxkKCpjaGlsZCk7CisgICAgICAgIExh
eW91dFVuaXQgc3RhcnRPZmZzZXQgPSBtYXhBc2NlbnQgLSBhc2NlbnQ7CisgICAgICAgIGNoaWxk
LT5zZXRMb2NhdGlvbihjaGlsZC0+bG9jYXRpb24oKSArIExheW91dFBvaW50KGNlbnRlckJsb2Nr
T2Zmc2V0LCBzdGFydE9mZnNldCkpOwogICAgIH0KK30KKwordm9pZCBSZW5kZXJNYXRoTUxSb3c6
OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCkKK3sKKyAgICBB
U1NFUlQobmVlZHNMYXlvdXQoKSk7CisKKyAgICBpZiAoIXJlbGF5b3V0Q2hpbGRyZW4gJiYgc2lt
cGxpZmllZExheW91dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgc3RyZXRjaEhlaWdo
dEFib3ZlQmFzZWxpbmUgPSAwOworICAgIGludCBzdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0g
MDsKKyAgICBjb21wdXRlTGluZVZlcnRpY2FsU3RyZXRjaChzdHJldGNoSGVpZ2h0QWJvdmVCYXNl
bGluZSwgc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSk7CisKKyAgICByZWNvbXB1dGVMb2dpY2Fs
V2lkdGgoKTsKIAotICAgIFJlbmRlck1hdGhNTEJsb2NrOjpsYXlvdXQoKTsKKyAgICBzZXRMb2dp
Y2FsSGVpZ2h0KGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkgKyBzY3JvbGxiYXJMb2dp
Y2FsSGVpZ2h0KCkpOworCisgICAgbGF5b3V0Um93SXRlbXMoc3RyZXRjaEhlaWdodEFib3ZlQmFz
ZWxpbmUsIHN0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUpOworCisgICAgdXBkYXRlTG9naWNhbEhl
aWdodCgpOworCisgICAgY2xlYXJOZWVkc0xheW91dCgpOworfQorCit2b2lkIFJlbmRlck1hdGhN
TFJvdzo6cGFpbnRDaGlsZHJlbihQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2Zmc2V0LCBQYWludEluZm8mIHBhaW50SW5mb0ZvckNoaWxkLCBib29sIHVzZVBy
aW50UmVjdCkKK3sKKyAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKSB7CisgICAgICAgIGlmICgh
cGFpbnRDaGlsZCgqY2hpbGQsIHBhaW50SW5mbywgcGFpbnRPZmZzZXQsIHBhaW50SW5mb0ZvckNo
aWxkLCB1c2VQcmludFJlY3QsIFBhaW50QXNJbmxpbmVCbG9jaykpCisgICAgICAgICAgICByZXR1
cm47CisgICAgfQogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFJvdy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxSb3cuaAppbmRleCAwMjgyZmU3Li41NzY0NTgwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmgKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFsZXggTWlsb3dza2kgKGFsZXhAbWls
b3dza2kuY29tKS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBJ
Z2FsaWEgUy5MLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSwxNSArNDAs
MTkgQEAgcHVibGljOgogICAgIFJlbmRlck1hdGhNTFJvdyhFbGVtZW50JiwgUmVmPFJlbmRlclN0
eWxlPiYmKTsKICAgICBSZW5kZXJNYXRoTUxSb3coRG9jdW1lbnQmLCBSZWY8UmVuZGVyU3R5bGU+
JiYpOwogCi0gICAgc3RhdGljIFJlbmRlclB0cjxSZW5kZXJNYXRoTUxSb3c+IGNyZWF0ZUFub255
bW91c1dpdGhQYXJlbnRSZW5kZXJlcihSZW5kZXJNYXRoTUxSb290Jik7CiAgICAgdm9pZCB1cGRh
dGVPcGVyYXRvclByb3BlcnRpZXMoKTsKIAotcHJvdGVjdGVkOgotICAgIHZvaWQgbGF5b3V0KCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExh
eW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBmaW5hbDsKKyAgICB2b2lkIHBhaW50Q2hp
bGRyZW4oUGFpbnRJbmZvJiBmb3JTZWxmLCBjb25zdCBMYXlvdXRQb2ludCYsIFBhaW50SW5mbyYg
Zm9yQ2hpbGQsIGJvb2wgdXNlUHJpbnRSZWN0KSBmaW5hbDsKKyAgICBPcHRpb25hbDxpbnQ+IGZp
cnN0TGluZUJhc2VsaW5lKCkgY29uc3QgZmluYWw7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpc1Jl
bmRlck1hdGhNTFJvdygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICBjb25zdCBj
aGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gaXNBbm9ueW1vdXMoKSA/
ICJSZW5kZXJNYXRoTUxSb3cgKGFub255bW91cykiIDogIlJlbmRlck1hdGhNTFJvdyI7IH0KKwor
ICAgIHZvaWQgbGF5b3V0Um93SXRlbXMoaW50IHN0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCBp
bnQgc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSk7CisgICAgdm9pZCBjb21wdXRlTGluZVZlcnRp
Y2FsU3RyZXRjaChpbnQmIHN0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCBpbnQmIHN0cmV0Y2hE
ZXB0aEJlbG93QmFzZWxpbmUpOworICAgIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0
aHMoKSBvdmVycmlkZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLS0gCjIuNy4wCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275283</attachid>
            <date>2016-03-31 08:16:40 -0700</date>
            <delta_ts>2016-04-01 08:44:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Bug-153208-Refactor-RenderMathMLRow-layout-functions.patch</filename>
            <type>text/plain</type>
            <size>39251</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSAzYzcxZDc0MmI0MWM3Nzg4YzBkZDhjYjRlNzkzYzNjMjBmNTU5NmVlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogVGh1LCAzIE1hciAyMDE2IDEzOjE4OjIyICswMTAwClN1YmplY3Q6IFtQQVRDSCAwMS8yMV0g
QnVnIDE1MzIwOCAtIFJlZmFjdG9yIFJlbmRlck1hdGhNTFJvdyBsYXlvdXQgZnVuY3Rpb25zCiB0
byBhdm9pZCB1c2luZyBmbGV4Ym94CgotLS0KIExheW91dFRlc3RzL0NoYW5nZUxvZyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIDE3ICsrCiBMYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRp
b25zICAgICAgICAgICAgICAgICAgICAgICB8ICAgNiArCiAuLi4vb3BlbnR5cGUtc3RyZXRjaHkt
aG9yaXpvbnRhbC1leHBlY3RlZC5wbmcgICAgICB8IEJpbiAzNzMzIC0+IDM3MjkgYnl0ZXMKIC4u
Li9vcGVudHlwZS1zdHJldGNoeS1ob3Jpem9udGFsLWV4cGVjdGVkLnR4dCAgICAgIHwgIDMwICsr
LS0KIC4uLi9vcGVudHlwZS1zdHJldGNoeS1ob3Jpem9udGFsLWV4cGVjdGVkLnBuZyAgICAgIHwg
QmluIDExNzgxIC0+IDExODI1IGJ5dGVzCiAuLi4vb3BlbnR5cGUtc3RyZXRjaHktaG9yaXpvbnRh
bC1leHBlY3RlZC50eHQgICAgICB8ICAzMCArKy0tCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzNyArKysrKwogU291cmNlL1dlYkNvcmUvY3Nz
L21hdGhtbC5jc3MgICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oICAgICAgIHwgICAyICstCiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggICAgICAgICAgICB8ICAgMSArCiAuLi4vV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmggICB8ICAgNiArCiAuLi4v
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxNZW5jbG9zZS5oICAgICAgICB8ICAgOSArLQog
Li4uL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwICAgfCAxNzEg
KysrKysrKysrKysrKysrKy0tLS0tCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTFJvdy5oICB8ICAxMSArLQogMTQgZmlsZXMgY2hhbmdlZCwgMjUwIGluc2VydGlv
bnMoKyksIDc0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBkZDQ5NWQ5Li5jOWIzZTdiIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTYtMDMtMDMgIEZyZWRlcmljIFdhbmcgIDxmd2FuZ0BpZ2FsaWEu
Y29tPgorCisgICAgICAgIFJlZmFjdG9yIFJlbmRlck1hdGhNTFJvdyBsYXlvdXQgZnVuY3Rpb25z
IHRvIGF2b2lkIHVzaW5nIGZsZXhib3gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MzIwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFwcGx5IHNvbWUgc21hbGwgYWRqdXN0bWVudHMgdG8gTWF0aE1MIHRl
c3RzIGFmdGVyIHRoZSByZWZhY3RvcmluZyBvZiBSZW5kZXJNYXRoTUxSb3cuCisKKyAgICAgICAg
KiBUZXN0RXhwZWN0YXRpb25zOiBTa2lwIGZyYWN0aW9ucy1wb3NpdGlvbnMgcmVmdGVzdCBmb3Ig
bm93LiBUaGUgc21hbGwgZGlmZmVyZW5jZSB3aWxsIGJlIGZpeGVkIGFmdGVyIHJlZmFjdG9yaW5n
IGNvbXBsZXRlbHkgUmVuZGVyTWF0aE1MRnJhY3Rpb24uCisgICAgICAgICAgV2UgYWxzbyBpZ25v
cmUgYSB0ZXN0IGZvciBtYXJnaW4vcGFkZGluZyBvbiBNYXRoTUwgcmVuZGVyZXJzLgorICAgICAg
ICAqIHBsYXRmb3JtL2d0ay9tYXRobWwvb3BlbnR5cGUvb3BlbnR5cGUtc3RyZXRjaHktaG9yaXpv
bnRhbC1leHBlY3RlZC5wbmc6IFVwZGF0ZSByZWZlcmVuY2UgdG8gdGFrZSBpbnRvIGFjY291bnQg
c21hbGwgY2hhbmdlcyBpbiBzdHJldGNoIHNpemUuCisgICAgICAgIFRoZSBpbnRlbmRlZCB0ZXN0
IGJlaGF2aW9yIChyZWFkaW5nIHZhcmlhbnRzIGFuZCBjb25zdHJ1Y3Rpb24gZnJvbSB0aGUgTUFU
SCB0YWJsZSkgaXMgcHJlc2VydmVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9tYXRobWwvb3Bl
bnR5cGUvb3BlbnR5cGUtc3RyZXRjaHktaG9yaXpvbnRhbC1leHBlY3RlZC50eHQ6IGRpdHRvLgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9tYXRobWwvb3BlbnR5cGUvb3BlbnR5cGUtc3RyZXRjaHkt
aG9yaXpvbnRhbC1leHBlY3RlZC5wbmc6IGRpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9t
YXRobWwvb3BlbnR5cGUvb3BlbnR5cGUtc3RyZXRjaHktaG9yaXpvbnRhbC1leHBlY3RlZC50eHQ6
IGRpdHRvLgorCiAyMDE2LTAzLTI2ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4K
IAogICAgICAgICBTZXBhcmF0ZSByZW5kZXIgdHJlZSB1cGRhdGluZyBmcm9tIHN0eWxlIHJlc29s
dmUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0
cy9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDE4N2VkODguLmZmYWI3MDggMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0
aW9ucwpAQCAtMTEyLDYgKzExMiwxMiBAQCB3ZWJraXQub3JnL2IvMTI3ODYwIFsgRGVidWcgXSBq
cy9mdW5jdGlvbi1hcHBseS1hbGlhc2VkLmh0bWwgWyBTa2lwIF0KICMgVGhpcyB0ZXN0IHZlcmlm
aWVzIGR5bmFtaWMgbWFuaXB1bGF0aW9uIG9mIHRoZSBtcm9vdCBhbmQgbXNxcnQgZWxlbWVudHMu
CiBtYXRobWwvcm9vdHMtcmVtb3ZlQ2hpbGQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogCisj
IFRoZXJlIGlzIGEgc21hbGwgMXB4IHNpemUgZGlmZmVyZW5jZSBidXQgdGhpcyB3aWxsIGJlIGZp
eGVkIHdoZW4gd2UgcmVmYWN0b3IgY29tcGxldGVseSBSZW5kZXJNYXRoTUxGcmFjdGlvbi4KK21h
dGhtbC9wcmVzZW50YXRpb24vZnJhY3Rpb25zLXBvc2l0aW9ucy5odG1sIFsgU2tpcCBdCisKKyMg
Rm9yIG5vdyB3ZSBpZ25vcmUgbWFyZ2luL3BhZGRpbmcvYm9yZGVyIHByb3BlcnRpZXMgb2YgTWF0
aE1MIHJlbmRlcmVycy4KK21hdGhtbC9wcmVzZW50YXRpb24vYnVnOTc5OTAuaHRtbCBbIFNraXAg
XQorCiAjIFRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IGEgbWlzbWF0Y2ggcmVmdGVzdCB3aWxsIGZh
aWwgYXMgaW50ZW5kZWQgaWYgYm90aCByZXN1bHRzIGFyZSBzYW1lLiAoaW50cm9kdWNlZCBpbiBy
OTMxODcpCiBmYXN0L2hhcm5lc3Mvc2FtcGxlLWZhaWwtbWlzbWF0Y2gtcmVmdGVzdC5odG1sIFsg
V29udEZpeCBJbWFnZU9ubHlGYWlsdXJlIF0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ3RrL21hdGhtbC9vcGVudHlwZS9vcGVudHlwZS1zdHJldGNoeS1ob3Jpem9udGFsLWV4
cGVjdGVkLnBuZyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9tYXRobWwvb3BlbnR5cGUvb3Bl
bnR5cGUtc3RyZXRjaHktaG9yaXpvbnRhbC1leHBlY3RlZC5wbmcKaW5kZXggZTRiNTNhYzg4MTFh
ZjA0NzhlYzkzNWY5N2VhOTE4YjgzMzkwOWI5Ni4uM2QwMTUxYzI3ZDkxZjc5NTExYWU1MDYyZWIz
MzAwYTY5NmEwZmQ1ZiAxMDA2NDQKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDM3MjkKemNtZUFT
QE4/KG9sSHlgdVZCcSFpYTB5fnlVeyt2WVYyYT5pMCpaKT1oXmhsQSVAV3MkbEhgb2s8bX0/b1Ru
MXhICnpPQUU3UEdnQ3QmQkxqMElpKTIkezNrIyFeQnkmUihHaDxeVEduNCZgZWB5MFh1X2J4Q3lE
PEMqITNCR2xQaUExPwp6NlpDWCg0NV5zJl9Lc25tMilsSHshK0pzOW9YS157dTJWYCU2bDF3S0F7
YVkwKXw/bDNDIXB5dXI8cSZnVmFVVmAKenJSTHhRTSF0PTY2a0A7V2haWCZoR311c0FlKG0xPk8w
OWt5PEtNTVk8SWlUO00oUiFmJiZhVCNJUCozJDFIJjdzCnpNcGd5XjtScHI+TG48KEt8R0Q/Xl5t
S2lIJWlxVShyUT5WQVVTJkpaJGd0eXcrVWNqQz5pZzZ1MmNOVUV2aWtNIQp6X2pffHxMNTJnWSZx
V20oOURFV084SUdgc1FJR05GUX11Q29jbFlJVVk5QWwjXzJwd2AqdVZ8Nnp2Izl4KDZiYHoKeklU
I3N8bjdBMWYpSFgwc2c7RG5OWnU0fmdfO3QwNXYjK25Le2UwRnVVNiE1VSFLMndhKEApcCl0NC1k
VHxLLVdhCnokP140bndAUHBfSlZeVDdCfHRyXjthJmlfVmUjVXtUa31pYS1yOCErUGE3WVhNSjQ8
TiMkNWdYenV6KyE9YlhPMQp6SiU3R2s/WE8+N1UpVFRwblNPaDcmSU8+enwzOUQ0PWxVfTt7MSpx
c19+UU11ZVVARSpgUzxzQ0FiNVhvWn1ybnQKelF3YE5gWiNrTSZTVylyZyZDU2heQTNxTF9ze1Et
Kkk9e1QjbyV7RnlmNGlOcEFBNChKZGlERXRtQX04ZTcxeGk7CnpzYTlnUlE5R1l3JkUpeXolZUoo
fG5yPmxVYHRfamNgI1U/OEghdml5JSRKVCgqVVFNUF4kWHtYLUVxbVApKSR6Qgp6QU9Db0N6LXB0
YCtNaE4xd3I/LWJeTTAqajV4MkxoXndoSFhUUj8oIXBQIXZBaik8RFNiSitvPWhRYy1TNSRmaj4K
ekdlY3VkT1YpWTRfUCNDPiFDPXMqdSkhfjlAMFBIR2cjYHIjSDhwcTJ1M3BHN258PU95d0MzOGE1
Q3VqWHtDWi1kCnpsN1NLI09IMDMqdldoWUVCcjcrVEszY05uOW5oQ3dVdEtsNl90eTZJK2ZAc0Jy
LXRuUyttbUNxIU92Jjs8PzhTNgp6KjZ5cFdJQ2QjWU45X0UzYH1vP3hjUXojOzxEK1o4ZjYhVUZ3
RygzMjYwaXMyPndjIzBKdVBvdlNDaDlwRDxkP0QKelUoVipvQzJzUkFVO30kKEJYVEIhZEB5SHN7
WXdeeGZ7VUN3Mz1LMDVGZm52Y2l4RGdMXkR7OF5gdEFTeWN5ViNACnpTSDFzbHg4TUt3Pi1HQWxN
S31HbkRzSH57PUsxe2tlPW5FTS19bUtFX2Z8RUE1QSFCNlduMGE/eDRTJndadk9rWAp6WikxVUJ7
YFU4dHM7XmxhQlcmdmJ7ZHdAPCE1eV58SWNDKkFLMEtfa2B+UG5EZCVmN0c9YUxVd0JaTGAjJXM4
bzgKenplaiFZTnkremRyQn5WS1pmQ0txNHpDVF5Ab2NWamRFQjBnS3dkVjZubG8tcCpeN2JrPz0+
Tyl7NSlCQ2BUcURRCno9fnReM1plRmhtT2I5Wm0zQjdraG9zKnxzJUskMypIVmNAK2p8czl8eTlO
eG07LXk9VXU5Tno4MkA8a0A0QDh3LQp6e3JCKFJ5P2doallLTk57TEAmQDw4eWYhaHtybWZTRHZN
dm9udHF2PyY4NVIyYWFeNEpUSS04ZDMlYDIzbz5QQUgKeiFiXnpZYkdCPEdSKHRGSnw5ZlRvZkU4
I3JJMn42MjZOeSptKnxnMCtZd1lIcSpZXnROdHUyNWdMempmTktIPEUpCnohWVM7I3ZSPlJadF5l
X205aGZ8b0VwI3tWQCQ7OWpVKT82d2VOP3t3UHZQSFJVdF9faGVTQ0l5Y0olaFYrLWQ8fQp6bnFM
a35SU2VsVFpuQiMoRngqejZRZWchekYtOTN3dE83O0BiMktvaSh2fSFhTlRVZzlHJEQ9VjBeR1Vh
S2RZZUIKV0trYVd7Z0JKbjJpd3ZId2VsRntyNX1FKVEkPjkzewoKbGl0ZXJhbCAzNzMzCnpjbWVI
fllmdXdjNnZ1QUAydEZkVjNNeEs9I2ZtNW1wb0U4dFNWUkYpPX55dWwwWWVaZjFQY3d3RH1nez9Y
c0o0Zwp6aHtfezZsfVJUTTJ2NVpYaCQ3bVUwVGh9aj8/eWwmQXNDNFMwKSpgYTljVFF+RlVgbHll
JUxjLWNrZW1wY21DKEAKej8paCZIZHRudz9FQ0sqdmU3cnI2MEFPR1YwR2VvbWg5MHZPWDRkZHo2
U3QyVDdrV0FAbG9FVVAzPHdYa2NYaSVRCnp3aHlzKWFkSkl7Y1A2YHA7MmxGODliQzNNeU9RbjYr
Y2MoUzU4Kj0jJGk3fmwwR1ReKCowSGh5U1plMHVgU3NEbgp6ZF99anpfYlU/QzImQj1VVldQWnZT
PEF3MVJCaWFgMEokWFglSTE+UkopPiFjTV9SSEx1YVh8az5iNFp2K3kmcEEKenlTbl9nRDdFUnBu
JWgyV3hyfEMpdSQkanRSdVJJRjklUDApN1RWXkQ1RU9WP1RjYmIkcHVRa0xnTDRhUUxFMUdQCno3
KHN+ZzwrJUwkJUgyYVAxdn5GVl90bFRNMDZeJEZSVTBeKTsmNDUxQCtPbHBzfVd7ZkgrZSZNOV5x
I0k5TVgtegp6dmdKaEc4UmM/cEZoNi0qX1ExSE9IdWlOfUJMRXttMzh9VCs+TG1jc256bmxBcnFH
WVRLMiZWZ15HZD13YWd6U0YKeiR2ZVhVajloXmNYUXMqOVJ1NE5GOHltQSZFVVJAKDByeSt9N2x5
aUh7WWVWcVYjNTBydE99TEBFQGhLd2tsTTghCnptVHAjTmYmeWdwVnFtJDYzO3ZIMEE1Nzl0JDsp
OC1VTyhGM2FjfDtIQTJLR2dnQntrJiVObENqTF9Ac3wzfWtGagp6YmpBK19yWHdsPmFtYVc9d2xI
by0lQWB7ST9BYkh6Xmg5KmAtRXlKT0RaSEdScFAjPnJGKmBGZDV8d2p8bldGQ2EKeiF8VCQ7aXg9
eD4jemQ2b1lUMVVxM3trNDgqJT95bkRsYEc9cndse00pTkFjbFA2ej5gSTI1N251WWdFbE1VUnhf
Cno+REJSS1V3UD1nJGY0aF5OO0lOSHdxVFhlK0V+KWJ1Nm1gP05UdCV6VCooZjZGRnpAXjxwfm51
QUU0NkFqUH4kJAp6byhSQyFtSSU7a1MlSkhfbEs5I3hjQndfQHtrRXlVITtIK3E/O0F9QHMoV2xX
eyppMDNTWXw7JWJyOVkkdU5rZ3AKej9raiZWQUhaaWRrPHp0PWIwfVc/XmpCWmAqISFUSCkybk42
b019amZwUU82WCgmajFQPHYpd2VhOWc+Nnc2VEFJCnpxIVdAKnsmUWN9KXlTP2cmdXEkRVg/S2tJ
bSVAWDlYJTRSeC1ec3xlPDJZUDNCTGUlJjdeQXVMKlNufEVnfFVUaAp6dzNeQndlQU8xdG4rOWF8
ZnBzQDghUzNXUzU9ITlodzJuQms2aSR2KyQ5Y3BLMElyeypJb05aTWdhUXdCV3QydXcKenJuVjJp
PEdyYiQ5JWVDZE5pRlJ4S0woPG03XkdmNWhfQzYwUXVra1NwSCgpUnVHfXJ7dCltZ2Jqc3chKGJi
UF5LCno/NTskNld+LV5HWCpBQG5GQFFXT2lNR01+IzJASCVlcXw5cHVYKComdkxteSNWTTxtXmQ1
IzxCRCZhQ08taUQjbAp6cyllbyRqJi0qMU9UU2owNDY2dTtfJDNJeDAhTkY5aUFoY2x6JF5lSTdk
fEtFNFlQMGcoPzRpT1JmTFp1VjFpUFEKeiZ2Q0ZacHF6bERnbChOTSgzZCN4VFpwRDQrPjFRVFp8
aDdaVXtZaWlQJjUwZlp2X0VvI1padD85VChPKEA0dj01Cnpuaj5Lc0wtfiNOKjcyLUBAYjl1ZCUx
QTZALV4kRjk8UDVRSXNkREY9YXx1JjI5NTx6dUhpfkoyO3VycFZHbi14eAp6Mz1CKzhQVWc0V1hi
eDl0PSkwTEdJaShnO2tMUlR7O0V0dnNGbzlLQVREJCpWRU4pdEhyKkJUOGpZO1dlc25tK2MKekZr
aGw9RCloRnhCbE5pJiVaWXMyIzMtRG5VYlE5UVgwJEF9MXByNUNXd3J3bFJqN21BYFF3aEVIKzE7
VSk1RnhtCnEpWEIkX1VQeVcmPjRsYDlnOCFaWkUhTmA2XyZFYj1fR2I5WTJ6PlMoX0FLPXZ7ckUz
ZkdhcjhkCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL21hdGhtbC9vcGVu
dHlwZS9vcGVudHlwZS1zdHJldGNoeS1ob3Jpem9udGFsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2d0ay9tYXRobWwvb3BlbnR5cGUvb3BlbnR5cGUtc3RyZXRjaHktaG9yaXpv
bnRhbC1leHBlY3RlZC50eHQKaW5kZXggNjQ2MDk3Ny4uNTJjMDZlMiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL21hdGhtbC9vcGVudHlwZS9vcGVudHlwZS1zdHJldGNoeS1o
b3Jpem9udGFsLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvbWF0
aG1sL29wZW50eXBlL29wZW50eXBlLXN0cmV0Y2h5LWhvcml6b250YWwtZXhwZWN0ZWQudHh0CkBA
IC00LDM1ICs0LDM1IEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDE1NwogICBSZW5kZXJCbG9j
ayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4MTU3CiAgICAgUmVuZGVyQm9keSB7Qk9EWX0gYXQg
KDgsMTYpIHNpemUgNzg0eDEyNQogICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDApIHNpemUg
Nzg0eDI1Ci0gICAgICAgIFJlbmRlck1hdGhNTE1hdGgge21hdGh9IGF0ICgwLDIpIHNpemUgMTh4
MjMgW3BhZGRpbmc6IDAgMSAwIDFdCi0gICAgICAgICAgUmVuZGVyTWF0aE1MUm93IHttc3R5bGV9
IGF0ICgxLDApIHNpemUgMTZ4MjMKLSAgICAgICAgICAgIFJlbmRlck1hdGhNTFVuZGVyT3ZlciB7
bW92ZXJ9IGF0ICgwLDApIHNpemUgMTZ4MjMKLSAgICAgICAgICAgICAgUmVuZGVyTWF0aE1MT3Bl
cmF0b3Ige21vfSBhdCAoMCwxKSBzaXplIDE2eDIyCisgICAgICAgIFJlbmRlck1hdGhNTE1hdGgg
e21hdGh9IGF0ICgwLDIpIHNpemUgMTB4MjMgW3BhZGRpbmc6IDAgMSAwIDFdCisgICAgICAgICAg
UmVuZGVyTWF0aE1MUm93IHttc3R5bGV9IGF0ICgxLDApIHNpemUgOHgyMworICAgICAgICAgICAg
UmVuZGVyTWF0aE1MVW5kZXJPdmVyIHttb3Zlcn0gYXQgKDAsMCkgc2l6ZSA4eDIzCisgICAgICAg
ICAgICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yIHttb30gYXQgKC01LDEpIHNpemUgMTd4MjIKICAg
ICAgICAgICAgICAgICBSZW5kZXJNYXRoTUxCbG9jayAoYW5vbnltb3VzLCBmbGV4KSBhdCAoMiww
KSBzaXplIDExeDQKICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrIChhbm9ueW1vdXMpIGF0
ICgwLDApIHNpemUgMXg0CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRleHQgYXQgKDAsLTMp
IHNpemUgMXgwCiAgICAgICAgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsLTMpIHdpZHRo
IDE6ICJceHsyMTlDfSIKLSAgICAgICAgICAgICAgUmVuZGVyTWF0aE1MU3BhY2Uge21zcGFjZX0g
YXQgKDQsMCkgc2l6ZSA4eDEKKyAgICAgICAgICAgICAgUmVuZGVyTWF0aE1MU3BhY2Uge21zcGFj
ZX0gYXQgKDAsMCkgc2l6ZSA4eDEKICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDAp
IHNpemUgMHgwCiAgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsNDEpIHNpemUgNzg0eDI1Ci0g
ICAgICAgIFJlbmRlck1hdGhNTE1hdGgge21hdGh9IGF0ICgwLDIpIHNpemUgMjh4MjMgW3BhZGRp
bmc6IDAgMSAwIDFdCi0gICAgICAgICAgUmVuZGVyTWF0aE1MUm93IHttc3R5bGV9IGF0ICgxLDAp
IHNpemUgMjZ4MjMKLSAgICAgICAgICAgIFJlbmRlck1hdGhNTFVuZGVyT3ZlciB7bW92ZXJ9IGF0
ICgwLDApIHNpemUgMjZ4MjMKLSAgICAgICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3Ige21v
fSBhdCAoMCwxKSBzaXplIDI2eDIyCisgICAgICAgIFJlbmRlck1hdGhNTE1hdGgge21hdGh9IGF0
ICgwLDIpIHNpemUgMTd4MjMgW3BhZGRpbmc6IDAgMSAwIDFdCisgICAgICAgICAgUmVuZGVyTWF0
aE1MUm93IHttc3R5bGV9IGF0ICgxLDApIHNpemUgMTV4MjMKKyAgICAgICAgICAgIFJlbmRlck1h
dGhNTFVuZGVyT3ZlciB7bW92ZXJ9IGF0ICgwLDApIHNpemUgMTV4MjMKKyAgICAgICAgICAgICAg
UmVuZGVyTWF0aE1MT3BlcmF0b3Ige21vfSBhdCAoLTYsMSkgc2l6ZSAyN3gyMgogICAgICAgICAg
ICAgICAgIFJlbmRlck1hdGhNTEJsb2NrIChhbm9ueW1vdXMsIGZsZXgpIGF0ICgyLDApIHNpemUg
MjF4NAogICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sgKGFub255bW91cykgYXQgKDAsMCkg
c2l6ZSAxeDQKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGV4dCBhdCAoMCwtMykgc2l6ZSAx
eDAKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwtMykgd2lkdGggMTogIlx4
ezIxOUN9IgotICAgICAgICAgICAgICBSZW5kZXJNYXRoTUxTcGFjZSB7bXNwYWNlfSBhdCAoNSww
KSBzaXplIDE2eDEKKyAgICAgICAgICAgICAgUmVuZGVyTWF0aE1MU3BhY2Uge21zcGFjZX0gYXQg
KDAsMCkgc2l6ZSAxNXgxCiAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXpl
IDB4MAogICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDgyKSBzaXplIDc4NHg0MwotICAgICAg
ICBSZW5kZXJNYXRoTUxNYXRoIHttYXRofSBhdCAoMCwwKSBzaXplIDE1OHg0MyBbcGFkZGluZzog
MCAxIDAgMV0KLSAgICAgICAgICBSZW5kZXJNYXRoTUxSb3cge21zdHlsZX0gYXQgKDEsMCkgc2l6
ZSAxNTZ4NDMKLSAgICAgICAgICAgIFJlbmRlck1hdGhNTFVuZGVyT3ZlciB7bW92ZXJ9IGF0ICgw
LDApIHNpemUgMTU2eDQzCi0gICAgICAgICAgICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yIHttb30g
YXQgKDAsMSkgc2l6ZSAxNTZ4NDIKKyAgICAgICAgUmVuZGVyTWF0aE1MTWF0aCB7bWF0aH0gYXQg
KDAsMCkgc2l6ZSAxNTJ4NDMgW3BhZGRpbmc6IDAgMSAwIDFdCisgICAgICAgICAgUmVuZGVyTWF0
aE1MUm93IHttc3R5bGV9IGF0ICgxLDApIHNpemUgMTUweDQzCisgICAgICAgICAgICBSZW5kZXJN
YXRoTUxVbmRlck92ZXIge21vdmVyfSBhdCAoMCwwKSBzaXplIDE1MHg0MworICAgICAgICAgICAg
ICBSZW5kZXJNYXRoTUxPcGVyYXRvciB7bW99IGF0ICgtMywxKSBzaXplIDE1Nng0MgogICAgICAg
ICAgICAgICAgIFJlbmRlck1hdGhNTEJsb2NrIChhbm9ueW1vdXMsIGZsZXgpIGF0ICgyLDApIHNp
emUgMTUxeDQKICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrIChhbm9ueW1vdXMpIGF0ICgw
LDApIHNpemUgMXg0CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRleHQgYXQgKDAsLTMpIHNp
emUgMXgwCiAgICAgICAgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsLTMpIHdpZHRoIDE6
ICJceHsyMTlDfSIKLSAgICAgICAgICAgICAgUmVuZGVyTWF0aE1MU3BhY2Uge21zcGFjZX0gYXQg
KDIsMCkgc2l6ZSAxNTF4MQorICAgICAgICAgICAgICBSZW5kZXJNYXRoTUxTcGFjZSB7bXNwYWNl
fSBhdCAoMCwwKSBzaXplIDE1MHgxCiAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCww
KSBzaXplIDB4MApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL21hdGhtbC9v
cGVudHlwZS9vcGVudHlwZS1zdHJldGNoeS1ob3Jpem9udGFsLWV4cGVjdGVkLnBuZyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9tYXRobWwvb3BlbnR5cGUvb3BlbnR5cGUtc3RyZXRjaHktaG9y
aXpvbnRhbC1leHBlY3RlZC5wbmcKaW5kZXggYWExZDg1YjkzOGJkOGMwYTU3NjA3NTcwNDdkOTcx
ZjkxYmRiN2E0Yy4uNDJiY2NkMWI4ZGY0MTY1NmYwMzUyMDExY2ExNTFmYjlhY2ZhOTUwYyAxMDA2
NDQKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDExODI1CnpjbWVITlg7X24yN1hGZVQjUldtQTBm
Q2ZNS3lYMTRFSVdqIzVLITRfdENlYVk1PlA4Qml6dHlMaTtoTW01RUsrNgp6RG1xZX13cGF2TzZg
Pj53NTwoVEI3Ujc9Zjhuei0zXzljUHojd1BoUCZvZSh9e2BIeVhgJGNsTWJNODZrSkAyX0UKem9E
Sz17KF9kaD0wRD5VPlA1d1N4QXFhenFBb0xEQlRgK1IjJGd3IV5YSnctQWp6cnFOQ3xkTlAhdmBS
TzghaFVTCnpDfDRxWjs3cDhJdz4hZWcqQF5neDNvWEtKazhATyVCVy10Wjd9XjRDTExKKWJ3Km1V
MCFKLWQ+P0MpJnlTXnFnNQp6SFNrSzFuS1JGRi1zX35RbkRyPikxRTE5aysqYzFUeFA4c2ckaUlN
PHdTJGhib0BnO0VVdWVFJSZVJmxpPk5DRSoKemZxMnZeYklnX1ZyP0ktRUo7c2srOXA2NHxzQz9g
OzhaeXdaV31SVTR2YzJjLTJqY1d4ZnYhTiQ1S21AN0Q2fGd2CnpLc1k4O1EwTkErPih2OGJoVjZ5
SSlWUUdrVEpWMTVqcnBlZDg9dDBGejJFWkotYklFVDgwNyh+bGVqQ1dFR31ncgp6MTBGRlhrVyZw
Yl5GWSFpN1J1ND1DenNgXzliaWZiNFNUYGdTaSpnMS1NVzNod1Z6Vnlya3VqbU9sb35ZfEQ2PiUK
ejY2T34tSXIhPkBtJUxhTWJsSF95SW9ZMH5OTiZAJWt8Rih5UTFhLVBAWF9GYTcxYDZBRnhtOXI7
OSVUe01FcnUoCnp2dEctJWRYRT1RRWgjIz5CO1F6VlVxayREWEF+eSN6PmlAVVZTQktUZn15YVE5
eFhvPDFxensxXklJaz5WN3BTbwp6Z2I/M2sqaUZseShaJlN3YjR2ZS1gTEtVM25oP217ek50WlE5
MC01Y1MoTm90UX1TKnQjayVKJCVLRT1qaWBzTHoKenhVIS1gY0F1amRaI2l2akoyIXN1MUZhYXct
fWF9RHl5K19UNE5rcmMrWn4xZXt6SXdOal8tZFBgJT1zRlluQnFvCno3ZT9zaztDMVk2M3J6OUlE
aURoUSolQj4kPUVVSHVpY3RleEA5MHwqJnA/IWteSnQ4b2RaSzAyTTdAQnBPMVlESAp6bHEzSCFC
bCRIP0Znd3hPKjxVT21OJkQkcTBqKURLUHAtRn0hNytqWmBxVUJ2SXBWdG5KSXlMfkRoZ3ZRKmY8
fHsKelo7aFRRcDE5MnxOOD5TYTYkXkUpPEdLIzRLbUA/UiNxVFVPWWhaeTc3ZWVCcDVIdCk1QjNq
byFWQjJDRjRkU3ZLCnpzNFBqNjlTVzlnM00zYjw7dXZZclRuRXJMOypwfntsfHw7VlApNDdmLXZ9
ZDh2ZHxQaWpvWWpfbTVpcWRxMGBeaQp6VXgkPyYwY2V5anckWXI1SD8qUiVZQ2k3QGZ0OHlFJUto
KFZkR3xRe2Vub3xjcUxFR1ZYMl9ANTNfKFlMbWFlP18Kek56NXpXYGVSci1ZQnVufF5BJmdCST5X
LUZmYmhga1ooeUlhTTFxOHMtNVBIV281bTReREpUa3dobio1ciUwaVdqCnoya3ZGU1VnNUopVGV0
dHE2fjRIMHMxU043SW5xWWFEME1BQjIoNFdHeGRramRady18ZGxpK2RDTn4yPjQ7SGFGWAp6c317
cTsxRjswTWIyO3dyNXsoSiVLeFY5OHUjfT9fRT9mY3Bra14qazNUdjFIKmY4cUVuVDtDWjtPLU1u
PGIkdjcKekpJU1llXjdBZyEtWDJWdWxUUztaMSQqbXZGY3FgWCk+eSVUd3pORVlXNDNNWiQkYU1B
UVJDbzQjJWVXJFhMUGBCCnpsMHJWKGRFOV94U35jfTF5Xn58ZkFXKlFjMSFsUEx3RElQK2NQJUJJ
NV47OFFaYUJqJmIqaHQ3LVNfTSFYUSljbgp6VjlHRGMlZ2xfZW4lKi10Xl9JdXNrIUpReTRUfiYk
c3ZoM2RTU3R7blpRe1Yze288TjlhKWpzTG1MUkUlOCpENEAKemUwWEFFaWVoKEtae3V+UXJ5d3Z0
eil2KFFvODxKckNebTQzWk1WMmVPMXVCYlR0aD1jKyNrUHY+czJ3QF5WR25QCnpfdDk0fjt+QnZ1
aE1mTDFkakdgaDJnakt7bUM1Nk8jQzZyNVhMQCFVdDhMSHpoPCg9I1VwOU88bz9GQDFkdld+SQp6
RUlxSGJ1QyQzNTlsPzZNZUBhYllqa2E7R1FJMT1GXmB6fGE2Sj9tWW9aUzJMPkp5NSRSRnB4QjZ4
XlU7cEY7ZCoKekROJHZtWXIpaVNGcChFLT8mZW1TO2E+ZGtSalh8SHlLVEo4KEJoWjhZKkYzIU8r
PUBaRFFSYStRQ2VDST5zYDlvCnpNRDVYdGRDIzU2ZHdkSU5sNk5vNXN2bzdCeFhjWjRFNVo3SEN0
M1ZNUUA3c1VpJSs4ZVRgTkw4I0Updk5BdilyNAp6ZlgtenloallBZlRVXjslKiklPTd3a3xPLUsj
QGI2RiVmcmsyZkpndG9YQSkpVH09Jio5fXtONFVYUm8lWEB9eXsKemJOOyUkQ3k1SERUUkhFZzRP
Zl8yXl8kXyEkYEBzWT5SWU9iZU1ZQ2Y1OGApTyg2fE1FLURhPC1aY09vVldLSzVwCnpsJDNValhY
JXdaSHRFZjtzUTIjTWsoaCVqXns7KWFheDhsPko3WEVYP0Q4e1dmXjFeb0MxP0F7QEhibT54NmMp
Uwp6YVo3VDBYO29iIXgyXm9wVVlsYjJeaG5xRkllSWZBKH4mJUpMbFVpeTw4cmh8OShgcz1wZGg4
cl54ZSMofDZiY00Kel85QzJGKG1IaikhZTE1SUVuI2ZNZiFJVmJvUnRoc2NNNzNwSktKUHgxTTM7
S0w7ejV5fDYrMGwjIUwkKzxYWWFlCnpeV1lJSUsrKD0hUmxTPDEpVHNzN3RIbistO0VfOCEwSUpg
Tl99WGReT1NsN1MjeWpeV1ZHUTRYMWRoaCRJPUhMUgp6MUY9ZyQ3QSQlNnZuNCFZNTAxV2JGU1E5
KW5gO2xzUX5TWUxfMnFUK1ZvRUBvZEROOC03ZCtHJGFGM1l5QXdMK2AKej5FTE1sd2MmfkMkVlE9
UTsyeU59Nm1OS0JyIXZwUFB5Yld4UU45MXhMPkBGakMhPjh4K0Y0eWEoMFhAcl5xYmYqCnpyYCl3
KW5PKmZ0blY8LTQyaHgqezk2OU5jRyp+MmdfZS12V2ZxXkF5bXBKPDk1P0p6USReZHhRNnQ2O2F3
S0NvfAp6YXUobUp5ZEtWK0okeEB8czZCM1dYMXVmZU51Q29lKCVuN2lpdStHe2xSI2VUPn18VFN4
K0YjVmBoZ1VEQCskdDgKelBiQFhzP3l5MWFeITtxKko3STFNKXNaaU1rejNoMz5YJko7dGxfRngj
cSp8Oy1yR0ctXlpqXmQ0YCpjaGhDTEhtCnpkTlZ3Q1JVQTFHbl5oRmUtU3U8dztkPT5QXmArfVBI
OHdPezEwWnFLJCRmMkRyUiF4PFRDelIhKld0cG4wYEEhKQp6cUJ9TTsybjJodVp7aExDXlJ5WiQp
T3MqcGJ2WkllWG9tcVJodDFOUDMlUXhUPEFJXyZrZXcjeXMqe1p3MG55bk0Keihla293bk0qS3tY
Rz13REMqI28zPUotdUZYckc9UitSd0VIb0F3bWZnNDZ2OW5IKShWYX5WRSVSZD5JN1o3NnkqCno0
ekNaXnJZWUJXN3NhO1NEO1dfOHVYPyY7YDlEN35DNmNqVVl3RXFtazNwTEg3MGhoJl5xPkBhN21r
bmhKQFhCfQp6S1E+KDNSQU1KKGgpd31lSGZuKHFxYHA+SGNXbT0pQXVUZGJzYzRrKVpVeDwxY2RQ
b35STVQrQjI/c01QaVlUSk8Kekh1JFExSGRxIzxYYUdtRylVUStIVGJHQHRwU0FQdUxIKyEraUkp
XzRjS09PKXBzajtJVU9LNjg0e2NVaDVOczUhCnpaRWlSI3JoSGY9NzJEPWxLOGMtNyhMXnt9JHR2
Z3MqUnZXQkxUcmV3bkFnX3AxQlp+I1d9UVZAPWF4VXhARTwtNAp6UGkweUVENTFiPll8eSY/bzZi
aFNFYmI0VWMxQismU2l5aVowd2lBR1B0P2ZQdmomeWJlRVZgKEh1KkgqQFR+PT0KekZ4cmlQPGJQ
YWZRPlBqe2BJLS0pQFJlSF4hSUl8IyRzNHZEd0FTUTxrbVoyRUtVfUVgT1YmWVF0Z3FYK3o/R0Y5
CnpERWxeX2BTN15yKjVxVExyZldRQnVKKmwtVUpnKnMjYGdeVDxpKVFTTFl3eDlHaHBRcXZqQkde
Vz5MbCY1LWxKKAp6QVJ0bV5CX3l8aU93Mn03RjVvJFlpSW1rTUxlUExGay05fSRZYSEqRmt8dlFW
N3d7eGZ7M35lXmNAdSQoMzMpMGkKelglY3hzZ05nfWhFR1RJYlgpR1goMXl3cj5YKUdYKDF5IyEo
WClHWCgxdG1LbWpSbj1PM2BrPUVYKUxJSWxSX0VgCnROTWtgJkYoSGl3cV9Mbz9uRXFDYzEtMWYl
ezxfN2tpUismVnsrJTF6PFF3R2shdl5aSEtMUGFiSC1gV0sKCmxpdGVyYWwgMTE3ODEKemNtZUhO
Y1R8JkU3WEswPTJCWm5QTD1uaHtmWHZYTUIyXk89MFVOZlZTcylUYiZyK3BJTz0xQlEyJXh4RGpC
WEd8CnpLQGVPPVAkNitCMn1LYmREU3tOR0RNZGpEV0MmcWlsemJtXiZZclZwfEokP1lgenlTY2Bg
KyNNY2kjPFhifiFzTAp6RD10LXBBVl8oT2xsPmtEa3xSUDgpKlVZb2NDSkw2Mm5IV1VWVm04PFho
I3B6ezZmUDZBa3UxWUFKUVFiXyNwWU4Kel4weE4lUysmflIhZ3tTMCQhaGZ+T1lsZVhwN3Y+UTJv
dCk7YVUrIWZWJWJMc0dDOH0mZSM2aGxGKz1halheWkZTCnomZyg0a1U3KG54VjZib1pPT0c+Ylhv
MkRuT25YS0FuYlckQTNaNENXOWx1cWJCY0VBUmFUYV4zOWpBVnlpMWdDcQp6XjNnK2BKJVFNZ3Zn
KkBNPyQ+MzdfVEpvZ0YrLUhxPWlqQlUhMU93SWt+RiEyMGIjSD55YyZfaGZTM3okPmpfPWoKem9g
MmFwaD5AJCUjS0pUZkVKdU1yPG1gQEZJQT0+ZnNiSjB1PWImTHVhb2BBLSVrQmw9RFhEcU0mMm9g
YXJXakJlCnpER28hTT1XRyMoVyVBI31fO3dYeDJNPTEzYFpqc2FtTl9MPmBKMF5JZDZ7MmZVeyk9
Q3NKVCFvYHU4bT1WeyQzNwp6cUVPZGg8YjJsci1FMjhiSztjMG43UlpYaEpCcFBUOVIxelhVVW1i
OCFOOSF0THNrJjgwakhHU0BKbmVEVmtUZ2EKenJhN3lCWEFzK35ZSGNOPE42enlUWG5kQmtadjE0
SUx3KXB8RTBgaCRWX15Qfm9hV0BwX2RDKUNDRX1zaE1+TlQhCnpYK2RMb2lFfnVHI0FYQ055Vy1X
U3RedXBuNEFkXk5oJkQ1VClpNVVtSFJIM2taSEw5Q2BUP35YYCU1cHVWKURkNQp6NE48ciQ+QVJ1
OFM+YD85JE5paU1aXlRQcWYhfShZTi03WXF7MGpXIXBXMj9SME5jSDhDbDkqKGU8Nl9WKXUkcmkK
elEwckJAd2FhV0h7NWdHZ2JBb19wSH03eHRVZ0FxZiF0Tmxkc31jNnw5I0s8R2hUeytlYDVJRmhi
O1lwXzJ2diMrCnoyeUsqUkhlUCo9Pz8yY2d3MmQ3MEE4b0Z4VSQhbmYlcXBaP1Aqb3EzNHU+WWhS
QUUrcilnLXFzSSRZQGZea2NAbAp6WHxYQzxZI3V4REU7OG5pTklOOHw4SSZAUjRLPCY0VlVkc31W
ZGI1K3lRdHtIJCZoWUZXcHFjYiMyfDRfentzdTAKemA3dSEpJkxEeE5JYzN4fjZWNFV9QzUzQGUt
K04mYjs+N0wrMWZvY0xEfHs9Mz0paS17K15NO1ZjeiQlQVFvMn0wCnpBSEoyU3JibEh8e01AcSg1
bCNlemklKFJDYjRNKntwKmg5LVpwY2JSeEw2PEBjYXM4PUApZFhqaz5wflgzN1pFZgp6alhCcUc2
TmhtMiN3biM9eTFRJkV0Tl91QTJVWSpxVz9eUlNGZkVPbjUqbmxoaTBjfFNqK1hJX0NsTXoyRn0k
PXcKekhFMX1oQk1SWWlqNjMoPSZ1TD98QV84WkVHSUlGeiotZnhDKUVaRUhHRnkqbkF6SDQmJFl0
bTRJKSl0RD9nNlN1CnpoOzUpQVl+ZnY/KHF1MEZRM1d8PDFibmJKa1JPMV5SMDkrKitGMURtZTh+
SlRzQytkOyNpQHczRTtCSERUenwxYgp6NCZ7SWgtQ207bzIhVi19cHY9YE1FPjQ2R0BpS3VnalVJ
aGlpKWVabnhYJEN8ZCZHNUBpZz8lTzNzU1cjNlgrN3IKemsoJGN9ayp5RG8pRipoK3JeNj5kLWV4
Q3xYVCtmKTZGV3czQFk4ZnZ4em9iZE1MUjxeV1hrWXRAcTx4fSp6cUBSCno8JFBWYlVGYElEUStZ
amsjeT0oUjhRdDJaM3taQ29HVzV6dktKWEtSJTAjfUMtUkV+RW9IeUw1TFk3USZOVGMrSwp6K0o9
JG9pNElrRW9VcjghVjVZKHFrSmlxdD4oWWUtX1NMcz8peDBnSyh0Q3U+U0prI3piSW0lYCpENytq
Wko2JF4KellaY3J7Q1g7V3wtQzMtZGlENn44MCNFSUhGWWJEfnNMfTMrQmFzbWkyXnhtWmdLeDll
I1k5LWVQSlohWTJaXmc0Cnooe3pUU09gWj5UYUEoKl83dE9xTU9iPFJEVzdtdTMlU149ZFhHWkR9
YjRVOEQ5RTNKRHVCRVF6PiNxcT5AQX07Pgp6TkVCQyNTWHRLZ3QySC1haW5oTThiOHZPIUtsRSEj
eFZAOHw/P0NUTSk4WSRxSUpDdn1rakktWkdFbG0pc2sybCQKei1Re2AkWCo0QTRLdU81cWlQbF9V
T2p1c0B6NCZXKDR4VEw1dChLR1hSYjZRVFZ9K1FhaDM4P1ErPlBaWnJNcVBHCno1VWtfPTd6PnQm
TWIkSHhHWGhkc0UoTEdXR156d29TZ2JjczxwcDtXKHEjNzEjJlQ1Q1U0QXVVVyVUcUgxQyEqRQp6
b3peI2c0JEZKJktSU3xHQj90KktyZUNDcT0ydigwTSVweT9TV3BfUEMrJWleTnB6IzslSzJPdj5V
PyZ4SyhoQVUKei1yTFR+RyljZmRCTSRBMi19cn1zbCNCQHI4YHNiISNONElwV2U2UkgtfG94RTN0
XkVRVU9EcGJIaHRwZih0SmNTCnp7LVM8UG5rKVR9dG84QWVVJUdPK3QwS3d0K3E4R1A8cG5sTipv
THpxLW1TUGoxUk9ReDMhWSFLYlIkMUIpQWNHMgp6S0daUUl5Yz1panVTKjlpbXhLPkFtV2pgNW50
OFQwMXJAeVFVTWM2SnA8Z2VIK2FnPjxQVyYoa1FqNkc7TzNsNkcKeiZ+cD5oUT1ocW0xfSFOWlN2
RyFNSlZgQlUoM2kwVU4yJmZHdF5BTERNelloSzI2bjE/bEFWeihNYGB8cGVWQUU9CnpVZDJybCtJ
R2ktaT0pMndkZEB0d1R1PC0lP1IzfTIqU0NYV08tMFBDdGdOb2FkOzYhPHlXVXFPbXhJVV9fQjQk
cQp6JVVwLUFiRUJTPF5SYyNoYW17LTVIUVVIUXRNRV8xMlkyJEFhWTZsUVdDPnhvejB+JFZYPkBw
VHtCLW5sZihNS0IKem1uMUgwZSNmUUxrQXVqe1orY1puWHdoYCM7JTZoNjhpN3NqR205VjhBTk1Z
N3VLbDF6al9INFN2dW9fKj4oQWp+CnpkQTdZUjR+e2dAeTVtdz07aHdlaTxtaj1aI1VWWDQhXjl7
clRLOHlBWlRZUWo3ZDt+cipsPWp6SEpVI2BROXcjSQp6blMyZFlsdjElWC0qZGBvaUMheH5kJSpa
MmkxYTdSWWN+fEpYJSYhJTtxY2VseTM5UGxZP3UlNz81UzlJX2Y4NWMKemVCNlhERDI8dGptP0A3
fD84dmRXKWxtNHRwVWg5ZjZnanVfJCYkODJuJnNJSWg1MG9Cc1RycEwjYjZKP0xvekhGCnp0eHEy
dVBzOXx0az9MaCNhKm8tVGM2cTFyZXN7TnlUMmhmJWItPUdGZWByZFZ4PkhBY3BzdzlGZytMcnc2
TCk+Swp6ey1eKFJ6ZCRaS0RsOU1lY3pCOTJjZ0h+V2RCWHZueFM+OFJOQigycFJufGZ8cFI2MTMp
Z2tsUnFab0NeMENofE8KeiZCdktUJVc0XkBrXyE1S2otV3ZubG9YYndXPzVoZ0Z2NUB5SWJRcyFL
ekxBYzhDK0YqZmkxKFlZKClTSFpOPGxFCnpsY1RqfWg5aHBoSVhBZT1edGR5VXNvfExjQUZpYTJW
ST1ENGViR1lAZnN7PUljcChtdWd3TWJUJCtNcCl3NCllWQp6RGZkOVk0dilqZnNzKGQyV0h0bGV0
T1B5QiowWU9GIWV+YzEwVUM7ej1kPSktT3dlPWFaJDY3V2AtbUhPKDNZZHMKenNtUjQhYVoyZ3Vt
UkJPKFBDQWp3U247b0oyTkBuPHU9KVRwd2A2JDNAdkcqZlc9Pkp4N29zT2FMNVFnaWBoYVhGCnps
QzFMSkBHQWdrMShUOHRNN1QybXp4UU1sNVlGbT1eUW5LZElsLTBaaENMNTVHVE5ocmE4Pn1FSCpP
MUQwcnYmRgp6bVY7KHVrJiEmWThIYlR1YVp9JENYIyFFUjBCYlEodncmRGNxZVlycVhjQj9TaDFN
Mm5CfVBqd3omUSR2TDt6dD8KemZSQDR9K1A4cHkzfmxHNkZvfH0jcGtxUnRlPEA2Jlp6OWshcC0p
QldCTktmPU9GSmZYdW1FNVo5VzA9TzF0fmg5CnpnTjR+aUFVYXE7Mk1lPXZWfDF7OTRpO3ZJXnlw
diM5VzJjTHE9T0M/KDgwb04kQWtfUig4MHBALXVadVF1cHBXTApabFNjRSg2SGZuUmZgOEc1d3Jx
QmAmKS1OckBoNCFrRyRIXjEKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
bWF0aG1sL29wZW50eXBlL29wZW50eXBlLXN0cmV0Y2h5LWhvcml6b250YWwtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL21hdGhtbC9vcGVudHlwZS9vcGVudHlwZS1zdHJl
dGNoeS1ob3Jpem9udGFsLWV4cGVjdGVkLnR4dAppbmRleCA5Mzg2MDgyLi5hZDM3MTY5IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvbWF0aG1sL29wZW50eXBlL29wZW50eXBl
LXN0cmV0Y2h5LWhvcml6b250YWwtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9tYXRobWwvb3BlbnR5cGUvb3BlbnR5cGUtc3RyZXRjaHktaG9yaXpvbnRhbC1leHBl
Y3RlZC50eHQKQEAgLTQsMzUgKzQsMzUgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4MTUzCiAg
IFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgwMHgxNTMKICAgICBSZW5kZXJCb2R5
IHtCT0RZfSBhdCAoOCwxNikgc2l6ZSA3ODR4MTIxCiAgICAgICBSZW5kZXJCbG9jayB7UH0gYXQg
KDAsMCkgc2l6ZSA3ODR4MjQKLSAgICAgICAgUmVuZGVyTWF0aE1MTWF0aCB7bWF0aH0gYXQgKDAs
Mykgc2l6ZSAxOHgyMiBbcGFkZGluZzogMCAxIDAgMV0KLSAgICAgICAgICBSZW5kZXJNYXRoTUxS
b3cge21zdHlsZX0gYXQgKDEsMCkgc2l6ZSAxNngyMgotICAgICAgICAgICAgUmVuZGVyTWF0aE1M
VW5kZXJPdmVyIHttb3Zlcn0gYXQgKDAsMCkgc2l6ZSAxNngyMgotICAgICAgICAgICAgICBSZW5k
ZXJNYXRoTUxPcGVyYXRvciB7bW99IGF0ICgwLDEpIHNpemUgMTZ4MjEKKyAgICAgICAgUmVuZGVy
TWF0aE1MTWF0aCB7bWF0aH0gYXQgKDAsMykgc2l6ZSAxMHgyMiBbcGFkZGluZzogMCAxIDAgMV0K
KyAgICAgICAgICBSZW5kZXJNYXRoTUxSb3cge21zdHlsZX0gYXQgKDEsMCkgc2l6ZSA4eDIyCisg
ICAgICAgICAgICBSZW5kZXJNYXRoTUxVbmRlck92ZXIge21vdmVyfSBhdCAoMCwwKSBzaXplIDh4
MjIKKyAgICAgICAgICAgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3Ige21vfSBhdCAoLTUsMSkgc2l6
ZSAxN3gyMQogICAgICAgICAgICAgICAgIFJlbmRlck1hdGhNTEJsb2NrIChhbm9ueW1vdXMsIGZs
ZXgpIGF0ICgyLDApIHNpemUgMTF4NAogICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sgKGFu
b255bW91cykgYXQgKDAsMCkgc2l6ZSAyeDQKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGV4
dCBhdCAoMCwtMykgc2l6ZSAyeDAKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAo
MCwtMykgd2lkdGggMjogIlx4ezIxOUN9IgotICAgICAgICAgICAgICBSZW5kZXJNYXRoTUxTcGFj
ZSB7bXNwYWNlfSBhdCAoNCwwKSBzaXplIDh4MQorICAgICAgICAgICAgICBSZW5kZXJNYXRoTUxT
cGFjZSB7bXNwYWNlfSBhdCAoMCwwKSBzaXplIDh4MQogICAgICAgICBSZW5kZXJUZXh0IHsjdGV4
dH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoMCw0MCkgc2l6
ZSA3ODR4MjQKLSAgICAgICAgUmVuZGVyTWF0aE1MTWF0aCB7bWF0aH0gYXQgKDAsMykgc2l6ZSAy
OHgyMiBbcGFkZGluZzogMCAxIDAgMV0KLSAgICAgICAgICBSZW5kZXJNYXRoTUxSb3cge21zdHls
ZX0gYXQgKDEsMCkgc2l6ZSAyNngyMgotICAgICAgICAgICAgUmVuZGVyTWF0aE1MVW5kZXJPdmVy
IHttb3Zlcn0gYXQgKDAsMCkgc2l6ZSAyNngyMgotICAgICAgICAgICAgICBSZW5kZXJNYXRoTUxP
cGVyYXRvciB7bW99IGF0ICgwLDEpIHNpemUgMjZ4MjEKKyAgICAgICAgUmVuZGVyTWF0aE1MTWF0
aCB7bWF0aH0gYXQgKDAsMykgc2l6ZSAxN3gyMiBbcGFkZGluZzogMCAxIDAgMV0KKyAgICAgICAg
ICBSZW5kZXJNYXRoTUxSb3cge21zdHlsZX0gYXQgKDEsMCkgc2l6ZSAxNXgyMgorICAgICAgICAg
ICAgUmVuZGVyTWF0aE1MVW5kZXJPdmVyIHttb3Zlcn0gYXQgKDAsMCkgc2l6ZSAxNXgyMgorICAg
ICAgICAgICAgICBSZW5kZXJNYXRoTUxPcGVyYXRvciB7bW99IGF0ICgtNiwxKSBzaXplIDI3eDIx
CiAgICAgICAgICAgICAgICAgUmVuZGVyTWF0aE1MQmxvY2sgKGFub255bW91cywgZmxleCkgYXQg
KDIsMCkgc2l6ZSAyMng0CiAgICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayAoYW5vbnltb3Vz
KSBhdCAoMCwwKSBzaXplIDJ4NAogICAgICAgICAgICAgICAgICAgICBSZW5kZXJUZXh0IGF0ICgw
LC0zKSBzaXplIDJ4MAogICAgICAgICAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLC0zKSB3
aWR0aCAyOiAiXHh7MjE5Q30iCi0gICAgICAgICAgICAgIFJlbmRlck1hdGhNTFNwYWNlIHttc3Bh
Y2V9IGF0ICg1LDApIHNpemUgMTZ4MQorICAgICAgICAgICAgICBSZW5kZXJNYXRoTUxTcGFjZSB7
bXNwYWNlfSBhdCAoMCwwKSBzaXplIDE1eDEKICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0
ICgwLDApIHNpemUgMHgwCiAgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsODApIHNpemUgNzg0
eDQxCi0gICAgICAgIFJlbmRlck1hdGhNTE1hdGgge21hdGh9IGF0ICgwLDApIHNpemUgMTU4eDQy
IFtwYWRkaW5nOiAwIDEgMCAxXQotICAgICAgICAgIFJlbmRlck1hdGhNTFJvdyB7bXN0eWxlfSBh
dCAoMSwwKSBzaXplIDE1Nng0MgotICAgICAgICAgICAgUmVuZGVyTWF0aE1MVW5kZXJPdmVyIHtt
b3Zlcn0gYXQgKDAsMCkgc2l6ZSAxNTZ4NDIKLSAgICAgICAgICAgICAgUmVuZGVyTWF0aE1MT3Bl
cmF0b3Ige21vfSBhdCAoMCwxKSBzaXplIDE1Nng0MQorICAgICAgICBSZW5kZXJNYXRoTUxNYXRo
IHttYXRofSBhdCAoMCwwKSBzaXplIDE1Mng0MiBbcGFkZGluZzogMCAxIDAgMV0KKyAgICAgICAg
ICBSZW5kZXJNYXRoTUxSb3cge21zdHlsZX0gYXQgKDEsMCkgc2l6ZSAxNTB4NDIKKyAgICAgICAg
ICAgIFJlbmRlck1hdGhNTFVuZGVyT3ZlciB7bW92ZXJ9IGF0ICgwLDApIHNpemUgMTUweDQyCisg
ICAgICAgICAgICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yIHttb30gYXQgKC0zLDEpIHNpemUgMTU2
eDQxCiAgICAgICAgICAgICAgICAgUmVuZGVyTWF0aE1MQmxvY2sgKGFub255bW91cywgZmxleCkg
YXQgKDIsMCkgc2l6ZSAxNTF4NAogICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sgKGFub255
bW91cykgYXQgKDAsMCkgc2l6ZSAyeDQKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGV4dCBh
dCAoMCwtMykgc2l6ZSAyeDAKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwt
Mykgd2lkdGggMjogIlx4ezIxOUN9IgotICAgICAgICAgICAgICBSZW5kZXJNYXRoTUxTcGFjZSB7
bXNwYWNlfSBhdCAoMiwwKSBzaXplIDE1MXgxCisgICAgICAgICAgICAgIFJlbmRlck1hdGhNTFNw
YWNlIHttc3BhY2V9IGF0ICgwLDApIHNpemUgMTUweDEKICAgICAgICAgUmVuZGVyVGV4dCB7I3Rl
eHR9IGF0ICgwLDApIHNpemUgMHgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjk5NWI0OS4uNDE0OWQxMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE2LTAzLTAzICBGcmVkZXJpYyBXYW5nICA8Zndh
bmdAaWdhbGlhLmNvbT4KKworICAgICAgICBSZWZhY3RvciBSZW5kZXJNYXRoTUxSb3cgbGF5b3V0
IGZ1bmN0aW9ucyB0byBhdm9pZCB1c2luZyBmbGV4Ym94CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTMyMDgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBwYXRjaCBpbiB0aGUg
c2V0IHRvIHJlbW92ZSB0aGUgZmxleGJveAorICAgICAgICBkZXBlbmRlbmN5IG9mIHRoZSBNYXRo
TUwgbGF5b3V0IHdpdGhvdXQgY2hhbmdpbmcgdGhlIHJlbmRlciB0cmVlCisgICAgICAgIHN0cnVj
dHVyZS4gV2UgaGF2ZSBkb25lIHNvbWUgdGVtcG9yYXJ5IGNoYW5nZXMgdG8gYWxsb3cgb3ZlcnJp
ZGluZyBvZgorICAgICAgICBsYXlvdXRCbG9jayBhbmQgdG8gaW1wbGVtZW50IHBhaW50Q2hpbGRy
ZW4sIGJ1dCB0aGlzIHdpbGwgYmUgcmVtb3ZlIGluIGEKKyAgICAgICAgZm9sbG93LXVwIHBhdGNo
LiBXZSBhbHNvIGltcGxlbWVudCBmaXJzdExpbmVCYXNlbGluZSwKKyAgICAgICAgY29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMgYW5kIGxheW91dEJsb2NrIG9mIFJlbmRlck1hdGhNTFJvdyB3
aXRob3V0CisgICAgICAgIHVzaW5nIGFueSBmbGV4Ym94IGZ1bmN0aW9ucy4gV2UgYWRqdXN0IGEg
Yml0IHRoZSBNYXRoTUwgQ1NTIHRvIHRha2UgaW50bworICAgICAgICBhY2NvdW50IHRoZXNlIGNo
YW5nZXMuIEZpbmFsbHksIHdlIGRlbGV0ZSB0aGUgdW51c2VkIGhlbHBlciBmdW5jdGlvbiB0bwor
ICAgICAgICBjcmVhdGUgYW5vbnltb3VzIFJlbmRlck1hdGhNTFJvdy4KKworICAgICAgICAqIGNz
cy9tYXRobWwuY3NzOgorICAgICAgICAobXMsIG10ZXh0LCBtaSwgbW4sIG1vLCBhbm5vdGF0aW9u
LCBtdGQpOiBQcmV2ZW50IGxpbmVicmVha2luZyBpbnNpZGUgdG9rZW4gZWxlbWVudHMgYW5kIHRh
YmxlIGNlbGxzLCBvdGhlcndpc2UgdGhpcyBjYXVzZSB0ZXN0IGZhaWx1cmVzIHdpdGggdGhlIG5l
dyBpbXBsZW1lbnRhdGlvbiBvZiBSZW5kZXJNYXRoTUxSb3cuCisgICAgICAgIChtYXRoLCBtcm93
LCBtZmVuY2VkLCBtZXJyb3IsIG1waGFudG9tLCBtc3R5bGUsIG1lbmNsb3NlKTogRGVsZXRlZC4g
V2Ugbm8gbG9uZ2VyIHJlbHkgb24gZmxleGJveCBmb3IgYmFzZWxpbmUgYWxpZ25tZW50IG9mIFJl
bmRlck1hdGhNTFJvdy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaDog
QWxsb3cgb3ZlcnJpZGVyIG9mIHRoZSBMYXlvdXRCbG9jayBmb3IgdGhlIG1vbWVudC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJP
YmplY3Q6OmlzUmVuZGVyTWF0aE1MTWVuY2xvc2UpOiBBZGQgaGVscGVyIGZ1bmN0aW9uLgorICAg
ICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MTWVuY2xvc2UuaDogZGl0dG8uCisg
ICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oOgorICAgICAgICAo
V2ViQ29yZTo6YXNjZW50Rm9yQ2hpbGQpOiBBZGQgaGVscGVyIGZ1bmN0aW9uIHRvIGVhc2lseSBj
b21wdXRlIHRoZSBhc2NlbnQgb2YgYSBjaGlsZC4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFJvdy5jcHA6IFJlaW1wbGVtZW50IHRoZSBjbGFzcyB3aXRob3V0IHVzaW5n
IHRoZSBmbGV4Ym94IGxheW91dC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvdzo6
Zmlyc3RMaW5lQmFzZWxpbmUpOiBJbXBsZW1lbnQgdGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSB0
aGUgYmFzZWxpbmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb3c6OmNvbXB1dGVM
aW5lVmVydGljYWxTdHJldGNoKTogQWRkIGEgZnVuY3Rpb24gdGhhdCBicm93c2VzIG5vbi1zdHJl
dGNoeSBjaGlsZHJlbiB0byBkZXRlcm1pbmUgdGhlIGRlc2lyZWQgdmVydGljYWwgc3RyZXRjaCBt
ZXRyaWNzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MUm93Ojpjb21wdXRlUHJlZmVy
cmVkTG9naWNhbFdpZHRocyk6IEltcGxlbWVudCB0aGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHRo
ZSBwcmVmZXJyZWQgd2lkdGhzIG9mIHRoZSBSZW5kZXJNYXRoTUxSb3cuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNYXRoTUxSb3c6OmxheW91dFJvd0l0ZW1zKTogSGVscGVyIGZ1bmN0aW9uIHRo
YXQgbGF5b3V0cyBjaGlsZHJlbiAoc3RyZXRjaGluZyB2ZXJ0aWNhbCBvcGVyYXRvcnMgaWYgbmVl
ZGVkKSwgY2FsY3VsYXRlIHRoZSBleGFjdCBsb2dpY2FsIHdpZHRoIGFuZCBwb3NpdGlvbiBjaGls
ZHJlbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvdzo6bGF5b3V0QmxvY2spOiBJ
bXBsZW1lbnQgdGhlIGZ1bmN0aW9uIHRvIGRvIHRoZSBhY3R1YWwgbGF5b3V0LCB3aGljaCBlc3Nl
bnRpYWxseSBjYWxscyBsYXlvdXRSb3dJdGVtcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
dGhNTFJvdzo6cGFpbnRDaGlsZHJlbik6IFRlbXBvcmFyaWx5IGltcGxlbWVudCB0aGlzIGZ1bmN0
aW9uLCB3aGljaCBqdXN0IGNhbGxzIHBhaW50Q2hpbGQgb24gZWFjaCBjaGlsZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvdzo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRl
cmVyKTogRGVsZXRlZC4gV2UgYWN0dWFsbHkgZG9uJ3QgY3JlYXRlIGFub255bW91cyBSZW5kZXJN
YXRoTUxSb3cgYXQgdGhlIG1vbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJv
dzo6bGF5b3V0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTFJvdy5oOiBVcGRhdGUgZGVjbGFyYXRpb25zIG9mIGZ1bmN0aW9ucy4KKwogMjAxNi0wMy0z
MCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgogCiAgICAgICAg
IEJpbmRpbmcgZ2VuZXJhdG9yIHNob3VsZCBhbGxvdyBwYXNzaW5nIERPTSBvYmplY3RzIHBhcmFt
ZXRlcnMgYXMgcmVmZXJlbmNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL21hdGht
bC5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvbWF0aG1sLmNzcwppbmRleCAxODY4ODFjLi41NTJi
YzUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvbWF0aG1sLmNzcworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvbWF0aG1sLmNzcwpAQCAtMzcsOCArMzcsOCBAQCBtcywgbWksIG1vLCBt
cm93LCBtZmVuY2VkLCBtZnJhYywgbXN1YiwgbXN1cCwgbXN1YnN1cCwgbW11bHRpc2NyaXB0cywg
bXByZXNjcmlwdAogICAgIGRpc3BsYXk6IC13ZWJraXQtaW5saW5lLWZsZXggIWltcG9ydGFudDsK
IH0KIAotbWF0aCwgbXJvdywgbWZlbmNlZCwgbWVycm9yLCBtcGhhbnRvbSwgbXN0eWxlLCBtZW5j
bG9zZSB7Ci0gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOworbXMsIG10ZXh0LCBtaSwgbW4sIG1v
LCBhbm5vdGF0aW9uLCBtdGQgeworICAgIHdoaXRlLXNwYWNlOiBub3dyYXAgIWltcG9ydGFudDsK
IH0KIAogbW8sIG1mcmFjLCBtdW5kZXIsIG1vdmVyLCBtdW5kZXJvdmVyIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgKaW5kZXggZDJkNjU4Mi4uNWJiMjc3
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgKQEAg
LTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBhdm9pZHNGbG9hdHMoKSBjb25zdCBm
aW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBjYW5Ecm9wQW5vbnltb3VzQmxvY2tDaGls
ZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBsYXlvdXRCbG9jayhi
b29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBm
aW5hbDsKKyAgICB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0
VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IDApIG92ZXJyaWRlOwogCiAgICAgaW50IGJhc2VsaW5l
UG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUs
IExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0IG92ZXJy
aWRlOwogICAgIE9wdGlvbmFsPGludD4gZmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdCBvdmVycmlk
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCA5MjBmODQ5Li4w
ZWFiNWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0zODgs
NiArMzg4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlck1hdGhNTFJhZGlj
YWxPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlz
UmVuZGVyTWF0aE1MUm93KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgaXNSZW5kZXJNYXRoTUxNYXRoKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaXNSZW5kZXJNYXRoTUxNZW5jbG9zZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyTWF0aE1MRmVuY2VkKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJNYXRoTUxGcmFjdGlvbigpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyTWF0aE1MUm9vdCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmgKaW5kZXggYThkNjU1OC4uMzFhNzIyZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9j
ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxv
Y2suaApAQCAtNjQsNiArNjQsMTIgQEAgcHVibGljOgogICAgIC8vIENyZWF0ZSBhIG5ldyBSZW5k
ZXJNYXRoTUxCbG9jaywgd2l0aCBhIG5ldyBzdHlsZSBpbmhlcml0aW5nIGZyb20gdGhpcy0+c3R5
bGUoKS4KICAgICBSZW5kZXJQdHI8UmVuZGVyTWF0aE1MQmxvY2s+IGNyZWF0ZUFub255bW91c01h
dGhNTEJsb2NrKCk7CiAgICAgCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIExheW91dFVuaXQgYXNj
ZW50Rm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkKKyAgICB7CisgICAgICAgIHJldHVy
biBjaGlsZC5maXJzdExpbmVCYXNlbGluZSgpLnZhbHVlT3IoY2hpbGQuaGVpZ2h0KCkpOworICAg
IH0KKwogcHJpdmF0ZToKICAgICBib29sIGlzUmVuZGVyTWF0aE1MQmxvY2soKSBjb25zdCBmaW5h
bCB7IHJldHVybiB0cnVlOyB9CiAgICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92
ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxNZW5jbG9zZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxNZW5jbG9zZS5oCmluZGV4IGYwZjU2ZjkuLmExMGUxNjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MTWVuY2xvc2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE1lbmNsb3NlLmgK
QEAgLTM2LDE1ICszNiwxOCBAQCBwdWJsaWM6CiAgICAgUmVuZGVyTWF0aE1MTWVuY2xvc2UoRWxl
bWVudCYsIFJlZjxSZW5kZXJTdHlsZT4mJik7CiAKIHByaXZhdGU6Ci0gICAgY29uc3QgY2hhciog
cmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJSZW5kZXJNYXRoTUxNZW5jbG9z
ZSI7IH0KLSAgICB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jikgb3Zl
cnJpZGU7CisgICAgYm9vbCBpc1JlbmRlck1hdGhNTE1lbmNsb3NlKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAiUmVuZGVyTWF0aE1MTWVuY2xvc2UiOyB9CisgICAgdm9pZCBwYWludChQYWludElu
Zm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIGZpbmFsOwogICAgIHZvaWQgdXBkYXRlTG9naWNhbEhl
aWdodCgpIG92ZXJyaWRlOwogICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGls
ZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IG51bGxwdHIpIG92ZXJyaWRlOwotICAgIHZv
aWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNv
bXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkgZmluYWw7CiAgICAgYm9vbCBjaGVja05vdGF0
aW9uYWxWYWx1ZXNWYWxpZGl0eShjb25zdCBWZWN0b3I8U3RyaW5nPiYpIGNvbnN0OwogfTsKICAg
ICAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKFJlbmRlck1hdGhN
TE1lbmNsb3NlLCBpc1JlbmRlck1hdGhNTE1lbmNsb3NlKCkpCisKICNlbmRpZiAvLyBFTkFCTEUo
TUFUSE1MKQogI2VuZGlmIC8vIFJlbmRlck1hdGhNTE1lbmNsb3NlX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcAppbmRleCA1Y2Yy
YzlkLi42YTM2Njc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFJvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxSb3cuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxMCBBbGV4IE1pbG93c2tpIChhbGV4QG1pbG93c2tpLmNvbSkuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsMTMgKzQ5LDYgQEAgUmVuZGVyTWF0aE1MUm93OjpSZW5k
ZXJNYXRoTUxSb3coRG9jdW1lbnQmIGRvY3VtZW50LCBSZWY8UmVuZGVyU3R5bGU+JiYgc3R5bGUp
CiB7CiB9CiAKLVJlbmRlclB0cjxSZW5kZXJNYXRoTUxSb3c+IFJlbmRlck1hdGhNTFJvdzo6Y3Jl
YXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKFJlbmRlck1hdGhNTFJvb3QmIHBhcmVudCkK
LXsKLSAgICBSZW5kZXJQdHI8UmVuZGVyTWF0aE1MUm93PiBuZXdNUm93ID0gY3JlYXRlUmVuZGVy
ZXI8UmVuZGVyTWF0aE1MUm93PihwYXJlbnQuZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNyZWF0
ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoJnBhcmVudC5zdHlsZSgpLCBGTEVYKSk7Ci0gICAg
bmV3TVJvdy0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgcmV0dXJuIG5ld01Sb3c7Ci19Ci0KIHZv
aWQgUmVuZGVyTWF0aE1MUm93Ojp1cGRhdGVPcGVyYXRvclByb3BlcnRpZXMoKQogewogICAgIGZv
ciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPm5leHRTaWJsaW5nKCkpIHsKQEAgLTY2LDQ0ICs2MCwxNTEgQEAgdm9pZCBSZW5kZXJNYXRo
TUxSb3c6OnVwZGF0ZU9wZXJhdG9yUHJvcGVydGllcygpCiAgICAgc2V0TmVlZHNMYXlvdXRBbmRQ
cmVmV2lkdGhzUmVjYWxjKCk7CiB9CiAKLXZvaWQgUmVuZGVyTWF0aE1MUm93OjpsYXlvdXQoKQor
CitPcHRpb25hbDxpbnQ+IFJlbmRlck1hdGhNTFJvdzo6Zmlyc3RMaW5lQmFzZWxpbmUoKSBjb25z
dAogewotICAgIGludCBzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSA9IDAsIHN0cmV0Y2hEZXB0
aEJlbG93QmFzZWxpbmUgPSAwOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAg
aWYgKGNoaWxkLT5uZWVkc0xheW91dCgpKQotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRWxl
bWVudD4oKmNoaWxkKS5sYXlvdXQoKTsKLSAgICAgICAgaWYgKGlzPFJlbmRlck1hdGhNTEJsb2Nr
PigqY2hpbGQpKSB7Ci0gICAgICAgICAgICAvLyBXZSBza2lwIHRoZSBzdHJldGNoeSBvcGVyYXRv
cnMgYXMgdGhleSBtdXN0IG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgY29tcHV0YXRpb24gb2YgdGhl
IHN0cmV0Y2ggc2l6ZS4KLSAgICAgICAgICAgIGF1dG8qIHJlbmRlck9wZXJhdG9yID0gZG93bmNh
c3Q8UmVuZGVyTWF0aE1MQmxvY2s+KCpjaGlsZCkudW5lbWJlbGxpc2hlZE9wZXJhdG9yKCk7Cisg
ICAgUmVuZGVyQm94KiBiYXNlbGluZUNoaWxkID0gZmlyc3RDaGlsZEJveCgpOworICAgIGlmICgh
YmFzZWxpbmVDaGlsZCkKKyAgICAgICAgcmV0dXJuIE9wdGlvbmFsPGludD4oKTsKKworICAgIHJl
dHVybiBPcHRpb25hbDxpbnQ+KHN0YXRpY19jYXN0PGludD4obHJvdW5kZihhc2NlbnRGb3JDaGls
ZCgqYmFzZWxpbmVDaGlsZCkgKyBiYXNlbGluZUNoaWxkLT5sb2dpY2FsVG9wKCkpKSk7Cit9CisK
K3ZvaWQgUmVuZGVyTWF0aE1MUm93Ojpjb21wdXRlTGluZVZlcnRpY2FsU3RyZXRjaChpbnQmIHN0
cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lLCBpbnQmIHN0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUp
Cit7CisgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgeworICAgICAgICBpZiAoaXM8UmVuZGVy
TWF0aE1MQmxvY2s+KGNoaWxkKSkgeworICAgICAgICAgICAgYXV0byogcmVuZGVyT3BlcmF0b3Ig
PSBkb3duY2FzdDxSZW5kZXJNYXRoTUxCbG9jaz4oY2hpbGQpLT51bmVtYmVsbGlzaGVkT3BlcmF0
b3IoKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJPcGVyYXRvciAmJiByZW5kZXJPcGVyYXRvci0+
aGFzT3BlcmF0b3JGbGFnKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6U3RyZXRjaHkpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIExheW91dFVuaXQgY2hp
bGRIZWlnaHRBYm92ZUJhc2VsaW5lID0gMCwgY2hpbGREZXB0aEJlbG93QmFzZWxpbmUgPSAwOwot
ICAgICAgICBpZiAoaXM8UmVuZGVyTWF0aE1MQmxvY2s+KCpjaGlsZCkpIHsKLSAgICAgICAgICAg
IFJlbmRlck1hdGhNTEJsb2NrJiBtYXRobWxDaGlsZCA9IGRvd25jYXN0PFJlbmRlck1hdGhNTEJs
b2NrPigqY2hpbGQpOwotICAgICAgICAgICAgY2hpbGRIZWlnaHRBYm92ZUJhc2VsaW5lID0gbWF0
aG1sQ2hpbGQuZmlyc3RMaW5lQmFzZWxpbmUoKS52YWx1ZU9yKG1hdGhtbENoaWxkLmxvZ2ljYWxI
ZWlnaHQoKSk7Ci0gICAgICAgICAgICBjaGlsZERlcHRoQmVsb3dCYXNlbGluZSA9IG1hdGhtbENo
aWxkLmxvZ2ljYWxIZWlnaHQoKSAtIGNoaWxkSGVpZ2h0QWJvdmVCYXNlbGluZTsKLSAgICAgICAg
fSBlbHNlIGlmIChpczxSZW5kZXJNYXRoTUxUYWJsZT4oKmNoaWxkKSkgewotICAgICAgICAgICAg
UmVuZGVyTWF0aE1MVGFibGUmIHRhYmxlQ2hpbGQgPSBkb3duY2FzdDxSZW5kZXJNYXRoTUxUYWJs
ZT4oKmNoaWxkKTsKLSAgICAgICAgICAgIGNoaWxkSGVpZ2h0QWJvdmVCYXNlbGluZSA9IHRhYmxl
Q2hpbGQuZmlyc3RMaW5lQmFzZWxpbmUoKS52YWx1ZU9yKC0xKTsKLSAgICAgICAgICAgIGNoaWxk
RGVwdGhCZWxvd0Jhc2VsaW5lID0gdGFibGVDaGlsZC5sb2dpY2FsSGVpZ2h0KCkgLSBjaGlsZEhl
aWdodEFib3ZlQmFzZWxpbmU7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyQm94PigqY2hp
bGQpKSB7Ci0gICAgICAgICAgICBjaGlsZEhlaWdodEFib3ZlQmFzZWxpbmUgPSBkb3duY2FzdDxS
ZW5kZXJCb3g+KCpjaGlsZCkubG9naWNhbEhlaWdodCgpOwotICAgICAgICAgICAgY2hpbGREZXB0
aEJlbG93QmFzZWxpbmUgPSAwOwotICAgICAgICB9CisKKyAgICAgICAgY2hpbGQtPmxheW91dElm
TmVlZGVkKCk7CisKKyAgICAgICAgTGF5b3V0VW5pdCBjaGlsZEhlaWdodEFib3ZlQmFzZWxpbmUg
PSBhc2NlbnRGb3JDaGlsZCgqY2hpbGQpOworICAgICAgICBMYXlvdXRVbml0IGNoaWxkRGVwdGhC
ZWxvd0Jhc2VsaW5lID0gY2hpbGQtPmhlaWdodCgpIC0gY2hpbGRIZWlnaHRBYm92ZUJhc2VsaW5l
OworCiAgICAgICAgIHN0cmV0Y2hIZWlnaHRBYm92ZUJhc2VsaW5lID0gc3RkOjptYXg8TGF5b3V0
VW5pdD4oc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUsIGNoaWxkSGVpZ2h0QWJvdmVCYXNlbGlu
ZSk7CiAgICAgICAgIHN0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUgPSBzdGQ6Om1heDxMYXlvdXRV
bml0PihzdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lLCBjaGlsZERlcHRoQmVsb3dCYXNlbGluZSk7
CiAgICAgfQotICAgIGlmIChzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSArIHN0cmV0Y2hEZXB0
aEJlbG93QmFzZWxpbmUgPD0gMCkKKworICAgIC8vIFdlIGVuc3VyZSBhIG1pbmltYWwgc3RyZXRj
aCBzaXplLgorICAgIGlmIChzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSArIHN0cmV0Y2hEZXB0
aEJlbG93QmFzZWxpbmUgPD0gMCkgewogICAgICAgICBzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGlu
ZSA9IHN0eWxlKCkuZm9udFNpemUoKTsKLSAgICAKLSAgICAvLyBTZXQgdGhlIHNpemVzIG9mIChw
b3NzaWJseSBlbWJlbGxpc2hlZCkgc3RyZXRjaHkgb3BlcmF0b3IgY2hpbGRyZW4uCi0gICAgZm9y
IChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck1hdGhNTEJsb2NrPigqdGhpcykp
IHsKLSAgICAgICAgaWYgKGF1dG8gcmVuZGVyT3BlcmF0b3IgPSBjaGlsZC51bmVtYmVsbGlzaGVk
T3BlcmF0b3IoKSkKLSAgICAgICAgICAgIHJlbmRlck9wZXJhdG9yLT5zdHJldGNoVG8oc3RyZXRj
aEhlaWdodEFib3ZlQmFzZWxpbmUsIHN0cmV0Y2hEZXB0aEJlbG93QmFzZWxpbmUpOworICAgICAg
ICBzdHJldGNoRGVwdGhCZWxvd0Jhc2VsaW5lID0gMDsKICAgICB9Cit9CisKK3ZvaWQgUmVuZGVy
TWF0aE1MUm93Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCit7CisgICAgQVNTRVJU
KHByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpKTsKKworICAgIG1fbWluUHJlZmVycmVkTG9n
aWNhbFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSAwOworCisgICAgTGF5b3V0
VW5pdCBwcmVmZXJyZWRXaWR0aCA9IDA7CisgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gZmly
c3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkKKyAg
ICAgICAgcHJlZmVycmVkV2lkdGggKz0gY2hpbGQtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgp
ICsgY2hpbGQtPm1hcmdpbkxvZ2ljYWxXaWR0aCgpOworCisgICAgbV9taW5QcmVmZXJyZWRMb2dp
Y2FsV2lkdGggPSBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoICsg
Ym9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpOworCisgICAgc2V0UHJlZmVycmVkTG9naWNh
bFdpZHRoc0RpcnR5KGZhbHNlKTsKK30KKwordm9pZCBSZW5kZXJNYXRoTUxSb3c6OmxheW91dFJv
d0l0ZW1zKGludCBzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSwgaW50IHN0cmV0Y2hEZXB0aEJl
bG93QmFzZWxpbmUpCit7CisgICAgTGF5b3V0VW5pdCBob3Jpem9udGFsT2Zmc2V0ID0gYm9yZGVy
QW5kUGFkZGluZ1N0YXJ0KCk7CisgICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbE9mZnNldCA9IGJvcmRl
clRvcCgpICsgcGFkZGluZ1RvcCgpOworICAgIExheW91dFVuaXQgbWF4QXNjZW50ID0gMCwgbWF4
RGVzY2VudCA9IDA7IC8vIFVzZWQgYmFzZWxpbmUgYWxpZ25tZW50LgorICAgIGJvb2wgc2hvdWxk
RmxpcEhvcml6b250YWwgPSAhc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CisKKyAg
ICAvLyBXZSBmaXJzdCBzdHJldGNoIHRoZSB2ZXJ0aWNhbCBvcGVyYXRvcnMuCisgICAgLy8gRm9y
IGlubGluZSBmb3JtdWxhcywgd2UgY2FuIHRoZW4gY2FsY3VsYXRlIHRoZSBsb2dpY2FsIHdpZHRo
LgorICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoID0gYm9yZGVyQW5kUGFkZGluZ1N0YXJ0KCk7
CisgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkgeworICAgICAgICBpZiAoY2hpbGQtPmlzT3V0
T2ZGbG93UG9zaXRpb25lZCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYg
KGlzPFJlbmRlck1hdGhNTEJsb2NrPihjaGlsZCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHJl
bmRlck9wZXJhdG9yID0gZG93bmNhc3Q8UmVuZGVyTWF0aE1MQmxvY2s+KGNoaWxkKS0+dW5lbWJl
bGxpc2hlZE9wZXJhdG9yKCkpCisgICAgICAgICAgICAgICAgcmVuZGVyT3BlcmF0b3ItPnN0cmV0
Y2hUbyhzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSwgc3RyZXRjaERlcHRoQmVsb3dCYXNlbGlu
ZSk7CisgICAgICAgIH0KIAotICAgIFJlbmRlck1hdGhNTEJsb2NrOjpsYXlvdXQoKTsKKyAgICAg
ICAgY2hpbGQtPmxheW91dElmTmVlZGVkKCk7CisKKyAgICAgICAgbG9naWNhbFdpZHRoICs9IGNo
aWxkLT5tYXJnaW5TdGFydCgpICsgY2hpbGQtPndpZHRoKCkgKyBjaGlsZC0+bWFyZ2luRW5kKCk7
CisgICAgfQorCisgICAgbG9naWNhbFdpZHRoICs9IGJvcmRlckVuZCgpICsgcGFkZGluZ0VuZCgp
OworICAgIC8vIEZJWE1FOiBSZW5kZXJNYXRoTUxSb290IGFuZCBSZW5kZXJNYXRoTUxFbmNsb3Nl
IGNsYXNzZXMgc2hvdWxkIGFsc28gcmVjYWxjdWxhdGUgdGhlIGV4YWN0IGxvZ2ljYWwgd2lkdGgg
aW5zdGVhZCBvZiB1c2luZyB0aGUgcHJlZmVycmVkIHdpZHRoLgorICAgIC8vIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMzI2CisgICAgaWYgKCghaXNSZW5k
ZXJNYXRoTUxNYXRoKCkgfHwgc3R5bGUoKS5kaXNwbGF5KCkgPT0gSU5MSU5FKSAmJiAhaXNSZW5k
ZXJNYXRoTUxSb290KCkgJiYgIWlzUmVuZGVyTWF0aE1MTWVuY2xvc2UoKSkKKyAgICAgICAgc2V0
TG9naWNhbFdpZHRoKGxvZ2ljYWxXaWR0aCk7CisKKyAgICBmb3IgKFJlbmRlckJveCogY2hpbGQg
PSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgp
KSB7CisgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKKyAgICAg
ICAgICAgIGNoaWxkLT5jb250YWluaW5nQmxvY2soKS0+aW5zZXJ0UG9zaXRpb25lZE9iamVjdCgq
Y2hpbGQpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgTGF5b3V0
VW5pdCBjaGlsZEhvcml6b250YWxFeHRlbnQgPSBjaGlsZC0+d2lkdGgoKTsKKyAgICAgICAgTGF5
b3V0VW5pdCBhc2NlbnQgPSBhc2NlbnRGb3JDaGlsZCgqY2hpbGQpOworICAgICAgICBMYXlvdXRV
bml0IGRlc2NlbnQgPSBjaGlsZC0+dmVydGljYWxNYXJnaW5FeHRlbnQoKSArIGNoaWxkLT5oZWln
aHQoKSAtIGFzY2VudDsKKyAgICAgICAgbWF4QXNjZW50ID0gc3RkOjptYXgobWF4QXNjZW50LCBh
c2NlbnQpOworICAgICAgICBtYXhEZXNjZW50ID0gc3RkOjptYXgobWF4RGVzY2VudCwgZGVzY2Vu
dCk7CisgICAgICAgIExheW91dFVuaXQgY2hpbGRWZXJ0aWNhbE1hcmdpbkJveEV4dGVudCA9IG1h
eEFzY2VudCArIG1heERlc2NlbnQ7CisKKyAgICAgICAgaG9yaXpvbnRhbE9mZnNldCArPSBjaGls
ZC0+bWFyZ2luU3RhcnQoKTsKKworICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KHN0ZDo6bWF4KGxv
Z2ljYWxIZWlnaHQoKSwgdmVydGljYWxPZmZzZXQgKyBib3JkZXJCb3R0b20oKSArIHBhZGRpbmdC
b3R0b20oKSArIGNoaWxkVmVydGljYWxNYXJnaW5Cb3hFeHRlbnQgKyBob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0KCkpKTsKKworICAgICAgICBMYXlvdXRQb2ludCBjaGlsZExvY2F0aW9uKHNob3Vs
ZEZsaXBIb3Jpem9udGFsID8gd2lkdGgoKSAtIGhvcml6b250YWxPZmZzZXQgLSBjaGlsZEhvcml6
b250YWxFeHRlbnQgOiBob3Jpem9udGFsT2Zmc2V0LCB2ZXJ0aWNhbE9mZnNldCArIGNoaWxkLT5t
YXJnaW5Ub3AoKSk7CisgICAgICAgIGNoaWxkLT5zZXRMb2NhdGlvbihjaGlsZExvY2F0aW9uKTsK
KworICAgICAgICBob3Jpem9udGFsT2Zmc2V0ICs9IGNoaWxkSG9yaXpvbnRhbEV4dGVudCArIGNo
aWxkLT5tYXJnaW5FbmQoKTsKKyAgICB9CisKKyAgICBMYXlvdXRVbml0IGNlbnRlckJsb2NrT2Zm
c2V0ID0gMDsKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBGTEVYIHdoZW4gaXQgaXMgbm90IHJl
cXVpcmVkIGJ5IHRoZSBjc3MuCisgICAgaWYgKHN0eWxlKCkuZGlzcGxheSgpID09IEJMT0NLIHx8
IHN0eWxlKCkuZGlzcGxheSgpID09IEZMRVgpCisgICAgICAgIGNlbnRlckJsb2NrT2Zmc2V0ID0g
c3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgKHdpZHRoKCkgLSAoaG9yaXpvbnRhbE9mZnNldCArIGJv
cmRlckVuZCgpICsgcGFkZGluZ0VuZCgpKSkgLyAyKTsKKworICAgIGlmIChzaG91bGRGbGlwSG9y
aXpvbnRhbCAmJiBjZW50ZXJCbG9ja09mZnNldCA+IDApCisgICAgICAgIGNlbnRlckJsb2NrT2Zm
c2V0ID0gLWNlbnRlckJsb2NrT2Zmc2V0OworCisgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0g
Zmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkg
eworICAgICAgICBMYXlvdXRVbml0IGFzY2VudCA9IGFzY2VudEZvckNoaWxkKCpjaGlsZCk7Cisg
ICAgICAgIExheW91dFVuaXQgc3RhcnRPZmZzZXQgPSBtYXhBc2NlbnQgLSBhc2NlbnQ7CisgICAg
ICAgIGNoaWxkLT5zZXRMb2NhdGlvbihjaGlsZC0+bG9jYXRpb24oKSArIExheW91dFBvaW50KGNl
bnRlckJsb2NrT2Zmc2V0LCBzdGFydE9mZnNldCkpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJN
YXRoTUxSb3c6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCkK
K3sKKyAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CisKKyAgICBpZiAoIXJlbGF5b3V0Q2hpbGRy
ZW4gJiYgc2ltcGxpZmllZExheW91dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgc3Ry
ZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUgPSAwOworICAgIGludCBzdHJldGNoRGVwdGhCZWxvd0Jh
c2VsaW5lID0gMDsKKyAgICBjb21wdXRlTGluZVZlcnRpY2FsU3RyZXRjaChzdHJldGNoSGVpZ2h0
QWJvdmVCYXNlbGluZSwgc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSk7CisKKyAgICByZWNvbXB1
dGVMb2dpY2FsV2lkdGgoKTsKKworICAgIHNldExvZ2ljYWxIZWlnaHQoYm9yZGVyQW5kUGFkZGlu
Z0xvZ2ljYWxIZWlnaHQoKSArIHNjcm9sbGJhckxvZ2ljYWxIZWlnaHQoKSk7CisKKyAgICBsYXlv
dXRSb3dJdGVtcyhzdHJldGNoSGVpZ2h0QWJvdmVCYXNlbGluZSwgc3RyZXRjaERlcHRoQmVsb3dC
YXNlbGluZSk7CisKKyAgICB1cGRhdGVMb2dpY2FsSGVpZ2h0KCk7CisKKyAgICBjbGVhck5lZWRz
TGF5b3V0KCk7Cit9CisKK3ZvaWQgUmVuZGVyTWF0aE1MUm93OjpwYWludENoaWxkcmVuKFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIFBhaW50SW5m
byYgcGFpbnRJbmZvRm9yQ2hpbGQsIGJvb2wgdXNlUHJpbnRSZWN0KQoreworICAgIGZvciAoUmVu
ZGVyQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nQm94KCkpIHsKKyAgICAgICAgaWYgKCFwYWludENoaWxkKCpjaGlsZCwgcGFpbnRJ
bmZvLCBwYWludE9mZnNldCwgcGFpbnRJbmZvRm9yQ2hpbGQsIHVzZVByaW50UmVjdCwgUGFpbnRB
c0lubGluZUJsb2NrKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5oCmluZGV4
IDAyODJmZTcuLjU3NjQ1ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MUm93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxSb3cuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQWxleCBNaWxvd3NraSAoYWxleEBtaWxvd3NraS5jb20pLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDE1ICs0MCwxOSBAQCBwdWJsaWM6CiAgICAgUmVuZGVy
TWF0aE1MUm93KEVsZW1lbnQmLCBSZWY8UmVuZGVyU3R5bGU+JiYpOwogICAgIFJlbmRlck1hdGhN
TFJvdyhEb2N1bWVudCYsIFJlZjxSZW5kZXJTdHlsZT4mJik7CiAKLSAgICBzdGF0aWMgUmVuZGVy
UHRyPFJlbmRlck1hdGhNTFJvdz4gY3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKFJl
bmRlck1hdGhNTFJvb3QmKTsKICAgICB2b2lkIHVwZGF0ZU9wZXJhdG9yUHJvcGVydGllcygpOwog
Ci1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBsYXlvdXQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGxheW91
dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdo
dCA9IDApIGZpbmFsOworICAgIHZvaWQgcGFpbnRDaGlsZHJlbihQYWludEluZm8mIGZvclNlbGYs
IGNvbnN0IExheW91dFBvaW50JiwgUGFpbnRJbmZvJiBmb3JDaGlsZCwgYm9vbCB1c2VQcmludFJl
Y3QpIGZpbmFsOworICAgIE9wdGlvbmFsPGludD4gZmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdCBm
aW5hbDsKIAogcHJpdmF0ZToKICAgICBib29sIGlzUmVuZGVyTWF0aE1MUm93KCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBpc0Fub255bW91cygpID8gIlJlbmRlck1hdGhNTFJvdyAoYW5vbnlt
b3VzKSIgOiAiUmVuZGVyTWF0aE1MUm93IjsgfQorCisgICAgdm9pZCBsYXlvdXRSb3dJdGVtcyhp
bnQgc3RyZXRjaEhlaWdodEFib3ZlQmFzZWxpbmUsIGludCBzdHJldGNoRGVwdGhCZWxvd0Jhc2Vs
aW5lKTsKKyAgICB2b2lkIGNvbXB1dGVMaW5lVmVydGljYWxTdHJldGNoKGludCYgc3RyZXRjaEhl
aWdodEFib3ZlQmFzZWxpbmUsIGludCYgc3RyZXRjaERlcHRoQmVsb3dCYXNlbGluZSk7CisgICAg
dm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpIG92ZXJyaWRlOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotLSAKMi44LjAucmMzCgo=
</data>
<flag name="review"
          id="299647"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>