<?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>38799</bug_id>
          
          <creation_ts>2010-05-08 01:21:45 -0700</creation_ts>
          <short_desc>Move buildLayoutInformationForTextBox() from SVGRootInlineBox in SVGInlineTextBox where it belongs</short_desc>
          <delta_ts>2010-05-11 05:12:02 -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>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>krit</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>222857</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-05-08 01:21:45 -0700</bug_when>
    <thetext>Move buildLayoutInformationForTextBox() from SVGRootInlineBox in SVGInlineTextBox where it belongs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223223</commentid>
    <comment_count>1</comment_count>
      <attachid>55534</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-05-10 03:19:00 -0700</bug_when>
    <thetext>Created attachment 55534
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223238</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-05-10 04:05:53 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=55534) [details]
&gt; Patch

Please upload a new patch. XCode changes can&apos;t be updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223255</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-05-10 05:00:36 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; &gt; Created an attachment (id=55534) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; Please upload a new patch. XCode changes can&apos;t be updated.

Patch looks good on the first view. Will review the new patch, once it is up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223276</commentid>
    <comment_count>4</comment_count>
      <attachid>55548</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-05-10 06:20:23 -0700</bug_when>
    <thetext>Created attachment 55548
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223278</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-10 06:24:16 -0700</bug_when>
    <thetext>Attachment 55548 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/rendering/SVGRootInlineBox.cpp:961:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/SVGInlineTextBox.cpp:686:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/SVGInlineTextBox.cpp:694:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/SVGInlineTextBox.cpp:767:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/SVGInlineTextBox.cpp:770:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/SVGTextLayoutUtilities.cpp:185:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/SVGTextLayoutUtilities.cpp:202:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/SVGTextLayoutUtilities.cpp:221:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/SVGTextLayoutUtilities.cpp:245:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/SVGTextLayoutUtilities.cpp:355:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 10 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223301</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-10 07:23:51 -0700</bug_when>
    <thetext>Attachment 55548 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/2227109</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223337</commentid>
    <comment_count>7</comment_count>
      <attachid>55548</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-05-10 08:54:12 -0700</bug_when>
    <thetext>Comment on attachment 55548
Patch

WebCore/rendering/SVGTextLayoutUtilities.cpp:347
 +              kerning = svgFont-&gt;horizontalKerningForPairOfStringsAndGlyphs(lastGlyph.unicode, lastGlyph.glyphName, unicodeString, glyphName);
This is a code change, that also changes behavior. I agree, that the Spec should be interpreted that way (either vkern or hkern). But this changes current behavior, where we allow vkern on horizontal texts.
Please add a layout-test for this. Shouldn&apos;t be hard to make a combination of svg/text/text-vkern ans svg/text/text-hkern. text-vkern already has horizontal texts in it. You may just add hkern in the font defs and update the results.

The patch looks great. Please fix the build error on chromium, add/modify the test and I can r+ the test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223817</commentid>
    <comment_count>8</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-05-11 01:45:09 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 55548 [details])
&gt; WebCore/rendering/SVGTextLayoutUtilities.cpp:347
&gt;  +              kerning = svgFont-&gt;horizontalKerningForPairOfStringsAndGlyphs(lastGlyph.unicode, lastGlyph.glyphName, unicodeString, glyphName);
&gt; This is a code change, that also changes behavior. I agree, that the Spec should be interpreted that way (either vkern or hkern). But this changes current behavior, where we allow vkern on horizontal texts.
This is wrong, before the code looked like:
-    if (style-&gt;font().isSVGFont()) {
-        if (lastGlyph.isValid) {
-            horizontalKerning = svgFont-&gt;horizontalKerningForPairOfStringsAndGlyphs(lastGlyph.unicode, lastGlyph.glyphName, unicodeString, glyphName);
-            if (isVerticalText)
-                verticalKerning = svgFont-&gt;verticalKerningForPairOfStringsAndGlyphs(lastGlyph.unicode, lastGlyph.glyphName, unicodeString, glyphName);

You always only grabbed the vkern information for vertical text.
The only thing which has changed, and you&apos;re right about that: hkern could be applied to vertical text before and this is not possible anymore, so I&apos;m going to update the vkern test, to include a hkern element, to assure it&apos;s not applied anywhere. While I&apos;m at it I&apos;ll do the same for the hkern test, adding a vkern element, to be sure we&apos;re not applying it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223823</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-05-11 01:53:40 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 55548 [details] [details])
&gt; &gt; WebCore/rendering/SVGTextLayoutUtilities.cpp:347
&gt; &gt;  +              kerning = svgFont-&gt;horizontalKerningForPairOfStringsAndGlyphs(lastGlyph.unicode, lastGlyph.glyphName, unicodeString, glyphName);
&gt; &gt; This is a code change, that also changes behavior. I agree, that the Spec should be interpreted that way (either vkern or hkern). But this changes current behavior, where we allow vkern on horizontal texts.
&gt; This is wrong, before the code looked like:
&gt; -    if (style-&gt;font().isSVGFont()) {
&gt; -        if (lastGlyph.isValid) {
&gt; -            horizontalKerning = svgFont-&gt;horizontalKerningForPairOfStringsAndGlyphs(lastGlyph.unicode, lastGlyph.glyphName, unicodeString, glyphName);
&gt; -            if (isVerticalText)
&gt; -                verticalKerning = svgFont-&gt;verticalKerningForPairOfStringsAndGlyphs(lastGlyph.unicode, lastGlyph.glyphName, unicodeString, glyphName);
&gt; 
&gt; You always only grabbed the vkern information for vertical text.
&gt; The only thing which has changed, and you&apos;re right about that: hkern could be applied to vertical text before and this is not possible anymore, so I&apos;m going to update the vkern test, to include a hkern element, to assure it&apos;s not applied anywhere. While I&apos;m at it I&apos;ll do the same for the hkern test, adding a vkern element, to be sure we&apos;re not applying it.

Even if line by line reviewing is a real improvement, sometimes it&apos;s better to mark multiple lines :-)
I meant the if (isVerticalText) thing, not the horizontalKerning call it self.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223836</commentid>
    <comment_count>10</comment_count>
      <attachid>55681</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-05-11 02:45:46 -0700</bug_when>
    <thetext>Created attachment 55681
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223838</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-11 02:47:07 -0700</bug_when>
    <thetext>Attachment 55681 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/rendering/SVGInlineTextBox.cpp:686:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/SVGInlineTextBox.cpp:694:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/SVGInlineTextBox.cpp:767:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/SVGInlineTextBox.cpp:770:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/SVGRootInlineBox.cpp:962:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/SVGTextLayoutUtilities.cpp:185:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/SVGTextLayoutUtilities.cpp:202:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/SVGTextLayoutUtilities.cpp:221:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/SVGTextLayoutUtilities.cpp:245:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/SVGTextLayoutUtilities.cpp:355:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 10 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223839</commentid>
    <comment_count>12</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-05-11 02:50:24 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Attachment 55681 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
&gt; WebCore/rendering/SVGInlineTextBox.cpp:686:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
&gt; WebCore/rendering/SVGInlineTextBox.cpp:694:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
&gt; WebCore/rendering/SVGInlineTextBox.cpp:767:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
&gt; WebCore/rendering/SVGInlineTextBox.cpp:770:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
&gt; WebCore/rendering/SVGRootInlineBox.cpp:962:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
&gt; WebCore/rendering/SVGTextLayoutUtilities.cpp:185:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
&gt; WebCore/rendering/SVGTextLayoutUtilities.cpp:202:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
&gt; WebCore/rendering/SVGTextLayoutUtilities.cpp:221:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
&gt; WebCore/rendering/SVGTextLayoutUtilities.cpp:245:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
&gt; WebCore/rendering/SVGTextLayoutUtilities.cpp:355:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
&gt; Total errors found: 10 in 21 files

Argl, stupid rule.  We _do_ want to check spacing != 0.0f, not !spacing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223864</commentid>
    <comment_count>13</comment_count>
      <attachid>55681</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-05-11 04:21:06 -0700</bug_when>
    <thetext>Comment on attachment 55681
Updated patch

WebCore/rendering/SVGInlineTextBox.cpp:718
 +              if (info.pathTextLength &gt; 0.0f &amp;&amp; info.pathChunkLength &gt; 0.0f) { 
Maybe the style bot was right here (info.pathTextLength &amp;&amp; info.pathChunkLength) :-)

WebCore/rendering/SVGInlineTextBox.cpp:252
 +          if (closestOffsetInBox &lt; (int) end() &amp;&amp; direction() == RTL)
not static_cast&lt;int&gt; here?

WebCore/rendering/SVGTextLayoutUtilities.cpp:164
 +              //       Text which is not fullwidth will be set with a glyph-orientation of 90-degrees.
IIRC we don&apos;t want leading spaces here.

WebCore/rendering/SVGTextLayoutUtilities.cpp:322
 +          if (primitive-&gt;primitiveType() == CSSPrimitiveValue::CSS_PERCENTAGE &amp;&amp; font.pixelSize() &gt; 0)
font.pixelSize() &gt; 0 the same like above

Patch looks goo. r=me, but please think about the style hints.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223869</commentid>
    <comment_count>14</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-05-11 05:02:34 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 55681 [details])
&gt; WebCore/rendering/SVGInlineTextBox.cpp:718
&gt;  +              if (info.pathTextLength &gt; 0.0f &amp;&amp; info.pathChunkLength &gt; 0.0f) { 
&gt; Maybe the style bot was right here (info.pathTextLength &amp;&amp; info.pathChunkLength) :-)
&gt; 
&gt; WebCore/rendering/SVGInlineTextBox.cpp:252
&gt;  +          if (closestOffsetInBox &lt; (int) end() &amp;&amp; direction() == RTL)
&gt; not static_cast&lt;int&gt; here?
&gt; 
&gt; WebCore/rendering/SVGTextLayoutUtilities.cpp:164
&gt;  +              //       Text which is not fullwidth will be set with a glyph-orientation of 90-degrees.
&gt; IIRC we don&apos;t want leading spaces here.
&gt; 
&gt; WebCore/rendering/SVGTextLayoutUtilities.cpp:322
&gt;  +          if (primitive-&gt;primitiveType() == CSSPrimitiveValue::CSS_PERCENTAGE &amp;&amp; font.pixelSize() &gt; 0)
&gt; font.pixelSize() &gt; 0 the same like above
&gt; 
&gt; Patch looks goo. r=me, but please think about the style hints.

Fixed those issues, thanks for pointing them out!
(I initially did not plan to fix them, as I was just moving code, but as you&apos;re fine with it, I&apos;m okay with it too :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223872</commentid>
    <comment_count>15</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-05-11 05:12:02 -0700</bug_when>
    <thetext>Committed r59148: &lt;http://trac.webkit.org/changeset/59148&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55534</attachid>
            <date>2010-05-10 03:19:00 -0700</date>
            <delta_ts>2010-05-10 06:20:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38799-20100510121846.patch</filename>
            <type>text/plain</type>
            <size>72702</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTA2OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTggQEAKKzIwMTAtMDUtMTAgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTW92ZSBidWlsZExheW91dEluZm9ybWF0aW9uRm9yVGV4dEJveCgpIGZyb20gU1ZHUm9v
dElubGluZUJveCBpbiBTVkdJbmxpbmVUZXh0Qm94IHdoZXJlIGl0IGJlbG9uZ3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4Nzk5CisKKyAgICAgICAg
Q2xlYW51cCBTVkdSb290SW5saW5lQm94L1NWR0lubGluZVRleHRCb3guIE1vdmUgYnVpbGRMYXlv
dXRJbmZvcm1hdGlvbkZvclRleHRCb3ggdG8gU1ZHSW5saW5lVGV4dEJveC4KKyAgICAgICAgTW92
ZSBsb3RzIG9mIGhlbHBlciBtZXRob2RzIGludG8gbmV3IFNWR1RleHRMYXlvdXRVdGlsaXRpZXMg
Y2xhc3MuIEFkYXB0ZWQgYWxsIGNhbGxzaXRlcy4KKworICAgICAgICBObyBmdW5jdGlvbmFsIGNo
YW5nZXMuCisKKyAgICAgICAgKiBBbmRyb2lkLm1rOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFt
OgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAg
ICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcmVuZGVyaW5nL1NWR0lubGluZVRl
eHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6Y2FsY3VsYXRl
R2x5cGhXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpzdmdDaGFy
YWN0ZXJIaXRzUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6
cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6YnVp
bGRMYXlvdXRJbmZvcm1hdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1NWR0lubGluZVRleHRC
b3guaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnZpcnR1YWxIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6c2V0SGVpZ2h0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblRvcCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25IZWlnaHQpOgorICAgICAgICAqIHJl
bmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZH
Um9vdElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVUZXh0TGVuZ3Ro
Q29ycmVjdGlvbkZvclRleHRDaHVuayk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5l
Qm94Ojpjb21wdXRlUGVyQ2hhcmFjdGVyTGF5b3V0SW5mb3JtYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUm9vdElubGluZUJveDo6YnVpbGRMYXlvdXRJbmZvcm1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94OjpidWlsZFRleHRDaHVua3MpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUm9vdElubGluZUJveDo6bGF5b3V0VGV4dENodW5rcyk6CisgICAgICAgICog
cmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJ
bmxpbmVCb3g6OnN2Z1RleHRDaHVua3MpOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdUZXh0TGF5
b3V0VXRpbGl0aWVzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjppc1ZlcnRpY2FsV3Jp
dGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6ZG9taW5hbnRCYXNlbGluZVRvU2hpZnQpOgor
ICAgICAgICAoV2ViQ29yZTo6YWxpZ25tZW50QmFzZWxpbmVUb1NoaWZ0KToKKyAgICAgICAgKFdl
YkNvcmU6OmdseXBoT3JpZW50YXRpb25Ub0FuZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6OmdseXBo
T3JpZW50YXRpb25Jc011bHRpcGx5T2YxODBEZWdyZWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmFw
cGx5R2x5cGhBZHZhbmNlQW5kU2hpZnRSZXNwZWN0aW5nT3JpZW50YXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6dG9wTGVmdFBvc2l0aW9uT2ZDaGFyYWN0ZXJSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpjdW1tdWxhdGVkV2lkdGhPZklubGluZUJveENoYXJhY3RlclJhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OmN1bW11bGF0ZWRIZWlnaHRPZklubGluZUJveENoYXJhY3RlclJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnN2Z1RleHRSdW5Gb3JJbmxpbmVUZXh0Qm94KToKKyAgICAgICAgKFdl
YkNvcmU6OmNhbGN1bGF0ZUNTU0tlcm5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlTVkdL
ZXJuaW5nKToKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0aWxpdGllcy5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UGFp
bnRJbmZvOjpTVkdUZXh0UGFpbnRJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xhc3RHbHlw
aEluZm86OlNWR0xhc3RHbHlwaEluZm8pOgorCiAyMDEwLTA1LTEwICBKZXJlbXkgT3Jsb3cgIDxq
b3Jsb3dAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5hdGUgQ2hhcGluLgpJ
bmRleDogV2ViQ29yZS9BbmRyb2lkLm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQW5kcm9pZC5t
awkocmV2aXNpb24gNTkwMTUpCisrKyBXZWJDb3JlL0FuZHJvaWQubWsJKHdvcmtpbmcgY29weSkK
QEAgLTY1Nyw3ICs2NTcsOCBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMp
IFwKIAlyZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgXAogCXJlbmRlcmluZy9TVkdSZW5k
ZXJUcmVlQXNUZXh0LmNwcCBcCiAJcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guY3BwIFwKLQly
ZW5kZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcAorCXJlbmRlcmluZy9TVkdTaGFkb3dU
cmVlRWxlbWVudHMuY3BwIFwKKwlyZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0aWxpdGllcy5jcHAK
IGVuZGlmCiAKIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXApJbmRleDog
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCShyZXZpc2lvbiA1OTAxNSkKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcg
Y29weSkKQEAgLTMxODUsNiArMzE4NSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcCBcCiAJV2ViQ29yZS9yZW5kZXJp
bmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmggXAogCVdlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRD
aHVua0xheW91dEluZm8uaCBcCisJV2ViQ29yZS9yZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0aWxp
dGllcy5jcHAgXAorCVdlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRMYXlvdXRVdGlsaXRpZXMuaCBc
CiAJV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGUuY3BwIFwKIAlXZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBp
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA1OTAxNSkKKysr
IFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zMjg0LDYgKzMyODQsOCBA
QAogICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwJywKICAg
ICAgICAgICAgICdyZW5kZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmgnLAogICAgICAgICAg
ICAgJ3JlbmRlcmluZy9TVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmgnLAorICAgICAgICAgICAgJ3Jl
bmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmNwcCcsCisgICAgICAgICAgICAncmVuZGVy
aW5nL1NWR1RleHRMYXlvdXRVdGlsaXRpZXMuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1Rh
YmxlTGF5b3V0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxl
bWVudHMuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1l
bnRzLmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUucHJvCShyZXZpc2lvbiA1OTAxNSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdv
cmtpbmcgY29weSkKQEAgLTE4MDksNiArMTgwOSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRl
cmluZy9TVkdSb290SW5saW5lQm94LmggXAogICAgIHJlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxl
bWVudHMuaCBcCiAgICAgcmVuZGVyaW5nL1NWR1RleHRDaHVua0xheW91dEluZm8uaCBcCisgICAg
cmVuZGVyaW5nL1NWR1RleHRMYXlvdXRVdGlsaXRpZXMuaCBcCiAgICAgcmVuZGVyaW5nL1RleHRD
b250cm9sSW5uZXJFbGVtZW50cy5oIFwKICAgICByZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuaCBc
CiAgICAgc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5oIFwKQEAgLTI3NTQsNyArMjc1
NSw4IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9MSkgewogICAgICAgICByZW5kZXJp
bmcvU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAgXAogICAgICAgICByZW5kZXJpbmcvU1ZHUmVuZGVy
U3VwcG9ydC5jcHAgXAogICAgICAgICByZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5jcHAgXAot
ICAgICAgICByZW5kZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcAorICAgICAgICByZW5k
ZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9TVkdU
ZXh0TGF5b3V0VXRpbGl0aWVzLmNwcAogfQogCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfSkFW
QVNDUklQVF9ERUJVR0dFUj0xKSB7CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oJKHJldmlzaW9uIDU5MDE1KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjg2MTUsNiArMjg2MTUsMTQgQEAKIAkJCQk+DQog
CQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFNW
R1RleHRMYXlvdXRVdGlsaXRpZXMuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxl
DQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFNWR1RleHRMYXlvdXRVdGlsaXRpZXMu
aCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHJlbmRlcmluZ1xUYWJsZUxheW91dC5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA1OTAxNSkK
KysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC03NSw2ICs3NSw4IEBACiAJCTA4M0RBRUE3MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5k
ZXJUZXh0Q29udHJvbE11bHRpTGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDgzREFFQTMwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250
cm9sTXVsdGlMaW5lLmggKi87IH07CiAJCTA4M0RBRUE4MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDgzREFFQTQwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5jcHAgKi87IH07CiAJCTA4M0RBRUE5MEYwMUE3RkIwMDM0Mjc1NCAv
KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4M0RBRUE1MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuaCAqLzsgfTsKKwkJMDgzRjUyOTkxMTk1N0ZCRTAwNjUzRUJF
IC8qIFNWR1RleHRMYXlvdXRVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzRjUyOTcxMTk1N0ZCRTAwNjUzRUJFIC8qIFNWR1RleHRM
YXlvdXRVdGlsaXRpZXMuY3BwICovOyB9OworCQkwODNGNTI5QTExOTU3RkJFMDA2NTNFQkUgLyog
U1ZHVGV4dExheW91dFV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDgzRjUyOTgxMTk1N0ZCRTAwNjUzRUJFIC8qIFNWR1RleHRMYXlvdXRV
dGlsaXRpZXMuaCAqLzsgfTsKIAkJMDg0MkJDNzIxMTkwMTQ0MDAwQzdEMDhGIC8qIFNWR0NoYXJh
Y3RlckRhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDg0MkJDNzAxMTkwMTQ0MDAwQzdEMDhGIC8qIFNWR0NoYXJhY3RlckRhdGEuY3BwICovOyB9
OwogCQkwODQyQkM3MzExOTAxNDQwMDBDN0QwOEYgLyogU1ZHQ2hhcmFjdGVyRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0MkJDNzExMTkwMTQ0
MDAwQzdEMDhGIC8qIFNWR0NoYXJhY3RlckRhdGEuaCAqLzsgfTsKIAkJMDg0MkJDODExMTkwMTQ3
MjAwQzdEMDhGIC8qIFNWR1RleHRDaHVua0xheW91dEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NDJCQzgwMTE5MDE0NzIwMEM3RDA4RiAvKiBT
VkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmggKi87IH07CkBAIC01NDk0LDYgKzU0OTYsOCBAQAogCQkw
ODNEQUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFFQTQwRjAxQTdGQjAwMzQy
NzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBNTBGMDFBN0ZCMDAzNDI3NTQgLyogUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwODNGNTI5NzExOTU3RkJFMDA2NTNFQkUgLyogU1ZHVGV4dExheW91dFV0aWxpdGll
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUZXh0TGF5b3V0
VXRpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDgzRjUyOTgxMTk1
N0ZCRTAwNjUzRUJFIC8qIFNWR1RleHRMYXlvdXRVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHVGV4dExheW91dFV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwODQyQkM3MDExOTAxNDQwMDBDN0QwOEYgLyogU1ZHQ2hhcmFjdGVy
RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdDaGFyYWN0
ZXJEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg0MkJDNzExMTkwMTQ0
MDAwQzdEMDhGIC8qIFNWR0NoYXJhY3RlckRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHQ2hhcmFjdGVyRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwODQyQkM4MDExOTAxNDcyMDBDN0QwOEYgLyogU1ZHVGV4dENodW5rTGF5b3V0SW5mby5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjE4MCw2ICsxNjE4NCw4IEBACiAJCQkJ
MDhEQUI5QzAxMTAzRDlDMTAwM0U3QUJBIC8qIFNWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAgKi8s
CiAJCQkJMDhEQUI5QzExMTAzRDlDMTAwM0U3QUJBIC8qIFNWR1NoYWRvd1RyZWVFbGVtZW50cy5o
ICovLAogCQkJCTA4NDJCQzgwMTE5MDE0NzIwMEM3RDA4RiAvKiBTVkdUZXh0Q2h1bmtMYXlvdXRJ
bmZvLmggKi8sCisJCQkJMDgzRjUyOTcxMTk1N0ZCRTAwNjUzRUJFIC8qIFNWR1RleHRMYXlvdXRV
dGlsaXRpZXMuY3BwICovLAorCQkJCTA4M0Y1Mjk4MTE5NTdGQkUwMDY1M0VCRSAvKiBTVkdUZXh0
TGF5b3V0VXRpbGl0aWVzLmggKi8sCiAJCQkJQThDRkYwNEMwQTE1NEYwOTAwMEE0MjM0IC8qIFRh
YmxlTGF5b3V0LmggKi8sCiAJCQkJQUIwMTRERTEwRTY4OUE0MzAwRTEwNDQ1IC8qIFRleHRDb250
cm9sSW5uZXJFbGVtZW50cy5jcHAgKi8sCiAJCQkJQUIwMTRERTIwRTY4OUE0MzAwRTEwNDQ1IC8q
IFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oICovLApAQCAtMTkwMjMsNiArMTkwMjksNyBAQAog
CQkJCUI1NUQ1QUE0MTE5MTMxRkMwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0NhbGxi
YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNThDRUI2OTExOTEzNjA3MDAyQTY3OTAgLyogSlNE
YXRhYmFzZVN5bmMuaCBpbiBIZWFkZXJzICovLAogCQkJCUI1OENFQjZEMTE5MTM2MUMwMDJBNjc5
MCAvKiBKU1NRTFRyYW5zYWN0aW9uU3luYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDgzRjUyOUEx
MTk1N0ZCRTAwNjUzRUJFIC8qIFNWR1RleHRMYXlvdXRVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpAQCAtMjEyNzUsNiArMjEyODIsNyBAQAogCQkJCUI1NUQ1QUE5MTE5MTMyNTAwMEJDQzMxNSAv
KiBKU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNThD
RUI2QTExOTEzNjA3MDAyQTY3OTAgLyogSlNEYXRhYmFzZVN5bmMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjU4Q0VCNkUxMTkxMzYxQzAwMkE2NzkwIC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTA4M0Y1Mjk5MTE5NTdGQkUwMDY1M0VCRSAvKiBTVkdUZXh0
TGF5b3V0VXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
U1ZHSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDU5MDE1KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAv
KioKICAqIENvcHlyaWdodCAoQykgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogICAg
ICAgICAgIChDKSAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxNCArMjUsMTIgQEAKICNp
ZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3guaCIKIAotI2luY2x1ZGUg
IkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbmxpbmVGbG93Qm94LmgiCi0j
aW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1
ZGUgIlNWR1Jvb3RJbmxpbmVCb3guaCIKKyNpbmNsdWRlICJTVkdUZXh0TGF5b3V0VXRpbGl0aWVz
LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogCiAjaW5jbHVkZSA8ZmxvYXQuaD4KQEAgLTQ0LDE2ICs0
Myw2IEBAIFNWR0lubGluZVRleHRCb3g6OlNWR0lubGluZVRleHRCb3goUmVuZGUKIHsKIH0KIAot
aW50IFNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblRvcCgpCi17Ci0gICAgcmV0dXJuIG1feTsK
LX0KLSAKLWludCBTVkdJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25IZWlnaHQoKQotewotICAgIHJl
dHVybiBtX2hlaWdodDsKLX0KLQogU1ZHUm9vdElubGluZUJveCogU1ZHSW5saW5lVGV4dEJveDo6
c3ZnUm9vdElubGluZUJveCgpIGNvbnN0CiB7CiAgICAgLy8gRmluZCBhc3NvY2lhdGVkIHJvb3Qg
aW5saW5lIGJveApAQCAtNzQsNyArNjMsNyBAQCBTVkdSb290SW5saW5lQm94KiBTVkdJbmxpbmVU
ZXh0Qm94OjpzdmdSCiBmbG9hdCBTVkdJbmxpbmVUZXh0Qm94OjpjYWxjdWxhdGVHbHlwaFdpZHRo
KFJlbmRlclN0eWxlKiBzdHlsZSwgaW50IG9mZnNldCwgaW50IGV4dHJhQ2hhcnNBdmFpbGFibGUs
IGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKHN0eWxlKTsKLSAgICByZXR1cm4gc3R5bGUtPmZvbnQoKS5mbG9hdFdpZHRoKHN2Z1RleHRS
dW5Gb3JJbmxpbmVUZXh0Qm94KHRleHRSZW5kZXJlcigpLT50ZXh0KCktPmNoYXJhY3RlcnMoKSAr
IG9mZnNldCwgMSwgc3R5bGUsIHRoaXMsIDApLCBleHRyYUNoYXJzQXZhaWxhYmxlLCBjaGFyc0Nv
bnN1bWVkLCBnbHlwaE5hbWUpOworICAgIHJldHVybiBzdHlsZS0+Zm9udCgpLmZsb2F0V2lkdGgo
c3ZnVGV4dFJ1bkZvcklubGluZVRleHRCb3godGV4dFJlbmRlcmVyKCktPmNoYXJhY3RlcnMoKSAr
IG9mZnNldCwgMSwgc3R5bGUsIHRoaXMsIDApLCBleHRyYUNoYXJzQXZhaWxhYmxlLCBjaGFyc0Nv
bnN1bWVkLCBnbHlwaE5hbWUpOwogfQogCiBmbG9hdCBTVkdJbmxpbmVUZXh0Qm94OjpjYWxjdWxh
dGVHbHlwaEhlaWdodChSZW5kZXJTdHlsZSogc3R5bGUsIGludCwgaW50KSBjb25zdApAQCAtMjYw
LDcgKzI0OSw3IEBAIGJvb2wgU1ZHSW5saW5lVGV4dEJveDo6c3ZnQ2hhcmFjdGVySGl0c1AKICAg
ICBpZiAoeCA8IGNoYXJBdFBvcy54KSB7CiAgICAgICAgIGlmIChjbG9zZXN0T2Zmc2V0SW5Cb3gg
PiAwICYmIGRpcmVjdGlvbigpID09IExUUikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBlbHNlIGlmIChjbG9zZXN0T2Zmc2V0SW5Cb3ggPCAoaW50KSBlbmQoKSAmJiBkaXJlY3Rp
b24oKSA9PSBSVEwpCisgICAgICAgIGlmIChjbG9zZXN0T2Zmc2V0SW5Cb3ggPCAoaW50KSBlbmQo
KSAmJiBkaXJlY3Rpb24oKSA9PSBSVEwpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC00OTAsNyArNDc5LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0
Qm94OjpwYWludFNlbGVjdGlvbihpbgogCiAgICAgQ29sb3IgdGV4dENvbG9yID0gc3R5bGUtPmNv
bG9yKCk7CiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlcigpLT5zZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IoKTsKLSAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSB8fCBjb2xvci5hbHBoYSgpID09IDAp
CisgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkgfHwgIWNvbG9yLmFscGhhKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIElmIHRoZSB0ZXh0IGNvbG9yIGVuZHMgdXAgYmVpbmcgdGhlIHNhbWUg
YXMgdGhlIHNlbGVjdGlvbiBiYWNrZ3JvdW5kLCBpbnZlcnQgdGhlIHNlbGVjdGlvbgpAQCAtNTE2
LDcgKzUwNSw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oaW4KICAg
ICBwLT5zYXZlKCk7CiAKICAgICBpbnQgYWRqdXN0ID0gc3RhcnRQb3MgPj0gYm94U3RhcnRPZmZz
ZXQgPyBib3hTdGFydE9mZnNldCA6IDA7Ci0gICAgcC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9u
dCwgc3ZnVGV4dFJ1bkZvcklubGluZVRleHRCb3godGV4dFJlbmRlcmVyKCktPnRleHQoKS0+Y2hh
cmFjdGVycygpICsgc3RhcnQoKSArIGJveFN0YXJ0T2Zmc2V0LCBsZW5ndGgsIHN0eWxlLCB0aGlz
LCBzdmdDaGFyLngpLAorICAgIHAtPmRyYXdIaWdobGlnaHRGb3JUZXh0KGZvbnQsIHN2Z1RleHRS
dW5Gb3JJbmxpbmVUZXh0Qm94KHRleHRSZW5kZXJlcigpLT5jaGFyYWN0ZXJzKCkgKyBzdGFydCgp
ICsgYm94U3RhcnRPZmZzZXQsIGxlbmd0aCwgc3R5bGUsIHRoaXMsIHN2Z0NoYXIueCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQoKGludCkgc3ZnQ2hhci54LCAoaW50KSBz
dmdDaGFyLnkgLSBmb250LmFzY2VudCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b250LmFzY2VudCgpICsgZm9udC5kZXNjZW50KCksIGNvbG9yLCBzdHlsZS0+Y29sb3JTcGFjZSgp
LCBzdGFydFBvcyAtIGFkanVzdCwgZW5kUG9zIC0gYWRqdXN0KTsKIApAQCAtNTg5LDYgKzU3OCwy
MzMgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb24oRQogICAgIGNvbnRl
eHQtPnJlc3RvcmUoKTsKIH0KIAordm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpidWlsZExheW91dElu
Zm9ybWF0aW9uKFNWR0NoYXJhY3RlckxheW91dEluZm8mIGluZm8sIFNWR0xhc3RHbHlwaEluZm8m
IGxhc3RHbHlwaCkKK3sKKyAgICBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0aGlzLT50ZXh0
UmVuZGVyZXIoKTsKKyAgICBBU1NFUlQodGV4dFJlbmRlcmVyKTsKKworICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IHRleHRSZW5kZXJlci0+c3R5bGUoaXNGaXJzdExpbmVTdHlsZSgpKTsKKyAgICBB
U1NFUlQoc3R5bGUpOworCisgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLT5mb250KCk7Cisg
ICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0ZXh0UmVuZGVyZXItPmNoYXJhY3RlcnMoKTsK
KworICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IGRpcmVjdGlvbigpOworICAgIHVu
c2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBzdGFydCgpOworICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9u
ID0gZW5kKCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gbGVuKCk7CisKKyAgICBjb25zdCBTVkdS
ZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKKyAgICBib29sIGlzVmVy
dGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHN2Z1N0eWxlKTsKKworICAgIGludCBj
aGFyc0NvbnN1bWVkID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
ICs9IGNoYXJzQ29uc3VtZWQpIHsKKyAgICAgICAgU1ZHQ2hhciBzdmdDaGFyOworCisgICAgICAg
IGlmIChpbmZvLmluUGF0aExheW91dCgpKQorICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YSA9
IFNWR0NoYXJPblBhdGg6OmNyZWF0ZSgpOworCisgICAgICAgIGZsb2F0IGdseXBoV2lkdGggPSAw
LjBmOworICAgICAgICBmbG9hdCBnbHlwaEhlaWdodCA9IDAuMGY7CisKKyAgICAgICAgaW50IGV4
dHJhQ2hhcnNBdmFpbGFibGUgPSBsZW5ndGggLSBpIC0gMTsKKworICAgICAgICBTdHJpbmcgdW5p
Y29kZVN0cjsKKyAgICAgICAgU3RyaW5nIGdseXBoTmFtZTsKKyAgICAgICAgaWYgKHRleHREaXJl
Y3Rpb24gPT0gUlRMKSB7CisgICAgICAgICAgICBnbHlwaFdpZHRoID0gY2FsY3VsYXRlR2x5cGhX
aWR0aChzdHlsZSwgZW5kUG9zaXRpb24gLSBpLCBleHRyYUNoYXJzQXZhaWxhYmxlLCBjaGFyc0Nv
bnN1bWVkLCBnbHlwaE5hbWUpOworICAgICAgICAgICAgZ2x5cGhIZWlnaHQgPSBjYWxjdWxhdGVH
bHlwaEhlaWdodChzdHlsZSwgZW5kUG9zaXRpb24gLSBpLCBleHRyYUNoYXJzQXZhaWxhYmxlKTsK
KyAgICAgICAgICAgIHVuaWNvZGVTdHIgPSBTdHJpbmcoY2hhcmFjdGVycyArIGVuZFBvc2l0aW9u
IC0gaSwgY2hhcnNDb25zdW1lZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBnbHlw
aFdpZHRoID0gY2FsY3VsYXRlR2x5cGhXaWR0aChzdHlsZSwgc3RhcnRQb3NpdGlvbiArIGksIGV4
dHJhQ2hhcnNBdmFpbGFibGUsIGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSk7CisgICAgICAgICAg
ICBnbHlwaEhlaWdodCA9IGNhbGN1bGF0ZUdseXBoSGVpZ2h0KHN0eWxlLCBzdGFydFBvc2l0aW9u
ICsgaSwgZXh0cmFDaGFyc0F2YWlsYWJsZSk7CisgICAgICAgICAgICB1bmljb2RlU3RyID0gU3Ry
aW5nKGNoYXJhY3RlcnMgKyBzdGFydFBvc2l0aW9uICsgaSwgY2hhcnNDb25zdW1lZCk7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIGFzc2lnbmVkWCA9IGZhbHNlOworICAgICAgICBib29sIGFz
c2lnbmVkWSA9IGZhbHNlOworCisgICAgICAgIGlmIChpbmZvLnhWYWx1ZUF2YWlsYWJsZSgpICYm
ICghaW5mby5pblBhdGhMYXlvdXQoKSB8fCAoaW5mby5pblBhdGhMYXlvdXQoKSAmJiAhaXNWZXJ0
aWNhbFRleHQpKSkgeworICAgICAgICAgICAgaWYgKCFpc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAg
ICAgICAgICBzdmdDaGFyLm5ld1RleHRDaHVuayA9IHRydWU7CisKKyAgICAgICAgICAgIGFzc2ln
bmVkWCA9IHRydWU7CisgICAgICAgICAgICBzdmdDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIGluZm8uY3VyeCA9IGluZm8ueFZhbHVlTmV4dCgpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGluZm8ueVZhbHVlQXZhaWxhYmxlKCkgJiYgKCFpbmZvLmluUGF0aExheW91
dCgpIHx8IChpbmZvLmluUGF0aExheW91dCgpICYmIGlzVmVydGljYWxUZXh0KSkpIHsKKyAgICAg
ICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgICAgICAgICBzdmdDaGFyLm5ld1Rl
eHRDaHVuayA9IHRydWU7CisKKyAgICAgICAgICAgIGFzc2lnbmVkWSA9IHRydWU7CisgICAgICAg
ICAgICBzdmdDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGluZm8uY3Vy
eSA9IGluZm8ueVZhbHVlTmV4dCgpOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgZHggPSAw
LjBmOworICAgICAgICBmbG9hdCBkeSA9IDAuMGY7CisKKyAgICAgICAgLy8gQXBwbHkgeC1heGlz
IHNoaWZ0CisgICAgICAgIGlmIChpbmZvLmR4VmFsdWVBdmFpbGFibGUoKSkgeworICAgICAgICAg
ICAgc3ZnQ2hhci5kcmF3blNlcGVyYXRlZCA9IHRydWU7CisKKyAgICAgICAgICAgIGR4ID0gaW5m
by5keFZhbHVlTmV4dCgpOworICAgICAgICAgICAgaW5mby5keCArPSBkeDsKKworICAgICAgICAg
ICAgaWYgKCFpbmZvLmluUGF0aExheW91dCgpKQorICAgICAgICAgICAgICAgIGluZm8uY3VyeCAr
PSBkeDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFwcGx5IHktYXhpcyBzaGlmdAorICAgICAg
ICBpZiAoaW5mby5keVZhbHVlQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgICAgIHN2Z0NoYXIuZHJh
d25TZXBlcmF0ZWQgPSB0cnVlOworCisgICAgICAgICAgICBkeSA9IGluZm8uZHlWYWx1ZU5leHQo
KTsKKyAgICAgICAgICAgIGluZm8uZHkgKz0gZHk7CisKKyAgICAgICAgICAgIGlmICghaW5mby5p
blBhdGhMYXlvdXQoKSkKKyAgICAgICAgICAgICAgICBpbmZvLmN1cnkgKz0gZHk7CisgICAgICAg
IH0KKworICAgICAgICAvLyBUYWtlIGxldHRlciAmIHdvcmQgc3BhY2luZyBhbmQga2VybmluZyBp
bnRvIGFjY291bnQKKyAgICAgICAgZmxvYXQgc3BhY2luZyA9IGZvbnQubGV0dGVyU3BhY2luZygp
ICsgY2FsY3VsYXRlQ1NTS2VybmluZyhzdHlsZSk7CisKKyAgICAgICAgY29uc3QgVUNoYXIqIGN1
cnJlbnRDaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzICsgKHRleHREaXJlY3Rpb24gPT0gUlRMID8gZW5k
UG9zaXRpb24gLSBpIDogc3RhcnRQb3NpdGlvbiArIGkpOworICAgICAgICBjb25zdCBVQ2hhciog
bGFzdENoYXJhY3RlciA9IDA7CisKKyAgICAgICAgaWYgKHRleHREaXJlY3Rpb24gPT0gUlRMKSB7
CisgICAgICAgICAgICBpZiAoaSA8IGVuZFBvc2l0aW9uKQorICAgICAgICAgICAgICAgIGxhc3RD
aGFyYWN0ZXIgPSBjaGFyYWN0ZXJzICsgZW5kUG9zaXRpb24gLSBpICsgIDE7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBpZiAoaSA+IDApCisgICAgICAgICAgICAgICAgbGFzdENoYXJh
Y3RlciA9IGNoYXJhY3RlcnMgKyBzdGFydFBvc2l0aW9uICsgaSAtIDE7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBGSVhNRTogU1ZHIEtlcm5pbmcgZG9lc24ndCBnZXQgYXBwbGllZCBvbiB0ZXh0
cyBvbiBwYXRoLgorICAgICAgICBib29sIGFwcGxpZWRTVkdLZXJuaW5nID0gYXBwbHlTVkdLZXJu
aW5nKGluZm8sIHN0eWxlLCBsYXN0R2x5cGgsIHVuaWNvZGVTdHIsIGdseXBoTmFtZSwgaXNWZXJ0
aWNhbFRleHQpOworICAgICAgICBpZiAoaW5mby5uZXh0RHJhd25TZXBlcmF0ZWQgfHwgc3BhY2lu
ZyAhPSAwLjBmIHx8IGFwcGxpZWRTVkdLZXJuaW5nKSB7CisgICAgICAgICAgICBpbmZvLm5leHRE
cmF3blNlcGVyYXRlZCA9IGZhbHNlOworICAgICAgICAgICAgc3ZnQ2hhci5kcmF3blNlcGVyYXRl
ZCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlciAmJiBG
b250Ojp0cmVhdEFzU3BhY2UoKmN1cnJlbnRDaGFyYWN0ZXIpICYmIGxhc3RDaGFyYWN0ZXIgJiYg
IUZvbnQ6OnRyZWF0QXNTcGFjZSgqbGFzdENoYXJhY3RlcikpIHsKKyAgICAgICAgICAgIHNwYWNp
bmcgKz0gZm9udC53b3JkU3BhY2luZygpOworCisgICAgICAgICAgICBpZiAoc3BhY2luZyAhPSAw
LjBmICYmICFpbmZvLmluUGF0aExheW91dCgpKQorICAgICAgICAgICAgICAgIGluZm8ubmV4dERy
YXduU2VwZXJhdGVkID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGZsb2F0IG9yaWVudGF0
aW9uQW5nbGUgPSBnbHlwaE9yaWVudGF0aW9uVG9BbmdsZShzdmdTdHlsZSwgaXNWZXJ0aWNhbFRl
eHQsICpjdXJyZW50Q2hhcmFjdGVyKTsKKworICAgICAgICBmbG9hdCB4T3JpZW50YXRpb25TaGlm
dCA9IDAuMGY7CisgICAgICAgIGZsb2F0IHlPcmllbnRhdGlvblNoaWZ0ID0gMC4wZjsKKyAgICAg
ICAgZmxvYXQgZ2x5cGhBZHZhbmNlID0gYXBwbHlHbHlwaEFkdmFuY2VBbmRTaGlmdFJlc3BlY3Rp
bmdPcmllbnRhdGlvbihpc1ZlcnRpY2FsVGV4dCwgb3JpZW50YXRpb25BbmdsZSwgZ2x5cGhXaWR0
aCwgZ2x5cGhIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udCwgc3ZnQ2hhciwgeE9yaWVu
dGF0aW9uU2hpZnQsIHlPcmllbnRhdGlvblNoaWZ0KTsKKworICAgICAgICAvLyBIYW5kbGUgdGV4
dFBhdGggbGF5b3V0IG1vZGUKKyAgICAgICAgaWYgKGluZm8uaW5QYXRoTGF5b3V0KCkpIHsKKyAg
ICAgICAgICAgIGZsb2F0IGV4dHJhQWR2YW5jZSA9IGlzVmVydGljYWxUZXh0ID8gZHkgOiBkeDsK
KyAgICAgICAgICAgIGZsb2F0IG5ld09mZnNldCA9IEZMVF9NSU47CisKKyAgICAgICAgICAgIGlm
IChhc3NpZ25lZFggJiYgIWlzVmVydGljYWxUZXh0KQorICAgICAgICAgICAgICAgIG5ld09mZnNl
dCA9IGluZm8uY3VyeDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFzc2lnbmVkWSAmJiBpc1ZlcnRp
Y2FsVGV4dCkKKyAgICAgICAgICAgICAgICBuZXdPZmZzZXQgPSBpbmZvLmN1cnk7CisKKyAgICAg
ICAgICAgIGZsb2F0IGNvcnJlY3RlZEdseXBoQWR2YW5jZSA9IGdseXBoQWR2YW5jZTsKKworICAg
ICAgICAgICAgLy8gSGFuZGxlIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgYnkgc3Bl
Y2lmeWluZyBwZXItY2hhcmFjdGVyIHNjYWxlIG9wZXJhdGlvbnMKKyAgICAgICAgICAgIGlmIChp
bmZvLnBhdGhUZXh0TGVuZ3RoID4gMC4wZiAmJiBpbmZvLnBhdGhDaHVua0xlbmd0aCA+IDAuMGYp
IHsgCisgICAgICAgICAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KSB7CisgICAgICAgICAgICAg
ICAgICAgIHN2Z0NoYXIucGF0aERhdGEtPnlTY2FsZSA9IGluZm8ucGF0aENodW5rTGVuZ3RoIC8g
aW5mby5wYXRoVGV4dExlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgc3BhY2luZyAqPSBzdmdD
aGFyLnBhdGhEYXRhLT55U2NhbGU7CisgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RlZEdseXBo
QWR2YW5jZSAqPSBzdmdDaGFyLnBhdGhEYXRhLT55U2NhbGU7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+eFNjYWxlID0gaW5m
by5wYXRoQ2h1bmtMZW5ndGggLyBpbmZvLnBhdGhUZXh0TGVuZ3RoOworICAgICAgICAgICAgICAg
ICAgICBzcGFjaW5nICo9IHN2Z0NoYXIucGF0aERhdGEtPnhTY2FsZTsKKyAgICAgICAgICAgICAg
ICAgICAgY29ycmVjdGVkR2x5cGhBZHZhbmNlICo9IHN2Z0NoYXIucGF0aERhdGEtPnhTY2FsZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEhhbmRs
ZSBsZXR0ZXIgJiB3b3JkIHNwYWNpbmcgb24gdGV4dCBwYXRoCisgICAgICAgICAgICBmbG9hdCBw
YXRoRXh0cmFBZHZhbmNlID0gaW5mby5wYXRoRXh0cmFBZHZhbmNlOworICAgICAgICAgICAgaW5m
by5wYXRoRXh0cmFBZHZhbmNlICs9IHNwYWNpbmc7CisKKyAgICAgICAgICAgIHN2Z0NoYXIucGF0
aERhdGEtPmhpZGRlbiA9ICFpbmZvLm5leHRQYXRoTGF5b3V0UG9pbnRBbmRBbmdsZShjb3JyZWN0
ZWRHbHlwaEFkdmFuY2UsIGV4dHJhQWR2YW5jZSwgbmV3T2Zmc2V0KTsKKyAgICAgICAgICAgIHN2
Z0NoYXIuZHJhd25TZXBlcmF0ZWQgPSB0cnVlOworCisgICAgICAgICAgICBpbmZvLnBhdGhFeHRy
YUFkdmFuY2UgPSBwYXRoRXh0cmFBZHZhbmNlOworICAgICAgICB9CisKKyAgICAgICAgLy8gQXBw
bHkgcm90YXRpb24KKyAgICAgICAgaWYgKGluZm8uYW5nbGVWYWx1ZUF2YWlsYWJsZSgpKQorICAg
ICAgICAgICAgaW5mby5hbmdsZSA9IGluZm8uYW5nbGVWYWx1ZU5leHQoKTsKKworICAgICAgICAv
LyBBcHBseSBiYXNlbGluZS1zaGlmdAorICAgICAgICBpZiAoaW5mby5iYXNlbGluZVNoaWZ0VmFs
dWVBdmFpbGFibGUoKSkgeworICAgICAgICAgICAgc3ZnQ2hhci5kcmF3blNlcGVyYXRlZCA9IHRy
dWU7CisgICAgICAgICAgICBmbG9hdCBzaGlmdCA9IGluZm8uYmFzZWxpbmVTaGlmdFZhbHVlTmV4
dCgpOworCisgICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCisgICAgICAgICAgICAgICAg
aW5mby5zaGlmdHggKz0gc2hpZnQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
aW5mby5zaGlmdHkgLT0gc2hpZnQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBUYWtlIGRvbWlu
YW50LWJhc2VsaW5lIC8gYWxpZ25tZW50LWJhc2VsaW5lIGludG8gYWNjb3VudAorICAgICAgICB5
T3JpZW50YXRpb25TaGlmdCArPSBhbGlnbm1lbnRCYXNlbGluZVRvU2hpZnQoaXNWZXJ0aWNhbFRl
eHQsIHRleHRSZW5kZXJlciwgZm9udCk7CisKKyAgICAgICAgc3ZnQ2hhci54ID0gaW5mby5jdXJ4
OworICAgICAgICBzdmdDaGFyLnkgPSBpbmZvLmN1cnk7CisgICAgICAgIHN2Z0NoYXIuYW5nbGUg
PSBpbmZvLmFuZ2xlOworCisgICAgICAgIC8vIEZvciB0ZXh0IHBhdGhzIGFueSBzaGlmdCAoZHgv
ZHkvYmFzZWxpbmUtc2hpZnQpIGhhcyB0byBiZSBhcHBsaWVkIGFmdGVyIHRoZSByb3RhdGlvbgor
ICAgICAgICBpZiAoIWluZm8uaW5QYXRoTGF5b3V0KCkpIHsKKyAgICAgICAgICAgIHN2Z0NoYXIu
eCArPSBpbmZvLnNoaWZ0eCArIHhPcmllbnRhdGlvblNoaWZ0OworICAgICAgICAgICAgc3ZnQ2hh
ci55ICs9IGluZm8uc2hpZnR5ICsgeU9yaWVudGF0aW9uU2hpZnQ7CisKKyAgICAgICAgICAgIGlm
IChvcmllbnRhdGlvbkFuZ2xlICE9IDAuMGYpCisgICAgICAgICAgICAgICAgc3ZnQ2hhci5hbmds
ZSArPSBvcmllbnRhdGlvbkFuZ2xlOworCisgICAgICAgICAgICBpZiAoc3ZnQ2hhci5hbmdsZSAh
PSAwLjBmKQorICAgICAgICAgICAgICAgIHN2Z0NoYXIuZHJhd25TZXBlcmF0ZWQgPSB0cnVlOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+b3JpZW50YXRp
b25BbmdsZSA9IG9yaWVudGF0aW9uQW5nbGU7CisKKyAgICAgICAgICAgIGlmIChpc1ZlcnRpY2Fs
VGV4dCkKKyAgICAgICAgICAgICAgICBzdmdDaGFyLmFuZ2xlIC09IDkwLjBmOworCisgICAgICAg
ICAgICBzdmdDaGFyLnBhdGhEYXRhLT54U2hpZnQgPSBpbmZvLnNoaWZ0eCArIHhPcmllbnRhdGlv
blNoaWZ0OworICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+eVNoaWZ0ID0gaW5mby5zaGlm
dHkgKyB5T3JpZW50YXRpb25TaGlmdDsKKworICAgICAgICAgICAgLy8gVHJhbnNsYXRlIHRvIGds
eXBoIG1pZHBvaW50CisgICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpIHsKKyAgICAgICAg
ICAgICAgICBzdmdDaGFyLnBhdGhEYXRhLT54U2hpZnQgKz0gaW5mby5keDsKKyAgICAgICAgICAg
ICAgICBzdmdDaGFyLnBhdGhEYXRhLT55U2hpZnQgLT0gZ2x5cGhBZHZhbmNlIC8gMi4wZjsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+eFNo
aWZ0IC09IGdseXBoQWR2YW5jZSAvIDIuMGY7CisgICAgICAgICAgICAgICAgc3ZnQ2hhci5wYXRo
RGF0YS0+eVNoaWZ0ICs9IGluZm8uZHk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICAvLyBBZHZhbmNlIHRvIG5ldyBwb3NpdGlvbgorICAgICAgICBpZiAoaXNWZXJ0aWNhbFRl
eHQpIHsKKyAgICAgICAgICAgIHN2Z0NoYXIuZHJhd25TZXBlcmF0ZWQgPSB0cnVlOworICAgICAg
ICAgICAgaW5mby5jdXJ5ICs9IGdseXBoQWR2YW5jZSArIHNwYWNpbmc7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgaW5mby5jdXJ4ICs9IGdseXBoQWR2YW5jZSArIHNwYWNpbmc7CisKKyAg
ICAgICAgLy8gQWR2YW5jZSB0byBuZXh0IGNoYXJhY3RlciBncm91cAorICAgICAgICBmb3IgKGlu
dCBrID0gMDsgayA8IGNoYXJzQ29uc3VtZWQ7ICsraykgeworICAgICAgICAgICAgaW5mby5zdmdD
aGFycy5hcHBlbmQoc3ZnQ2hhcik7CisgICAgICAgICAgICBpbmZvLnByb2Nlc3NlZFNpbmdsZUNo
YXJhY3RlcigpOworICAgICAgICAgICAgc3ZnQ2hhci5kcmF3blNlcGVyYXRlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgc3ZnQ2hhci5uZXdUZXh0Q2h1bmsgPSBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1NWR0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9TVkdJbmxpbmVUZXh0Qm94LmgJKHJldmlzaW9uIDU5MDE1KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvU1ZHSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3MiArMjgsNTcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgU1ZHUm9vdElubGluZUJveDsK
K2NsYXNzIFNWR1Jvb3RJbmxpbmVCb3g7CiAKLSAgICBzdHJ1Y3QgU1ZHQ2hhcjsKLSAgICBzdHJ1
Y3QgU1ZHVGV4dERlY29yYXRpb25JbmZvOworc3RydWN0IFNWR0NoYXI7CitzdHJ1Y3QgU1ZHQ2hh
cmFjdGVyTGF5b3V0SW5mbzsKK3N0cnVjdCBTVkdMYXN0R2x5cGhJbmZvOworc3RydWN0IFNWR1Rl
eHREZWNvcmF0aW9uSW5mbzsKK3N0cnVjdCBTVkdUZXh0UGFpbnRJbmZvOwogCi0gICAgZW51bSBT
VkdUZXh0UGFpbnRTdWJwaGFzZSB7Ci0gICAgICAgIFNWR1RleHRQYWludFN1YnBoYXNlQmFja2dy
b3VuZCwKLSAgICAgICAgU1ZHVGV4dFBhaW50U3VicGhhc2VHbHlwaEZpbGwsCi0gICAgICAgIFNW
R1RleHRQYWludFN1YnBoYXNlR2x5cGhGaWxsU2VsZWN0aW9uLAotICAgICAgICBTVkdUZXh0UGFp
bnRTdWJwaGFzZUdseXBoU3Ryb2tlLAotICAgICAgICBTVkdUZXh0UGFpbnRTdWJwaGFzZUdseXBo
U3Ryb2tlU2VsZWN0aW9uLAotICAgICAgICBTVkdUZXh0UGFpbnRTdWJwaGFzZUZvcmVncm91bmQK
LSAgICB9OwotCi0gICAgc3RydWN0IFNWR1RleHRQYWludEluZm8gewotICAgICAgICBTVkdUZXh0
UGFpbnRJbmZvKCkKLSAgICAgICAgICAgIDogYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSgwKQotICAg
ICAgICAgICAgLCBzdWJwaGFzZShTVkdUZXh0UGFpbnRTdWJwaGFzZUJhY2tncm91bmQpCi0gICAg
ICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlclNWR1Jlc291cmNlKiBhY3RpdmVQYWlu
dGluZ1Jlc291cmNlOwotICAgICAgICBTVkdUZXh0UGFpbnRTdWJwaGFzZSBzdWJwaGFzZTsKLSAg
ICB9OwotCi0gICAgY2xhc3MgU1ZHSW5saW5lVGV4dEJveCA6IHB1YmxpYyBJbmxpbmVUZXh0Qm94
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFNWR0lubGluZVRleHRCb3goUmVuZGVyT2JqZWN0KiBv
YmopOwotCi0gICAgICAgIHZpcnR1YWwgaW50IHZpcnR1YWxIZWlnaHQoKSBjb25zdCB7IHJldHVy
biBtX2hlaWdodDsgfQotICAgICAgICB2b2lkIHNldEhlaWdodChpbnQgaCkgeyBtX2hlaWdodCA9
IGg7IH0KLQotICAgICAgICB2aXJ0dWFsIGludCBzZWxlY3Rpb25Ub3AoKTsKLSAgICAgICAgdmly
dHVhbCBpbnQgc2VsZWN0aW9uSGVpZ2h0KCk7Ci0KLSAgICAgICAgdmlydHVhbCBpbnQgb2Zmc2V0
Rm9yUG9zaXRpb24oaW50IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMgPSB0cnVlKSBjb25z
dDsKLSAgICAgICAgdmlydHVhbCBpbnQgcG9zaXRpb25Gb3JPZmZzZXQoaW50IG9mZnNldCkgY29u
c3Q7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHkpOwotICAg
ICAgICB2aXJ0dWFsIEludFJlY3Qgc2VsZWN0aW9uUmVjdChpbnQgYWJzeCwgaW50IGFic3ksIGlu
dCBzdGFydFBvcywgaW50IGVuZFBvcyk7CitjbGFzcyBTVkdJbmxpbmVUZXh0Qm94IDogcHVibGlj
IElubGluZVRleHRCb3ggeworcHVibGljOgorICAgIFNWR0lubGluZVRleHRCb3goUmVuZGVyT2Jq
ZWN0KiBvYmopOwogCi0gICAgICAgIC8vIFNWR3MgY3VzdG9tIHBhaW50IHRleHQgbWV0aG9kCi0g
ICAgICAgIHZvaWQgcGFpbnRDaGFyYWN0ZXJzKFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgaW50
IHR4LCBpbnQgdHksIGNvbnN0IFNWR0NoYXImLCBjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW5n
dGgsIFNWR1RleHRQYWludEluZm8mKTsKKyAgICB2aXJ0dWFsIGludCB2aXJ0dWFsSGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KKyAgICB2b2lkIHNldEhlaWdodChpbnQgaCkgeyBt
X2hlaWdodCA9IGg7IH0KIAotICAgICAgICAvLyBTVkdzIGN1c3RvbSBwYWludCBzZWxlY3Rpb24g
bWV0aG9kCi0gICAgICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oaW50IGJveFN0YXJ0T2Zmc2V0LCBj
b25zdCBTVkdDaGFyJiwgY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBHcmFwaGljc0NvbnRleHQq
LCBSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQmKTsKKyAgICB2aXJ0dWFsIGludCBzZWxlY3Rpb25U
b3AoKSB7IHJldHVybiBtX3k7IH0KKyAgICB2aXJ0dWFsIGludCBzZWxlY3Rpb25IZWlnaHQoKSB7
IHJldHVybiBtX2hlaWdodDsgfQogCi0gICAgICAgIC8vIFNWR3MgY3VzdG9tIHBhaW50IGRlY29y
YXRpb24gbWV0aG9kCi0gICAgICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uKEVUZXh0RGVjb3JhdGlv
biwgR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHksIGludCB3aWR0aCwgY29uc3QgU1ZH
Q2hhciYsIGNvbnN0IFNWR1RleHREZWNvcmF0aW9uSW5mbyYpOworICAgIHZpcnR1YWwgaW50IG9m
ZnNldEZvclBvc2l0aW9uKGludCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzID0gdHJ1ZSkg
Y29uc3Q7CisgICAgdmlydHVhbCBpbnQgcG9zaXRpb25Gb3JPZmZzZXQoaW50IG9mZnNldCkgY29u
c3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSk7CisgICAgdmly
dHVhbCBJbnRSZWN0IHNlbGVjdGlvblJlY3QoaW50IGFic3gsIGludCBhYnN5LCBpbnQgc3RhcnRQ
b3MsIGludCBlbmRQb3MpOworCisgICAgLy8gU1ZHcyBjdXN0b20gcGFpbnQgdGV4dCBtZXRob2QK
KyAgICB2b2lkIHBhaW50Q2hhcmFjdGVycyhSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGludCB0
eCwgaW50IHR5LCBjb25zdCBTVkdDaGFyJiwgY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVuZ3Ro
LCBTVkdUZXh0UGFpbnRJbmZvJik7CisKKyAgICAvLyBTVkdzIGN1c3RvbSBwYWludCBzZWxlY3Rp
b24gbWV0aG9kCisgICAgdm9pZCBwYWludFNlbGVjdGlvbihpbnQgYm94U3RhcnRPZmZzZXQsIGNv
bnN0IFNWR0NoYXImLCBjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIEdyYXBoaWNzQ29udGV4dCos
IFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYpOworCisgICAgLy8gU1ZHcyBjdXN0b20gcGFpbnQg
ZGVjb3JhdGlvbiBtZXRob2QKKyAgICB2b2lkIHBhaW50RGVjb3JhdGlvbihFVGV4dERlY29yYXRp
b24sIEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5LCBpbnQgd2lkdGgsIGNvbnN0IFNW
R0NoYXImLCBjb25zdCBTVkdUZXh0RGVjb3JhdGlvbkluZm8mKTsKICAKLSAgICAgICAgU1ZHUm9v
dElubGluZUJveCogc3ZnUm9vdElubGluZUJveCgpIGNvbnN0OworICAgIFNWR1Jvb3RJbmxpbmVC
b3gqIHN2Z1Jvb3RJbmxpbmVCb3goKSBjb25zdDsKIAotICAgICAgICAvLyBIZWxwZXIgZnVuY3Rp
b25zIHNoYXJlZCB3aXRoIFNWR1Jvb3RJbmxpbmVCb3ggICAgIAotICAgICAgICBmbG9hdCBjYWxj
dWxhdGVHbHlwaFdpZHRoKFJlbmRlclN0eWxlKiBzdHlsZSwgaW50IG9mZnNldCwgaW50IGV4dHJh
Q2hhcnNBdmFpbGFibGUsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNv
bnN0OwotICAgICAgICBmbG9hdCBjYWxjdWxhdGVHbHlwaEhlaWdodChSZW5kZXJTdHlsZSosIGlu
dCBvZmZzZXQsIGludCBleHRyYUNoYXJzQXZhaWxhYmxlKSBjb25zdDsKLQotICAgICAgICBGbG9h
dFJlY3QgY2FsY3VsYXRlR2x5cGhCb3VuZGFyaWVzKFJlbmRlclN0eWxlKiwgaW50IG9mZnNldCwg
Y29uc3QgU1ZHQ2hhciYpIGNvbnN0OwotICAgICAgICBTVkdDaGFyKiBjbG9zZXN0Q2hhcmFjdGVy
VG9Qb3NpdGlvbihpbnQgeCwgaW50IHksIGludCYgb2Zmc2V0KSBjb25zdDsKLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJTVkdJbmxpbmVUZXh0OwotICAgICAgICBi
b29sIHN2Z0NoYXJhY3RlckhpdHNQb3NpdGlvbihpbnQgeCwgaW50IHksIGludCYgb2Zmc2V0KSBj
b25zdDsKLSAgICAgICAgYm9vbCBjaHVua1NlbGVjdGlvblN0YXJ0RW5kKGNvbnN0IFVDaGFyKiBj
aHVuaywgaW50IGNodW5rTGVuZ3RoLCBpbnQmIHNlbGVjdGlvblN0YXJ0LCBpbnQmIHNlbGVjdGlv
bkVuZCk7Ci0gICAgICAgIAotICAgICAgICBpbnQgbV9oZWlnaHQ7Ci0gICAgfTsKKyAgICAvLyBI
ZWxwZXIgZnVuY3Rpb25zIHNoYXJlZCB3aXRoIFNWR1Jvb3RJbmxpbmVCb3ggICAgIAorICAgIGZs
b2F0IGNhbGN1bGF0ZUdseXBoV2lkdGgoUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQgb2Zmc2V0LCBp
bnQgZXh0cmFDaGFyc0F2YWlsYWJsZSwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBo
TmFtZSkgY29uc3Q7CisgICAgZmxvYXQgY2FsY3VsYXRlR2x5cGhIZWlnaHQoUmVuZGVyU3R5bGUq
LCBpbnQgb2Zmc2V0LCBpbnQgZXh0cmFDaGFyc0F2YWlsYWJsZSkgY29uc3Q7CisKKyAgICBGbG9h
dFJlY3QgY2FsY3VsYXRlR2x5cGhCb3VuZGFyaWVzKFJlbmRlclN0eWxlKiwgaW50IG9mZnNldCwg
Y29uc3QgU1ZHQ2hhciYpIGNvbnN0OworICAgIFNWR0NoYXIqIGNsb3Nlc3RDaGFyYWN0ZXJUb1Bv
c2l0aW9uKGludCB4LCBpbnQgeSwgaW50JiBvZmZzZXQpIGNvbnN0OworCisgICAgdm9pZCBidWls
ZExheW91dEluZm9ybWF0aW9uKFNWR0NoYXJhY3RlckxheW91dEluZm8mLCBTVkdMYXN0R2x5cGhJ
bmZvJik7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlclNWR0lubGluZVRleHQ7
CisgICAgYm9vbCBzdmdDaGFyYWN0ZXJIaXRzUG9zaXRpb24oaW50IHgsIGludCB5LCBpbnQmIG9m
ZnNldCkgY29uc3Q7CisgICAgYm9vbCBjaHVua1NlbGVjdGlvblN0YXJ0RW5kKGNvbnN0IFVDaGFy
KiBjaHVuaywgaW50IGNodW5rTGVuZ3RoLCBpbnQmIHNlbGVjdGlvblN0YXJ0LCBpbnQmIHNlbGVj
dGlvbkVuZCk7CisgICAgCisgICAgaW50IG1faGVpZ2h0OworfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNw
cAkocmV2aXNpb24gNTkwMTUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNU
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgIlNWR1Jv
b3RJbmxpbmVCb3guaCIKICNpbmNsdWRlICJTVkdTdG9wRWxlbWVudC5oIgogI2luY2x1ZGUgIlNW
R1N0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmgiCiAK
ICNpbmNsdWRlIDxtYXRoLmg+CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxp
bmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVC
b3guY3BwCShyZXZpc2lvbiA1OTAxNSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxp
bmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgT2xpdmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4KICAqICAgICAg
ICAgICAoQykgMjAwNiBBcHBsZSBDb21wdXRlciBJbmMuCiAgKiAgICAgICAgICAgKEMpIDIwMDcg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CkBAIC0yOCwyNSArMjYsMTQg
QEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVCb3guaCIKIAotI2lu
Y2x1ZGUgIkVkaXRvci5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUg
IkZyYW1lLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVy
QmxvY2suaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1
ZGUgIlNWR0lubGluZUZsb3dCb3guaCIKICNpbmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94LmgiCi0j
aW5jbHVkZSAiU1ZHRm9udEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZURlZnMu
aCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCisjaW5jbHVkZSAiU1ZHVGV4dExheW91
dFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaCIKLSNp
bmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJUZXh0LmgiCi0jaW5jbHVkZSAi
VW5pY29kZVJhbmdlLmgiCi0KLSNpbmNsdWRlIDxmbG9hdC5oPgogCiAvLyBUZXh0IGNodW5rIGNy
ZWF0aW9uIGlzIGNvbXBsZXggYW5kIHRoZSB3aG9sZSBwcm9jZXNzCiAvLyBjYW4gZWFzaWx5IGJl
IHRyYWNlZCBieSBzZXR0aW5nIHRoaXMgdmFyaWFibGUgPiAwLgpAQCAtNTQsMjE3ICs0MSw2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGlubGluZSBib29sIGlzVmVydGljYWxX
cml0aW5nTW9kZShjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUpCi17Ci0gICAgcmV0dXJuIHN0
eWxlLT53cml0aW5nTW9kZSgpID09IFdNX1RCUkwgfHwgc3R5bGUtPndyaXRpbmdNb2RlKCkgPT0g
V01fVEI7IAotfQotCi1zdGF0aWMgaW5saW5lIEVBbGlnbm1lbnRCYXNlbGluZSBkb21pbmFudEJh
c2VsaW5lVG9TaGlmdChib29sIGlzVmVydGljYWxUZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHRl
eHQsIGNvbnN0IEZvbnQmIGZvbnQpCi17Ci0gICAgQVNTRVJUKHRleHQpOwotCi0gICAgY29uc3Qg
U1ZHUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dC0+c3R5bGUoKSA/IHRleHQtPnN0eWxlKCktPnN2
Z1N0eWxlKCkgOiAwOwotICAgIEFTU0VSVChzdHlsZSk7Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUgPSB0ZXh0LT5wYXJlbnQoKSAmJiB0ZXh0LT5wYXJlbnQoKS0+c3R5
bGUoKSA/IHRleHQtPnBhcmVudCgpLT5zdHlsZSgpLT5zdmdTdHlsZSgpIDogMDsKLQotICAgIEVE
b21pbmFudEJhc2VsaW5lIGJhc2VsaW5lID0gc3R5bGUtPmRvbWluYW50QmFzZWxpbmUoKTsKLSAg
ICBpZiAoYmFzZWxpbmUgPT0gREJfQVVUTykgewotICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQp
Ci0gICAgICAgICAgICBiYXNlbGluZSA9IERCX0NFTlRSQUw7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGJhc2VsaW5lID0gREJfQUxQSEFCRVRJQzsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGJh
c2VsaW5lKSB7Ci0gICAgY2FzZSBEQl9VU0VfU0NSSVBUOgotICAgICAgICAvLyBUT0RPOiBUaGUg
ZG9taW5hbnQtYmFzZWxpbmUgYW5kIHRoZSBiYXNlbGluZS10YWJsZSBjb21wb25lbnRzIGFyZSBz
ZXQgYnkKLSAgICAgICAgLy8gICAgICAgZGV0ZXJtaW5pbmcgdGhlIHByZWRvbWluYW50IHNjcmlw
dCBvZiB0aGUgY2hhcmFjdGVyIGRhdGEgY29udGVudC4KLSAgICAgICAgcmV0dXJuIEFCX0FMUEhB
QkVUSUM7Ci0gICAgY2FzZSBEQl9OT19DSEFOR0U6Ci0gICAgewotICAgICAgICBpZiAocGFyZW50
U3R5bGUpCi0gICAgICAgICAgICByZXR1cm4gZG9taW5hbnRCYXNlbGluZVRvU2hpZnQoaXNWZXJ0
aWNhbFRleHQsIHRleHQtPnBhcmVudCgpLCBmb250KTsKLQotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIEFCX0FVVE87Ci0gICAgfQotICAgIGNhc2UgREJfUkVT
RVRfU0laRToKLSAgICB7Ci0gICAgICAgIGlmIChwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgIHJl
dHVybiBkb21pbmFudEJhc2VsaW5lVG9TaGlmdChpc1ZlcnRpY2FsVGV4dCwgdGV4dC0+cGFyZW50
KCksIGZvbnQpOwotCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1
cm4gQUJfQVVUTzsgICAgCi0gICAgfQotICAgIGNhc2UgREJfSURFT0dSQVBISUM6Ci0gICAgICAg
IHJldHVybiBBQl9JREVPR1JBUEhJQzsKLSAgICBjYXNlIERCX0FMUEhBQkVUSUM6Ci0gICAgICAg
IHJldHVybiBBQl9BTFBIQUJFVElDOwotICAgIGNhc2UgREJfSEFOR0lORzoKLSAgICAgICAgcmV0
dXJuIEFCX0hBTkdJTkc7Ci0gICAgY2FzZSBEQl9NQVRIRU1BVElDQUw6Ci0gICAgICAgIHJldHVy
biBBQl9NQVRIRU1BVElDQUw7Ci0gICAgY2FzZSBEQl9DRU5UUkFMOgotICAgICAgICByZXR1cm4g
QUJfQ0VOVFJBTDsKLSAgICBjYXNlIERCX01JRERMRToKLSAgICAgICAgcmV0dXJuIEFCX01JRERM
RTsKLSAgICBjYXNlIERCX1RFWFRfQUZURVJfRURHRToKLSAgICAgICAgcmV0dXJuIEFCX1RFWFRf
QUZURVJfRURHRTsKLSAgICBjYXNlIERCX1RFWFRfQkVGT1JFX0VER0U6Ci0gICAgICAgIHJldHVy
biBBQl9URVhUX0JFRk9SRV9FREdFOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gQUJfQVVUTzsKLSAgICB9Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgZmxvYXQgYWxpZ25tZW50QmFzZWxpbmVUb1NoaWZ0KGJvb2wgaXNWZXJ0aWNhbFRleHQs
IGNvbnN0IFJlbmRlck9iamVjdCogdGV4dCwgY29uc3QgRm9udCYgZm9udCkKLXsKLSAgICBBU1NF
UlQodGV4dCk7Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0LT5zdHls
ZSgpID8gdGV4dC0+c3R5bGUoKS0+c3ZnU3R5bGUoKSA6IDA7Ci0gICAgQVNTRVJUKHN0eWxlKTsK
LQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IHRleHQtPnBhcmVudCgp
ICYmIHRleHQtPnBhcmVudCgpLT5zdHlsZSgpID8gdGV4dC0+cGFyZW50KCktPnN0eWxlKCktPnN2
Z1N0eWxlKCkgOiAwOwotCi0gICAgRUFsaWdubWVudEJhc2VsaW5lIGJhc2VsaW5lID0gc3R5bGUt
PmFsaWdubWVudEJhc2VsaW5lKCk7Ci0gICAgaWYgKGJhc2VsaW5lID09IEFCX0FVVE8pIHsKLSAg
ICAgICAgaWYgKHBhcmVudFN0eWxlICYmIHN0eWxlLT5kb21pbmFudEJhc2VsaW5lKCkgPT0gREJf
QVVUTykKLSAgICAgICAgICAgIGJhc2VsaW5lID0gZG9taW5hbnRCYXNlbGluZVRvU2hpZnQoaXNW
ZXJ0aWNhbFRleHQsIHRleHQtPnBhcmVudCgpLCBmb250KTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgYmFzZWxpbmUgPSBkb21pbmFudEJhc2VsaW5lVG9TaGlmdChpc1ZlcnRpY2FsVGV4dCwg
dGV4dCwgZm9udCk7Ci0KLSAgICAgICAgQVNTRVJUKGJhc2VsaW5lICE9IEFCX0FVVE8pOyAgICAK
LSAgICB9Ci0KLSAgICAvLyBOb3RlOiBodHRwOi8vd2lraS5hcGFjaGUub3JnL3htbGdyYXBoaWNz
LWZvcC9MaW5lTGF5b3V0L0FsaWdubWVudEhhbmRsaW5nCi0gICAgc3dpdGNoIChiYXNlbGluZSkg
ewotICAgIGNhc2UgQUJfQkFTRUxJTkU6Ci0gICAgewotICAgICAgICBpZiAocGFyZW50U3R5bGUp
Ci0gICAgICAgICAgICByZXR1cm4gZG9taW5hbnRCYXNlbGluZVRvU2hpZnQoaXNWZXJ0aWNhbFRl
eHQsIHRleHQtPnBhcmVudCgpLCBmb250KTsKLQotICAgICAgICByZXR1cm4gMC4wZjsKLSAgICB9
Ci0gICAgY2FzZSBBQl9CRUZPUkVfRURHRToKLSAgICBjYXNlIEFCX1RFWFRfQkVGT1JFX0VER0U6
Ci0gICAgICAgIHJldHVybiBmb250LmFzY2VudCgpOwotICAgIGNhc2UgQUJfTUlERExFOgotICAg
ICAgICByZXR1cm4gZm9udC54SGVpZ2h0KCkgLyAyLjBmOwotICAgIGNhc2UgQUJfQ0VOVFJBTDoK
LSAgICAgICAgLy8gTm90IG5lZWRlZCwgd2UncmUgdGFraW5nIHRoaXMgaW50byBhY2NvdW50IGFs
cmVhZHkgZm9yIHZlcnRpY2FsIHRleHQhCi0gICAgICAgIC8vIHJldHVybiAoZm9udC5hc2NlbnQo
KSAtIGZvbnQuZGVzY2VudCgpKSAvIDIuMGY7Ci0gICAgICAgIHJldHVybiAwLjBmOwotICAgIGNh
c2UgQUJfQUZURVJfRURHRToKLSAgICBjYXNlIEFCX1RFWFRfQUZURVJfRURHRToKLSAgICBjYXNl
IEFCX0lERU9HUkFQSElDOgotICAgICAgICByZXR1cm4gZm9udC5kZXNjZW50KCk7Ci0gICAgY2Fz
ZSBBQl9BTFBIQUJFVElDOgotICAgICAgICByZXR1cm4gMC4wZjsKLSAgICBjYXNlIEFCX0hBTkdJ
Tkc6Ci0gICAgICAgIHJldHVybiBmb250LmFzY2VudCgpICogOC4wZiAvIDEwLjBmOwotICAgIGNh
c2UgQUJfTUFUSEVNQVRJQ0FMOgotICAgICAgICByZXR1cm4gZm9udC5hc2NlbnQoKSAvIDIuMGY7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybiAwLjBmOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSBmbG9hdCBnbHlwaE9yaWVudGF0
aW9uVG9BbmdsZShjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUsIGJvb2wgaXNWZXJ0aWNh
bFRleHQsIGNvbnN0IFVDaGFyJiBjaGFyYWN0ZXIpCi17Ci0gICAgc3dpdGNoIChpc1ZlcnRpY2Fs
VGV4dCA/IHN2Z1N0eWxlLT5nbHlwaE9yaWVudGF0aW9uVmVydGljYWwoKSA6IHN2Z1N0eWxlLT5n
bHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbCgpKSB7Ci0gICAgY2FzZSBHT19BVVRPOgotICAgIHsK
LSAgICAgICAgLy8gU3BlYzogRnVsbHdpZHRoIGlkZW9ncmFwaGljIGFuZCBmdWxsd2lkdGggTGF0
aW4gdGV4dCB3aWxsIGJlIHNldCB3aXRoIGEgZ2x5cGgtb3JpZW50YXRpb24gb2YgMC1kZWdyZWVz
LgotICAgICAgICAvLyAgICAgICBUZXh0IHdoaWNoIGlzIG5vdCBmdWxsd2lkdGggd2lsbCBiZSBz
ZXQgd2l0aCBhIGdseXBoLW9yaWVudGF0aW9uIG9mIDkwLWRlZ3JlZXMuCi0gICAgICAgIHVuc2ln
bmVkIGludCB1bmljb2RlUmFuZ2UgPSBmaW5kQ2hhclVuaWNvZGVSYW5nZShjaGFyYWN0ZXIpOwot
ICAgICAgICBpZiAodW5pY29kZVJhbmdlID09IGNSYW5nZVNldExhdGluIHx8IHVuaWNvZGVSYW5n
ZSA9PSBjUmFuZ2VBcmFiaWMpCi0gICAgICAgICAgICByZXR1cm4gOTAuMGY7Ci0KLSAgICAgICAg
cmV0dXJuIDAuMGY7Ci0gICAgfQotICAgIGNhc2UgR09fOTBERUc6Ci0gICAgICAgIHJldHVybiA5
MC4wZjsKLSAgICBjYXNlIEdPXzE4MERFRzoKLSAgICAgICAgcmV0dXJuIDE4MC4wZjsKLSAgICBj
YXNlIEdPXzI3MERFRzoKLSAgICAgICAgcmV0dXJuIDI3MC4wZjsKLSAgICBjYXNlIEdPXzBERUc6
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0gICAgfQotfQotCi1zdGF0aWMg
aW5saW5lIGJvb2wgZ2x5cGhPcmllbnRhdGlvbklzTXVsdGlwbHlPZjE4MERlZ3JlZXMoZmxvYXQg
b3JpZW50YXRpb25BbmdsZSkKLXsKLSAgICByZXR1cm4gZmFic2YoZm1vZGYob3JpZW50YXRpb25B
bmdsZSwgMTgwLjBmKSkgPT0gMC4wZjsKLX0KLQotc3RhdGljIGlubGluZSBmbG9hdCBjYWxjdWxh
dGVHbHlwaEFkdmFuY2VBbmRTaGlmdFJlc3BlY3RpbmdPcmllbnRhdGlvbihib29sIGlzVmVydGlj
YWxUZXh0LCBmbG9hdCBvcmllbnRhdGlvbkFuZ2xlLCBmbG9hdCBnbHlwaFdpZHRoLCBmbG9hdCBn
bHlwaEhlaWdodCwgY29uc3QgRm9udCYgZm9udCwgU1ZHQ2hhciYgc3ZnQ2hhciwgZmxvYXQmIHhP
cmllbnRhdGlvblNoaWZ0LCBmbG9hdCYgeU9yaWVudGF0aW9uU2hpZnQpCi17Ci0gICAgYm9vbCBv
cmllbnRhdGlvbklzTXVsdGlwbHlPZjE4MERlZ3JlZXMgPSBnbHlwaE9yaWVudGF0aW9uSXNNdWx0
aXBseU9mMTgwRGVncmVlcyhvcmllbnRhdGlvbkFuZ2xlKTsKLQotICAgIC8vIFRoZSBmdW5jdGlv
biBpcyBiYXNlZCBvbiBzcGVjIHJlcXVpcmVtZW50czoKLSAgICAvLwotICAgIC8vIFNwZWM6IElm
IHRoZSAnZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCcgcmVzdWx0cyBpbiBhbiBvcmllbnRh
dGlvbiBhbmdsZSB0aGF0IGlzIG5vdCBhIG11bHRpcGxlIG9mCi0gICAgLy8gb2YgMTgwIGRlZ3Jl
ZXMsIHRoZW4gdGhlIGN1cnJlbnQgdGV4dCBwb3NpdGlvbiBpcyBpbmNyZW1lbnRlZCBhY2NvcmRp
bmcgdG8gdGhlIHZlcnRpY2FsIG1ldHJpY3Mgb2YgdGhlIGdseXBoLgotICAgIC8vCi0gICAgLy8g
U3BlYzogSWYgaWYgdGhlICdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCcgcmVzdWx0cyBpbiBh
biBvcmllbnRhdGlvbiBhbmdsZSB0aGF0IGlzIG5vdCBhIG11bHRpcGxlIG9mCi0gICAgLy8gMTgw
IGRlZ3JlZXMsdGhlbiB0aGUgY3VycmVudCB0ZXh0IHBvc2l0aW9uIGlzIGluY3JlbWVudGVkIGFj
Y29yZGluZyB0byB0aGUgaG9yaXpvbnRhbCBtZXRyaWNzIG9mIHRoZSBnbHlwaC4KLQotICAgIC8v
IHZlcnRpY2FsIG9yaWVudGF0aW9uIGhhbmRsaW5nCi0gICAgaWYgKGlzVmVydGljYWxUZXh0KSB7
Ci0gICAgICAgIGlmIChvcmllbnRhdGlvbkFuZ2xlID09IDAuMGYpIHsKLSAgICAgICAgICAgIHhP
cmllbnRhdGlvblNoaWZ0ID0gLWdseXBoV2lkdGggLyAyLjBmOwotICAgICAgICAgICAgeU9yaWVu
dGF0aW9uU2hpZnQgPSBmb250LmFzY2VudCgpOwotICAgICAgICB9IGVsc2UgaWYgKG9yaWVudGF0
aW9uQW5nbGUgPT0gOTAuMGYpIHsKLSAgICAgICAgICAgIHhPcmllbnRhdGlvblNoaWZ0ID0gLWds
eXBoSGVpZ2h0OwotICAgICAgICAgICAgeU9yaWVudGF0aW9uU2hpZnQgPSBmb250LmRlc2NlbnQo
KTsKLSAgICAgICAgICAgIHN2Z0NoYXIub3JpZW50YXRpb25TaGlmdFkgPSAtZm9udC5hc2NlbnQo
KTsKLSAgICAgICAgfSBlbHNlIGlmIChvcmllbnRhdGlvbkFuZ2xlID09IDI3MC4wZikgewotICAg
ICAgICAgICAgeE9yaWVudGF0aW9uU2hpZnQgPSBnbHlwaEhlaWdodDsKLSAgICAgICAgICAgIHlP
cmllbnRhdGlvblNoaWZ0ID0gZm9udC5kZXNjZW50KCk7Ci0gICAgICAgICAgICBzdmdDaGFyLm9y
aWVudGF0aW9uU2hpZnRYID0gLWdseXBoV2lkdGg7Ci0gICAgICAgICAgICBzdmdDaGFyLm9yaWVu
dGF0aW9uU2hpZnRZID0gLWZvbnQuYXNjZW50KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAob3JpZW50
YXRpb25BbmdsZSA9PSAxODAuMGYpIHsKLSAgICAgICAgICAgIHlPcmllbnRhdGlvblNoaWZ0ID0g
Zm9udC5hc2NlbnQoKTsKLSAgICAgICAgICAgIHN2Z0NoYXIub3JpZW50YXRpb25TaGlmdFggPSAt
Z2x5cGhXaWR0aCAvIDIuMGY7Ci0gICAgICAgICAgICBzdmdDaGFyLm9yaWVudGF0aW9uU2hpZnRZ
ID0gZm9udC5hc2NlbnQoKSAtIGZvbnQuZGVzY2VudCgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gdmVydGljYWwgYWR2YW5jZSBjYWxjdWxhdGlvbgotICAgICAgICBpZiAob3JpZW50YXRpb25B
bmdsZSAhPSAwLjBmICYmICFvcmllbnRhdGlvbklzTXVsdGlwbHlPZjE4MERlZ3JlZXMpCi0gICAg
ICAgICAgICByZXR1cm4gZ2x5cGhXaWR0aDsKLQotICAgICAgICByZXR1cm4gZ2x5cGhIZWlnaHQ7
IAotICAgIH0KLQotICAgIC8vIGhvcml6b250YWwgb3JpZW50YXRpb24gaGFuZGxpbmcKLSAgICBp
ZiAob3JpZW50YXRpb25BbmdsZSA9PSA5MC4wZikgewotICAgICAgICB4T3JpZW50YXRpb25TaGlm
dCA9IGdseXBoV2lkdGggLyAyLjBmOwotICAgICAgICB5T3JpZW50YXRpb25TaGlmdCA9IC1mb250
LmRlc2NlbnQoKTsKLSAgICAgICAgc3ZnQ2hhci5vcmllbnRhdGlvblNoaWZ0WCA9IC1nbHlwaFdp
ZHRoIC8gMi4wZiAtIGZvbnQuZGVzY2VudCgpOyAKLSAgICAgICAgc3ZnQ2hhci5vcmllbnRhdGlv
blNoaWZ0WSA9IGZvbnQuZGVzY2VudCgpOwotICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb25Bbmds
ZSA9PSAyNzAuMGYpIHsKLSAgICAgICAgeE9yaWVudGF0aW9uU2hpZnQgPSAtZ2x5cGhXaWR0aCAv
IDIuMGY7Ci0gICAgICAgIHlPcmllbnRhdGlvblNoaWZ0ID0gLWZvbnQuZGVzY2VudCgpOwotICAg
ICAgICBzdmdDaGFyLm9yaWVudGF0aW9uU2hpZnRYID0gLWdseXBoV2lkdGggLyAyLjBmICsgZm9u
dC5kZXNjZW50KCk7Ci0gICAgICAgIHN2Z0NoYXIub3JpZW50YXRpb25TaGlmdFkgPSBnbHlwaEhl
aWdodDsKLSAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uQW5nbGUgPT0gMTgwLjBmKSB7Ci0gICAg
ICAgIHhPcmllbnRhdGlvblNoaWZ0ID0gZ2x5cGhXaWR0aCAvIDIuMGY7Ci0gICAgICAgIHN2Z0No
YXIub3JpZW50YXRpb25TaGlmdFggPSAtZ2x5cGhXaWR0aCAvIDIuMGY7Ci0gICAgICAgIHN2Z0No
YXIub3JpZW50YXRpb25TaGlmdFkgPSBmb250LmFzY2VudCgpIC0gZm9udC5kZXNjZW50KCk7Ci0g
ICAgfQotCi0gICAgLy8gaG9yaXpvbnRhbCBhZHZhbmNlIGNhbGN1bGF0aW9uCi0gICAgaWYgKG9y
aWVudGF0aW9uQW5nbGUgIT0gMC4wZiAmJiAhb3JpZW50YXRpb25Jc011bHRpcGx5T2YxODBEZWdy
ZWVzKQotICAgICAgICByZXR1cm4gZ2x5cGhIZWlnaHQ7Ci0KLSAgICByZXR1cm4gZ2x5cGhXaWR0
aDsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHN0YXJ0VGV4dENodW5rKFNWR1RleHRDaHVua0xh
eW91dEluZm8mIGluZm8pCiB7CiAgICAgaW5mby5jaHVuay5ib3hlcy5jbGVhcigpOwpAQCAtMjk0
LDg5ICs3MCw2IEBAIFJlbmRlclNWR1Jvb3QqIGZpbmRTVkdSb290T2JqZWN0KFJlbmRlck8KICAg
ICByZXR1cm4gdG9SZW5kZXJTVkdSb290KHN0YXJ0KTsKIH0KIAotc3RhdGljIGlubGluZSBGbG9h
dFBvaW50IHRvcExlZnRQb3NpdGlvbk9mQ2hhcmFjdGVyUmFuZ2UoVmVjdG9yPFNWR0NoYXI+JiBj
aGFycykKLXsKLSAgICByZXR1cm4gdG9wTGVmdFBvc2l0aW9uT2ZDaGFyYWN0ZXJSYW5nZShjaGFy
cy5iZWdpbigpLCBjaGFycy5lbmQoKSk7Ci19Ci0KLUZsb2F0UG9pbnQgdG9wTGVmdFBvc2l0aW9u
T2ZDaGFyYWN0ZXJSYW5nZShWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yIGl0LCBWZWN0b3I8U1ZH
Q2hhcj46Oml0ZXJhdG9yIGVuZCkKLXsKLSAgICBmbG9hdCBsb3dYID0gRkxUX01BWCwgbG93WSA9
IEZMVF9NQVg7Ci0gICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQt
PmlzSGlkZGVuKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmbG9hdCB4ID0g
KCppdCkueDsKLSAgICAgICAgZmxvYXQgeSA9ICgqaXQpLnk7Ci0KLSAgICAgICAgaWYgKHggPCBs
b3dYKQotICAgICAgICAgICAgbG93WCA9IHg7Ci0KLSAgICAgICAgaWYgKHkgPCBsb3dZKQotICAg
ICAgICAgICAgbG93WSA9IHk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEZsb2F0UG9pbnQobG93WCwg
bG93WSk7Ci19Ci0KLS8vIEhlbHBlciBmdW5jdGlvbgotc3RhdGljIGZsb2F0IGNhbGN1bGF0ZUNT
U0tlcm5pbmcoUmVuZGVyT2JqZWN0KiBpdGVtKQotewotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBp
dGVtLT5zdHlsZSgpLT5mb250KCk7Ci0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxl
ID0gaXRlbS0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKLQotICAgIGZsb2F0IGtlcm5pbmcgPSAwLjBm
OwotICAgIGlmIChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlID0gc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPihzdmdTdHlsZS0+a2VybmluZygpKSkgewotICAgICAgICBrZXJuaW5n
ID0gcHJpbWl0aXZlLT5nZXRGbG9hdFZhbHVlKCk7Ci0KLSAgICAgICAgaWYgKHByaW1pdGl2ZS0+
cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAmJiBm
b250LnBpeGVsU2l6ZSgpID4gMCkKLSAgICAgICAgICAgIGtlcm5pbmcgPSBrZXJuaW5nIC8gMTAw
LjBmICogZm9udC5waXhlbFNpemUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4ga2VybmluZzsKLX0K
LQotc3RhdGljIGJvb2wgYXBwbHlTVkdLZXJuaW5nKFNWR0NoYXJhY3RlckxheW91dEluZm8mIGlu
Zm8sIFJlbmRlck9iamVjdCogaXRlbSwgTGFzdEdseXBoSW5mbyYgbGFzdEdseXBoLCBjb25zdCBT
dHJpbmcmIHVuaWNvZGVTdHJpbmcsIGNvbnN0IFN0cmluZyYgZ2x5cGhOYW1lLCBib29sIGlzVmVy
dGljYWxUZXh0KQotewotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgZmxvYXQgaG9yaXpvbnRh
bEtlcm5pbmcgPSAwLjBmOwotICAgIGZsb2F0IHZlcnRpY2FsS2VybmluZyA9IDAuMGY7Ci0gICAg
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlID0gaXRlbS0+c3R5bGUoKTsKLSAgICBTVkdGb250RWxl
bWVudCogc3ZnRm9udCA9IDA7Ci0gICAgaWYgKHN0eWxlLT5mb250KCkuaXNTVkdGb250KCkpCi0g
ICAgICAgIHN2Z0ZvbnQgPSBzdHlsZS0+Zm9udCgpLnN2Z0ZvbnQoKTsKLQotICAgIGlmIChzdHls
ZS0+Zm9udCgpLmlzU1ZHRm9udCgpKSB7Ci0gICAgICAgIGlmIChsYXN0R2x5cGguaXNWYWxpZCkg
ewotICAgICAgICAgICAgaG9yaXpvbnRhbEtlcm5pbmcgPSBzdmdGb250LT5ob3Jpem9udGFsS2Vy
bmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMobGFzdEdseXBoLnVuaWNvZGUsIGxhc3RHbHlw
aC5nbHlwaE5hbWUsIHVuaWNvZGVTdHJpbmcsIGdseXBoTmFtZSk7Ci0gICAgICAgICAgICBpZiAo
aXNWZXJ0aWNhbFRleHQpCi0gICAgICAgICAgICAgICAgdmVydGljYWxLZXJuaW5nID0gc3ZnRm9u
dC0+dmVydGljYWxLZXJuaW5nRm9yUGFpck9mU3RyaW5nc0FuZEdseXBocyhsYXN0R2x5cGgudW5p
Y29kZSwgbGFzdEdseXBoLmdseXBoTmFtZSwgdW5pY29kZVN0cmluZywgZ2x5cGhOYW1lKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGxhc3RHbHlwaC51bmljb2RlID0gdW5pY29kZVN0cmluZzsKLSAg
ICAgICAgbGFzdEdseXBoLmdseXBoTmFtZSA9IGdseXBoTmFtZTsKLSAgICAgICAgbGFzdEdseXBo
LmlzVmFsaWQgPSB0cnVlOwotICAgICAgICBmbG9hdCBzY2FsZVRvRm9udFNwYWNlID0gc3R5bGUt
PmZvbnQoKS5zaXplKCkgLyBzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250KCktPnVuaXRzUGVyRW0o
KTsKLSAgICAgICAgaG9yaXpvbnRhbEtlcm5pbmcgKj0gc2NhbGVUb0ZvbnRTcGFjZTsKLSAgICAg
ICAgdmVydGljYWxLZXJuaW5nICo9IHNjYWxlVG9Gb250U3BhY2U7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGxhc3RHbHlwaC5pc1ZhbGlkID0gZmFsc2U7Ci0KLSAgICBpZiAoaG9yaXpvbnRhbEtlcm5p
bmcgIT0gMC4wZiB8fCB2ZXJ0aWNhbEtlcm5pbmcgIT0gMC4wZikgewotICAgICAgICBpbmZvLmN1
cnggLT0gaG9yaXpvbnRhbEtlcm5pbmc7Ci0gICAgICAgIGluZm8uY3VyeSAtPSB2ZXJ0aWNhbEtl
cm5pbmc7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKGluZm8pOwotICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKLSAgICBVTlVTRURfUEFSQU0obGFz
dEdseXBoKTsKLSAgICBVTlVTRURfUEFSQU0odW5pY29kZVN0cmluZyk7Ci0gICAgVU5VU0VEX1BB
UkFNKGdseXBoTmFtZSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIC8vIEhlbHBl
ciBjbGFzcyBmb3IgcGFpbnQoKQogc3RydWN0IFNWR1Jvb3RJbmxpbmVCb3hQYWludFdhbGtlciB7
CiAgICAgU1ZHUm9vdElubGluZUJveFBhaW50V2Fsa2VyKFNWR1Jvb3RJbmxpbmVCb3gqIHJvb3RC
b3gsIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyKiByb290RmlsdGVyLCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQpAQCAtNzY1LDQ4ICs0NTgsNiBAQCBp
bnQgU1ZHUm9vdElubGluZUJveDo6dmVydGljYWxseUFsaWduQm94CiAgICAgcmV0dXJuIGhlaWdo
dCgpOwogfQogCi1mbG9hdCBjdW1tdWxhdGVkV2lkdGhPZklubGluZUJveENoYXJhY3RlclJhbmdl
KFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlJiByYW5nZSkKLXsKLSAgICBBU1NFUlQoIXJhbmdl
LmlzT3BlbigpKTsKLSAgICBBU1NFUlQocmFuZ2UuaXNDbG9zZWQoKSk7Ci0gICAgQVNTRVJUKHJh
bmdlLmJveC0+aXNJbmxpbmVUZXh0Qm94KCkpOwotCi0gICAgSW5saW5lVGV4dEJveCogdGV4dEJv
eCA9IHN0YXRpY19jYXN0PElubGluZVRleHRCb3gqPihyYW5nZS5ib3gpOwotICAgIFJlbmRlclRl
eHQqIHRleHQgPSB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKTsKLSAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSB0ZXh0LT5zdHlsZSgpOwotCi0gICAgcmV0dXJuIHN0eWxlLT5mb250KCkuZmxvYXRXaWR0
aChzdmdUZXh0UnVuRm9ySW5saW5lVGV4dEJveCh0ZXh0LT5jaGFyYWN0ZXJzKCkgKyB0ZXh0Qm94
LT5zdGFydCgpICsgcmFuZ2Uuc3RhcnRPZmZzZXQsIHJhbmdlLmVuZE9mZnNldCAtIHJhbmdlLnN0
YXJ0T2Zmc2V0LCBzdHlsZSwgdGV4dEJveCwgMCkpOwotfQotCi1mbG9hdCBjdW1tdWxhdGVkSGVp
Z2h0T2ZJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZShTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZSYg
cmFuZ2UpCi17Ci0gICAgQVNTRVJUKCFyYW5nZS5pc09wZW4oKSk7Ci0gICAgQVNTRVJUKHJhbmdl
LmlzQ2xvc2VkKCkpOwotICAgIEFTU0VSVChyYW5nZS5ib3gtPmlzSW5saW5lVGV4dEJveCgpKTsK
LQotICAgIElubGluZVRleHRCb3gqIHRleHRCb3ggPSBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94
Kj4ocmFuZ2UuYm94KTsKLSAgICBSZW5kZXJUZXh0KiB0ZXh0ID0gdGV4dEJveC0+dGV4dFJlbmRl
cmVyKCk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHRleHQtPnN0eWxlKCktPmZvbnQoKTsKLQot
ICAgIHJldHVybiAocmFuZ2UuZW5kT2Zmc2V0IC0gcmFuZ2Uuc3RhcnRPZmZzZXQpICogKGZvbnQu
YXNjZW50KCkgKyBmb250LmRlc2NlbnQoKSk7Ci19Ci0KLVRleHRSdW4gc3ZnVGV4dFJ1bkZvcklu
bGluZVRleHRCb3goY29uc3QgVUNoYXIqIGMsIGludCBsZW4sIFJlbmRlclN0eWxlKiBzdHlsZSwg
Y29uc3QgSW5saW5lVGV4dEJveCogdGV4dEJveCwgZmxvYXQgeFBvcykKLXsKLSAgICBBU1NFUlQo
dGV4dEJveCk7Ci0gICAgQVNTRVJUKHN0eWxlKTsKLQotICAgIFRleHRSdW4gcnVuKGMsIGxlbiwg
ZmFsc2UsIHN0YXRpY19jYXN0PGludD4oeFBvcyksIHRleHRCb3gtPnRvQWRkKCksIHRleHRCb3gt
PmRpcmVjdGlvbigpID09IFJUTCwgdGV4dEJveC0+bV9kaXJPdmVycmlkZSB8fCBzdHlsZS0+dmlz
dWFsbHlPcmRlcmVkKCkpOwotCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBydW4uc2V0UmVm
ZXJlbmNpbmdSZW5kZXJPYmplY3QodGV4dEJveC0+dGV4dFJlbmRlcmVyKCktPnBhcmVudCgpKTsK
LSNlbmRpZgotCi0gICAgLy8gV2UgaGFuZGxlIGxldHRlciAmIHdvcmQgc3BhY2luZyBvdXJzZWx2
ZXMKLSAgICBydW4uZGlzYWJsZVNwYWNpbmcoKTsKLSAgICByZXR1cm4gcnVuOwotfQotCiBzdGF0
aWMgZmxvYXQgY3VtbXVsYXRlZFdpZHRoT3JIZWlnaHRPZlRleHRDaHVuayhTVkdUZXh0Q2h1bmsm
IGNodW5rLCBib29sIGNhbGNXaWR0aE9ubHkpCiB7CiAgICAgZmxvYXQgbGVuZ3RoID0gMC4wZjsK
QEAgLTk1NSw4ICs2MDYsOCBAQCBzdGF0aWMgZmxvYXQgY2FsY3VsYXRlVGV4dExlbmd0aENvcnJl
Y3RpCiAgICAgZmxvYXQgY29tcHV0ZWRXaWR0aCA9IGN1bW11bGF0ZWRXaWR0aE9mVGV4dENodW5r
KGNodW5rKTsKICAgICBmbG9hdCBjb21wdXRlZEhlaWdodCA9IGN1bW11bGF0ZWRIZWlnaHRPZlRl
eHRDaHVuayhjaHVuayk7CiAKLSAgICBpZiAoKGNvbXB1dGVkV2lkdGggPD0gMC4wZiAmJiAhY2h1
bmsuaXNWZXJ0aWNhbFRleHQpIHx8Ci0gICAgICAgIChjb21wdXRlZEhlaWdodCA8PSAwLjBmICYm
IGNodW5rLmlzVmVydGljYWxUZXh0KSkKKyAgICBpZiAoKGNvbXB1dGVkV2lkdGggPD0gMC4wZiAm
JiAhY2h1bmsuaXNWZXJ0aWNhbFRleHQpCisgICAgICAgIHx8IChjb21wdXRlZEhlaWdodCA8PSAw
LjBmICYmIGNodW5rLmlzVmVydGljYWxUZXh0KSkKICAgICAgICAgcmV0dXJuIDAuMGY7CiAKICAg
ICBpZiAoY2h1bmsuaXNWZXJ0aWNhbFRleHQpCkBAIC0xMDMyLDcgKzY4Myw3IEBAIHZvaWQgU1ZH
Um9vdElubGluZUJveDo6Y29tcHV0ZVBlckNoYXJhY3QKIAogICAgIC8vIEZpbmFsbHkgdGhlIHRv
cCBsZWZ0IHBvc2l0aW9uIG9mIG91ciBib3ggaXMga25vd24uCiAgICAgLy8gUHJvcG9nYXRlIHRo
aXMga25vd25sZWRnZSB0byBvdXIgUmVuZGVyU1ZHVGV4dCBwYXJlbnQuCi0gICAgRmxvYXRQb2lu
dCB0b3BMZWZ0ID0gdG9wTGVmdFBvc2l0aW9uT2ZDaGFyYWN0ZXJSYW5nZShtX3N2Z0NoYXJzKTsK
KyAgICBGbG9hdFBvaW50IHRvcExlZnQgPSB0b3BMZWZ0UG9zaXRpb25PZkNoYXJhY3RlclJhbmdl
KG1fc3ZnQ2hhcnMuYmVnaW4oKSwgbV9zdmdDaGFycy5lbmQoKSk7CiAgICAgYmxvY2soKS0+c2V0
TG9jYXRpb24oKGludCkgZmxvb3JmKHRvcExlZnQueCgpKSwgKGludCkgZmxvb3JmKHRvcExlZnQu
eSgpKSk7CiAKICAgICAvLyBMYXlvdXQgYWxsIElubGluZVRleHQvRmxvdyBib3hlcwpAQCAtMTA1
MiwxMSArNzAzLDExIEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6YnVpbGRMYXlvdXRJbmZvcm0K
ICAgICAgICAgaW5mby5hZGRMYXlvdXRJbmZvcm1hdGlvbihwb3NpdGlvbmluZ0VsZW1lbnQpOwog
ICAgIH0KIAotICAgIExhc3RHbHlwaEluZm8gbGFzdEdseXBoOworICAgIFNWR0xhc3RHbHlwaElu
Zm8gbGFzdEdseXBoOwogICAgIAogICAgIGZvciAoSW5saW5lQm94KiBjdXJyID0gc3RhcnQtPmZp
cnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRPbkxpbmUoKSkgewogICAgICAgICBp
ZiAoY3Vyci0+cmVuZGVyZXIoKS0+aXNUZXh0KCkpCi0gICAgICAgICAgICBidWlsZExheW91dElu
Zm9ybWF0aW9uRm9yVGV4dEJveChpbmZvLCBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94Kj4oY3Vy
ciksIGxhc3RHbHlwaCk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94
Kj4oY3VyciktPmJ1aWxkTGF5b3V0SW5mb3JtYXRpb24oaW5mbywgbGFzdEdseXBoKTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQoY3Vyci0+aXNJbmxpbmVGbG93Qm94KCkpOwog
ICAgICAgICAgICAgSW5saW5lRmxvd0JveCogZmxvd0JveCA9IHN0YXRpY19jYXN0PElubGluZUZs
b3dCb3gqPihjdXJyKTsKQEAgLTEyNDgsMjMwICs4OTksNiBAQCB2b2lkIFNWR1Jvb3RJbmxpbmVC
b3g6OmxheW91dElubGluZUJveGVzCiAgICAgfQogfQogCi12b2lkIFNWR1Jvb3RJbmxpbmVCb3g6
OmJ1aWxkTGF5b3V0SW5mb3JtYXRpb25Gb3JUZXh0Qm94KFNWR0NoYXJhY3RlckxheW91dEluZm8m
IGluZm8sIElubGluZVRleHRCb3gqIHRleHRCb3gsIExhc3RHbHlwaEluZm8mIGxhc3RHbHlwaCkK
LXsKLSAgICBSZW5kZXJUZXh0KiB0ZXh0ID0gdGV4dEJveC0+dGV4dFJlbmRlcmVyKCk7Ci0gICAg
QVNTRVJUKHRleHQpOwotCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dC0+c3R5bGUodGV4
dEJveC0+aXNGaXJzdExpbmVTdHlsZSgpKTsKLSAgICBBU1NFUlQoc3R5bGUpOwotCi0gICAgY29u
c3QgRm9udCYgZm9udCA9IHN0eWxlLT5mb250KCk7Ci0gICAgU1ZHSW5saW5lVGV4dEJveCogc3Zn
VGV4dEJveCA9IHN0YXRpY19jYXN0PFNWR0lubGluZVRleHRCb3gqPih0ZXh0Qm94KTsKLQotICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHRleHRCb3gtPmxlbigpOwotCi0gICAgY29uc3QgU1ZHUmVuZGVy
U3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7Ci0gICAgYm9vbCBpc1ZlcnRpY2Fs
VGV4dCA9IGlzVmVydGljYWxXcml0aW5nTW9kZShzdmdTdHlsZSk7Ci0KLSAgICBpbnQgY2hhcnND
b25zdW1lZCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSBj
aGFyc0NvbnN1bWVkKSB7Ci0gICAgICAgIFNWR0NoYXIgc3ZnQ2hhcjsKLQotICAgICAgICBpZiAo
aW5mby5pblBhdGhMYXlvdXQoKSkKLSAgICAgICAgICAgIHN2Z0NoYXIucGF0aERhdGEgPSBTVkdD
aGFyT25QYXRoOjpjcmVhdGUoKTsKLQotICAgICAgICBmbG9hdCBnbHlwaFdpZHRoID0gMC4wZjsK
LSAgICAgICAgZmxvYXQgZ2x5cGhIZWlnaHQgPSAwLjBmOwotCi0gICAgICAgIGludCBleHRyYUNo
YXJzQXZhaWxhYmxlID0gbGVuZ3RoIC0gaSAtIDE7Ci0KLSAgICAgICAgU3RyaW5nIHVuaWNvZGVT
dHI7Ci0gICAgICAgIFN0cmluZyBnbHlwaE5hbWU7Ci0gICAgICAgIGlmICh0ZXh0Qm94LT5kaXJl
Y3Rpb24oKSA9PSBSVEwpIHsKLSAgICAgICAgICAgIGdseXBoV2lkdGggPSBzdmdUZXh0Qm94LT5j
YWxjdWxhdGVHbHlwaFdpZHRoKHN0eWxlLCB0ZXh0Qm94LT5lbmQoKSAtIGksIGV4dHJhQ2hhcnNB
dmFpbGFibGUsIGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSk7Ci0gICAgICAgICAgICBnbHlwaEhl
aWdodCA9IHN2Z1RleHRCb3gtPmNhbGN1bGF0ZUdseXBoSGVpZ2h0KHN0eWxlLCB0ZXh0Qm94LT5l
bmQoKSAtIGksIGV4dHJhQ2hhcnNBdmFpbGFibGUpOwotICAgICAgICAgICAgdW5pY29kZVN0ciA9
IFN0cmluZyh0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKS0+dGV4dCgpLT5jaGFyYWN0ZXJzKCkgKyB0
ZXh0Qm94LT5lbmQoKSAtIGksIGNoYXJzQ29uc3VtZWQpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgZ2x5cGhXaWR0aCA9IHN2Z1RleHRCb3gtPmNhbGN1bGF0ZUdseXBoV2lkdGgoc3R5
bGUsIHRleHRCb3gtPnN0YXJ0KCkgKyBpLCBleHRyYUNoYXJzQXZhaWxhYmxlLCBjaGFyc0NvbnN1
bWVkLCBnbHlwaE5hbWUpOwotICAgICAgICAgICAgZ2x5cGhIZWlnaHQgPSBzdmdUZXh0Qm94LT5j
YWxjdWxhdGVHbHlwaEhlaWdodChzdHlsZSwgdGV4dEJveC0+c3RhcnQoKSArIGksIGV4dHJhQ2hh
cnNBdmFpbGFibGUpOwotICAgICAgICAgICAgdW5pY29kZVN0ciA9IFN0cmluZyh0ZXh0Qm94LT50
ZXh0UmVuZGVyZXIoKS0+dGV4dCgpLT5jaGFyYWN0ZXJzKCkgKyB0ZXh0Qm94LT5zdGFydCgpICsg
aSwgY2hhcnNDb25zdW1lZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGFzc2lnbmVkWCA9
IGZhbHNlOwotICAgICAgICBib29sIGFzc2lnbmVkWSA9IGZhbHNlOwotCi0gICAgICAgIGlmIChp
bmZvLnhWYWx1ZUF2YWlsYWJsZSgpICYmICghaW5mby5pblBhdGhMYXlvdXQoKSB8fCAoaW5mby5p
blBhdGhMYXlvdXQoKSAmJiAhaXNWZXJ0aWNhbFRleHQpKSkgewotICAgICAgICAgICAgaWYgKCFp
c1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgICAgICAgICBzdmdDaGFyLm5ld1RleHRDaHVuayA9IHRy
dWU7Ci0KLSAgICAgICAgICAgIGFzc2lnbmVkWCA9IHRydWU7Ci0gICAgICAgICAgICBzdmdDaGFy
LmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGluZm8uY3VyeCA9IGluZm8ueFZh
bHVlTmV4dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGluZm8ueVZhbHVlQXZhaWxhYmxl
KCkgJiYgKCFpbmZvLmluUGF0aExheW91dCgpIHx8IChpbmZvLmluUGF0aExheW91dCgpICYmIGlz
VmVydGljYWxUZXh0KSkpIHsKLSAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKLSAgICAg
ICAgICAgICAgICBzdmdDaGFyLm5ld1RleHRDaHVuayA9IHRydWU7Ci0KLSAgICAgICAgICAgIGFz
c2lnbmVkWSA9IHRydWU7Ci0gICAgICAgICAgICBzdmdDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1
ZTsKLSAgICAgICAgICAgIGluZm8uY3VyeSA9IGluZm8ueVZhbHVlTmV4dCgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZmxvYXQgZHggPSAwLjBmOwotICAgICAgICBmbG9hdCBkeSA9IDAuMGY7Ci0K
LSAgICAgICAgLy8gQXBwbHkgeC1heGlzIHNoaWZ0Ci0gICAgICAgIGlmIChpbmZvLmR4VmFsdWVB
dmFpbGFibGUoKSkgewotICAgICAgICAgICAgc3ZnQ2hhci5kcmF3blNlcGVyYXRlZCA9IHRydWU7
Ci0KLSAgICAgICAgICAgIGR4ID0gaW5mby5keFZhbHVlTmV4dCgpOwotICAgICAgICAgICAgaW5m
by5keCArPSBkeDsKLQotICAgICAgICAgICAgaWYgKCFpbmZvLmluUGF0aExheW91dCgpKQotICAg
ICAgICAgICAgICAgIGluZm8uY3VyeCArPSBkeDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFw
cGx5IHktYXhpcyBzaGlmdAotICAgICAgICBpZiAoaW5mby5keVZhbHVlQXZhaWxhYmxlKCkpIHsK
LSAgICAgICAgICAgIHN2Z0NoYXIuZHJhd25TZXBlcmF0ZWQgPSB0cnVlOwotCi0gICAgICAgICAg
ICBkeSA9IGluZm8uZHlWYWx1ZU5leHQoKTsKLSAgICAgICAgICAgIGluZm8uZHkgKz0gZHk7Ci0K
LSAgICAgICAgICAgIGlmICghaW5mby5pblBhdGhMYXlvdXQoKSkKLSAgICAgICAgICAgICAgICBp
bmZvLmN1cnkgKz0gZHk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUYWtlIGxldHRlciAmIHdv
cmQgc3BhY2luZyBhbmQga2VybmluZyBpbnRvIGFjY291bnQKLSAgICAgICAgZmxvYXQgc3BhY2lu
ZyA9IGZvbnQubGV0dGVyU3BhY2luZygpICsgY2FsY3VsYXRlQ1NTS2VybmluZyh0ZXh0Qm94LT5y
ZW5kZXJlcigpLT5ub2RlKCktPnJlbmRlcmVyKCkpOwotCi0gICAgICAgIGNvbnN0IFVDaGFyKiBj
dXJyZW50Q2hhcmFjdGVyID0gdGV4dC0+Y2hhcmFjdGVycygpICsgKHRleHRCb3gtPmRpcmVjdGlv
bigpID09IFJUTCA/IHRleHRCb3gtPmVuZCgpIC0gaSA6IHRleHRCb3gtPnN0YXJ0KCkgKyBpKTsK
LSAgICAgICAgY29uc3QgVUNoYXIqIGxhc3RDaGFyYWN0ZXIgPSAwOwotCi0gICAgICAgIGlmICh0
ZXh0Qm94LT5kaXJlY3Rpb24oKSA9PSBSVEwpIHsKLSAgICAgICAgICAgIGlmIChpIDwgdGV4dEJv
eC0+ZW5kKCkpCi0gICAgICAgICAgICAgICAgbGFzdENoYXJhY3RlciA9IHRleHQtPmNoYXJhY3Rl
cnMoKSArIHRleHRCb3gtPmVuZCgpIC0gaSArICAxOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgaWYgKGkgPiAwKQotICAgICAgICAgICAgICAgIGxhc3RDaGFyYWN0ZXIgPSB0ZXh0LT5j
aGFyYWN0ZXJzKCkgKyB0ZXh0Qm94LT5zdGFydCgpICsgaSAtIDE7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBGSVhNRTogU1ZHIEtlcm5pbmcgZG9lc24ndCBnZXQgYXBwbGllZCBvbiB0ZXh0cyBv
biBwYXRoLgotICAgICAgICBib29sIGFwcGxpZWRTVkdLZXJuaW5nID0gYXBwbHlTVkdLZXJuaW5n
KGluZm8sIHRleHRCb3gtPnJlbmRlcmVyKCktPm5vZGUoKS0+cmVuZGVyZXIoKSwgbGFzdEdseXBo
LCB1bmljb2RlU3RyLCBnbHlwaE5hbWUsIGlzVmVydGljYWxUZXh0KTsKLSAgICAgICAgaWYgKGlu
Zm8ubmV4dERyYXduU2VwZXJhdGVkIHx8IHNwYWNpbmcgIT0gMC4wZiB8fCBhcHBsaWVkU1ZHS2Vy
bmluZykgewotICAgICAgICAgICAgaW5mby5uZXh0RHJhd25TZXBlcmF0ZWQgPSBmYWxzZTsKLSAg
ICAgICAgICAgIHN2Z0NoYXIuZHJhd25TZXBlcmF0ZWQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIgJiYgRm9udDo6dHJlYXRBc1NwYWNlKCpjdXJyZW50
Q2hhcmFjdGVyKSAmJiBsYXN0Q2hhcmFjdGVyICYmICFGb250Ojp0cmVhdEFzU3BhY2UoKmxhc3RD
aGFyYWN0ZXIpKSB7Ci0gICAgICAgICAgICBzcGFjaW5nICs9IGZvbnQud29yZFNwYWNpbmcoKTsK
LQotICAgICAgICAgICAgaWYgKHNwYWNpbmcgIT0gMC4wZiAmJiAhaW5mby5pblBhdGhMYXlvdXQo
KSkKLSAgICAgICAgICAgICAgICBpbmZvLm5leHREcmF3blNlcGVyYXRlZCA9IHRydWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBmbG9hdCBvcmllbnRhdGlvbkFuZ2xlID0gZ2x5cGhPcmllbnRhdGlv
blRvQW5nbGUoc3ZnU3R5bGUsIGlzVmVydGljYWxUZXh0LCAqY3VycmVudENoYXJhY3Rlcik7Ci0K
LSAgICAgICAgZmxvYXQgeE9yaWVudGF0aW9uU2hpZnQgPSAwLjBmOwotICAgICAgICBmbG9hdCB5
T3JpZW50YXRpb25TaGlmdCA9IDAuMGY7Ci0gICAgICAgIGZsb2F0IGdseXBoQWR2YW5jZSA9IGNh
bGN1bGF0ZUdseXBoQWR2YW5jZUFuZFNoaWZ0UmVzcGVjdGluZ09yaWVudGF0aW9uKGlzVmVydGlj
YWxUZXh0LCBvcmllbnRhdGlvbkFuZ2xlLCBnbHlwaFdpZHRoLCBnbHlwaEhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9udCwgc3ZnQ2hhciwgeE9yaWVudGF0aW9uU2hpZnQsIHlPcmll
bnRhdGlvblNoaWZ0KTsKLQotICAgICAgICAvLyBIYW5kbGUgdGV4dFBhdGggbGF5b3V0IG1vZGUK
LSAgICAgICAgaWYgKGluZm8uaW5QYXRoTGF5b3V0KCkpIHsKLSAgICAgICAgICAgIGZsb2F0IGV4
dHJhQWR2YW5jZSA9IGlzVmVydGljYWxUZXh0ID8gZHkgOiBkeDsKLSAgICAgICAgICAgIGZsb2F0
IG5ld09mZnNldCA9IEZMVF9NSU47Ci0KLSAgICAgICAgICAgIGlmIChhc3NpZ25lZFggJiYgIWlz
VmVydGljYWxUZXh0KQotICAgICAgICAgICAgICAgIG5ld09mZnNldCA9IGluZm8uY3VyeDsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKGFzc2lnbmVkWSAmJiBpc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAg
ICAgICAgICBuZXdPZmZzZXQgPSBpbmZvLmN1cnk7Ci0KLSAgICAgICAgICAgIGZsb2F0IGNvcnJl
Y3RlZEdseXBoQWR2YW5jZSA9IGdseXBoQWR2YW5jZTsKLQotICAgICAgICAgICAgLy8gSGFuZGxl
IGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgYnkgc3BlY2lmeWluZyBwZXItY2hhcmFj
dGVyIHNjYWxlIG9wZXJhdGlvbnMKLSAgICAgICAgICAgIGlmIChpbmZvLnBhdGhUZXh0TGVuZ3Ro
ID4gMC4wZiAmJiBpbmZvLnBhdGhDaHVua0xlbmd0aCA+IDAuMGYpIHsgCi0gICAgICAgICAgICAg
ICAgaWYgKGlzVmVydGljYWxUZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN2Z0NoYXIucGF0
aERhdGEtPnlTY2FsZSA9IGluZm8ucGF0aENodW5rTGVuZ3RoIC8gaW5mby5wYXRoVGV4dExlbmd0
aDsKLSAgICAgICAgICAgICAgICAgICAgc3BhY2luZyAqPSBzdmdDaGFyLnBhdGhEYXRhLT55U2Nh
bGU7Ci0gICAgICAgICAgICAgICAgICAgIGNvcnJlY3RlZEdseXBoQWR2YW5jZSAqPSBzdmdDaGFy
LnBhdGhEYXRhLT55U2NhbGU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+eFNjYWxlID0gaW5mby5wYXRoQ2h1bmtMZW5ndGgg
LyBpbmZvLnBhdGhUZXh0TGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBzcGFjaW5nICo9IHN2
Z0NoYXIucGF0aERhdGEtPnhTY2FsZTsKLSAgICAgICAgICAgICAgICAgICAgY29ycmVjdGVkR2x5
cGhBZHZhbmNlICo9IHN2Z0NoYXIucGF0aERhdGEtPnhTY2FsZTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEhhbmRsZSBsZXR0ZXIgJiB3b3JkIHNw
YWNpbmcgb24gdGV4dCBwYXRoCi0gICAgICAgICAgICBmbG9hdCBwYXRoRXh0cmFBZHZhbmNlID0g
aW5mby5wYXRoRXh0cmFBZHZhbmNlOwotICAgICAgICAgICAgaW5mby5wYXRoRXh0cmFBZHZhbmNl
ICs9IHNwYWNpbmc7Ci0KLSAgICAgICAgICAgIHN2Z0NoYXIucGF0aERhdGEtPmhpZGRlbiA9ICFp
bmZvLm5leHRQYXRoTGF5b3V0UG9pbnRBbmRBbmdsZShjb3JyZWN0ZWRHbHlwaEFkdmFuY2UsIGV4
dHJhQWR2YW5jZSwgbmV3T2Zmc2V0KTsKLSAgICAgICAgICAgIHN2Z0NoYXIuZHJhd25TZXBlcmF0
ZWQgPSB0cnVlOwotCi0gICAgICAgICAgICBpbmZvLnBhdGhFeHRyYUFkdmFuY2UgPSBwYXRoRXh0
cmFBZHZhbmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQXBwbHkgcm90YXRpb24KLSAgICAg
ICAgaWYgKGluZm8uYW5nbGVWYWx1ZUF2YWlsYWJsZSgpKQotICAgICAgICAgICAgaW5mby5hbmds
ZSA9IGluZm8uYW5nbGVWYWx1ZU5leHQoKTsKLQotICAgICAgICAvLyBBcHBseSBiYXNlbGluZS1z
aGlmdAotICAgICAgICBpZiAoaW5mby5iYXNlbGluZVNoaWZ0VmFsdWVBdmFpbGFibGUoKSkgewot
ICAgICAgICAgICAgc3ZnQ2hhci5kcmF3blNlcGVyYXRlZCA9IHRydWU7Ci0gICAgICAgICAgICBm
bG9hdCBzaGlmdCA9IGluZm8uYmFzZWxpbmVTaGlmdFZhbHVlTmV4dCgpOwotCi0gICAgICAgICAg
ICBpZiAoaXNWZXJ0aWNhbFRleHQpCi0gICAgICAgICAgICAgICAgaW5mby5zaGlmdHggKz0gc2hp
ZnQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaW5mby5zaGlmdHkgLT0gc2hp
ZnQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUYWtlIGRvbWluYW50LWJhc2VsaW5lIC8gYWxp
Z25tZW50LWJhc2VsaW5lIGludG8gYWNjb3VudAotICAgICAgICB5T3JpZW50YXRpb25TaGlmdCAr
PSBhbGlnbm1lbnRCYXNlbGluZVRvU2hpZnQoaXNWZXJ0aWNhbFRleHQsIHRleHQsIGZvbnQpOwot
Ci0gICAgICAgIHN2Z0NoYXIueCA9IGluZm8uY3VyeDsKLSAgICAgICAgc3ZnQ2hhci55ID0gaW5m
by5jdXJ5OwotICAgICAgICBzdmdDaGFyLmFuZ2xlID0gaW5mby5hbmdsZTsKLQotICAgICAgICAv
LyBGb3IgdGV4dCBwYXRocyBhbnkgc2hpZnQgKGR4L2R5L2Jhc2VsaW5lLXNoaWZ0KSBoYXMgdG8g
YmUgYXBwbGllZCBhZnRlciB0aGUgcm90YXRpb24KLSAgICAgICAgaWYgKCFpbmZvLmluUGF0aExh
eW91dCgpKSB7Ci0gICAgICAgICAgICBzdmdDaGFyLnggKz0gaW5mby5zaGlmdHggKyB4T3JpZW50
YXRpb25TaGlmdDsKLSAgICAgICAgICAgIHN2Z0NoYXIueSArPSBpbmZvLnNoaWZ0eSArIHlPcmll
bnRhdGlvblNoaWZ0OwotCi0gICAgICAgICAgICBpZiAob3JpZW50YXRpb25BbmdsZSAhPSAwLjBm
KQotICAgICAgICAgICAgICAgIHN2Z0NoYXIuYW5nbGUgKz0gb3JpZW50YXRpb25BbmdsZTsKLQot
ICAgICAgICAgICAgaWYgKHN2Z0NoYXIuYW5nbGUgIT0gMC4wZikKLSAgICAgICAgICAgICAgICBz
dmdDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHN2Z0NoYXIucGF0aERhdGEtPm9yaWVudGF0aW9uQW5nbGUgPSBvcmllbnRhdGlvbkFuZ2xl
OwotCi0gICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCi0gICAgICAgICAgICAgICAgc3Zn
Q2hhci5hbmdsZSAtPSA5MC4wZjsKLQotICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+eFNo
aWZ0ID0gaW5mby5zaGlmdHggKyB4T3JpZW50YXRpb25TaGlmdDsKLSAgICAgICAgICAgIHN2Z0No
YXIucGF0aERhdGEtPnlTaGlmdCA9IGluZm8uc2hpZnR5ICsgeU9yaWVudGF0aW9uU2hpZnQ7Ci0K
LSAgICAgICAgICAgIC8vIFRyYW5zbGF0ZSB0byBnbHlwaCBtaWRwb2ludAotICAgICAgICAgICAg
aWYgKGlzVmVydGljYWxUZXh0KSB7Ci0gICAgICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+
eFNoaWZ0ICs9IGluZm8uZHg7Ci0gICAgICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+eVNo
aWZ0IC09IGdseXBoQWR2YW5jZSAvIDIuMGY7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIHN2Z0NoYXIucGF0aERhdGEtPnhTaGlmdCAtPSBnbHlwaEFkdmFuY2UgLyAyLjBm
OwotICAgICAgICAgICAgICAgIHN2Z0NoYXIucGF0aERhdGEtPnlTaGlmdCArPSBpbmZvLmR5Owot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWR2YW5jZSB0byBuZXcgcG9z
aXRpb24KLSAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KSB7Ci0gICAgICAgICAgICBzdmdDaGFy
LmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGluZm8uY3VyeSArPSBnbHlwaEFk
dmFuY2UgKyBzcGFjaW5nOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGluZm8uY3VyeCAr
PSBnbHlwaEFkdmFuY2UgKyBzcGFjaW5nOwotCi0gICAgICAgIC8vIEFkdmFuY2UgdG8gbmV4dCBj
aGFyYWN0ZXIgZ3JvdXAKLSAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBjaGFyc0NvbnN1bWVk
OyArK2spIHsKLSAgICAgICAgICAgIGluZm8uc3ZnQ2hhcnMuYXBwZW5kKHN2Z0NoYXIpOwotICAg
ICAgICAgICAgaW5mby5wcm9jZXNzZWRTaW5nbGVDaGFyYWN0ZXIoKTsKLSAgICAgICAgICAgIHN2
Z0NoYXIuZHJhd25TZXBlcmF0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHN2Z0NoYXIubmV3VGV4
dENodW5rID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgU1ZHUm9vdElubGlu
ZUJveDo6YnVpbGRUZXh0Q2h1bmtzKFZlY3RvcjxTVkdDaGFyPiYgc3ZnQ2hhcnMsIFZlY3RvcjxT
VkdUZXh0Q2h1bms+JiBzdmdUZXh0Q2h1bmtzLCBJbmxpbmVGbG93Qm94KiBzdGFydCkKIHsKICAg
ICBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvIGluZm8oc3ZnVGV4dENodW5rcyk7CkBAIC0xNTMxLDcg
Kzk1OCw3IEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6YnVpbGRUZXh0Q2h1bmtzKFYKICAgICAg
ICAgICAgICAgICBTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZSYgcmFuZ2UgPSBpbmZvLmNodW5r
LmJveGVzLmxhc3QoKTsKICAgICAgICAgICAgICAgICBpZiAocmFuZ2UuaXNPcGVuKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgcmFuZ2UuYm94ID0gY3VycjsKLSAgICAgICAgICAgICAgICAgICAg
cmFuZ2Uuc3RhcnRPZmZzZXQgPSAoaSA9PSAwID8gMCA6IGkgLSAxKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmFuZ2Uuc3RhcnRPZmZzZXQgPSBpID09IDAgPyAwIDogaSAtIDE7CiAKICNpZiBERUJV
R19DSFVOS19CVUlMRElORyA+IDEKICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICIgfCAtPiBSYW5nZSBpcyBvcGVuISBib3g9JXAsIHN0YXJ0T2Zmc2V0PSVpXG4iLCByYW5nZS5i
b3gsIHJhbmdlLnN0YXJ0T2Zmc2V0KTsKQEAgLTE2NjksMTEgKzEwOTYsNiBAQCB2b2lkIFNWR1Jv
b3RJbmxpbmVCb3g6OmJ1aWxkVGV4dENodW5rcyhWCiAjZW5kaWYKIH0KIAotY29uc3QgVmVjdG9y
PFNWR1RleHRDaHVuaz4mIFNWR1Jvb3RJbmxpbmVCb3g6OnN2Z1RleHRDaHVua3MoKSBjb25zdCAK
LXsKLSAgICByZXR1cm4gbV9zdmdUZXh0Q2h1bmtzOwotfQotCiB2b2lkIFNWR1Jvb3RJbmxpbmVC
b3g6OmxheW91dFRleHRDaHVua3MoKQogewogICAgIFZlY3RvcjxTVkdUZXh0Q2h1bms+OjppdGVy
YXRvciBpdCA9IG1fc3ZnVGV4dENodW5rcy5iZWdpbigpOwpAQCAtMTY5Myw3ICsxMTE1LDggQEAg
dm9pZCBTVkdSb290SW5saW5lQm94OjpsYXlvdXRUZXh0Q2h1bmtzKAogCiAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgaSA9IDA7CiAgICAgICAgICAgICBmb3IgKDsgYm94SXQgIT0gYm94RW5kOyAr
K2JveEl0KSB7Ci0gICAgICAgICAgICAgICAgU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UmIHJh
bmdlID0gKmJveEl0OyBpKys7CisgICAgICAgICAgICAgICAgU1ZHSW5saW5lQm94Q2hhcmFjdGVy
UmFuZ2UmIHJhbmdlID0gKmJveEl0OworICAgICAgICAgICAgICAgICsraTsKICAgICAgICAgICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIiAtPiBSQU5HRSAlaSBTVEFSVE9GRlNFVDogJWksIEVORE9G
RlNFVDogJWksIEJPWDogJXBcbiIsIGksIHJhbmdlLnN0YXJ0T2Zmc2V0LCByYW5nZS5lbmRPZmZz
ZXQsIHJhbmdlLmJveCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9TVkdSb290SW5saW5lQm94LmgJKHJldmlzaW9uIDU5MDE1KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvU1ZHUm9vdElubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwyMiArMjksMTUg
QEAKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCiAjaW5jbHVkZSAiU1ZHQ2hhcmFjdGVyRGF0
YS5oIgogI2luY2x1ZGUgIlNWR0NoYXJhY3RlckxheW91dEluZm8uaCIKLSNpbmNsdWRlICJTVkdU
ZXh0Q2h1bmtMYXlvdXRJbmZvLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorI2lu
Y2x1ZGUgIlNWR1RleHRDaHVua0xheW91dEluZm8uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBJbmxpbmVUZXh0Qm94OwogY2xhc3MgUmVuZGVyU1ZHUm9vdDsKIGNsYXNzIFNWR0lu
bGluZVRleHRCb3g7Ci0KLXN0cnVjdCBMYXN0R2x5cGhJbmZvIHsKLSAgICBMYXN0R2x5cGhJbmZv
KCkgOiBpc1ZhbGlkKGZhbHNlKSB7IH0KLQotICAgIFN0cmluZyB1bmljb2RlOwotICAgIFN0cmlu
ZyBnbHlwaE5hbWU7Ci0gICAgYm9vbCBpc1ZhbGlkOwotfTsKK3N0cnVjdCBTVkdMYXN0R2x5cGhJ
bmZvOwogCiBjbGFzcyBTVkdSb290SW5saW5lQm94IDogcHVibGljIFJvb3RJbmxpbmVCb3gsIHBy
b3RlY3RlZCBTVkdSZW5kZXJCYXNlIHsKIHB1YmxpYzoKQEAgLTcwLDcgKzYzLDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkg
Y29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAogICAgIC8vIFVzZWQgYnkgU1ZHSW5saW5l
VGV4dEJveAotICAgIGNvbnN0IFZlY3RvcjxTVkdUZXh0Q2h1bms+JiBzdmdUZXh0Q2h1bmtzKCkg
Y29uc3Q7CisgICAgY29uc3QgVmVjdG9yPFNWR1RleHRDaHVuaz4mIHN2Z1RleHRDaHVua3MoKSBj
b25zdCB7IHJldHVybiBtX3N2Z1RleHRDaHVua3M7IH0KIAogICAgIHZvaWQgd2Fsa1RleHRDaHVu
a3MoU1ZHVGV4dENodW5rV2Fsa2VyQmFzZSosIGNvbnN0IFNWR0lubGluZVRleHRCb3gqIHRleHRC
b3ggPSAwKTsKIApAQCAtODEsNyArNzQsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgbGF5b3V0SW5s
aW5lQm94ZXMoSW5saW5lRmxvd0JveCogc3RhcnQsIFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3Im
IGl0LCBpbnQmIG1pblgsIGludCYgbWF4WCwgaW50JiBtaW5ZLCBpbnQmIG1heFkpOwogCiAgICAg
dm9pZCBidWlsZExheW91dEluZm9ybWF0aW9uKElubGluZUZsb3dCb3gqIHN0YXJ0LCBTVkdDaGFy
YWN0ZXJMYXlvdXRJbmZvJik7Ci0gICAgdm9pZCBidWlsZExheW91dEluZm9ybWF0aW9uRm9yVGV4
dEJveChTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvJiwgSW5saW5lVGV4dEJveCosIExhc3RHbHlwaElu
Zm8mKTsKIAogICAgIHZvaWQgYnVpbGRUZXh0Q2h1bmtzKFZlY3RvcjxTVkdDaGFyPiYsIFZlY3Rv
cjxTVkdUZXh0Q2h1bms+JiwgSW5saW5lRmxvd0JveCogc3RhcnQpOwogICAgIHZvaWQgYnVpbGRU
ZXh0Q2h1bmtzKFZlY3RvcjxTVkdDaGFyPiYsIElubGluZUZsb3dCb3gqIHN0YXJ0LCBTVkdUZXh0
Q2h1bmtMYXlvdXRJbmZvJik7CkBAIC05NiwxMSArODgsNiBAQCBwcml2YXRlOgogfTsKIAogLy8g
U2hhcmVkIHdpdGggU1ZHUmVuZGVyVHJlZUFzVGV4dCAvIFNWR0lubGluZVRleHRCb3gKLVRleHRS
dW4gc3ZnVGV4dFJ1bkZvcklubGluZVRleHRCb3goY29uc3QgVUNoYXIqLCBpbnQgbGVuLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIGNvbnN0IElubGluZVRleHRCb3gqIHRleHRCb3gsIGZsb2F0IHhQb3Mp
OwotRmxvYXRQb2ludCB0b3BMZWZ0UG9zaXRpb25PZkNoYXJhY3RlclJhbmdlKFZlY3RvcjxTVkdD
aGFyPjo6aXRlcmF0b3Igc3RhcnQsIFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3IgZW5kKTsKLWZs
b2F0IGN1bW11bGF0ZWRXaWR0aE9mSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UoU1ZHSW5saW5lQm94
Q2hhcmFjdGVyUmFuZ2UmIHJhbmdlKTsKLWZsb2F0IGN1bW11bGF0ZWRIZWlnaHRPZklubGluZUJv
eENoYXJhY3RlclJhbmdlKFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlJiByYW5nZSk7Ci0KIFJl
bmRlclNWR1Jvb3QqIGZpbmRTVkdSb290T2JqZWN0KFJlbmRlck9iamVjdCogc3RhcnQpOwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0TGF5
b3V0VXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0
TGF5b3V0VXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NW
R1RleHRMYXlvdXRVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3NCBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAy
MDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJTVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1
ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAi
UmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU1ZHQ2hhcmFjdGVyRGF0YS5oIgorI2luY2x1ZGUg
IlNWR0NoYXJhY3RlckxheW91dEluZm8uaCIKKyNpbmNsdWRlICJTVkdGb250RWxlbWVudC5oIgor
I2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU1ZHVGV4dENodW5rTGF5b3V0
SW5mby5oIgorI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJVbmljb2RlUmFuZ2UuaCIK
KworI2luY2x1ZGUgPGZsb2F0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBpc1Zl
cnRpY2FsV3JpdGluZ01vZGUoY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlKQoreworICAgIHJl
dHVybiBzdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBXTV9UQlJMIHx8IHN0eWxlLT53cml0aW5nTW9k
ZSgpID09IFdNX1RCOyAKK30KKworc3RhdGljIGlubGluZSBFQWxpZ25tZW50QmFzZWxpbmUgZG9t
aW5hbnRCYXNlbGluZVRvU2hpZnQoYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgUmVuZGVyT2Jq
ZWN0KiB0ZXh0LCBjb25zdCBGb250JiBmb250KQoreworICAgIEFTU0VSVCh0ZXh0KTsKKworICAg
IGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdHlsZSA9IHRleHQtPnN0eWxlKCkgPyB0ZXh0LT5zdHls
ZSgpLT5zdmdTdHlsZSgpIDogMDsKKyAgICBBU1NFUlQoc3R5bGUpOworCisgICAgY29uc3QgU1ZH
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gdGV4dC0+cGFyZW50KCkgJiYgdGV4dC0+cGFyZW50
KCktPnN0eWxlKCkgPyB0ZXh0LT5wYXJlbnQoKS0+c3R5bGUoKS0+c3ZnU3R5bGUoKSA6IDA7CisK
KyAgICBFRG9taW5hbnRCYXNlbGluZSBiYXNlbGluZSA9IHN0eWxlLT5kb21pbmFudEJhc2VsaW5l
KCk7CisgICAgaWYgKGJhc2VsaW5lID09IERCX0FVVE8pIHsKKyAgICAgICAgaWYgKGlzVmVydGlj
YWxUZXh0KQorICAgICAgICAgICAgYmFzZWxpbmUgPSBEQl9DRU5UUkFMOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBiYXNlbGluZSA9IERCX0FMUEhBQkVUSUM7CisgICAgfQorCisgICAgc3dp
dGNoIChiYXNlbGluZSkgeworICAgIGNhc2UgREJfVVNFX1NDUklQVDoKKyAgICAgICAgLy8gVE9E
TzogVGhlIGRvbWluYW50LWJhc2VsaW5lIGFuZCB0aGUgYmFzZWxpbmUtdGFibGUgY29tcG9uZW50
cyBhcmUgc2V0IGJ5CisgICAgICAgIC8vICAgICAgIGRldGVybWluaW5nIHRoZSBwcmVkb21pbmFu
dCBzY3JpcHQgb2YgdGhlIGNoYXJhY3RlciBkYXRhIGNvbnRlbnQuCisgICAgICAgIHJldHVybiBB
Ql9BTFBIQUJFVElDOworICAgIGNhc2UgREJfTk9fQ0hBTkdFOgorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAocGFyZW50U3R5bGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRvbWluYW50QmFz
ZWxpbmVUb1NoaWZ0KGlzVmVydGljYWxUZXh0LCB0ZXh0LT5wYXJlbnQoKSwgZm9udCk7CisKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEFCX0FV
VE87CisgICAgICAgIH0KKyAgICBjYXNlIERCX1JFU0VUX1NJWkU6CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChwYXJlbnRTdHlsZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZG9taW5hbnRC
YXNlbGluZVRvU2hpZnQoaXNWZXJ0aWNhbFRleHQsIHRleHQtPnBhcmVudCgpLCBmb250KTsKKwor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gQUJf
QVVUTzsgICAgCisgICAgICAgIH0KKyAgICBjYXNlIERCX0lERU9HUkFQSElDOgorICAgICAgICBy
ZXR1cm4gQUJfSURFT0dSQVBISUM7CisgICAgY2FzZSBEQl9BTFBIQUJFVElDOgorICAgICAgICBy
ZXR1cm4gQUJfQUxQSEFCRVRJQzsKKyAgICBjYXNlIERCX0hBTkdJTkc6CisgICAgICAgIHJldHVy
biBBQl9IQU5HSU5HOworICAgIGNhc2UgREJfTUFUSEVNQVRJQ0FMOgorICAgICAgICByZXR1cm4g
QUJfTUFUSEVNQVRJQ0FMOworICAgIGNhc2UgREJfQ0VOVFJBTDoKKyAgICAgICAgcmV0dXJuIEFC
X0NFTlRSQUw7CisgICAgY2FzZSBEQl9NSURETEU6CisgICAgICAgIHJldHVybiBBQl9NSURETEU7
CisgICAgY2FzZSBEQl9URVhUX0FGVEVSX0VER0U6CisgICAgICAgIHJldHVybiBBQl9URVhUX0FG
VEVSX0VER0U7CisgICAgY2FzZSBEQl9URVhUX0JFRk9SRV9FREdFOgorICAgICAgICByZXR1cm4g
QUJfVEVYVF9CRUZPUkVfRURHRTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEFCX0FVVE87CisgICAgfQorfQorCitmbG9hdCBhbGln
bm1lbnRCYXNlbGluZVRvU2hpZnQoYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgUmVuZGVyT2Jq
ZWN0KiB0ZXh0LCBjb25zdCBGb250JiBmb250KQoreworICAgIEFTU0VSVCh0ZXh0KTsKKworICAg
IGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdHlsZSA9IHRleHQtPnN0eWxlKCkgPyB0ZXh0LT5zdHls
ZSgpLT5zdmdTdHlsZSgpIDogMDsKKyAgICBBU1NFUlQoc3R5bGUpOworCisgICAgY29uc3QgU1ZH
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gdGV4dC0+cGFyZW50KCkgJiYgdGV4dC0+cGFyZW50
KCktPnN0eWxlKCkgPyB0ZXh0LT5wYXJlbnQoKS0+c3R5bGUoKS0+c3ZnU3R5bGUoKSA6IDA7CisK
KyAgICBFQWxpZ25tZW50QmFzZWxpbmUgYmFzZWxpbmUgPSBzdHlsZS0+YWxpZ25tZW50QmFzZWxp
bmUoKTsKKyAgICBpZiAoYmFzZWxpbmUgPT0gQUJfQVVUTykgeworICAgICAgICBpZiAocGFyZW50
U3R5bGUgJiYgc3R5bGUtPmRvbWluYW50QmFzZWxpbmUoKSA9PSBEQl9BVVRPKQorICAgICAgICAg
ICAgYmFzZWxpbmUgPSBkb21pbmFudEJhc2VsaW5lVG9TaGlmdChpc1ZlcnRpY2FsVGV4dCwgdGV4
dC0+cGFyZW50KCksIGZvbnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBiYXNlbGluZSA9
IGRvbWluYW50QmFzZWxpbmVUb1NoaWZ0KGlzVmVydGljYWxUZXh0LCB0ZXh0LCBmb250KTsKKwor
ICAgICAgICBBU1NFUlQoYmFzZWxpbmUgIT0gQUJfQVVUTyk7ICAgIAorICAgIH0KKworICAgIC8v
IE5vdGU6IGh0dHA6Ly93aWtpLmFwYWNoZS5vcmcveG1sZ3JhcGhpY3MtZm9wL0xpbmVMYXlvdXQv
QWxpZ25tZW50SGFuZGxpbmcKKyAgICBzd2l0Y2ggKGJhc2VsaW5lKSB7CisgICAgY2FzZSBBQl9C
QVNFTElORToKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQorICAgICAg
ICAgICAgICAgIHJldHVybiBkb21pbmFudEJhc2VsaW5lVG9TaGlmdChpc1ZlcnRpY2FsVGV4dCwg
dGV4dC0+cGFyZW50KCksIGZvbnQpOworCisgICAgICAgICAgICByZXR1cm4gMC4wZjsKKyAgICAg
ICAgfQorICAgIGNhc2UgQUJfQkVGT1JFX0VER0U6CisgICAgY2FzZSBBQl9URVhUX0JFRk9SRV9F
REdFOgorICAgICAgICByZXR1cm4gZm9udC5hc2NlbnQoKTsKKyAgICBjYXNlIEFCX01JRERMRToK
KyAgICAgICAgcmV0dXJuIGZvbnQueEhlaWdodCgpIC8gMi4wZjsKKyAgICBjYXNlIEFCX0NFTlRS
QUw6CisgICAgICAgIC8vIE5vdCBuZWVkZWQsIHdlJ3JlIHRha2luZyB0aGlzIGludG8gYWNjb3Vu
dCBhbHJlYWR5IGZvciB2ZXJ0aWNhbCB0ZXh0IQorICAgICAgICAvLyByZXR1cm4gKGZvbnQuYXNj
ZW50KCkgLSBmb250LmRlc2NlbnQoKSkgLyAyLjBmOworICAgICAgICByZXR1cm4gMC4wZjsKKyAg
ICBjYXNlIEFCX0FGVEVSX0VER0U6CisgICAgY2FzZSBBQl9URVhUX0FGVEVSX0VER0U6CisgICAg
Y2FzZSBBQl9JREVPR1JBUEhJQzoKKyAgICAgICAgcmV0dXJuIGZvbnQuZGVzY2VudCgpOworICAg
IGNhc2UgQUJfQUxQSEFCRVRJQzoKKyAgICAgICAgcmV0dXJuIDAuMGY7CisgICAgY2FzZSBBQl9I
QU5HSU5HOgorICAgICAgICByZXR1cm4gZm9udC5hc2NlbnQoKSAqIDguMGYgLyAxMC4wZjsKKyAg
ICBjYXNlIEFCX01BVEhFTUFUSUNBTDoKKyAgICAgICAgcmV0dXJuIGZvbnQuYXNjZW50KCkgLyAy
LjBmOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gMC4wZjsKKyAgICB9Cit9CisKK2Zsb2F0IGdseXBoT3JpZW50YXRpb25Ub0FuZ2xl
KGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSwgYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29u
c3QgVUNoYXImIGNoYXJhY3RlcikKK3sKKyAgICBzd2l0Y2ggKGlzVmVydGljYWxUZXh0ID8gc3Zn
U3R5bGUtPmdseXBoT3JpZW50YXRpb25WZXJ0aWNhbCgpIDogc3ZnU3R5bGUtPmdseXBoT3JpZW50
YXRpb25Ib3Jpem9udGFsKCkpIHsKKyAgICBjYXNlIEdPX0FVVE86CisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIFNwZWM6IEZ1bGx3aWR0aCBpZGVvZ3JhcGhpYyBhbmQgZnVsbHdpZHRoIExhdGlu
IHRleHQgd2lsbCBiZSBzZXQgd2l0aCBhIGdseXBoLW9yaWVudGF0aW9uIG9mIDAtZGVncmVlcy4K
KyAgICAgICAgICAgIC8vICAgICAgIFRleHQgd2hpY2ggaXMgbm90IGZ1bGx3aWR0aCB3aWxsIGJl
IHNldCB3aXRoIGEgZ2x5cGgtb3JpZW50YXRpb24gb2YgOTAtZGVncmVlcy4KKyAgICAgICAgICAg
IHVuc2lnbmVkIGludCB1bmljb2RlUmFuZ2UgPSBmaW5kQ2hhclVuaWNvZGVSYW5nZShjaGFyYWN0
ZXIpOworICAgICAgICAgICAgaWYgKHVuaWNvZGVSYW5nZSA9PSBjUmFuZ2VTZXRMYXRpbiB8fCB1
bmljb2RlUmFuZ2UgPT0gY1JhbmdlQXJhYmljKQorICAgICAgICAgICAgICAgIHJldHVybiA5MC4w
ZjsKKworICAgICAgICAgICAgcmV0dXJuIDAuMGY7CisgICAgICAgIH0KKyAgICBjYXNlIEdPXzkw
REVHOgorICAgICAgICByZXR1cm4gOTAuMGY7CisgICAgY2FzZSBHT18xODBERUc6CisgICAgICAg
IHJldHVybiAxODAuMGY7CisgICAgY2FzZSBHT18yNzBERUc6CisgICAgICAgIHJldHVybiAyNzAu
MGY7CisgICAgY2FzZSBHT18wREVHOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAwLjBm
OworICAgIH0KK30KKworc3RhdGljIGlubGluZSBib29sIGdseXBoT3JpZW50YXRpb25Jc011bHRp
cGx5T2YxODBEZWdyZWVzKGZsb2F0IG9yaWVudGF0aW9uQW5nbGUpCit7CisgICAgcmV0dXJuIGZh
YnNmKGZtb2RmKG9yaWVudGF0aW9uQW5nbGUsIDE4MC4wZikpID09IDAuMGY7Cit9CisKK2Zsb2F0
IGFwcGx5R2x5cGhBZHZhbmNlQW5kU2hpZnRSZXNwZWN0aW5nT3JpZW50YXRpb24oYm9vbCBpc1Zl
cnRpY2FsVGV4dCwgZmxvYXQgb3JpZW50YXRpb25BbmdsZSwgZmxvYXQgZ2x5cGhXaWR0aCwgZmxv
YXQgZ2x5cGhIZWlnaHQsIGNvbnN0IEZvbnQmIGZvbnQsIFNWR0NoYXImIHN2Z0NoYXIsIGZsb2F0
JiB4T3JpZW50YXRpb25TaGlmdCwgZmxvYXQmIHlPcmllbnRhdGlvblNoaWZ0KQoreworICAgIGJv
b2wgb3JpZW50YXRpb25Jc011bHRpcGx5T2YxODBEZWdyZWVzID0gZ2x5cGhPcmllbnRhdGlvbklz
TXVsdGlwbHlPZjE4MERlZ3JlZXMob3JpZW50YXRpb25BbmdsZSk7CisKKyAgICAvLyBUaGUgZnVu
Y3Rpb24gaXMgYmFzZWQgb24gc3BlYyByZXF1aXJlbWVudHM6CisgICAgLy8KKyAgICAvLyBTcGVj
OiBJZiB0aGUgJ2dseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwnIHJlc3VsdHMgaW4gYW4gb3Jp
ZW50YXRpb24gYW5nbGUgdGhhdCBpcyBub3QgYSBtdWx0aXBsZSBvZgorICAgIC8vIG9mIDE4MCBk
ZWdyZWVzLCB0aGVuIHRoZSBjdXJyZW50IHRleHQgcG9zaXRpb24gaXMgaW5jcmVtZW50ZWQgYWNj
b3JkaW5nIHRvIHRoZSB2ZXJ0aWNhbCBtZXRyaWNzIG9mIHRoZSBnbHlwaC4KKyAgICAvLworICAg
IC8vIFNwZWM6IElmIGlmIHRoZSAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnIHJlc3VsdHMg
aW4gYW4gb3JpZW50YXRpb24gYW5nbGUgdGhhdCBpcyBub3QgYSBtdWx0aXBsZSBvZgorICAgIC8v
IDE4MCBkZWdyZWVzLHRoZW4gdGhlIGN1cnJlbnQgdGV4dCBwb3NpdGlvbiBpcyBpbmNyZW1lbnRl
ZCBhY2NvcmRpbmcgdG8gdGhlIGhvcml6b250YWwgbWV0cmljcyBvZiB0aGUgZ2x5cGguCisKKyAg
ICAvLyB2ZXJ0aWNhbCBvcmllbnRhdGlvbiBoYW5kbGluZworICAgIGlmIChpc1ZlcnRpY2FsVGV4
dCkgeworICAgICAgICBpZiAob3JpZW50YXRpb25BbmdsZSA9PSAwLjBmKSB7CisgICAgICAgICAg
ICB4T3JpZW50YXRpb25TaGlmdCA9IC1nbHlwaFdpZHRoIC8gMi4wZjsKKyAgICAgICAgICAgIHlP
cmllbnRhdGlvblNoaWZ0ID0gZm9udC5hc2NlbnQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChvcmll
bnRhdGlvbkFuZ2xlID09IDkwLjBmKSB7CisgICAgICAgICAgICB4T3JpZW50YXRpb25TaGlmdCA9
IC1nbHlwaEhlaWdodDsKKyAgICAgICAgICAgIHlPcmllbnRhdGlvblNoaWZ0ID0gZm9udC5kZXNj
ZW50KCk7CisgICAgICAgICAgICBzdmdDaGFyLm9yaWVudGF0aW9uU2hpZnRZID0gLWZvbnQuYXNj
ZW50KCk7CisgICAgICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb25BbmdsZSA9PSAyNzAuMGYpIHsK
KyAgICAgICAgICAgIHhPcmllbnRhdGlvblNoaWZ0ID0gZ2x5cGhIZWlnaHQ7CisgICAgICAgICAg
ICB5T3JpZW50YXRpb25TaGlmdCA9IGZvbnQuZGVzY2VudCgpOworICAgICAgICAgICAgc3ZnQ2hh
ci5vcmllbnRhdGlvblNoaWZ0WCA9IC1nbHlwaFdpZHRoOworICAgICAgICAgICAgc3ZnQ2hhci5v
cmllbnRhdGlvblNoaWZ0WSA9IC1mb250LmFzY2VudCgpOworICAgICAgICB9IGVsc2UgaWYgKG9y
aWVudGF0aW9uQW5nbGUgPT0gMTgwLjBmKSB7CisgICAgICAgICAgICB5T3JpZW50YXRpb25TaGlm
dCA9IGZvbnQuYXNjZW50KCk7CisgICAgICAgICAgICBzdmdDaGFyLm9yaWVudGF0aW9uU2hpZnRY
ID0gLWdseXBoV2lkdGggLyAyLjBmOworICAgICAgICAgICAgc3ZnQ2hhci5vcmllbnRhdGlvblNo
aWZ0WSA9IGZvbnQuYXNjZW50KCkgLSBmb250LmRlc2NlbnQoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIHZlcnRpY2FsIGFkdmFuY2UgY2FsY3VsYXRpb24KKyAgICAgICAgaWYgKG9yaWVudGF0
aW9uQW5nbGUgIT0gMC4wZiAmJiAhb3JpZW50YXRpb25Jc011bHRpcGx5T2YxODBEZWdyZWVzKQor
ICAgICAgICAgICAgcmV0dXJuIGdseXBoV2lkdGg7CisKKyAgICAgICAgcmV0dXJuIGdseXBoSGVp
Z2h0OyAKKyAgICB9CisKKyAgICAvLyBob3Jpem9udGFsIG9yaWVudGF0aW9uIGhhbmRsaW5nCisg
ICAgaWYgKG9yaWVudGF0aW9uQW5nbGUgPT0gOTAuMGYpIHsKKyAgICAgICAgeE9yaWVudGF0aW9u
U2hpZnQgPSBnbHlwaFdpZHRoIC8gMi4wZjsKKyAgICAgICAgeU9yaWVudGF0aW9uU2hpZnQgPSAt
Zm9udC5kZXNjZW50KCk7CisgICAgICAgIHN2Z0NoYXIub3JpZW50YXRpb25TaGlmdFggPSAtZ2x5
cGhXaWR0aCAvIDIuMGYgLSBmb250LmRlc2NlbnQoKTsgCisgICAgICAgIHN2Z0NoYXIub3JpZW50
YXRpb25TaGlmdFkgPSBmb250LmRlc2NlbnQoKTsKKyAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9u
QW5nbGUgPT0gMjcwLjBmKSB7CisgICAgICAgIHhPcmllbnRhdGlvblNoaWZ0ID0gLWdseXBoV2lk
dGggLyAyLjBmOworICAgICAgICB5T3JpZW50YXRpb25TaGlmdCA9IC1mb250LmRlc2NlbnQoKTsK
KyAgICAgICAgc3ZnQ2hhci5vcmllbnRhdGlvblNoaWZ0WCA9IC1nbHlwaFdpZHRoIC8gMi4wZiAr
IGZvbnQuZGVzY2VudCgpOworICAgICAgICBzdmdDaGFyLm9yaWVudGF0aW9uU2hpZnRZID0gZ2x5
cGhIZWlnaHQ7CisgICAgfSBlbHNlIGlmIChvcmllbnRhdGlvbkFuZ2xlID09IDE4MC4wZikgewor
ICAgICAgICB4T3JpZW50YXRpb25TaGlmdCA9IGdseXBoV2lkdGggLyAyLjBmOworICAgICAgICBz
dmdDaGFyLm9yaWVudGF0aW9uU2hpZnRYID0gLWdseXBoV2lkdGggLyAyLjBmOworICAgICAgICBz
dmdDaGFyLm9yaWVudGF0aW9uU2hpZnRZID0gZm9udC5hc2NlbnQoKSAtIGZvbnQuZGVzY2VudCgp
OworICAgIH0KKworICAgIC8vIGhvcml6b250YWwgYWR2YW5jZSBjYWxjdWxhdGlvbgorICAgIGlm
IChvcmllbnRhdGlvbkFuZ2xlICE9IDAuMGYgJiYgIW9yaWVudGF0aW9uSXNNdWx0aXBseU9mMTgw
RGVncmVlcykKKyAgICAgICAgcmV0dXJuIGdseXBoSGVpZ2h0OworCisgICAgcmV0dXJuIGdseXBo
V2lkdGg7Cit9CisKK0Zsb2F0UG9pbnQgdG9wTGVmdFBvc2l0aW9uT2ZDaGFyYWN0ZXJSYW5nZShW
ZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yIGl0LCBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yIGVu
ZCkKK3sKKyAgICBmbG9hdCBsb3dYID0gRkxUX01BWCwgbG93WSA9IEZMVF9NQVg7CisgICAgZm9y
ICg7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQtPmlzSGlkZGVuKCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBmbG9hdCB4ID0gKCppdCkueDsKKyAgICAgICAg
ZmxvYXQgeSA9ICgqaXQpLnk7CisKKyAgICAgICAgaWYgKHggPCBsb3dYKQorICAgICAgICAgICAg
bG93WCA9IHg7CisKKyAgICAgICAgaWYgKHkgPCBsb3dZKQorICAgICAgICAgICAgbG93WSA9IHk7
CisgICAgfQorCisgICAgcmV0dXJuIEZsb2F0UG9pbnQobG93WCwgbG93WSk7Cit9CisKK2Zsb2F0
IGN1bW11bGF0ZWRXaWR0aE9mSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UoU1ZHSW5saW5lQm94Q2hh
cmFjdGVyUmFuZ2UmIHJhbmdlKQoreworICAgIEFTU0VSVCghcmFuZ2UuaXNPcGVuKCkpOworICAg
IEFTU0VSVChyYW5nZS5pc0Nsb3NlZCgpKTsKKyAgICBBU1NFUlQocmFuZ2UuYm94LT5pc0lubGlu
ZVRleHRCb3goKSk7CisKKyAgICBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gc3RhdGljX2Nhc3Q8
SW5saW5lVGV4dEJveCo+KHJhbmdlLmJveCk7CisgICAgUmVuZGVyVGV4dCogdGV4dCA9IHRleHRC
b3gtPnRleHRSZW5kZXJlcigpOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHQtPnN0eWxl
KCk7CisKKyAgICByZXR1cm4gc3R5bGUtPmZvbnQoKS5mbG9hdFdpZHRoKHN2Z1RleHRSdW5Gb3JJ
bmxpbmVUZXh0Qm94KHRleHQtPmNoYXJhY3RlcnMoKSArIHRleHRCb3gtPnN0YXJ0KCkgKyByYW5n
ZS5zdGFydE9mZnNldCwgcmFuZ2UuZW5kT2Zmc2V0IC0gcmFuZ2Uuc3RhcnRPZmZzZXQsIHN0eWxl
LCB0ZXh0Qm94LCAwKSk7Cit9CisKK2Zsb2F0IGN1bW11bGF0ZWRIZWlnaHRPZklubGluZUJveENo
YXJhY3RlclJhbmdlKFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlJiByYW5nZSkKK3sKKyAgICBB
U1NFUlQoIXJhbmdlLmlzT3BlbigpKTsKKyAgICBBU1NFUlQocmFuZ2UuaXNDbG9zZWQoKSk7Cisg
ICAgQVNTRVJUKHJhbmdlLmJveC0+aXNJbmxpbmVUZXh0Qm94KCkpOworCisgICAgSW5saW5lVGV4
dEJveCogdGV4dEJveCA9IHN0YXRpY19jYXN0PElubGluZVRleHRCb3gqPihyYW5nZS5ib3gpOwor
ICAgIFJlbmRlclRleHQqIHRleHQgPSB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKTsKKyAgICBjb25z
dCBGb250JiBmb250ID0gdGV4dC0+c3R5bGUoKS0+Zm9udCgpOworCisgICAgcmV0dXJuIChyYW5n
ZS5lbmRPZmZzZXQgLSByYW5nZS5zdGFydE9mZnNldCkgKiAoZm9udC5hc2NlbnQoKSArIGZvbnQu
ZGVzY2VudCgpKTsKK30KKworVGV4dFJ1biBzdmdUZXh0UnVuRm9ySW5saW5lVGV4dEJveChjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxl
LCBjb25zdCBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBmbG9hdCB4UG9zaXRpb24pCit7CisgICAg
QVNTRVJUKHRleHRCb3gpOworICAgIEFTU0VSVChzdHlsZSk7CisKKyAgICBUZXh0UnVuIHJ1bihj
aGFyYWN0ZXJzLCBsZW5ndGgsIGZhbHNlLCBzdGF0aWNfY2FzdDxpbnQ+KHhQb3NpdGlvbiksIHRl
eHRCb3gtPnRvQWRkKCksIHRleHRCb3gtPmRpcmVjdGlvbigpID09IFJUTCwgdGV4dEJveC0+bV9k
aXJPdmVycmlkZSB8fCBzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCkpOworCisjaWYgRU5BQkxFKFNW
R19GT05UUykKKyAgICBydW4uc2V0UmVmZXJlbmNpbmdSZW5kZXJPYmplY3QodGV4dEJveC0+dGV4
dFJlbmRlcmVyKCktPnBhcmVudCgpKTsKKyNlbmRpZgorCisgICAgLy8gV2UgaGFuZGxlIGxldHRl
ciAmIHdvcmQgc3BhY2luZyBvdXJzZWx2ZXMKKyAgICBydW4uZGlzYWJsZVNwYWNpbmcoKTsKKyAg
ICByZXR1cm4gcnVuOworfQorCitmbG9hdCBjYWxjdWxhdGVDU1NLZXJuaW5nKGNvbnN0IFJlbmRl
clN0eWxlKiBzdHlsZSkKK3sKKyAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUtPmZvbnQoKTsK
KyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsK
KworICAgIGZsb2F0IGtlcm5pbmcgPSAwLjBmOworICAgIGlmIChDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihzdmdTdHlsZS0+a2Vy
bmluZygpKSkgeworICAgICAgICBrZXJuaW5nID0gcHJpbWl0aXZlLT5nZXRGbG9hdFZhbHVlKCk7
CisKKyAgICAgICAgaWYgKHByaW1pdGl2ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAmJiBmb250LnBpeGVsU2l6ZSgpID4gMCkKKyAgICAgICAg
ICAgIGtlcm5pbmcgPSBrZXJuaW5nIC8gMTAwLjBmICogZm9udC5waXhlbFNpemUoKTsKKyAgICB9
CisKKyAgICByZXR1cm4ga2VybmluZzsKK30KKworYm9vbCBhcHBseVNWR0tlcm5pbmcoU1ZHQ2hh
cmFjdGVyTGF5b3V0SW5mbyYgaW5mbywgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBTVkdMYXN0
R2x5cGhJbmZvJiBsYXN0R2x5cGgsIGNvbnN0IFN0cmluZyYgdW5pY29kZVN0cmluZywgY29uc3Qg
U3RyaW5nJiBnbHlwaE5hbWUsIGJvb2wgaXNWZXJ0aWNhbFRleHQpCit7CisjaWYgRU5BQkxFKFNW
R19GT05UUykKKyAgICBmbG9hdCBrZXJuaW5nID0gMC4wZjsKKworICAgIGNvbnN0IEZvbnQmIGZv
bnQgPSBzdHlsZS0+Zm9udCgpOworICAgIGlmICghZm9udC5pc1NWR0ZvbnQoKSkgeworICAgICAg
ICBsYXN0R2x5cGguaXNWYWxpZCA9IGZhbHNlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgU1ZHRm9udEVsZW1lbnQqIHN2Z0ZvbnQgPSBmb250LnN2Z0ZvbnQoKTsKKyAgICBB
U1NFUlQoc3ZnRm9udCk7CisKKyAgICBpZiAobGFzdEdseXBoLmlzVmFsaWQpIHsKKyAgICAgICAg
aWYgKGlzVmVydGljYWxUZXh0KQorICAgICAgICAgICAga2VybmluZyA9IHN2Z0ZvbnQtPnZlcnRp
Y2FsS2VybmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMobGFzdEdseXBoLnVuaWNvZGUsIGxh
c3RHbHlwaC5nbHlwaE5hbWUsIHVuaWNvZGVTdHJpbmcsIGdseXBoTmFtZSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGtlcm5pbmcgPSBzdmdGb250LT5ob3Jpem9udGFsS2VybmluZ0ZvclBh
aXJPZlN0cmluZ3NBbmRHbHlwaHMobGFzdEdseXBoLnVuaWNvZGUsIGxhc3RHbHlwaC5nbHlwaE5h
bWUsIHVuaWNvZGVTdHJpbmcsIGdseXBoTmFtZSk7CisgICAgfQorCisgICAgbGFzdEdseXBoLnVu
aWNvZGUgPSB1bmljb2RlU3RyaW5nOworICAgIGxhc3RHbHlwaC5nbHlwaE5hbWUgPSBnbHlwaE5h
bWU7CisgICAgbGFzdEdseXBoLmlzVmFsaWQgPSB0cnVlOworICAgIGtlcm5pbmcgKj0gc3R5bGUt
PmZvbnQoKS5zaXplKCkgLyBzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250KCktPnVuaXRzUGVyRW0o
KTsKKworICAgIGlmIChrZXJuaW5nICE9IDAuMGYpIHsKKyAgICAgICAgaWYgKGlzVmVydGljYWxU
ZXh0KQorICAgICAgICAgICAgaW5mby5jdXJ5IC09IGtlcm5pbmc7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGluZm8uY3VyeCAtPSBrZXJuaW5nOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpbmZvKTsKKyAgICBVTlVTRURfUEFSQU0oaXRl
bSk7CisgICAgVU5VU0VEX1BBUkFNKGxhc3RHbHlwaCk7CisgICAgVU5VU0VEX1BBUkFNKHVuaWNv
ZGVTdHJpbmcpOworICAgIFVOVVNFRF9QQVJBTShnbHlwaE5hbWUpOworI2VuZGlmCisgICAgcmV0
dXJuIGZhbHNlOworfQorCit9CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZH
VGV4dExheW91dFV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NW
R1RleHRMYXlvdXRVdGlsaXRpZXMuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1NWR1RleHRMYXlvdXRVdGlsaXRpZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MCBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgICAgQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAy
MDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgU1ZHVGV4dExheW91dFV0aWxp
dGllc19oCisjZGVmaW5lIFNWR1RleHRMYXlvdXRVdGlsaXRpZXNfaAorCisjaWYgRU5BQkxFKFNW
RykKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEZv
bnQ7CitjbGFzcyBJbmxpbmVUZXh0Qm94OworY2xhc3MgUmVuZGVyT2JqZWN0OworY2xhc3MgUmVu
ZGVyU3R5bGU7CitjbGFzcyBSZW5kZXJTVkdSZXNvdXJjZTsKK2NsYXNzIFNWR1JlbmRlclN0eWxl
OworY2xhc3MgVGV4dFJ1bjsKKworc3RydWN0IFNWR0NoYXI7CitzdHJ1Y3QgU1ZHQ2hhcmFjdGVy
TGF5b3V0SW5mbzsKK3N0cnVjdCBTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZTsKKworZW51bSBT
VkdUZXh0UGFpbnRTdWJwaGFzZSB7CisgICAgU1ZHVGV4dFBhaW50U3VicGhhc2VCYWNrZ3JvdW5k
LAorICAgIFNWR1RleHRQYWludFN1YnBoYXNlR2x5cGhGaWxsLAorICAgIFNWR1RleHRQYWludFN1
YnBoYXNlR2x5cGhGaWxsU2VsZWN0aW9uLAorICAgIFNWR1RleHRQYWludFN1YnBoYXNlR2x5cGhT
dHJva2UsCisgICAgU1ZHVGV4dFBhaW50U3VicGhhc2VHbHlwaFN0cm9rZVNlbGVjdGlvbiwKKyAg
ICBTVkdUZXh0UGFpbnRTdWJwaGFzZUZvcmVncm91bmQKK307CisKK3N0cnVjdCBTVkdUZXh0UGFp
bnRJbmZvIHsKKyAgICBTVkdUZXh0UGFpbnRJbmZvKCkKKyAgICAgICAgOiBhY3RpdmVQYWludGlu
Z1Jlc291cmNlKDApCisgICAgICAgICwgc3VicGhhc2UoU1ZHVGV4dFBhaW50U3VicGhhc2VCYWNr
Z3JvdW5kKQorICAgIHsKKyAgICB9CisKKyAgICBSZW5kZXJTVkdSZXNvdXJjZSogYWN0aXZlUGFp
bnRpbmdSZXNvdXJjZTsKKyAgICBTVkdUZXh0UGFpbnRTdWJwaGFzZSBzdWJwaGFzZTsKK307CisK
K3N0cnVjdCBTVkdMYXN0R2x5cGhJbmZvIHsKKyAgICBTVkdMYXN0R2x5cGhJbmZvKCkKKyAgICAg
ICAgOiBpc1ZhbGlkKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlzVmFsaWQ7Cisg
ICAgU3RyaW5nIHVuaWNvZGU7CisgICAgU3RyaW5nIGdseXBoTmFtZTsKK307CisKK2Jvb2wgaXNW
ZXJ0aWNhbFdyaXRpbmdNb2RlKGNvbnN0IFNWR1JlbmRlclN0eWxlKik7CitmbG9hdCBhbGlnbm1l
bnRCYXNlbGluZVRvU2hpZnQoYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0
KiB0ZXh0LCBjb25zdCBGb250Jik7CitmbG9hdCBnbHlwaE9yaWVudGF0aW9uVG9BbmdsZShjb25z
dCBTVkdSZW5kZXJTdHlsZSosIGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFVDaGFyJik7Citm
bG9hdCBhcHBseUdseXBoQWR2YW5jZUFuZFNoaWZ0UmVzcGVjdGluZ09yaWVudGF0aW9uKGJvb2wg
aXNWZXJ0aWNhbFRleHQsIGZsb2F0IG9yaWVudGF0aW9uQW5nbGUsIGZsb2F0IGdseXBoV2lkdGgs
IGZsb2F0IGdseXBoSGVpZ2h0LCBjb25zdCBGb250JiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1ZHQ2hhciYsIGZsb2F0JiB4T3JpZW50YXRp
b25TaGlmdCwgZmxvYXQmIHlPcmllbnRhdGlvblNoaWZ0KTsKK0Zsb2F0UG9pbnQgdG9wTGVmdFBv
c2l0aW9uT2ZDaGFyYWN0ZXJSYW5nZShWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yIHN0YXJ0LCBW
ZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yIGVuZCk7CitmbG9hdCBjdW1tdWxhdGVkV2lkdGhPZklu
bGluZUJveENoYXJhY3RlclJhbmdlKFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlJik7CitmbG9h
dCBjdW1tdWxhdGVkSGVpZ2h0T2ZJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZShTVkdJbmxpbmVCb3hD
aGFyYWN0ZXJSYW5nZSYpOworVGV4dFJ1biBzdmdUZXh0UnVuRm9ySW5saW5lVGV4dEJveChjb25z
dCBVQ2hhciosIGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgSW5saW5lVGV4
dEJveCosIGZsb2F0IHhQb3MpOworCitmbG9hdCBjYWxjdWxhdGVDU1NLZXJuaW5nKGNvbnN0IFJl
bmRlclN0eWxlKik7Citib29sIGFwcGx5U1ZHS2VybmluZyhTVkdDaGFyYWN0ZXJMYXlvdXRJbmZv
JiwgY29uc3QgUmVuZGVyU3R5bGUqLCBTVkdMYXN0R2x5cGhJbmZvJiwgY29uc3QgU3RyaW5nJiB1
bmljb2RlU3RyaW5nLCBjb25zdCBTdHJpbmcmIGdseXBoTmFtZSwgYm9vbCBpc1ZlcnRpY2FsVGV4
dCk7CisKK30KKworI2VuZGlmCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55548</attachid>
            <date>2010-05-10 06:20:23 -0700</date>
            <delta_ts>2010-05-11 02:43:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38799-20100510152012.patch</filename>
            <type>text/plain</type>
            <size>72981</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTA3NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTggQEAKKzIwMTAtMDUtMTAgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTW92ZSBidWlsZExheW91dEluZm9ybWF0aW9uRm9yVGV4dEJveCgpIGZyb20gU1ZHUm9v
dElubGluZUJveCBpbiBTVkdJbmxpbmVUZXh0Qm94IHdoZXJlIGl0IGJlbG9uZ3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4Nzk5CisKKyAgICAgICAg
Q2xlYW51cCBTVkdSb290SW5saW5lQm94L1NWR0lubGluZVRleHRCb3guIE1vdmUgYnVpbGRMYXlv
dXRJbmZvcm1hdGlvbkZvclRleHRCb3ggdG8gU1ZHSW5saW5lVGV4dEJveC4KKyAgICAgICAgTW92
ZSBsb3RzIG9mIGhlbHBlciBtZXRob2RzIGludG8gbmV3IFNWR1RleHRMYXlvdXRVdGlsaXRpZXMg
Y2xhc3MuIEFkYXB0ZWQgYWxsIGNhbGxzaXRlcy4KKworICAgICAgICBObyBmdW5jdGlvbmFsIGNo
YW5nZXMuCisKKyAgICAgICAgKiBBbmRyb2lkLm1rOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFt
OgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAg
ICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcmVuZGVyaW5nL1NWR0lubGluZVRl
eHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6Y2FsY3VsYXRl
R2x5cGhXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpzdmdDaGFy
YWN0ZXJIaXRzUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6
cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6YnVp
bGRMYXlvdXRJbmZvcm1hdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1NWR0lubGluZVRleHRC
b3guaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnZpcnR1YWxIZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6c2V0SGVpZ2h0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblRvcCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25IZWlnaHQpOgorICAgICAgICAqIHJl
bmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZH
Um9vdElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVUZXh0TGVuZ3Ro
Q29ycmVjdGlvbkZvclRleHRDaHVuayk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5l
Qm94Ojpjb21wdXRlUGVyQ2hhcmFjdGVyTGF5b3V0SW5mb3JtYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUm9vdElubGluZUJveDo6YnVpbGRMYXlvdXRJbmZvcm1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94OjpidWlsZFRleHRDaHVua3MpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUm9vdElubGluZUJveDo6bGF5b3V0VGV4dENodW5rcyk6CisgICAgICAgICog
cmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJ
bmxpbmVCb3g6OnN2Z1RleHRDaHVua3MpOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdUZXh0TGF5
b3V0VXRpbGl0aWVzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjppc1ZlcnRpY2FsV3Jp
dGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6ZG9taW5hbnRCYXNlbGluZVRvU2hpZnQpOgor
ICAgICAgICAoV2ViQ29yZTo6YWxpZ25tZW50QmFzZWxpbmVUb1NoaWZ0KToKKyAgICAgICAgKFdl
YkNvcmU6OmdseXBoT3JpZW50YXRpb25Ub0FuZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6OmdseXBo
T3JpZW50YXRpb25Jc011bHRpcGx5T2YxODBEZWdyZWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmFw
cGx5R2x5cGhBZHZhbmNlQW5kU2hpZnRSZXNwZWN0aW5nT3JpZW50YXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6dG9wTGVmdFBvc2l0aW9uT2ZDaGFyYWN0ZXJSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpjdW1tdWxhdGVkV2lkdGhPZklubGluZUJveENoYXJhY3RlclJhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OmN1bW11bGF0ZWRIZWlnaHRPZklubGluZUJveENoYXJhY3RlclJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnN2Z1RleHRSdW5Gb3JJbmxpbmVUZXh0Qm94KToKKyAgICAgICAgKFdl
YkNvcmU6OmNhbGN1bGF0ZUNTU0tlcm5pbmcpOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlTVkdL
ZXJuaW5nKToKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0aWxpdGllcy5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UGFp
bnRJbmZvOjpTVkdUZXh0UGFpbnRJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xhc3RHbHlw
aEluZm86OlNWR0xhc3RHbHlwaEluZm8pOgorCiAyMDEwLTA1LTEwICBDaHJpcyBKZXJkb25layAg
PGNqZXJkb25la0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVy
LgpJbmRleDogV2ViQ29yZS9BbmRyb2lkLm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQW5kcm9p
ZC5tawkocmV2aXNpb24gNTkwNzQpCisrKyBXZWJDb3JlL0FuZHJvaWQubWsJKHdvcmtpbmcgY29w
eSkKQEAgLTY1Nyw3ICs2NTcsOCBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklM
RVMpIFwKIAlyZW5kZXJpbmcvU1ZHUmVuZGVyU3VwcG9ydC5jcHAgXAogCXJlbmRlcmluZy9TVkdS
ZW5kZXJUcmVlQXNUZXh0LmNwcCBcCiAJcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guY3BwIFwK
LQlyZW5kZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcAorCXJlbmRlcmluZy9TVkdTaGFk
b3dUcmVlRWxlbWVudHMuY3BwIFwKKwlyZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0aWxpdGllcy5j
cHAKIGVuZGlmCiAKIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXApJbmRl
eDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCShyZXZpc2lvbiA1OTA3NCkKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtp
bmcgY29weSkKQEAgLTMyMjEsNiArMzIyMSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2Vi
Q29yZS9yZW5kZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcCBcCiAJV2ViQ29yZS9yZW5k
ZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmggXAogCVdlYkNvcmUvcmVuZGVyaW5nL1NWR1Rl
eHRDaHVua0xheW91dEluZm8uaCBcCisJV2ViQ29yZS9yZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0
aWxpdGllcy5jcHAgXAorCVdlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRMYXlvdXRVdGlsaXRpZXMu
aCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGUuY3BwIFwKIAlXZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oIFwKIAlXZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TVkdSZW5kZXJTdHlsZURlZnMuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5n
eXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA1OTA3NCkK
KysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zMjg0LDYgKzMyODQs
OCBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwJywK
ICAgICAgICAgICAgICdyZW5kZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmgnLAogICAgICAg
ICAgICAgJ3JlbmRlcmluZy9TVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmgnLAorICAgICAgICAgICAg
J3JlbmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmNwcCcsCisgICAgICAgICAgICAncmVu
ZGVyaW5nL1NWR1RleHRMYXlvdXRVdGlsaXRpZXMuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5n
L1RhYmxlTGF5b3V0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9UZXh0Q29udHJvbElubmVy
RWxlbWVudHMuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVs
ZW1lbnRzLmgnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA1OTA3NCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8J
KHdvcmtpbmcgY29weSkKQEAgLTE4MDksNiArMTgwOSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHJl
bmRlcmluZy9TVkdSb290SW5saW5lQm94LmggXAogICAgIHJlbmRlcmluZy9TVkdTaGFkb3dUcmVl
RWxlbWVudHMuaCBcCiAgICAgcmVuZGVyaW5nL1NWR1RleHRDaHVua0xheW91dEluZm8uaCBcCisg
ICAgcmVuZGVyaW5nL1NWR1RleHRMYXlvdXRVdGlsaXRpZXMuaCBcCiAgICAgcmVuZGVyaW5nL1Rl
eHRDb250cm9sSW5uZXJFbGVtZW50cy5oIFwKICAgICByZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUu
aCBcCiAgICAgc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5oIFwKQEAgLTI3NzgsNyAr
Mjc3OSw4IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9MSkgewogICAgICAgICByZW5k
ZXJpbmcvU1ZHTWFya2VyTGF5b3V0SW5mby5jcHAgXAogICAgICAgICByZW5kZXJpbmcvU1ZHUmVu
ZGVyU3VwcG9ydC5jcHAgXAogICAgICAgICByZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5jcHAg
XAotICAgICAgICByZW5kZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcAorICAgICAgICBy
ZW5kZXJpbmcvU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9T
VkdUZXh0TGF5b3V0VXRpbGl0aWVzLmNwcAogfQogCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
SkFWQVNDUklQVF9ERUJVR0dFUj0xKSB7CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oJKHJldmlzaW9uIDU5MDc0KQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjg2MTUsNiArMjg2MTUsMTQgQEAKIAkJCQk+
DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5n
XFNWR1RleHRMYXlvdXRVdGlsaXRpZXMuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFNWR1RleHRMYXlvdXRVdGlsaXRp
ZXMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHJlbmRlcmluZ1xUYWJsZUxheW91dC5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA1OTA3
NCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC03NSw2ICs3NSw4IEBACiAJCTA4M0RBRUE3MEYwMUE3RkIwMDM0Mjc1NCAvKiBS
ZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDgzREFFQTMwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRD
b250cm9sTXVsdGlMaW5lLmggKi87IH07CiAJCTA4M0RBRUE4MEYwMUE3RkIwMDM0Mjc1NCAvKiBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzREFFQTQwRjAxQTdGQjAwMzQyNzU0IC8qIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5jcHAgKi87IH07CiAJCTA4M0RBRUE5MEYwMUE3RkIwMDM0Mjc1
NCAvKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4M0RBRUE1MEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCAqLzsgfTsKKwkJMDgzRjUyOTkxMTk1N0ZCRTAwNjUz
RUJFIC8qIFNWR1RleHRMYXlvdXRVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzRjUyOTcxMTk1N0ZCRTAwNjUzRUJFIC8qIFNWR1Rl
eHRMYXlvdXRVdGlsaXRpZXMuY3BwICovOyB9OworCQkwODNGNTI5QTExOTU3RkJFMDA2NTNFQkUg
LyogU1ZHVGV4dExheW91dFV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDgzRjUyOTgxMTk1N0ZCRTAwNjUzRUJFIC8qIFNWR1RleHRMYXlv
dXRVdGlsaXRpZXMuaCAqLzsgfTsKIAkJMDg0MkJDNzIxMTkwMTQ0MDAwQzdEMDhGIC8qIFNWR0No
YXJhY3RlckRhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDg0MkJDNzAxMTkwMTQ0MDAwQzdEMDhGIC8qIFNWR0NoYXJhY3RlckRhdGEuY3BwICov
OyB9OwogCQkwODQyQkM3MzExOTAxNDQwMDBDN0QwOEYgLyogU1ZHQ2hhcmFjdGVyRGF0YS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0MkJDNzExMTkw
MTQ0MDAwQzdEMDhGIC8qIFNWR0NoYXJhY3RlckRhdGEuaCAqLzsgfTsKIAkJMDg0MkJDODExMTkw
MTQ3MjAwQzdEMDhGIC8qIFNWR1RleHRDaHVua0xheW91dEluZm8uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NDJCQzgwMTE5MDE0NzIwMEM3RDA4RiAv
KiBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZvLmggKi87IH07CkBAIC01NTIwLDYgKzU1MjIsOCBAQAog
CQkwODNEQUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xNdWx0
aUxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDgzREFFQTQwRjAxQTdGQjAw
MzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBNTBGMDFBN0ZCMDAzNDI3NTQgLyog
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwODNGNTI5NzExOTU3RkJFMDA2NTNFQkUgLyogU1ZHVGV4dExheW91dFV0aWxp
dGllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUZXh0TGF5
b3V0VXRpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDgzRjUyOTgx
MTk1N0ZCRTAwNjUzRUJFIC8qIFNWR1RleHRMYXlvdXRVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVGV4dExheW91dFV0aWxpdGllcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwODQyQkM3MDExOTAxNDQwMDBDN0QwOEYgLyogU1ZHQ2hhcmFj
dGVyRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdDaGFy
YWN0ZXJEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg0MkJDNzExMTkw
MTQ0MDAwQzdEMDhGIC8qIFNWR0NoYXJhY3RlckRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU1ZHQ2hhcmFjdGVyRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwODQyQkM4MDExOTAxNDcyMDBDN0QwOEYgLyogU1ZHVGV4dENodW5rTGF5b3V0SW5mby5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZv
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjI2OCw2ICsxNjI3Miw4IEBACiAJ
CQkJMDhEQUI5QzAxMTAzRDlDMTAwM0U3QUJBIC8qIFNWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAg
Ki8sCiAJCQkJMDhEQUI5QzExMTAzRDlDMTAwM0U3QUJBIC8qIFNWR1NoYWRvd1RyZWVFbGVtZW50
cy5oICovLAogCQkJCTA4NDJCQzgwMTE5MDE0NzIwMEM3RDA4RiAvKiBTVkdUZXh0Q2h1bmtMYXlv
dXRJbmZvLmggKi8sCisJCQkJMDgzRjUyOTcxMTk1N0ZCRTAwNjUzRUJFIC8qIFNWR1RleHRMYXlv
dXRVdGlsaXRpZXMuY3BwICovLAorCQkJCTA4M0Y1Mjk4MTE5NTdGQkUwMDY1M0VCRSAvKiBTVkdU
ZXh0TGF5b3V0VXRpbGl0aWVzLmggKi8sCiAJCQkJQThDRkYwNEMwQTE1NEYwOTAwMEE0MjM0IC8q
IFRhYmxlTGF5b3V0LmggKi8sCiAJCQkJQUIwMTRERTEwRTY4OUE0MzAwRTEwNDQ1IC8qIFRleHRD
b250cm9sSW5uZXJFbGVtZW50cy5jcHAgKi8sCiAJCQkJQUIwMTRERTIwRTY4OUE0MzAwRTEwNDQ1
IC8qIFRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oICovLApAQCAtMTkxMTEsNiArMTkxMTcsNyBA
QAogCQkJCUI1NUQ1QUE0MTE5MTMxRkMwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0Nh
bGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNThDRUI2OTExOTEzNjA3MDAyQTY3OTAgLyog
SlNEYXRhYmFzZVN5bmMuaCBpbiBIZWFkZXJzICovLAogCQkJCUI1OENFQjZEMTE5MTM2MUMwMDJB
Njc5MCAvKiBKU1NRTFRyYW5zYWN0aW9uU3luYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDgzRjUy
OUExMTk1N0ZCRTAwNjUzRUJFIC8qIFNWR1RleHRMYXlvdXRVdGlsaXRpZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUM1MTk4RjRDMTE5MkVDRkQwMDJCNzRBNiAvKiBJREJDYWxsYmFja3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUM1MTk4RjRFMTE5MkVDRkQwMDJCNzRBNiAvKiBJREJEYXRhYmFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzUxOThGNEYxMTkyRUNGRDAwMkI3NEE2IC8qIElEQkRhdGFi
YXNlRXJyb3IuaCBpbiBIZWFkZXJzICovLApAQCAtMjEzNzcsNiArMjEzODQsNyBAQAogCQkJCUI1
NUQ1QUE5MTE5MTMyNTAwMEJDQzMxNSAvKiBKU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCNThDRUI2QTExOTEzNjA3MDAyQTY3OTAgLyogSlNEYXRhYmFz
ZVN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjU4Q0VCNkUxMTkxMzYxQzAwMkE2NzkwIC8q
IEpTU1FMVHJhbnNhY3Rpb25TeW5jLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA4M0Y1Mjk5MTE5
NTdGQkUwMDY1M0VCRSAvKiBTVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUM1MTk4RjREMTE5MkVDRkQwMDJCNzRBNiAvKiBJREJEYXRhYmFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDNTE5OEY1MzExOTJFQ0ZEMDAyQjc0QTYgLyogSURCRGF0YWJhc2VSZXF1
ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1MTk4RjU2MTE5MkVDRkQwMDJCNzRBNiAvKiBJ
REJSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZH
SW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5s
aW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDU5MDc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZH
SW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKioKICAq
IENvcHlyaWdodCAoQykgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICogICAgICAgICAg
IChDKSAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxNCArMjUsMTIgQEAKICNpZiBFTkFC
TEUoU1ZHKQogI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3guaCIKIAotI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbmxpbmVGbG93Qm94LmgiCi0jaW5jbHVk
ZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlNW
R1Jvb3RJbmxpbmVCb3guaCIKKyNpbmNsdWRlICJTVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmgiCiAj
aW5jbHVkZSAiVGV4dC5oIgogCiAjaW5jbHVkZSA8ZmxvYXQuaD4KQEAgLTQ0LDE2ICs0Myw2IEBA
IFNWR0lubGluZVRleHRCb3g6OlNWR0lubGluZVRleHRCb3goUmVuZGUKIHsKIH0KIAotaW50IFNW
R0lubGluZVRleHRCb3g6OnNlbGVjdGlvblRvcCgpCi17Ci0gICAgcmV0dXJuIG1feTsKLX0KLSAK
LWludCBTVkdJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25IZWlnaHQoKQotewotICAgIHJldHVybiBt
X2hlaWdodDsKLX0KLQogU1ZHUm9vdElubGluZUJveCogU1ZHSW5saW5lVGV4dEJveDo6c3ZnUm9v
dElubGluZUJveCgpIGNvbnN0CiB7CiAgICAgLy8gRmluZCBhc3NvY2lhdGVkIHJvb3QgaW5saW5l
IGJveApAQCAtNzQsNyArNjMsNyBAQCBTVkdSb290SW5saW5lQm94KiBTVkdJbmxpbmVUZXh0Qm94
OjpzdmdSCiBmbG9hdCBTVkdJbmxpbmVUZXh0Qm94OjpjYWxjdWxhdGVHbHlwaFdpZHRoKFJlbmRl
clN0eWxlKiBzdHlsZSwgaW50IG9mZnNldCwgaW50IGV4dHJhQ2hhcnNBdmFpbGFibGUsIGludCYg
Y2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHN0
eWxlKTsKLSAgICByZXR1cm4gc3R5bGUtPmZvbnQoKS5mbG9hdFdpZHRoKHN2Z1RleHRSdW5Gb3JJ
bmxpbmVUZXh0Qm94KHRleHRSZW5kZXJlcigpLT50ZXh0KCktPmNoYXJhY3RlcnMoKSArIG9mZnNl
dCwgMSwgc3R5bGUsIHRoaXMsIDApLCBleHRyYUNoYXJzQXZhaWxhYmxlLCBjaGFyc0NvbnN1bWVk
LCBnbHlwaE5hbWUpOworICAgIHJldHVybiBzdHlsZS0+Zm9udCgpLmZsb2F0V2lkdGgoc3ZnVGV4
dFJ1bkZvcklubGluZVRleHRCb3godGV4dFJlbmRlcmVyKCktPmNoYXJhY3RlcnMoKSArIG9mZnNl
dCwgMSwgc3R5bGUsIHRoaXMsIDApLCBleHRyYUNoYXJzQXZhaWxhYmxlLCBjaGFyc0NvbnN1bWVk
LCBnbHlwaE5hbWUpOwogfQogCiBmbG9hdCBTVkdJbmxpbmVUZXh0Qm94OjpjYWxjdWxhdGVHbHlw
aEhlaWdodChSZW5kZXJTdHlsZSogc3R5bGUsIGludCwgaW50KSBjb25zdApAQCAtMjYwLDcgKzI0
OSw3IEBAIGJvb2wgU1ZHSW5saW5lVGV4dEJveDo6c3ZnQ2hhcmFjdGVySGl0c1AKICAgICBpZiAo
eCA8IGNoYXJBdFBvcy54KSB7CiAgICAgICAgIGlmIChjbG9zZXN0T2Zmc2V0SW5Cb3ggPiAwICYm
IGRpcmVjdGlvbigpID09IExUUikKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBl
bHNlIGlmIChjbG9zZXN0T2Zmc2V0SW5Cb3ggPCAoaW50KSBlbmQoKSAmJiBkaXJlY3Rpb24oKSA9
PSBSVEwpCisgICAgICAgIGlmIChjbG9zZXN0T2Zmc2V0SW5Cb3ggPCAoaW50KSBlbmQoKSAmJiBk
aXJlY3Rpb24oKSA9PSBSVEwpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC00OTAsNyArNDc5LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94Ojpw
YWludFNlbGVjdGlvbihpbgogCiAgICAgQ29sb3IgdGV4dENvbG9yID0gc3R5bGUtPmNvbG9yKCk7
CiAgICAgQ29sb3IgY29sb3IgPSByZW5kZXJlcigpLT5zZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KTsKLSAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSB8fCBjb2xvci5hbHBoYSgpID09IDApCisgICAg
aWYgKCFjb2xvci5pc1ZhbGlkKCkgfHwgIWNvbG9yLmFscGhhKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIElmIHRoZSB0ZXh0IGNvbG9yIGVuZHMgdXAgYmVpbmcgdGhlIHNhbWUgYXMgdGhl
IHNlbGVjdGlvbiBiYWNrZ3JvdW5kLCBpbnZlcnQgdGhlIHNlbGVjdGlvbgpAQCAtNTE2LDcgKzUw
NSw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oaW4KICAgICBwLT5z
YXZlKCk7CiAKICAgICBpbnQgYWRqdXN0ID0gc3RhcnRQb3MgPj0gYm94U3RhcnRPZmZzZXQgPyBi
b3hTdGFydE9mZnNldCA6IDA7Ci0gICAgcC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwgc3Zn
VGV4dFJ1bkZvcklubGluZVRleHRCb3godGV4dFJlbmRlcmVyKCktPnRleHQoKS0+Y2hhcmFjdGVy
cygpICsgc3RhcnQoKSArIGJveFN0YXJ0T2Zmc2V0LCBsZW5ndGgsIHN0eWxlLCB0aGlzLCBzdmdD
aGFyLngpLAorICAgIHAtPmRyYXdIaWdobGlnaHRGb3JUZXh0KGZvbnQsIHN2Z1RleHRSdW5Gb3JJ
bmxpbmVUZXh0Qm94KHRleHRSZW5kZXJlcigpLT5jaGFyYWN0ZXJzKCkgKyBzdGFydCgpICsgYm94
U3RhcnRPZmZzZXQsIGxlbmd0aCwgc3R5bGUsIHRoaXMsIHN2Z0NoYXIueCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSW50UG9pbnQoKGludCkgc3ZnQ2hhci54LCAoaW50KSBzdmdDaGFy
LnkgLSBmb250LmFzY2VudCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LmFz
Y2VudCgpICsgZm9udC5kZXNjZW50KCksIGNvbG9yLCBzdHlsZS0+Y29sb3JTcGFjZSgpLCBzdGFy
dFBvcyAtIGFkanVzdCwgZW5kUG9zIC0gYWRqdXN0KTsKIApAQCAtNTg5LDYgKzU3OCwyMzMgQEAg
dm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb24oRQogICAgIGNvbnRleHQtPnJl
c3RvcmUoKTsKIH0KIAordm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpidWlsZExheW91dEluZm9ybWF0
aW9uKFNWR0NoYXJhY3RlckxheW91dEluZm8mIGluZm8sIFNWR0xhc3RHbHlwaEluZm8mIGxhc3RH
bHlwaCkKK3sKKyAgICBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0aGlzLT50ZXh0UmVuZGVy
ZXIoKTsKKyAgICBBU1NFUlQodGV4dFJlbmRlcmVyKTsKKworICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IHRleHRSZW5kZXJlci0+c3R5bGUoaXNGaXJzdExpbmVTdHlsZSgpKTsKKyAgICBBU1NFUlQo
c3R5bGUpOworCisgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLT5mb250KCk7CisgICAgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0ZXh0UmVuZGVyZXItPmNoYXJhY3RlcnMoKTsKKworICAg
IFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbiA9IGRpcmVjdGlvbigpOworICAgIHVuc2lnbmVk
IHN0YXJ0UG9zaXRpb24gPSBzdGFydCgpOworICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gZW5k
KCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gbGVuKCk7CisKKyAgICBjb25zdCBTVkdSZW5kZXJT
dHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKKyAgICBib29sIGlzVmVydGljYWxU
ZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHN2Z1N0eWxlKTsKKworICAgIGludCBjaGFyc0Nv
bnN1bWVkID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IGNo
YXJzQ29uc3VtZWQpIHsKKyAgICAgICAgU1ZHQ2hhciBzdmdDaGFyOworCisgICAgICAgIGlmIChp
bmZvLmluUGF0aExheW91dCgpKQorICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YSA9IFNWR0No
YXJPblBhdGg6OmNyZWF0ZSgpOworCisgICAgICAgIGZsb2F0IGdseXBoV2lkdGggPSAwLjBmOwor
ICAgICAgICBmbG9hdCBnbHlwaEhlaWdodCA9IDAuMGY7CisKKyAgICAgICAgaW50IGV4dHJhQ2hh
cnNBdmFpbGFibGUgPSBsZW5ndGggLSBpIC0gMTsKKworICAgICAgICBTdHJpbmcgdW5pY29kZVN0
cjsKKyAgICAgICAgU3RyaW5nIGdseXBoTmFtZTsKKyAgICAgICAgaWYgKHRleHREaXJlY3Rpb24g
PT0gUlRMKSB7CisgICAgICAgICAgICBnbHlwaFdpZHRoID0gY2FsY3VsYXRlR2x5cGhXaWR0aChz
dHlsZSwgZW5kUG9zaXRpb24gLSBpLCBleHRyYUNoYXJzQXZhaWxhYmxlLCBjaGFyc0NvbnN1bWVk
LCBnbHlwaE5hbWUpOworICAgICAgICAgICAgZ2x5cGhIZWlnaHQgPSBjYWxjdWxhdGVHbHlwaEhl
aWdodChzdHlsZSwgZW5kUG9zaXRpb24gLSBpLCBleHRyYUNoYXJzQXZhaWxhYmxlKTsKKyAgICAg
ICAgICAgIHVuaWNvZGVTdHIgPSBTdHJpbmcoY2hhcmFjdGVycyArIGVuZFBvc2l0aW9uIC0gaSwg
Y2hhcnNDb25zdW1lZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBnbHlwaFdpZHRo
ID0gY2FsY3VsYXRlR2x5cGhXaWR0aChzdHlsZSwgc3RhcnRQb3NpdGlvbiArIGksIGV4dHJhQ2hh
cnNBdmFpbGFibGUsIGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSk7CisgICAgICAgICAgICBnbHlw
aEhlaWdodCA9IGNhbGN1bGF0ZUdseXBoSGVpZ2h0KHN0eWxlLCBzdGFydFBvc2l0aW9uICsgaSwg
ZXh0cmFDaGFyc0F2YWlsYWJsZSk7CisgICAgICAgICAgICB1bmljb2RlU3RyID0gU3RyaW5nKGNo
YXJhY3RlcnMgKyBzdGFydFBvc2l0aW9uICsgaSwgY2hhcnNDb25zdW1lZCk7CisgICAgICAgIH0K
KworICAgICAgICBib29sIGFzc2lnbmVkWCA9IGZhbHNlOworICAgICAgICBib29sIGFzc2lnbmVk
WSA9IGZhbHNlOworCisgICAgICAgIGlmIChpbmZvLnhWYWx1ZUF2YWlsYWJsZSgpICYmICghaW5m
by5pblBhdGhMYXlvdXQoKSB8fCAoaW5mby5pblBhdGhMYXlvdXQoKSAmJiAhaXNWZXJ0aWNhbFRl
eHQpKSkgeworICAgICAgICAgICAgaWYgKCFpc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgICAgICAg
ICBzdmdDaGFyLm5ld1RleHRDaHVuayA9IHRydWU7CisKKyAgICAgICAgICAgIGFzc2lnbmVkWCA9
IHRydWU7CisgICAgICAgICAgICBzdmdDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGluZm8uY3VyeCA9IGluZm8ueFZhbHVlTmV4dCgpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGluZm8ueVZhbHVlQXZhaWxhYmxlKCkgJiYgKCFpbmZvLmluUGF0aExheW91dCgpIHx8
IChpbmZvLmluUGF0aExheW91dCgpICYmIGlzVmVydGljYWxUZXh0KSkpIHsKKyAgICAgICAgICAg
IGlmIChpc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgICAgICAgICBzdmdDaGFyLm5ld1RleHRDaHVu
ayA9IHRydWU7CisKKyAgICAgICAgICAgIGFzc2lnbmVkWSA9IHRydWU7CisgICAgICAgICAgICBz
dmdDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGluZm8uY3VyeSA9IGlu
Zm8ueVZhbHVlTmV4dCgpOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgZHggPSAwLjBmOwor
ICAgICAgICBmbG9hdCBkeSA9IDAuMGY7CisKKyAgICAgICAgLy8gQXBwbHkgeC1heGlzIHNoaWZ0
CisgICAgICAgIGlmIChpbmZvLmR4VmFsdWVBdmFpbGFibGUoKSkgeworICAgICAgICAgICAgc3Zn
Q2hhci5kcmF3blNlcGVyYXRlZCA9IHRydWU7CisKKyAgICAgICAgICAgIGR4ID0gaW5mby5keFZh
bHVlTmV4dCgpOworICAgICAgICAgICAgaW5mby5keCArPSBkeDsKKworICAgICAgICAgICAgaWYg
KCFpbmZvLmluUGF0aExheW91dCgpKQorICAgICAgICAgICAgICAgIGluZm8uY3VyeCArPSBkeDsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIEFwcGx5IHktYXhpcyBzaGlmdAorICAgICAgICBpZiAo
aW5mby5keVZhbHVlQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgICAgIHN2Z0NoYXIuZHJhd25TZXBl
cmF0ZWQgPSB0cnVlOworCisgICAgICAgICAgICBkeSA9IGluZm8uZHlWYWx1ZU5leHQoKTsKKyAg
ICAgICAgICAgIGluZm8uZHkgKz0gZHk7CisKKyAgICAgICAgICAgIGlmICghaW5mby5pblBhdGhM
YXlvdXQoKSkKKyAgICAgICAgICAgICAgICBpbmZvLmN1cnkgKz0gZHk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBUYWtlIGxldHRlciAmIHdvcmQgc3BhY2luZyBhbmQga2VybmluZyBpbnRvIGFj
Y291bnQKKyAgICAgICAgZmxvYXQgc3BhY2luZyA9IGZvbnQubGV0dGVyU3BhY2luZygpICsgY2Fs
Y3VsYXRlQ1NTS2VybmluZyhzdHlsZSk7CisKKyAgICAgICAgY29uc3QgVUNoYXIqIGN1cnJlbnRD
aGFyYWN0ZXIgPSBjaGFyYWN0ZXJzICsgKHRleHREaXJlY3Rpb24gPT0gUlRMID8gZW5kUG9zaXRp
b24gLSBpIDogc3RhcnRQb3NpdGlvbiArIGkpOworICAgICAgICBjb25zdCBVQ2hhciogbGFzdENo
YXJhY3RlciA9IDA7CisKKyAgICAgICAgaWYgKHRleHREaXJlY3Rpb24gPT0gUlRMKSB7CisgICAg
ICAgICAgICBpZiAoaSA8IGVuZFBvc2l0aW9uKQorICAgICAgICAgICAgICAgIGxhc3RDaGFyYWN0
ZXIgPSBjaGFyYWN0ZXJzICsgZW5kUG9zaXRpb24gLSBpICsgIDE7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBpZiAoaSA+IDApCisgICAgICAgICAgICAgICAgbGFzdENoYXJhY3RlciA9
IGNoYXJhY3RlcnMgKyBzdGFydFBvc2l0aW9uICsgaSAtIDE7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBGSVhNRTogU1ZHIEtlcm5pbmcgZG9lc24ndCBnZXQgYXBwbGllZCBvbiB0ZXh0cyBvbiBw
YXRoLgorICAgICAgICBib29sIGFwcGxpZWRTVkdLZXJuaW5nID0gYXBwbHlTVkdLZXJuaW5nKGlu
Zm8sIHN0eWxlLCBsYXN0R2x5cGgsIHVuaWNvZGVTdHIsIGdseXBoTmFtZSwgaXNWZXJ0aWNhbFRl
eHQpOworICAgICAgICBpZiAoaW5mby5uZXh0RHJhd25TZXBlcmF0ZWQgfHwgc3BhY2luZyAhPSAw
LjBmIHx8IGFwcGxpZWRTVkdLZXJuaW5nKSB7CisgICAgICAgICAgICBpbmZvLm5leHREcmF3blNl
cGVyYXRlZCA9IGZhbHNlOworICAgICAgICAgICAgc3ZnQ2hhci5kcmF3blNlcGVyYXRlZCA9IHRy
dWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlciAmJiBGb250Ojp0
cmVhdEFzU3BhY2UoKmN1cnJlbnRDaGFyYWN0ZXIpICYmIGxhc3RDaGFyYWN0ZXIgJiYgIUZvbnQ6
OnRyZWF0QXNTcGFjZSgqbGFzdENoYXJhY3RlcikpIHsKKyAgICAgICAgICAgIHNwYWNpbmcgKz0g
Zm9udC53b3JkU3BhY2luZygpOworCisgICAgICAgICAgICBpZiAoc3BhY2luZyAhPSAwLjBmICYm
ICFpbmZvLmluUGF0aExheW91dCgpKQorICAgICAgICAgICAgICAgIGluZm8ubmV4dERyYXduU2Vw
ZXJhdGVkID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGZsb2F0IG9yaWVudGF0aW9uQW5n
bGUgPSBnbHlwaE9yaWVudGF0aW9uVG9BbmdsZShzdmdTdHlsZSwgaXNWZXJ0aWNhbFRleHQsICpj
dXJyZW50Q2hhcmFjdGVyKTsKKworICAgICAgICBmbG9hdCB4T3JpZW50YXRpb25TaGlmdCA9IDAu
MGY7CisgICAgICAgIGZsb2F0IHlPcmllbnRhdGlvblNoaWZ0ID0gMC4wZjsKKyAgICAgICAgZmxv
YXQgZ2x5cGhBZHZhbmNlID0gYXBwbHlHbHlwaEFkdmFuY2VBbmRTaGlmdFJlc3BlY3RpbmdPcmll
bnRhdGlvbihpc1ZlcnRpY2FsVGV4dCwgb3JpZW50YXRpb25BbmdsZSwgZ2x5cGhXaWR0aCwgZ2x5
cGhIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udCwgc3ZnQ2hhciwgeE9yaWVudGF0aW9u
U2hpZnQsIHlPcmllbnRhdGlvblNoaWZ0KTsKKworICAgICAgICAvLyBIYW5kbGUgdGV4dFBhdGgg
bGF5b3V0IG1vZGUKKyAgICAgICAgaWYgKGluZm8uaW5QYXRoTGF5b3V0KCkpIHsKKyAgICAgICAg
ICAgIGZsb2F0IGV4dHJhQWR2YW5jZSA9IGlzVmVydGljYWxUZXh0ID8gZHkgOiBkeDsKKyAgICAg
ICAgICAgIGZsb2F0IG5ld09mZnNldCA9IEZMVF9NSU47CisKKyAgICAgICAgICAgIGlmIChhc3Np
Z25lZFggJiYgIWlzVmVydGljYWxUZXh0KQorICAgICAgICAgICAgICAgIG5ld09mZnNldCA9IGlu
Zm8uY3VyeDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFzc2lnbmVkWSAmJiBpc1ZlcnRpY2FsVGV4
dCkKKyAgICAgICAgICAgICAgICBuZXdPZmZzZXQgPSBpbmZvLmN1cnk7CisKKyAgICAgICAgICAg
IGZsb2F0IGNvcnJlY3RlZEdseXBoQWR2YW5jZSA9IGdseXBoQWR2YW5jZTsKKworICAgICAgICAg
ICAgLy8gSGFuZGxlIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgYnkgc3BlY2lmeWlu
ZyBwZXItY2hhcmFjdGVyIHNjYWxlIG9wZXJhdGlvbnMKKyAgICAgICAgICAgIGlmIChpbmZvLnBh
dGhUZXh0TGVuZ3RoID4gMC4wZiAmJiBpbmZvLnBhdGhDaHVua0xlbmd0aCA+IDAuMGYpIHsgCisg
ICAgICAgICAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KSB7CisgICAgICAgICAgICAgICAgICAg
IHN2Z0NoYXIucGF0aERhdGEtPnlTY2FsZSA9IGluZm8ucGF0aENodW5rTGVuZ3RoIC8gaW5mby5w
YXRoVGV4dExlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgc3BhY2luZyAqPSBzdmdDaGFyLnBh
dGhEYXRhLT55U2NhbGU7CisgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RlZEdseXBoQWR2YW5j
ZSAqPSBzdmdDaGFyLnBhdGhEYXRhLT55U2NhbGU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+eFNjYWxlID0gaW5mby5wYXRo
Q2h1bmtMZW5ndGggLyBpbmZvLnBhdGhUZXh0TGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBz
cGFjaW5nICo9IHN2Z0NoYXIucGF0aERhdGEtPnhTY2FsZTsKKyAgICAgICAgICAgICAgICAgICAg
Y29ycmVjdGVkR2x5cGhBZHZhbmNlICo9IHN2Z0NoYXIucGF0aERhdGEtPnhTY2FsZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEhhbmRsZSBsZXR0
ZXIgJiB3b3JkIHNwYWNpbmcgb24gdGV4dCBwYXRoCisgICAgICAgICAgICBmbG9hdCBwYXRoRXh0
cmFBZHZhbmNlID0gaW5mby5wYXRoRXh0cmFBZHZhbmNlOworICAgICAgICAgICAgaW5mby5wYXRo
RXh0cmFBZHZhbmNlICs9IHNwYWNpbmc7CisKKyAgICAgICAgICAgIHN2Z0NoYXIucGF0aERhdGEt
PmhpZGRlbiA9ICFpbmZvLm5leHRQYXRoTGF5b3V0UG9pbnRBbmRBbmdsZShjb3JyZWN0ZWRHbHlw
aEFkdmFuY2UsIGV4dHJhQWR2YW5jZSwgbmV3T2Zmc2V0KTsKKyAgICAgICAgICAgIHN2Z0NoYXIu
ZHJhd25TZXBlcmF0ZWQgPSB0cnVlOworCisgICAgICAgICAgICBpbmZvLnBhdGhFeHRyYUFkdmFu
Y2UgPSBwYXRoRXh0cmFBZHZhbmNlOworICAgICAgICB9CisKKyAgICAgICAgLy8gQXBwbHkgcm90
YXRpb24KKyAgICAgICAgaWYgKGluZm8uYW5nbGVWYWx1ZUF2YWlsYWJsZSgpKQorICAgICAgICAg
ICAgaW5mby5hbmdsZSA9IGluZm8uYW5nbGVWYWx1ZU5leHQoKTsKKworICAgICAgICAvLyBBcHBs
eSBiYXNlbGluZS1zaGlmdAorICAgICAgICBpZiAoaW5mby5iYXNlbGluZVNoaWZ0VmFsdWVBdmFp
bGFibGUoKSkgeworICAgICAgICAgICAgc3ZnQ2hhci5kcmF3blNlcGVyYXRlZCA9IHRydWU7Cisg
ICAgICAgICAgICBmbG9hdCBzaGlmdCA9IGluZm8uYmFzZWxpbmVTaGlmdFZhbHVlTmV4dCgpOwor
CisgICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCisgICAgICAgICAgICAgICAgaW5mby5z
aGlmdHggKz0gc2hpZnQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5mby5z
aGlmdHkgLT0gc2hpZnQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBUYWtlIGRvbWluYW50LWJh
c2VsaW5lIC8gYWxpZ25tZW50LWJhc2VsaW5lIGludG8gYWNjb3VudAorICAgICAgICB5T3JpZW50
YXRpb25TaGlmdCArPSBhbGlnbm1lbnRCYXNlbGluZVRvU2hpZnQoaXNWZXJ0aWNhbFRleHQsIHRl
eHRSZW5kZXJlciwgZm9udCk7CisKKyAgICAgICAgc3ZnQ2hhci54ID0gaW5mby5jdXJ4OworICAg
ICAgICBzdmdDaGFyLnkgPSBpbmZvLmN1cnk7CisgICAgICAgIHN2Z0NoYXIuYW5nbGUgPSBpbmZv
LmFuZ2xlOworCisgICAgICAgIC8vIEZvciB0ZXh0IHBhdGhzIGFueSBzaGlmdCAoZHgvZHkvYmFz
ZWxpbmUtc2hpZnQpIGhhcyB0byBiZSBhcHBsaWVkIGFmdGVyIHRoZSByb3RhdGlvbgorICAgICAg
ICBpZiAoIWluZm8uaW5QYXRoTGF5b3V0KCkpIHsKKyAgICAgICAgICAgIHN2Z0NoYXIueCArPSBp
bmZvLnNoaWZ0eCArIHhPcmllbnRhdGlvblNoaWZ0OworICAgICAgICAgICAgc3ZnQ2hhci55ICs9
IGluZm8uc2hpZnR5ICsgeU9yaWVudGF0aW9uU2hpZnQ7CisKKyAgICAgICAgICAgIGlmIChvcmll
bnRhdGlvbkFuZ2xlICE9IDAuMGYpCisgICAgICAgICAgICAgICAgc3ZnQ2hhci5hbmdsZSArPSBv
cmllbnRhdGlvbkFuZ2xlOworCisgICAgICAgICAgICBpZiAoc3ZnQ2hhci5hbmdsZSAhPSAwLjBm
KQorICAgICAgICAgICAgICAgIHN2Z0NoYXIuZHJhd25TZXBlcmF0ZWQgPSB0cnVlOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+b3JpZW50YXRpb25Bbmds
ZSA9IG9yaWVudGF0aW9uQW5nbGU7CisKKyAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkK
KyAgICAgICAgICAgICAgICBzdmdDaGFyLmFuZ2xlIC09IDkwLjBmOworCisgICAgICAgICAgICBz
dmdDaGFyLnBhdGhEYXRhLT54U2hpZnQgPSBpbmZvLnNoaWZ0eCArIHhPcmllbnRhdGlvblNoaWZ0
OworICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+eVNoaWZ0ID0gaW5mby5zaGlmdHkgKyB5
T3JpZW50YXRpb25TaGlmdDsKKworICAgICAgICAgICAgLy8gVHJhbnNsYXRlIHRvIGdseXBoIG1p
ZHBvaW50CisgICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpIHsKKyAgICAgICAgICAgICAg
ICBzdmdDaGFyLnBhdGhEYXRhLT54U2hpZnQgKz0gaW5mby5keDsKKyAgICAgICAgICAgICAgICBz
dmdDaGFyLnBhdGhEYXRhLT55U2hpZnQgLT0gZ2x5cGhBZHZhbmNlIC8gMi4wZjsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+eFNoaWZ0IC09
IGdseXBoQWR2YW5jZSAvIDIuMGY7CisgICAgICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+
eVNoaWZ0ICs9IGluZm8uZHk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAv
LyBBZHZhbmNlIHRvIG5ldyBwb3NpdGlvbgorICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpIHsK
KyAgICAgICAgICAgIHN2Z0NoYXIuZHJhd25TZXBlcmF0ZWQgPSB0cnVlOworICAgICAgICAgICAg
aW5mby5jdXJ5ICs9IGdseXBoQWR2YW5jZSArIHNwYWNpbmc7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgaW5mby5jdXJ4ICs9IGdseXBoQWR2YW5jZSArIHNwYWNpbmc7CisKKyAgICAgICAg
Ly8gQWR2YW5jZSB0byBuZXh0IGNoYXJhY3RlciBncm91cAorICAgICAgICBmb3IgKGludCBrID0g
MDsgayA8IGNoYXJzQ29uc3VtZWQ7ICsraykgeworICAgICAgICAgICAgaW5mby5zdmdDaGFycy5h
cHBlbmQoc3ZnQ2hhcik7CisgICAgICAgICAgICBpbmZvLnByb2Nlc3NlZFNpbmdsZUNoYXJhY3Rl
cigpOworICAgICAgICAgICAgc3ZnQ2hhci5kcmF3blNlcGVyYXRlZCA9IGZhbHNlOworICAgICAg
ICAgICAgc3ZnQ2hhci5uZXdUZXh0Q2h1bmsgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1NWR0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9T
VkdJbmxpbmVUZXh0Qm94LmgJKHJldmlzaW9uIDU5MDc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
U1ZHSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3MiArMjgsNTcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgU1ZHUm9vdElubGluZUJveDsKK2NsYXNz
IFNWR1Jvb3RJbmxpbmVCb3g7CiAKLSAgICBzdHJ1Y3QgU1ZHQ2hhcjsKLSAgICBzdHJ1Y3QgU1ZH
VGV4dERlY29yYXRpb25JbmZvOworc3RydWN0IFNWR0NoYXI7CitzdHJ1Y3QgU1ZHQ2hhcmFjdGVy
TGF5b3V0SW5mbzsKK3N0cnVjdCBTVkdMYXN0R2x5cGhJbmZvOworc3RydWN0IFNWR1RleHREZWNv
cmF0aW9uSW5mbzsKK3N0cnVjdCBTVkdUZXh0UGFpbnRJbmZvOwogCi0gICAgZW51bSBTVkdUZXh0
UGFpbnRTdWJwaGFzZSB7Ci0gICAgICAgIFNWR1RleHRQYWludFN1YnBoYXNlQmFja2dyb3VuZCwK
LSAgICAgICAgU1ZHVGV4dFBhaW50U3VicGhhc2VHbHlwaEZpbGwsCi0gICAgICAgIFNWR1RleHRQ
YWludFN1YnBoYXNlR2x5cGhGaWxsU2VsZWN0aW9uLAotICAgICAgICBTVkdUZXh0UGFpbnRTdWJw
aGFzZUdseXBoU3Ryb2tlLAotICAgICAgICBTVkdUZXh0UGFpbnRTdWJwaGFzZUdseXBoU3Ryb2tl
U2VsZWN0aW9uLAotICAgICAgICBTVkdUZXh0UGFpbnRTdWJwaGFzZUZvcmVncm91bmQKLSAgICB9
OwotCi0gICAgc3RydWN0IFNWR1RleHRQYWludEluZm8gewotICAgICAgICBTVkdUZXh0UGFpbnRJ
bmZvKCkKLSAgICAgICAgICAgIDogYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSgwKQotICAgICAgICAg
ICAgLCBzdWJwaGFzZShTVkdUZXh0UGFpbnRTdWJwaGFzZUJhY2tncm91bmQpCi0gICAgICAgIHsK
LSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlclNWR1Jlc291cmNlKiBhY3RpdmVQYWludGluZ1Jl
c291cmNlOwotICAgICAgICBTVkdUZXh0UGFpbnRTdWJwaGFzZSBzdWJwaGFzZTsKLSAgICB9Owot
Ci0gICAgY2xhc3MgU1ZHSW5saW5lVGV4dEJveCA6IHB1YmxpYyBJbmxpbmVUZXh0Qm94IHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIFNWR0lubGluZVRleHRCb3goUmVuZGVyT2JqZWN0KiBvYmopOwot
Ci0gICAgICAgIHZpcnR1YWwgaW50IHZpcnR1YWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hl
aWdodDsgfQotICAgICAgICB2b2lkIHNldEhlaWdodChpbnQgaCkgeyBtX2hlaWdodCA9IGg7IH0K
LQotICAgICAgICB2aXJ0dWFsIGludCBzZWxlY3Rpb25Ub3AoKTsKLSAgICAgICAgdmlydHVhbCBp
bnQgc2VsZWN0aW9uSGVpZ2h0KCk7Ci0KLSAgICAgICAgdmlydHVhbCBpbnQgb2Zmc2V0Rm9yUG9z
aXRpb24oaW50IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMgPSB0cnVlKSBjb25zdDsKLSAg
ICAgICAgdmlydHVhbCBpbnQgcG9zaXRpb25Gb3JPZmZzZXQoaW50IG9mZnNldCkgY29uc3Q7Ci0K
LSAgICAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHkpOwotICAgICAgICB2
aXJ0dWFsIEludFJlY3Qgc2VsZWN0aW9uUmVjdChpbnQgYWJzeCwgaW50IGFic3ksIGludCBzdGFy
dFBvcywgaW50IGVuZFBvcyk7CitjbGFzcyBTVkdJbmxpbmVUZXh0Qm94IDogcHVibGljIElubGlu
ZVRleHRCb3ggeworcHVibGljOgorICAgIFNWR0lubGluZVRleHRCb3goUmVuZGVyT2JqZWN0KiBv
YmopOwogCi0gICAgICAgIC8vIFNWR3MgY3VzdG9tIHBhaW50IHRleHQgbWV0aG9kCi0gICAgICAg
IHZvaWQgcGFpbnRDaGFyYWN0ZXJzKFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgaW50IHR4LCBp
bnQgdHksIGNvbnN0IFNWR0NoYXImLCBjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW5ndGgsIFNW
R1RleHRQYWludEluZm8mKTsKKyAgICB2aXJ0dWFsIGludCB2aXJ0dWFsSGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9oZWlnaHQ7IH0KKyAgICB2b2lkIHNldEhlaWdodChpbnQgaCkgeyBtX2hlaWdo
dCA9IGg7IH0KIAotICAgICAgICAvLyBTVkdzIGN1c3RvbSBwYWludCBzZWxlY3Rpb24gbWV0aG9k
Ci0gICAgICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oaW50IGJveFN0YXJ0T2Zmc2V0LCBjb25zdCBT
VkdDaGFyJiwgY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBHcmFwaGljc0NvbnRleHQqLCBSZW5k
ZXJTdHlsZSosIGNvbnN0IEZvbnQmKTsKKyAgICB2aXJ0dWFsIGludCBzZWxlY3Rpb25Ub3AoKSB7
IHJldHVybiBtX3k7IH0KKyAgICB2aXJ0dWFsIGludCBzZWxlY3Rpb25IZWlnaHQoKSB7IHJldHVy
biBtX2hlaWdodDsgfQogCi0gICAgICAgIC8vIFNWR3MgY3VzdG9tIHBhaW50IGRlY29yYXRpb24g
bWV0aG9kCi0gICAgICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uKEVUZXh0RGVjb3JhdGlvbiwgR3Jh
cGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHksIGludCB3aWR0aCwgY29uc3QgU1ZHQ2hhciYs
IGNvbnN0IFNWR1RleHREZWNvcmF0aW9uSW5mbyYpOworICAgIHZpcnR1YWwgaW50IG9mZnNldEZv
clBvc2l0aW9uKGludCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzID0gdHJ1ZSkgY29uc3Q7
CisgICAgdmlydHVhbCBpbnQgcG9zaXRpb25Gb3JPZmZzZXQoaW50IG9mZnNldCkgY29uc3Q7CisK
KyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSk7CisgICAgdmlydHVhbCBJ
bnRSZWN0IHNlbGVjdGlvblJlY3QoaW50IGFic3gsIGludCBhYnN5LCBpbnQgc3RhcnRQb3MsIGlu
dCBlbmRQb3MpOworCisgICAgLy8gU1ZHcyBjdXN0b20gcGFpbnQgdGV4dCBtZXRob2QKKyAgICB2
b2lkIHBhaW50Q2hhcmFjdGVycyhSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGludCB0eCwgaW50
IHR5LCBjb25zdCBTVkdDaGFyJiwgY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgbGVuZ3RoLCBTVkdU
ZXh0UGFpbnRJbmZvJik7CisKKyAgICAvLyBTVkdzIGN1c3RvbSBwYWludCBzZWxlY3Rpb24gbWV0
aG9kCisgICAgdm9pZCBwYWludFNlbGVjdGlvbihpbnQgYm94U3RhcnRPZmZzZXQsIGNvbnN0IFNW
R0NoYXImLCBjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIEdyYXBoaWNzQ29udGV4dCosIFJlbmRl
clN0eWxlKiwgY29uc3QgRm9udCYpOworCisgICAgLy8gU1ZHcyBjdXN0b20gcGFpbnQgZGVjb3Jh
dGlvbiBtZXRob2QKKyAgICB2b2lkIHBhaW50RGVjb3JhdGlvbihFVGV4dERlY29yYXRpb24sIEdy
YXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5LCBpbnQgd2lkdGgsIGNvbnN0IFNWR0NoYXIm
LCBjb25zdCBTVkdUZXh0RGVjb3JhdGlvbkluZm8mKTsKICAKLSAgICAgICAgU1ZHUm9vdElubGlu
ZUJveCogc3ZnUm9vdElubGluZUJveCgpIGNvbnN0OworICAgIFNWR1Jvb3RJbmxpbmVCb3gqIHN2
Z1Jvb3RJbmxpbmVCb3goKSBjb25zdDsKIAotICAgICAgICAvLyBIZWxwZXIgZnVuY3Rpb25zIHNo
YXJlZCB3aXRoIFNWR1Jvb3RJbmxpbmVCb3ggICAgIAotICAgICAgICBmbG9hdCBjYWxjdWxhdGVH
bHlwaFdpZHRoKFJlbmRlclN0eWxlKiBzdHlsZSwgaW50IG9mZnNldCwgaW50IGV4dHJhQ2hhcnNB
dmFpbGFibGUsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0Owot
ICAgICAgICBmbG9hdCBjYWxjdWxhdGVHbHlwaEhlaWdodChSZW5kZXJTdHlsZSosIGludCBvZmZz
ZXQsIGludCBleHRyYUNoYXJzQXZhaWxhYmxlKSBjb25zdDsKLQotICAgICAgICBGbG9hdFJlY3Qg
Y2FsY3VsYXRlR2x5cGhCb3VuZGFyaWVzKFJlbmRlclN0eWxlKiwgaW50IG9mZnNldCwgY29uc3Qg
U1ZHQ2hhciYpIGNvbnN0OwotICAgICAgICBTVkdDaGFyKiBjbG9zZXN0Q2hhcmFjdGVyVG9Qb3Np
dGlvbihpbnQgeCwgaW50IHksIGludCYgb2Zmc2V0KSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0g
ICAgICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJTVkdJbmxpbmVUZXh0OwotICAgICAgICBib29sIHN2
Z0NoYXJhY3RlckhpdHNQb3NpdGlvbihpbnQgeCwgaW50IHksIGludCYgb2Zmc2V0KSBjb25zdDsK
LSAgICAgICAgYm9vbCBjaHVua1NlbGVjdGlvblN0YXJ0RW5kKGNvbnN0IFVDaGFyKiBjaHVuaywg
aW50IGNodW5rTGVuZ3RoLCBpbnQmIHNlbGVjdGlvblN0YXJ0LCBpbnQmIHNlbGVjdGlvbkVuZCk7
Ci0gICAgICAgIAotICAgICAgICBpbnQgbV9oZWlnaHQ7Ci0gICAgfTsKKyAgICAvLyBIZWxwZXIg
ZnVuY3Rpb25zIHNoYXJlZCB3aXRoIFNWR1Jvb3RJbmxpbmVCb3ggICAgIAorICAgIGZsb2F0IGNh
bGN1bGF0ZUdseXBoV2lkdGgoUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQgb2Zmc2V0LCBpbnQgZXh0
cmFDaGFyc0F2YWlsYWJsZSwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkg
Y29uc3Q7CisgICAgZmxvYXQgY2FsY3VsYXRlR2x5cGhIZWlnaHQoUmVuZGVyU3R5bGUqLCBpbnQg
b2Zmc2V0LCBpbnQgZXh0cmFDaGFyc0F2YWlsYWJsZSkgY29uc3Q7CisKKyAgICBGbG9hdFJlY3Qg
Y2FsY3VsYXRlR2x5cGhCb3VuZGFyaWVzKFJlbmRlclN0eWxlKiwgaW50IG9mZnNldCwgY29uc3Qg
U1ZHQ2hhciYpIGNvbnN0OworICAgIFNWR0NoYXIqIGNsb3Nlc3RDaGFyYWN0ZXJUb1Bvc2l0aW9u
KGludCB4LCBpbnQgeSwgaW50JiBvZmZzZXQpIGNvbnN0OworCisgICAgdm9pZCBidWlsZExheW91
dEluZm9ybWF0aW9uKFNWR0NoYXJhY3RlckxheW91dEluZm8mLCBTVkdMYXN0R2x5cGhJbmZvJik7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlclNWR0lubGluZVRleHQ7CisgICAg
Ym9vbCBzdmdDaGFyYWN0ZXJIaXRzUG9zaXRpb24oaW50IHgsIGludCB5LCBpbnQmIG9mZnNldCkg
Y29uc3Q7CisgICAgYm9vbCBjaHVua1NlbGVjdGlvblN0YXJ0RW5kKGNvbnN0IFVDaGFyKiBjaHVu
aywgaW50IGNodW5rTGVuZ3RoLCBpbnQmIHNlbGVjdGlvblN0YXJ0LCBpbnQmIHNlbGVjdGlvbkVu
ZCk7CisgICAgCisgICAgaW50IG1faGVpZ2h0OworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2
aXNpb24gNTkwNzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgIlNWR1Jvb3RJbmxp
bmVCb3guaCIKICNpbmNsdWRlICJTVkdTdG9wRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1N0eWxl
ZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmgiCiAKICNpbmNs
dWRlIDxtYXRoLmg+CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guY3Bw
CShyZXZpc2lvbiA1OTA3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgT2xp
dmVyIEh1bnQgPG9qaDE2QHN0dWRlbnQuY2FudGVyYnVyeS5hYy5uej4KICAqICAgICAgICAgICAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciBJbmMuCiAgKiAgICAgICAgICAgKEMpIDIwMDcgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CkBAIC0yOCwyNSArMjYsMTQgQEAKICNp
ZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVCb3guaCIKIAotI2luY2x1ZGUg
IkVkaXRvci5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZyYW1l
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2su
aCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlNW
R0lubGluZUZsb3dCb3guaCIKICNpbmNsdWRlICJTVkdJbmxpbmVUZXh0Qm94LmgiCi0jaW5jbHVk
ZSAiU1ZHRm9udEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZURlZnMuaCIKICNp
bmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCisjaW5jbHVkZSAiU1ZHVGV4dExheW91dFV0aWxp
dGllcy5oIgogI2luY2x1ZGUgIlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaCIKLSNpbmNsdWRl
ICJTVkdVUklSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJUZXh0LmgiCi0jaW5jbHVkZSAiVW5pY29k
ZVJhbmdlLmgiCi0KLSNpbmNsdWRlIDxmbG9hdC5oPgogCiAvLyBUZXh0IGNodW5rIGNyZWF0aW9u
IGlzIGNvbXBsZXggYW5kIHRoZSB3aG9sZSBwcm9jZXNzCiAvLyBjYW4gZWFzaWx5IGJlIHRyYWNl
ZCBieSBzZXR0aW5nIHRoaXMgdmFyaWFibGUgPiAwLgpAQCAtNTQsMjE3ICs0MSw2IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGlubGluZSBib29sIGlzVmVydGljYWxXcml0aW5n
TW9kZShjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUpCi17Ci0gICAgcmV0dXJuIHN0eWxlLT53
cml0aW5nTW9kZSgpID09IFdNX1RCUkwgfHwgc3R5bGUtPndyaXRpbmdNb2RlKCkgPT0gV01fVEI7
IAotfQotCi1zdGF0aWMgaW5saW5lIEVBbGlnbm1lbnRCYXNlbGluZSBkb21pbmFudEJhc2VsaW5l
VG9TaGlmdChib29sIGlzVmVydGljYWxUZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHRleHQsIGNv
bnN0IEZvbnQmIGZvbnQpCi17Ci0gICAgQVNTRVJUKHRleHQpOwotCi0gICAgY29uc3QgU1ZHUmVu
ZGVyU3R5bGUqIHN0eWxlID0gdGV4dC0+c3R5bGUoKSA/IHRleHQtPnN0eWxlKCktPnN2Z1N0eWxl
KCkgOiAwOwotICAgIEFTU0VSVChzdHlsZSk7Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUgPSB0ZXh0LT5wYXJlbnQoKSAmJiB0ZXh0LT5wYXJlbnQoKS0+c3R5bGUoKSA/
IHRleHQtPnBhcmVudCgpLT5zdHlsZSgpLT5zdmdTdHlsZSgpIDogMDsKLQotICAgIEVEb21pbmFu
dEJhc2VsaW5lIGJhc2VsaW5lID0gc3R5bGUtPmRvbWluYW50QmFzZWxpbmUoKTsKLSAgICBpZiAo
YmFzZWxpbmUgPT0gREJfQVVUTykgewotICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCi0gICAg
ICAgICAgICBiYXNlbGluZSA9IERCX0NFTlRSQUw7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGJhc2VsaW5lID0gREJfQUxQSEFCRVRJQzsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGJhc2VsaW5l
KSB7Ci0gICAgY2FzZSBEQl9VU0VfU0NSSVBUOgotICAgICAgICAvLyBUT0RPOiBUaGUgZG9taW5h
bnQtYmFzZWxpbmUgYW5kIHRoZSBiYXNlbGluZS10YWJsZSBjb21wb25lbnRzIGFyZSBzZXQgYnkK
LSAgICAgICAgLy8gICAgICAgZGV0ZXJtaW5pbmcgdGhlIHByZWRvbWluYW50IHNjcmlwdCBvZiB0
aGUgY2hhcmFjdGVyIGRhdGEgY29udGVudC4KLSAgICAgICAgcmV0dXJuIEFCX0FMUEhBQkVUSUM7
Ci0gICAgY2FzZSBEQl9OT19DSEFOR0U6Ci0gICAgewotICAgICAgICBpZiAocGFyZW50U3R5bGUp
Ci0gICAgICAgICAgICByZXR1cm4gZG9taW5hbnRCYXNlbGluZVRvU2hpZnQoaXNWZXJ0aWNhbFRl
eHQsIHRleHQtPnBhcmVudCgpLCBmb250KTsKLQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgcmV0dXJuIEFCX0FVVE87Ci0gICAgfQotICAgIGNhc2UgREJfUkVTRVRfU0la
RToKLSAgICB7Ci0gICAgICAgIGlmIChwYXJlbnRTdHlsZSkKLSAgICAgICAgICAgIHJldHVybiBk
b21pbmFudEJhc2VsaW5lVG9TaGlmdChpc1ZlcnRpY2FsVGV4dCwgdGV4dC0+cGFyZW50KCksIGZv
bnQpOwotCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gQUJf
QVVUTzsgICAgCi0gICAgfQotICAgIGNhc2UgREJfSURFT0dSQVBISUM6Ci0gICAgICAgIHJldHVy
biBBQl9JREVPR1JBUEhJQzsKLSAgICBjYXNlIERCX0FMUEhBQkVUSUM6Ci0gICAgICAgIHJldHVy
biBBQl9BTFBIQUJFVElDOwotICAgIGNhc2UgREJfSEFOR0lORzoKLSAgICAgICAgcmV0dXJuIEFC
X0hBTkdJTkc7Ci0gICAgY2FzZSBEQl9NQVRIRU1BVElDQUw6Ci0gICAgICAgIHJldHVybiBBQl9N
QVRIRU1BVElDQUw7Ci0gICAgY2FzZSBEQl9DRU5UUkFMOgotICAgICAgICByZXR1cm4gQUJfQ0VO
VFJBTDsKLSAgICBjYXNlIERCX01JRERMRToKLSAgICAgICAgcmV0dXJuIEFCX01JRERMRTsKLSAg
ICBjYXNlIERCX1RFWFRfQUZURVJfRURHRToKLSAgICAgICAgcmV0dXJuIEFCX1RFWFRfQUZURVJf
RURHRTsKLSAgICBjYXNlIERCX1RFWFRfQkVGT1JFX0VER0U6Ci0gICAgICAgIHJldHVybiBBQl9U
RVhUX0JFRk9SRV9FREdFOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICByZXR1cm4gQUJfQVVUTzsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
ZmxvYXQgYWxpZ25tZW50QmFzZWxpbmVUb1NoaWZ0KGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0
IFJlbmRlck9iamVjdCogdGV4dCwgY29uc3QgRm9udCYgZm9udCkKLXsKLSAgICBBU1NFUlQodGV4
dCk7Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0LT5zdHlsZSgpID8g
dGV4dC0+c3R5bGUoKS0+c3ZnU3R5bGUoKSA6IDA7Ci0gICAgQVNTRVJUKHN0eWxlKTsKLQotICAg
IGNvbnN0IFNWR1JlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IHRleHQtPnBhcmVudCgpICYmIHRl
eHQtPnBhcmVudCgpLT5zdHlsZSgpID8gdGV4dC0+cGFyZW50KCktPnN0eWxlKCktPnN2Z1N0eWxl
KCkgOiAwOwotCi0gICAgRUFsaWdubWVudEJhc2VsaW5lIGJhc2VsaW5lID0gc3R5bGUtPmFsaWdu
bWVudEJhc2VsaW5lKCk7Ci0gICAgaWYgKGJhc2VsaW5lID09IEFCX0FVVE8pIHsKLSAgICAgICAg
aWYgKHBhcmVudFN0eWxlICYmIHN0eWxlLT5kb21pbmFudEJhc2VsaW5lKCkgPT0gREJfQVVUTykK
LSAgICAgICAgICAgIGJhc2VsaW5lID0gZG9taW5hbnRCYXNlbGluZVRvU2hpZnQoaXNWZXJ0aWNh
bFRleHQsIHRleHQtPnBhcmVudCgpLCBmb250KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
YmFzZWxpbmUgPSBkb21pbmFudEJhc2VsaW5lVG9TaGlmdChpc1ZlcnRpY2FsVGV4dCwgdGV4dCwg
Zm9udCk7Ci0KLSAgICAgICAgQVNTRVJUKGJhc2VsaW5lICE9IEFCX0FVVE8pOyAgICAKLSAgICB9
Ci0KLSAgICAvLyBOb3RlOiBodHRwOi8vd2lraS5hcGFjaGUub3JnL3htbGdyYXBoaWNzLWZvcC9M
aW5lTGF5b3V0L0FsaWdubWVudEhhbmRsaW5nCi0gICAgc3dpdGNoIChiYXNlbGluZSkgewotICAg
IGNhc2UgQUJfQkFTRUxJTkU6Ci0gICAgewotICAgICAgICBpZiAocGFyZW50U3R5bGUpCi0gICAg
ICAgICAgICByZXR1cm4gZG9taW5hbnRCYXNlbGluZVRvU2hpZnQoaXNWZXJ0aWNhbFRleHQsIHRl
eHQtPnBhcmVudCgpLCBmb250KTsKLQotICAgICAgICByZXR1cm4gMC4wZjsKLSAgICB9Ci0gICAg
Y2FzZSBBQl9CRUZPUkVfRURHRToKLSAgICBjYXNlIEFCX1RFWFRfQkVGT1JFX0VER0U6Ci0gICAg
ICAgIHJldHVybiBmb250LmFzY2VudCgpOwotICAgIGNhc2UgQUJfTUlERExFOgotICAgICAgICBy
ZXR1cm4gZm9udC54SGVpZ2h0KCkgLyAyLjBmOwotICAgIGNhc2UgQUJfQ0VOVFJBTDoKLSAgICAg
ICAgLy8gTm90IG5lZWRlZCwgd2UncmUgdGFraW5nIHRoaXMgaW50byBhY2NvdW50IGFscmVhZHkg
Zm9yIHZlcnRpY2FsIHRleHQhCi0gICAgICAgIC8vIHJldHVybiAoZm9udC5hc2NlbnQoKSAtIGZv
bnQuZGVzY2VudCgpKSAvIDIuMGY7Ci0gICAgICAgIHJldHVybiAwLjBmOwotICAgIGNhc2UgQUJf
QUZURVJfRURHRToKLSAgICBjYXNlIEFCX1RFWFRfQUZURVJfRURHRToKLSAgICBjYXNlIEFCX0lE
RU9HUkFQSElDOgotICAgICAgICByZXR1cm4gZm9udC5kZXNjZW50KCk7Ci0gICAgY2FzZSBBQl9B
TFBIQUJFVElDOgotICAgICAgICByZXR1cm4gMC4wZjsKLSAgICBjYXNlIEFCX0hBTkdJTkc6Ci0g
ICAgICAgIHJldHVybiBmb250LmFzY2VudCgpICogOC4wZiAvIDEwLjBmOwotICAgIGNhc2UgQUJf
TUFUSEVNQVRJQ0FMOgotICAgICAgICByZXR1cm4gZm9udC5hc2NlbnQoKSAvIDIuMGY7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAw
LjBmOwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSBmbG9hdCBnbHlwaE9yaWVudGF0aW9uVG9B
bmdsZShjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUsIGJvb2wgaXNWZXJ0aWNhbFRleHQs
IGNvbnN0IFVDaGFyJiBjaGFyYWN0ZXIpCi17Ci0gICAgc3dpdGNoIChpc1ZlcnRpY2FsVGV4dCA/
IHN2Z1N0eWxlLT5nbHlwaE9yaWVudGF0aW9uVmVydGljYWwoKSA6IHN2Z1N0eWxlLT5nbHlwaE9y
aWVudGF0aW9uSG9yaXpvbnRhbCgpKSB7Ci0gICAgY2FzZSBHT19BVVRPOgotICAgIHsKLSAgICAg
ICAgLy8gU3BlYzogRnVsbHdpZHRoIGlkZW9ncmFwaGljIGFuZCBmdWxsd2lkdGggTGF0aW4gdGV4
dCB3aWxsIGJlIHNldCB3aXRoIGEgZ2x5cGgtb3JpZW50YXRpb24gb2YgMC1kZWdyZWVzLgotICAg
ICAgICAvLyAgICAgICBUZXh0IHdoaWNoIGlzIG5vdCBmdWxsd2lkdGggd2lsbCBiZSBzZXQgd2l0
aCBhIGdseXBoLW9yaWVudGF0aW9uIG9mIDkwLWRlZ3JlZXMuCi0gICAgICAgIHVuc2lnbmVkIGlu
dCB1bmljb2RlUmFuZ2UgPSBmaW5kQ2hhclVuaWNvZGVSYW5nZShjaGFyYWN0ZXIpOwotICAgICAg
ICBpZiAodW5pY29kZVJhbmdlID09IGNSYW5nZVNldExhdGluIHx8IHVuaWNvZGVSYW5nZSA9PSBj
UmFuZ2VBcmFiaWMpCi0gICAgICAgICAgICByZXR1cm4gOTAuMGY7Ci0KLSAgICAgICAgcmV0dXJu
IDAuMGY7Ci0gICAgfQotICAgIGNhc2UgR09fOTBERUc6Ci0gICAgICAgIHJldHVybiA5MC4wZjsK
LSAgICBjYXNlIEdPXzE4MERFRzoKLSAgICAgICAgcmV0dXJuIDE4MC4wZjsKLSAgICBjYXNlIEdP
XzI3MERFRzoKLSAgICAgICAgcmV0dXJuIDI3MC4wZjsKLSAgICBjYXNlIEdPXzBERUc6Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5l
IGJvb2wgZ2x5cGhPcmllbnRhdGlvbklzTXVsdGlwbHlPZjE4MERlZ3JlZXMoZmxvYXQgb3JpZW50
YXRpb25BbmdsZSkKLXsKLSAgICByZXR1cm4gZmFic2YoZm1vZGYob3JpZW50YXRpb25BbmdsZSwg
MTgwLjBmKSkgPT0gMC4wZjsKLX0KLQotc3RhdGljIGlubGluZSBmbG9hdCBjYWxjdWxhdGVHbHlw
aEFkdmFuY2VBbmRTaGlmdFJlc3BlY3RpbmdPcmllbnRhdGlvbihib29sIGlzVmVydGljYWxUZXh0
LCBmbG9hdCBvcmllbnRhdGlvbkFuZ2xlLCBmbG9hdCBnbHlwaFdpZHRoLCBmbG9hdCBnbHlwaEhl
aWdodCwgY29uc3QgRm9udCYgZm9udCwgU1ZHQ2hhciYgc3ZnQ2hhciwgZmxvYXQmIHhPcmllbnRh
dGlvblNoaWZ0LCBmbG9hdCYgeU9yaWVudGF0aW9uU2hpZnQpCi17Ci0gICAgYm9vbCBvcmllbnRh
dGlvbklzTXVsdGlwbHlPZjE4MERlZ3JlZXMgPSBnbHlwaE9yaWVudGF0aW9uSXNNdWx0aXBseU9m
MTgwRGVncmVlcyhvcmllbnRhdGlvbkFuZ2xlKTsKLQotICAgIC8vIFRoZSBmdW5jdGlvbiBpcyBi
YXNlZCBvbiBzcGVjIHJlcXVpcmVtZW50czoKLSAgICAvLwotICAgIC8vIFNwZWM6IElmIHRoZSAn
Z2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCcgcmVzdWx0cyBpbiBhbiBvcmllbnRhdGlvbiBh
bmdsZSB0aGF0IGlzIG5vdCBhIG11bHRpcGxlIG9mCi0gICAgLy8gb2YgMTgwIGRlZ3JlZXMsIHRo
ZW4gdGhlIGN1cnJlbnQgdGV4dCBwb3NpdGlvbiBpcyBpbmNyZW1lbnRlZCBhY2NvcmRpbmcgdG8g
dGhlIHZlcnRpY2FsIG1ldHJpY3Mgb2YgdGhlIGdseXBoLgotICAgIC8vCi0gICAgLy8gU3BlYzog
SWYgaWYgdGhlICdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCcgcmVzdWx0cyBpbiBhbiBvcmll
bnRhdGlvbiBhbmdsZSB0aGF0IGlzIG5vdCBhIG11bHRpcGxlIG9mCi0gICAgLy8gMTgwIGRlZ3Jl
ZXMsdGhlbiB0aGUgY3VycmVudCB0ZXh0IHBvc2l0aW9uIGlzIGluY3JlbWVudGVkIGFjY29yZGlu
ZyB0byB0aGUgaG9yaXpvbnRhbCBtZXRyaWNzIG9mIHRoZSBnbHlwaC4KLQotICAgIC8vIHZlcnRp
Y2FsIG9yaWVudGF0aW9uIGhhbmRsaW5nCi0gICAgaWYgKGlzVmVydGljYWxUZXh0KSB7Ci0gICAg
ICAgIGlmIChvcmllbnRhdGlvbkFuZ2xlID09IDAuMGYpIHsKLSAgICAgICAgICAgIHhPcmllbnRh
dGlvblNoaWZ0ID0gLWdseXBoV2lkdGggLyAyLjBmOwotICAgICAgICAgICAgeU9yaWVudGF0aW9u
U2hpZnQgPSBmb250LmFzY2VudCgpOwotICAgICAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uQW5n
bGUgPT0gOTAuMGYpIHsKLSAgICAgICAgICAgIHhPcmllbnRhdGlvblNoaWZ0ID0gLWdseXBoSGVp
Z2h0OwotICAgICAgICAgICAgeU9yaWVudGF0aW9uU2hpZnQgPSBmb250LmRlc2NlbnQoKTsKLSAg
ICAgICAgICAgIHN2Z0NoYXIub3JpZW50YXRpb25TaGlmdFkgPSAtZm9udC5hc2NlbnQoKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChvcmllbnRhdGlvbkFuZ2xlID09IDI3MC4wZikgewotICAgICAgICAg
ICAgeE9yaWVudGF0aW9uU2hpZnQgPSBnbHlwaEhlaWdodDsKLSAgICAgICAgICAgIHlPcmllbnRh
dGlvblNoaWZ0ID0gZm9udC5kZXNjZW50KCk7Ci0gICAgICAgICAgICBzdmdDaGFyLm9yaWVudGF0
aW9uU2hpZnRYID0gLWdseXBoV2lkdGg7Ci0gICAgICAgICAgICBzdmdDaGFyLm9yaWVudGF0aW9u
U2hpZnRZID0gLWZvbnQuYXNjZW50KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb25B
bmdsZSA9PSAxODAuMGYpIHsKLSAgICAgICAgICAgIHlPcmllbnRhdGlvblNoaWZ0ID0gZm9udC5h
c2NlbnQoKTsKLSAgICAgICAgICAgIHN2Z0NoYXIub3JpZW50YXRpb25TaGlmdFggPSAtZ2x5cGhX
aWR0aCAvIDIuMGY7Ci0gICAgICAgICAgICBzdmdDaGFyLm9yaWVudGF0aW9uU2hpZnRZID0gZm9u
dC5hc2NlbnQoKSAtIGZvbnQuZGVzY2VudCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gdmVy
dGljYWwgYWR2YW5jZSBjYWxjdWxhdGlvbgotICAgICAgICBpZiAob3JpZW50YXRpb25BbmdsZSAh
PSAwLjBmICYmICFvcmllbnRhdGlvbklzTXVsdGlwbHlPZjE4MERlZ3JlZXMpCi0gICAgICAgICAg
ICByZXR1cm4gZ2x5cGhXaWR0aDsKLQotICAgICAgICByZXR1cm4gZ2x5cGhIZWlnaHQ7IAotICAg
IH0KLQotICAgIC8vIGhvcml6b250YWwgb3JpZW50YXRpb24gaGFuZGxpbmcKLSAgICBpZiAob3Jp
ZW50YXRpb25BbmdsZSA9PSA5MC4wZikgewotICAgICAgICB4T3JpZW50YXRpb25TaGlmdCA9IGds
eXBoV2lkdGggLyAyLjBmOwotICAgICAgICB5T3JpZW50YXRpb25TaGlmdCA9IC1mb250LmRlc2Nl
bnQoKTsKLSAgICAgICAgc3ZnQ2hhci5vcmllbnRhdGlvblNoaWZ0WCA9IC1nbHlwaFdpZHRoIC8g
Mi4wZiAtIGZvbnQuZGVzY2VudCgpOyAKLSAgICAgICAgc3ZnQ2hhci5vcmllbnRhdGlvblNoaWZ0
WSA9IGZvbnQuZGVzY2VudCgpOwotICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb25BbmdsZSA9PSAy
NzAuMGYpIHsKLSAgICAgICAgeE9yaWVudGF0aW9uU2hpZnQgPSAtZ2x5cGhXaWR0aCAvIDIuMGY7
Ci0gICAgICAgIHlPcmllbnRhdGlvblNoaWZ0ID0gLWZvbnQuZGVzY2VudCgpOwotICAgICAgICBz
dmdDaGFyLm9yaWVudGF0aW9uU2hpZnRYID0gLWdseXBoV2lkdGggLyAyLjBmICsgZm9udC5kZXNj
ZW50KCk7Ci0gICAgICAgIHN2Z0NoYXIub3JpZW50YXRpb25TaGlmdFkgPSBnbHlwaEhlaWdodDsK
LSAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uQW5nbGUgPT0gMTgwLjBmKSB7Ci0gICAgICAgIHhP
cmllbnRhdGlvblNoaWZ0ID0gZ2x5cGhXaWR0aCAvIDIuMGY7Ci0gICAgICAgIHN2Z0NoYXIub3Jp
ZW50YXRpb25TaGlmdFggPSAtZ2x5cGhXaWR0aCAvIDIuMGY7Ci0gICAgICAgIHN2Z0NoYXIub3Jp
ZW50YXRpb25TaGlmdFkgPSBmb250LmFzY2VudCgpIC0gZm9udC5kZXNjZW50KCk7Ci0gICAgfQot
Ci0gICAgLy8gaG9yaXpvbnRhbCBhZHZhbmNlIGNhbGN1bGF0aW9uCi0gICAgaWYgKG9yaWVudGF0
aW9uQW5nbGUgIT0gMC4wZiAmJiAhb3JpZW50YXRpb25Jc011bHRpcGx5T2YxODBEZWdyZWVzKQot
ICAgICAgICByZXR1cm4gZ2x5cGhIZWlnaHQ7Ci0KLSAgICByZXR1cm4gZ2x5cGhXaWR0aDsKLX0K
LQogc3RhdGljIGlubGluZSB2b2lkIHN0YXJ0VGV4dENodW5rKFNWR1RleHRDaHVua0xheW91dElu
Zm8mIGluZm8pCiB7CiAgICAgaW5mby5jaHVuay5ib3hlcy5jbGVhcigpOwpAQCAtMjk0LDg5ICs3
MCw2IEBAIFJlbmRlclNWR1Jvb3QqIGZpbmRTVkdSb290T2JqZWN0KFJlbmRlck8KICAgICByZXR1
cm4gdG9SZW5kZXJTVkdSb290KHN0YXJ0KTsKIH0KIAotc3RhdGljIGlubGluZSBGbG9hdFBvaW50
IHRvcExlZnRQb3NpdGlvbk9mQ2hhcmFjdGVyUmFuZ2UoVmVjdG9yPFNWR0NoYXI+JiBjaGFycykK
LXsKLSAgICByZXR1cm4gdG9wTGVmdFBvc2l0aW9uT2ZDaGFyYWN0ZXJSYW5nZShjaGFycy5iZWdp
bigpLCBjaGFycy5lbmQoKSk7Ci19Ci0KLUZsb2F0UG9pbnQgdG9wTGVmdFBvc2l0aW9uT2ZDaGFy
YWN0ZXJSYW5nZShWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yIGl0LCBWZWN0b3I8U1ZHQ2hhcj46
Oml0ZXJhdG9yIGVuZCkKLXsKLSAgICBmbG9hdCBsb3dYID0gRkxUX01BWCwgbG93WSA9IEZMVF9N
QVg7Ci0gICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPmlzSGlk
ZGVuKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmbG9hdCB4ID0gKCppdCku
eDsKLSAgICAgICAgZmxvYXQgeSA9ICgqaXQpLnk7Ci0KLSAgICAgICAgaWYgKHggPCBsb3dYKQot
ICAgICAgICAgICAgbG93WCA9IHg7Ci0KLSAgICAgICAgaWYgKHkgPCBsb3dZKQotICAgICAgICAg
ICAgbG93WSA9IHk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEZsb2F0UG9pbnQobG93WCwgbG93WSk7
Ci19Ci0KLS8vIEhlbHBlciBmdW5jdGlvbgotc3RhdGljIGZsb2F0IGNhbGN1bGF0ZUNTU0tlcm5p
bmcoUmVuZGVyT2JqZWN0KiBpdGVtKQotewotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBpdGVtLT5z
dHlsZSgpLT5mb250KCk7Ci0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gaXRl
bS0+c3R5bGUoKS0+c3ZnU3R5bGUoKTsKLQotICAgIGZsb2F0IGtlcm5pbmcgPSAwLjBmOwotICAg
IGlmIChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPihzdmdTdHlsZS0+a2VybmluZygpKSkgewotICAgICAgICBrZXJuaW5nID0gcHJp
bWl0aXZlLT5nZXRGbG9hdFZhbHVlKCk7Ci0KLSAgICAgICAgaWYgKHByaW1pdGl2ZS0+cHJpbWl0
aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAmJiBmb250LnBp
eGVsU2l6ZSgpID4gMCkKLSAgICAgICAgICAgIGtlcm5pbmcgPSBrZXJuaW5nIC8gMTAwLjBmICog
Zm9udC5waXhlbFNpemUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4ga2VybmluZzsKLX0KLQotc3Rh
dGljIGJvb2wgYXBwbHlTVkdLZXJuaW5nKFNWR0NoYXJhY3RlckxheW91dEluZm8mIGluZm8sIFJl
bmRlck9iamVjdCogaXRlbSwgTGFzdEdseXBoSW5mbyYgbGFzdEdseXBoLCBjb25zdCBTdHJpbmcm
IHVuaWNvZGVTdHJpbmcsIGNvbnN0IFN0cmluZyYgZ2x5cGhOYW1lLCBib29sIGlzVmVydGljYWxU
ZXh0KQotewotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgZmxvYXQgaG9yaXpvbnRhbEtlcm5p
bmcgPSAwLjBmOwotICAgIGZsb2F0IHZlcnRpY2FsS2VybmluZyA9IDAuMGY7Ci0gICAgY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlID0gaXRlbS0+c3R5bGUoKTsKLSAgICBTVkdGb250RWxlbWVudCog
c3ZnRm9udCA9IDA7Ci0gICAgaWYgKHN0eWxlLT5mb250KCkuaXNTVkdGb250KCkpCi0gICAgICAg
IHN2Z0ZvbnQgPSBzdHlsZS0+Zm9udCgpLnN2Z0ZvbnQoKTsKLQotICAgIGlmIChzdHlsZS0+Zm9u
dCgpLmlzU1ZHRm9udCgpKSB7Ci0gICAgICAgIGlmIChsYXN0R2x5cGguaXNWYWxpZCkgewotICAg
ICAgICAgICAgaG9yaXpvbnRhbEtlcm5pbmcgPSBzdmdGb250LT5ob3Jpem9udGFsS2VybmluZ0Zv
clBhaXJPZlN0cmluZ3NBbmRHbHlwaHMobGFzdEdseXBoLnVuaWNvZGUsIGxhc3RHbHlwaC5nbHlw
aE5hbWUsIHVuaWNvZGVTdHJpbmcsIGdseXBoTmFtZSk7Ci0gICAgICAgICAgICBpZiAoaXNWZXJ0
aWNhbFRleHQpCi0gICAgICAgICAgICAgICAgdmVydGljYWxLZXJuaW5nID0gc3ZnRm9udC0+dmVy
dGljYWxLZXJuaW5nRm9yUGFpck9mU3RyaW5nc0FuZEdseXBocyhsYXN0R2x5cGgudW5pY29kZSwg
bGFzdEdseXBoLmdseXBoTmFtZSwgdW5pY29kZVN0cmluZywgZ2x5cGhOYW1lKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGxhc3RHbHlwaC51bmljb2RlID0gdW5pY29kZVN0cmluZzsKLSAgICAgICAg
bGFzdEdseXBoLmdseXBoTmFtZSA9IGdseXBoTmFtZTsKLSAgICAgICAgbGFzdEdseXBoLmlzVmFs
aWQgPSB0cnVlOwotICAgICAgICBmbG9hdCBzY2FsZVRvRm9udFNwYWNlID0gc3R5bGUtPmZvbnQo
KS5zaXplKCkgLyBzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250KCktPnVuaXRzUGVyRW0oKTsKLSAg
ICAgICAgaG9yaXpvbnRhbEtlcm5pbmcgKj0gc2NhbGVUb0ZvbnRTcGFjZTsKLSAgICAgICAgdmVy
dGljYWxLZXJuaW5nICo9IHNjYWxlVG9Gb250U3BhY2U7Ci0gICAgfSBlbHNlCi0gICAgICAgIGxh
c3RHbHlwaC5pc1ZhbGlkID0gZmFsc2U7Ci0KLSAgICBpZiAoaG9yaXpvbnRhbEtlcm5pbmcgIT0g
MC4wZiB8fCB2ZXJ0aWNhbEtlcm5pbmcgIT0gMC4wZikgewotICAgICAgICBpbmZvLmN1cnggLT0g
aG9yaXpvbnRhbEtlcm5pbmc7Ci0gICAgICAgIGluZm8uY3VyeSAtPSB2ZXJ0aWNhbEtlcm5pbmc7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGlu
Zm8pOwotICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKLSAgICBVTlVTRURfUEFSQU0obGFzdEdseXBo
KTsKLSAgICBVTlVTRURfUEFSQU0odW5pY29kZVN0cmluZyk7Ci0gICAgVU5VU0VEX1BBUkFNKGds
eXBoTmFtZSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIC8vIEhlbHBlciBjbGFz
cyBmb3IgcGFpbnQoKQogc3RydWN0IFNWR1Jvb3RJbmxpbmVCb3hQYWludFdhbGtlciB7CiAgICAg
U1ZHUm9vdElubGluZUJveFBhaW50V2Fsa2VyKFNWR1Jvb3RJbmxpbmVCb3gqIHJvb3RCb3gsIFJl
bmRlclNWR1Jlc291cmNlRmlsdGVyKiByb290RmlsdGVyLCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQpAQCAtNzY1LDQ4ICs0NTgsNiBAQCBpbnQgU1ZH
Um9vdElubGluZUJveDo6dmVydGljYWxseUFsaWduQm94CiAgICAgcmV0dXJuIGhlaWdodCgpOwog
fQogCi1mbG9hdCBjdW1tdWxhdGVkV2lkdGhPZklubGluZUJveENoYXJhY3RlclJhbmdlKFNWR0lu
bGluZUJveENoYXJhY3RlclJhbmdlJiByYW5nZSkKLXsKLSAgICBBU1NFUlQoIXJhbmdlLmlzT3Bl
bigpKTsKLSAgICBBU1NFUlQocmFuZ2UuaXNDbG9zZWQoKSk7Ci0gICAgQVNTRVJUKHJhbmdlLmJv
eC0+aXNJbmxpbmVUZXh0Qm94KCkpOwotCi0gICAgSW5saW5lVGV4dEJveCogdGV4dEJveCA9IHN0
YXRpY19jYXN0PElubGluZVRleHRCb3gqPihyYW5nZS5ib3gpOwotICAgIFJlbmRlclRleHQqIHRl
eHQgPSB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0
ZXh0LT5zdHlsZSgpOwotCi0gICAgcmV0dXJuIHN0eWxlLT5mb250KCkuZmxvYXRXaWR0aChzdmdU
ZXh0UnVuRm9ySW5saW5lVGV4dEJveCh0ZXh0LT5jaGFyYWN0ZXJzKCkgKyB0ZXh0Qm94LT5zdGFy
dCgpICsgcmFuZ2Uuc3RhcnRPZmZzZXQsIHJhbmdlLmVuZE9mZnNldCAtIHJhbmdlLnN0YXJ0T2Zm
c2V0LCBzdHlsZSwgdGV4dEJveCwgMCkpOwotfQotCi1mbG9hdCBjdW1tdWxhdGVkSGVpZ2h0T2ZJ
bmxpbmVCb3hDaGFyYWN0ZXJSYW5nZShTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZSYgcmFuZ2Up
Ci17Ci0gICAgQVNTRVJUKCFyYW5nZS5pc09wZW4oKSk7Ci0gICAgQVNTRVJUKHJhbmdlLmlzQ2xv
c2VkKCkpOwotICAgIEFTU0VSVChyYW5nZS5ib3gtPmlzSW5saW5lVGV4dEJveCgpKTsKLQotICAg
IElubGluZVRleHRCb3gqIHRleHRCb3ggPSBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94Kj4ocmFu
Z2UuYm94KTsKLSAgICBSZW5kZXJUZXh0KiB0ZXh0ID0gdGV4dEJveC0+dGV4dFJlbmRlcmVyKCk7
Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHRleHQtPnN0eWxlKCktPmZvbnQoKTsKLQotICAgIHJl
dHVybiAocmFuZ2UuZW5kT2Zmc2V0IC0gcmFuZ2Uuc3RhcnRPZmZzZXQpICogKGZvbnQuYXNjZW50
KCkgKyBmb250LmRlc2NlbnQoKSk7Ci19Ci0KLVRleHRSdW4gc3ZnVGV4dFJ1bkZvcklubGluZVRl
eHRCb3goY29uc3QgVUNoYXIqIGMsIGludCBsZW4sIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3Qg
SW5saW5lVGV4dEJveCogdGV4dEJveCwgZmxvYXQgeFBvcykKLXsKLSAgICBBU1NFUlQodGV4dEJv
eCk7Ci0gICAgQVNTRVJUKHN0eWxlKTsKLQotICAgIFRleHRSdW4gcnVuKGMsIGxlbiwgZmFsc2Us
IHN0YXRpY19jYXN0PGludD4oeFBvcyksIHRleHRCb3gtPnRvQWRkKCksIHRleHRCb3gtPmRpcmVj
dGlvbigpID09IFJUTCwgdGV4dEJveC0+bV9kaXJPdmVycmlkZSB8fCBzdHlsZS0+dmlzdWFsbHlP
cmRlcmVkKCkpOwotCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBydW4uc2V0UmVmZXJlbmNp
bmdSZW5kZXJPYmplY3QodGV4dEJveC0+dGV4dFJlbmRlcmVyKCktPnBhcmVudCgpKTsKLSNlbmRp
ZgotCi0gICAgLy8gV2UgaGFuZGxlIGxldHRlciAmIHdvcmQgc3BhY2luZyBvdXJzZWx2ZXMKLSAg
ICBydW4uZGlzYWJsZVNwYWNpbmcoKTsKLSAgICByZXR1cm4gcnVuOwotfQotCiBzdGF0aWMgZmxv
YXQgY3VtbXVsYXRlZFdpZHRoT3JIZWlnaHRPZlRleHRDaHVuayhTVkdUZXh0Q2h1bmsmIGNodW5r
LCBib29sIGNhbGNXaWR0aE9ubHkpCiB7CiAgICAgZmxvYXQgbGVuZ3RoID0gMC4wZjsKQEAgLTk1
NSw4ICs2MDYsOCBAQCBzdGF0aWMgZmxvYXQgY2FsY3VsYXRlVGV4dExlbmd0aENvcnJlY3RpCiAg
ICAgZmxvYXQgY29tcHV0ZWRXaWR0aCA9IGN1bW11bGF0ZWRXaWR0aE9mVGV4dENodW5rKGNodW5r
KTsKICAgICBmbG9hdCBjb21wdXRlZEhlaWdodCA9IGN1bW11bGF0ZWRIZWlnaHRPZlRleHRDaHVu
ayhjaHVuayk7CiAKLSAgICBpZiAoKGNvbXB1dGVkV2lkdGggPD0gMC4wZiAmJiAhY2h1bmsuaXNW
ZXJ0aWNhbFRleHQpIHx8Ci0gICAgICAgIChjb21wdXRlZEhlaWdodCA8PSAwLjBmICYmIGNodW5r
LmlzVmVydGljYWxUZXh0KSkKKyAgICBpZiAoKGNvbXB1dGVkV2lkdGggPD0gMC4wZiAmJiAhY2h1
bmsuaXNWZXJ0aWNhbFRleHQpCisgICAgICAgIHx8IChjb21wdXRlZEhlaWdodCA8PSAwLjBmICYm
IGNodW5rLmlzVmVydGljYWxUZXh0KSkKICAgICAgICAgcmV0dXJuIDAuMGY7CiAKICAgICBpZiAo
Y2h1bmsuaXNWZXJ0aWNhbFRleHQpCkBAIC0xMDMyLDcgKzY4Myw3IEBAIHZvaWQgU1ZHUm9vdElu
bGluZUJveDo6Y29tcHV0ZVBlckNoYXJhY3QKIAogICAgIC8vIEZpbmFsbHkgdGhlIHRvcCBsZWZ0
IHBvc2l0aW9uIG9mIG91ciBib3ggaXMga25vd24uCiAgICAgLy8gUHJvcG9nYXRlIHRoaXMga25v
d25sZWRnZSB0byBvdXIgUmVuZGVyU1ZHVGV4dCBwYXJlbnQuCi0gICAgRmxvYXRQb2ludCB0b3BM
ZWZ0ID0gdG9wTGVmdFBvc2l0aW9uT2ZDaGFyYWN0ZXJSYW5nZShtX3N2Z0NoYXJzKTsKKyAgICBG
bG9hdFBvaW50IHRvcExlZnQgPSB0b3BMZWZ0UG9zaXRpb25PZkNoYXJhY3RlclJhbmdlKG1fc3Zn
Q2hhcnMuYmVnaW4oKSwgbV9zdmdDaGFycy5lbmQoKSk7CiAgICAgYmxvY2soKS0+c2V0TG9jYXRp
b24oKGludCkgZmxvb3JmKHRvcExlZnQueCgpKSwgKGludCkgZmxvb3JmKHRvcExlZnQueSgpKSk7
CiAKICAgICAvLyBMYXlvdXQgYWxsIElubGluZVRleHQvRmxvdyBib3hlcwpAQCAtMTA1MiwxMSAr
NzAzLDExIEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6YnVpbGRMYXlvdXRJbmZvcm0KICAgICAg
ICAgaW5mby5hZGRMYXlvdXRJbmZvcm1hdGlvbihwb3NpdGlvbmluZ0VsZW1lbnQpOwogICAgIH0K
IAotICAgIExhc3RHbHlwaEluZm8gbGFzdEdseXBoOworICAgIFNWR0xhc3RHbHlwaEluZm8gbGFz
dEdseXBoOwogICAgIAogICAgIGZvciAoSW5saW5lQm94KiBjdXJyID0gc3RhcnQtPmZpcnN0Q2hp
bGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRPbkxpbmUoKSkgewogICAgICAgICBpZiAoY3Vy
ci0+cmVuZGVyZXIoKS0+aXNUZXh0KCkpCi0gICAgICAgICAgICBidWlsZExheW91dEluZm9ybWF0
aW9uRm9yVGV4dEJveChpbmZvLCBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94Kj4oY3VyciksIGxh
c3RHbHlwaCk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94Kj4oY3Vy
ciktPmJ1aWxkTGF5b3V0SW5mb3JtYXRpb24oaW5mbywgbGFzdEdseXBoKTsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICBBU1NFUlQoY3Vyci0+aXNJbmxpbmVGbG93Qm94KCkpOwogICAgICAg
ICAgICAgSW5saW5lRmxvd0JveCogZmxvd0JveCA9IHN0YXRpY19jYXN0PElubGluZUZsb3dCb3gq
PihjdXJyKTsKQEAgLTEyNDgsMjMwICs4OTksNiBAQCB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6Omxh
eW91dElubGluZUJveGVzCiAgICAgfQogfQogCi12b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OmJ1aWxk
TGF5b3V0SW5mb3JtYXRpb25Gb3JUZXh0Qm94KFNWR0NoYXJhY3RlckxheW91dEluZm8mIGluZm8s
IElubGluZVRleHRCb3gqIHRleHRCb3gsIExhc3RHbHlwaEluZm8mIGxhc3RHbHlwaCkKLXsKLSAg
ICBSZW5kZXJUZXh0KiB0ZXh0ID0gdGV4dEJveC0+dGV4dFJlbmRlcmVyKCk7Ci0gICAgQVNTRVJU
KHRleHQpOwotCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dC0+c3R5bGUodGV4dEJveC0+
aXNGaXJzdExpbmVTdHlsZSgpKTsKLSAgICBBU1NFUlQoc3R5bGUpOwotCi0gICAgY29uc3QgRm9u
dCYgZm9udCA9IHN0eWxlLT5mb250KCk7Ci0gICAgU1ZHSW5saW5lVGV4dEJveCogc3ZnVGV4dEJv
eCA9IHN0YXRpY19jYXN0PFNWR0lubGluZVRleHRCb3gqPih0ZXh0Qm94KTsKLQotICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHRleHRCb3gtPmxlbigpOwotCi0gICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUq
IHN2Z1N0eWxlID0gc3R5bGUtPnN2Z1N0eWxlKCk7Ci0gICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA9
IGlzVmVydGljYWxXcml0aW5nTW9kZShzdmdTdHlsZSk7Ci0KLSAgICBpbnQgY2hhcnNDb25zdW1l
ZCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSBjaGFyc0Nv
bnN1bWVkKSB7Ci0gICAgICAgIFNWR0NoYXIgc3ZnQ2hhcjsKLQotICAgICAgICBpZiAoaW5mby5p
blBhdGhMYXlvdXQoKSkKLSAgICAgICAgICAgIHN2Z0NoYXIucGF0aERhdGEgPSBTVkdDaGFyT25Q
YXRoOjpjcmVhdGUoKTsKLQotICAgICAgICBmbG9hdCBnbHlwaFdpZHRoID0gMC4wZjsKLSAgICAg
ICAgZmxvYXQgZ2x5cGhIZWlnaHQgPSAwLjBmOwotCi0gICAgICAgIGludCBleHRyYUNoYXJzQXZh
aWxhYmxlID0gbGVuZ3RoIC0gaSAtIDE7Ci0KLSAgICAgICAgU3RyaW5nIHVuaWNvZGVTdHI7Ci0g
ICAgICAgIFN0cmluZyBnbHlwaE5hbWU7Ci0gICAgICAgIGlmICh0ZXh0Qm94LT5kaXJlY3Rpb24o
KSA9PSBSVEwpIHsKLSAgICAgICAgICAgIGdseXBoV2lkdGggPSBzdmdUZXh0Qm94LT5jYWxjdWxh
dGVHbHlwaFdpZHRoKHN0eWxlLCB0ZXh0Qm94LT5lbmQoKSAtIGksIGV4dHJhQ2hhcnNBdmFpbGFi
bGUsIGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSk7Ci0gICAgICAgICAgICBnbHlwaEhlaWdodCA9
IHN2Z1RleHRCb3gtPmNhbGN1bGF0ZUdseXBoSGVpZ2h0KHN0eWxlLCB0ZXh0Qm94LT5lbmQoKSAt
IGksIGV4dHJhQ2hhcnNBdmFpbGFibGUpOwotICAgICAgICAgICAgdW5pY29kZVN0ciA9IFN0cmlu
Zyh0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKS0+dGV4dCgpLT5jaGFyYWN0ZXJzKCkgKyB0ZXh0Qm94
LT5lbmQoKSAtIGksIGNoYXJzQ29uc3VtZWQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgZ2x5cGhXaWR0aCA9IHN2Z1RleHRCb3gtPmNhbGN1bGF0ZUdseXBoV2lkdGgoc3R5bGUsIHRl
eHRCb3gtPnN0YXJ0KCkgKyBpLCBleHRyYUNoYXJzQXZhaWxhYmxlLCBjaGFyc0NvbnN1bWVkLCBn
bHlwaE5hbWUpOwotICAgICAgICAgICAgZ2x5cGhIZWlnaHQgPSBzdmdUZXh0Qm94LT5jYWxjdWxh
dGVHbHlwaEhlaWdodChzdHlsZSwgdGV4dEJveC0+c3RhcnQoKSArIGksIGV4dHJhQ2hhcnNBdmFp
bGFibGUpOwotICAgICAgICAgICAgdW5pY29kZVN0ciA9IFN0cmluZyh0ZXh0Qm94LT50ZXh0UmVu
ZGVyZXIoKS0+dGV4dCgpLT5jaGFyYWN0ZXJzKCkgKyB0ZXh0Qm94LT5zdGFydCgpICsgaSwgY2hh
cnNDb25zdW1lZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGFzc2lnbmVkWCA9IGZhbHNl
OwotICAgICAgICBib29sIGFzc2lnbmVkWSA9IGZhbHNlOwotCi0gICAgICAgIGlmIChpbmZvLnhW
YWx1ZUF2YWlsYWJsZSgpICYmICghaW5mby5pblBhdGhMYXlvdXQoKSB8fCAoaW5mby5pblBhdGhM
YXlvdXQoKSAmJiAhaXNWZXJ0aWNhbFRleHQpKSkgewotICAgICAgICAgICAgaWYgKCFpc1ZlcnRp
Y2FsVGV4dCkKLSAgICAgICAgICAgICAgICBzdmdDaGFyLm5ld1RleHRDaHVuayA9IHRydWU7Ci0K
LSAgICAgICAgICAgIGFzc2lnbmVkWCA9IHRydWU7Ci0gICAgICAgICAgICBzdmdDaGFyLmRyYXdu
U2VwZXJhdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGluZm8uY3VyeCA9IGluZm8ueFZhbHVlTmV4
dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGluZm8ueVZhbHVlQXZhaWxhYmxlKCkgJiYg
KCFpbmZvLmluUGF0aExheW91dCgpIHx8IChpbmZvLmluUGF0aExheW91dCgpICYmIGlzVmVydGlj
YWxUZXh0KSkpIHsKLSAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgICAg
ICAgICBzdmdDaGFyLm5ld1RleHRDaHVuayA9IHRydWU7Ci0KLSAgICAgICAgICAgIGFzc2lnbmVk
WSA9IHRydWU7Ci0gICAgICAgICAgICBzdmdDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGluZm8uY3VyeSA9IGluZm8ueVZhbHVlTmV4dCgpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZmxvYXQgZHggPSAwLjBmOwotICAgICAgICBmbG9hdCBkeSA9IDAuMGY7Ci0KLSAgICAg
ICAgLy8gQXBwbHkgeC1heGlzIHNoaWZ0Ci0gICAgICAgIGlmIChpbmZvLmR4VmFsdWVBdmFpbGFi
bGUoKSkgewotICAgICAgICAgICAgc3ZnQ2hhci5kcmF3blNlcGVyYXRlZCA9IHRydWU7Ci0KLSAg
ICAgICAgICAgIGR4ID0gaW5mby5keFZhbHVlTmV4dCgpOwotICAgICAgICAgICAgaW5mby5keCAr
PSBkeDsKLQotICAgICAgICAgICAgaWYgKCFpbmZvLmluUGF0aExheW91dCgpKQotICAgICAgICAg
ICAgICAgIGluZm8uY3VyeCArPSBkeDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFwcGx5IHkt
YXhpcyBzaGlmdAotICAgICAgICBpZiAoaW5mby5keVZhbHVlQXZhaWxhYmxlKCkpIHsKLSAgICAg
ICAgICAgIHN2Z0NoYXIuZHJhd25TZXBlcmF0ZWQgPSB0cnVlOwotCi0gICAgICAgICAgICBkeSA9
IGluZm8uZHlWYWx1ZU5leHQoKTsKLSAgICAgICAgICAgIGluZm8uZHkgKz0gZHk7Ci0KLSAgICAg
ICAgICAgIGlmICghaW5mby5pblBhdGhMYXlvdXQoKSkKLSAgICAgICAgICAgICAgICBpbmZvLmN1
cnkgKz0gZHk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUYWtlIGxldHRlciAmIHdvcmQgc3Bh
Y2luZyBhbmQga2VybmluZyBpbnRvIGFjY291bnQKLSAgICAgICAgZmxvYXQgc3BhY2luZyA9IGZv
bnQubGV0dGVyU3BhY2luZygpICsgY2FsY3VsYXRlQ1NTS2VybmluZyh0ZXh0Qm94LT5yZW5kZXJl
cigpLT5ub2RlKCktPnJlbmRlcmVyKCkpOwotCi0gICAgICAgIGNvbnN0IFVDaGFyKiBjdXJyZW50
Q2hhcmFjdGVyID0gdGV4dC0+Y2hhcmFjdGVycygpICsgKHRleHRCb3gtPmRpcmVjdGlvbigpID09
IFJUTCA/IHRleHRCb3gtPmVuZCgpIC0gaSA6IHRleHRCb3gtPnN0YXJ0KCkgKyBpKTsKLSAgICAg
ICAgY29uc3QgVUNoYXIqIGxhc3RDaGFyYWN0ZXIgPSAwOwotCi0gICAgICAgIGlmICh0ZXh0Qm94
LT5kaXJlY3Rpb24oKSA9PSBSVEwpIHsKLSAgICAgICAgICAgIGlmIChpIDwgdGV4dEJveC0+ZW5k
KCkpCi0gICAgICAgICAgICAgICAgbGFzdENoYXJhY3RlciA9IHRleHQtPmNoYXJhY3RlcnMoKSAr
IHRleHRCb3gtPmVuZCgpIC0gaSArICAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
aWYgKGkgPiAwKQotICAgICAgICAgICAgICAgIGxhc3RDaGFyYWN0ZXIgPSB0ZXh0LT5jaGFyYWN0
ZXJzKCkgKyB0ZXh0Qm94LT5zdGFydCgpICsgaSAtIDE7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBGSVhNRTogU1ZHIEtlcm5pbmcgZG9lc24ndCBnZXQgYXBwbGllZCBvbiB0ZXh0cyBvbiBwYXRo
LgotICAgICAgICBib29sIGFwcGxpZWRTVkdLZXJuaW5nID0gYXBwbHlTVkdLZXJuaW5nKGluZm8s
IHRleHRCb3gtPnJlbmRlcmVyKCktPm5vZGUoKS0+cmVuZGVyZXIoKSwgbGFzdEdseXBoLCB1bmlj
b2RlU3RyLCBnbHlwaE5hbWUsIGlzVmVydGljYWxUZXh0KTsKLSAgICAgICAgaWYgKGluZm8ubmV4
dERyYXduU2VwZXJhdGVkIHx8IHNwYWNpbmcgIT0gMC4wZiB8fCBhcHBsaWVkU1ZHS2VybmluZykg
ewotICAgICAgICAgICAgaW5mby5uZXh0RHJhd25TZXBlcmF0ZWQgPSBmYWxzZTsKLSAgICAgICAg
ICAgIHN2Z0NoYXIuZHJhd25TZXBlcmF0ZWQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKGN1cnJlbnRDaGFyYWN0ZXIgJiYgRm9udDo6dHJlYXRBc1NwYWNlKCpjdXJyZW50Q2hhcmFj
dGVyKSAmJiBsYXN0Q2hhcmFjdGVyICYmICFGb250Ojp0cmVhdEFzU3BhY2UoKmxhc3RDaGFyYWN0
ZXIpKSB7Ci0gICAgICAgICAgICBzcGFjaW5nICs9IGZvbnQud29yZFNwYWNpbmcoKTsKLQotICAg
ICAgICAgICAgaWYgKHNwYWNpbmcgIT0gMC4wZiAmJiAhaW5mby5pblBhdGhMYXlvdXQoKSkKLSAg
ICAgICAgICAgICAgICBpbmZvLm5leHREcmF3blNlcGVyYXRlZCA9IHRydWU7Ci0gICAgICAgIH0K
LQotICAgICAgICBmbG9hdCBvcmllbnRhdGlvbkFuZ2xlID0gZ2x5cGhPcmllbnRhdGlvblRvQW5n
bGUoc3ZnU3R5bGUsIGlzVmVydGljYWxUZXh0LCAqY3VycmVudENoYXJhY3Rlcik7Ci0KLSAgICAg
ICAgZmxvYXQgeE9yaWVudGF0aW9uU2hpZnQgPSAwLjBmOwotICAgICAgICBmbG9hdCB5T3JpZW50
YXRpb25TaGlmdCA9IDAuMGY7Ci0gICAgICAgIGZsb2F0IGdseXBoQWR2YW5jZSA9IGNhbGN1bGF0
ZUdseXBoQWR2YW5jZUFuZFNoaWZ0UmVzcGVjdGluZ09yaWVudGF0aW9uKGlzVmVydGljYWxUZXh0
LCBvcmllbnRhdGlvbkFuZ2xlLCBnbHlwaFdpZHRoLCBnbHlwaEhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9udCwgc3ZnQ2hhciwgeE9yaWVudGF0aW9uU2hpZnQsIHlPcmllbnRhdGlv
blNoaWZ0KTsKLQotICAgICAgICAvLyBIYW5kbGUgdGV4dFBhdGggbGF5b3V0IG1vZGUKLSAgICAg
ICAgaWYgKGluZm8uaW5QYXRoTGF5b3V0KCkpIHsKLSAgICAgICAgICAgIGZsb2F0IGV4dHJhQWR2
YW5jZSA9IGlzVmVydGljYWxUZXh0ID8gZHkgOiBkeDsKLSAgICAgICAgICAgIGZsb2F0IG5ld09m
ZnNldCA9IEZMVF9NSU47Ci0KLSAgICAgICAgICAgIGlmIChhc3NpZ25lZFggJiYgIWlzVmVydGlj
YWxUZXh0KQotICAgICAgICAgICAgICAgIG5ld09mZnNldCA9IGluZm8uY3VyeDsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKGFzc2lnbmVkWSAmJiBpc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgICAgICAg
ICBuZXdPZmZzZXQgPSBpbmZvLmN1cnk7Ci0KLSAgICAgICAgICAgIGZsb2F0IGNvcnJlY3RlZEds
eXBoQWR2YW5jZSA9IGdseXBoQWR2YW5jZTsKLQotICAgICAgICAgICAgLy8gSGFuZGxlIGxlbmd0
aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgYnkgc3BlY2lmeWluZyBwZXItY2hhcmFjdGVyIHNj
YWxlIG9wZXJhdGlvbnMKLSAgICAgICAgICAgIGlmIChpbmZvLnBhdGhUZXh0TGVuZ3RoID4gMC4w
ZiAmJiBpbmZvLnBhdGhDaHVua0xlbmd0aCA+IDAuMGYpIHsgCi0gICAgICAgICAgICAgICAgaWYg
KGlzVmVydGljYWxUZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN2Z0NoYXIucGF0aERhdGEt
PnlTY2FsZSA9IGluZm8ucGF0aENodW5rTGVuZ3RoIC8gaW5mby5wYXRoVGV4dExlbmd0aDsKLSAg
ICAgICAgICAgICAgICAgICAgc3BhY2luZyAqPSBzdmdDaGFyLnBhdGhEYXRhLT55U2NhbGU7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvcnJlY3RlZEdseXBoQWR2YW5jZSAqPSBzdmdDaGFyLnBhdGhE
YXRhLT55U2NhbGU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgc3ZnQ2hhci5wYXRoRGF0YS0+eFNjYWxlID0gaW5mby5wYXRoQ2h1bmtMZW5ndGggLyBpbmZv
LnBhdGhUZXh0TGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBzcGFjaW5nICo9IHN2Z0NoYXIu
cGF0aERhdGEtPnhTY2FsZTsKLSAgICAgICAgICAgICAgICAgICAgY29ycmVjdGVkR2x5cGhBZHZh
bmNlICo9IHN2Z0NoYXIucGF0aERhdGEtPnhTY2FsZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEhhbmRsZSBsZXR0ZXIgJiB3b3JkIHNwYWNpbmcg
b24gdGV4dCBwYXRoCi0gICAgICAgICAgICBmbG9hdCBwYXRoRXh0cmFBZHZhbmNlID0gaW5mby5w
YXRoRXh0cmFBZHZhbmNlOwotICAgICAgICAgICAgaW5mby5wYXRoRXh0cmFBZHZhbmNlICs9IHNw
YWNpbmc7Ci0KLSAgICAgICAgICAgIHN2Z0NoYXIucGF0aERhdGEtPmhpZGRlbiA9ICFpbmZvLm5l
eHRQYXRoTGF5b3V0UG9pbnRBbmRBbmdsZShjb3JyZWN0ZWRHbHlwaEFkdmFuY2UsIGV4dHJhQWR2
YW5jZSwgbmV3T2Zmc2V0KTsKLSAgICAgICAgICAgIHN2Z0NoYXIuZHJhd25TZXBlcmF0ZWQgPSB0
cnVlOwotCi0gICAgICAgICAgICBpbmZvLnBhdGhFeHRyYUFkdmFuY2UgPSBwYXRoRXh0cmFBZHZh
bmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQXBwbHkgcm90YXRpb24KLSAgICAgICAgaWYg
KGluZm8uYW5nbGVWYWx1ZUF2YWlsYWJsZSgpKQotICAgICAgICAgICAgaW5mby5hbmdsZSA9IGlu
Zm8uYW5nbGVWYWx1ZU5leHQoKTsKLQotICAgICAgICAvLyBBcHBseSBiYXNlbGluZS1zaGlmdAot
ICAgICAgICBpZiAoaW5mby5iYXNlbGluZVNoaWZ0VmFsdWVBdmFpbGFibGUoKSkgewotICAgICAg
ICAgICAgc3ZnQ2hhci5kcmF3blNlcGVyYXRlZCA9IHRydWU7Ci0gICAgICAgICAgICBmbG9hdCBz
aGlmdCA9IGluZm8uYmFzZWxpbmVTaGlmdFZhbHVlTmV4dCgpOwotCi0gICAgICAgICAgICBpZiAo
aXNWZXJ0aWNhbFRleHQpCi0gICAgICAgICAgICAgICAgaW5mby5zaGlmdHggKz0gc2hpZnQ7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaW5mby5zaGlmdHkgLT0gc2hpZnQ7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBUYWtlIGRvbWluYW50LWJhc2VsaW5lIC8gYWxpZ25tZW50
LWJhc2VsaW5lIGludG8gYWNjb3VudAotICAgICAgICB5T3JpZW50YXRpb25TaGlmdCArPSBhbGln
bm1lbnRCYXNlbGluZVRvU2hpZnQoaXNWZXJ0aWNhbFRleHQsIHRleHQsIGZvbnQpOwotCi0gICAg
ICAgIHN2Z0NoYXIueCA9IGluZm8uY3VyeDsKLSAgICAgICAgc3ZnQ2hhci55ID0gaW5mby5jdXJ5
OwotICAgICAgICBzdmdDaGFyLmFuZ2xlID0gaW5mby5hbmdsZTsKLQotICAgICAgICAvLyBGb3Ig
dGV4dCBwYXRocyBhbnkgc2hpZnQgKGR4L2R5L2Jhc2VsaW5lLXNoaWZ0KSBoYXMgdG8gYmUgYXBw
bGllZCBhZnRlciB0aGUgcm90YXRpb24KLSAgICAgICAgaWYgKCFpbmZvLmluUGF0aExheW91dCgp
KSB7Ci0gICAgICAgICAgICBzdmdDaGFyLnggKz0gaW5mby5zaGlmdHggKyB4T3JpZW50YXRpb25T
aGlmdDsKLSAgICAgICAgICAgIHN2Z0NoYXIueSArPSBpbmZvLnNoaWZ0eSArIHlPcmllbnRhdGlv
blNoaWZ0OwotCi0gICAgICAgICAgICBpZiAob3JpZW50YXRpb25BbmdsZSAhPSAwLjBmKQotICAg
ICAgICAgICAgICAgIHN2Z0NoYXIuYW5nbGUgKz0gb3JpZW50YXRpb25BbmdsZTsKLQotICAgICAg
ICAgICAgaWYgKHN2Z0NoYXIuYW5nbGUgIT0gMC4wZikKLSAgICAgICAgICAgICAgICBzdmdDaGFy
LmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN2
Z0NoYXIucGF0aERhdGEtPm9yaWVudGF0aW9uQW5nbGUgPSBvcmllbnRhdGlvbkFuZ2xlOwotCi0g
ICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCi0gICAgICAgICAgICAgICAgc3ZnQ2hhci5h
bmdsZSAtPSA5MC4wZjsKLQotICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+eFNoaWZ0ID0g
aW5mby5zaGlmdHggKyB4T3JpZW50YXRpb25TaGlmdDsKLSAgICAgICAgICAgIHN2Z0NoYXIucGF0
aERhdGEtPnlTaGlmdCA9IGluZm8uc2hpZnR5ICsgeU9yaWVudGF0aW9uU2hpZnQ7Ci0KLSAgICAg
ICAgICAgIC8vIFRyYW5zbGF0ZSB0byBnbHlwaCBtaWRwb2ludAotICAgICAgICAgICAgaWYgKGlz
VmVydGljYWxUZXh0KSB7Ci0gICAgICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+eFNoaWZ0
ICs9IGluZm8uZHg7Ci0gICAgICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+eVNoaWZ0IC09
IGdseXBoQWR2YW5jZSAvIDIuMGY7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIHN2Z0NoYXIucGF0aERhdGEtPnhTaGlmdCAtPSBnbHlwaEFkdmFuY2UgLyAyLjBmOwotICAg
ICAgICAgICAgICAgIHN2Z0NoYXIucGF0aERhdGEtPnlTaGlmdCArPSBpbmZvLmR5OwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWR2YW5jZSB0byBuZXcgcG9zaXRpb24K
LSAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KSB7Ci0gICAgICAgICAgICBzdmdDaGFyLmRyYXdu
U2VwZXJhdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGluZm8uY3VyeSArPSBnbHlwaEFkdmFuY2Ug
KyBzcGFjaW5nOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGluZm8uY3VyeCArPSBnbHlw
aEFkdmFuY2UgKyBzcGFjaW5nOwotCi0gICAgICAgIC8vIEFkdmFuY2UgdG8gbmV4dCBjaGFyYWN0
ZXIgZ3JvdXAKLSAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBjaGFyc0NvbnN1bWVkOyArK2sp
IHsKLSAgICAgICAgICAgIGluZm8uc3ZnQ2hhcnMuYXBwZW5kKHN2Z0NoYXIpOwotICAgICAgICAg
ICAgaW5mby5wcm9jZXNzZWRTaW5nbGVDaGFyYWN0ZXIoKTsKLSAgICAgICAgICAgIHN2Z0NoYXIu
ZHJhd25TZXBlcmF0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHN2Z0NoYXIubmV3VGV4dENodW5r
ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgU1ZHUm9vdElubGluZUJveDo6
YnVpbGRUZXh0Q2h1bmtzKFZlY3RvcjxTVkdDaGFyPiYgc3ZnQ2hhcnMsIFZlY3RvcjxTVkdUZXh0
Q2h1bms+JiBzdmdUZXh0Q2h1bmtzLCBJbmxpbmVGbG93Qm94KiBzdGFydCkKIHsKICAgICBTVkdU
ZXh0Q2h1bmtMYXlvdXRJbmZvIGluZm8oc3ZnVGV4dENodW5rcyk7CkBAIC0xNTMxLDcgKzk1OCw3
IEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6YnVpbGRUZXh0Q2h1bmtzKFYKICAgICAgICAgICAg
ICAgICBTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZSYgcmFuZ2UgPSBpbmZvLmNodW5rLmJveGVz
Lmxhc3QoKTsKICAgICAgICAgICAgICAgICBpZiAocmFuZ2UuaXNPcGVuKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgcmFuZ2UuYm94ID0gY3VycjsKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2Uu
c3RhcnRPZmZzZXQgPSAoaSA9PSAwID8gMCA6IGkgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAg
cmFuZ2Uuc3RhcnRPZmZzZXQgPSBpID09IDAgPyAwIDogaSAtIDE7CiAKICNpZiBERUJVR19DSFVO
S19CVUlMRElORyA+IDEKICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgfCAt
PiBSYW5nZSBpcyBvcGVuISBib3g9JXAsIHN0YXJ0T2Zmc2V0PSVpXG4iLCByYW5nZS5ib3gsIHJh
bmdlLnN0YXJ0T2Zmc2V0KTsKQEAgLTE2NjksMTEgKzEwOTYsNiBAQCB2b2lkIFNWR1Jvb3RJbmxp
bmVCb3g6OmJ1aWxkVGV4dENodW5rcyhWCiAjZW5kaWYKIH0KIAotY29uc3QgVmVjdG9yPFNWR1Rl
eHRDaHVuaz4mIFNWR1Jvb3RJbmxpbmVCb3g6OnN2Z1RleHRDaHVua3MoKSBjb25zdCAKLXsKLSAg
ICByZXR1cm4gbV9zdmdUZXh0Q2h1bmtzOwotfQotCiB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6Omxh
eW91dFRleHRDaHVua3MoKQogewogICAgIFZlY3RvcjxTVkdUZXh0Q2h1bms+OjppdGVyYXRvciBp
dCA9IG1fc3ZnVGV4dENodW5rcy5iZWdpbigpOwpAQCAtMTY5Myw3ICsxMTE1LDggQEAgdm9pZCBT
VkdSb290SW5saW5lQm94OjpsYXlvdXRUZXh0Q2h1bmtzKAogCiAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgaSA9IDA7CiAgICAgICAgICAgICBmb3IgKDsgYm94SXQgIT0gYm94RW5kOyArK2JveEl0
KSB7Ci0gICAgICAgICAgICAgICAgU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UmIHJhbmdlID0g
KmJveEl0OyBpKys7CisgICAgICAgICAgICAgICAgU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2Um
IHJhbmdlID0gKmJveEl0OworICAgICAgICAgICAgICAgICsraTsKICAgICAgICAgICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiAtPiBSQU5HRSAlaSBTVEFSVE9GRlNFVDogJWksIEVORE9GRlNFVDog
JWksIEJPWDogJXBcbiIsIGksIHJhbmdlLnN0YXJ0T2Zmc2V0LCByYW5nZS5lbmRPZmZzZXQsIHJh
bmdlLmJveCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1NWR1Jvb3RJbmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9T
VkdSb290SW5saW5lQm94LmgJKHJldmlzaW9uIDU5MDc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
U1ZHUm9vdElubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwyMiArMjksMTUgQEAKICNp
bmNsdWRlICJSb290SW5saW5lQm94LmgiCiAjaW5jbHVkZSAiU1ZHQ2hhcmFjdGVyRGF0YS5oIgog
I2luY2x1ZGUgIlNWR0NoYXJhY3RlckxheW91dEluZm8uaCIKLSNpbmNsdWRlICJTVkdUZXh0Q2h1
bmtMYXlvdXRJbmZvLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgorI2luY2x1ZGUg
IlNWR1RleHRDaHVua0xheW91dEluZm8uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBJbmxpbmVUZXh0Qm94OwogY2xhc3MgUmVuZGVyU1ZHUm9vdDsKIGNsYXNzIFNWR0lubGluZVRl
eHRCb3g7Ci0KLXN0cnVjdCBMYXN0R2x5cGhJbmZvIHsKLSAgICBMYXN0R2x5cGhJbmZvKCkgOiBp
c1ZhbGlkKGZhbHNlKSB7IH0KLQotICAgIFN0cmluZyB1bmljb2RlOwotICAgIFN0cmluZyBnbHlw
aE5hbWU7Ci0gICAgYm9vbCBpc1ZhbGlkOwotfTsKK3N0cnVjdCBTVkdMYXN0R2x5cGhJbmZvOwog
CiBjbGFzcyBTVkdSb290SW5saW5lQm94IDogcHVibGljIFJvb3RJbmxpbmVCb3gsIHByb3RlY3Rl
ZCBTVkdSZW5kZXJCYXNlIHsKIHB1YmxpYzoKQEAgLTcwLDcgKzYzLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgRmxvYXRSZWN0IHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkgY29uc3Qg
eyByZXR1cm4gRmxvYXRSZWN0KCk7IH0KIAogICAgIC8vIFVzZWQgYnkgU1ZHSW5saW5lVGV4dEJv
eAotICAgIGNvbnN0IFZlY3RvcjxTVkdUZXh0Q2h1bms+JiBzdmdUZXh0Q2h1bmtzKCkgY29uc3Q7
CisgICAgY29uc3QgVmVjdG9yPFNWR1RleHRDaHVuaz4mIHN2Z1RleHRDaHVua3MoKSBjb25zdCB7
IHJldHVybiBtX3N2Z1RleHRDaHVua3M7IH0KIAogICAgIHZvaWQgd2Fsa1RleHRDaHVua3MoU1ZH
VGV4dENodW5rV2Fsa2VyQmFzZSosIGNvbnN0IFNWR0lubGluZVRleHRCb3gqIHRleHRCb3ggPSAw
KTsKIApAQCAtODEsNyArNzQsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgbGF5b3V0SW5saW5lQm94
ZXMoSW5saW5lRmxvd0JveCogc3RhcnQsIFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3ImIGl0LCBp
bnQmIG1pblgsIGludCYgbWF4WCwgaW50JiBtaW5ZLCBpbnQmIG1heFkpOwogCiAgICAgdm9pZCBi
dWlsZExheW91dEluZm9ybWF0aW9uKElubGluZUZsb3dCb3gqIHN0YXJ0LCBTVkdDaGFyYWN0ZXJM
YXlvdXRJbmZvJik7Ci0gICAgdm9pZCBidWlsZExheW91dEluZm9ybWF0aW9uRm9yVGV4dEJveChT
VkdDaGFyYWN0ZXJMYXlvdXRJbmZvJiwgSW5saW5lVGV4dEJveCosIExhc3RHbHlwaEluZm8mKTsK
IAogICAgIHZvaWQgYnVpbGRUZXh0Q2h1bmtzKFZlY3RvcjxTVkdDaGFyPiYsIFZlY3RvcjxTVkdU
ZXh0Q2h1bms+JiwgSW5saW5lRmxvd0JveCogc3RhcnQpOwogICAgIHZvaWQgYnVpbGRUZXh0Q2h1
bmtzKFZlY3RvcjxTVkdDaGFyPiYsIElubGluZUZsb3dCb3gqIHN0YXJ0LCBTVkdUZXh0Q2h1bmtM
YXlvdXRJbmZvJik7CkBAIC05NiwxMSArODgsNiBAQCBwcml2YXRlOgogfTsKIAogLy8gU2hhcmVk
IHdpdGggU1ZHUmVuZGVyVHJlZUFzVGV4dCAvIFNWR0lubGluZVRleHRCb3gKLVRleHRSdW4gc3Zn
VGV4dFJ1bkZvcklubGluZVRleHRCb3goY29uc3QgVUNoYXIqLCBpbnQgbGVuLCBSZW5kZXJTdHls
ZSogc3R5bGUsIGNvbnN0IElubGluZVRleHRCb3gqIHRleHRCb3gsIGZsb2F0IHhQb3MpOwotRmxv
YXRQb2ludCB0b3BMZWZ0UG9zaXRpb25PZkNoYXJhY3RlclJhbmdlKFZlY3RvcjxTVkdDaGFyPjo6
aXRlcmF0b3Igc3RhcnQsIFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3IgZW5kKTsKLWZsb2F0IGN1
bW11bGF0ZWRXaWR0aE9mSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UoU1ZHSW5saW5lQm94Q2hhcmFj
dGVyUmFuZ2UmIHJhbmdlKTsKLWZsb2F0IGN1bW11bGF0ZWRIZWlnaHRPZklubGluZUJveENoYXJh
Y3RlclJhbmdlKFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlJiByYW5nZSk7Ci0KIFJlbmRlclNW
R1Jvb3QqIGZpbmRTVkdSb290T2JqZWN0KFJlbmRlck9iamVjdCogc3RhcnQpOwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0TGF5b3V0VXRp
bGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0TGF5b3V0
VXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRM
YXlvdXRVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3NCBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgICAgQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
VkdUZXh0TGF5b3V0VXRpbGl0aWVzLmgiCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKKyNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCisjaW5jbHVkZSAiU1ZHQ2hhcmFjdGVyRGF0YS5oIgorI2luY2x1ZGUgIlNWR0No
YXJhY3RlckxheW91dEluZm8uaCIKKyNpbmNsdWRlICJTVkdGb250RWxlbWVudC5oIgorI2luY2x1
ZGUgIlNWR1JlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU1ZHVGV4dENodW5rTGF5b3V0SW5mby5o
IgorI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJVbmljb2RlUmFuZ2UuaCIKKworI2lu
Y2x1ZGUgPGZsb2F0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBpc1ZlcnRpY2Fs
V3JpdGluZ01vZGUoY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlKQoreworICAgIHJldHVybiBz
dHlsZS0+d3JpdGluZ01vZGUoKSA9PSBXTV9UQlJMIHx8IHN0eWxlLT53cml0aW5nTW9kZSgpID09
IFdNX1RCOyAKK30KKworc3RhdGljIGlubGluZSBFQWxpZ25tZW50QmFzZWxpbmUgZG9taW5hbnRC
YXNlbGluZVRvU2hpZnQoYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiB0
ZXh0LCBjb25zdCBGb250JiBmb250KQoreworICAgIEFTU0VSVCh0ZXh0KTsKKworICAgIGNvbnN0
IFNWR1JlbmRlclN0eWxlKiBzdHlsZSA9IHRleHQtPnN0eWxlKCkgPyB0ZXh0LT5zdHlsZSgpLT5z
dmdTdHlsZSgpIDogMDsKKyAgICBBU1NFUlQoc3R5bGUpOworCisgICAgY29uc3QgU1ZHUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gdGV4dC0+cGFyZW50KCkgJiYgdGV4dC0+cGFyZW50KCktPnN0
eWxlKCkgPyB0ZXh0LT5wYXJlbnQoKS0+c3R5bGUoKS0+c3ZnU3R5bGUoKSA6IDA7CisKKyAgICBF
RG9taW5hbnRCYXNlbGluZSBiYXNlbGluZSA9IHN0eWxlLT5kb21pbmFudEJhc2VsaW5lKCk7Cisg
ICAgaWYgKGJhc2VsaW5lID09IERCX0FVVE8pIHsKKyAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0
KQorICAgICAgICAgICAgYmFzZWxpbmUgPSBEQl9DRU5UUkFMOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBiYXNlbGluZSA9IERCX0FMUEhBQkVUSUM7CisgICAgfQorCisgICAgc3dpdGNoIChi
YXNlbGluZSkgeworICAgIGNhc2UgREJfVVNFX1NDUklQVDoKKyAgICAgICAgLy8gVE9ETzogVGhl
IGRvbWluYW50LWJhc2VsaW5lIGFuZCB0aGUgYmFzZWxpbmUtdGFibGUgY29tcG9uZW50cyBhcmUg
c2V0IGJ5CisgICAgICAgIC8vICAgICAgIGRldGVybWluaW5nIHRoZSBwcmVkb21pbmFudCBzY3Jp
cHQgb2YgdGhlIGNoYXJhY3RlciBkYXRhIGNvbnRlbnQuCisgICAgICAgIHJldHVybiBBQl9BTFBI
QUJFVElDOworICAgIGNhc2UgREJfTk9fQ0hBTkdFOgorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAocGFyZW50U3R5bGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRvbWluYW50QmFzZWxpbmVU
b1NoaWZ0KGlzVmVydGljYWxUZXh0LCB0ZXh0LT5wYXJlbnQoKSwgZm9udCk7CisKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEFCX0FVVE87Cisg
ICAgICAgIH0KKyAgICBjYXNlIERCX1JFU0VUX1NJWkU6CisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChwYXJlbnRTdHlsZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZG9taW5hbnRCYXNlbGlu
ZVRvU2hpZnQoaXNWZXJ0aWNhbFRleHQsIHRleHQtPnBhcmVudCgpLCBmb250KTsKKworICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gQUJfQVVUTzsg
ICAgCisgICAgICAgIH0KKyAgICBjYXNlIERCX0lERU9HUkFQSElDOgorICAgICAgICByZXR1cm4g
QUJfSURFT0dSQVBISUM7CisgICAgY2FzZSBEQl9BTFBIQUJFVElDOgorICAgICAgICByZXR1cm4g
QUJfQUxQSEFCRVRJQzsKKyAgICBjYXNlIERCX0hBTkdJTkc6CisgICAgICAgIHJldHVybiBBQl9I
QU5HSU5HOworICAgIGNhc2UgREJfTUFUSEVNQVRJQ0FMOgorICAgICAgICByZXR1cm4gQUJfTUFU
SEVNQVRJQ0FMOworICAgIGNhc2UgREJfQ0VOVFJBTDoKKyAgICAgICAgcmV0dXJuIEFCX0NFTlRS
QUw7CisgICAgY2FzZSBEQl9NSURETEU6CisgICAgICAgIHJldHVybiBBQl9NSURETEU7CisgICAg
Y2FzZSBEQl9URVhUX0FGVEVSX0VER0U6CisgICAgICAgIHJldHVybiBBQl9URVhUX0FGVEVSX0VE
R0U7CisgICAgY2FzZSBEQl9URVhUX0JFRk9SRV9FREdFOgorICAgICAgICByZXR1cm4gQUJfVEVY
VF9CRUZPUkVfRURHRTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIEFCX0FVVE87CisgICAgfQorfQorCitmbG9hdCBhbGlnbm1lbnRC
YXNlbGluZVRvU2hpZnQoYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiB0
ZXh0LCBjb25zdCBGb250JiBmb250KQoreworICAgIEFTU0VSVCh0ZXh0KTsKKworICAgIGNvbnN0
IFNWR1JlbmRlclN0eWxlKiBzdHlsZSA9IHRleHQtPnN0eWxlKCkgPyB0ZXh0LT5zdHlsZSgpLT5z
dmdTdHlsZSgpIDogMDsKKyAgICBBU1NFUlQoc3R5bGUpOworCisgICAgY29uc3QgU1ZHUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gdGV4dC0+cGFyZW50KCkgJiYgdGV4dC0+cGFyZW50KCktPnN0
eWxlKCkgPyB0ZXh0LT5wYXJlbnQoKS0+c3R5bGUoKS0+c3ZnU3R5bGUoKSA6IDA7CisKKyAgICBF
QWxpZ25tZW50QmFzZWxpbmUgYmFzZWxpbmUgPSBzdHlsZS0+YWxpZ25tZW50QmFzZWxpbmUoKTsK
KyAgICBpZiAoYmFzZWxpbmUgPT0gQUJfQVVUTykgeworICAgICAgICBpZiAocGFyZW50U3R5bGUg
JiYgc3R5bGUtPmRvbWluYW50QmFzZWxpbmUoKSA9PSBEQl9BVVRPKQorICAgICAgICAgICAgYmFz
ZWxpbmUgPSBkb21pbmFudEJhc2VsaW5lVG9TaGlmdChpc1ZlcnRpY2FsVGV4dCwgdGV4dC0+cGFy
ZW50KCksIGZvbnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBiYXNlbGluZSA9IGRvbWlu
YW50QmFzZWxpbmVUb1NoaWZ0KGlzVmVydGljYWxUZXh0LCB0ZXh0LCBmb250KTsKKworICAgICAg
ICBBU1NFUlQoYmFzZWxpbmUgIT0gQUJfQVVUTyk7ICAgIAorICAgIH0KKworICAgIC8vIE5vdGU6
IGh0dHA6Ly93aWtpLmFwYWNoZS5vcmcveG1sZ3JhcGhpY3MtZm9wL0xpbmVMYXlvdXQvQWxpZ25t
ZW50SGFuZGxpbmcKKyAgICBzd2l0Y2ggKGJhc2VsaW5lKSB7CisgICAgY2FzZSBBQl9CQVNFTElO
RToKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQorICAgICAgICAgICAg
ICAgIHJldHVybiBkb21pbmFudEJhc2VsaW5lVG9TaGlmdChpc1ZlcnRpY2FsVGV4dCwgdGV4dC0+
cGFyZW50KCksIGZvbnQpOworCisgICAgICAgICAgICByZXR1cm4gMC4wZjsKKyAgICAgICAgfQor
ICAgIGNhc2UgQUJfQkVGT1JFX0VER0U6CisgICAgY2FzZSBBQl9URVhUX0JFRk9SRV9FREdFOgor
ICAgICAgICByZXR1cm4gZm9udC5hc2NlbnQoKTsKKyAgICBjYXNlIEFCX01JRERMRToKKyAgICAg
ICAgcmV0dXJuIGZvbnQueEhlaWdodCgpIC8gMi4wZjsKKyAgICBjYXNlIEFCX0NFTlRSQUw6Cisg
ICAgICAgIC8vIE5vdCBuZWVkZWQsIHdlJ3JlIHRha2luZyB0aGlzIGludG8gYWNjb3VudCBhbHJl
YWR5IGZvciB2ZXJ0aWNhbCB0ZXh0IQorICAgICAgICAvLyByZXR1cm4gKGZvbnQuYXNjZW50KCkg
LSBmb250LmRlc2NlbnQoKSkgLyAyLjBmOworICAgICAgICByZXR1cm4gMC4wZjsKKyAgICBjYXNl
IEFCX0FGVEVSX0VER0U6CisgICAgY2FzZSBBQl9URVhUX0FGVEVSX0VER0U6CisgICAgY2FzZSBB
Ql9JREVPR1JBUEhJQzoKKyAgICAgICAgcmV0dXJuIGZvbnQuZGVzY2VudCgpOworICAgIGNhc2Ug
QUJfQUxQSEFCRVRJQzoKKyAgICAgICAgcmV0dXJuIDAuMGY7CisgICAgY2FzZSBBQl9IQU5HSU5H
OgorICAgICAgICByZXR1cm4gZm9udC5hc2NlbnQoKSAqIDguMGYgLyAxMC4wZjsKKyAgICBjYXNl
IEFCX01BVEhFTUFUSUNBTDoKKyAgICAgICAgcmV0dXJuIGZvbnQuYXNjZW50KCkgLyAyLjBmOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gMC4wZjsKKyAgICB9Cit9CisKK2Zsb2F0IGdseXBoT3JpZW50YXRpb25Ub0FuZ2xlKGNvbnN0
IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSwgYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgVUNo
YXImIGNoYXJhY3RlcikKK3sKKyAgICBzd2l0Y2ggKGlzVmVydGljYWxUZXh0ID8gc3ZnU3R5bGUt
PmdseXBoT3JpZW50YXRpb25WZXJ0aWNhbCgpIDogc3ZnU3R5bGUtPmdseXBoT3JpZW50YXRpb25I
b3Jpem9udGFsKCkpIHsKKyAgICBjYXNlIEdPX0FVVE86CisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIFNwZWM6IEZ1bGx3aWR0aCBpZGVvZ3JhcGhpYyBhbmQgZnVsbHdpZHRoIExhdGluIHRleHQg
d2lsbCBiZSBzZXQgd2l0aCBhIGdseXBoLW9yaWVudGF0aW9uIG9mIDAtZGVncmVlcy4KKyAgICAg
ICAgICAgIC8vICAgICAgIFRleHQgd2hpY2ggaXMgbm90IGZ1bGx3aWR0aCB3aWxsIGJlIHNldCB3
aXRoIGEgZ2x5cGgtb3JpZW50YXRpb24gb2YgOTAtZGVncmVlcy4KKyAgICAgICAgICAgIHVuc2ln
bmVkIGludCB1bmljb2RlUmFuZ2UgPSBmaW5kQ2hhclVuaWNvZGVSYW5nZShjaGFyYWN0ZXIpOwor
ICAgICAgICAgICAgaWYgKHVuaWNvZGVSYW5nZSA9PSBjUmFuZ2VTZXRMYXRpbiB8fCB1bmljb2Rl
UmFuZ2UgPT0gY1JhbmdlQXJhYmljKQorICAgICAgICAgICAgICAgIHJldHVybiA5MC4wZjsKKwor
ICAgICAgICAgICAgcmV0dXJuIDAuMGY7CisgICAgICAgIH0KKyAgICBjYXNlIEdPXzkwREVHOgor
ICAgICAgICByZXR1cm4gOTAuMGY7CisgICAgY2FzZSBHT18xODBERUc6CisgICAgICAgIHJldHVy
biAxODAuMGY7CisgICAgY2FzZSBHT18yNzBERUc6CisgICAgICAgIHJldHVybiAyNzAuMGY7Cisg
ICAgY2FzZSBHT18wREVHOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAwLjBmOworICAg
IH0KK30KKworc3RhdGljIGlubGluZSBib29sIGdseXBoT3JpZW50YXRpb25Jc011bHRpcGx5T2Yx
ODBEZWdyZWVzKGZsb2F0IG9yaWVudGF0aW9uQW5nbGUpCit7CisgICAgcmV0dXJuIGZhYnNmKGZt
b2RmKG9yaWVudGF0aW9uQW5nbGUsIDE4MC4wZikpID09IDAuMGY7Cit9CisKK2Zsb2F0IGFwcGx5
R2x5cGhBZHZhbmNlQW5kU2hpZnRSZXNwZWN0aW5nT3JpZW50YXRpb24oYm9vbCBpc1ZlcnRpY2Fs
VGV4dCwgZmxvYXQgb3JpZW50YXRpb25BbmdsZSwgZmxvYXQgZ2x5cGhXaWR0aCwgZmxvYXQgZ2x5
cGhIZWlnaHQsIGNvbnN0IEZvbnQmIGZvbnQsIFNWR0NoYXImIHN2Z0NoYXIsIGZsb2F0JiB4T3Jp
ZW50YXRpb25TaGlmdCwgZmxvYXQmIHlPcmllbnRhdGlvblNoaWZ0KQoreworICAgIGJvb2wgb3Jp
ZW50YXRpb25Jc011bHRpcGx5T2YxODBEZWdyZWVzID0gZ2x5cGhPcmllbnRhdGlvbklzTXVsdGlw
bHlPZjE4MERlZ3JlZXMob3JpZW50YXRpb25BbmdsZSk7CisKKyAgICAvLyBUaGUgZnVuY3Rpb24g
aXMgYmFzZWQgb24gc3BlYyByZXF1aXJlbWVudHM6CisgICAgLy8KKyAgICAvLyBTcGVjOiBJZiB0
aGUgJ2dseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwnIHJlc3VsdHMgaW4gYW4gb3JpZW50YXRp
b24gYW5nbGUgdGhhdCBpcyBub3QgYSBtdWx0aXBsZSBvZgorICAgIC8vIG9mIDE4MCBkZWdyZWVz
LCB0aGVuIHRoZSBjdXJyZW50IHRleHQgcG9zaXRpb24gaXMgaW5jcmVtZW50ZWQgYWNjb3JkaW5n
IHRvIHRoZSB2ZXJ0aWNhbCBtZXRyaWNzIG9mIHRoZSBnbHlwaC4KKyAgICAvLworICAgIC8vIFNw
ZWM6IElmIGlmIHRoZSAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnIHJlc3VsdHMgaW4gYW4g
b3JpZW50YXRpb24gYW5nbGUgdGhhdCBpcyBub3QgYSBtdWx0aXBsZSBvZgorICAgIC8vIDE4MCBk
ZWdyZWVzLHRoZW4gdGhlIGN1cnJlbnQgdGV4dCBwb3NpdGlvbiBpcyBpbmNyZW1lbnRlZCBhY2Nv
cmRpbmcgdG8gdGhlIGhvcml6b250YWwgbWV0cmljcyBvZiB0aGUgZ2x5cGguCisKKyAgICAvLyB2
ZXJ0aWNhbCBvcmllbnRhdGlvbiBoYW5kbGluZworICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkgewor
ICAgICAgICBpZiAob3JpZW50YXRpb25BbmdsZSA9PSAwLjBmKSB7CisgICAgICAgICAgICB4T3Jp
ZW50YXRpb25TaGlmdCA9IC1nbHlwaFdpZHRoIC8gMi4wZjsKKyAgICAgICAgICAgIHlPcmllbnRh
dGlvblNoaWZ0ID0gZm9udC5hc2NlbnQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChvcmllbnRhdGlv
bkFuZ2xlID09IDkwLjBmKSB7CisgICAgICAgICAgICB4T3JpZW50YXRpb25TaGlmdCA9IC1nbHlw
aEhlaWdodDsKKyAgICAgICAgICAgIHlPcmllbnRhdGlvblNoaWZ0ID0gZm9udC5kZXNjZW50KCk7
CisgICAgICAgICAgICBzdmdDaGFyLm9yaWVudGF0aW9uU2hpZnRZID0gLWZvbnQuYXNjZW50KCk7
CisgICAgICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb25BbmdsZSA9PSAyNzAuMGYpIHsKKyAgICAg
ICAgICAgIHhPcmllbnRhdGlvblNoaWZ0ID0gZ2x5cGhIZWlnaHQ7CisgICAgICAgICAgICB5T3Jp
ZW50YXRpb25TaGlmdCA9IGZvbnQuZGVzY2VudCgpOworICAgICAgICAgICAgc3ZnQ2hhci5vcmll
bnRhdGlvblNoaWZ0WCA9IC1nbHlwaFdpZHRoOworICAgICAgICAgICAgc3ZnQ2hhci5vcmllbnRh
dGlvblNoaWZ0WSA9IC1mb250LmFzY2VudCgpOworICAgICAgICB9IGVsc2UgaWYgKG9yaWVudGF0
aW9uQW5nbGUgPT0gMTgwLjBmKSB7CisgICAgICAgICAgICB5T3JpZW50YXRpb25TaGlmdCA9IGZv
bnQuYXNjZW50KCk7CisgICAgICAgICAgICBzdmdDaGFyLm9yaWVudGF0aW9uU2hpZnRYID0gLWds
eXBoV2lkdGggLyAyLjBmOworICAgICAgICAgICAgc3ZnQ2hhci5vcmllbnRhdGlvblNoaWZ0WSA9
IGZvbnQuYXNjZW50KCkgLSBmb250LmRlc2NlbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IHZlcnRpY2FsIGFkdmFuY2UgY2FsY3VsYXRpb24KKyAgICAgICAgaWYgKG9yaWVudGF0aW9uQW5n
bGUgIT0gMC4wZiAmJiAhb3JpZW50YXRpb25Jc011bHRpcGx5T2YxODBEZWdyZWVzKQorICAgICAg
ICAgICAgcmV0dXJuIGdseXBoV2lkdGg7CisKKyAgICAgICAgcmV0dXJuIGdseXBoSGVpZ2h0OyAK
KyAgICB9CisKKyAgICAvLyBob3Jpem9udGFsIG9yaWVudGF0aW9uIGhhbmRsaW5nCisgICAgaWYg
KG9yaWVudGF0aW9uQW5nbGUgPT0gOTAuMGYpIHsKKyAgICAgICAgeE9yaWVudGF0aW9uU2hpZnQg
PSBnbHlwaFdpZHRoIC8gMi4wZjsKKyAgICAgICAgeU9yaWVudGF0aW9uU2hpZnQgPSAtZm9udC5k
ZXNjZW50KCk7CisgICAgICAgIHN2Z0NoYXIub3JpZW50YXRpb25TaGlmdFggPSAtZ2x5cGhXaWR0
aCAvIDIuMGYgLSBmb250LmRlc2NlbnQoKTsgCisgICAgICAgIHN2Z0NoYXIub3JpZW50YXRpb25T
aGlmdFkgPSBmb250LmRlc2NlbnQoKTsKKyAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uQW5nbGUg
PT0gMjcwLjBmKSB7CisgICAgICAgIHhPcmllbnRhdGlvblNoaWZ0ID0gLWdseXBoV2lkdGggLyAy
LjBmOworICAgICAgICB5T3JpZW50YXRpb25TaGlmdCA9IC1mb250LmRlc2NlbnQoKTsKKyAgICAg
ICAgc3ZnQ2hhci5vcmllbnRhdGlvblNoaWZ0WCA9IC1nbHlwaFdpZHRoIC8gMi4wZiArIGZvbnQu
ZGVzY2VudCgpOworICAgICAgICBzdmdDaGFyLm9yaWVudGF0aW9uU2hpZnRZID0gZ2x5cGhIZWln
aHQ7CisgICAgfSBlbHNlIGlmIChvcmllbnRhdGlvbkFuZ2xlID09IDE4MC4wZikgeworICAgICAg
ICB4T3JpZW50YXRpb25TaGlmdCA9IGdseXBoV2lkdGggLyAyLjBmOworICAgICAgICBzdmdDaGFy
Lm9yaWVudGF0aW9uU2hpZnRYID0gLWdseXBoV2lkdGggLyAyLjBmOworICAgICAgICBzdmdDaGFy
Lm9yaWVudGF0aW9uU2hpZnRZID0gZm9udC5hc2NlbnQoKSAtIGZvbnQuZGVzY2VudCgpOworICAg
IH0KKworICAgIC8vIGhvcml6b250YWwgYWR2YW5jZSBjYWxjdWxhdGlvbgorICAgIGlmIChvcmll
bnRhdGlvbkFuZ2xlICE9IDAuMGYgJiYgIW9yaWVudGF0aW9uSXNNdWx0aXBseU9mMTgwRGVncmVl
cykKKyAgICAgICAgcmV0dXJuIGdseXBoSGVpZ2h0OworCisgICAgcmV0dXJuIGdseXBoV2lkdGg7
Cit9CisKK0Zsb2F0UG9pbnQgdG9wTGVmdFBvc2l0aW9uT2ZDaGFyYWN0ZXJSYW5nZShWZWN0b3I8
U1ZHQ2hhcj46Oml0ZXJhdG9yIGl0LCBWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yIGVuZCkKK3sK
KyAgICBmbG9hdCBsb3dYID0gRkxUX01BWCwgbG93WSA9IEZMVF9NQVg7CisgICAgZm9yICg7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoaXQtPmlzSGlkZGVuKCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBmbG9hdCB4ID0gKCppdCkueDsKKyAgICAgICAgZmxvYXQg
eSA9ICgqaXQpLnk7CisKKyAgICAgICAgaWYgKHggPCBsb3dYKQorICAgICAgICAgICAgbG93WCA9
IHg7CisKKyAgICAgICAgaWYgKHkgPCBsb3dZKQorICAgICAgICAgICAgbG93WSA9IHk7CisgICAg
fQorCisgICAgcmV0dXJuIEZsb2F0UG9pbnQobG93WCwgbG93WSk7Cit9CisKK2Zsb2F0IGN1bW11
bGF0ZWRXaWR0aE9mSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UoU1ZHSW5saW5lQm94Q2hhcmFjdGVy
UmFuZ2UmIHJhbmdlKQoreworICAgIEFTU0VSVCghcmFuZ2UuaXNPcGVuKCkpOworICAgIEFTU0VS
VChyYW5nZS5pc0Nsb3NlZCgpKTsKKyAgICBBU1NFUlQocmFuZ2UuYm94LT5pc0lubGluZVRleHRC
b3goKSk7CisKKyAgICBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5l
VGV4dEJveCo+KHJhbmdlLmJveCk7CisgICAgUmVuZGVyVGV4dCogdGV4dCA9IHRleHRCb3gtPnRl
eHRSZW5kZXJlcigpOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHQtPnN0eWxlKCk7CisK
KyAgICByZXR1cm4gc3R5bGUtPmZvbnQoKS5mbG9hdFdpZHRoKHN2Z1RleHRSdW5Gb3JJbmxpbmVU
ZXh0Qm94KHRleHQtPmNoYXJhY3RlcnMoKSArIHRleHRCb3gtPnN0YXJ0KCkgKyByYW5nZS5zdGFy
dE9mZnNldCwgcmFuZ2UuZW5kT2Zmc2V0IC0gcmFuZ2Uuc3RhcnRPZmZzZXQsIHN0eWxlLCB0ZXh0
Qm94LCAwKSk7Cit9CisKK2Zsb2F0IGN1bW11bGF0ZWRIZWlnaHRPZklubGluZUJveENoYXJhY3Rl
clJhbmdlKFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlJiByYW5nZSkKK3sKKyAgICBBU1NFUlQo
IXJhbmdlLmlzT3BlbigpKTsKKyAgICBBU1NFUlQocmFuZ2UuaXNDbG9zZWQoKSk7CisgICAgQVNT
RVJUKHJhbmdlLmJveC0+aXNJbmxpbmVUZXh0Qm94KCkpOworCisgICAgSW5saW5lVGV4dEJveCog
dGV4dEJveCA9IHN0YXRpY19jYXN0PElubGluZVRleHRCb3gqPihyYW5nZS5ib3gpOworICAgIFJl
bmRlclRleHQqIHRleHQgPSB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKTsKKyAgICBjb25zdCBGb250
JiBmb250ID0gdGV4dC0+c3R5bGUoKS0+Zm9udCgpOworCisgICAgcmV0dXJuIChyYW5nZS5lbmRP
ZmZzZXQgLSByYW5nZS5zdGFydE9mZnNldCkgKiAoZm9udC5hc2NlbnQoKSArIGZvbnQuZGVzY2Vu
dCgpKTsKK30KKworVGV4dFJ1biBzdmdUZXh0UnVuRm9ySW5saW5lVGV4dEJveChjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25z
dCBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBmbG9hdCB4UG9zaXRpb24pCit7CisgICAgQVNTRVJU
KHRleHRCb3gpOworICAgIEFTU0VSVChzdHlsZSk7CisKKyAgICBUZXh0UnVuIHJ1bihjaGFyYWN0
ZXJzLCBsZW5ndGgsIGZhbHNlLCBzdGF0aWNfY2FzdDxpbnQ+KHhQb3NpdGlvbiksIHRleHRCb3gt
PnRvQWRkKCksIHRleHRCb3gtPmRpcmVjdGlvbigpID09IFJUTCwgdGV4dEJveC0+bV9kaXJPdmVy
cmlkZSB8fCBzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCkpOworCisjaWYgRU5BQkxFKFNWR19GT05U
UykKKyAgICBydW4uc2V0UmVmZXJlbmNpbmdSZW5kZXJPYmplY3QodGV4dEJveC0+dGV4dFJlbmRl
cmVyKCktPnBhcmVudCgpKTsKKyNlbmRpZgorCisgICAgLy8gV2UgaGFuZGxlIGxldHRlciAmIHdv
cmQgc3BhY2luZyBvdXJzZWx2ZXMKKyAgICBydW4uZGlzYWJsZVNwYWNpbmcoKTsKKyAgICByZXR1
cm4gcnVuOworfQorCitmbG9hdCBjYWxjdWxhdGVDU1NLZXJuaW5nKGNvbnN0IFJlbmRlclN0eWxl
KiBzdHlsZSkKK3sKKyAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUtPmZvbnQoKTsKKyAgICBj
b25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKKworICAg
IGZsb2F0IGtlcm5pbmcgPSAwLjBmOworICAgIGlmIChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihzdmdTdHlsZS0+a2VybmluZygp
KSkgeworICAgICAgICBrZXJuaW5nID0gcHJpbWl0aXZlLT5nZXRGbG9hdFZhbHVlKCk7CisKKyAg
ICAgICAgaWYgKHByaW1pdGl2ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSAmJiBmb250LnBpeGVsU2l6ZSgpID4gMCkKKyAgICAgICAgICAgIGtl
cm5pbmcgPSBrZXJuaW5nIC8gMTAwLjBmICogZm9udC5waXhlbFNpemUoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4ga2VybmluZzsKK30KKworYm9vbCBhcHBseVNWR0tlcm5pbmcoU1ZHQ2hhcmFjdGVy
TGF5b3V0SW5mbyYgaW5mbywgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBTVkdMYXN0R2x5cGhJ
bmZvJiBsYXN0R2x5cGgsIGNvbnN0IFN0cmluZyYgdW5pY29kZVN0cmluZywgY29uc3QgU3RyaW5n
JiBnbHlwaE5hbWUsIGJvb2wgaXNWZXJ0aWNhbFRleHQpCit7CisjaWYgRU5BQkxFKFNWR19GT05U
UykKKyAgICBmbG9hdCBrZXJuaW5nID0gMC4wZjsKKworICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBz
dHlsZS0+Zm9udCgpOworICAgIGlmICghZm9udC5pc1NWR0ZvbnQoKSkgeworICAgICAgICBsYXN0
R2x5cGguaXNWYWxpZCA9IGZhbHNlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgU1ZHRm9udEVsZW1lbnQqIHN2Z0ZvbnQgPSBmb250LnN2Z0ZvbnQoKTsKKyAgICBBU1NFUlQo
c3ZnRm9udCk7CisKKyAgICBpZiAobGFzdEdseXBoLmlzVmFsaWQpIHsKKyAgICAgICAgaWYgKGlz
VmVydGljYWxUZXh0KQorICAgICAgICAgICAga2VybmluZyA9IHN2Z0ZvbnQtPnZlcnRpY2FsS2Vy
bmluZ0ZvclBhaXJPZlN0cmluZ3NBbmRHbHlwaHMobGFzdEdseXBoLnVuaWNvZGUsIGxhc3RHbHlw
aC5nbHlwaE5hbWUsIHVuaWNvZGVTdHJpbmcsIGdseXBoTmFtZSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGtlcm5pbmcgPSBzdmdGb250LT5ob3Jpem9udGFsS2VybmluZ0ZvclBhaXJPZlN0
cmluZ3NBbmRHbHlwaHMobGFzdEdseXBoLnVuaWNvZGUsIGxhc3RHbHlwaC5nbHlwaE5hbWUsIHVu
aWNvZGVTdHJpbmcsIGdseXBoTmFtZSk7CisgICAgfQorCisgICAgbGFzdEdseXBoLnVuaWNvZGUg
PSB1bmljb2RlU3RyaW5nOworICAgIGxhc3RHbHlwaC5nbHlwaE5hbWUgPSBnbHlwaE5hbWU7Cisg
ICAgbGFzdEdseXBoLmlzVmFsaWQgPSB0cnVlOworICAgIGtlcm5pbmcgKj0gc3R5bGUtPmZvbnQo
KS5zaXplKCkgLyBzdHlsZS0+Zm9udCgpLnByaW1hcnlGb250KCktPnVuaXRzUGVyRW0oKTsKKwor
ICAgIGlmIChrZXJuaW5nICE9IDAuMGYpIHsKKyAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQor
ICAgICAgICAgICAgaW5mby5jdXJ5IC09IGtlcm5pbmc7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGluZm8uY3VyeCAtPSBrZXJuaW5nOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShpbmZvKTsKKyAgICBVTlVTRURfUEFSQU0oaXRlbSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxhc3RHbHlwaCk7CisgICAgVU5VU0VEX1BBUkFNKHVuaWNvZGVTdHJp
bmcpOworICAgIFVOVVNFRF9QQVJBTShnbHlwaE5hbWUpOworI2VuZGlmCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit9CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHVGV4dExh
eW91dFV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRM
YXlvdXRVdGlsaXRpZXMuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Rl
eHRMYXlvdXRVdGlsaXRpZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgICAgQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgU1ZHVGV4dExheW91dFV0aWxpdGllc19o
CisjZGVmaW5lIFNWR1RleHRMYXlvdXRVdGlsaXRpZXNfaAorCisjaWYgRU5BQkxFKFNWRykKKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIEZvbnQ7Citj
bGFzcyBJbmxpbmVUZXh0Qm94OworY2xhc3MgUmVuZGVyT2JqZWN0OworY2xhc3MgUmVuZGVyU3R5
bGU7CitjbGFzcyBSZW5kZXJTVkdSZXNvdXJjZTsKK2NsYXNzIFNWR1JlbmRlclN0eWxlOworY2xh
c3MgVGV4dFJ1bjsKKworc3RydWN0IFNWR0NoYXI7CitzdHJ1Y3QgU1ZHQ2hhcmFjdGVyTGF5b3V0
SW5mbzsKK3N0cnVjdCBTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZTsKKworZW51bSBTVkdUZXh0
UGFpbnRTdWJwaGFzZSB7CisgICAgU1ZHVGV4dFBhaW50U3VicGhhc2VCYWNrZ3JvdW5kLAorICAg
IFNWR1RleHRQYWludFN1YnBoYXNlR2x5cGhGaWxsLAorICAgIFNWR1RleHRQYWludFN1YnBoYXNl
R2x5cGhGaWxsU2VsZWN0aW9uLAorICAgIFNWR1RleHRQYWludFN1YnBoYXNlR2x5cGhTdHJva2Us
CisgICAgU1ZHVGV4dFBhaW50U3VicGhhc2VHbHlwaFN0cm9rZVNlbGVjdGlvbiwKKyAgICBTVkdU
ZXh0UGFpbnRTdWJwaGFzZUZvcmVncm91bmQKK307CisKK3N0cnVjdCBTVkdUZXh0UGFpbnRJbmZv
IHsKKyAgICBTVkdUZXh0UGFpbnRJbmZvKCkKKyAgICAgICAgOiBhY3RpdmVQYWludGluZ1Jlc291
cmNlKDApCisgICAgICAgICwgc3VicGhhc2UoU1ZHVGV4dFBhaW50U3VicGhhc2VCYWNrZ3JvdW5k
KQorICAgIHsKKyAgICB9CisKKyAgICBSZW5kZXJTVkdSZXNvdXJjZSogYWN0aXZlUGFpbnRpbmdS
ZXNvdXJjZTsKKyAgICBTVkdUZXh0UGFpbnRTdWJwaGFzZSBzdWJwaGFzZTsKK307CisKK3N0cnVj
dCBTVkdMYXN0R2x5cGhJbmZvIHsKKyAgICBTVkdMYXN0R2x5cGhJbmZvKCkKKyAgICAgICAgOiBp
c1ZhbGlkKGZhbHNlKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlzVmFsaWQ7CisgICAgU3Ry
aW5nIHVuaWNvZGU7CisgICAgU3RyaW5nIGdseXBoTmFtZTsKK307CisKK2Jvb2wgaXNWZXJ0aWNh
bFdyaXRpbmdNb2RlKGNvbnN0IFNWR1JlbmRlclN0eWxlKik7CitmbG9hdCBhbGlnbm1lbnRCYXNl
bGluZVRvU2hpZnQoYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiB0ZXh0
LCBjb25zdCBGb250Jik7CitmbG9hdCBnbHlwaE9yaWVudGF0aW9uVG9BbmdsZShjb25zdCBTVkdS
ZW5kZXJTdHlsZSosIGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFVDaGFyJik7CitmbG9hdCBh
cHBseUdseXBoQWR2YW5jZUFuZFNoaWZ0UmVzcGVjdGluZ09yaWVudGF0aW9uKGJvb2wgaXNWZXJ0
aWNhbFRleHQsIGZsb2F0IG9yaWVudGF0aW9uQW5nbGUsIGZsb2F0IGdseXBoV2lkdGgsIGZsb2F0
IGdseXBoSGVpZ2h0LCBjb25zdCBGb250JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU1ZHQ2hhciYsIGZsb2F0JiB4T3JpZW50YXRpb25TaGlm
dCwgZmxvYXQmIHlPcmllbnRhdGlvblNoaWZ0KTsKK0Zsb2F0UG9pbnQgdG9wTGVmdFBvc2l0aW9u
T2ZDaGFyYWN0ZXJSYW5nZShWZWN0b3I8U1ZHQ2hhcj46Oml0ZXJhdG9yIHN0YXJ0LCBWZWN0b3I8
U1ZHQ2hhcj46Oml0ZXJhdG9yIGVuZCk7CitmbG9hdCBjdW1tdWxhdGVkV2lkdGhPZklubGluZUJv
eENoYXJhY3RlclJhbmdlKFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlJik7CitmbG9hdCBjdW1t
dWxhdGVkSGVpZ2h0T2ZJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZShTVkdJbmxpbmVCb3hDaGFyYWN0
ZXJSYW5nZSYpOworVGV4dFJ1biBzdmdUZXh0UnVuRm9ySW5saW5lVGV4dEJveChjb25zdCBVQ2hh
ciosIGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgSW5saW5lVGV4dEJveCos
IGZsb2F0IHhQb3MpOworCitmbG9hdCBjYWxjdWxhdGVDU1NLZXJuaW5nKGNvbnN0IFJlbmRlclN0
eWxlKik7Citib29sIGFwcGx5U1ZHS2VybmluZyhTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvJiwgY29u
c3QgUmVuZGVyU3R5bGUqLCBTVkdMYXN0R2x5cGhJbmZvJiwgY29uc3QgU3RyaW5nJiB1bmljb2Rl
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGdseXBoTmFtZSwgYm9vbCBpc1ZlcnRpY2FsVGV4dCk7CisK
K30KKworI2VuZGlmCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55681</attachid>
            <date>2010-05-11 02:45:46 -0700</date>
            <delta_ts>2010-05-11 04:21:05 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>bug-38799-20100511114524.patch</filename>
            <type>text/plain</type>
            <size>111732</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTE0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMTAtMDUtMTEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTW92ZSBidWlsZExheW91dEluZm9ybWF0aW9uRm9yVGV4dEJveCgpIGZyb20gU1ZHUm9v
dElubGluZUJveCBpbiBTVkdJbmxpbmVUZXh0Qm94IHdoZXJlIGl0IGJlbG9uZ3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4Nzk5CisKKyAgICAgICAg
Q2xlYW51cCBTVkdSb290SW5saW5lQm94L1NWR0lubGluZVRleHRCb3guIE1vdmUgYnVpbGRMYXlv
dXRJbmZvcm1hdGlvbkZvclRleHRCb3ggdG8gU1ZHSW5saW5lVGV4dEJveC4KKyAgICAgICAgTW92
ZSBsb3RzIG9mIGhlbHBlciBtZXRob2RzIGludG8gbmV3IFNWR1RleHRMYXlvdXRVdGlsaXRpZXMg
Y2xhc3MuIEFkYXB0ZWQgYWxsIGNhbGxzaXRlcy4KKworICAgICAgICBGaXhlZCBidWcgaW4ga2Vy
bmluZyBoYW5kbGluZywgaGtlcm4gd2FzIGFwcGx5YWJsZSB0byB2ZXJ0aWNhbCB0ZXh0IGFzIHdl
bGwuIENvdmVyZWQgYnkgdHdvIG5ldyB0ZXN0cy4KKworICAgICAgICBUZXN0czogc3ZnL3RleHQv
dGV4dC1oa2Vybi1vbi12ZXJ0aWNhbC10ZXh0LnN2ZworICAgICAgICAgICAgICAgc3ZnL3RleHQv
dGV4dC12a2Vybi1vbi1ob3Jpem9udGFsLXRleHQuc3ZnCisKKyAgICAgICAgKiBBbmRyb2lkLm1r
OiBBZGQgU1ZHVGV4dExheW91dFV0aWxpdGllcy5jcHAvaCB0byBidWlsZC4KKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbTogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS5neXBpOiBEaXR0by4KKyAg
ICAgICAgKiBXZWJDb3JlLnBybzogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2o6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1NWR0lubGluZVRleHRCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6Y2FsY3VsYXRlR2x5cGhXaWR0
aCk6IFVzZSB0ZXh0UmVuZGVyZXIoKS0+Y2hhcmFjdGVycygpIGluc3RlYWQgb2YgdGV4dFJlbmRl
cmVyKCktPnRleHQoKS0+Y2hhcmFjdGVycygpIGFzIHNob3J0Y3V0LgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHSW5saW5lVGV4dEJveDo6c3ZnQ2hhcmFjdGVySGl0c1Bvc2l0aW9uKTogRml4IHN0eWxl
IGlzc3VlLCBubyBlbHNlIGlmIGFmdGVyIGEgcmV0dXJuIGJyYW5jaC4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKTogVXNlICFjb2xvci5hbHBoYSgp
IGluc3RlYWQgb2YgY29sb3IuYWxwaGEoKSA9PSAwLgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5s
aW5lVGV4dEJveDo6YnVpbGRMYXlvdXRJbmZvcm1hdGlvbik6IE1vdmVkIGZyb20gU1ZHUm9vdElu
bGluZUJveDo6YnVpbGRMYXlvdXRJbmZvcm1hdGlvbkZvclRleHRCb3guCisgICAgICAgICogcmVu
ZGVyaW5nL1NWR0lubGluZVRleHRCb3guaDogRml4IGluZGVudGlvbi4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblRvcCk6IElubGluZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25IZWlnaHQpOiBJbmxpbmVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcDogSW5jbHVkZSBTVkdUZXh0
TGF5b3V0VXRpbGl0aWVzLmgKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5j
cHA6IE1vdmUgYWxtb3N0IGFsbCBzdGF0aWMgdGV4dCBsYXlvdXQgaGVscGVyIGZ1bmN0aW9ucyBp
biBTVkdUZXh0TGF5b3V0VXRpbGl0aWVzCisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVUZXh0
TGVuZ3RoQ29ycmVjdGlvbkZvclRleHRDaHVuayk6IEZpeGVkIHN0eWxlIGlzc3VlIGluIGxvbmcg
aWYgY29uZGl0aW9ucyBzcGFubmluZyBtdWx0aXBsZSBsaW5lcy4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR1Jvb3RJbmxpbmVCb3g6OmNvbXB1dGVQZXJDaGFyYWN0ZXJMYXlvdXRJbmZvcm1hdGlvbik6
IFVzZSBkaWZmZXJlbnQgdG9wTGVmdFBvc2l0aW9uT2ZDaGFyYWN0ZXJSYW5nZSgpIHRha2luZyBz
dGFydC9lbmQgaXRlcmF0b3JzLgorICAgICAgICAoV2ViQ29yZTo6U1ZHUm9vdElubGluZUJveDo6
YnVpbGRMYXlvdXRJbmZvcm1hdGlvbik6IFVzZSB0aGUgbW92ZWQgU1ZHSW5saW5lVGV4dEJveDo6
YnVpbGRMYXlvdXRJbmZvcm1hdGlvbigpIG1ldGhvZC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jv
b3RJbmxpbmVCb3g6OmJ1aWxkVGV4dENodW5rcyk6IEZpeGVkIHNtYWxsIHN0eWxlIGlzc3VlLCBy
ZW1vdmUgdW5uZWVkZWQgcGFyZW50aGVzaXMuCisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5s
aW5lQm94OjpsYXlvdXRUZXh0Q2h1bmtzKTogRml4IHN0eWxlIGlzc3VlIGluIGRlYnVnZ2luZyBj
b2RlLgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSb290SW5saW5lQm94Lmg6IFJlbmFtZSAnTGFz
dEdseXBoSW5mbycgdG8gJ1NWR0xhc3RHbHlwaEluZm8nIGFuZCBtb3ZlIHRvIFNWR1RleHRMYXlv
dXRVdGlsaXRpZXMuCisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94OjpzdmdUZXh0
Q2h1bmtzKTogSW5saW5lZCBmb3Igc3BlZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NWR1RleHRM
YXlvdXRVdGlsaXRpZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzVmVydGljYWxX
cml0aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpkb21pbmFudEJhc2VsaW5lVG9TaGlmdCk6
CisgICAgICAgIChXZWJDb3JlOjphbGlnbm1lbnRCYXNlbGluZVRvU2hpZnQpOgorICAgICAgICAo
V2ViQ29yZTo6Z2x5cGhPcmllbnRhdGlvblRvQW5nbGUpOgorICAgICAgICAoV2ViQ29yZTo6Z2x5
cGhPcmllbnRhdGlvbklzTXVsdGlwbHlPZjE4MERlZ3JlZXMpOgorICAgICAgICAoV2ViQ29yZTo6
YXBwbHlHbHlwaEFkdmFuY2VBbmRTaGlmdFJlc3BlY3RpbmdPcmllbnRhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjp0b3BMZWZ0UG9zaXRpb25PZkNoYXJhY3RlclJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OmN1bW11bGF0ZWRXaWR0aE9mSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3VtbXVsYXRlZEhlaWdodE9mSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6c3ZnVGV4dFJ1bkZvcklubGluZVRleHRCb3gpOgorICAgICAgICAo
V2ViQ29yZTo6Y2FsY3VsYXRlQ1NTS2VybmluZyk6CisgICAgICAgIChXZWJDb3JlOjphcHBseVNW
R0tlcm5pbmcpOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRQ
YWludEluZm86OlNWR1RleHRQYWludEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGFzdEds
eXBoSW5mbzo6U1ZHTGFzdEdseXBoSW5mbyk6CisKIDIwMTAtMDUtMTEgIFpvbHRhbiBIZXJjemVn
ICA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaXJrIFNjaHVs
emUuCkluZGV4OiBXZWJDb3JlL0FuZHJvaWQubWsKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9BbmRy
b2lkLm1rCShyZXZpc2lvbiA1OTE0NykKKysrIFdlYkNvcmUvQW5kcm9pZC5tawkod29ya2luZyBj
b3B5KQpAQCAtNjU3LDcgKzY1Nyw4IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NSQ19G
SUxFUykgXAogCXJlbmRlcmluZy9TVkdSZW5kZXJTdXBwb3J0LmNwcCBcCiAJcmVuZGVyaW5nL1NW
R1JlbmRlclRyZWVBc1RleHQuY3BwIFwKIAlyZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5jcHAg
XAotCXJlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwCisJcmVuZGVyaW5nL1NWR1No
YWRvd1RyZWVFbGVtZW50cy5jcHAgXAorCXJlbmRlcmluZy9TVkdUZXh0TGF5b3V0VXRpbGl0aWVz
LmNwcAogZW5kaWYKIAogTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCklu
ZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFr
ZWZpbGUuYW0JKHJldmlzaW9uIDU5MTQ3KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29y
a2luZyBjb3B5KQpAQCAtMzIyMSw2ICszMjIxLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlX
ZWJDb3JlL3JlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwIFwKIAlXZWJDb3JlL3Jl
bmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuaCBcCiAJV2ViQ29yZS9yZW5kZXJpbmcvU1ZH
VGV4dENodW5rTGF5b3V0SW5mby5oIFwKKwlXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0TGF5b3V0
VXRpbGl0aWVzLmNwcCBcCisJV2ViQ29yZS9yZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0aWxpdGll
cy5oIFwKIAlXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5jcHAgXAogCVdl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmggXAogCVdlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDU5MTQ3
KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTMyODcsNiArMzI4
Nyw4IEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL1NWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAn
LAogICAgICAgICAgICAgJ3JlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuaCcsCiAgICAg
ICAgICAgICAncmVuZGVyaW5nL1NWR1RleHRDaHVua0xheW91dEluZm8uaCcsCisgICAgICAgICAg
ICAncmVuZGVyaW5nL1NWR1RleHRMYXlvdXRVdGlsaXRpZXMuY3BwJywKKyAgICAgICAgICAgICdy
ZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0aWxpdGllcy5oJywKICAgICAgICAgICAgICdyZW5kZXJp
bmcvVGFibGVMYXlvdXQuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1RleHRDb250cm9sSW5u
ZXJFbGVtZW50cy5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9UZXh0Q29udHJvbElubmVy
RWxlbWVudHMuaCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDU5MTQ3KQorKysgV2ViQ29yZS9XZWJDb3JlLnBy
bwkod29ya2luZyBjb3B5KQpAQCAtMTgwOSw2ICsxODA5LDcgQEAgSEVBREVSUyArPSBcCiAgICAg
cmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guaCBcCiAgICAgcmVuZGVyaW5nL1NWR1NoYWRvd1Ry
ZWVFbGVtZW50cy5oIFwKICAgICByZW5kZXJpbmcvU1ZHVGV4dENodW5rTGF5b3V0SW5mby5oIFwK
KyAgICByZW5kZXJpbmcvU1ZHVGV4dExheW91dFV0aWxpdGllcy5oIFwKICAgICByZW5kZXJpbmcv
VGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmggXAogICAgIHJlbmRlcmluZy9UcmFuc2Zvcm1TdGF0
ZS5oIFwKICAgICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmggXApAQCAtMjc3OCw3
ICsyNzc5LDggQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWRz0xKSB7CiAgICAgICAgIHJl
bmRlcmluZy9TVkdNYXJrZXJMYXlvdXRJbmZvLmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9TVkdS
ZW5kZXJTdXBwb3J0LmNwcCBcCiAgICAgICAgIHJlbmRlcmluZy9TVkdSb290SW5saW5lQm94LmNw
cCBcCi0gICAgICAgIHJlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwCisgICAgICAg
IHJlbmRlcmluZy9TVkdTaGFkb3dUcmVlRWxlbWVudHMuY3BwIFwKKyAgICAgICAgcmVuZGVyaW5n
L1NWR1RleHRMYXlvdXRVdGlsaXRpZXMuY3BwCiB9CiAKIGNvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9KQVZBU0NSSVBUX0RFQlVHR0VSPTEpIHsKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagkocmV2aXNpb24gNTkxNDcpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yODYwNyw2ICsyODYwNywxNCBAQAogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJp
bmdcU1ZHVGV4dExheW91dFV0aWxpdGllcy5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcU1ZHVGV4dExheW91dFV0aWxp
dGllcy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccmVuZGVyaW5nXFRhYmxlTGF5b3V0LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDU5
MTQ3KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTc1LDYgKzc1LDggQEAKIAkJMDgzREFFQTcwRjAxQTdGQjAwMzQyNzU0IC8q
IFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwODNEQUVBMzBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVyVGV4
dENvbnRyb2xNdWx0aUxpbmUuaCAqLzsgfTsKIAkJMDgzREFFQTgwRjAxQTdGQjAwMzQyNzU0IC8q
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODNEQUVBNDBGMDFBN0ZCMDAzNDI3NTQgLyogUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCAqLzsgfTsKIAkJMDgzREFFQTkwRjAxQTdGQjAwMzQy
NzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDgzREFFQTUwRjAxQTdGQjAwMzQyNzU0IC8qIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oICovOyB9OworCQkwODNGNTI5OTExOTU3RkJFMDA2
NTNFQkUgLyogU1ZHVGV4dExheW91dFV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODNGNTI5NzExOTU3RkJFMDA2NTNFQkUgLyogU1ZH
VGV4dExheW91dFV0aWxpdGllcy5jcHAgKi87IH07CisJCTA4M0Y1MjlBMTE5NTdGQkUwMDY1M0VC
RSAvKiBTVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwODNGNTI5ODExOTU3RkJFMDA2NTNFQkUgLyogU1ZHVGV4dExh
eW91dFV0aWxpdGllcy5oICovOyB9OwogCQkwODQyQkM3MjExOTAxNDQwMDBDN0QwOEYgLyogU1ZH
Q2hhcmFjdGVyRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwODQyQkM3MDExOTAxNDQwMDBDN0QwOEYgLyogU1ZHQ2hhcmFjdGVyRGF0YS5jcHAg
Ki87IH07CiAJCTA4NDJCQzczMTE5MDE0NDAwMEM3RDA4RiAvKiBTVkdDaGFyYWN0ZXJEYXRhLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODQyQkM3MTEx
OTAxNDQwMDBDN0QwOEYgLyogU1ZHQ2hhcmFjdGVyRGF0YS5oICovOyB9OwogCQkwODQyQkM4MTEx
OTAxNDcyMDBDN0QwOEYgLyogU1ZHVGV4dENodW5rTGF5b3V0SW5mby5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg0MkJDODAxMTkwMTQ3MjAwQzdEMDhG
IC8qIFNWR1RleHRDaHVua0xheW91dEluZm8uaCAqLzsgfTsKQEAgLTU1MjIsNiArNTUyNCw4IEBA
CiAJCTA4M0RBRUEzMEYwMUE3RkIwMDM0Mjc1NCAvKiBSZW5kZXJUZXh0Q29udHJvbE11bHRpTGlu
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODNEQUVBNDBGMDFBN0ZC
MDAzNDI3NTQgLyogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4M0RBRUE1MEYwMUE3RkIwMDM0Mjc1NCAv
KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTA4M0Y1Mjk3MTE5NTdGQkUwMDY1M0VCRSAvKiBTVkdUZXh0TGF5b3V0VXRp
bGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1RleHRM
YXlvdXRVdGlsaXRpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwODNGNTI5
ODExOTU3RkJFMDA2NTNFQkUgLyogU1ZHVGV4dExheW91dFV0aWxpdGllcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdUZXh0TGF5b3V0VXRpbGl0aWVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NDJCQzcwMTE5MDE0NDAwMEM3RDA4RiAvKiBTVkdDaGFy
YWN0ZXJEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0No
YXJhY3RlckRhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODQyQkM3MTEx
OTAxNDQwMDBDN0QwOEYgLyogU1ZHQ2hhcmFjdGVyRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdDaGFyYWN0ZXJEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA4NDJCQzgwMTE5MDE0NzIwMEM3RDA4RiAvKiBTVkdUZXh0Q2h1bmtMYXlvdXRJbmZv
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1RleHRDaHVua0xheW91dElu
Zm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2Mjc0LDYgKzE2Mjc4LDggQEAK
IAkJCQkwOERBQjlDMDExMDNEOUMxMDAzRTdBQkEgLyogU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmNw
cCAqLywKIAkJCQkwOERBQjlDMTExMDNEOUMxMDAzRTdBQkEgLyogU1ZHU2hhZG93VHJlZUVsZW1l
bnRzLmggKi8sCiAJCQkJMDg0MkJDODAxMTkwMTQ3MjAwQzdEMDhGIC8qIFNWR1RleHRDaHVua0xh
eW91dEluZm8uaCAqLywKKwkJCQkwODNGNTI5NzExOTU3RkJFMDA2NTNFQkUgLyogU1ZHVGV4dExh
eW91dFV0aWxpdGllcy5jcHAgKi8sCisJCQkJMDgzRjUyOTgxMTk1N0ZCRTAwNjUzRUJFIC8qIFNW
R1RleHRMYXlvdXRVdGlsaXRpZXMuaCAqLywKIAkJCQlBOENGRjA0QzBBMTU0RjA5MDAwQTQyMzQg
LyogVGFibGVMYXlvdXQuaCAqLywKIAkJCQlBQjAxNERFMTBFNjg5QTQzMDBFMTA0NDUgLyogVGV4
dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCAqLywKIAkJCQlBQjAxNERFMjBFNjg5QTQzMDBFMTA0
NDUgLyogVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmggKi8sCkBAIC0xOTExNyw2ICsxOTEyMyw3
IEBACiAJCQkJQjU1RDVBQTQxMTkxMzFGQzAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5j
Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUI1OENFQjY5MTE5MTM2MDcwMDJBNjc5MCAv
KiBKU0RhdGFiYXNlU3luYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjU4Q0VCNkQxMTkxMzYxQzAw
MkE2NzkwIC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jLmggaW4gSGVhZGVycyAqLywKKwkJCQkwODNG
NTI5QTExOTU3RkJFMDA2NTNFQkUgLyogU1ZHVGV4dExheW91dFV0aWxpdGllcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzUxOThGNEMxMTkyRUNGRDAwMkI3NEE2IC8qIElEQkNhbGxiYWNrcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzUxOThGNEUxMTkyRUNGRDAwMkI3NEE2IC8qIElEQkRhdGFiYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNTE5OEY0RjExOTJFQ0ZEMDAyQjc0QTYgLyogSURCRGF0
YWJhc2VFcnJvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMTM4NSw2ICsyMTM5Miw3IEBACiAJCQkJ
QjU1RDVBQTkxMTkxMzI1MDAwQkNDMzE1IC8qIEpTU1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUI1OENFQjZBMTE5MTM2MDcwMDJBNjc5MCAvKiBKU0RhdGFi
YXNlU3luYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNThDRUI2RTExOTEzNjFDMDAyQTY3OTAg
LyogSlNTUUxUcmFuc2FjdGlvblN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDgzRjUyOTkx
MTk1N0ZCRTAwNjUzRUJFIC8qIFNWR1RleHRMYXlvdXRVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQzUxOThGNEQxMTkyRUNGRDAwMkI3NEE2IC8qIElEQkRhdGFiYXNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUM1MTk4RjUzMTE5MkVDRkQwMDJCNzRBNiAvKiBJREJEYXRhYmFzZVJl
cXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzUxOThGNTYxMTkyRUNGRDAwMkI3NEE2IC8q
IElEQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9T
VkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdJ
bmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gNTkxNDcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9T
VkdJbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qKgog
ICogQ29weXJpZ2h0IChDKSAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgKiAgICAgICAg
ICAgKEMpIDIwMDcgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDE0ICsyNSwxMiBAQAogI2lmIEVO
QUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJveC5oIgogCi0jaW5jbHVkZSAiRG9j
dW1lbnQuaCIKLSNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIklubGluZUZsb3dCb3guaCIKLSNpbmNs
dWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAi
U1ZHUm9vdElubGluZUJveC5oIgorI2luY2x1ZGUgIlNWR1RleHRMYXlvdXRVdGlsaXRpZXMuaCIK
ICNpbmNsdWRlICJUZXh0LmgiCiAKICNpbmNsdWRlIDxmbG9hdC5oPgpAQCAtNDQsMTYgKzQzLDYg
QEAgU1ZHSW5saW5lVGV4dEJveDo6U1ZHSW5saW5lVGV4dEJveChSZW5kZQogewogfQogCi1pbnQg
U1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uVG9wKCkKLXsKLSAgICByZXR1cm4gbV95OwotfQot
IAotaW50IFNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvbkhlaWdodCgpCi17Ci0gICAgcmV0dXJu
IG1faGVpZ2h0OwotfQotCiBTVkdSb290SW5saW5lQm94KiBTVkdJbmxpbmVUZXh0Qm94OjpzdmdS
b290SW5saW5lQm94KCkgY29uc3QKIHsKICAgICAvLyBGaW5kIGFzc29jaWF0ZWQgcm9vdCBpbmxp
bmUgYm94CkBAIC03NCw3ICs2Myw3IEBAIFNWR1Jvb3RJbmxpbmVCb3gqIFNWR0lubGluZVRleHRC
b3g6OnN2Z1IKIGZsb2F0IFNWR0lubGluZVRleHRCb3g6OmNhbGN1bGF0ZUdseXBoV2lkdGgoUmVu
ZGVyU3R5bGUqIHN0eWxlLCBpbnQgb2Zmc2V0LCBpbnQgZXh0cmFDaGFyc0F2YWlsYWJsZSwgaW50
JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3QKIHsKICAgICBBU1NFUlQo
c3R5bGUpOwotICAgIHJldHVybiBzdHlsZS0+Zm9udCgpLmZsb2F0V2lkdGgoc3ZnVGV4dFJ1bkZv
cklubGluZVRleHRCb3godGV4dFJlbmRlcmVyKCktPnRleHQoKS0+Y2hhcmFjdGVycygpICsgb2Zm
c2V0LCAxLCBzdHlsZSwgdGhpcywgMCksIGV4dHJhQ2hhcnNBdmFpbGFibGUsIGNoYXJzQ29uc3Vt
ZWQsIGdseXBoTmFtZSk7CisgICAgcmV0dXJuIHN0eWxlLT5mb250KCkuZmxvYXRXaWR0aChzdmdU
ZXh0UnVuRm9ySW5saW5lVGV4dEJveCh0ZXh0UmVuZGVyZXIoKS0+Y2hhcmFjdGVycygpICsgb2Zm
c2V0LCAxLCBzdHlsZSwgdGhpcywgMCksIGV4dHJhQ2hhcnNBdmFpbGFibGUsIGNoYXJzQ29uc3Vt
ZWQsIGdseXBoTmFtZSk7CiB9CiAKIGZsb2F0IFNWR0lubGluZVRleHRCb3g6OmNhbGN1bGF0ZUds
eXBoSGVpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSwgaW50LCBpbnQpIGNvbnN0CkBAIC0yNjAsNyAr
MjQ5LDcgQEAgYm9vbCBTVkdJbmxpbmVUZXh0Qm94OjpzdmdDaGFyYWN0ZXJIaXRzUAogICAgIGlm
ICh4IDwgY2hhckF0UG9zLngpIHsKICAgICAgICAgaWYgKGNsb3Nlc3RPZmZzZXRJbkJveCA+IDAg
JiYgZGlyZWN0aW9uKCkgPT0gTFRSKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGVsc2UgaWYgKGNsb3Nlc3RPZmZzZXRJbkJveCA8IChpbnQpIGVuZCgpICYmIGRpcmVjdGlvbigp
ID09IFJUTCkKKyAgICAgICAgaWYgKGNsb3Nlc3RPZmZzZXRJbkJveCA8IChpbnQpIGVuZCgpICYm
IGRpcmVjdGlvbigpID09IFJUTCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTQ5MCw3ICs0NzksNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6
OnBhaW50U2VsZWN0aW9uKGluCiAKICAgICBDb2xvciB0ZXh0Q29sb3IgPSBzdHlsZS0+Y29sb3Io
KTsKICAgICBDb2xvciBjb2xvciA9IHJlbmRlcmVyKCktPnNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpOwotICAgIGlmICghY29sb3IuaXNWYWxpZCgpIHx8IGNvbG9yLmFscGhhKCkgPT0gMCkKKyAg
ICBpZiAoIWNvbG9yLmlzVmFsaWQoKSB8fCAhY29sb3IuYWxwaGEoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gSWYgdGhlIHRleHQgY29sb3IgZW5kcyB1cCBiZWluZyB0aGUgc2FtZSBhcyB0
aGUgc2VsZWN0aW9uIGJhY2tncm91bmQsIGludmVydCB0aGUgc2VsZWN0aW9uCkBAIC01MTYsNyAr
NTA1LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihpbgogICAgIHAt
PnNhdmUoKTsKIAogICAgIGludCBhZGp1c3QgPSBzdGFydFBvcyA+PSBib3hTdGFydE9mZnNldCA/
IGJveFN0YXJ0T2Zmc2V0IDogMDsKLSAgICBwLT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBz
dmdUZXh0UnVuRm9ySW5saW5lVGV4dEJveCh0ZXh0UmVuZGVyZXIoKS0+dGV4dCgpLT5jaGFyYWN0
ZXJzKCkgKyBzdGFydCgpICsgYm94U3RhcnRPZmZzZXQsIGxlbmd0aCwgc3R5bGUsIHRoaXMsIHN2
Z0NoYXIueCksCisgICAgcC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwgc3ZnVGV4dFJ1bkZv
cklubGluZVRleHRCb3godGV4dFJlbmRlcmVyKCktPmNoYXJhY3RlcnMoKSArIHN0YXJ0KCkgKyBi
b3hTdGFydE9mZnNldCwgbGVuZ3RoLCBzdHlsZSwgdGhpcywgc3ZnQ2hhci54KSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJbnRQb2ludCgoaW50KSBzdmdDaGFyLngsIChpbnQpIHN2Z0No
YXIueSAtIGZvbnQuYXNjZW50KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQu
YXNjZW50KCkgKyBmb250LmRlc2NlbnQoKSwgY29sb3IsIHN0eWxlLT5jb2xvclNwYWNlKCksIHN0
YXJ0UG9zIC0gYWRqdXN0LCBlbmRQb3MgLSBhZGp1c3QpOwogCkBAIC01ODksNiArNTc4LDIzMyBA
QCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihFCiAgICAgY29udGV4dC0+
cmVzdG9yZSgpOwogfQogCit2b2lkIFNWR0lubGluZVRleHRCb3g6OmJ1aWxkTGF5b3V0SW5mb3Jt
YXRpb24oU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbyYgaW5mbywgU1ZHTGFzdEdseXBoSW5mbyYgbGFz
dEdseXBoKQoreworICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlciA9IHRoaXMtPnRleHRSZW5k
ZXJlcigpOworICAgIEFTU0VSVCh0ZXh0UmVuZGVyZXIpOworCisgICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gdGV4dFJlbmRlcmVyLT5zdHlsZShpc0ZpcnN0TGluZVN0eWxlKCkpOworICAgIEFTU0VS
VChzdHlsZSk7CisKKyAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUtPmZvbnQoKTsKKyAgICBj
b25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHRleHRSZW5kZXJlci0+Y2hhcmFjdGVycygpOworCisg
ICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uKCk7CisgICAgdW5zaWdu
ZWQgc3RhcnRQb3NpdGlvbiA9IHN0YXJ0KCk7CisgICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSBl
bmQoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBsZW4oKTsKKworICAgIGNvbnN0IFNWR1JlbmRl
clN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlLT5zdmdTdHlsZSgpOworICAgIGJvb2wgaXNWZXJ0aWNh
bFRleHQgPSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUoc3ZnU3R5bGUpOworCisgICAgaW50IGNoYXJz
Q29uc3VtZWQgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0g
Y2hhcnNDb25zdW1lZCkgeworICAgICAgICBTVkdDaGFyIHN2Z0NoYXI7CisKKyAgICAgICAgaWYg
KGluZm8uaW5QYXRoTGF5b3V0KCkpCisgICAgICAgICAgICBzdmdDaGFyLnBhdGhEYXRhID0gU1ZH
Q2hhck9uUGF0aDo6Y3JlYXRlKCk7CisKKyAgICAgICAgZmxvYXQgZ2x5cGhXaWR0aCA9IDAuMGY7
CisgICAgICAgIGZsb2F0IGdseXBoSGVpZ2h0ID0gMC4wZjsKKworICAgICAgICBpbnQgZXh0cmFD
aGFyc0F2YWlsYWJsZSA9IGxlbmd0aCAtIGkgLSAxOworCisgICAgICAgIFN0cmluZyB1bmljb2Rl
U3RyOworICAgICAgICBTdHJpbmcgZ2x5cGhOYW1lOworICAgICAgICBpZiAodGV4dERpcmVjdGlv
biA9PSBSVEwpIHsKKyAgICAgICAgICAgIGdseXBoV2lkdGggPSBjYWxjdWxhdGVHbHlwaFdpZHRo
KHN0eWxlLCBlbmRQb3NpdGlvbiAtIGksIGV4dHJhQ2hhcnNBdmFpbGFibGUsIGNoYXJzQ29uc3Vt
ZWQsIGdseXBoTmFtZSk7CisgICAgICAgICAgICBnbHlwaEhlaWdodCA9IGNhbGN1bGF0ZUdseXBo
SGVpZ2h0KHN0eWxlLCBlbmRQb3NpdGlvbiAtIGksIGV4dHJhQ2hhcnNBdmFpbGFibGUpOworICAg
ICAgICAgICAgdW5pY29kZVN0ciA9IFN0cmluZyhjaGFyYWN0ZXJzICsgZW5kUG9zaXRpb24gLSBp
LCBjaGFyc0NvbnN1bWVkKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdseXBoV2lk
dGggPSBjYWxjdWxhdGVHbHlwaFdpZHRoKHN0eWxlLCBzdGFydFBvc2l0aW9uICsgaSwgZXh0cmFD
aGFyc0F2YWlsYWJsZSwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKTsKKyAgICAgICAgICAgIGds
eXBoSGVpZ2h0ID0gY2FsY3VsYXRlR2x5cGhIZWlnaHQoc3R5bGUsIHN0YXJ0UG9zaXRpb24gKyBp
LCBleHRyYUNoYXJzQXZhaWxhYmxlKTsKKyAgICAgICAgICAgIHVuaWNvZGVTdHIgPSBTdHJpbmco
Y2hhcmFjdGVycyArIHN0YXJ0UG9zaXRpb24gKyBpLCBjaGFyc0NvbnN1bWVkKTsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgYXNzaWduZWRYID0gZmFsc2U7CisgICAgICAgIGJvb2wgYXNzaWdu
ZWRZID0gZmFsc2U7CisKKyAgICAgICAgaWYgKGluZm8ueFZhbHVlQXZhaWxhYmxlKCkgJiYgKCFp
bmZvLmluUGF0aExheW91dCgpIHx8IChpbmZvLmluUGF0aExheW91dCgpICYmICFpc1ZlcnRpY2Fs
VGV4dCkpKSB7CisgICAgICAgICAgICBpZiAoIWlzVmVydGljYWxUZXh0KQorICAgICAgICAgICAg
ICAgIHN2Z0NoYXIubmV3VGV4dENodW5rID0gdHJ1ZTsKKworICAgICAgICAgICAgYXNzaWduZWRY
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHN2Z0NoYXIuZHJhd25TZXBlcmF0ZWQgPSB0cnVlOworICAg
ICAgICAgICAgaW5mby5jdXJ4ID0gaW5mby54VmFsdWVOZXh0KCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoaW5mby55VmFsdWVBdmFpbGFibGUoKSAmJiAoIWluZm8uaW5QYXRoTGF5b3V0KCkg
fHwgKGluZm8uaW5QYXRoTGF5b3V0KCkgJiYgaXNWZXJ0aWNhbFRleHQpKSkgeworICAgICAgICAg
ICAgaWYgKGlzVmVydGljYWxUZXh0KQorICAgICAgICAgICAgICAgIHN2Z0NoYXIubmV3VGV4dENo
dW5rID0gdHJ1ZTsKKworICAgICAgICAgICAgYXNzaWduZWRZID0gdHJ1ZTsKKyAgICAgICAgICAg
IHN2Z0NoYXIuZHJhd25TZXBlcmF0ZWQgPSB0cnVlOworICAgICAgICAgICAgaW5mby5jdXJ5ID0g
aW5mby55VmFsdWVOZXh0KCk7CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCBkeCA9IDAuMGY7
CisgICAgICAgIGZsb2F0IGR5ID0gMC4wZjsKKworICAgICAgICAvLyBBcHBseSB4LWF4aXMgc2hp
ZnQKKyAgICAgICAgaWYgKGluZm8uZHhWYWx1ZUF2YWlsYWJsZSgpKSB7CisgICAgICAgICAgICBz
dmdDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsKKworICAgICAgICAgICAgZHggPSBpbmZvLmR4
VmFsdWVOZXh0KCk7CisgICAgICAgICAgICBpbmZvLmR4ICs9IGR4OworCisgICAgICAgICAgICBp
ZiAoIWluZm8uaW5QYXRoTGF5b3V0KCkpCisgICAgICAgICAgICAgICAgaW5mby5jdXJ4ICs9IGR4
OworICAgICAgICB9CisKKyAgICAgICAgLy8gQXBwbHkgeS1heGlzIHNoaWZ0CisgICAgICAgIGlm
IChpbmZvLmR5VmFsdWVBdmFpbGFibGUoKSkgeworICAgICAgICAgICAgc3ZnQ2hhci5kcmF3blNl
cGVyYXRlZCA9IHRydWU7CisKKyAgICAgICAgICAgIGR5ID0gaW5mby5keVZhbHVlTmV4dCgpOwor
ICAgICAgICAgICAgaW5mby5keSArPSBkeTsKKworICAgICAgICAgICAgaWYgKCFpbmZvLmluUGF0
aExheW91dCgpKQorICAgICAgICAgICAgICAgIGluZm8uY3VyeSArPSBkeTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFRha2UgbGV0dGVyICYgd29yZCBzcGFjaW5nIGFuZCBrZXJuaW5nIGludG8g
YWNjb3VudAorICAgICAgICBmbG9hdCBzcGFjaW5nID0gZm9udC5sZXR0ZXJTcGFjaW5nKCkgKyBj
YWxjdWxhdGVDU1NLZXJuaW5nKHN0eWxlKTsKKworICAgICAgICBjb25zdCBVQ2hhciogY3VycmVu
dENoYXJhY3RlciA9IGNoYXJhY3RlcnMgKyAodGV4dERpcmVjdGlvbiA9PSBSVEwgPyBlbmRQb3Np
dGlvbiAtIGkgOiBzdGFydFBvc2l0aW9uICsgaSk7CisgICAgICAgIGNvbnN0IFVDaGFyKiBsYXN0
Q2hhcmFjdGVyID0gMDsKKworICAgICAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBSVEwpIHsKKyAg
ICAgICAgICAgIGlmIChpIDwgZW5kUG9zaXRpb24pCisgICAgICAgICAgICAgICAgbGFzdENoYXJh
Y3RlciA9IGNoYXJhY3RlcnMgKyBlbmRQb3NpdGlvbiAtIGkgKyAgMTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgICAgICBsYXN0Q2hhcmFjdGVy
ID0gY2hhcmFjdGVycyArIHN0YXJ0UG9zaXRpb24gKyBpIC0gMTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIEZJWE1FOiBTVkcgS2VybmluZyBkb2Vzbid0IGdldCBhcHBsaWVkIG9uIHRleHRzIG9u
IHBhdGguCisgICAgICAgIGJvb2wgYXBwbGllZFNWR0tlcm5pbmcgPSBhcHBseVNWR0tlcm5pbmco
aW5mbywgc3R5bGUsIGxhc3RHbHlwaCwgdW5pY29kZVN0ciwgZ2x5cGhOYW1lLCBpc1ZlcnRpY2Fs
VGV4dCk7CisgICAgICAgIGlmIChpbmZvLm5leHREcmF3blNlcGVyYXRlZCB8fCBzcGFjaW5nICE9
IDAuMGYgfHwgYXBwbGllZFNWR0tlcm5pbmcpIHsKKyAgICAgICAgICAgIGluZm8ubmV4dERyYXdu
U2VwZXJhdGVkID0gZmFsc2U7CisgICAgICAgICAgICBzdmdDaGFyLmRyYXduU2VwZXJhdGVkID0g
dHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyICYmIEZvbnQ6
OnRyZWF0QXNTcGFjZSgqY3VycmVudENoYXJhY3RlcikgJiYgbGFzdENoYXJhY3RlciAmJiAhRm9u
dDo6dHJlYXRBc1NwYWNlKCpsYXN0Q2hhcmFjdGVyKSkgeworICAgICAgICAgICAgc3BhY2luZyAr
PSBmb250LndvcmRTcGFjaW5nKCk7CisKKyAgICAgICAgICAgIGlmIChzcGFjaW5nICE9IDAuMGYg
JiYgIWluZm8uaW5QYXRoTGF5b3V0KCkpCisgICAgICAgICAgICAgICAgaW5mby5uZXh0RHJhd25T
ZXBlcmF0ZWQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgb3JpZW50YXRpb25B
bmdsZSA9IGdseXBoT3JpZW50YXRpb25Ub0FuZ2xlKHN2Z1N0eWxlLCBpc1ZlcnRpY2FsVGV4dCwg
KmN1cnJlbnRDaGFyYWN0ZXIpOworCisgICAgICAgIGZsb2F0IHhPcmllbnRhdGlvblNoaWZ0ID0g
MC4wZjsKKyAgICAgICAgZmxvYXQgeU9yaWVudGF0aW9uU2hpZnQgPSAwLjBmOworICAgICAgICBm
bG9hdCBnbHlwaEFkdmFuY2UgPSBhcHBseUdseXBoQWR2YW5jZUFuZFNoaWZ0UmVzcGVjdGluZ09y
aWVudGF0aW9uKGlzVmVydGljYWxUZXh0LCBvcmllbnRhdGlvbkFuZ2xlLCBnbHlwaFdpZHRoLCBn
bHlwaEhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LCBzdmdDaGFyLCB4T3JpZW50YXRp
b25TaGlmdCwgeU9yaWVudGF0aW9uU2hpZnQpOworCisgICAgICAgIC8vIEhhbmRsZSB0ZXh0UGF0
aCBsYXlvdXQgbW9kZQorICAgICAgICBpZiAoaW5mby5pblBhdGhMYXlvdXQoKSkgeworICAgICAg
ICAgICAgZmxvYXQgZXh0cmFBZHZhbmNlID0gaXNWZXJ0aWNhbFRleHQgPyBkeSA6IGR4OworICAg
ICAgICAgICAgZmxvYXQgbmV3T2Zmc2V0ID0gRkxUX01JTjsKKworICAgICAgICAgICAgaWYgKGFz
c2lnbmVkWCAmJiAhaXNWZXJ0aWNhbFRleHQpCisgICAgICAgICAgICAgICAgbmV3T2Zmc2V0ID0g
aW5mby5jdXJ4OworICAgICAgICAgICAgZWxzZSBpZiAoYXNzaWduZWRZICYmIGlzVmVydGljYWxU
ZXh0KQorICAgICAgICAgICAgICAgIG5ld09mZnNldCA9IGluZm8uY3VyeTsKKworICAgICAgICAg
ICAgZmxvYXQgY29ycmVjdGVkR2x5cGhBZHZhbmNlID0gZ2x5cGhBZHZhbmNlOworCisgICAgICAg
ICAgICAvLyBIYW5kbGUgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiBieSBzcGVjaWZ5
aW5nIHBlci1jaGFyYWN0ZXIgc2NhbGUgb3BlcmF0aW9ucworICAgICAgICAgICAgaWYgKGluZm8u
cGF0aFRleHRMZW5ndGggPiAwLjBmICYmIGluZm8ucGF0aENodW5rTGVuZ3RoID4gMC4wZikgeyAK
KyAgICAgICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgc3ZnQ2hhci5wYXRoRGF0YS0+eVNjYWxlID0gaW5mby5wYXRoQ2h1bmtMZW5ndGggLyBpbmZv
LnBhdGhUZXh0TGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBzcGFjaW5nICo9IHN2Z0NoYXIu
cGF0aERhdGEtPnlTY2FsZTsKKyAgICAgICAgICAgICAgICAgICAgY29ycmVjdGVkR2x5cGhBZHZh
bmNlICo9IHN2Z0NoYXIucGF0aERhdGEtPnlTY2FsZTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBzdmdDaGFyLnBhdGhEYXRhLT54U2NhbGUgPSBpbmZvLnBh
dGhDaHVua0xlbmd0aCAvIGluZm8ucGF0aFRleHRMZW5ndGg7CisgICAgICAgICAgICAgICAgICAg
IHNwYWNpbmcgKj0gc3ZnQ2hhci5wYXRoRGF0YS0+eFNjYWxlOworICAgICAgICAgICAgICAgICAg
ICBjb3JyZWN0ZWRHbHlwaEFkdmFuY2UgKj0gc3ZnQ2hhci5wYXRoRGF0YS0+eFNjYWxlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSGFuZGxlIGxl
dHRlciAmIHdvcmQgc3BhY2luZyBvbiB0ZXh0IHBhdGgKKyAgICAgICAgICAgIGZsb2F0IHBhdGhF
eHRyYUFkdmFuY2UgPSBpbmZvLnBhdGhFeHRyYUFkdmFuY2U7CisgICAgICAgICAgICBpbmZvLnBh
dGhFeHRyYUFkdmFuY2UgKz0gc3BhY2luZzsKKworICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0
YS0+aGlkZGVuID0gIWluZm8ubmV4dFBhdGhMYXlvdXRQb2ludEFuZEFuZ2xlKGNvcnJlY3RlZEds
eXBoQWR2YW5jZSwgZXh0cmFBZHZhbmNlLCBuZXdPZmZzZXQpOworICAgICAgICAgICAgc3ZnQ2hh
ci5kcmF3blNlcGVyYXRlZCA9IHRydWU7CisKKyAgICAgICAgICAgIGluZm8ucGF0aEV4dHJhQWR2
YW5jZSA9IHBhdGhFeHRyYUFkdmFuY2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBBcHBseSBy
b3RhdGlvbgorICAgICAgICBpZiAoaW5mby5hbmdsZVZhbHVlQXZhaWxhYmxlKCkpCisgICAgICAg
ICAgICBpbmZvLmFuZ2xlID0gaW5mby5hbmdsZVZhbHVlTmV4dCgpOworCisgICAgICAgIC8vIEFw
cGx5IGJhc2VsaW5lLXNoaWZ0CisgICAgICAgIGlmIChpbmZvLmJhc2VsaW5lU2hpZnRWYWx1ZUF2
YWlsYWJsZSgpKSB7CisgICAgICAgICAgICBzdmdDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIGZsb2F0IHNoaWZ0ID0gaW5mby5iYXNlbGluZVNoaWZ0VmFsdWVOZXh0KCk7
CisKKyAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgICAgICAgICBpbmZv
LnNoaWZ0eCArPSBzaGlmdDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpbmZv
LnNoaWZ0eSAtPSBzaGlmdDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRha2UgZG9taW5hbnQt
YmFzZWxpbmUgLyBhbGlnbm1lbnQtYmFzZWxpbmUgaW50byBhY2NvdW50CisgICAgICAgIHlPcmll
bnRhdGlvblNoaWZ0ICs9IGFsaWdubWVudEJhc2VsaW5lVG9TaGlmdChpc1ZlcnRpY2FsVGV4dCwg
dGV4dFJlbmRlcmVyLCBmb250KTsKKworICAgICAgICBzdmdDaGFyLnggPSBpbmZvLmN1cng7Cisg
ICAgICAgIHN2Z0NoYXIueSA9IGluZm8uY3VyeTsKKyAgICAgICAgc3ZnQ2hhci5hbmdsZSA9IGlu
Zm8uYW5nbGU7CisKKyAgICAgICAgLy8gRm9yIHRleHQgcGF0aHMgYW55IHNoaWZ0IChkeC9keS9i
YXNlbGluZS1zaGlmdCkgaGFzIHRvIGJlIGFwcGxpZWQgYWZ0ZXIgdGhlIHJvdGF0aW9uCisgICAg
ICAgIGlmICghaW5mby5pblBhdGhMYXlvdXQoKSkgeworICAgICAgICAgICAgc3ZnQ2hhci54ICs9
IGluZm8uc2hpZnR4ICsgeE9yaWVudGF0aW9uU2hpZnQ7CisgICAgICAgICAgICBzdmdDaGFyLnkg
Kz0gaW5mby5zaGlmdHkgKyB5T3JpZW50YXRpb25TaGlmdDsKKworICAgICAgICAgICAgaWYgKG9y
aWVudGF0aW9uQW5nbGUgIT0gMC4wZikKKyAgICAgICAgICAgICAgICBzdmdDaGFyLmFuZ2xlICs9
IG9yaWVudGF0aW9uQW5nbGU7CisKKyAgICAgICAgICAgIGlmIChzdmdDaGFyLmFuZ2xlICE9IDAu
MGYpCisgICAgICAgICAgICAgICAgc3ZnQ2hhci5kcmF3blNlcGVyYXRlZCA9IHRydWU7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdmdDaGFyLnBhdGhEYXRhLT5vcmllbnRhdGlvbkFu
Z2xlID0gb3JpZW50YXRpb25BbmdsZTsKKworICAgICAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0
KQorICAgICAgICAgICAgICAgIHN2Z0NoYXIuYW5nbGUgLT0gOTAuMGY7CisKKyAgICAgICAgICAg
IHN2Z0NoYXIucGF0aERhdGEtPnhTaGlmdCA9IGluZm8uc2hpZnR4ICsgeE9yaWVudGF0aW9uU2hp
ZnQ7CisgICAgICAgICAgICBzdmdDaGFyLnBhdGhEYXRhLT55U2hpZnQgPSBpbmZvLnNoaWZ0eSAr
IHlPcmllbnRhdGlvblNoaWZ0OworCisgICAgICAgICAgICAvLyBUcmFuc2xhdGUgdG8gZ2x5cGgg
bWlkcG9pbnQKKyAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkgeworICAgICAgICAgICAg
ICAgIHN2Z0NoYXIucGF0aERhdGEtPnhTaGlmdCArPSBpbmZvLmR4OworICAgICAgICAgICAgICAg
IHN2Z0NoYXIucGF0aERhdGEtPnlTaGlmdCAtPSBnbHlwaEFkdmFuY2UgLyAyLjBmOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdmdDaGFyLnBhdGhEYXRhLT54U2hpZnQg
LT0gZ2x5cGhBZHZhbmNlIC8gMi4wZjsKKyAgICAgICAgICAgICAgICBzdmdDaGFyLnBhdGhEYXRh
LT55U2hpZnQgKz0gaW5mby5keTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IC8vIEFkdmFuY2UgdG8gbmV3IHBvc2l0aW9uCisgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkg
eworICAgICAgICAgICAgc3ZnQ2hhci5kcmF3blNlcGVyYXRlZCA9IHRydWU7CisgICAgICAgICAg
ICBpbmZvLmN1cnkgKz0gZ2x5cGhBZHZhbmNlICsgc3BhY2luZzsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBpbmZvLmN1cnggKz0gZ2x5cGhBZHZhbmNlICsgc3BhY2luZzsKKworICAgICAg
ICAvLyBBZHZhbmNlIHRvIG5leHQgY2hhcmFjdGVyIGdyb3VwCisgICAgICAgIGZvciAoaW50IGsg
PSAwOyBrIDwgY2hhcnNDb25zdW1lZDsgKytrKSB7CisgICAgICAgICAgICBpbmZvLnN2Z0NoYXJz
LmFwcGVuZChzdmdDaGFyKTsKKyAgICAgICAgICAgIGluZm8ucHJvY2Vzc2VkU2luZ2xlQ2hhcmFj
dGVyKCk7CisgICAgICAgICAgICBzdmdDaGFyLmRyYXduU2VwZXJhdGVkID0gZmFsc2U7CisgICAg
ICAgICAgICBzdmdDaGFyLm5ld1RleHRDaHVuayA9IGZhbHNlOworICAgICAgICB9CisgICAgfQor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvU1ZHSW5saW5lVGV4dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1NWR0lubGluZVRleHRCb3guaAkocmV2aXNpb24gNTkxNDcpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9TVkdJbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcyICsyOCw1NyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBTVkdSb290SW5saW5lQm94OworY2xh
c3MgU1ZHUm9vdElubGluZUJveDsKIAotICAgIHN0cnVjdCBTVkdDaGFyOwotICAgIHN0cnVjdCBT
VkdUZXh0RGVjb3JhdGlvbkluZm87CitzdHJ1Y3QgU1ZHQ2hhcjsKK3N0cnVjdCBTVkdDaGFyYWN0
ZXJMYXlvdXRJbmZvOworc3RydWN0IFNWR0xhc3RHbHlwaEluZm87CitzdHJ1Y3QgU1ZHVGV4dERl
Y29yYXRpb25JbmZvOworc3RydWN0IFNWR1RleHRQYWludEluZm87CiAKLSAgICBlbnVtIFNWR1Rl
eHRQYWludFN1YnBoYXNlIHsKLSAgICAgICAgU1ZHVGV4dFBhaW50U3VicGhhc2VCYWNrZ3JvdW5k
LAotICAgICAgICBTVkdUZXh0UGFpbnRTdWJwaGFzZUdseXBoRmlsbCwKLSAgICAgICAgU1ZHVGV4
dFBhaW50U3VicGhhc2VHbHlwaEZpbGxTZWxlY3Rpb24sCi0gICAgICAgIFNWR1RleHRQYWludFN1
YnBoYXNlR2x5cGhTdHJva2UsCi0gICAgICAgIFNWR1RleHRQYWludFN1YnBoYXNlR2x5cGhTdHJv
a2VTZWxlY3Rpb24sCi0gICAgICAgIFNWR1RleHRQYWludFN1YnBoYXNlRm9yZWdyb3VuZAotICAg
IH07Ci0KLSAgICBzdHJ1Y3QgU1ZHVGV4dFBhaW50SW5mbyB7Ci0gICAgICAgIFNWR1RleHRQYWlu
dEluZm8oKQotICAgICAgICAgICAgOiBhY3RpdmVQYWludGluZ1Jlc291cmNlKDApCi0gICAgICAg
ICAgICAsIHN1YnBoYXNlKFNWR1RleHRQYWludFN1YnBoYXNlQmFja2dyb3VuZCkKLSAgICAgICAg
ewotICAgICAgICB9Ci0KLSAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2UqIGFjdGl2ZVBhaW50aW5n
UmVzb3VyY2U7Ci0gICAgICAgIFNWR1RleHRQYWludFN1YnBoYXNlIHN1YnBoYXNlOwotICAgIH07
Ci0KLSAgICBjbGFzcyBTVkdJbmxpbmVUZXh0Qm94IDogcHVibGljIElubGluZVRleHRCb3ggewot
ICAgIHB1YmxpYzoKLSAgICAgICAgU1ZHSW5saW5lVGV4dEJveChSZW5kZXJPYmplY3QqIG9iaik7
Ci0KLSAgICAgICAgdmlydHVhbCBpbnQgdmlydHVhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
aGVpZ2h0OyB9Ci0gICAgICAgIHZvaWQgc2V0SGVpZ2h0KGludCBoKSB7IG1faGVpZ2h0ID0gaDsg
fQotCi0gICAgICAgIHZpcnR1YWwgaW50IHNlbGVjdGlvblRvcCgpOwotICAgICAgICB2aXJ0dWFs
IGludCBzZWxlY3Rpb25IZWlnaHQoKTsKLQotICAgICAgICB2aXJ0dWFsIGludCBvZmZzZXRGb3JQ
b3NpdGlvbihpbnQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocyA9IHRydWUpIGNvbnN0Owot
ICAgICAgICB2aXJ0dWFsIGludCBwb3NpdGlvbkZvck9mZnNldChpbnQgb2Zmc2V0KSBjb25zdDsK
LQotICAgICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSk7Ci0gICAgICAg
IHZpcnR1YWwgSW50UmVjdCBzZWxlY3Rpb25SZWN0KGludCBhYnN4LCBpbnQgYWJzeSwgaW50IHN0
YXJ0UG9zLCBpbnQgZW5kUG9zKTsKK2NsYXNzIFNWR0lubGluZVRleHRCb3ggOiBwdWJsaWMgSW5s
aW5lVGV4dEJveCB7CitwdWJsaWM6CisgICAgU1ZHSW5saW5lVGV4dEJveChSZW5kZXJPYmplY3Qq
IG9iaik7CiAKLSAgICAgICAgLy8gU1ZHcyBjdXN0b20gcGFpbnQgdGV4dCBtZXRob2QKLSAgICAg
ICAgdm9pZCBwYWludENoYXJhY3RlcnMoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBpbnQgdHgs
IGludCB0eSwgY29uc3QgU1ZHQ2hhciYsIGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxlbmd0aCwg
U1ZHVGV4dFBhaW50SW5mbyYpOworICAgIHZpcnR1YWwgaW50IHZpcnR1YWxIZWlnaHQoKSBjb25z
dCB7IHJldHVybiBtX2hlaWdodDsgfQorICAgIHZvaWQgc2V0SGVpZ2h0KGludCBoKSB7IG1faGVp
Z2h0ID0gaDsgfQogCi0gICAgICAgIC8vIFNWR3MgY3VzdG9tIHBhaW50IHNlbGVjdGlvbiBtZXRo
b2QKLSAgICAgICAgdm9pZCBwYWludFNlbGVjdGlvbihpbnQgYm94U3RhcnRPZmZzZXQsIGNvbnN0
IFNWR0NoYXImLCBjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIEdyYXBoaWNzQ29udGV4dCosIFJl
bmRlclN0eWxlKiwgY29uc3QgRm9udCYpOworICAgIHZpcnR1YWwgaW50IHNlbGVjdGlvblRvcCgp
IHsgcmV0dXJuIG1feTsgfQorICAgIHZpcnR1YWwgaW50IHNlbGVjdGlvbkhlaWdodCgpIHsgcmV0
dXJuIG1faGVpZ2h0OyB9CiAKLSAgICAgICAgLy8gU1ZHcyBjdXN0b20gcGFpbnQgZGVjb3JhdGlv
biBtZXRob2QKLSAgICAgICAgdm9pZCBwYWludERlY29yYXRpb24oRVRleHREZWNvcmF0aW9uLCBH
cmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwgaW50IHdpZHRoLCBjb25zdCBTVkdDaGFy
JiwgY29uc3QgU1ZHVGV4dERlY29yYXRpb25JbmZvJik7CisgICAgdmlydHVhbCBpbnQgb2Zmc2V0
Rm9yUG9zaXRpb24oaW50IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMgPSB0cnVlKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGludCBwb3NpdGlvbkZvck9mZnNldChpbnQgb2Zmc2V0KSBjb25zdDsK
KworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFs
IEludFJlY3Qgc2VsZWN0aW9uUmVjdChpbnQgYWJzeCwgaW50IGFic3ksIGludCBzdGFydFBvcywg
aW50IGVuZFBvcyk7CisKKyAgICAvLyBTVkdzIGN1c3RvbSBwYWludCB0ZXh0IG1ldGhvZAorICAg
IHZvaWQgcGFpbnRDaGFyYWN0ZXJzKFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgaW50IHR4LCBp
bnQgdHksIGNvbnN0IFNWR0NoYXImLCBjb25zdCBVQ2hhciogY2hhcnMsIGludCBsZW5ndGgsIFNW
R1RleHRQYWludEluZm8mKTsKKworICAgIC8vIFNWR3MgY3VzdG9tIHBhaW50IHNlbGVjdGlvbiBt
ZXRob2QKKyAgICB2b2lkIHBhaW50U2VsZWN0aW9uKGludCBib3hTdGFydE9mZnNldCwgY29uc3Qg
U1ZHQ2hhciYsIGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgR3JhcGhpY3NDb250ZXh0KiwgUmVu
ZGVyU3R5bGUqLCBjb25zdCBGb250Jik7CisKKyAgICAvLyBTVkdzIGN1c3RvbSBwYWludCBkZWNv
cmF0aW9uIG1ldGhvZAorICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uKEVUZXh0RGVjb3JhdGlvbiwg
R3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHksIGludCB3aWR0aCwgY29uc3QgU1ZHQ2hh
ciYsIGNvbnN0IFNWR1RleHREZWNvcmF0aW9uSW5mbyYpOwogIAotICAgICAgICBTVkdSb290SW5s
aW5lQm94KiBzdmdSb290SW5saW5lQm94KCkgY29uc3Q7CisgICAgU1ZHUm9vdElubGluZUJveCog
c3ZnUm9vdElubGluZUJveCgpIGNvbnN0OwogCi0gICAgICAgIC8vIEhlbHBlciBmdW5jdGlvbnMg
c2hhcmVkIHdpdGggU1ZHUm9vdElubGluZUJveCAgICAgCi0gICAgICAgIGZsb2F0IGNhbGN1bGF0
ZUdseXBoV2lkdGgoUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQgb2Zmc2V0LCBpbnQgZXh0cmFDaGFy
c0F2YWlsYWJsZSwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3Q7
Ci0gICAgICAgIGZsb2F0IGNhbGN1bGF0ZUdseXBoSGVpZ2h0KFJlbmRlclN0eWxlKiwgaW50IG9m
ZnNldCwgaW50IGV4dHJhQ2hhcnNBdmFpbGFibGUpIGNvbnN0OwotCi0gICAgICAgIEZsb2F0UmVj
dCBjYWxjdWxhdGVHbHlwaEJvdW5kYXJpZXMoUmVuZGVyU3R5bGUqLCBpbnQgb2Zmc2V0LCBjb25z
dCBTVkdDaGFyJikgY29uc3Q7Ci0gICAgICAgIFNWR0NoYXIqIGNsb3Nlc3RDaGFyYWN0ZXJUb1Bv
c2l0aW9uKGludCB4LCBpbnQgeSwgaW50JiBvZmZzZXQpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgZnJpZW5kIGNsYXNzIFJlbmRlclNWR0lubGluZVRleHQ7Ci0gICAgICAgIGJvb2wg
c3ZnQ2hhcmFjdGVySGl0c1Bvc2l0aW9uKGludCB4LCBpbnQgeSwgaW50JiBvZmZzZXQpIGNvbnN0
OwotICAgICAgICBib29sIGNodW5rU2VsZWN0aW9uU3RhcnRFbmQoY29uc3QgVUNoYXIqIGNodW5r
LCBpbnQgY2h1bmtMZW5ndGgsIGludCYgc2VsZWN0aW9uU3RhcnQsIGludCYgc2VsZWN0aW9uRW5k
KTsKLSAgICAgICAgCi0gICAgICAgIGludCBtX2hlaWdodDsKLSAgICB9OworICAgIC8vIEhlbHBl
ciBmdW5jdGlvbnMgc2hhcmVkIHdpdGggU1ZHUm9vdElubGluZUJveCAgICAgCisgICAgZmxvYXQg
Y2FsY3VsYXRlR2x5cGhXaWR0aChSZW5kZXJTdHlsZSogc3R5bGUsIGludCBvZmZzZXQsIGludCBl
eHRyYUNoYXJzQXZhaWxhYmxlLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1l
KSBjb25zdDsKKyAgICBmbG9hdCBjYWxjdWxhdGVHbHlwaEhlaWdodChSZW5kZXJTdHlsZSosIGlu
dCBvZmZzZXQsIGludCBleHRyYUNoYXJzQXZhaWxhYmxlKSBjb25zdDsKKworICAgIEZsb2F0UmVj
dCBjYWxjdWxhdGVHbHlwaEJvdW5kYXJpZXMoUmVuZGVyU3R5bGUqLCBpbnQgb2Zmc2V0LCBjb25z
dCBTVkdDaGFyJikgY29uc3Q7CisgICAgU1ZHQ2hhciogY2xvc2VzdENoYXJhY3RlclRvUG9zaXRp
b24oaW50IHgsIGludCB5LCBpbnQmIG9mZnNldCkgY29uc3Q7CisKKyAgICB2b2lkIGJ1aWxkTGF5
b3V0SW5mb3JtYXRpb24oU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbyYsIFNWR0xhc3RHbHlwaEluZm8m
KTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyU1ZHSW5saW5lVGV4dDsKKyAg
ICBib29sIHN2Z0NoYXJhY3RlckhpdHNQb3NpdGlvbihpbnQgeCwgaW50IHksIGludCYgb2Zmc2V0
KSBjb25zdDsKKyAgICBib29sIGNodW5rU2VsZWN0aW9uU3RhcnRFbmQoY29uc3QgVUNoYXIqIGNo
dW5rLCBpbnQgY2h1bmtMZW5ndGgsIGludCYgc2VsZWN0aW9uU3RhcnQsIGludCYgc2VsZWN0aW9u
RW5kKTsKKyAgICAKKyAgICBpbnQgbV9oZWlnaHQ7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCShy
ZXZpc2lvbiA1OTE0NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSAiU1ZHUm9vdElu
bGluZUJveC5oIgogI2luY2x1ZGUgIlNWR1N0b3BFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHU3R5
bGVkRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR1RleHRMYXlvdXRVdGlsaXRpZXMuaCIKIAogI2lu
Y2x1ZGUgPG1hdGguaD4KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUm9vdElubGluZUJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5j
cHAJKHJldmlzaW9uIDU5MTQ3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUm9vdElubGluZUJv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw0IEBACiAvKgotICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgotICoKICAqIENvcHlyaWdodCAoQykgMjAwNiBP
bGl2ZXIgSHVudCA8b2poMTZAc3R1ZGVudC5jYW50ZXJidXJ5LmFjLm56PgogICogICAgICAgICAg
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyIEluYy4KICAqICAgICAgICAgICAoQykgMjAwNyBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KQEAgLTI4LDI1ICsyNiwxNSBAQAog
I2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHUm9vdElubGluZUJveC5oIgogCi0jaW5jbHVk
ZSAiRWRpdG9yLmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9j
ay5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAi
U1ZHSW5saW5lRmxvd0JveC5oIgogI2luY2x1ZGUgIlNWR0lubGluZVRleHRCb3guaCIKLSNpbmNs
dWRlICJTVkdGb250RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlRGVmcy5oIgog
I2luY2x1ZGUgIlNWR1JlbmRlclN1cHBvcnQuaCIKKyNpbmNsdWRlICJTVkdUZXh0TGF5b3V0VXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSAiU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oIgotI2luY2x1
ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIlRleHQuaCIKLSNpbmNsdWRlICJVbmlj
b2RlUmFuZ2UuaCIKLQotI2luY2x1ZGUgPGZsb2F0Lmg+CiAKIC8vIFRleHQgY2h1bmsgY3JlYXRp
b24gaXMgY29tcGxleCBhbmQgdGhlIHdob2xlIHByb2Nlc3MKIC8vIGNhbiBlYXNpbHkgYmUgdHJh
Y2VkIGJ5IHNldHRpbmcgdGhpcyB2YXJpYWJsZSA+IDAuCkBAIC01NCwyMTcgKzQyLDYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNWZXJ0aWNhbFdyaXRp
bmdNb2RlKGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdHlsZSkKLXsKLSAgICByZXR1cm4gc3R5bGUt
PndyaXRpbmdNb2RlKCkgPT0gV01fVEJSTCB8fCBzdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBXTV9U
QjsgCi19Ci0KLXN0YXRpYyBpbmxpbmUgRUFsaWdubWVudEJhc2VsaW5lIGRvbWluYW50QmFzZWxp
bmVUb1NoaWZ0KGJvb2wgaXNWZXJ0aWNhbFRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogdGV4dCwg
Y29uc3QgRm9udCYgZm9udCkKLXsKLSAgICBBU1NFUlQodGV4dCk7Ci0KLSAgICBjb25zdCBTVkdS
ZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0LT5zdHlsZSgpID8gdGV4dC0+c3R5bGUoKS0+c3ZnU3R5
bGUoKSA6IDA7Ci0gICAgQVNTRVJUKHN0eWxlKTsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSA9IHRleHQtPnBhcmVudCgpICYmIHRleHQtPnBhcmVudCgpLT5zdHlsZSgp
ID8gdGV4dC0+cGFyZW50KCktPnN0eWxlKCktPnN2Z1N0eWxlKCkgOiAwOwotCi0gICAgRURvbWlu
YW50QmFzZWxpbmUgYmFzZWxpbmUgPSBzdHlsZS0+ZG9taW5hbnRCYXNlbGluZSgpOwotICAgIGlm
IChiYXNlbGluZSA9PSBEQl9BVVRPKSB7Ci0gICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKLSAg
ICAgICAgICAgIGJhc2VsaW5lID0gREJfQ0VOVFJBTDsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgYmFzZWxpbmUgPSBEQl9BTFBIQUJFVElDOwotICAgIH0KLQotICAgIHN3aXRjaCAoYmFzZWxp
bmUpIHsKLSAgICBjYXNlIERCX1VTRV9TQ1JJUFQ6Ci0gICAgICAgIC8vIFRPRE86IFRoZSBkb21p
bmFudC1iYXNlbGluZSBhbmQgdGhlIGJhc2VsaW5lLXRhYmxlIGNvbXBvbmVudHMgYXJlIHNldCBi
eQotICAgICAgICAvLyAgICAgICBkZXRlcm1pbmluZyB0aGUgcHJlZG9taW5hbnQgc2NyaXB0IG9m
IHRoZSBjaGFyYWN0ZXIgZGF0YSBjb250ZW50LgotICAgICAgICByZXR1cm4gQUJfQUxQSEFCRVRJ
QzsKLSAgICBjYXNlIERCX05PX0NIQU5HRToKLSAgICB7Ci0gICAgICAgIGlmIChwYXJlbnRTdHls
ZSkKLSAgICAgICAgICAgIHJldHVybiBkb21pbmFudEJhc2VsaW5lVG9TaGlmdChpc1ZlcnRpY2Fs
VGV4dCwgdGV4dC0+cGFyZW50KCksIGZvbnQpOwotCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICByZXR1cm4gQUJfQVVUTzsKLSAgICB9Ci0gICAgY2FzZSBEQl9SRVNFVF9T
SVpFOgotICAgIHsKLSAgICAgICAgaWYgKHBhcmVudFN0eWxlKQotICAgICAgICAgICAgcmV0dXJu
IGRvbWluYW50QmFzZWxpbmVUb1NoaWZ0KGlzVmVydGljYWxUZXh0LCB0ZXh0LT5wYXJlbnQoKSwg
Zm9udCk7Ci0KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBB
Ql9BVVRPOyAgICAKLSAgICB9Ci0gICAgY2FzZSBEQl9JREVPR1JBUEhJQzoKLSAgICAgICAgcmV0
dXJuIEFCX0lERU9HUkFQSElDOwotICAgIGNhc2UgREJfQUxQSEFCRVRJQzoKLSAgICAgICAgcmV0
dXJuIEFCX0FMUEhBQkVUSUM7Ci0gICAgY2FzZSBEQl9IQU5HSU5HOgotICAgICAgICByZXR1cm4g
QUJfSEFOR0lORzsKLSAgICBjYXNlIERCX01BVEhFTUFUSUNBTDoKLSAgICAgICAgcmV0dXJuIEFC
X01BVEhFTUFUSUNBTDsKLSAgICBjYXNlIERCX0NFTlRSQUw6Ci0gICAgICAgIHJldHVybiBBQl9D
RU5UUkFMOwotICAgIGNhc2UgREJfTUlERExFOgotICAgICAgICByZXR1cm4gQUJfTUlERExFOwot
ICAgIGNhc2UgREJfVEVYVF9BRlRFUl9FREdFOgotICAgICAgICByZXR1cm4gQUJfVEVYVF9BRlRF
Ul9FREdFOwotICAgIGNhc2UgREJfVEVYVF9CRUZPUkVfRURHRToKLSAgICAgICAgcmV0dXJuIEFC
X1RFWFRfQkVGT1JFX0VER0U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiBBQl9BVVRPOwotICAgIH0KLX0KLQotc3RhdGljIGlubGlu
ZSBmbG9hdCBhbGlnbm1lbnRCYXNlbGluZVRvU2hpZnQoYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29u
c3QgUmVuZGVyT2JqZWN0KiB0ZXh0LCBjb25zdCBGb250JiBmb250KQotewotICAgIEFTU0VSVCh0
ZXh0KTsKLQotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdHlsZSA9IHRleHQtPnN0eWxlKCkg
PyB0ZXh0LT5zdHlsZSgpLT5zdmdTdHlsZSgpIDogMDsKLSAgICBBU1NFUlQoc3R5bGUpOwotCi0g
ICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gdGV4dC0+cGFyZW50KCkgJiYg
dGV4dC0+cGFyZW50KCktPnN0eWxlKCkgPyB0ZXh0LT5wYXJlbnQoKS0+c3R5bGUoKS0+c3ZnU3R5
bGUoKSA6IDA7Ci0KLSAgICBFQWxpZ25tZW50QmFzZWxpbmUgYmFzZWxpbmUgPSBzdHlsZS0+YWxp
Z25tZW50QmFzZWxpbmUoKTsKLSAgICBpZiAoYmFzZWxpbmUgPT0gQUJfQVVUTykgewotICAgICAg
ICBpZiAocGFyZW50U3R5bGUgJiYgc3R5bGUtPmRvbWluYW50QmFzZWxpbmUoKSA9PSBEQl9BVVRP
KQotICAgICAgICAgICAgYmFzZWxpbmUgPSBkb21pbmFudEJhc2VsaW5lVG9TaGlmdChpc1ZlcnRp
Y2FsVGV4dCwgdGV4dC0+cGFyZW50KCksIGZvbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBiYXNlbGluZSA9IGRvbWluYW50QmFzZWxpbmVUb1NoaWZ0KGlzVmVydGljYWxUZXh0LCB0ZXh0
LCBmb250KTsKLQotICAgICAgICBBU1NFUlQoYmFzZWxpbmUgIT0gQUJfQVVUTyk7ICAgIAotICAg
IH0KLQotICAgIC8vIE5vdGU6IGh0dHA6Ly93aWtpLmFwYWNoZS5vcmcveG1sZ3JhcGhpY3MtZm9w
L0xpbmVMYXlvdXQvQWxpZ25tZW50SGFuZGxpbmcKLSAgICBzd2l0Y2ggKGJhc2VsaW5lKSB7Ci0g
ICAgY2FzZSBBQl9CQVNFTElORToKLSAgICB7Ci0gICAgICAgIGlmIChwYXJlbnRTdHlsZSkKLSAg
ICAgICAgICAgIHJldHVybiBkb21pbmFudEJhc2VsaW5lVG9TaGlmdChpc1ZlcnRpY2FsVGV4dCwg
dGV4dC0+cGFyZW50KCksIGZvbnQpOwotCi0gICAgICAgIHJldHVybiAwLjBmOwotICAgIH0KLSAg
ICBjYXNlIEFCX0JFRk9SRV9FREdFOgotICAgIGNhc2UgQUJfVEVYVF9CRUZPUkVfRURHRToKLSAg
ICAgICAgcmV0dXJuIGZvbnQuYXNjZW50KCk7Ci0gICAgY2FzZSBBQl9NSURETEU6Ci0gICAgICAg
IHJldHVybiBmb250LnhIZWlnaHQoKSAvIDIuMGY7Ci0gICAgY2FzZSBBQl9DRU5UUkFMOgotICAg
ICAgICAvLyBOb3QgbmVlZGVkLCB3ZSdyZSB0YWtpbmcgdGhpcyBpbnRvIGFjY291bnQgYWxyZWFk
eSBmb3IgdmVydGljYWwgdGV4dCEKLSAgICAgICAgLy8gcmV0dXJuIChmb250LmFzY2VudCgpIC0g
Zm9udC5kZXNjZW50KCkpIC8gMi4wZjsKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0gICAgY2FzZSBB
Ql9BRlRFUl9FREdFOgotICAgIGNhc2UgQUJfVEVYVF9BRlRFUl9FREdFOgotICAgIGNhc2UgQUJf
SURFT0dSQVBISUM6Ci0gICAgICAgIHJldHVybiBmb250LmRlc2NlbnQoKTsKLSAgICBjYXNlIEFC
X0FMUEhBQkVUSUM6Ci0gICAgICAgIHJldHVybiAwLjBmOwotICAgIGNhc2UgQUJfSEFOR0lORzoK
LSAgICAgICAgcmV0dXJuIGZvbnQuYXNjZW50KCkgKiA4LjBmIC8gMTAuMGY7Ci0gICAgY2FzZSBB
Ql9NQVRIRU1BVElDQUw6Ci0gICAgICAgIHJldHVybiBmb250LmFzY2VudCgpIC8gMi4wZjsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
IDAuMGY7Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGdseXBoT3JpZW50YXRpb25U
b0FuZ2xlKGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSwgYm9vbCBpc1ZlcnRpY2FsVGV4
dCwgY29uc3QgVUNoYXImIGNoYXJhY3RlcikKLXsKLSAgICBzd2l0Y2ggKGlzVmVydGljYWxUZXh0
ID8gc3ZnU3R5bGUtPmdseXBoT3JpZW50YXRpb25WZXJ0aWNhbCgpIDogc3ZnU3R5bGUtPmdseXBo
T3JpZW50YXRpb25Ib3Jpem9udGFsKCkpIHsKLSAgICBjYXNlIEdPX0FVVE86Ci0gICAgewotICAg
ICAgICAvLyBTcGVjOiBGdWxsd2lkdGggaWRlb2dyYXBoaWMgYW5kIGZ1bGx3aWR0aCBMYXRpbiB0
ZXh0IHdpbGwgYmUgc2V0IHdpdGggYSBnbHlwaC1vcmllbnRhdGlvbiBvZiAwLWRlZ3JlZXMuCi0g
ICAgICAgIC8vICAgICAgIFRleHQgd2hpY2ggaXMgbm90IGZ1bGx3aWR0aCB3aWxsIGJlIHNldCB3
aXRoIGEgZ2x5cGgtb3JpZW50YXRpb24gb2YgOTAtZGVncmVlcy4KLSAgICAgICAgdW5zaWduZWQg
aW50IHVuaWNvZGVSYW5nZSA9IGZpbmRDaGFyVW5pY29kZVJhbmdlKGNoYXJhY3Rlcik7Ci0gICAg
ICAgIGlmICh1bmljb2RlUmFuZ2UgPT0gY1JhbmdlU2V0TGF0aW4gfHwgdW5pY29kZVJhbmdlID09
IGNSYW5nZUFyYWJpYykKLSAgICAgICAgICAgIHJldHVybiA5MC4wZjsKLQotICAgICAgICByZXR1
cm4gMC4wZjsKLSAgICB9Ci0gICAgY2FzZSBHT185MERFRzoKLSAgICAgICAgcmV0dXJuIDkwLjBm
OwotICAgIGNhc2UgR09fMTgwREVHOgotICAgICAgICByZXR1cm4gMTgwLjBmOwotICAgIGNhc2Ug
R09fMjcwREVHOgotICAgICAgICByZXR1cm4gMjcwLjBmOwotICAgIGNhc2UgR09fMERFRzoKLSAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMC4wZjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgYm9vbCBnbHlwaE9yaWVudGF0aW9uSXNNdWx0aXBseU9mMTgwRGVncmVlcyhmbG9hdCBvcmll
bnRhdGlvbkFuZ2xlKQotewotICAgIHJldHVybiBmYWJzZihmbW9kZihvcmllbnRhdGlvbkFuZ2xl
LCAxODAuMGYpKSA9PSAwLjBmOwotfQotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGNhbGN1bGF0ZUds
eXBoQWR2YW5jZUFuZFNoaWZ0UmVzcGVjdGluZ09yaWVudGF0aW9uKGJvb2wgaXNWZXJ0aWNhbFRl
eHQsIGZsb2F0IG9yaWVudGF0aW9uQW5nbGUsIGZsb2F0IGdseXBoV2lkdGgsIGZsb2F0IGdseXBo
SGVpZ2h0LCBjb25zdCBGb250JiBmb250LCBTVkdDaGFyJiBzdmdDaGFyLCBmbG9hdCYgeE9yaWVu
dGF0aW9uU2hpZnQsIGZsb2F0JiB5T3JpZW50YXRpb25TaGlmdCkKLXsKLSAgICBib29sIG9yaWVu
dGF0aW9uSXNNdWx0aXBseU9mMTgwRGVncmVlcyA9IGdseXBoT3JpZW50YXRpb25Jc011bHRpcGx5
T2YxODBEZWdyZWVzKG9yaWVudGF0aW9uQW5nbGUpOwotCi0gICAgLy8gVGhlIGZ1bmN0aW9uIGlz
IGJhc2VkIG9uIHNwZWMgcmVxdWlyZW1lbnRzOgotICAgIC8vCi0gICAgLy8gU3BlYzogSWYgdGhl
ICdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJyByZXN1bHRzIGluIGFuIG9yaWVudGF0aW9u
IGFuZ2xlIHRoYXQgaXMgbm90IGEgbXVsdGlwbGUgb2YKLSAgICAvLyBvZiAxODAgZGVncmVlcywg
dGhlbiB0aGUgY3VycmVudCB0ZXh0IHBvc2l0aW9uIGlzIGluY3JlbWVudGVkIGFjY29yZGluZyB0
byB0aGUgdmVydGljYWwgbWV0cmljcyBvZiB0aGUgZ2x5cGguCi0gICAgLy8KLSAgICAvLyBTcGVj
OiBJZiBpZiB0aGUgJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJyByZXN1bHRzIGluIGFuIG9y
aWVudGF0aW9uIGFuZ2xlIHRoYXQgaXMgbm90IGEgbXVsdGlwbGUgb2YKLSAgICAvLyAxODAgZGVn
cmVlcyx0aGVuIHRoZSBjdXJyZW50IHRleHQgcG9zaXRpb24gaXMgaW5jcmVtZW50ZWQgYWNjb3Jk
aW5nIHRvIHRoZSBob3Jpem9udGFsIG1ldHJpY3Mgb2YgdGhlIGdseXBoLgotCi0gICAgLy8gdmVy
dGljYWwgb3JpZW50YXRpb24gaGFuZGxpbmcKLSAgICBpZiAoaXNWZXJ0aWNhbFRleHQpIHsKLSAg
ICAgICAgaWYgKG9yaWVudGF0aW9uQW5nbGUgPT0gMC4wZikgewotICAgICAgICAgICAgeE9yaWVu
dGF0aW9uU2hpZnQgPSAtZ2x5cGhXaWR0aCAvIDIuMGY7Ci0gICAgICAgICAgICB5T3JpZW50YXRp
b25TaGlmdCA9IGZvbnQuYXNjZW50KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb25B
bmdsZSA9PSA5MC4wZikgewotICAgICAgICAgICAgeE9yaWVudGF0aW9uU2hpZnQgPSAtZ2x5cGhI
ZWlnaHQ7Ci0gICAgICAgICAgICB5T3JpZW50YXRpb25TaGlmdCA9IGZvbnQuZGVzY2VudCgpOwot
ICAgICAgICAgICAgc3ZnQ2hhci5vcmllbnRhdGlvblNoaWZ0WSA9IC1mb250LmFzY2VudCgpOwot
ICAgICAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uQW5nbGUgPT0gMjcwLjBmKSB7Ci0gICAgICAg
ICAgICB4T3JpZW50YXRpb25TaGlmdCA9IGdseXBoSGVpZ2h0OwotICAgICAgICAgICAgeU9yaWVu
dGF0aW9uU2hpZnQgPSBmb250LmRlc2NlbnQoKTsKLSAgICAgICAgICAgIHN2Z0NoYXIub3JpZW50
YXRpb25TaGlmdFggPSAtZ2x5cGhXaWR0aDsKLSAgICAgICAgICAgIHN2Z0NoYXIub3JpZW50YXRp
b25TaGlmdFkgPSAtZm9udC5hc2NlbnQoKTsKLSAgICAgICAgfSBlbHNlIGlmIChvcmllbnRhdGlv
bkFuZ2xlID09IDE4MC4wZikgewotICAgICAgICAgICAgeU9yaWVudGF0aW9uU2hpZnQgPSBmb250
LmFzY2VudCgpOwotICAgICAgICAgICAgc3ZnQ2hhci5vcmllbnRhdGlvblNoaWZ0WCA9IC1nbHlw
aFdpZHRoIC8gMi4wZjsKLSAgICAgICAgICAgIHN2Z0NoYXIub3JpZW50YXRpb25TaGlmdFkgPSBm
b250LmFzY2VudCgpIC0gZm9udC5kZXNjZW50KCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyB2
ZXJ0aWNhbCBhZHZhbmNlIGNhbGN1bGF0aW9uCi0gICAgICAgIGlmIChvcmllbnRhdGlvbkFuZ2xl
ICE9IDAuMGYgJiYgIW9yaWVudGF0aW9uSXNNdWx0aXBseU9mMTgwRGVncmVlcykKLSAgICAgICAg
ICAgIHJldHVybiBnbHlwaFdpZHRoOwotCi0gICAgICAgIHJldHVybiBnbHlwaEhlaWdodDsgCi0g
ICAgfQotCi0gICAgLy8gaG9yaXpvbnRhbCBvcmllbnRhdGlvbiBoYW5kbGluZwotICAgIGlmIChv
cmllbnRhdGlvbkFuZ2xlID09IDkwLjBmKSB7Ci0gICAgICAgIHhPcmllbnRhdGlvblNoaWZ0ID0g
Z2x5cGhXaWR0aCAvIDIuMGY7Ci0gICAgICAgIHlPcmllbnRhdGlvblNoaWZ0ID0gLWZvbnQuZGVz
Y2VudCgpOwotICAgICAgICBzdmdDaGFyLm9yaWVudGF0aW9uU2hpZnRYID0gLWdseXBoV2lkdGgg
LyAyLjBmIC0gZm9udC5kZXNjZW50KCk7IAotICAgICAgICBzdmdDaGFyLm9yaWVudGF0aW9uU2hp
ZnRZID0gZm9udC5kZXNjZW50KCk7Ci0gICAgfSBlbHNlIGlmIChvcmllbnRhdGlvbkFuZ2xlID09
IDI3MC4wZikgewotICAgICAgICB4T3JpZW50YXRpb25TaGlmdCA9IC1nbHlwaFdpZHRoIC8gMi4w
ZjsKLSAgICAgICAgeU9yaWVudGF0aW9uU2hpZnQgPSAtZm9udC5kZXNjZW50KCk7Ci0gICAgICAg
IHN2Z0NoYXIub3JpZW50YXRpb25TaGlmdFggPSAtZ2x5cGhXaWR0aCAvIDIuMGYgKyBmb250LmRl
c2NlbnQoKTsKLSAgICAgICAgc3ZnQ2hhci5vcmllbnRhdGlvblNoaWZ0WSA9IGdseXBoSGVpZ2h0
OwotICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb25BbmdsZSA9PSAxODAuMGYpIHsKLSAgICAgICAg
eE9yaWVudGF0aW9uU2hpZnQgPSBnbHlwaFdpZHRoIC8gMi4wZjsKLSAgICAgICAgc3ZnQ2hhci5v
cmllbnRhdGlvblNoaWZ0WCA9IC1nbHlwaFdpZHRoIC8gMi4wZjsKLSAgICAgICAgc3ZnQ2hhci5v
cmllbnRhdGlvblNoaWZ0WSA9IGZvbnQuYXNjZW50KCkgLSBmb250LmRlc2NlbnQoKTsKLSAgICB9
Ci0KLSAgICAvLyBob3Jpem9udGFsIGFkdmFuY2UgY2FsY3VsYXRpb24KLSAgICBpZiAob3JpZW50
YXRpb25BbmdsZSAhPSAwLjBmICYmICFvcmllbnRhdGlvbklzTXVsdGlwbHlPZjE4MERlZ3JlZXMp
Ci0gICAgICAgIHJldHVybiBnbHlwaEhlaWdodDsKLQotICAgIHJldHVybiBnbHlwaFdpZHRoOwot
fQotCiBzdGF0aWMgaW5saW5lIHZvaWQgc3RhcnRUZXh0Q2h1bmsoU1ZHVGV4dENodW5rTGF5b3V0
SW5mbyYgaW5mbykKIHsKICAgICBpbmZvLmNodW5rLmJveGVzLmNsZWFyKCk7CkBAIC0yOTQsODkg
KzcxLDYgQEAgUmVuZGVyU1ZHUm9vdCogZmluZFNWR1Jvb3RPYmplY3QoUmVuZGVyTwogICAgIHJl
dHVybiB0b1JlbmRlclNWR1Jvb3Qoc3RhcnQpOwogfQogCi1zdGF0aWMgaW5saW5lIEZsb2F0UG9p
bnQgdG9wTGVmdFBvc2l0aW9uT2ZDaGFyYWN0ZXJSYW5nZShWZWN0b3I8U1ZHQ2hhcj4mIGNoYXJz
KQotewotICAgIHJldHVybiB0b3BMZWZ0UG9zaXRpb25PZkNoYXJhY3RlclJhbmdlKGNoYXJzLmJl
Z2luKCksIGNoYXJzLmVuZCgpKTsKLX0KLQotRmxvYXRQb2ludCB0b3BMZWZ0UG9zaXRpb25PZkNo
YXJhY3RlclJhbmdlKFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3IgaXQsIFZlY3RvcjxTVkdDaGFy
Pjo6aXRlcmF0b3IgZW5kKQotewotICAgIGZsb2F0IGxvd1ggPSBGTFRfTUFYLCBsb3dZID0gRkxU
X01BWDsKLSAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+aXNI
aWRkZW4oKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZsb2F0IHggPSAoKml0
KS54OwotICAgICAgICBmbG9hdCB5ID0gKCppdCkueTsKLQotICAgICAgICBpZiAoeCA8IGxvd1gp
Ci0gICAgICAgICAgICBsb3dYID0geDsKLQotICAgICAgICBpZiAoeSA8IGxvd1kpCi0gICAgICAg
ICAgICBsb3dZID0geTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRmxvYXRQb2ludChsb3dYLCBsb3dZ
KTsKLX0KLQotLy8gSGVscGVyIGZ1bmN0aW9uCi1zdGF0aWMgZmxvYXQgY2FsY3VsYXRlQ1NTS2Vy
bmluZyhSZW5kZXJPYmplY3QqIGl0ZW0pCi17Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IGl0ZW0t
PnN0eWxlKCktPmZvbnQoKTsKLSAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBp
dGVtLT5zdHlsZSgpLT5zdmdTdHlsZSgpOwotCi0gICAgZmxvYXQga2VybmluZyA9IDAuMGY7Ci0g
ICAgaWYgKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmUgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHN2Z1N0eWxlLT5rZXJuaW5nKCkpKSB7Ci0gICAgICAgIGtlcm5pbmcgPSBw
cmltaXRpdmUtPmdldEZsb2F0VmFsdWUoKTsKLQotICAgICAgICBpZiAocHJpbWl0aXZlLT5wcmlt
aXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFICYmIGZvbnQu
cGl4ZWxTaXplKCkgPiAwKQotICAgICAgICAgICAga2VybmluZyA9IGtlcm5pbmcgLyAxMDAuMGYg
KiBmb250LnBpeGVsU2l6ZSgpOwotICAgIH0KLQotICAgIHJldHVybiBrZXJuaW5nOwotfQotCi1z
dGF0aWMgYm9vbCBhcHBseVNWR0tlcm5pbmcoU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbyYgaW5mbywg
UmVuZGVyT2JqZWN0KiBpdGVtLCBMYXN0R2x5cGhJbmZvJiBsYXN0R2x5cGgsIGNvbnN0IFN0cmlu
ZyYgdW5pY29kZVN0cmluZywgY29uc3QgU3RyaW5nJiBnbHlwaE5hbWUsIGJvb2wgaXNWZXJ0aWNh
bFRleHQpCi17Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBmbG9hdCBob3Jpem9udGFsS2Vy
bmluZyA9IDAuMGY7Ci0gICAgZmxvYXQgdmVydGljYWxLZXJuaW5nID0gMC4wZjsKLSAgICBjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUgPSBpdGVtLT5zdHlsZSgpOwotICAgIFNWR0ZvbnRFbGVtZW50
KiBzdmdGb250ID0gMDsKLSAgICBpZiAoc3R5bGUtPmZvbnQoKS5pc1NWR0ZvbnQoKSkKLSAgICAg
ICAgc3ZnRm9udCA9IHN0eWxlLT5mb250KCkuc3ZnRm9udCgpOwotCi0gICAgaWYgKHN0eWxlLT5m
b250KCkuaXNTVkdGb250KCkpIHsKLSAgICAgICAgaWYgKGxhc3RHbHlwaC5pc1ZhbGlkKSB7Ci0g
ICAgICAgICAgICBob3Jpem9udGFsS2VybmluZyA9IHN2Z0ZvbnQtPmhvcml6b250YWxLZXJuaW5n
Rm9yUGFpck9mU3RyaW5nc0FuZEdseXBocyhsYXN0R2x5cGgudW5pY29kZSwgbGFzdEdseXBoLmds
eXBoTmFtZSwgdW5pY29kZVN0cmluZywgZ2x5cGhOYW1lKTsKLSAgICAgICAgICAgIGlmIChpc1Zl
cnRpY2FsVGV4dCkKLSAgICAgICAgICAgICAgICB2ZXJ0aWNhbEtlcm5pbmcgPSBzdmdGb250LT52
ZXJ0aWNhbEtlcm5pbmdGb3JQYWlyT2ZTdHJpbmdzQW5kR2x5cGhzKGxhc3RHbHlwaC51bmljb2Rl
LCBsYXN0R2x5cGguZ2x5cGhOYW1lLCB1bmljb2RlU3RyaW5nLCBnbHlwaE5hbWUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgbGFzdEdseXBoLnVuaWNvZGUgPSB1bmljb2RlU3RyaW5nOwotICAgICAg
ICBsYXN0R2x5cGguZ2x5cGhOYW1lID0gZ2x5cGhOYW1lOwotICAgICAgICBsYXN0R2x5cGguaXNW
YWxpZCA9IHRydWU7Ci0gICAgICAgIGZsb2F0IHNjYWxlVG9Gb250U3BhY2UgPSBzdHlsZS0+Zm9u
dCgpLnNpemUoKSAvIHN0eWxlLT5mb250KCkucHJpbWFyeUZvbnQoKS0+dW5pdHNQZXJFbSgpOwot
ICAgICAgICBob3Jpem9udGFsS2VybmluZyAqPSBzY2FsZVRvRm9udFNwYWNlOwotICAgICAgICB2
ZXJ0aWNhbEtlcm5pbmcgKj0gc2NhbGVUb0ZvbnRTcGFjZTsKLSAgICB9IGVsc2UKLSAgICAgICAg
bGFzdEdseXBoLmlzVmFsaWQgPSBmYWxzZTsKLQotICAgIGlmIChob3Jpem9udGFsS2VybmluZyAh
PSAwLjBmIHx8IHZlcnRpY2FsS2VybmluZyAhPSAwLjBmKSB7Ci0gICAgICAgIGluZm8uY3VyeCAt
PSBob3Jpem9udGFsS2VybmluZzsKLSAgICAgICAgaW5mby5jdXJ5IC09IHZlcnRpY2FsS2Vybmlu
ZzsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0o
aW5mbyk7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZW0pOwotICAgIFVOVVNFRF9QQVJBTShsYXN0R2x5
cGgpOwotICAgIFVOVVNFRF9QQVJBTSh1bmljb2RlU3RyaW5nKTsKLSAgICBVTlVTRURfUEFSQU0o
Z2x5cGhOYW1lKTsKLSNlbmRpZgotICAgIHJldHVybiBmYWxzZTsKLX0KLQogLy8gSGVscGVyIGNs
YXNzIGZvciBwYWludCgpCiBzdHJ1Y3QgU1ZHUm9vdElubGluZUJveFBhaW50V2Fsa2VyIHsKICAg
ICBTVkdSb290SW5saW5lQm94UGFpbnRXYWxrZXIoU1ZHUm9vdElubGluZUJveCogcm9vdEJveCwg
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIqIHJvb3RGaWx0ZXIsIFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCkBAIC03NjUsNDggKzQ1OSw2IEBAIGludCBT
VkdSb290SW5saW5lQm94Ojp2ZXJ0aWNhbGx5QWxpZ25Cb3gKICAgICByZXR1cm4gaGVpZ2h0KCk7
CiB9CiAKLWZsb2F0IGN1bW11bGF0ZWRXaWR0aE9mSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UoU1ZH
SW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UmIHJhbmdlKQotewotICAgIEFTU0VSVCghcmFuZ2UuaXNP
cGVuKCkpOwotICAgIEFTU0VSVChyYW5nZS5pc0Nsb3NlZCgpKTsKLSAgICBBU1NFUlQocmFuZ2Uu
Ym94LT5pc0lubGluZVRleHRCb3goKSk7Ci0KLSAgICBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0g
c3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCo+KHJhbmdlLmJveCk7Ci0gICAgUmVuZGVyVGV4dCog
dGV4dCA9IHRleHRCb3gtPnRleHRSZW5kZXJlcigpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IHRleHQtPnN0eWxlKCk7Ci0KLSAgICByZXR1cm4gc3R5bGUtPmZvbnQoKS5mbG9hdFdpZHRoKHN2
Z1RleHRSdW5Gb3JJbmxpbmVUZXh0Qm94KHRleHQtPmNoYXJhY3RlcnMoKSArIHRleHRCb3gtPnN0
YXJ0KCkgKyByYW5nZS5zdGFydE9mZnNldCwgcmFuZ2UuZW5kT2Zmc2V0IC0gcmFuZ2Uuc3RhcnRP
ZmZzZXQsIHN0eWxlLCB0ZXh0Qm94LCAwKSk7Ci19Ci0KLWZsb2F0IGN1bW11bGF0ZWRIZWlnaHRP
ZklubGluZUJveENoYXJhY3RlclJhbmdlKFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlJiByYW5n
ZSkKLXsKLSAgICBBU1NFUlQoIXJhbmdlLmlzT3BlbigpKTsKLSAgICBBU1NFUlQocmFuZ2UuaXND
bG9zZWQoKSk7Ci0gICAgQVNTRVJUKHJhbmdlLmJveC0+aXNJbmxpbmVUZXh0Qm94KCkpOwotCi0g
ICAgSW5saW5lVGV4dEJveCogdGV4dEJveCA9IHN0YXRpY19jYXN0PElubGluZVRleHRCb3gqPihy
YW5nZS5ib3gpOwotICAgIFJlbmRlclRleHQqIHRleHQgPSB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIo
KTsKLSAgICBjb25zdCBGb250JiBmb250ID0gdGV4dC0+c3R5bGUoKS0+Zm9udCgpOwotCi0gICAg
cmV0dXJuIChyYW5nZS5lbmRPZmZzZXQgLSByYW5nZS5zdGFydE9mZnNldCkgKiAoZm9udC5hc2Nl
bnQoKSArIGZvbnQuZGVzY2VudCgpKTsKLX0KLQotVGV4dFJ1biBzdmdUZXh0UnVuRm9ySW5saW5l
VGV4dEJveChjb25zdCBVQ2hhciogYywgaW50IGxlbiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25z
dCBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94LCBmbG9hdCB4UG9zKQotewotICAgIEFTU0VSVCh0ZXh0
Qm94KTsKLSAgICBBU1NFUlQoc3R5bGUpOwotCi0gICAgVGV4dFJ1biBydW4oYywgbGVuLCBmYWxz
ZSwgc3RhdGljX2Nhc3Q8aW50Pih4UG9zKSwgdGV4dEJveC0+dG9BZGQoKSwgdGV4dEJveC0+ZGly
ZWN0aW9uKCkgPT0gUlRMLCB0ZXh0Qm94LT5tX2Rpck92ZXJyaWRlIHx8IHN0eWxlLT52aXN1YWxs
eU9yZGVyZWQoKSk7Ci0KLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIHJ1bi5zZXRSZWZlcmVu
Y2luZ1JlbmRlck9iamVjdCh0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKS0+cGFyZW50KCkpOwotI2Vu
ZGlmCi0KLSAgICAvLyBXZSBoYW5kbGUgbGV0dGVyICYgd29yZCBzcGFjaW5nIG91cnNlbHZlcwot
ICAgIHJ1bi5kaXNhYmxlU3BhY2luZygpOwotICAgIHJldHVybiBydW47Ci19Ci0KIHN0YXRpYyBm
bG9hdCBjdW1tdWxhdGVkV2lkdGhPckhlaWdodE9mVGV4dENodW5rKFNWR1RleHRDaHVuayYgY2h1
bmssIGJvb2wgY2FsY1dpZHRoT25seSkKIHsKICAgICBmbG9hdCBsZW5ndGggPSAwLjBmOwpAQCAt
OTU1LDggKzYwNyw4IEBAIHN0YXRpYyBmbG9hdCBjYWxjdWxhdGVUZXh0TGVuZ3RoQ29ycmVjdGkK
ICAgICBmbG9hdCBjb21wdXRlZFdpZHRoID0gY3VtbXVsYXRlZFdpZHRoT2ZUZXh0Q2h1bmsoY2h1
bmspOwogICAgIGZsb2F0IGNvbXB1dGVkSGVpZ2h0ID0gY3VtbXVsYXRlZEhlaWdodE9mVGV4dENo
dW5rKGNodW5rKTsKIAotICAgIGlmICgoY29tcHV0ZWRXaWR0aCA8PSAwLjBmICYmICFjaHVuay5p
c1ZlcnRpY2FsVGV4dCkgfHwKLSAgICAgICAgKGNvbXB1dGVkSGVpZ2h0IDw9IDAuMGYgJiYgY2h1
bmsuaXNWZXJ0aWNhbFRleHQpKQorICAgIGlmICgoY29tcHV0ZWRXaWR0aCA8PSAwLjBmICYmICFj
aHVuay5pc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgfHwgKGNvbXB1dGVkSGVpZ2h0IDw9IDAuMGYg
JiYgY2h1bmsuaXNWZXJ0aWNhbFRleHQpKQogICAgICAgICByZXR1cm4gMC4wZjsKIAogICAgIGlm
IChjaHVuay5pc1ZlcnRpY2FsVGV4dCkKQEAgLTEwMzIsNyArNjg0LDcgQEAgdm9pZCBTVkdSb290
SW5saW5lQm94Ojpjb21wdXRlUGVyQ2hhcmFjdAogCiAgICAgLy8gRmluYWxseSB0aGUgdG9wIGxl
ZnQgcG9zaXRpb24gb2Ygb3VyIGJveCBpcyBrbm93bi4KICAgICAvLyBQcm9wb2dhdGUgdGhpcyBr
bm93bmxlZGdlIHRvIG91ciBSZW5kZXJTVkdUZXh0IHBhcmVudC4KLSAgICBGbG9hdFBvaW50IHRv
cExlZnQgPSB0b3BMZWZ0UG9zaXRpb25PZkNoYXJhY3RlclJhbmdlKG1fc3ZnQ2hhcnMpOworICAg
IEZsb2F0UG9pbnQgdG9wTGVmdCA9IHRvcExlZnRQb3NpdGlvbk9mQ2hhcmFjdGVyUmFuZ2UobV9z
dmdDaGFycy5iZWdpbigpLCBtX3N2Z0NoYXJzLmVuZCgpKTsKICAgICBibG9jaygpLT5zZXRMb2Nh
dGlvbigoaW50KSBmbG9vcmYodG9wTGVmdC54KCkpLCAoaW50KSBmbG9vcmYodG9wTGVmdC55KCkp
KTsKIAogICAgIC8vIExheW91dCBhbGwgSW5saW5lVGV4dC9GbG93IGJveGVzCkBAIC0xMDUyLDEx
ICs3MDQsMTEgQEAgdm9pZCBTVkdSb290SW5saW5lQm94OjpidWlsZExheW91dEluZm9ybQogICAg
ICAgICBpbmZvLmFkZExheW91dEluZm9ybWF0aW9uKHBvc2l0aW9uaW5nRWxlbWVudCk7CiAgICAg
fQogCi0gICAgTGFzdEdseXBoSW5mbyBsYXN0R2x5cGg7CisgICAgU1ZHTGFzdEdseXBoSW5mbyBs
YXN0R2x5cGg7CiAgICAgCiAgICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBzdGFydC0+Zmlyc3RD
aGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dE9uTGluZSgpKSB7CiAgICAgICAgIGlmIChj
dXJyLT5yZW5kZXJlcigpLT5pc1RleHQoKSkKLSAgICAgICAgICAgIGJ1aWxkTGF5b3V0SW5mb3Jt
YXRpb25Gb3JUZXh0Qm94KGluZm8sIHN0YXRpY19jYXN0PElubGluZVRleHRCb3gqPihjdXJyKSwg
bGFzdEdseXBoKTsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFNWR0lubGluZVRleHRCb3gqPihj
dXJyKS0+YnVpbGRMYXlvdXRJbmZvcm1hdGlvbihpbmZvLCBsYXN0R2x5cGgpOwogICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIEFTU0VSVChjdXJyLT5pc0lubGluZUZsb3dCb3goKSk7CiAgICAg
ICAgICAgICBJbmxpbmVGbG93Qm94KiBmbG93Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0Jv
eCo+KGN1cnIpOwpAQCAtMTI0OCwyMzAgKzkwMCw2IEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6
bGF5b3V0SW5saW5lQm94ZXMKICAgICB9CiB9CiAKLXZvaWQgU1ZHUm9vdElubGluZUJveDo6YnVp
bGRMYXlvdXRJbmZvcm1hdGlvbkZvclRleHRCb3goU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mbyYgaW5m
bywgSW5saW5lVGV4dEJveCogdGV4dEJveCwgTGFzdEdseXBoSW5mbyYgbGFzdEdseXBoKQotewot
ICAgIFJlbmRlclRleHQqIHRleHQgPSB0ZXh0Qm94LT50ZXh0UmVuZGVyZXIoKTsKLSAgICBBU1NF
UlQodGV4dCk7Ci0KLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0LT5zdHlsZSh0ZXh0Qm94
LT5pc0ZpcnN0TGluZVN0eWxlKCkpOwotICAgIEFTU0VSVChzdHlsZSk7Ci0KLSAgICBjb25zdCBG
b250JiBmb250ID0gc3R5bGUtPmZvbnQoKTsKLSAgICBTVkdJbmxpbmVUZXh0Qm94KiBzdmdUZXh0
Qm94ID0gc3RhdGljX2Nhc3Q8U1ZHSW5saW5lVGV4dEJveCo+KHRleHRCb3gpOwotCi0gICAgdW5z
aWduZWQgbGVuZ3RoID0gdGV4dEJveC0+bGVuKCk7Ci0KLSAgICBjb25zdCBTVkdSZW5kZXJTdHls
ZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsKLSAgICBib29sIGlzVmVydGljYWxUZXh0
ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHN2Z1N0eWxlKTsKLQotICAgIGludCBjaGFyc0NvbnN1
bWVkID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IGNoYXJz
Q29uc3VtZWQpIHsKLSAgICAgICAgU1ZHQ2hhciBzdmdDaGFyOwotCi0gICAgICAgIGlmIChpbmZv
LmluUGF0aExheW91dCgpKQotICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YSA9IFNWR0NoYXJP
blBhdGg6OmNyZWF0ZSgpOwotCi0gICAgICAgIGZsb2F0IGdseXBoV2lkdGggPSAwLjBmOwotICAg
ICAgICBmbG9hdCBnbHlwaEhlaWdodCA9IDAuMGY7Ci0KLSAgICAgICAgaW50IGV4dHJhQ2hhcnNB
dmFpbGFibGUgPSBsZW5ndGggLSBpIC0gMTsKLQotICAgICAgICBTdHJpbmcgdW5pY29kZVN0cjsK
LSAgICAgICAgU3RyaW5nIGdseXBoTmFtZTsKLSAgICAgICAgaWYgKHRleHRCb3gtPmRpcmVjdGlv
bigpID09IFJUTCkgewotICAgICAgICAgICAgZ2x5cGhXaWR0aCA9IHN2Z1RleHRCb3gtPmNhbGN1
bGF0ZUdseXBoV2lkdGgoc3R5bGUsIHRleHRCb3gtPmVuZCgpIC0gaSwgZXh0cmFDaGFyc0F2YWls
YWJsZSwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKTsKLSAgICAgICAgICAgIGdseXBoSGVpZ2h0
ID0gc3ZnVGV4dEJveC0+Y2FsY3VsYXRlR2x5cGhIZWlnaHQoc3R5bGUsIHRleHRCb3gtPmVuZCgp
IC0gaSwgZXh0cmFDaGFyc0F2YWlsYWJsZSk7Ci0gICAgICAgICAgICB1bmljb2RlU3RyID0gU3Ry
aW5nKHRleHRCb3gtPnRleHRSZW5kZXJlcigpLT50ZXh0KCktPmNoYXJhY3RlcnMoKSArIHRleHRC
b3gtPmVuZCgpIC0gaSwgY2hhcnNDb25zdW1lZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBnbHlwaFdpZHRoID0gc3ZnVGV4dEJveC0+Y2FsY3VsYXRlR2x5cGhXaWR0aChzdHlsZSwg
dGV4dEJveC0+c3RhcnQoKSArIGksIGV4dHJhQ2hhcnNBdmFpbGFibGUsIGNoYXJzQ29uc3VtZWQs
IGdseXBoTmFtZSk7Ci0gICAgICAgICAgICBnbHlwaEhlaWdodCA9IHN2Z1RleHRCb3gtPmNhbGN1
bGF0ZUdseXBoSGVpZ2h0KHN0eWxlLCB0ZXh0Qm94LT5zdGFydCgpICsgaSwgZXh0cmFDaGFyc0F2
YWlsYWJsZSk7Ci0gICAgICAgICAgICB1bmljb2RlU3RyID0gU3RyaW5nKHRleHRCb3gtPnRleHRS
ZW5kZXJlcigpLT50ZXh0KCktPmNoYXJhY3RlcnMoKSArIHRleHRCb3gtPnN0YXJ0KCkgKyBpLCBj
aGFyc0NvbnN1bWVkKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgYXNzaWduZWRYID0gZmFs
c2U7Ci0gICAgICAgIGJvb2wgYXNzaWduZWRZID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGluZm8u
eFZhbHVlQXZhaWxhYmxlKCkgJiYgKCFpbmZvLmluUGF0aExheW91dCgpIHx8IChpbmZvLmluUGF0
aExheW91dCgpICYmICFpc1ZlcnRpY2FsVGV4dCkpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzVmVy
dGljYWxUZXh0KQotICAgICAgICAgICAgICAgIHN2Z0NoYXIubmV3VGV4dENodW5rID0gdHJ1ZTsK
LQotICAgICAgICAgICAgYXNzaWduZWRYID0gdHJ1ZTsKLSAgICAgICAgICAgIHN2Z0NoYXIuZHJh
d25TZXBlcmF0ZWQgPSB0cnVlOwotICAgICAgICAgICAgaW5mby5jdXJ4ID0gaW5mby54VmFsdWVO
ZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW5mby55VmFsdWVBdmFpbGFibGUoKSAm
JiAoIWluZm8uaW5QYXRoTGF5b3V0KCkgfHwgKGluZm8uaW5QYXRoTGF5b3V0KCkgJiYgaXNWZXJ0
aWNhbFRleHQpKSkgewotICAgICAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQotICAgICAgICAg
ICAgICAgIHN2Z0NoYXIubmV3VGV4dENodW5rID0gdHJ1ZTsKLQotICAgICAgICAgICAgYXNzaWdu
ZWRZID0gdHJ1ZTsKLSAgICAgICAgICAgIHN2Z0NoYXIuZHJhd25TZXBlcmF0ZWQgPSB0cnVlOwot
ICAgICAgICAgICAgaW5mby5jdXJ5ID0gaW5mby55VmFsdWVOZXh0KCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmbG9hdCBkeCA9IDAuMGY7Ci0gICAgICAgIGZsb2F0IGR5ID0gMC4wZjsKLQotICAg
ICAgICAvLyBBcHBseSB4LWF4aXMgc2hpZnQKLSAgICAgICAgaWYgKGluZm8uZHhWYWx1ZUF2YWls
YWJsZSgpKSB7Ci0gICAgICAgICAgICBzdmdDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsKLQot
ICAgICAgICAgICAgZHggPSBpbmZvLmR4VmFsdWVOZXh0KCk7Ci0gICAgICAgICAgICBpbmZvLmR4
ICs9IGR4OwotCi0gICAgICAgICAgICBpZiAoIWluZm8uaW5QYXRoTGF5b3V0KCkpCi0gICAgICAg
ICAgICAgICAgaW5mby5jdXJ4ICs9IGR4OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQXBwbHkg
eS1heGlzIHNoaWZ0Ci0gICAgICAgIGlmIChpbmZvLmR5VmFsdWVBdmFpbGFibGUoKSkgewotICAg
ICAgICAgICAgc3ZnQ2hhci5kcmF3blNlcGVyYXRlZCA9IHRydWU7Ci0KLSAgICAgICAgICAgIGR5
ID0gaW5mby5keVZhbHVlTmV4dCgpOwotICAgICAgICAgICAgaW5mby5keSArPSBkeTsKLQotICAg
ICAgICAgICAgaWYgKCFpbmZvLmluUGF0aExheW91dCgpKQotICAgICAgICAgICAgICAgIGluZm8u
Y3VyeSArPSBkeTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRha2UgbGV0dGVyICYgd29yZCBz
cGFjaW5nIGFuZCBrZXJuaW5nIGludG8gYWNjb3VudAotICAgICAgICBmbG9hdCBzcGFjaW5nID0g
Zm9udC5sZXR0ZXJTcGFjaW5nKCkgKyBjYWxjdWxhdGVDU1NLZXJuaW5nKHRleHRCb3gtPnJlbmRl
cmVyKCktPm5vZGUoKS0+cmVuZGVyZXIoKSk7Ci0KLSAgICAgICAgY29uc3QgVUNoYXIqIGN1cnJl
bnRDaGFyYWN0ZXIgPSB0ZXh0LT5jaGFyYWN0ZXJzKCkgKyAodGV4dEJveC0+ZGlyZWN0aW9uKCkg
PT0gUlRMID8gdGV4dEJveC0+ZW5kKCkgLSBpIDogdGV4dEJveC0+c3RhcnQoKSArIGkpOwotICAg
ICAgICBjb25zdCBVQ2hhciogbGFzdENoYXJhY3RlciA9IDA7Ci0KLSAgICAgICAgaWYgKHRleHRC
b3gtPmRpcmVjdGlvbigpID09IFJUTCkgewotICAgICAgICAgICAgaWYgKGkgPCB0ZXh0Qm94LT5l
bmQoKSkKLSAgICAgICAgICAgICAgICBsYXN0Q2hhcmFjdGVyID0gdGV4dC0+Y2hhcmFjdGVycygp
ICsgdGV4dEJveC0+ZW5kKCkgLSBpICsgIDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBpZiAoaSA+IDApCi0gICAgICAgICAgICAgICAgbGFzdENoYXJhY3RlciA9IHRleHQtPmNoYXJh
Y3RlcnMoKSArIHRleHRCb3gtPnN0YXJ0KCkgKyBpIC0gMTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIEZJWE1FOiBTVkcgS2VybmluZyBkb2Vzbid0IGdldCBhcHBsaWVkIG9uIHRleHRzIG9uIHBh
dGguCi0gICAgICAgIGJvb2wgYXBwbGllZFNWR0tlcm5pbmcgPSBhcHBseVNWR0tlcm5pbmcoaW5m
bywgdGV4dEJveC0+cmVuZGVyZXIoKS0+bm9kZSgpLT5yZW5kZXJlcigpLCBsYXN0R2x5cGgsIHVu
aWNvZGVTdHIsIGdseXBoTmFtZSwgaXNWZXJ0aWNhbFRleHQpOwotICAgICAgICBpZiAoaW5mby5u
ZXh0RHJhd25TZXBlcmF0ZWQgfHwgc3BhY2luZyAhPSAwLjBmIHx8IGFwcGxpZWRTVkdLZXJuaW5n
KSB7Ci0gICAgICAgICAgICBpbmZvLm5leHREcmF3blNlcGVyYXRlZCA9IGZhbHNlOwotICAgICAg
ICAgICAgc3ZnQ2hhci5kcmF3blNlcGVyYXRlZCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoY3VycmVudENoYXJhY3RlciAmJiBGb250Ojp0cmVhdEFzU3BhY2UoKmN1cnJlbnRDaGFy
YWN0ZXIpICYmIGxhc3RDaGFyYWN0ZXIgJiYgIUZvbnQ6OnRyZWF0QXNTcGFjZSgqbGFzdENoYXJh
Y3RlcikpIHsKLSAgICAgICAgICAgIHNwYWNpbmcgKz0gZm9udC53b3JkU3BhY2luZygpOwotCi0g
ICAgICAgICAgICBpZiAoc3BhY2luZyAhPSAwLjBmICYmICFpbmZvLmluUGF0aExheW91dCgpKQot
ICAgICAgICAgICAgICAgIGluZm8ubmV4dERyYXduU2VwZXJhdGVkID0gdHJ1ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGZsb2F0IG9yaWVudGF0aW9uQW5nbGUgPSBnbHlwaE9yaWVudGF0aW9uVG9B
bmdsZShzdmdTdHlsZSwgaXNWZXJ0aWNhbFRleHQsICpjdXJyZW50Q2hhcmFjdGVyKTsKLQotICAg
ICAgICBmbG9hdCB4T3JpZW50YXRpb25TaGlmdCA9IDAuMGY7Ci0gICAgICAgIGZsb2F0IHlPcmll
bnRhdGlvblNoaWZ0ID0gMC4wZjsKLSAgICAgICAgZmxvYXQgZ2x5cGhBZHZhbmNlID0gY2FsY3Vs
YXRlR2x5cGhBZHZhbmNlQW5kU2hpZnRSZXNwZWN0aW5nT3JpZW50YXRpb24oaXNWZXJ0aWNhbFRl
eHQsIG9yaWVudGF0aW9uQW5nbGUsIGdseXBoV2lkdGgsIGdseXBoSGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb250LCBzdmdDaGFyLCB4T3JpZW50YXRpb25TaGlmdCwgeU9yaWVudGF0
aW9uU2hpZnQpOwotCi0gICAgICAgIC8vIEhhbmRsZSB0ZXh0UGF0aCBsYXlvdXQgbW9kZQotICAg
ICAgICBpZiAoaW5mby5pblBhdGhMYXlvdXQoKSkgewotICAgICAgICAgICAgZmxvYXQgZXh0cmFB
ZHZhbmNlID0gaXNWZXJ0aWNhbFRleHQgPyBkeSA6IGR4OwotICAgICAgICAgICAgZmxvYXQgbmV3
T2Zmc2V0ID0gRkxUX01JTjsKLQotICAgICAgICAgICAgaWYgKGFzc2lnbmVkWCAmJiAhaXNWZXJ0
aWNhbFRleHQpCi0gICAgICAgICAgICAgICAgbmV3T2Zmc2V0ID0gaW5mby5jdXJ4OwotICAgICAg
ICAgICAgZWxzZSBpZiAoYXNzaWduZWRZICYmIGlzVmVydGljYWxUZXh0KQotICAgICAgICAgICAg
ICAgIG5ld09mZnNldCA9IGluZm8uY3VyeTsKLQotICAgICAgICAgICAgZmxvYXQgY29ycmVjdGVk
R2x5cGhBZHZhbmNlID0gZ2x5cGhBZHZhbmNlOwotCi0gICAgICAgICAgICAvLyBIYW5kbGUgbGVu
Z3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiBieSBzcGVjaWZ5aW5nIHBlci1jaGFyYWN0ZXIg
c2NhbGUgb3BlcmF0aW9ucwotICAgICAgICAgICAgaWYgKGluZm8ucGF0aFRleHRMZW5ndGggPiAw
LjBmICYmIGluZm8ucGF0aENodW5rTGVuZ3RoID4gMC4wZikgeyAKLSAgICAgICAgICAgICAgICBp
ZiAoaXNWZXJ0aWNhbFRleHQpIHsKLSAgICAgICAgICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0
YS0+eVNjYWxlID0gaW5mby5wYXRoQ2h1bmtMZW5ndGggLyBpbmZvLnBhdGhUZXh0TGVuZ3RoOwot
ICAgICAgICAgICAgICAgICAgICBzcGFjaW5nICo9IHN2Z0NoYXIucGF0aERhdGEtPnlTY2FsZTsK
LSAgICAgICAgICAgICAgICAgICAgY29ycmVjdGVkR2x5cGhBZHZhbmNlICo9IHN2Z0NoYXIucGF0
aERhdGEtPnlTY2FsZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBzdmdDaGFyLnBhdGhEYXRhLT54U2NhbGUgPSBpbmZvLnBhdGhDaHVua0xlbmd0aCAvIGlu
Zm8ucGF0aFRleHRMZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIHNwYWNpbmcgKj0gc3ZnQ2hh
ci5wYXRoRGF0YS0+eFNjYWxlOwotICAgICAgICAgICAgICAgICAgICBjb3JyZWN0ZWRHbHlwaEFk
dmFuY2UgKj0gc3ZnQ2hhci5wYXRoRGF0YS0+eFNjYWxlOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSGFuZGxlIGxldHRlciAmIHdvcmQgc3BhY2lu
ZyBvbiB0ZXh0IHBhdGgKLSAgICAgICAgICAgIGZsb2F0IHBhdGhFeHRyYUFkdmFuY2UgPSBpbmZv
LnBhdGhFeHRyYUFkdmFuY2U7Ci0gICAgICAgICAgICBpbmZvLnBhdGhFeHRyYUFkdmFuY2UgKz0g
c3BhY2luZzsKLQotICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+aGlkZGVuID0gIWluZm8u
bmV4dFBhdGhMYXlvdXRQb2ludEFuZEFuZ2xlKGNvcnJlY3RlZEdseXBoQWR2YW5jZSwgZXh0cmFB
ZHZhbmNlLCBuZXdPZmZzZXQpOwotICAgICAgICAgICAgc3ZnQ2hhci5kcmF3blNlcGVyYXRlZCA9
IHRydWU7Ci0KLSAgICAgICAgICAgIGluZm8ucGF0aEV4dHJhQWR2YW5jZSA9IHBhdGhFeHRyYUFk
dmFuY2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBcHBseSByb3RhdGlvbgotICAgICAgICBp
ZiAoaW5mby5hbmdsZVZhbHVlQXZhaWxhYmxlKCkpCi0gICAgICAgICAgICBpbmZvLmFuZ2xlID0g
aW5mby5hbmdsZVZhbHVlTmV4dCgpOwotCi0gICAgICAgIC8vIEFwcGx5IGJhc2VsaW5lLXNoaWZ0
Ci0gICAgICAgIGlmIChpbmZvLmJhc2VsaW5lU2hpZnRWYWx1ZUF2YWlsYWJsZSgpKSB7Ci0gICAg
ICAgICAgICBzdmdDaGFyLmRyYXduU2VwZXJhdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGZsb2F0
IHNoaWZ0ID0gaW5mby5iYXNlbGluZVNoaWZ0VmFsdWVOZXh0KCk7Ci0KLSAgICAgICAgICAgIGlm
IChpc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgICAgICAgICBpbmZvLnNoaWZ0eCArPSBzaGlmdDsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpbmZvLnNoaWZ0eSAtPSBzaGlmdDsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIFRha2UgZG9taW5hbnQtYmFzZWxpbmUgLyBhbGlnbm1l
bnQtYmFzZWxpbmUgaW50byBhY2NvdW50Ci0gICAgICAgIHlPcmllbnRhdGlvblNoaWZ0ICs9IGFs
aWdubWVudEJhc2VsaW5lVG9TaGlmdChpc1ZlcnRpY2FsVGV4dCwgdGV4dCwgZm9udCk7Ci0KLSAg
ICAgICAgc3ZnQ2hhci54ID0gaW5mby5jdXJ4OwotICAgICAgICBzdmdDaGFyLnkgPSBpbmZvLmN1
cnk7Ci0gICAgICAgIHN2Z0NoYXIuYW5nbGUgPSBpbmZvLmFuZ2xlOwotCi0gICAgICAgIC8vIEZv
ciB0ZXh0IHBhdGhzIGFueSBzaGlmdCAoZHgvZHkvYmFzZWxpbmUtc2hpZnQpIGhhcyB0byBiZSBh
cHBsaWVkIGFmdGVyIHRoZSByb3RhdGlvbgotICAgICAgICBpZiAoIWluZm8uaW5QYXRoTGF5b3V0
KCkpIHsKLSAgICAgICAgICAgIHN2Z0NoYXIueCArPSBpbmZvLnNoaWZ0eCArIHhPcmllbnRhdGlv
blNoaWZ0OwotICAgICAgICAgICAgc3ZnQ2hhci55ICs9IGluZm8uc2hpZnR5ICsgeU9yaWVudGF0
aW9uU2hpZnQ7Ci0KLSAgICAgICAgICAgIGlmIChvcmllbnRhdGlvbkFuZ2xlICE9IDAuMGYpCi0g
ICAgICAgICAgICAgICAgc3ZnQ2hhci5hbmdsZSArPSBvcmllbnRhdGlvbkFuZ2xlOwotCi0gICAg
ICAgICAgICBpZiAoc3ZnQ2hhci5hbmdsZSAhPSAwLjBmKQotICAgICAgICAgICAgICAgIHN2Z0No
YXIuZHJhd25TZXBlcmF0ZWQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
c3ZnQ2hhci5wYXRoRGF0YS0+b3JpZW50YXRpb25BbmdsZSA9IG9yaWVudGF0aW9uQW5nbGU7Ci0K
LSAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgICAgICAgICBzdmdDaGFy
LmFuZ2xlIC09IDkwLjBmOwotCi0gICAgICAgICAgICBzdmdDaGFyLnBhdGhEYXRhLT54U2hpZnQg
PSBpbmZvLnNoaWZ0eCArIHhPcmllbnRhdGlvblNoaWZ0OwotICAgICAgICAgICAgc3ZnQ2hhci5w
YXRoRGF0YS0+eVNoaWZ0ID0gaW5mby5zaGlmdHkgKyB5T3JpZW50YXRpb25TaGlmdDsKLQotICAg
ICAgICAgICAgLy8gVHJhbnNsYXRlIHRvIGdseXBoIG1pZHBvaW50Ci0gICAgICAgICAgICBpZiAo
aXNWZXJ0aWNhbFRleHQpIHsKLSAgICAgICAgICAgICAgICBzdmdDaGFyLnBhdGhEYXRhLT54U2hp
ZnQgKz0gaW5mby5keDsKLSAgICAgICAgICAgICAgICBzdmdDaGFyLnBhdGhEYXRhLT55U2hpZnQg
LT0gZ2x5cGhBZHZhbmNlIC8gMi4wZjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+eFNoaWZ0IC09IGdseXBoQWR2YW5jZSAvIDIuMGY7Ci0g
ICAgICAgICAgICAgICAgc3ZnQ2hhci5wYXRoRGF0YS0+eVNoaWZ0ICs9IGluZm8uZHk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBZHZhbmNlIHRvIG5ldyBwb3NpdGlv
bgotICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpIHsKLSAgICAgICAgICAgIHN2Z0NoYXIuZHJh
d25TZXBlcmF0ZWQgPSB0cnVlOwotICAgICAgICAgICAgaW5mby5jdXJ5ICs9IGdseXBoQWR2YW5j
ZSArIHNwYWNpbmc7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaW5mby5jdXJ4ICs9IGds
eXBoQWR2YW5jZSArIHNwYWNpbmc7Ci0KLSAgICAgICAgLy8gQWR2YW5jZSB0byBuZXh0IGNoYXJh
Y3RlciBncm91cAotICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IGNoYXJzQ29uc3VtZWQ7ICsr
aykgewotICAgICAgICAgICAgaW5mby5zdmdDaGFycy5hcHBlbmQoc3ZnQ2hhcik7Ci0gICAgICAg
ICAgICBpbmZvLnByb2Nlc3NlZFNpbmdsZUNoYXJhY3RlcigpOwotICAgICAgICAgICAgc3ZnQ2hh
ci5kcmF3blNlcGVyYXRlZCA9IGZhbHNlOwotICAgICAgICAgICAgc3ZnQ2hhci5uZXdUZXh0Q2h1
bmsgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogdm9pZCBTVkdSb290SW5saW5lQm94
OjpidWlsZFRleHRDaHVua3MoVmVjdG9yPFNWR0NoYXI+JiBzdmdDaGFycywgVmVjdG9yPFNWR1Rl
eHRDaHVuaz4mIHN2Z1RleHRDaHVua3MsIElubGluZUZsb3dCb3gqIHN0YXJ0KQogewogICAgIFNW
R1RleHRDaHVua0xheW91dEluZm8gaW5mbyhzdmdUZXh0Q2h1bmtzKTsKQEAgLTE1MzEsNyArOTU5
LDcgQEAgdm9pZCBTVkdSb290SW5saW5lQm94OjpidWlsZFRleHRDaHVua3MoVgogICAgICAgICAg
ICAgICAgIFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlJiByYW5nZSA9IGluZm8uY2h1bmsuYm94
ZXMubGFzdCgpOwogICAgICAgICAgICAgICAgIGlmIChyYW5nZS5pc09wZW4oKSkgewogICAgICAg
ICAgICAgICAgICAgICByYW5nZS5ib3ggPSBjdXJyOwotICAgICAgICAgICAgICAgICAgICByYW5n
ZS5zdGFydE9mZnNldCA9IChpID09IDAgPyAwIDogaSAtIDEpOworICAgICAgICAgICAgICAgICAg
ICByYW5nZS5zdGFydE9mZnNldCA9IGkgPT0gMCA/IDAgOiBpIC0gMTsKIAogI2lmIERFQlVHX0NI
VU5LX0JVSUxESU5HID4gMQogICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiB8
IC0+IFJhbmdlIGlzIG9wZW4hIGJveD0lcCwgc3RhcnRPZmZzZXQ9JWlcbiIsIHJhbmdlLmJveCwg
cmFuZ2Uuc3RhcnRPZmZzZXQpOwpAQCAtMTY2OSwxMSArMTA5Nyw2IEBAIHZvaWQgU1ZHUm9vdElu
bGluZUJveDo6YnVpbGRUZXh0Q2h1bmtzKFYKICNlbmRpZgogfQogCi1jb25zdCBWZWN0b3I8U1ZH
VGV4dENodW5rPiYgU1ZHUm9vdElubGluZUJveDo6c3ZnVGV4dENodW5rcygpIGNvbnN0IAotewot
ICAgIHJldHVybiBtX3N2Z1RleHRDaHVua3M7Ci19Ci0KIHZvaWQgU1ZHUm9vdElubGluZUJveDo6
bGF5b3V0VGV4dENodW5rcygpCiB7CiAgICAgVmVjdG9yPFNWR1RleHRDaHVuaz46Oml0ZXJhdG9y
IGl0ID0gbV9zdmdUZXh0Q2h1bmtzLmJlZ2luKCk7CkBAIC0xNjkzLDcgKzExMTYsOCBAQCB2b2lk
IFNWR1Jvb3RJbmxpbmVCb3g6OmxheW91dFRleHRDaHVua3MoCiAKICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBpID0gMDsKICAgICAgICAgICAgIGZvciAoOyBib3hJdCAhPSBib3hFbmQ7ICsrYm94
SXQpIHsKLSAgICAgICAgICAgICAgICBTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZSYgcmFuZ2Ug
PSAqYm94SXQ7IGkrKzsKKyAgICAgICAgICAgICAgICBTVkdJbmxpbmVCb3hDaGFyYWN0ZXJSYW5n
ZSYgcmFuZ2UgPSAqYm94SXQ7CisgICAgICAgICAgICAgICAgKytpOwogICAgICAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiIC0+IFJBTkdFICVpIFNUQVJUT0ZGU0VUOiAlaSwgRU5ET0ZGU0VU
OiAlaSwgQk9YOiAlcFxuIiwgaSwgcmFuZ2Uuc3RhcnRPZmZzZXQsIHJhbmdlLmVuZE9mZnNldCwg
cmFuZ2UuYm94KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvU1ZHUm9vdElubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1NWR1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24gNTkxNDcpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9TVkdSb290SW5saW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDIyICsyOSwxNSBAQAog
I2luY2x1ZGUgIlJvb3RJbmxpbmVCb3guaCIKICNpbmNsdWRlICJTVkdDaGFyYWN0ZXJEYXRhLmgi
CiAjaW5jbHVkZSAiU1ZHQ2hhcmFjdGVyTGF5b3V0SW5mby5oIgotI2luY2x1ZGUgIlNWR1RleHRD
aHVua0xheW91dEluZm8uaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCisjaW5jbHVk
ZSAiU1ZHVGV4dENodW5rTGF5b3V0SW5mby5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIElubGluZVRleHRCb3g7CiBjbGFzcyBSZW5kZXJTVkdSb290OwogY2xhc3MgU1ZHSW5saW5l
VGV4dEJveDsKLQotc3RydWN0IExhc3RHbHlwaEluZm8gewotICAgIExhc3RHbHlwaEluZm8oKSA6
IGlzVmFsaWQoZmFsc2UpIHsgfQotCi0gICAgU3RyaW5nIHVuaWNvZGU7Ci0gICAgU3RyaW5nIGds
eXBoTmFtZTsKLSAgICBib29sIGlzVmFsaWQ7Ci19Oworc3RydWN0IFNWR0xhc3RHbHlwaEluZm87
CiAKIGNsYXNzIFNWR1Jvb3RJbmxpbmVCb3ggOiBwdWJsaWMgUm9vdElubGluZUJveCwgcHJvdGVj
dGVkIFNWR1JlbmRlckJhc2UgewogcHVibGljOgpAQCAtNzAsNyArNjMsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBjb25z
dCB7IHJldHVybiBGbG9hdFJlY3QoKTsgfQogCiAgICAgLy8gVXNlZCBieSBTVkdJbmxpbmVUZXh0
Qm94Ci0gICAgY29uc3QgVmVjdG9yPFNWR1RleHRDaHVuaz4mIHN2Z1RleHRDaHVua3MoKSBjb25z
dDsKKyAgICBjb25zdCBWZWN0b3I8U1ZHVGV4dENodW5rPiYgc3ZnVGV4dENodW5rcygpIGNvbnN0
IHsgcmV0dXJuIG1fc3ZnVGV4dENodW5rczsgfQogCiAgICAgdm9pZCB3YWxrVGV4dENodW5rcyhT
VkdUZXh0Q2h1bmtXYWxrZXJCYXNlKiwgY29uc3QgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJveCA9
IDApOwogCkBAIC04MSw3ICs3NCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBsYXlvdXRJbmxpbmVC
b3hlcyhJbmxpbmVGbG93Qm94KiBzdGFydCwgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciYgaXQs
IGludCYgbWluWCwgaW50JiBtYXhYLCBpbnQmIG1pblksIGludCYgbWF4WSk7CiAKICAgICB2b2lk
IGJ1aWxkTGF5b3V0SW5mb3JtYXRpb24oSW5saW5lRmxvd0JveCogc3RhcnQsIFNWR0NoYXJhY3Rl
ckxheW91dEluZm8mKTsKLSAgICB2b2lkIGJ1aWxkTGF5b3V0SW5mb3JtYXRpb25Gb3JUZXh0Qm94
KFNWR0NoYXJhY3RlckxheW91dEluZm8mLCBJbmxpbmVUZXh0Qm94KiwgTGFzdEdseXBoSW5mbyYp
OwogCiAgICAgdm9pZCBidWlsZFRleHRDaHVua3MoVmVjdG9yPFNWR0NoYXI+JiwgVmVjdG9yPFNW
R1RleHRDaHVuaz4mLCBJbmxpbmVGbG93Qm94KiBzdGFydCk7CiAgICAgdm9pZCBidWlsZFRleHRD
aHVua3MoVmVjdG9yPFNWR0NoYXI+JiwgSW5saW5lRmxvd0JveCogc3RhcnQsIFNWR1RleHRDaHVu
a0xheW91dEluZm8mKTsKQEAgLTk2LDExICs4OCw2IEBAIHByaXZhdGU6CiB9OwogCiAvLyBTaGFy
ZWQgd2l0aCBTVkdSZW5kZXJUcmVlQXNUZXh0IC8gU1ZHSW5saW5lVGV4dEJveAotVGV4dFJ1biBz
dmdUZXh0UnVuRm9ySW5saW5lVGV4dEJveChjb25zdCBVQ2hhciosIGludCBsZW4sIFJlbmRlclN0
eWxlKiBzdHlsZSwgY29uc3QgSW5saW5lVGV4dEJveCogdGV4dEJveCwgZmxvYXQgeFBvcyk7Ci1G
bG9hdFBvaW50IHRvcExlZnRQb3NpdGlvbk9mQ2hhcmFjdGVyUmFuZ2UoVmVjdG9yPFNWR0NoYXI+
OjppdGVyYXRvciBzdGFydCwgVmVjdG9yPFNWR0NoYXI+OjppdGVyYXRvciBlbmQpOwotZmxvYXQg
Y3VtbXVsYXRlZFdpZHRoT2ZJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZShTVkdJbmxpbmVCb3hDaGFy
YWN0ZXJSYW5nZSYgcmFuZ2UpOwotZmxvYXQgY3VtbXVsYXRlZEhlaWdodE9mSW5saW5lQm94Q2hh
cmFjdGVyUmFuZ2UoU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UmIHJhbmdlKTsKLQogUmVuZGVy
U1ZHUm9vdCogZmluZFNWR1Jvb3RPYmplY3QoUmVuZGVyT2JqZWN0KiBzdGFydCk7CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRMYXlvdXRV
dGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1RleHRMYXlv
dXRVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHVGV4
dExheW91dFV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzc0IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlNWR1RleHRMYXlvdXRVdGlsaXRpZXMuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKKyNpbmNsdWRlICJSZW5k
ZXJPYmplY3QuaCIKKyNpbmNsdWRlICJTVkdDaGFyYWN0ZXJEYXRhLmgiCisjaW5jbHVkZSAiU1ZH
Q2hhcmFjdGVyTGF5b3V0SW5mby5oIgorI2luY2x1ZGUgIlNWR0ZvbnRFbGVtZW50LmgiCisjaW5j
bHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTVkdUZXh0Q2h1bmtMYXlvdXRJbmZv
LmgiCisjaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgIlVuaWNvZGVSYW5nZS5oIgorCisj
aW5jbHVkZSA8ZmxvYXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIGlzVmVydGlj
YWxXcml0aW5nTW9kZShjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUpCit7CisgICAgcmV0dXJu
IHN0eWxlLT53cml0aW5nTW9kZSgpID09IFdNX1RCUkwgfHwgc3R5bGUtPndyaXRpbmdNb2RlKCkg
PT0gV01fVEI7IAorfQorCitzdGF0aWMgaW5saW5lIEVBbGlnbm1lbnRCYXNlbGluZSBkb21pbmFu
dEJhc2VsaW5lVG9TaGlmdChib29sIGlzVmVydGljYWxUZXh0LCBjb25zdCBSZW5kZXJPYmplY3Qq
IHRleHQsIGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgQVNTRVJUKHRleHQpOworCisgICAgY29u
c3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dC0+c3R5bGUoKSA/IHRleHQtPnN0eWxlKCkt
PnN2Z1N0eWxlKCkgOiAwOworICAgIEFTU0VSVChzdHlsZSk7CisKKyAgICBjb25zdCBTVkdSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUgPSB0ZXh0LT5wYXJlbnQoKSAmJiB0ZXh0LT5wYXJlbnQoKS0+
c3R5bGUoKSA/IHRleHQtPnBhcmVudCgpLT5zdHlsZSgpLT5zdmdTdHlsZSgpIDogMDsKKworICAg
IEVEb21pbmFudEJhc2VsaW5lIGJhc2VsaW5lID0gc3R5bGUtPmRvbWluYW50QmFzZWxpbmUoKTsK
KyAgICBpZiAoYmFzZWxpbmUgPT0gREJfQVVUTykgeworICAgICAgICBpZiAoaXNWZXJ0aWNhbFRl
eHQpCisgICAgICAgICAgICBiYXNlbGluZSA9IERCX0NFTlRSQUw7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGJhc2VsaW5lID0gREJfQUxQSEFCRVRJQzsKKyAgICB9CisKKyAgICBzd2l0Y2gg
KGJhc2VsaW5lKSB7CisgICAgY2FzZSBEQl9VU0VfU0NSSVBUOgorICAgICAgICAvLyBUT0RPOiBU
aGUgZG9taW5hbnQtYmFzZWxpbmUgYW5kIHRoZSBiYXNlbGluZS10YWJsZSBjb21wb25lbnRzIGFy
ZSBzZXQgYnkKKyAgICAgICAgLy8gICAgICAgZGV0ZXJtaW5pbmcgdGhlIHByZWRvbWluYW50IHNj
cmlwdCBvZiB0aGUgY2hhcmFjdGVyIGRhdGEgY29udGVudC4KKyAgICAgICAgcmV0dXJuIEFCX0FM
UEhBQkVUSUM7CisgICAgY2FzZSBEQl9OT19DSEFOR0U6CisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChwYXJlbnRTdHlsZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZG9taW5hbnRCYXNlbGlu
ZVRvU2hpZnQoaXNWZXJ0aWNhbFRleHQsIHRleHQtPnBhcmVudCgpLCBmb250KTsKKworICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gQUJfQVVUTzsK
KyAgICAgICAgfQorICAgIGNhc2UgREJfUkVTRVRfU0laRToKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKHBhcmVudFN0eWxlKQorICAgICAgICAgICAgICAgIHJldHVybiBkb21pbmFudEJhc2Vs
aW5lVG9TaGlmdChpc1ZlcnRpY2FsVGV4dCwgdGV4dC0+cGFyZW50KCksIGZvbnQpOworCisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBBQl9BVVRP
OyAgICAKKyAgICAgICAgfQorICAgIGNhc2UgREJfSURFT0dSQVBISUM6CisgICAgICAgIHJldHVy
biBBQl9JREVPR1JBUEhJQzsKKyAgICBjYXNlIERCX0FMUEhBQkVUSUM6CisgICAgICAgIHJldHVy
biBBQl9BTFBIQUJFVElDOworICAgIGNhc2UgREJfSEFOR0lORzoKKyAgICAgICAgcmV0dXJuIEFC
X0hBTkdJTkc7CisgICAgY2FzZSBEQl9NQVRIRU1BVElDQUw6CisgICAgICAgIHJldHVybiBBQl9N
QVRIRU1BVElDQUw7CisgICAgY2FzZSBEQl9DRU5UUkFMOgorICAgICAgICByZXR1cm4gQUJfQ0VO
VFJBTDsKKyAgICBjYXNlIERCX01JRERMRToKKyAgICAgICAgcmV0dXJuIEFCX01JRERMRTsKKyAg
ICBjYXNlIERCX1RFWFRfQUZURVJfRURHRToKKyAgICAgICAgcmV0dXJuIEFCX1RFWFRfQUZURVJf
RURHRTsKKyAgICBjYXNlIERCX1RFWFRfQkVGT1JFX0VER0U6CisgICAgICAgIHJldHVybiBBQl9U
RVhUX0JFRk9SRV9FREdFOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gQUJfQVVUTzsKKyAgICB9Cit9CisKK2Zsb2F0IGFsaWdubWVu
dEJhc2VsaW5lVG9TaGlmdChib29sIGlzVmVydGljYWxUZXh0LCBjb25zdCBSZW5kZXJPYmplY3Qq
IHRleHQsIGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgQVNTRVJUKHRleHQpOworCisgICAgY29u
c3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dC0+c3R5bGUoKSA/IHRleHQtPnN0eWxlKCkt
PnN2Z1N0eWxlKCkgOiAwOworICAgIEFTU0VSVChzdHlsZSk7CisKKyAgICBjb25zdCBTVkdSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUgPSB0ZXh0LT5wYXJlbnQoKSAmJiB0ZXh0LT5wYXJlbnQoKS0+
c3R5bGUoKSA/IHRleHQtPnBhcmVudCgpLT5zdHlsZSgpLT5zdmdTdHlsZSgpIDogMDsKKworICAg
IEVBbGlnbm1lbnRCYXNlbGluZSBiYXNlbGluZSA9IHN0eWxlLT5hbGlnbm1lbnRCYXNlbGluZSgp
OworICAgIGlmIChiYXNlbGluZSA9PSBBQl9BVVRPKSB7CisgICAgICAgIGlmIChwYXJlbnRTdHls
ZSAmJiBzdHlsZS0+ZG9taW5hbnRCYXNlbGluZSgpID09IERCX0FVVE8pCisgICAgICAgICAgICBi
YXNlbGluZSA9IGRvbWluYW50QmFzZWxpbmVUb1NoaWZ0KGlzVmVydGljYWxUZXh0LCB0ZXh0LT5w
YXJlbnQoKSwgZm9udCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJhc2VsaW5lID0gZG9t
aW5hbnRCYXNlbGluZVRvU2hpZnQoaXNWZXJ0aWNhbFRleHQsIHRleHQsIGZvbnQpOworCisgICAg
ICAgIEFTU0VSVChiYXNlbGluZSAhPSBBQl9BVVRPKTsgICAgCisgICAgfQorCisgICAgLy8gTm90
ZTogaHR0cDovL3dpa2kuYXBhY2hlLm9yZy94bWxncmFwaGljcy1mb3AvTGluZUxheW91dC9BbGln
bm1lbnRIYW5kbGluZworICAgIHN3aXRjaCAoYmFzZWxpbmUpIHsKKyAgICBjYXNlIEFCX0JBU0VM
SU5FOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGRvbWluYW50QmFzZWxpbmVUb1NoaWZ0KGlzVmVydGljYWxUZXh0LCB0ZXh0
LT5wYXJlbnQoKSwgZm9udCk7CisKKyAgICAgICAgICAgIHJldHVybiAwLjBmOworICAgICAgICB9
CisgICAgY2FzZSBBQl9CRUZPUkVfRURHRToKKyAgICBjYXNlIEFCX1RFWFRfQkVGT1JFX0VER0U6
CisgICAgICAgIHJldHVybiBmb250LmFzY2VudCgpOworICAgIGNhc2UgQUJfTUlERExFOgorICAg
ICAgICByZXR1cm4gZm9udC54SGVpZ2h0KCkgLyAyLjBmOworICAgIGNhc2UgQUJfQ0VOVFJBTDoK
KyAgICAgICAgLy8gTm90IG5lZWRlZCwgd2UncmUgdGFraW5nIHRoaXMgaW50byBhY2NvdW50IGFs
cmVhZHkgZm9yIHZlcnRpY2FsIHRleHQhCisgICAgICAgIC8vIHJldHVybiAoZm9udC5hc2NlbnQo
KSAtIGZvbnQuZGVzY2VudCgpKSAvIDIuMGY7CisgICAgICAgIHJldHVybiAwLjBmOworICAgIGNh
c2UgQUJfQUZURVJfRURHRToKKyAgICBjYXNlIEFCX1RFWFRfQUZURVJfRURHRToKKyAgICBjYXNl
IEFCX0lERU9HUkFQSElDOgorICAgICAgICByZXR1cm4gZm9udC5kZXNjZW50KCk7CisgICAgY2Fz
ZSBBQl9BTFBIQUJFVElDOgorICAgICAgICByZXR1cm4gMC4wZjsKKyAgICBjYXNlIEFCX0hBTkdJ
Tkc6CisgICAgICAgIHJldHVybiBmb250LmFzY2VudCgpICogOC4wZiAvIDEwLjBmOworICAgIGNh
c2UgQUJfTUFUSEVNQVRJQ0FMOgorICAgICAgICByZXR1cm4gZm9udC5hc2NlbnQoKSAvIDIuMGY7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiAwLjBmOworICAgIH0KK30KKworZmxvYXQgZ2x5cGhPcmllbnRhdGlvblRvQW5nbGUoY29u
c3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlLCBib29sIGlzVmVydGljYWxUZXh0LCBjb25zdCBV
Q2hhciYgY2hhcmFjdGVyKQoreworICAgIHN3aXRjaCAoaXNWZXJ0aWNhbFRleHQgPyBzdmdTdHls
ZS0+Z2x5cGhPcmllbnRhdGlvblZlcnRpY2FsKCkgOiBzdmdTdHlsZS0+Z2x5cGhPcmllbnRhdGlv
bkhvcml6b250YWwoKSkgeworICAgIGNhc2UgR09fQVVUTzoKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8gU3BlYzogRnVsbHdpZHRoIGlkZW9ncmFwaGljIGFuZCBmdWxsd2lkdGggTGF0aW4gdGV4
dCB3aWxsIGJlIHNldCB3aXRoIGEgZ2x5cGgtb3JpZW50YXRpb24gb2YgMC1kZWdyZWVzLgorICAg
ICAgICAgICAgLy8gICAgICAgVGV4dCB3aGljaCBpcyBub3QgZnVsbHdpZHRoIHdpbGwgYmUgc2V0
IHdpdGggYSBnbHlwaC1vcmllbnRhdGlvbiBvZiA5MC1kZWdyZWVzLgorICAgICAgICAgICAgdW5z
aWduZWQgaW50IHVuaWNvZGVSYW5nZSA9IGZpbmRDaGFyVW5pY29kZVJhbmdlKGNoYXJhY3Rlcik7
CisgICAgICAgICAgICBpZiAodW5pY29kZVJhbmdlID09IGNSYW5nZVNldExhdGluIHx8IHVuaWNv
ZGVSYW5nZSA9PSBjUmFuZ2VBcmFiaWMpCisgICAgICAgICAgICAgICAgcmV0dXJuIDkwLjBmOwor
CisgICAgICAgICAgICByZXR1cm4gMC4wZjsKKyAgICAgICAgfQorICAgIGNhc2UgR09fOTBERUc6
CisgICAgICAgIHJldHVybiA5MC4wZjsKKyAgICBjYXNlIEdPXzE4MERFRzoKKyAgICAgICAgcmV0
dXJuIDE4MC4wZjsKKyAgICBjYXNlIEdPXzI3MERFRzoKKyAgICAgICAgcmV0dXJuIDI3MC4wZjsK
KyAgICBjYXNlIEdPXzBERUc6CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDAuMGY7Cisg
ICAgfQorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgZ2x5cGhPcmllbnRhdGlvbklzTXVsdGlwbHlP
ZjE4MERlZ3JlZXMoZmxvYXQgb3JpZW50YXRpb25BbmdsZSkKK3sKKyAgICByZXR1cm4gZmFic2Yo
Zm1vZGYob3JpZW50YXRpb25BbmdsZSwgMTgwLjBmKSkgPT0gMC4wZjsKK30KKworZmxvYXQgYXBw
bHlHbHlwaEFkdmFuY2VBbmRTaGlmdFJlc3BlY3RpbmdPcmllbnRhdGlvbihib29sIGlzVmVydGlj
YWxUZXh0LCBmbG9hdCBvcmllbnRhdGlvbkFuZ2xlLCBmbG9hdCBnbHlwaFdpZHRoLCBmbG9hdCBn
bHlwaEhlaWdodCwgY29uc3QgRm9udCYgZm9udCwgU1ZHQ2hhciYgc3ZnQ2hhciwgZmxvYXQmIHhP
cmllbnRhdGlvblNoaWZ0LCBmbG9hdCYgeU9yaWVudGF0aW9uU2hpZnQpCit7CisgICAgYm9vbCBv
cmllbnRhdGlvbklzTXVsdGlwbHlPZjE4MERlZ3JlZXMgPSBnbHlwaE9yaWVudGF0aW9uSXNNdWx0
aXBseU9mMTgwRGVncmVlcyhvcmllbnRhdGlvbkFuZ2xlKTsKKworICAgIC8vIFRoZSBmdW5jdGlv
biBpcyBiYXNlZCBvbiBzcGVjIHJlcXVpcmVtZW50czoKKyAgICAvLworICAgIC8vIFNwZWM6IElm
IHRoZSAnZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCcgcmVzdWx0cyBpbiBhbiBvcmllbnRh
dGlvbiBhbmdsZSB0aGF0IGlzIG5vdCBhIG11bHRpcGxlIG9mCisgICAgLy8gb2YgMTgwIGRlZ3Jl
ZXMsIHRoZW4gdGhlIGN1cnJlbnQgdGV4dCBwb3NpdGlvbiBpcyBpbmNyZW1lbnRlZCBhY2NvcmRp
bmcgdG8gdGhlIHZlcnRpY2FsIG1ldHJpY3Mgb2YgdGhlIGdseXBoLgorICAgIC8vCisgICAgLy8g
U3BlYzogSWYgaWYgdGhlICdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCcgcmVzdWx0cyBpbiBh
biBvcmllbnRhdGlvbiBhbmdsZSB0aGF0IGlzIG5vdCBhIG11bHRpcGxlIG9mCisgICAgLy8gMTgw
IGRlZ3JlZXMsdGhlbiB0aGUgY3VycmVudCB0ZXh0IHBvc2l0aW9uIGlzIGluY3JlbWVudGVkIGFj
Y29yZGluZyB0byB0aGUgaG9yaXpvbnRhbCBtZXRyaWNzIG9mIHRoZSBnbHlwaC4KKworICAgIC8v
IHZlcnRpY2FsIG9yaWVudGF0aW9uIGhhbmRsaW5nCisgICAgaWYgKGlzVmVydGljYWxUZXh0KSB7
CisgICAgICAgIGlmIChvcmllbnRhdGlvbkFuZ2xlID09IDAuMGYpIHsKKyAgICAgICAgICAgIHhP
cmllbnRhdGlvblNoaWZ0ID0gLWdseXBoV2lkdGggLyAyLjBmOworICAgICAgICAgICAgeU9yaWVu
dGF0aW9uU2hpZnQgPSBmb250LmFzY2VudCgpOworICAgICAgICB9IGVsc2UgaWYgKG9yaWVudGF0
aW9uQW5nbGUgPT0gOTAuMGYpIHsKKyAgICAgICAgICAgIHhPcmllbnRhdGlvblNoaWZ0ID0gLWds
eXBoSGVpZ2h0OworICAgICAgICAgICAgeU9yaWVudGF0aW9uU2hpZnQgPSBmb250LmRlc2NlbnQo
KTsKKyAgICAgICAgICAgIHN2Z0NoYXIub3JpZW50YXRpb25TaGlmdFkgPSAtZm9udC5hc2NlbnQo
KTsKKyAgICAgICAgfSBlbHNlIGlmIChvcmllbnRhdGlvbkFuZ2xlID09IDI3MC4wZikgeworICAg
ICAgICAgICAgeE9yaWVudGF0aW9uU2hpZnQgPSBnbHlwaEhlaWdodDsKKyAgICAgICAgICAgIHlP
cmllbnRhdGlvblNoaWZ0ID0gZm9udC5kZXNjZW50KCk7CisgICAgICAgICAgICBzdmdDaGFyLm9y
aWVudGF0aW9uU2hpZnRYID0gLWdseXBoV2lkdGg7CisgICAgICAgICAgICBzdmdDaGFyLm9yaWVu
dGF0aW9uU2hpZnRZID0gLWZvbnQuYXNjZW50KCk7CisgICAgICAgIH0gZWxzZSBpZiAob3JpZW50
YXRpb25BbmdsZSA9PSAxODAuMGYpIHsKKyAgICAgICAgICAgIHlPcmllbnRhdGlvblNoaWZ0ID0g
Zm9udC5hc2NlbnQoKTsKKyAgICAgICAgICAgIHN2Z0NoYXIub3JpZW50YXRpb25TaGlmdFggPSAt
Z2x5cGhXaWR0aCAvIDIuMGY7CisgICAgICAgICAgICBzdmdDaGFyLm9yaWVudGF0aW9uU2hpZnRZ
ID0gZm9udC5hc2NlbnQoKSAtIGZvbnQuZGVzY2VudCgpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gdmVydGljYWwgYWR2YW5jZSBjYWxjdWxhdGlvbgorICAgICAgICBpZiAob3JpZW50YXRpb25B
bmdsZSAhPSAwLjBmICYmICFvcmllbnRhdGlvbklzTXVsdGlwbHlPZjE4MERlZ3JlZXMpCisgICAg
ICAgICAgICByZXR1cm4gZ2x5cGhXaWR0aDsKKworICAgICAgICByZXR1cm4gZ2x5cGhIZWlnaHQ7
IAorICAgIH0KKworICAgIC8vIGhvcml6b250YWwgb3JpZW50YXRpb24gaGFuZGxpbmcKKyAgICBp
ZiAob3JpZW50YXRpb25BbmdsZSA9PSA5MC4wZikgeworICAgICAgICB4T3JpZW50YXRpb25TaGlm
dCA9IGdseXBoV2lkdGggLyAyLjBmOworICAgICAgICB5T3JpZW50YXRpb25TaGlmdCA9IC1mb250
LmRlc2NlbnQoKTsKKyAgICAgICAgc3ZnQ2hhci5vcmllbnRhdGlvblNoaWZ0WCA9IC1nbHlwaFdp
ZHRoIC8gMi4wZiAtIGZvbnQuZGVzY2VudCgpOyAKKyAgICAgICAgc3ZnQ2hhci5vcmllbnRhdGlv
blNoaWZ0WSA9IGZvbnQuZGVzY2VudCgpOworICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb25Bbmds
ZSA9PSAyNzAuMGYpIHsKKyAgICAgICAgeE9yaWVudGF0aW9uU2hpZnQgPSAtZ2x5cGhXaWR0aCAv
IDIuMGY7CisgICAgICAgIHlPcmllbnRhdGlvblNoaWZ0ID0gLWZvbnQuZGVzY2VudCgpOworICAg
ICAgICBzdmdDaGFyLm9yaWVudGF0aW9uU2hpZnRYID0gLWdseXBoV2lkdGggLyAyLjBmICsgZm9u
dC5kZXNjZW50KCk7CisgICAgICAgIHN2Z0NoYXIub3JpZW50YXRpb25TaGlmdFkgPSBnbHlwaEhl
aWdodDsKKyAgICB9IGVsc2UgaWYgKG9yaWVudGF0aW9uQW5nbGUgPT0gMTgwLjBmKSB7CisgICAg
ICAgIHhPcmllbnRhdGlvblNoaWZ0ID0gZ2x5cGhXaWR0aCAvIDIuMGY7CisgICAgICAgIHN2Z0No
YXIub3JpZW50YXRpb25TaGlmdFggPSAtZ2x5cGhXaWR0aCAvIDIuMGY7CisgICAgICAgIHN2Z0No
YXIub3JpZW50YXRpb25TaGlmdFkgPSBmb250LmFzY2VudCgpIC0gZm9udC5kZXNjZW50KCk7Cisg
ICAgfQorCisgICAgLy8gaG9yaXpvbnRhbCBhZHZhbmNlIGNhbGN1bGF0aW9uCisgICAgaWYgKG9y
aWVudGF0aW9uQW5nbGUgIT0gMC4wZiAmJiAhb3JpZW50YXRpb25Jc011bHRpcGx5T2YxODBEZWdy
ZWVzKQorICAgICAgICByZXR1cm4gZ2x5cGhIZWlnaHQ7CisKKyAgICByZXR1cm4gZ2x5cGhXaWR0
aDsKK30KKworRmxvYXRQb2ludCB0b3BMZWZ0UG9zaXRpb25PZkNoYXJhY3RlclJhbmdlKFZlY3Rv
cjxTVkdDaGFyPjo6aXRlcmF0b3IgaXQsIFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3IgZW5kKQor
eworICAgIGZsb2F0IGxvd1ggPSBGTFRfTUFYLCBsb3dZID0gRkxUX01BWDsKKyAgICBmb3IgKDsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+aXNIaWRkZW4oKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGZsb2F0IHggPSAoKml0KS54OworICAgICAgICBmbG9h
dCB5ID0gKCppdCkueTsKKworICAgICAgICBpZiAoeCA8IGxvd1gpCisgICAgICAgICAgICBsb3dY
ID0geDsKKworICAgICAgICBpZiAoeSA8IGxvd1kpCisgICAgICAgICAgICBsb3dZID0geTsKKyAg
ICB9CisKKyAgICByZXR1cm4gRmxvYXRQb2ludChsb3dYLCBsb3dZKTsKK30KKworZmxvYXQgY3Vt
bXVsYXRlZFdpZHRoT2ZJbmxpbmVCb3hDaGFyYWN0ZXJSYW5nZShTVkdJbmxpbmVCb3hDaGFyYWN0
ZXJSYW5nZSYgcmFuZ2UpCit7CisgICAgQVNTRVJUKCFyYW5nZS5pc09wZW4oKSk7CisgICAgQVNT
RVJUKHJhbmdlLmlzQ2xvc2VkKCkpOworICAgIEFTU0VSVChyYW5nZS5ib3gtPmlzSW5saW5lVGV4
dEJveCgpKTsKKworICAgIElubGluZVRleHRCb3gqIHRleHRCb3ggPSBzdGF0aWNfY2FzdDxJbmxp
bmVUZXh0Qm94Kj4ocmFuZ2UuYm94KTsKKyAgICBSZW5kZXJUZXh0KiB0ZXh0ID0gdGV4dEJveC0+
dGV4dFJlbmRlcmVyKCk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dC0+c3R5bGUoKTsK
KworICAgIHJldHVybiBzdHlsZS0+Zm9udCgpLmZsb2F0V2lkdGgoc3ZnVGV4dFJ1bkZvcklubGlu
ZVRleHRCb3godGV4dC0+Y2hhcmFjdGVycygpICsgdGV4dEJveC0+c3RhcnQoKSArIHJhbmdlLnN0
YXJ0T2Zmc2V0LCByYW5nZS5lbmRPZmZzZXQgLSByYW5nZS5zdGFydE9mZnNldCwgc3R5bGUsIHRl
eHRCb3gsIDApKTsKK30KKworZmxvYXQgY3VtbXVsYXRlZEhlaWdodE9mSW5saW5lQm94Q2hhcmFj
dGVyUmFuZ2UoU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UmIHJhbmdlKQoreworICAgIEFTU0VS
VCghcmFuZ2UuaXNPcGVuKCkpOworICAgIEFTU0VSVChyYW5nZS5pc0Nsb3NlZCgpKTsKKyAgICBB
U1NFUlQocmFuZ2UuYm94LT5pc0lubGluZVRleHRCb3goKSk7CisKKyAgICBJbmxpbmVUZXh0Qm94
KiB0ZXh0Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCo+KHJhbmdlLmJveCk7CisgICAg
UmVuZGVyVGV4dCogdGV4dCA9IHRleHRCb3gtPnRleHRSZW5kZXJlcigpOworICAgIGNvbnN0IEZv
bnQmIGZvbnQgPSB0ZXh0LT5zdHlsZSgpLT5mb250KCk7CisKKyAgICByZXR1cm4gKHJhbmdlLmVu
ZE9mZnNldCAtIHJhbmdlLnN0YXJ0T2Zmc2V0KSAqIChmb250LmFzY2VudCgpICsgZm9udC5kZXNj
ZW50KCkpOworfQorCitUZXh0UnVuIHN2Z1RleHRSdW5Gb3JJbmxpbmVUZXh0Qm94KGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNv
bnN0IElubGluZVRleHRCb3gqIHRleHRCb3gsIGZsb2F0IHhQb3NpdGlvbikKK3sKKyAgICBBU1NF
UlQodGV4dEJveCk7CisgICAgQVNTRVJUKHN0eWxlKTsKKworICAgIFRleHRSdW4gcnVuKGNoYXJh
Y3RlcnMsIGxlbmd0aCwgZmFsc2UsIHN0YXRpY19jYXN0PGludD4oeFBvc2l0aW9uKSwgdGV4dEJv
eC0+dG9BZGQoKSwgdGV4dEJveC0+ZGlyZWN0aW9uKCkgPT0gUlRMLCB0ZXh0Qm94LT5tX2Rpck92
ZXJyaWRlIHx8IHN0eWxlLT52aXN1YWxseU9yZGVyZWQoKSk7CisKKyNpZiBFTkFCTEUoU1ZHX0ZP
TlRTKQorICAgIHJ1bi5zZXRSZWZlcmVuY2luZ1JlbmRlck9iamVjdCh0ZXh0Qm94LT50ZXh0UmVu
ZGVyZXIoKS0+cGFyZW50KCkpOworI2VuZGlmCisKKyAgICAvLyBXZSBoYW5kbGUgbGV0dGVyICYg
d29yZCBzcGFjaW5nIG91cnNlbHZlcworICAgIHJ1bi5kaXNhYmxlU3BhY2luZygpOworICAgIHJl
dHVybiBydW47Cit9CisKK2Zsb2F0IGNhbGN1bGF0ZUNTU0tlcm5pbmcoY29uc3QgUmVuZGVyU3R5
bGUqIHN0eWxlKQoreworICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZS0+Zm9udCgpOworICAg
IGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlLT5zdmdTdHlsZSgpOworCisg
ICAgZmxvYXQga2VybmluZyA9IDAuMGY7CisgICAgaWYgKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmlt
aXRpdmUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHN2Z1N0eWxlLT5rZXJuaW5n
KCkpKSB7CisgICAgICAgIGtlcm5pbmcgPSBwcmltaXRpdmUtPmdldEZsb2F0VmFsdWUoKTsKKwor
ICAgICAgICBpZiAocHJpbWl0aXZlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QRVJDRU5UQUdFICYmIGZvbnQucGl4ZWxTaXplKCkgPiAwKQorICAgICAgICAgICAg
a2VybmluZyA9IGtlcm5pbmcgLyAxMDAuMGYgKiBmb250LnBpeGVsU2l6ZSgpOworICAgIH0KKwor
ICAgIHJldHVybiBrZXJuaW5nOworfQorCitib29sIGFwcGx5U1ZHS2VybmluZyhTVkdDaGFyYWN0
ZXJMYXlvdXRJbmZvJiBpbmZvLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIFNWR0xhc3RHbHlw
aEluZm8mIGxhc3RHbHlwaCwgY29uc3QgU3RyaW5nJiB1bmljb2RlU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGdseXBoTmFtZSwgYm9vbCBpc1ZlcnRpY2FsVGV4dCkKK3sKKyNpZiBFTkFCTEUoU1ZHX0ZP
TlRTKQorICAgIGZsb2F0IGtlcm5pbmcgPSAwLjBmOworCisgICAgY29uc3QgRm9udCYgZm9udCA9
IHN0eWxlLT5mb250KCk7CisgICAgaWYgKCFmb250LmlzU1ZHRm9udCgpKSB7CisgICAgICAgIGxh
c3RHbHlwaC5pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBTVkdGb250RWxlbWVudCogc3ZnRm9udCA9IGZvbnQuc3ZnRm9udCgpOworICAgIEFTU0VS
VChzdmdGb250KTsKKworICAgIGlmIChsYXN0R2x5cGguaXNWYWxpZCkgeworICAgICAgICBpZiAo
aXNWZXJ0aWNhbFRleHQpCisgICAgICAgICAgICBrZXJuaW5nID0gc3ZnRm9udC0+dmVydGljYWxL
ZXJuaW5nRm9yUGFpck9mU3RyaW5nc0FuZEdseXBocyhsYXN0R2x5cGgudW5pY29kZSwgbGFzdEds
eXBoLmdseXBoTmFtZSwgdW5pY29kZVN0cmluZywgZ2x5cGhOYW1lKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAga2VybmluZyA9IHN2Z0ZvbnQtPmhvcml6b250YWxLZXJuaW5nRm9yUGFpck9m
U3RyaW5nc0FuZEdseXBocyhsYXN0R2x5cGgudW5pY29kZSwgbGFzdEdseXBoLmdseXBoTmFtZSwg
dW5pY29kZVN0cmluZywgZ2x5cGhOYW1lKTsKKyAgICB9CisKKyAgICBsYXN0R2x5cGgudW5pY29k
ZSA9IHVuaWNvZGVTdHJpbmc7CisgICAgbGFzdEdseXBoLmdseXBoTmFtZSA9IGdseXBoTmFtZTsK
KyAgICBsYXN0R2x5cGguaXNWYWxpZCA9IHRydWU7CisgICAga2VybmluZyAqPSBzdHlsZS0+Zm9u
dCgpLnNpemUoKSAvIHN0eWxlLT5mb250KCkucHJpbWFyeUZvbnQoKS0+dW5pdHNQZXJFbSgpOwor
CisgICAgaWYgKGtlcm5pbmcgIT0gMC4wZikgeworICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQp
CisgICAgICAgICAgICBpbmZvLmN1cnkgLT0ga2VybmluZzsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgaW5mby5jdXJ4IC09IGtlcm5pbmc7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGluZm8pOworICAgIFVOVVNFRF9QQVJBTShpdGVtKTsK
KyAgICBVTlVTRURfUEFSQU0obGFzdEdseXBoKTsKKyAgICBVTlVTRURfUEFSQU0odW5pY29kZVN0
cmluZyk7CisgICAgVU5VU0VEX1BBUkFNKGdseXBoTmFtZSk7CisjZW5kaWYKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdUZXh0
TGF5b3V0VXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHVGV4
dExheW91dFV0aWxpdGllcy5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZH
VGV4dExheW91dFV0aWxpdGllcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkwIEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAwNyBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBTVkdUZXh0TGF5b3V0VXRpbGl0aWVz
X2gKKyNkZWZpbmUgU1ZHVGV4dExheW91dFV0aWxpdGllc19oCisKKyNpZiBFTkFCTEUoU1ZHKQor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgRm9udDsK
K2NsYXNzIElubGluZVRleHRCb3g7CitjbGFzcyBSZW5kZXJPYmplY3Q7CitjbGFzcyBSZW5kZXJT
dHlsZTsKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlOworY2xhc3MgU1ZHUmVuZGVyU3R5bGU7Citj
bGFzcyBUZXh0UnVuOworCitzdHJ1Y3QgU1ZHQ2hhcjsKK3N0cnVjdCBTVkdDaGFyYWN0ZXJMYXlv
dXRJbmZvOworc3RydWN0IFNWR0lubGluZUJveENoYXJhY3RlclJhbmdlOworCitlbnVtIFNWR1Rl
eHRQYWludFN1YnBoYXNlIHsKKyAgICBTVkdUZXh0UGFpbnRTdWJwaGFzZUJhY2tncm91bmQsCisg
ICAgU1ZHVGV4dFBhaW50U3VicGhhc2VHbHlwaEZpbGwsCisgICAgU1ZHVGV4dFBhaW50U3VicGhh
c2VHbHlwaEZpbGxTZWxlY3Rpb24sCisgICAgU1ZHVGV4dFBhaW50U3VicGhhc2VHbHlwaFN0cm9r
ZSwKKyAgICBTVkdUZXh0UGFpbnRTdWJwaGFzZUdseXBoU3Ryb2tlU2VsZWN0aW9uLAorICAgIFNW
R1RleHRQYWludFN1YnBoYXNlRm9yZWdyb3VuZAorfTsKKworc3RydWN0IFNWR1RleHRQYWludElu
Zm8geworICAgIFNWR1RleHRQYWludEluZm8oKQorICAgICAgICA6IGFjdGl2ZVBhaW50aW5nUmVz
b3VyY2UoMCkKKyAgICAgICAgLCBzdWJwaGFzZShTVkdUZXh0UGFpbnRTdWJwaGFzZUJhY2tncm91
bmQpCisgICAgeworICAgIH0KKworICAgIFJlbmRlclNWR1Jlc291cmNlKiBhY3RpdmVQYWludGlu
Z1Jlc291cmNlOworICAgIFNWR1RleHRQYWludFN1YnBoYXNlIHN1YnBoYXNlOworfTsKKworc3Ry
dWN0IFNWR0xhc3RHbHlwaEluZm8geworICAgIFNWR0xhc3RHbHlwaEluZm8oKQorICAgICAgICA6
IGlzVmFsaWQoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIGJvb2wgaXNWYWxpZDsKKyAgICBT
dHJpbmcgdW5pY29kZTsKKyAgICBTdHJpbmcgZ2x5cGhOYW1lOworfTsKKworYm9vbCBpc1ZlcnRp
Y2FsV3JpdGluZ01vZGUoY29uc3QgU1ZHUmVuZGVyU3R5bGUqKTsKK2Zsb2F0IGFsaWdubWVudEJh
c2VsaW5lVG9TaGlmdChib29sIGlzVmVydGljYWxUZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHRl
eHQsIGNvbnN0IEZvbnQmKTsKK2Zsb2F0IGdseXBoT3JpZW50YXRpb25Ub0FuZ2xlKGNvbnN0IFNW
R1JlbmRlclN0eWxlKiwgYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgVUNoYXImKTsKK2Zsb2F0
IGFwcGx5R2x5cGhBZHZhbmNlQW5kU2hpZnRSZXNwZWN0aW5nT3JpZW50YXRpb24oYm9vbCBpc1Zl
cnRpY2FsVGV4dCwgZmxvYXQgb3JpZW50YXRpb25BbmdsZSwgZmxvYXQgZ2x5cGhXaWR0aCwgZmxv
YXQgZ2x5cGhIZWlnaHQsIGNvbnN0IEZvbnQmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTVkdDaGFyJiwgZmxvYXQmIHhPcmllbnRhdGlvblNo
aWZ0LCBmbG9hdCYgeU9yaWVudGF0aW9uU2hpZnQpOworRmxvYXRQb2ludCB0b3BMZWZ0UG9zaXRp
b25PZkNoYXJhY3RlclJhbmdlKFZlY3RvcjxTVkdDaGFyPjo6aXRlcmF0b3Igc3RhcnQsIFZlY3Rv
cjxTVkdDaGFyPjo6aXRlcmF0b3IgZW5kKTsKK2Zsb2F0IGN1bW11bGF0ZWRXaWR0aE9mSW5saW5l
Qm94Q2hhcmFjdGVyUmFuZ2UoU1ZHSW5saW5lQm94Q2hhcmFjdGVyUmFuZ2UmKTsKK2Zsb2F0IGN1
bW11bGF0ZWRIZWlnaHRPZklubGluZUJveENoYXJhY3RlclJhbmdlKFNWR0lubGluZUJveENoYXJh
Y3RlclJhbmdlJik7CitUZXh0UnVuIHN2Z1RleHRSdW5Gb3JJbmxpbmVUZXh0Qm94KGNvbnN0IFVD
aGFyKiwgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBJbmxpbmVUZXh0Qm94
KiwgZmxvYXQgeFBvcyk7CisKK2Zsb2F0IGNhbGN1bGF0ZUNTU0tlcm5pbmcoY29uc3QgUmVuZGVy
U3R5bGUqKTsKK2Jvb2wgYXBwbHlTVkdLZXJuaW5nKFNWR0NoYXJhY3RlckxheW91dEluZm8mLCBj
b25zdCBSZW5kZXJTdHlsZSosIFNWR0xhc3RHbHlwaEluZm8mLCBjb25zdCBTdHJpbmcmIHVuaWNv
ZGVTdHJpbmcsIGNvbnN0IFN0cmluZyYgZ2x5cGhOYW1lLCBib29sIGlzVmVydGljYWxUZXh0KTsK
KworfQorCisjZW5kaWYKKyNlbmRpZgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTkxNDcpCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMC0w
NS0xMSAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGJ1aWxkTGF5b3V0
SW5mb3JtYXRpb25Gb3JUZXh0Qm94KCkgZnJvbSBTVkdSb290SW5saW5lQm94IGluIFNWR0lubGlu
ZVRleHRCb3ggd2hlcmUgaXQgYmVsb25ncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Mzg3OTkKKworICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvdGV4
dC90ZXh0LWhrZXJuLW9uLXZlcnRpY2FsLXRleHQtZXhwZWN0ZWQuY2hlY2tzdW06IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9zdmcvdGV4dC90ZXh0LWhrZXJuLW9uLXZlcnRpY2FsLXRl
eHQtZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL3RleHQv
dGV4dC1oa2Vybi1vbi12ZXJ0aWNhbC10ZXh0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vbWFjL3N2Zy90ZXh0L3RleHQtdmtlcm4tb24taG9yaXpvbnRhbC10ZXh0LWV4
cGVjdGVkLmNoZWNrc3VtOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL3RleHQv
dGV4dC12a2Vybi1vbi1ob3Jpem9udGFsLXRleHQtZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvc3ZnL3RleHQvdGV4dC12a2Vybi1vbi1ob3Jpem9udGFsLXRleHQt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvdGV4dC90ZXh0LWhrZXJuLW9uLXZl
cnRpY2FsLXRleHQuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvdGV4dC90ZXh0LXZrZXJuLW9u
LWhvcml6b250YWwtdGV4dC5zdmc6IEFkZGVkLgorCiAyMDEwLTA1LTExICBab2x0YW4gSGVyY3pl
ZyAgPHpoZXJjemVnQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGlyayBTY2h1
bHplLgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy90ZXh0L3RleHQtaGtlcm4t
b24tdmVydGljYWwtdGV4dC1leHBlY3RlZC5jaGVja3N1bQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvc3ZnL3RleHQvdGV4dC1oa2Vybi1vbi12ZXJ0aWNhbC10ZXh0LWV4
cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L3N2Zy90ZXh0L3RleHQtaGtlcm4tb24tdmVydGljYWwtdGV4dC1leHBlY3RlZC5jaGVja3N1bQko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorMzA1MmUzZjI1ODBhNjBmZDIyZjhiY2FlOGRjN2Q2
NmQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvc3ZnL3RleHQvdGV4dC1oa2Vybi1vbi12ZXJ0aWNhbC10ZXh0LWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvc3ZnL3RleHQvdGV4dC1oa2Vy
bi1vbi12ZXJ0aWNhbC10ZXh0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9zdmcvdGV4dC90ZXh0LWhrZXJuLW9uLXZlcnRpY2FsLXRleHQtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKK2xheWVyIGF0ICgwLDApIHNp
emUgODAweDYwMAorICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAorbGF5ZXIgYXQg
KDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlclNWR1Jvb3Qge3N2Z30gYXQgKDAsMCkgc2l6ZSA4
MDB4NjAwCisgICAgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyIHtkZWZzfSBhdCAoMCwwKSBzaXpl
IDB4MAorICAgIFJlbmRlclNWR0NvbnRhaW5lciB7Z30gYXQgKDEwLDkwKSBzaXplIDIweDgwCisg
ICAgICBSZW5kZXJTVkdUZXh0IHt0ZXh0fSBhdCAoLTUsOCkgc2l6ZSAxMHg0MCBjb250YWlucyAx
IGNodW5rKHMpCisgICAgICAgIFJlbmRlclNWR0lubGluZVRleHQgeyN0ZXh0fSBhdCAoMCwtOCkg
c2l6ZSAxMHg0MAorICAgICAgICAgIGNodW5rIDEgKHZlcnRpY2FsKSB0ZXh0IHJ1biAxIGF0ICgt
NS4wMCw4LjAwKSBzdGFydE9mZnNldCAwIGVuZE9mZnNldCA0IGhlaWdodCA0MC4wMDogIjEyMzQi
CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvc3ZnL3RleHQvdGV4dC12a2Vybi1vbi1o
b3Jpem9udGFsLXRleHQtZXhwZWN0ZWQuY2hlY2tzdW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL3N2Zy90ZXh0L3RleHQtdmtlcm4tb24taG9yaXpvbnRhbC10ZXh0LWV4
cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L3N2Zy90ZXh0L3RleHQtdmtlcm4tb24taG9yaXpvbnRhbC10ZXh0LWV4cGVjdGVkLmNoZWNrc3Vt
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitmODJiMDU2MTdiOWM0MmQ4NmZhYmZjMTBkNDJj
OGY0MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9zdmcvdGV4dC90ZXh0LXZrZXJuLW9uLWhvcml6b250YWwtdGV4dC1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy90ZXh0L3RleHQt
dmtlcm4tb24taG9yaXpvbnRhbC10ZXh0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9zdmcvdGV4dC90ZXh0LXZrZXJuLW9uLWhvcml6b250YWwt
dGV4dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOCBAQAorbGF5ZXIgYXQg
KDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlclZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCits
YXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyU1ZHUm9vdCB7c3ZnfSBhdCAoMCww
KSBzaXplIDgwMHg2MDAKKyAgICBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIge2RlZnN9IGF0ICgw
LDApIHNpemUgMHgwCisgICAgUmVuZGVyU1ZHVGV4dCB7dGV4dH0gYXQgKDAsMCkgc2l6ZSAyNXgx
MCBjb250YWlucyAxIGNodW5rKHMpCisgICAgICBSZW5kZXJTVkdJbmxpbmVUZXh0IHsjdGV4dH0g
YXQgKDAsLTgpIHNpemUgMjV4MTAKKyAgICAgICAgY2h1bmsgMSB0ZXh0IHJ1biAxIGF0ICgwLjAw
LDAuMDApIHN0YXJ0T2Zmc2V0IDAgZW5kT2Zmc2V0IDQgd2lkdGggMjUuMDA6ICIxMjM0IgpJbmRl
eDogTGF5b3V0VGVzdHMvc3ZnL3RleHQvdGV4dC1oa2Vybi1vbi12ZXJ0aWNhbC10ZXh0LnN2Zwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcvdGV4dC90ZXh0LWhrZXJuLW9uLXZlcnRpY2Fs
LXRleHQuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL3RleHQvdGV4dC1oa2Vy
bi1vbi12ZXJ0aWNhbC10ZXh0LnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNyBAQAorPHN2
ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8v
d3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KKzxkZWZzPgorPGZvbnQ+CisgICAgPGZvbnQtZmFjZSBm
b250LWZhbWlseT0ic3ZnRm9udCIgdW5pdHMtcGVyLWVtPSIxMDAwIi8+CisgICAgPG1pc3Npbmct
Z2x5cGggaG9yaXotYWR2LXg9IjgwMCIgZD0iTSAwIDAgTCA3NTAgMCBMIDc1MCAxMDAwIEwgMCAx
MDAwIFoiLz4KKyAgICA8Z2x5cGggdW5pY29kZT0iMSIgZ2x5cGgtbmFtZT0iZ2xfMSIgaG9yaXot
YWR2LXg9IjI1MCIgZD0iTSAwIDAgTCAyNTAgMCBMIDI1MCAyNTAgTCAwIDI1MCBaIi8+CisgICAg
PGdseXBoIHVuaWNvZGU9IjIiIGdseXBoLW5hbWU9ImdsXzIiIGhvcml6LWFkdi14PSI1MDAiIGQ9
Ik0gMCAwIEwgNTAwIDAgTCA1MDAgNTAwIEwgMCA1MDAgWiIvPgorICAgIDxnbHlwaCB1bmljb2Rl
PSIzIiBnbHlwaC1uYW1lPSJnbF8zIiBob3Jpei1hZHYteD0iNzUwIiBkPSJNIDAgMCBMIDc1MCAw
IEwgNzUwIDc1MCBMIDAgNzUwIFoiLz4KKyAgICA8Z2x5cGggdW5pY29kZT0iNCIgZ2x5cGgtbmFt
ZT0iZ2xfNCIgaG9yaXotYWR2LXg9IjEwMDAiIGQ9Ik0gMCAwIEwgMTAwMCAwIEwgMTAwMCAxMDAw
IEwgMCAxMDAwIFoiLz4KKwk8IS0tIFNob3VsZCBoYXZlIG5vIGVmZmVjdCBvbiB2ZXJ0aWNhbCB0
ZXh0IC0tPgorICAgIDxoa2VybiBnMT0iZ2xfMSxnbF8yLGdsXzMiIGcyPSJnbF8yLGdsXzMsZ2xf
NCIgaz0iLTUwMDAiLz4KKzwvZm9udD4KKzwvZGVmcz4KKzxnIHdyaXRpbmctbW9kZT0idGIiIGds
eXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsPSIwIj4KKyAgICA8dGV4dCBmb250LWZhbWlseT0ic3Zn
Rm9udCIgZm9udC1zaXplPSIxMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjAsIDkwKSBzY2FsZSgy
KSI+MTIzNDwvdGV4dD4KKzwvZz4KKzwvc3ZnPgpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL3RleHQv
dGV4dC12a2Vybi1vbi1ob3Jpem9udGFsLXRleHQuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3N2Zy90ZXh0L3RleHQtdmtlcm4tb24taG9yaXpvbnRhbC10ZXh0LnN2ZwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL3N2Zy90ZXh0L3RleHQtdmtlcm4tb24taG9yaXpvbnRhbC10ZXh0
LnN2ZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPHN2ZyB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs
aW5rIj4KKzxkZWZzPgorPGZvbnQ+CisgICAgPGZvbnQtZmFjZSBmb250LWZhbWlseT0ic3ZnRm9u
dCIgdW5pdHMtcGVyLWVtPSIxMDAwIi8+CisgICAgPG1pc3NpbmctZ2x5cGggaG9yaXotYWR2LXg9
IjgwMCIgZD0iTSAwIDAgTCA3NTAgMCBMIDc1MCAxMDAwIEwgMCAxMDAwIFoiLz4KKyAgICA8Z2x5
cGggdW5pY29kZT0iMSIgZ2x5cGgtbmFtZT0iZ2xfMSIgaG9yaXotYWR2LXg9IjI1MCIgZD0iTSAw
IDAgTCAyNTAgMCBMIDI1MCAyNTAgTCAwIDI1MCBaIi8+CisgICAgPGdseXBoIHVuaWNvZGU9IjIi
IGdseXBoLW5hbWU9ImdsXzIiIGhvcml6LWFkdi14PSI1MDAiIGQ9Ik0gMCAwIEwgNTAwIDAgTCA1
MDAgNTAwIEwgMCA1MDAgWiIvPgorICAgIDxnbHlwaCB1bmljb2RlPSIzIiBnbHlwaC1uYW1lPSJn
bF8zIiBob3Jpei1hZHYteD0iNzUwIiBkPSJNIDAgMCBMIDc1MCAwIEwgNzUwIDc1MCBMIDAgNzUw
IFoiLz4KKyAgICA8Z2x5cGggdW5pY29kZT0iNCIgZ2x5cGgtbmFtZT0iZ2xfNCIgaG9yaXotYWR2
LXg9IjEwMDAiIGQ9Ik0gMCAwIEwgMTAwMCAwIEwgMTAwMCAxMDAwIEwgMCAxMDAwIFoiLz4KKyAg
ICA8IS0tIFNob3VsZCBoYXZlIG5vIGVmZmVjdCBvbiBob3Jpem9udGFsIHRleHQgLS0+CisgICAg
PHZrZXJuIGcxPSJnbF8xLGdsXzIsZ2xfMyIgZzI9ImdsXzIsZ2xfMyxnbF80IiBrPSItNTAwMCIv
PgorPC9mb250PgorPC9kZWZzPgorPHRleHQgZm9udC1mYW1pbHk9InN2Z0ZvbnQiIGZvbnQtc2l6
ZT0iMTAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUsIDQ1KSBzY2FsZSgyKSI+MTIzNDwvdGV4dD4K
Kzwvc3ZnPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL3N2Zy90ZXh0L3RleHQtaGtl
cm4tb24tdmVydGljYWwtdGV4dC1leHBlY3RlZC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxh
eTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0
aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL3N2Zy90ZXh0L3RleHQtaGtlcm4tb24tdmVydGljYWwtdGV4dC1leHBlY3RlZC5wbmcK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUF5QUFBQUpZQ0FZQUFBQ2Fkb0p3QUFBRE8y
bERRMUJKUTBNZ1VISnZabWxzWlFBQWVBR0YKbEV0bzFGQVVoditNS1lLMGdxaTFGcFRnUW91MEpU
N1FpbERiYWJYV2tYRVkrOUFpeURSelp4cE5NekdaR1IrSVNFSGMrVnFLR3grSQppeXJpUXJwUWNL
VUxrVUxyYTFFRWNhVWlpRUkzVXNiL0p1MU1LbFl2SlBseXpuL1A2NFlBVlE5VGptTkZOR0RZenJ2
SnJxaDI2UENBCnRuZ0NWYWhCTmJoU2h1ZTBKeEw3ZmFaV1B1ZXY2YmRRcEdXeVNjYUs5UjJZK0xS
dDlmMUxqMkx2NjU3MitwNzUrbmx2TlM0VEFvcEcKNjRwc3dGc2xEd2E4Vi9MSnZKT241b2hrWXlp
VkpqdmtScmNuMlVHK1FWNmFEZkZnaU5QQ000Q3FObXB5aHVNeVRtUUZ1YVZvWkdYTQpVYkp1cDAy
YlBDWHRhYzhZcG9iOVJuN0lXZERHbFk4QnJXdUFSUzhydGdFUEdMMExyRnBmc1RYVUFTdjdnYkV0
RmR2UHBEOGZwWGJjCnkyelo3SWRUcXFPczZVT3A5SE05c1BnYU1ITzFWUHAxcTFTYXVjMGNyT09a
WlJUY29xOWxZY29ySUtnMzJNMzR5VGxhaUlPZWZGVUwKY0pOejdGOEN4QzRBMXo4Q0d4NEF5eDhE
aVJxZ1p3Y2k1OWx1Y09YRktjNEY2TWc1cDEwek81VFhOdXY2ZHEyZFJ5dTBidHRvYnRSUwpscVg1
TGs5emhTZmNva2czWTlncWNNNytXc1o3dGJCN0QvTEovaUxuaExkN2xwV1JkS3FUczBRejIvcVNG
cDI3eVkza2V4bHpUemU1CmdkZFV4dDNURzdDeTBjeDM5d1FjNmJPdE9NOUZhaUoxOW1EOEFKbnhG
ZFhKUitVOEpJOTR4WU15cG04L2x0cVhJTmZUbmp5ZWkwbE4KTGZlMm5SbnE0UmxKVnF3elF4M3hX
WDd0RnBJeTd6cHE3amlXLzgyenRzaHpISVlGQVJNMjd6WTBKTkdGS0pyZ3dFVU9HWHBNS2t4YQpw
Vi9RYXNMRDhiOHFMU1RLdXl3cXV2Q1plejc3ZTA2Z3dOMHlmaCtpY1l3MGxpTm8ranY5bS81R3Y2
bmYwYjllcVM4MFZEd2o3bEhUCkdMLzhuWEZsWmxtTmpCdlVLT1BMbW9MNEJxdHRwOWRDbHRaaFhr
RlBYbG5mRks0dVkxK3BMM3MwbVVOY2pFK0h1aFNoVEUwWVpEeloKdGV5K1NMYjRKdng4YzlrV21o
NjFMODQrcWF2a2VxT09IWm1zZm5FMlhBMXIvN09yWU5LeXEvRGtqWkF1UEd1aHJsVTNxZDFxaTdv
RAptcnBMYlZOYjFVNis3VlQzbDNmMGNsWW1Uckp1bDlXbjJJT04wL1JXVHJveVd3VC9GbjR4L0M5
MUNWdTRwcUhKZjJqQ3pXVk1TL2lPCjRQWWZkMGo1TC93TkFZVVZEWHhMT3pzQUFDQUFTVVJCVkhn
QjdkMUJqdVZHa2tYUmpvYjJ2K1hvcnByV0JTcWcwRFB3TTQrR2hpOXoKOHRBbkY0bEVmbjMvLzMv
LzR6OENCQWdRSUVDQUFBRUNCQWdjQ1B6dndSbU9JRUNBQUFFQ0JBZ1FJRUNBd0w4RkJJaUxRSUFB
QVFJRQpDQkFnUUlEQW1ZQUFPYU4yRUFFQ0JBZ1FJRUNBQUFFQ0FzUWRJRUNBQUFFQ0JBZ1FJRURn
VEVDQW5GRTdpQUFCQWdRSUVDQkFnQUFCCkFlSU9FQ0JBZ0FBQkFnUUlFQ0J3SmlCQXpxZ2RSSUFB
QVFJRUNCQWdRSUNBQUhFSENCQWdRSUFBQVFJRUNCQTRFeEFnWjlRT0lrQ0EKQUFFQ0JBZ1FJRUJB
Z0xnREJBZ1FJRUNBQUFFQ0JBaWNDUWlRTTJvSEVTQkFnQUFCQWdRSUVDQWdRTndCQWdRSUVDQkFn
QUFCQWdUTwpCQVRJR2JXRENCQWdRSUFBQVFJRUNCQVFJTzRBQVFJRUNCQWdRSUFBQVFKbkFnTGtq
TnBCQkFnUUlFQ0FBQUVDQkFnSUVIZUFBQUVDCkJBZ1FJRUNBQUlFekFRRnlSdTBnQWdRSUVDQkFn
QUFCQWdRRWlEdEFnQUFCQWdRSUVDQkFnTUNaZ0FBNW8zWVFBUUlFQ0JBZ1FJQUEKQVFJQ3hCMGdR
SUFBQVFJRUNCQWdRT0JNUUlDY1VUdUlBQUVDQkFnUUlFQ0FBQUVCNGc0UUlFQ0FBQUVDQkFnUUlI
QW1JRURPcUIxRQpnQUFCQWdRSUVDQkFnSUFBY1FjSUVDQkFnQUFCQWdRSUVEZ1RFQ0JuMUE0aVFJ
QUFBUUlFQ0JBZ1FFQ0F1QU1FQ0JBZ1FJQUFBUUlFCkNKd0pDSkF6YWdjUklFQ0FBQUVDQkFnUUlD
QkEzQUVDQkFnUUlFQ0FBQUVDQk00RUJNZ1p0WU1JRUNCQWdBQUJBZ1FJRUJBZzdnQUIKQWdRSUVD
QkFnQUFCQW1jQ0F1U00ya0VFQ0JBZ1FJQUFBUUlFQ0FnUWQ0QUFBUUlFQ0JBZ1FJQUFnVE1CQVhK
RzdTQUNCQWdRSUVDQQpBQUVDQkFTSU8wQ0FBQUVDQkFnUUlFQ0F3Sm1BQURtamRoQUJBZ1FJRUNC
QWdBQUJBZ0xFSFNCQWdBQUJBZ1FJRUNCQTRFeEFnSnhSCk80Z0FBUUlFQ0JBZ1FJQUFBUUhpRGhB
Z1FJQUFBUUlFQ0JBZ2NDWWdRTTZvSFVTQUFBRUNCQWdRSUVDQWdBQnhCd2dRSUVDQUFBRUMKQkFn
UU9CTVFJR2ZVRGlKQWdBQUJBZ1FJRUNCQVFJQzRBd1FJRUNCQWdBQUJBZ1FJbkFrSWtETnFCeEVn
UUlBQUFRSUVDQkFnSUVEYwpBUUlFQ0JBZ1FJQUFBUUlFemdRRXlCbTFnd2dRSUVDQUFBRUNCQWdR
RUNEdUFBRUNCQWdRSUVDQUFBRUNad0lDNUl6YVFRUUlFQ0JBCmdBQUJBZ1FJQ0JCM2dBQUJBZ1FJ
RUNCQWdBQ0JNd0VCY2tidElBSUVDQkFnUUlBQUFRSUVCSWc3UUlBQUFRSUVDQkFnUUlEQW1ZQUEK
T2FOMkVBRUNCQWdRSUVDQUFBRUNBc1FkSUVDQUFBRUNCQWdRSUVEZ1RFQ0FuRkU3aUFBQkFnUUlF
Q0JBZ0FBQkFlSU9FQ0JBZ0FBQgpBZ1FJRUNCd0ppQkF6cWdkUklBQUFRSUVDQkFnUUlDQUFIRUhD
QkFnUUlBQUFRSUVDQkE0RXhBZ1o5UU9Ja0NBQUFFQ0JBZ1FJRUJBCmdMZ0RCQWdRSUVDQUFBRUNC
QWljQ1FpUU0yb0hFU0JBZ0FBQkFnUUlFQ0FnUU53QkFnUUlFQ0JBZ0FBQkFnVE9CQVRJR2JXRENC
QWcKUUlBQUFRSUVDQkFRSU80QUFRSUVDQkFnUUlBQUFRSm5BZ0xrak5wQkJBZ1FJRUNBQUFFQ0JB
Z0lFSGVBQUFFQ0JBZ1FJRUNBQUlFegpBUUZ5UnUwZ0FnUUlFQ0JBZ0FBQkFnUUVpRHRBZ0FBQkFn
UUlFQ0JBZ01DWmdBQTVvM1lRQVFJRUNCQWdRSUFBQVFJQ3hCMGdRSUFBCkFRSUVDQkFnUU9CTVFJ
Q2NVVHVJQUFFQ0JBZ1FJRUNBQUFFQjRnNFFJRUNBQUFFQ0JBZ1FJSEFtSUVET3FCMUVnQUFCQWdR
SUVDQkEKZ0lBQWNRY0lFQ0JBZ0FBQkFnUUlFRGdURUNCbjFBNGlRSUFBQVFJRUNCQWdRRUNBdUFN
RUNCQWdRSUFBQVFJRUNKd0pDSkF6YWdjUgpJRUNBQUFFQ0JBZ1FJQ0JBM0FFQ0JBZ1FJRUNBQUFF
Q0JNNEVCTWdadFlNSUVDQkFnQUFCQWdRSUVCQWc3Z0FCQWdRSUVDQkFnQUFCCkFtY0NBdVNNMmtF
RUNCQWdRSUFBQVFJRUNBZ1FkNEFBQVFJRUNCQWdRSUFBZ1RNQkFYSkc3U0FDQkFnUUlFQ0FBQUVD
QkFTSU8wQ0EKQUFFQ0JBZ1FJRUNBd0ptQUFEbWpkaEFCQWdRSUVDQkFnQUFCQWdMRUhTQkFnQUFC
QWdRSUVDQkE0RXhBZ0p4Uk80Z0FBUUlFQ0JBZwpRSUFBQVFIaURoQWdRSUFBQVFJRUNCQWdjQ1ln
UU02b0hVU0FBQUVDQkFnUUlFQ0FnQUJ4QndnUUlFQ0FBQUVDQkFnUU9CTVFJR2ZVCkRpSkFnQUFC
QWdRSUVDQkFRSUM0QXdRSUVDQkFnQUFCQWdRSW5Ba0lrRE5xQnhFZ1FJQUFBUUlFQ0JBZ0lFRGNB
UUlFQ0JBZ1FJQUEKQVFJRXpnUUV5Qm0xZ3dnUUlFQ0FBQUVDQkFnUUVDRHVBQUVDQkFnUUlFQ0FB
QUVDWndJQzVJemFRUVFJRUNCQWdBQUJBZ1FJQ0JCMwpnQUFCQWdRSUVDQkFnQUNCTXdFQmNrYnRJ
QUlFQ0JBZ1FJQUFBUUlFQklnN1FJQUFBUUlFQ0JBZ1FJREFtWUFBT2FOMkVBRUNCQWdRCklFQ0FB
QUVDQXNRZElFQ0FBQUVDQkFnUUlFRGdURUNBbkZFN2lBQUJBZ1FJRUNCQWdBQUJBZUlPRUNCQWdB
QUJBZ1FJRUNCd0ppQkEKenFnZFJJQUFBUUlFQ0JBZ1FJQ0FBSEVIQ0JBZ1FJQUFBUUlFQ0JBNEV4
QWdaOVFPSWtDQUFBRUNCQWdRSUVCQWdMZ0RCQWdRSUVDQQpBQUVDQkFpY0NRaVFNMm9IRVNCQWdB
QUJBZ1FJRUNBZ1FOd0JBZ1FJRUNCQWdBQUJBZ1RPQkFUSUdiV0RDQkFnUUlBQUFRSUVDQkFRCklP
NEFBUUlFQ0JBZ1FJQUFBUUpuQWdMa2pOcEJCQWdRSUVDQUFBRUNCQWdJRUhlQUFBRUNCQWdRSUVD
QUFJRXpBUUZ5UnUwZ0FnUUkKRUNCQWdBQUJBZ1FFaUR0QWdBQUJBZ1FJRUNCQWdNQ1pnQUE1bzNZ
UUFRSUVDQkFnUUlBQUFRSUN4QjBnUUlBQUFRSUVDQkFnUU9CTQo0SzkvNnFTdnI2Ly9XUFg5L2Yw
Zk13TUNCQWdRSUVDQUFBRUNCUDVjQVg4Qzh1ZCtlMjlPZ0FBQkFnUUlFQ0JBNEZ4QWdKeVRPNUFB
CkFRSUVDQkFnUUlEQW55c2dRUDdjYisvTkNSQWdRSUFBQVFJRUNKd0xDSkJ6Y2djU0lFQ0FBQUVD
QkFnUStITUYvckcvaE80dm5QKzUKbDhpYkV5QkFnQUFCQWdRSUVQaXBnRDhCK2FtVTN4RWdRSUFB
QVFJRUNCQWc4R3NCQWZKclFnc0lFQ0JBZ0FBQkFnUUlFUGlwZ0FENQpxWlRmRVNCQWdBQUJBZ1FJ
RUNEd2F3RUI4bXRDQ3dnUUlFQ0FBQUVDQkFnUStLbUFBUG1wbE44UklFQ0FBQUVDQkFnUUlQQnJB
UUh5CmEwSUxDQkFnUUlBQUFRSUVDQkQ0cVlBQSthbVUzeEVnUUlBQUFRSUVDQkFnOEdzQkFmSnJR
Z3NJRUNCQWdBQUJBZ1FJRVBpcGdBRDUKcVpUZkVTQkFnQUFCQWdRSUVDRHdhNEZmLzB2b1gxOWZQ
M29JLzFMNmo1ajhpQUFCQWdRSUVDQkFnTUNyQmZ3SnlLcy9yNWNqUUlBQQpBUUlFQ0JBZzhDd0JB
ZktzNytGcENCQWdRSUFBQVFJRUNMeGFRSUM4K3ZONk9RSUVDQkFnUUlBQUFRTFBFaEFnei9vZW5v
WUFBUUlFCkNCQWdRSURBcXdVRXlLcy9yNWNqUUlBQUFRSUVDQkFnOEN3QkFmS3M3K0ZwQ0JBZ1FJ
QUFBUUlFQ0x4YVFJQzgrdk42T1FJRUNCQWcKUUlBQUFRTFBFaEFnei9vZW5vWUFBUUlFQ0JBZ1FJ
REFxd1VFeUtzL3I1Y2pRSUFBQVFJRUNCQWc4Q3lCWC85TDZQNkY4MmQ5VUU5RApnQUFCQWdRSUVD
QkE0TWtDL2dUa3lWL0hzeEVnUUlBQUFRSUVDQkI0bVlBQWVka0g5VG9FQ0JBZ1FJQUFBUUlFbml3
Z1FKNzhkVHdiCkFRSUVDQkFnUUlBQWdaY0pDSkNYZlZDdlE0QUFBUUlFQ0JBZ1FPREpBbi83TDZG
L2ZYMzk3ZmZ5RjlmL05wMy9rUUFCQWdRSUVDQkEKZ01CSEMvZ1RrSS8rZkI2ZUFBRUNCQWdRSUVD
QXdHY0pDSkRQK2w2ZWxnQUJBZ1FJRUNCQWdNQkhDd2lRai81OEhwNEFBUUlFQ0JBZwpRSURBWndr
SWtNLzZYcDZXQUFFQ0JBZ1FJRUNBd0VjTENKQ1AvbndlbmdBQkFnUUlFQ0JBZ01CbkNRaVF6L3Bl
bnBZQUFRSUVDQkFnClFJREFSd3NJa0kvK2ZCNmVBQUVDQkFnUUlFQ0F3R2NKQ0pEUCtsNmVsZ0FC
QWdRSUVDQkFnTUJIQ3dpUWovNThIcDRBQVFJRUNCQWcKUUlEQVp3a0lrTS82WHA2V0FBRUNCQWdR
SUVDQXdFY0xDSkNQL253ZW5nQUJBZ1FJRUNCQWdNQm5DUWlRei9wZW5wWUFBUUlFQ0JBZwpRSURB
UndzSWtJLytmQjZlQUFFQ0JBZ1FJRUNBd0djSkNKRFArbDZlbGdBQkFnUUlFQ0JBZ01CSEMvejEw
NmYvK3ZyNjZVLy82Ky8rCnRldjcrL3UvL3M0UENCQWdRSUFBQVFJRUNCQjRsNEEvQVhuWDkvUTJC
QWdRSUVDQUFBRUNCQjR0SUVBZS9YazhIQUVDQkFnUUlFQ0EKQUlGM0NRaVFkMzFQYjBPQUFBRUNC
QWdRSUVEZzBRSUM1TkdmeDhNUklFQ0FBQUVDQkFnUWVKZUFBSG5YOS9RMkJBZ1FJRUNBQUFFQwpC
QjR0SUVBZS9YazhIQUVDQkFnUUlFQ0FBSUYzQ1FpUWQzMVBiME9BQUFFQ0JBZ1FJRURnMFFJQzVO
R2Z4OE1SSUVDQUFBRUNCQWdRCmVKZUFBSG5YOS9RMkJBZ1FJRUNBQUFFQ0JCNHRJRUFlL1hrOEhB
RUNCQWdRSUVDQUFJRjNDUWlRZDMxUGIwT0FBQUVDQkFnUUlFRGcKMFFJQzVOR2Z4OE1SSUVDQUFB
RUNCQWdRZUplQUFIblg5L1EyQkFnUUlFQ0FBQUVDQkI0dElFQWUvWGs4SEFFQ0JBZ1FJRUNBQUlG
MwpDUWlRZDMxUGIwT0FBQUVDQkFnUUlFRGcwUUlDNU5HZng4TVJJRUNBQUFFQ0JBZ1FlSmVBQUhu
WDkvUTJCQWdRSUVDQUFBRUNCQjR0CklFQWUvWGs4SEFFQ0JBZ1FJRUNBQUlGM0NRaVFkMzFQYjBP
QUFBRUNCQWdRSUVEZzBRSi8vZlRwdnIrL2YvcFR2eU5BZ0FBQkFnUUkKRUNCQWdFQUsrQk9RWkRF
a1FJQUFBUUlFQ0JBZ1FHQWhJRUFXcW5ZU0lFQ0FBQUVDQkFnUUlKQUNBaVJaREFrUUlFQ0FBQUVD
QkFnUQpXQWdJa0lXcW5RUUlFQ0JBZ0FBQkFnUUlwSUFBU1JaREFnUUlFQ0JBZ0FBQkFnUVdBZ0pr
b1dvbkFRSUVDQkFnUUlBQUFRSXBJRUNTCnhaQUFBUUlFQ0JBZ1FJQUFnWVdBQUZtbzJrbUFBQUVD
QkFnUUlFQ0FRQW9Ja0dReEpFQ0FBQUVDQkFnUUlFQmdJU0JBRnFwMkVpQkEKZ0FBQkFnUUlFQ0NR
QWdJa1dRd0pFQ0JBZ0FBQkFnUUlFRmdJQ0pDRnFwMEVDQkFnUUlBQUFRSUVDS1NBQUVrV1F3SUVD
QkFnUUlBQQpBUUlFRmdJQ1pLRnFKd0VDQkFnUUlFQ0FBQUVDS1NCQWtzV1FBQUVDQkFnUUlFQ0FB
SUdGZ0FCWnFOcEpnQUFCQWdRSUVDQkFnRUFLCkNKQmtNU1JBZ0FBQkFnUUlFQ0JBWUNFZ1FCYXFk
aElnUUlBQUFRSUVDQkFna0FJQ0pGa01DUkFnUUlBQUFRSUVDQkJZQ0FpUWhhcWQKQkFnUUlFQ0FB
QUVDQkFpa2dBQkpGa01DQkFnUUlFQ0FBQUVDQkJZQ0FtU2hhaWNCQWdRSUVDQkFnQUFCQWlrZ1FK
TEZrQUFCQWdRSQpFQ0JBZ0FDQmhZQUFXYWphU1lBQUFRSUVDQkFnUUlCQUNnaVFaREVrUUlBQUFR
SUVDQkFnUUdBaElFQVdxbllTSUVDQUFBRUNCQWdRCklKQUNBaVJaREFrUUlFQ0FBQUVDQkFnUVdB
Z0lrSVdxblFRSUVDQkFnQUFCQWdRSXBJQUFTUlpEQWdRSUVDQkFnQUFCQWdRV0FnSmsKb1dvbkFR
SUVDQkFnUUlBQUFRSXBJRUNTeFpBQUFRSUVDQkFnUUlBQWdZV0FBRm1vMmttQUFBRUNCQWdRSUVD
QVFBb0lrR1F4SkVDQQpBQUVDQkFnUUlFQmdJU0JBRnFwMkVpQkFnQUFCQWdRSUVDQ1FBZ0lrV1F3
SkVDQkFnQUFCQWdRSUVGZ0lDSkNGcXAwRUNCQWdRSUFBCkFRSUVDS1NBQUVrV1F3SUVDQkFnUUlB
QUFRSUVGZ0lDWktGcUp3RUNCQWdRSUVDQUFBRUNLU0JBa3NXUUFBRUNCQWdRSUVDQUFJR0YKZ0FC
WnFOcEpnQUFCQWdRSUVDQkFnRUFLQ0pCa01TUkFnQUFCQWdRSUVDQkFZQ0VnUUJhcWRoSWdRSUFB
QVFJRUNCQWdrQUlDSkZrTQpDUkFnUUlBQUFRSUVDQkJZQ0FpUWhhcWRCQWdRSUVDQUFBRUNCQWlr
Z0FCSkZrTUNCQWdRSUVDQUFBRUNCQllDQW1TaGFpY0JBZ1FJCkVDQkFnQUFCQWlrZ1FKTEZrQUFC
QWdRSUVDQkFnQUNCaFlBQVdhamFTWUFBQVFJRUNCQWdRSUJBQ2dpUVpERWtRSUFBQVFJRUNCQWcK
UUdBaElFQVdxbllTSUVDQUFBRUNCQWdRSUpBQ0FpUlpEQWtRSUVDQUFBRUNCQWdRV0FnSWtJV3Fu
UVFJRUNCQWdBQUJBZ1FJcElBQQpTUlpEQWdRSUVDQkFnQUFCQWdRV0FnSmtvV29uQVFJRUNCQWdR
SUFBQVFJcElFQ1N4WkFBQVFJRUNCQWdRSUFBZ1lXQUFGbW8ya21BCkFBRUNCQWdRSUVDQVFBb0lr
R1F4SkVDQUFBRUNCQWdRSUVCZ0lTQkFGcXAyRWlCQWdBQUJBZ1FJRUNDUUFnSWtXUXdKRUNCQWdB
QUIKQWdRSUVGZ0lDSkNGcXAwRUNCQWdRSUFBQVFJRUNLU0FBRWtXUXdJRUNCQWdRSUFBQVFJRUZn
SUNaS0ZxSndFQ0JBZ1FJRUNBQUFFQwpLU0JBa3NXUUFBRUNCQWdRSUVDQUFJR0ZnQUJacU5wSmdB
QUJBZ1FJRUNCQWdFQUtDSkJrTVNSQWdBQUJBZ1FJRUNCQVlDRWdRQmFxCmRoSWdRSUFBQVFJRUNC
QWdrQUlDSkZrTUNSQWdRSUFBQVFJRUNCQllDQWlRaGFxZEJBZ1FJRUNBQUFFQ0JBaWtnQUJKRmtN
Q0JBZ1EKSUVDQUFBRUNCQllDQW1TaGFpY0JBZ1FJRUNCQWdBQUJBaWtnUUpMRmtBQUJBZ1FJRUNC
QWdBQ0JoWUFBV2FqYVNZQUFBUUlFQ0JBZwpRSUJBQ2dpUVpERWtRSUFBQVFJRUNCQWdRR0FoSUVB
V3FuWVNJRUNBQUFFQ0JBZ1FJSkFDQWlSWkRBa1FJRUNBQUFFQ0JBZ1FXQWdJCmtJV3FuUVFJRUNC
QWdBQUJBZ1FJcElBQVNSWkRBZ1FJRUNCQWdBQUJBZ1FXQWdKa29Xb25BUUlFQ0JBZ1FJQUFBUUlw
SUVDU3haQUEKQVFJRUNCQWdRSUFBZ1lXQUFGbW8ya21BQUFFQ0JBZ1FJRUNBUUFvSWtHUXhKRUNB
QUFFQ0JBZ1FJRUJnSVNCQUZxcDJFaUJBZ0FBQgpBZ1FJRUNDUUFnSWtXUXdKRUNCQWdBQUJBZ1FJ
RUZnSUNKQ0ZxcDBFQ0JBZ1FJQUFBUUlFQ0tTQUFFa1dRd0lFQ0JBZ1FJQUFBUUlFCkZnSUNaS0Zx
SndFQ0JBZ1FJRUNBQUFFQ0tTQkFrc1dRQUFFQ0JBZ1FJRUNBQUlHRmdBQlpxTnBKZ0FBQkFnUUlF
Q0JBZ0VBS0NKQmsKTVNSQWdBQUJBZ1FJRUNCQVlDRWdRQmFxZGhJZ1FJQUFBUUlFQ0JBZ2tBSUNK
RmtNQ1JBZ1FJQUFBUUlFQ0JCWUNBaVFoYXFkQkFnUQpJRUNBQUFFQ0JBaWtnQUJKRmtNQ0JBZ1FJ
RUNBQUFFQ0JCWUNBbVNoYWljQkFnUUlFQ0JBZ0FBQkFpa2dRSkxGa0FBQkFnUUlFQ0JBCmdBQ0Jo
WUFBV2FqYVNZQUFBUUlFQ0JBZ1FJQkFDZ2lRWkRFa1FJQUFBUUlFQ0JBZ1FHQWhJRUFXcW5ZU0lF
Q0FBQUVDQkFnUUlKQUMKQWlSWkRBa1FJRUNBQUFFQ0JBZ1FXQWdJa0lXcW5RUUlFQ0JBZ0FBQkFn
UUlwSUFBU1JaREFnUUlFQ0JBZ0FBQkFnUVdBZ0prb1dvbgpBUUlFQ0JBZ1FJQUFBUUlwSUVDU3ha
QUFBUUlFQ0JBZ1FJQUFnWVdBQUZtbzJrbUFBQUVDQkFnUUlFQ0FRQW9Ja0dReEpFQ0FBQUVDCkJB
Z1FJRUJnSVNCQUZxcDJFaUJBZ0FBQkFnUUlFQ0NRQWdJa1dRd0pFQ0JBZ0FBQkFnUUlFRmdJQ0pD
RnFwMEVDQkFnUUlBQUFRSUUKQ0tTQUFFa1dRd0lFQ0JBZ1FJQUFBUUlFRmdJQ1pLRnFKd0VDQkFn
UUlFQ0FBQUVDS1NCQWtzV1FBQUVDQkFnUUlFQ0FBSUdGZ0FCWgpxTnBKZ0FBQkFnUUlFQ0JBZ0VB
S0NKQmtNU1JBZ0FBQkFnUUlFQ0JBWUNFZ1FCYXFkaElnUUlBQUFRSUVDQkFna0FJQ0pGa01DUkFn
ClFJQUFBUUlFQ0JCWUNBaVFoYXFkQkFnUUlFQ0FBQUVDQkFpa2dBQkpGa01DQkFnUUlFQ0FBQUVD
QkJZQ0FtU2hhaWNCQWdRSUVDQkEKZ0FBQkFpa2dRSkxGa0FBQkFnUUlFQ0JBZ0FDQmhZQUFXYWph
U1lBQUFRSUVDQkFnUUlCQUNnaVFaREVrUUlBQUFRSUVDQkFnUUdBaApJRUFXcW5ZU0lFQ0FBQUVD
QkFnUUlKQUNBaVJaREFrUUlFQ0FBQUVDQkFnUVdBZ0lrSVdxblFRSUVDQkFnQUFCQWdRSXBJQUFT
UlpECkFnUUlFQ0JBZ0FBQkFnUVdBZ0prb1dvbkFRSUVDQkFnUUlBQUFRSXBJRUNTeFpBQUFRSUVD
QkFnUUlBQWdZV0FBRm1vMmttQUFBRUMKQkFnUUlFQ0FRQW9Ja0dReEpFQ0FBQUVDQkFnUUlFQmdJ
U0JBRnFwMkVpQkFnQUFCQWdRSUVDQ1FBZ0lrV1F3SkVDQkFnQUFCQWdRSQpFRmdJQ0pDRnFwMEVD
QkFnUUlBQUFRSUVDS1NBQUVrV1F3SUVDQkFnUUlBQUFRSUVGZ0lDWktGcUp3RUNCQWdRSUVDQUFB
RUNLU0JBCmtzV1FBQUVDQkFnUUlFQ0FBSUdGZ0FCWnFOcEpnQUFCQWdRSUVDQkFnRUFLQ0pCa01T
UkFnQUFCQWdRSUVDQkFZQ0VnUUJhcWRoSWcKUUlBQUFRSUVDQkFna0FJQ0pGa01DUkFnUUlBQUFR
SUVDQkJZQ0FpUWhhcWRCQWdRSUVDQUFBRUNCQWlrZ0FCSkZrTUNCQWdRSUVDQQpBQUVDQkJZQ0Ft
U2hhaWNCQWdRSUVDQkFnQUFCQWlrZ1FKTEZrQUFCQWdRSUVDQkFnQUNCaFlBQVdhamFTWUFBQVFJ
RUNCQWdRSUJBCkNnaVFaREVrUUlBQUFRSUVDQkFnUUdBaElFQVdxbllTSUVDQUFBRUNCQWdRSUpB
Q0FpUlpEQWtRSUVDQUFBRUNCQWdRV0FnSWtJV3EKblFRSUVDQkFnQUFCQWdRSXBJQUFTUlpEQWdR
SUVDQkFnQUFCQWdRV0FnSmtvV29uQVFJRUNCQWdRSUFBQVFJcElFQ1N4WkFBQVFJRQpDQkFnUUlB
QWdZV0FBRm1vMmttQUFBRUNCQWdRSUVDQVFBb0lrR1F4SkVDQUFBRUNCQWdRSUVCZ0lTQkFGcXAy
RWlCQWdBQUJBZ1FJCkVDQ1FBZ0lrV1F3SkVDQkFnQUFCQWdRSUVGZ0lDSkNGcXAwRUNCQWdRSUFB
QVFJRUNLU0FBRWtXUXdJRUNCQWdRSUFBQVFJRUZnSUMKWktGcUp3RUNCQWdRSUVDQUFBRUNLU0JB
a3NXUUFBRUNCQWdRSUVDQUFJR0ZnQUJacU5wSmdBQUJBZ1FJRUNCQWdFQUtDSkJrTVNSQQpnQUFC
QWdRSUVDQkFZQ0VnUUJhcWRoSWdRSUFBQVFJRUNCQWdrQUlDSkZrTUNSQWdRSUFBQVFJRUNCQllD
QWlRaGFxZEJBZ1FJRUNBCkFBRUNCQWlrZ0FCSkZrTUNCQWdRSUVDQUFBRUNCQllDQW1TaGFpY0JB
Z1FJRUNCQWdBQUJBaWtnUUpMRmtBQUJBZ1FJRUNCQWdBQ0IKaFlBQVdhamFTWUFBQVFJRUNCQWdR
SUJBQ2dpUVpERWtRSUFBQVFJRUNCQWdRR0FoSUVBV3FuWVNJRUNBQUFFQ0JBZ1FJSkFDQWlSWgpE
QWtRSUVDQUFBRUNCQWdRV0FnSWtJV3FuUVFJRUNCQWdBQUJBZ1FJcElBQVNSWkRBZ1FJRUNCQWdB
QUJBZ1FXQWdKa29Xb25BUUlFCkNCQWdRSUFBQVFJcElFQ1N4WkFBQVFJRUNCQWdRSUFBZ1lXQUFG
bW8ya21BQUFFQ0JBZ1FJRUNBUUFvSWtHUXhKRUNBQUFFQ0JBZ1EKSUVCZ0lTQkFGcXAyRWlCQWdB
QUJBZ1FJRUNDUUFnSWtXUXdKRUNCQWdBQUJBZ1FJRUZnSUNKQ0ZxcDBFQ0JBZ1FJQUFBUUlFQ0tT
QQpBRWtXUXdJRUNCQWdRSUFBQVFJRUZnSUNaS0ZxSndFQ0JBZ1FJRUNBQUFFQ0tTQkFrc1dRQUFF
Q0JBZ1FJRUNBQUlHRmdBQlpxTnBKCmdBQUJBZ1FJRUNCQWdFQUtDSkJrTVNSQWdBQUJBZ1FJRUNC
QVlDRWdRQmFxZGhJZ1FJQUFBUUlFQ0JBZ2tBSUNKRmtNQ1JBZ1FJQUEKQVFJRUNCQllDQWlRaGFx
ZEJBZ1FJRUNBQUFFQ0JBaWtnQUJKRmtNQ0JBZ1FJRUNBQUFFQ0JCWUNBbVNoYWljQkFnUUlFQ0JB
Z0FBQgpBaWtnUUpMRmtBQUJBZ1FJRUNCQWdBQ0JoWUFBV2FqYVNZQUFBUUlFQ0JBZ1FJQkFDZ2lR
WkRFa1FJQUFBUUlFQ0JBZ1FHQWhJRUFXCnFuWVNJRUNBQUFFQ0JBZ1FJSkFDQWlSWkRBa1FJRUNB
QUFFQ0JBZ1FXQWdJa0lXcW5RUUlFQ0JBZ0FBQkFnUUlwSUFBU1JaREFnUUkKRUNCQWdBQUJBZ1FX
QWdKa29Xb25BUUlFQ0JBZ1FJQUFBUUlwSUVDU3haQUFBUUlFQ0JBZ1FJQUFnWVdBQUZtbzJrbUFB
QUVDQkFnUQpJRUNBUUFvSWtHUXhKRUNBQUFFQ0JBZ1FJRUJnSVNCQUZxcDJFaUJBZ0FBQkFnUUlF
Q0NRQWdJa1dRd0pFQ0JBZ0FBQkFnUUlFRmdJCkNKQ0ZxcDBFQ0JBZ1FJQUFBUUlFQ0tTQUFFa1dR
d0lFQ0JBZ1FJQUFBUUlFRmdJQ1pLRnFKd0VDQkFnUUlFQ0FBQUVDS1NCQWtzV1EKQUFFQ0JBZ1FJ
RUNBQUlHRmdBQlpxTnBKZ0FBQkFnUUlFQ0JBZ0VBS0NKQmtNU1JBZ0FBQkFnUUlFQ0JBWUNFZ1FC
YXFkaElnUUlBQQpBUUlFQ0JBZ2tBSUNKRmtNQ1JBZ1FJQUFBUUlFQ0JCWUNBaVFoYXFkQkFnUUlF
Q0FBQUVDQkFpa2dBQkpGa01DQkFnUUlFQ0FBQUVDCkJCWUNBbVNoYWljQkFnUUlFQ0JBZ0FBQkFp
a2dRSkxGa0FBQkFnUUlFQ0JBZ0FDQmhZQUFXYWphU1lBQUFRSUVDQkFnUUlCQUNnaVEKWkRFa1FJ
QUFBUUlFQ0JBZ1FHQWhJRUFXcW5ZU0lFQ0FBQUVDQkFnUUlKQUNBaVJaREFrUUlFQ0FBQUVDQkFn
UVdBZ0lrSVdxblFRSQpFQ0JBZ0FBQkFnUUlwSUFBU1JaREFnUUlFQ0JBZ0FBQkFnUVdBZ0prb1dv
bkFRSUVDQkFnUUlBQUFRSXBJRUNTeFpBQUFRSUVDQkFnClFJQUFnWVdBQUZtbzJrbUFBQUVDQkFn
UUlFQ0FRQW9Ja0dReEpFQ0FBQUVDQkFnUUlFQmdJU0JBRnFwMkVpQkFnQUFCQWdRSUVDQ1EKQWdJ
a1dRd0pFQ0JBZ0FBQkFnUUlFRmdJQ0pDRnFwMEVDQkFnUUlBQUFRSUVDS1NBQUVrV1F3SUVDQkFn
UUlBQUFRSUVGZ0lDWktGcQpKd0VDQkFnUUlFQ0FBQUVDS1NCQWtzV1FBQUVDQkFnUUlFQ0FBSUdG
Z0FCWnFOcEpnQUFCQWdRSUVDQkFnRUFLQ0pCa01TUkFnQUFCCkFnUUlFQ0JBWUNFZ1FCYXFkaEln
UUlBQUFRSUVDQkFna0FJQ0pGa01DUkFnUUlBQUFRSUVDQkJZQ0FpUWhhcWRCQWdRSUVDQUFBRUMK
QkFpa2dBQkpGa01DQkFnUUlFQ0FBQUVDQkJZQ0FtU2hhaWNCQWdRSUVDQkFnQUFCQWlrZ1FKTEZr
QUFCQWdRSUVDQkFnQUNCaFlBQQpXYWphU1lBQUFRSUVDQkFnUUlCQUNnaVFaREVrUUlBQUFRSUVD
QkFnUUdBaElFQVdxbllTSUVDQUFBRUNCQWdRSUpBQ0FpUlpEQWtRCklFQ0FBQUVDQkFnUVdBZ0lr
SVdxblFRSUVDQkFnQUFCQWdRSXBJQUFTUlpEQWdRSUVDQkFnQUFCQWdRV0FnSmtvV29uQVFJRUNC
QWcKUUlBQUFRSXBJRUNTeFpBQUFRSUVDQkFnUUlBQWdZV0FBRm1vMmttQUFBRUNCQWdRSUVDQVFB
b0lrR1F4SkVDQUFBRUNCQWdRSUVCZwpJU0JBRnFwMkVpQkFnQUFCQWdRSUVDQ1FBZ0lrV1F3SkVD
QkFnQUFCQWdRSUVGZ0lDSkNGcXAwRUNCQWdRSUFBQVFJRUNLU0FBRWtXClF3SUVDQkFnUUlBQUFR
SUVGZ0lDWktGcUp3RUNCQWdRSUVDQUFBRUNLU0JBa3NXUUFBRUNCQWdRSUVDQUFJR0ZnQUJacU5w
SmdBQUIKQWdRSUVDQkFnRUFLQ0pCa01TUkFnQUFCQWdRSUVDQkFZQ0VnUUJhcWRoSWdRSUFBQVFJ
RUNCQWdrQUlDSkZrTUNSQWdRSUFBQVFJRQpDQkJZQ0FpUWhhcWRCQWdRSUVDQUFBRUNCQWlrZ0FC
SkZrTUNCQWdRSUVDQUFBRUNCQllDQW1TaGFpY0JBZ1FJRUNCQWdBQUJBaWtnClFKTEZrQUFCQWdR
SUVDQkFnQUNCaFlBQVdhamFTWUFBQVFJRUNCQWdRSUJBQ2dpUVpERWtRSUFBQVFJRUNCQWdRR0Fo
SUVBV3FuWVMKSUVDQUFBRUNCQWdRSUpBQ0FpUlpEQWtRSUVDQUFBRUNCQWdRV0FnSWtJV3FuUVFJ
RUNCQWdBQUJBZ1FJcElBQVNSWkRBZ1FJRUNCQQpnQUFCQWdRV0FnSmtvV29uQVFJRUNCQWdRSUFB
QVFJcElFQ1N4WkFBQVFJRUNCQWdRSUFBZ1lXQUFGbW8ya21BQUFFQ0JBZ1FJRUNBClFBb0lrR1F4
SkVDQUFBRUNCQWdRSUVCZ0lTQkFGcXAyRWlCQWdBQUJBZ1FJRUNDUUFnSWtXUXdKRUNCQWdBQUJB
Z1FJRUZnSUNKQ0YKcXAwRUNCQWdRSUFBQVFJRUNLU0FBRWtXUXdJRUNCQWdRSUFBQVFJRUZnSUNa
S0ZxSndFQ0JBZ1FJRUNBQUFFQ0tTQkFrc1dRQUFFQwpCQWdRSUVDQUFJR0ZnQUJacU5wSmdBQUJB
Z1FJRUNCQWdFQUtDSkJrTVNSQWdBQUJBZ1FJRUNCQVlDRWdRQmFxZGhJZ1FJQUFBUUlFCkNCQWdr
QUlDSkZrTXFPQTJWZ0FBQ1N0SlJFRlVDUkFnUUlBQUFRSUVDQkJZQ0FpUWhhcWRCQWdRSUVDQUFB
RUNCQWlrZ0FCSkZrTUMKQkFnUUlFQ0FBQUVDQkJZQ0FtU2hhaWNCQWdRSUVDQkFnQUFCQWlrZ1FK
TEZrQUFCQWdRSUVDQkFnQUNCaFlBQVdhamFTWUFBQVFJRQpDQkFnUUlCQUNnaVFaREVrUUlBQUFR
SUVDQkFnUUdBaElFQVdxbllTSUVDQUFBRUNCQWdRSUpBQ0FpUlpEQWtRSUVDQUFBRUNCQWdRCldB
Z0lrSVdxblFRSUVDQkFnQUFCQWdRSXBJQUFTUlpEQWdRSUVDQkFnQUFCQWdRV0FnSmtvV29uQVFJ
RUNCQWdRSUFBQVFJcElFQ1MKeFpBQUFRSUVDQkFnUUlBQWdZV0FBRm1vMmttQUFBRUNCQWdRSUVD
QVFBb0lrR1F4SkVDQUFBRUNCQWdRSUVCZ0lTQkFGcXAyRWlCQQpnQUFCQWdRSUVDQ1FBZ0lrV1F3
SkVDQkFnQUFCQWdRSUVGZ0lDSkNGcXAwRUNCQWdRSUFBQVFJRUNLU0FBRWtXUXdJRUNCQWdRSUFB
CkFRSUVGZ0lDWktGcUp3RUNCQWdRSUVDQUFBRUNLU0JBa3NXUUFBRUNCQWdRSUVDQUFJR0ZnQUJa
cU5wSmdBQUJBZ1FJRUNCQWdFQUsKQ0pCa01TUkFnQUFCQWdRSUVDQkFZQ0VnUUJhcWRoSWdRSUFB
QVFJRUNCQWdrQUlDSkZrTUNSQWdRSUFBQVFJRUNCQllDQWlRaGFxZApCQWdRSUVDQUFBRUNCQWlr
Z0FCSkZrTUNCQWdRSUVDQUFBRUNCQllDQW1TaGFpY0JBZ1FJRUNCQWdBQUJBaWtnUUpMRmtBQUJB
Z1FJCkVDQkFnQUNCaFlBQVdhamFTWUFBQVFJRUNCQWdRSUJBQ2dpUVpERWtRSUFBQVFJRUNCQWdR
R0FoSUVBV3FuWVNJRUNBQUFFQ0JBZ1EKSUpBQ0FpUlpEQWtRSUVDQUFBRUNCQWdRV0FnSWtJV3Fu
UVFJRUNCQWdBQUJBZ1FJcElBQVNSWkRBZ1FJRUNCQWdBQUJBZ1FXQWdKawpvV29uQVFJRUNCQWdR
SUFBQVFJcElFQ1N4WkFBQVFJRUNCQWdRSUFBZ1lXQUFGbW8ya21BQUFFQ0JBZ1FJRUNBUUFvSWtH
UXhKRUNBCkFBRUNCQWdRSUVCZ0lTQkFGcXAyRWlCQWdBQUJBZ1FJRUNDUUFnSWtXUXdKRUNCQWdB
QUJBZ1FJRUZnSUNKQ0ZxcDBFQ0JBZ1FJQUEKQVFJRUNLU0FBRWtXUXdJRUNCQWdRSUFBQVFJRUZn
SUNaS0ZxSndFQ0JBZ1FJRUNBQUFFQ0tTQkFrc1dRQUFFQ0JBZ1FJRUNBQUlHRgpnQUJacU5wSmdB
QUJBZ1FJRUNCQWdFQUtDSkJrTVNSQWdBQUJBZ1FJRUNCQVlDRWdRQmFxZGhJZ1FJQUFBUUlFQ0JB
Z2tBSUNKRmtNCkNSQWdRSUFBQVFJRUNCQllDQWlRaGFxZEJBZ1FJRUNBQUFFQ0JBaWtnQUJKRmtN
Q0JBZ1FJRUNBQUFFQ0JCWUNBbVNoYWljQkFnUUkKRUNCQWdBQUJBaWtnUUpMRmtBQUJBZ1FJRUNC
QWdBQ0JoWUFBV2FqYVNZQUFBUUlFQ0JBZ1FJQkFDZ2lRWkRFa1FJQUFBUUlFQ0JBZwpRR0FoSUVB
V3FuWVNJRUNBQUFFQ0JBZ1FJSkFDQWlSWkRBa1FJRUNBQUFFQ0JBZ1FXQWdJa0lXcW5RUUlFQ0JB
Z0FBQkFnUUlwSUFBClNSWkRBZ1FJRUNCQWdBQUJBZ1FXQWdKa29Xb25BUUlFQ0JBZ1FJQUFBUUlw
SUVDU3haQUFBUUlFQ0JBZ1FJQUFnWVdBQUZtbzJrbUEKQUFFQ0JBZ1FJRUNBUUFvSWtHUXhKRUNB
QUFFQ0JBZ1FJRUJnSVNCQUZxcDJFaUJBZ0FBQkFnUUlFQ0NRQWdJa1dRd0pFQ0JBZ0FBQgpBZ1FJ
RUZnSUNKQ0ZxcDBFQ0JBZ1FJQUFBUUlFQ0tTQUFFa1dRd0lFQ0JBZ1FJQUFBUUlFRmdJQ1pLRnFK
d0VDQkFnUUlFQ0FBQUVDCktTQkFrc1dRQUFFQ0JBZ1FJRUNBQUlHRmdBQlpxTnBKZ0FBQkFnUUlF
Q0JBZ0VBS0NKQmtNU1JBZ0FBQkFnUUlFQ0JBWUNFZ1FCYXEKZGhJZ1FJQUFBUUlFQ0JBZ2tBSUNK
RmtNQ1JBZ1FJQUFBUUlFQ0JCWUNBaVFoYXFkQkFnUUlFQ0FBQUVDQkFpa2dBQkpGa01DQkFnUQpJ
RUNBQUFFQ0JCWUNBbVNoYWljQkFnUUlFQ0JBZ0FBQkFpa2dRSkxGa0FBQkFnUUlFQ0JBZ0FDQmhZ
QUFXYWphU1lBQUFRSUVDQkFnClFJQkFDZ2lRWkRFa1FJQUFBUUlFQ0JBZ1FHQWhJRUFXcW5ZU0lF
Q0FBQUVDQkFnUUlKQUNBaVJaREFrUUlFQ0FBQUVDQkFnUVdBZ0kKa0lXcW5RUUlFQ0JBZ0FBQkFn
UUlwSUFBU1JaREFnUUlFQ0JBZ0FBQkFnUVdBZ0prb1dvbkFRSUVDQkFnUUlBQUFRSXBJRUNTeFpB
QQpBUUlFQ0JBZ1FJQUFnWVdBQUZtbzJrbUFBQUVDQkFnUUlFQ0FRQW9Ja0dReEpFQ0FBQUVDQkFn
UUlFQmdJU0JBRnFwMkVpQkFnQUFCCkFnUUlFQ0NRQWdJa1dRd0pFQ0JBZ0FBQkFnUUlFRmdJQ0pD
RnFwMEVDQkFnUUlBQUFRSUVDS1NBQUVrV1F3SUVDQkFnUUlBQUFRSUUKRmdJQ1pLRnFKd0VDQkFn
UUlFQ0FBQUVDS1NCQWtzV1FBQUVDQkFnUUlFQ0FBSUdGZ0FCWnFOcEpnQUFCQWdRSUVDQkFnRUFL
Q0pCawpNU1JBZ0FBQkFnUUlFQ0JBWUNFZ1FCYXFkaElnUUlBQUFRSUVDQkFna0FJQ0pGa01DUkFn
UUlBQUFRSUVDQkJZQ0FpUWhhcWRCQWdRCklFQ0FBQUVDQkFpa2dBQkpGa01DQkFnUUlFQ0FBQUVD
QkJZQ0FtU2hhaWNCQWdRSUVDQkFnQUFCQWlrZ1FKTEZrQUFCQWdRSUVDQkEKZ0FDQmhZQUFXYWph
U1lBQUFRSUVDQkFnUUlCQUNnaVFaREVrUUlBQUFRSUVDQkFnUUdBaElFQVdxbllTSUVDQUFBRUNC
QWdRSUpBQwpBaVJaREFrUUlFQ0FBQUVDQkFnUVdBZ0lrSVdxblFRSUVDQkFnQUFCQWdRSXBJQUFT
UlpEQWdRSUVDQkFnQUFCQWdRV0FnSmtvV29uCkFRSUVDQkFnUUlBQUFRSXBJRUNTeFpBQUFRSUVD
QkFnUUlBQWdZV0FBRm1vMmttQUFBRUNCQWdRSUVDQVFBb0lrR1F4SkVDQUFBRUMKQkFnUUlFQmdJ
U0JBRnFwMkVpQkFnQUFCQWdRSUVDQ1FBZ0lrV1F3SkVDQkFnQUFCQWdRSUVGZ0lDSkNGcXAwRUNC
QWdRSUFBQVFJRQpDS1NBQUVrV1F3SUVDQkFnUUlBQUFRSUVGZ0lDWktGcUp3RUNCQWdRSUVDQUFB
RUNLU0JBa3NXUUFBRUNCQWdRSUVDQUFJR0ZnQUJaCnFOcEpnQUFCQWdRSUVDQkFnRUFLQ0pCa01T
UkFnQUFCQWdRSUVDQkFZQ0VnUUJhcWRoSWdRSUFBQVFJRUNCQWdrQUlDSkZrTUNSQWcKUUlBQUFR
SUVDQkJZQ0FpUWhhcWRCQWdRSUVDQUFBRUNCQWlrZ0FCSkZrTUNCQWdRSUVDQUFBRUNCQllDQW1T
aGFpY0JBZ1FJRUNCQQpnQUFCQWlrZ1FKTEZrQUFCQWdRSUVDQkFnQUNCaFlBQVdhamFTWUFBQVFJ
RUNCQWdRSUJBQ2dpUVpERWtRSUFBQVFJRUNCQWdRR0FoCklFQVdxbllTSUVDQUFBRUNCQWdRSUpB
Q0FpUlpEQWtRSUVDQUFBRUNCQWdRV0FnSWtJV3FuUVFJRUNCQWdBQUJBZ1FJcElBQVNSWkQKQWdR
SUVDQkFnQUFCQWdRV0FnSmtvV29uQVFJRUNCQWdRSUFBQVFJcElFQ1N4WkFBQVFJRUNCQWdRSUFB
Z1lXQUFGbW8ya21BQUFFQwpCQWdRSUVDQVFBb0lrR1F4SkVDQUFBRUNCQWdRSUVCZ0lmQi9qdlVk
dElkeW9aUUFBQUFBU1VWT1JLNUNZSUk9CgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L3N2Zy90ZXh0L3RleHQtdmtlcm4tb24taG9yaXpvbnRhbC10ZXh0LWV4cGVjdGVkLnBuZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46
bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvc3ZnL3RleHQvdGV4dC12a2Vybi1vbi1ob3Jpem9u
dGFsLXRleHQtZXhwZWN0ZWQucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAg
KyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBeUFB
QUFKWUNBWUFBQUNhZG9Kd0FBQURPMmxEUTFCSlEwTWdVSEp2Wm1sc1pRQUFlQUdGCmxFdG8xRkFV
aHYrTUtZSzBncWkxRnBUZ1FvdTBKVDdRaWxEYmFiWFdrWEVZKzlBaXlEUnpaeHBOTXpHWkdSK0lT
RUhjK1ZxS0d4K0kKaXlyaVFycFFjS1VMa1VMcmExRUVjYVVpaUVJM1VzYi9KdTFNS2xZdkpQbHl6
bi9QNjRZQVZROVRqbU5GTkdEWXpydkpycWgyNlBDQQp0bmdDVmFoQk5iaFNodWUwSnhMN2ZhWldQ
dWV2NmJkUXBHV3lTY2FLOVIyWStMUnQ5ZjFMajJMdjY1NzIrcDc1K25sdk5TNFRBb3BHCjY0cHN3
RnNsRHdhOFYvTEp2Sk9uNW9oa1l5aVZKanZrUnJjbjJVRytRVjZhRGZGZ2lOUENNNENxTm1weWh1
TXlUbVFGdWFWb1pHWE0KVWJKdXAwMmJQQ1h0YWM4WXBvYjlSbjdJV2RER2xZOEJyV3VBUlM4cnRn
RVBHTDBMckZwZnNUWFVBU3Y3Z2JFdEZkdlBwRDhmcFhiYwp5MnpaN0lkVHFxT3M2VU9wOUhNOXNQ
Z2FNSE8xVlBwMXExU2F1YzBjck9PWlpSVGNvcTlsWWNvcklLZzMyTTM0eVRsYWlJT2VmRlVMCmNK
Tno3RjhDeEM0QTF6OENHeDRBeXg4RGlScWdad2NpNTlsdWNPWEZLYzRGNk1nNXAxMHpPNVRYTnV2
NmRxMmRSeXUwYnR0b2J0UlMKbHFYNUxrOXpoU2Zjb2tnM1k5Z3FjTTcrV3NaN3RiQjdEL0xKL2lM
bmhMZDdscFdSZEtxVHMwUXoyL3FTRnAyN3lZM2tleGx6VHplNQpnZGRVeHQzVEc3Q3kwY3gzOXdR
YzZiT3RPTTlGYWlKMTltRDhBSm54RmRYSlIrVThKSTk0eFlNeXBtOC9sdHFYSU5mVG5qeWVpMGxO
CkxmZTJuUm5xNFJsSlZxd3pReDN4V1g3dEZwSXk3enBxN2ppVy84Mnp0c2h6SElZRkFSTTI3elkw
Sk5HRktKcmd3RVVPR1hwTUtreGEKcFYvUWFzTEQ4YjhxTFNUS3V5d3F1dkNaZXo3N2UwNmd3TjB5
ZmgraWNZdzBsaU5vK2p2OW0vNUd2Nm5mMGI5ZXFTODBWRHdqN2xIVApHTC84blhGbFpsbU5qQnZV
S09QTG1vTDRCcXR0cDlkQ2x0WmhYa0ZQWGxuZkZLNHVZMStwTDNzMG1VTmNqRStIdWhTaFRFMFla
RHpaCnRleStTTGI0SnZ4OGM5a1dtaDYxTDg0K3FhdmtlcU9PSFptc2ZuRTJYQTFyLzdPcllOS3lx
L0RralpBdVBHdWhybFUzcWQxcWk3b0QKbXJwTGJWTmIxVTYrN1ZUM2wzZjBjbFltVHJKdWw5V24y
SU9OMC9SV1Ryb3lXd1QvRm40eC9DOTFDVnU0cHFISmYyakN6V1ZNUy9pTwo0UFlmZDBqNUwvd05B
WVVWRFh4TE96c0FBQ0FBU1VSQlZIZ0I3ZHV4YWx4UkVFUkJ5L2ovZjNsdERNb1ViS0NkYlk3S2lS
UEJuYTUrClNTUDA4ZmozNzVkL0JBZ1FJRUNBQUFFQ0JBZ1FPQkQ0ZmZDR0p3Z1FJRUNBQUFFQ0JB
Z1FJUEJmd0FEeElSQWdRSUFBQVFJRUNCQWcKY0NaZ2dKeFJlNGdBQVFJRUNCQWdRSUFBQVFQRU4w
Q0FBQUVDQkFnUUlFQ0F3Sm1BQVhKRzdTRUNCQWdRSUVDQUFBRUNCQXdRM3dBQgpBZ1FJRUNCQWdB
QUJBbWNDQnNnWnRZY0lFQ0JBZ0FBQkFnUUlFREJBZkFNRUNCQWdRSUFBQVFJRUNKd0pHQ0JuMUI0
aVFJQUFBUUlFCkNCQWdRTUFBOFEwUUlFQ0FBQUVDQkFnUUlIQW1ZSUNjVVh1SUFBRUNCQWdRSUVD
QUFBRUR4RGRBZ0FBQkFnUUlFQ0JBZ01DWmdBRnkKUnUwaEFnUUlFQ0JBZ0FBQkFnUU1FTjhBQVFJ
RUNCQWdRSUFBQVFKbkFnYklHYldIQ0JBZ1FJQUFBUUlFQ0JBd1FId0RCQWdRSUVDQQpBQUVDQkFp
Y0NSZ2daOVFlSWtDQUFBRUNCQWdRSUVEQUFQRU5FQ0JBZ0FBQkFnUUlFQ0J3Sm1DQW5GRjdpQUFC
QWdRSUVDQkFnQUFCCkE4UTNRSUFBQVFJRUNCQWdRSURBbVlBQmNrYnRJUUlFQ0JBZ1FJQUFBUUlF
REJEZkFBRUNCQWdRSUVDQUFBRUNad0lHeUJtMWh3Z1EKSUVDQUFBRUNCQWdRTUVCOEF3UUlFQ0JB
Z0FBQkFnUUluQW44T1h2cGlZYytQajZlK0tubmYrVHhlRHovdzM2U0FBRUNCQWdRSUVDQQpBSUdY
Qy9nTnlNdUpQVUNBQUFFQ0JBZ1FJRUNBd0tlQUFmSXA0WDhDQkFnUUlFQ0FBQUVDQkY0dVlJQzhu
TmdEQkFnUUlFQ0FBQUVDCkJBaDhDaGdnbnhMK0owQ0FBQUVDQkFnUUlFRGc1UUxmL2tmbzMvMkg1
QzhYOEFBQkFnUUlFQ0JBZ0FBQkFtY0NmZ055UnUwaEFnUUkKRUNCQWdBQUJBZ1FNRU44QUFRSUVD
QkFnUUlBQUFRSm5BZ2JJR2JXSENCQWdRSUFBQVFJRUNCQXdRSHdEQkFnUUlFQ0FBQUVDQkFpYwpD
VHo5UitqK3VQeXNFdzhSSUVDQUFBRUNCQWdReUFyNERVaTJXc0VJRUNCQWdBQUJBZ1FJN0FrWUlI
dWR1SWdBQVFJRUNCQWdRSUJBClZzQUF5VllyR0FFQ0JBZ1FJRUNBQUlFOUFRTmtyeE1YRVNCQWdB
QUJBZ1FJRU1nS2ZQbEg2UDdnUE51M1lBUUlFQ0JBZ0FBQkFnVGUKS3VBM0lHL2w5emdCQWdRSUVD
QkFnQUNCbnlWZ2dQeXN2cVVsUUlBQUFRSUVDQkFnOEZZQkErU3QvQjRuUUlBQUFRSUVDQkFnOExN
RQpESkNmMWJlMEJBZ1FJRUNBQUFFQ0JONHE4T1Vmb1Q4ZWo3Y2U1WEVDQkFnUUlFQ0FBQUVDQkpv
Q2ZnUFM3RlVxQWdRSUVDQkFnQUFCCkFwTUNCc2hrTFk0aVFJQUFBUUlFQ0JBZzBCUXdRSnE5U2tX
QUFBRUNCQWdRSUVCZ1VzQUFtYXpGVVFRSUVDQkFnQUFCQWdTYUFnWkkKczFlcENCQWdRSUFBQVFJ
RUNFd0tHQ0NUdFRpS0FBRUNCQWdRSUVDQVFGUEFBR24yS2hVQkFnUUlFQ0JBZ0FDQlNRRURaTElX
UnhFZwpRSUFBQVFJRUNCQm9DaGdnelY2bElrQ0FBQUVDQkFnUUlEQXBZSUJNMXVJb0FnUUlFQ0JB
Z0FBQkFrMEJBNlRacTFRRUNCQWdRSUFBCkFRSUVKZ1VNa01sYUhFV0FBQUVDQkFnUUlFQ2dLV0NB
Tkh1VmlnQUJBZ1FJRUNCQWdNQ2tnQUV5V1l1akNCQWdRSUFBQVFJRUNEUUYKREpCbXIxSVJJRUNB
QUFFQ0JBZ1FtQlF3UUNacmNSUUJBZ1FJRUNCQWdBQ0Jwb0FCMHV4VktnSUVDQkFnUUlBQUFRS1RB
Z2JJWkMyTwpJa0NBQUFFQ0JBZ1FJTkFVTUVDYXZVcEZnQUFCQWdRSUVDQkFZRkxBQUptc3hWRUVD
QkFnUUlBQUFRSUVtZ0lHU0xOWHFRZ1FJRUNBCkFBRUNCQWhNQ2hnZ2s3VTRpZ0FCQWdRSUVDQkFn
RUJUd0FCcDlpb1ZBUUlFQ0JBZ1FJQUFnVWtCQTJTeUZrY1JJRUNBQUFFQ0JBZ1EKYUFvWUlNMWVw
U0pBZ0FBQkFnUUlFQ0F3S1dDQVROYmlLQUlFQ0JBZ1FJQUFBUUpOQVFPazJhdFVCQWdRSUVDQUFB
RUNCQ1lGREpESgpXaHhGZ0FBQkFnUUlFQ0JBb0NsZ2dEUjdsWW9BQVFJRUNCQWdRSURBcElBQk1s
bUxvd2dRSUVDQUFBRUNCQWcwQlF5UVpxOVNFU0JBCmdBQUJBZ1FJRUpnVU1FQW1hM0VVQVFJRUNC
QWdRSUFBZ2FhQUFkTHNWU29DQkFnUUlFQ0FBQUVDa3dJR3lHUXRqaUpBZ0FBQkFnUUkKRUNEUUZE
QkFtcjFLUllBQUFRSUVDQkFnUUdCU3dBQ1pyTVZSQkFnUUlFQ0FBQUVDQkpvQ0JraXpWNmtJRUNC
QWdBQUJBZ1FJVEFvWQpJSk8xT0lvQUFRSUVDQkFnUUlCQVU4QUFhZllxRlFFQ0JBZ1FJRUNBQUlG
SkFRTmtzaFpIRVNCQWdBQUJBZ1FJRUdnS0dDRE5YcVVpClFJQUFBUUlFQ0JBZ01DbGdnRXpXNGln
Q0JBZ1FJRUNBQUFFQ1RRRURwTm1yVkFRSUVDQkFnQUFCQWdRbUJReVF5Vm9jUllBQUFRSUUKQ0JB
Z1FLQXBZSUEwZTVXS0FBRUNCQWdRSUVDQXdLU0FBVEpaaTZNSUVDQkFnQUFCQWdRSU5BVU1rR2F2
VWhFZ1FJQUFBUUlFQ0JDWQpGREJBSm10eEZBRUNCQWdRSUVDQUFJR21nQUhTN0ZVcUFnUUlFQ0JB
Z0FBQkFwTUNCc2hrTFk0aVFJQUFBUUlFQ0JBZzBCUXdRSnE5ClNrV0FBQUVDQkFnUUlFQmdVc0FB
bWF6RlVRUUlFQ0JBZ0FBQkFnU2FBZ1pJczFlcENCQWdRSUFBQVFJRUNFd0tHQ0NUdFRpS0FBRUMK
QkFnUUlFQ0FRRlBBQUduMktoVUJBZ1FJRUNCQWdBQ0JTUUVEWkxJV1J4RWdRSUFBQVFJRUNCQm9D
aGdnelY2bElrQ0FBQUVDQkFnUQpJREFwWUlCTTF1SW9BZ1FJRUNCQWdBQUJBazBCQTZUWnExUUVD
QkFnUUlBQUFRSUVKZ1VNa01sYUhFV0FBQUVDQkFnUUlFQ2dLV0NBCk5IdVZpZ0FCQWdRSUVDQkFn
TUNrZ0FFeVdZdWpDQkFnUUlBQUFRSUVDRFFGREpCbXIxSVJJRUNBQUFFQ0JBZ1FtQlF3UUNacmNS
UUIKQWdRSUVDQkFnQUNCcG9BQjB1eFZLZ0lFQ0JBZ1FJQUFBUUtUQWdiSVpDMk9Ja0NBQUFFQ0JB
Z1FJTkFVTUVDYXZVcEZnQUFCQWdRSQpFQ0JBWUZMQUFKbXN4VkVFQ0JBZ1FJQUFBUUlFbWdJR1NM
TlhxUWdRSUVDQUFBRUNCQWhNQ2hnZ2s3VTRpZ0FCQWdRSUVDQkFnRUJUCndBQnA5aW9WQVFJRUNC
QWdRSUFBZ1VrQkEyU3lGa2NSSUVDQUFBRUNCQWdRYUFvWUlNMWVwU0pBZ0FBQkFnUUlFQ0F3S1dD
QVROYmkKS0FJRUNCQWdRSUFBQVFKTkFRT2syYXRVQkFnUUlFQ0FBQUVDQkNZRkRKREpXaHhGZ0FB
QkFnUUlFQ0JBb0NsZ2dEUjdsWW9BQVFJRQpDQkFnUUlEQXBJQUJNbG1Mb3dnUUlFQ0FBQUVDQkFn
MEJReVFacTlTRVNCQWdBQUJBZ1FJRUpnVU1FQW1hM0VVQVFJRUNCQWdRSUFBCmdhYUFBZExzVlNv
Q0JBZ1FJRUNBQUFFQ2t3SUd5R1F0amlKQWdBQUJBZ1FJRUNEUUZEQkFtcjFLUllBQUFRSUVDQkFn
UUdCU3dBQ1oKck1WUkJBZ1FJRUNBQUFFQ0JKb0NCa2l6VjZrSUVDQkFnQUFCQWdRSVRBb1lJSk8x
T0lvQUFRSUVDQkFnUUlCQVU4QUFhZllxRlFFQwpCQWdRSUVDQUFJRkpBUU5rc2haSEVTQkFnQUFC
QWdRSUVHZ0tHQ0ROWHFVaVFJQUFBUUlFQ0JBZ01DbGdnRXpXNGlnQ0JBZ1FJRUNBCkFBRUNUUUVE
cE5tclZBUUlFQ0JBZ0FBQkFnUW1CUXlReVZvY1JZQUFBUUlFQ0JBZ1FLQXBZSUEwZTVXS0FBRUNC
QWdRSUVDQXdLU0EKQVRKWmk2TUlFQ0JBZ0FBQkFnUUlOQVVNa0dhdlVoRWdRSUFBQVFJRUNCQ1lG
REJBSm10eEZBRUNCQWdRSUVDQUFJR21nQUhTN0ZVcQpBZ1FJRUNCQWdBQUJBcE1DQnNoa0xZNGlR
SUFBQVFJRUNCQWcwQlF3UUpxOVNrV0FBQUVDQkFnUUlFQmdVc0FBbWF6RlVRUUlFQ0JBCmdBQUJB
Z1NhQWdaSXMxZXBDQkFnUUlBQUFRSUVDRXdLR0NDVHRUaUtBQUVDQkFnUUlFQ0FRRlBBQUduMkto
VUJBZ1FJRUNCQWdBQ0IKU1FFRFpMSVdSeEVnUUlBQUFRSUVDQkJvQ2hnZ3pWNmxJa0NBQUFFQ0JB
Z1FJREFwWUlCTTF1SW9BZ1FJRUNCQWdBQUJBazBCQTZUWgpxMVFFQ0JBZ1FJQUFBUUlFSmdVTWtN
bGFIRVdBQUFFQ0JBZ1FJRUNnS1dDQU5IdVZpZ0FCQWdRSUVDQkFnTUNrZ0FFeVdZdWpDQkFnClFJ
QUFBUUlFQ0RRRkRKQm1yMUlSSUVDQUFBRUNCQWdRbUJRd1FDWnJjUlFCQWdRSUVDQkFnQUNCcG9B
QjB1eFZLZ0lFQ0JBZ1FJQUEKQVFLVEFnYklaQzJPSWtDQUFBRUNCQWdRSU5BVU1FQ2F2VXBGZ0FB
QkFnUUlFQ0JBWUZMQUFKbXN4VkVFQ0JBZ1FJQUFBUUlFbWdJRwpTTE5YcVFnUUlFQ0FBQUVDQkFo
TUNoZ2drN1U0aWdBQkFnUUlFQ0JBZ0VCVHdBQnA5aW9WQVFJRUNCQWdRSUFBZ1VrQkEyU3lGa2NS
CklFQ0FBQUVDQkFnUWFBb1lJTTFlcFNKQWdBQUJBZ1FJRUNBd0tXQ0FUTmJpS0FJRUNCQWdRSUFB
QVFKTkFRT2syYXRVQkFnUUlFQ0EKQUFFQ0JDWUZESkRKV2h4RmdBQUJBZ1FJRUNCQW9DbGdnRFI3
bFlvQUFRSUVDQkFnUUlEQXBJQUJNbG1Mb3dnUUlFQ0FBQUVDQkFnMApCUXlRWnE5U0VTQkFnQUFC
QWdRSUVKZ1VNRUFtYTNFVUFRSUVDQkFnUUlBQWdhYUFBZExzVlNvQ0JBZ1FJRUNBQUFFQ2t3SUd5
R1F0CmppSkFnQUFCQWdRSUVDRFFGREJBbXIxS1JZQUFBUUlFQ0JBZ1FHQlN3QUNack1WUkJBZ1FJ
RUNBQUFFQ0JKb0NCa2l6VjZrSUVDQkEKZ0FBQkFnUUlUQW9ZSUpPMU9Jb0FBUUlFQ0JBZ1FJQkFV
OEFBYWZZcUZRRUNCQWdRSUVDQUFJRkpBUU5rc2haSEVTQkFnQUFCQWdRSQpFR2dLR0NETlhxVWlR
SUFBQVFJRUNCQWdNQ2xnZ0V6VzRpZ0NCQWdRSUVDQUFBRUNUUUVEcE5tclZBUUlFQ0JBZ0FBQkFn
UW1CUXlRCnlWb2NSWUFBQVFJRUNCQWdRS0FwWUlBMGU1V0tBQUVDQkFnUUlFQ0F3S1NBQVRKWmk2
TUlFQ0JBZ0FBQkFnUUlOQVVNa0dhdlVoRWcKUUlBQUFRSUVDQkNZRkRCQUptdHhGQUVDQkFnUUlF
Q0FBSUdtZ0FIUzdGVXFBZ1FJRUNCQWdBQUJBcE1DQnNoa0xZNGlRSUFBQVFJRQpDQkFnMEJRd1FK
cTlTa1dBQUFFQ0JBZ1FJRUJnVXNBQW1hekZVUVFJRUNCQWdBQUJBZ1NhQWdaSXMxZXBDQkFnUUlB
QUFRSUVDRXdLCkdDQ1R0VGlLQUFFQ0JBZ1FJRUNBUUZQQUFHbjJLaFVCQWdRSUVDQkFnQUNCU1FF
RFpMSVdSeEVnUUlBQUFRSUVDQkJvQ2hnZ3pWNmwKSWtDQUFBRUNCQWdRSURBcFlJQk0xdUlvQWdR
SUVDQkFnQUFCQWswQkE2VFpxMVFFQ0JBZ1FJQUFBUUlFSmdVTWtNbGFIRVdBQUFFQwpCQWdRSUVD
Z0tXQ0FOSHVWaWdBQkFnUUlFQ0JBZ01Da2dBRXlXWXVqQ0JBZ1FJQUFBUUlFQ0RRRkRKQm1yMUlS
SUVDQUFBRUNCQWdRCm1CUXdRQ1pyY1JRQkFnUUlFQ0JBZ0FDQnBvQUIwdXhWS2dJRUNCQWdRSUFB
QVFLVEFnYklaQzJPSWtDQUFBRUNCQWdRSU5BVU1FQ2EKdlVwRmdBQUJBZ1FJRUNCQVlGTEFBSm1z
eFZFRUNCQWdRSUFBQVFJRW1nSUdTTE5YcVFnUUlFQ0FBQUVDQkFoTUNoZ2drN1U0aWdBQgpBZ1FJ
RUNCQWdFQlR3QUJwOWlvVkFRSUVDQkFnUUlBQWdVa0JBMlN5RmtjUklFQ0FBQUVDQkFnUWFBb1lJ
TTFlcFNKQWdBQUJBZ1FJCkVDQXdLV0NBVE5iaUtBSUVDQkFnUUlBQUFRSk5BUU9rMmF0VUJBZ1FJ
RUNBQUFFQ0JDWUZESkRKV2h4RmdBQUJBZ1FJRUNCQW9DbGcKZ0RSN2xZb0FBUUlFQ0JBZ1FJREFw
SUFCTWxtTG93Z1FJRUNBQUFFQ0JBZzBCUXlRWnE5U0VTQkFnQUFCQWdRSUVKZ1VNRUFtYTNFVQpB
UUlFQ0JBZ1FJQUFnYWFBQWRMc1ZTb0NCQWdRSUVDQUFBRUNrd0lHeUdRdGppSkFnQUFCQWdRSUVD
RFFGREJBbXIxS1JZQUFBUUlFCkNCQWdRR0JTd0FDWnJNVlJCQWdRSUVDQUFBRUNCSm9DQmtpelY2
a0lFQ0JBZ0FBQkFnUUlUQW9ZSUpPMU9Jb0FBUUlFQ0JBZ1FJQkEKVThBQWFmWXFGUUVDQkFnUUlF
Q0FBSUZKQVFOa3NoWkhFU0JBZ0FBQkFnUUlFR2dLR0NETlhxVWlRSUFBQVFJRUNCQWdNQ2xnZ0V6
Vwo0aWdDQkFnUUlFQ0FBQUVDVFFFRHBObXJWQVFJRUNCQWdBQUJBZ1FtQlF5UXlWb2NSWUFBQVFJ
RUNCQWdRS0FwWUlBMGU1V0tBQUVDCkJBZ1FJRUNBd0tTQUFUSlppNk1JRUNCQWdBQUJBZ1FJTkFV
TWtHYXZVaEVnUUlBQUFRSUVDQkNZRkRCQUptdHhGQUVDQkFnUUlFQ0EKQUlHbWdBSFM3RlVxQWdR
SUVDQkFnQUFCQXBNQ0JzaGtMWTRpUUlBQUFRSUVDQkFnMEJRd1FKcTlTa1dBQUFFQ0JBZ1FJRUJn
VXNBQQptYXpGVVFRSUVDQkFnQUFCQWdTYUFnWklzMWVwQ0JBZ1FJQUFBUUlFQ0V3S0dDQ1R0VGlL
QUFFQ0JBZ1FJRUNBUUZQQUFHbjJLaFVCCkFnUUlFQ0JBZ0FDQlNRRURaTElXUnhFZ1FJQUFBUUlF
Q0JCb0NoZ2d6VjZsSWtDQUFBRUNCQWdRSURBcFlJQk0xdUlvQWdRSUVDQkEKZ0FBQkFrMEJBNlRa
cTFRRUNCQWdRSUFBQVFJRUpnVU1rTWxhSEVXQUFBRUNCQWdRSUVDZ0tXQ0FOSHVWaWdBQkFnUUlF
Q0JBZ01DawpnQUV5V1l1akNCQWdRSUFBQVFJRUNEUUZESkJtcjFJUklFQ0FBQUVDQkFnUW1CUXdR
Q1pyY1JRQkFnUUlFQ0JBZ0FDQnBvQUIwdXhWCktnSUVDQkFnUUlBQUFRS1RBZ2JJWkMyT0lrQ0FB
QUVDQkFnUUlOQVVNRUNhdlVwRmdBQUJBZ1FJRUNCQVlGTEFBSm1zeFZFRUNCQWcKUUlBQUFRSUVt
Z0lHU0xOWHFRZ1FJRUNBQUFFQ0JBaE1DaGdnazdVNGlnQUJBZ1FJRUNCQWdFQlR3QUJwOWlvVkFR
SUVDQkFnUUlBQQpnVWtCQTJTeUZrY1JJRUNBQUFFQ0JBZ1FhQW9ZSU0xZXBTSkFnQUFCQWdRSUVD
QXdLV0NBVE5iaUtBSUVDQkFnUUlBQUFRSk5BUU9rCjJhdFVCQWdRSUVDQUFBRUNCQ1lGREpESldo
eEZnQUFCQWdRSUVDQkFvQ2xnZ0RSN2xZb0FBUUlFQ0JBZ1FJREFwSUFCTWxtTG93Z1EKSUVDQUFB
RUNCQWcwQlF5UVpxOVNFU0JBZ0FBQkFnUUlFSmdVTUVBbWEzRVVBUUlFQ0JBZ1FJQUFnYWFBQWRM
c1ZTb0NCQWdRSUVDQQpBQUVDa3dJR3lHUXRqaUpBZ0FBQkFnUUlFQ0RRRkRCQW1yMUtSWUFBQVFJ
RUNCQWdRR0JTd0FDWnJNVlJCQWdRSUVDQUFBRUNCSm9DCkJraXpWNmtJRUNCQWdBQUJBZ1FJVEFv
WUlKTzFPSW9BQVFJRUNCQWdRSUJBVThBQWFmWXFGUUVDQkFnUUlFQ0FBSUZKQVFOa3NoWkgKRVNC
QWdBQUJBZ1FJRUdnS0dDRE5YcVVpUUlBQUFRSUVDQkFnTUNsZ2dFelc0aWdDQkFnUUlFQ0FBQUVD
VFFFRHBObXJWQVFJRUNCQQpnQUFCQWdRbUJReVF5Vm9jUllBQUFRSUVDQkFnUUtBcFlJQTBlNVdL
QUFFQ0JBZ1FJRUNBd0tTQUFUSlppNk1JRUNCQWdBQUJBZ1FJCk5BVU1rR2F2VWhFZ1FJQUFBUUlF
Q0JDWUZEQkFKbXR4RkFFQ0JBZ1FJRUNBQUlHbWdBSFM3RlVxQWdRSUVDQkFnQUFCQXBNQ0JzaGsK
TFk0aVFJQUFBUUlFQ0JBZzBCUXdRSnE5U2tXQUFBRUNCQWdRSUVCZ1VzQUFtYXpGVVFRSUVDQkFn
QUFCQWdTYUFnWklzMWVwQ0JBZwpRSUFBQVFJRUNFd0tHQ0NUdFRpS0FBRUNCQWdRSUVDQVFGUEFB
R24yS2hVQkFnUUlFQ0JBZ0FDQlNRRURaTElXUnhFZ1FJQUFBUUlFCkNCQm9DaGdnelY2bElrQ0FB
QUVDQkFnUUlEQXBZSUJNMXVJb0FnUUlFQ0JBZ0FBQkFrMEJBNlRacTFRRUNCQWdRSUFBQVFJRUpn
VU0Ka01sYUhFV0FBQUVDQkFnUUlFQ2dLV0NBTkh1VmlnQUJBZ1FJRUNCQWdNQ2tnQUV5V1l1akNC
QWdRSUFBQVFJRUNEUUZESkJtcjFJUgpJRUNBQUFFQ0JBZ1FtQlF3UUNacmNSUUJBZ1FJRUNCQWdB
Q0Jwb0FCMHV4VktnSUVDQkFnUUlBQUFRS1RBZ2JJWkMyT0lrQ0FBQUVDCkJBZ1FJTkFVTUVDYXZV
cEZnQUFCQWdRSUVDQkFZRkxBQUptc3hWRUVDQkFnUUlBQUFRSUVtZ0lHU0xOWHFRZ1FJRUNBQUFF
Q0JBaE0KQ2hnZ2s3VTRpZ0FCQWdRSUVDQkFnRUJUd0FCcDlpb1ZBUUlFQ0JBZ1FJQUFnVWtCQTJT
eUZrY1JJRUNBQUFFQ0JBZ1FhQW9ZSU0xZQpwU0pBZ0FBQkFnUUlFQ0F3S1dDQVROYmlLQUlFQ0JB
Z1FJQUFBUUpOQVFPazJhdFVCQWdRSUVDQUFBRUNCQ1lGREpESldoeEZnQUFCCkFnUUlFQ0JBb0Ns
Z2dEUjdsWW9BQVFJRUNCQWdRSURBcElBQk1sbUxvd2dRSUVDQUFBRUNCQWcwQlF5UVpxOVNFU0JB
Z0FBQkFnUUkKRUpnVU1FQW1hM0VVQVFJRUNCQWdRSUFBZ2FhQUFkTHNWU29DQkFnUUlFQ0FBQUVD
a3dJR3lHUXRqaUpBZ0FBQkFnUUlFQ0RRRkRCQQptcjFLUllBQUFRSUVDQkFnUUdCU3dBQ1pyTVZS
QkFnUUlFQ0FBQUVDQkpvQ0JraXpWNmtJRUNCQWdBQUJBZ1FJVEFvWUlKTzFPSW9BCkFRSUVDQkFn
UUlCQVU4QUFhZllxRlFFQ0JBZ1FJRUNBQUlGSkFRTmtzaFpIRVNCQWdBQUJBZ1FJRUdnS0dDRE5Y
cVVpUUlBQUFRSUUKQ0JBZ01DbGdnRXpXNGlnQ0JBZ1FJRUNBQUFFQ1RRRURwTm1yVkFRSUVDQkFn
QUFCQWdRbUJReVF5Vm9jUllBQUFRSUVDQkFnUUtBcApZSUEwZTVXS0FBRUNCQWdRSUVDQXdLU0FB
VEpaaTZNSUVDQkFnQUFCQWdRSU5BVU1rR2F2VWhFZ1FJQUFBUUlFQ0JDWUZEQkFKbXR4CkZBRUNC
QWdRSUVDQUFJR21nQUhTN0ZVcUFnUUlFQ0JBZ0FBQkFwTUNCc2hrTFk0aVFJQUFBUUlFQ0JBZzBC
UXdRSnE5U2tXQUFBRUMKQkFnUUlFQmdVc0FBbWF6RlVRUUlFQ0JBZ0FBQkFnU2FBZ1pJczFlcENC
QWdRSUFBQVFJRUNFd0tHQ0NUdFRpS0FBRUNCQWdRSUVDQQpRRlBBQUduMktoVUJBZ1FJRUNCQWdB
Q0JTUUVEWkxJV1J4RWdRSUFBQVFJRUNCQm9DaGdnelY2bElrQ0FBQUVDQkFnUUlEQXBZSUJNCjF1
SW9BZ1FJRUNCQWdBQUJBazBCQTZUWnExUUVDQkFnUUlBQUFRSUVKZ1VNa01sYUhFV0FBQUVDQkFn
UUlFQ2dLV0NBTkh1VmlnQUIKQWdRSUVDQkFnTUNrZ0FFeVdZdWpDQkFnUUlBQUFRSUVDRFFGREpC
bXIxSVJJRUNBQUFFQ0JBZ1FtQlF3UUNacmNSUUJBZ1FJRUNCQQpnQUNCcG9BQjB1eFZLZ0lFQ0JB
Z1FJQUFBUUtUQWdiSVpDMk9Ja0NBQUFFQ0JBZ1FJTkFVTUVDYXZVcEZnQUFCQWdRSUVDQkFZRkxB
CkFKbXN4VkVFQ0JBZ1FJQUFBUUlFbWdJR1NMTlhxUWdRSUVDQUFBRUNCQWhNQ2hnZ2s3VTRpZ0FC
QWdRSUVDQkFnRUJUd0FCcDlpb1YKQVFJRUNCQWdRSUFBZ1VrQkEyU3lGa2NSSUVDQUFBRUNCQWdR
YUFvWUlNMWVwU0pBZ0FBQkFnUUlFQ0F3S1dDQVROYmlLQUlFQ0JBZwpRSUFBQVFKTkFRT2syYXRV
QkFnUUlFQ0FBQUVDQkNZRkRKREpXaHhGZ0FBQkFnUUlFQ0JBb0NsZ2dEUjdsWW9BQVFJRUNCQWdR
SURBCnBJQUJNbG1Mb3dnUUlFQ0FBQUVDQkFnMEJReVFacTlTRVNCQWdBQUJBZ1FJRUpnVU1FQW1h
M0VVQVFJRUNCQWdRSUFBZ2FhQUFkTHMKVlNvQ0JBZ1FJRUNBQUFFQ2t3SUd5R1F0amlKQWdBQUJB
Z1FJRUNEUUZEQkFtcjFLUllBQUFRSUVDQkFnUUdCU3dBQ1pyTVZSQkFnUQpJRUNBQUFFQ0JKb0NC
a2l6VjZrSUVDQkFnQUFCQWdRSVRBb1lJSk8xT0lvQUFRSUVDQkFnUUlCQVU4QUFhZllxRlFFQ0JB
Z1FJRUNBCkFJRkpBUU5rc2haSEVTQkFnQUFCQWdRSUVHZ0tHQ0ROWHFVaVFJQUFBUUlFQ0JBZ01D
bGdnRXpXNGlnQ0JBZ1FJRUNBQUFFQ1RRRUQKcE5tclZBUUlFQ0JBZ0FBQkFnUW1CUXlReVZvY1JZ
QUFBUUlFQ0JBZ1FLQXBZSUEwZTVXS0FBRUNCQWdRSUVDQXdLU0FBVEpaaTZNSQpFQ0JBZ0FBQkFn
UUlOQVVNa0dhdlVoRWdRSUFBQVFJRUNCQ1lGREJBSm10eEZBRUNCQWdRSUVDQUFJR21nQUhTN0ZV
cUFnUUlFQ0JBCmdBQUJBcE1DQnNoa0xZNGlRSUFBQVFJRUNCQWcwQlF3UUpxOVNrV0FBQUVDQkFn
UUlFQmdVc0FBbWF6RlVRUUlFQ0JBZ0FBQkFnU2EKQWdaSXMxZXBDQkFnUUlBQUFRSUVDRXdLR0ND
VHRUaUtBQUVDQkFnUUlFQ0FRRlBBQUduMktoVUJBZ1FJRUNCQWdBQ0JTUUVEWkxJVwpSeEVnUUlB
QUFRSUVDQkJvQ2hnZ3pWNmxJa0NBQUFFQ0JBZ1FJREFwWUlCTTF1SW9BZ1FJRUNCQWdBQUJBazBC
QTZUWnExUUVDQkFnClFJQUFBUUlFSmdVTWtNbGFIRVdBQUFFQ0JBZ1FJRUNnS1dDQU5IdVZpZ0FC
QWdRSUVDQkFnTUNrZ0FFeVdZdWpDQkFnUUlBQUFRSUUKQ0RRRkRKQm1yMUlSSUVDQUFBRUNCQWdR
bUJRd1FDWnJjUlFCQWdRSUVDQkFnQUNCcG9BQjB1eFZLZ0lFQ0JBZ1FJQUFBUUtUQWdiSQpaQzJP
SWtDQUFBRUNCQWdRSU5BVU1FQ2F2VXBGZ0FBQkFnUUlFQ0JBWUZMQUFKbXN4VkVFQ0JBZ1FJQUFB
UUlFbWdJR1NMTlhxUWdRCklFQ0FBQUVDQkFoTUNoZ2drN1U0aWdBQkFnUUlFQ0JBZ0VCVHdBQnA5
aW9WQVFJRUNCQWdRSUFBZ1VrQkEyU3lGa2NSSUVDQUFBRUMKQkFnUWFBb1lJTTFlcFNKQWdBQUJB
Z1FJRUNBd0tXQ0FUTmJpS0FJRUNCQWdRSUFBQVFKTkFRT2syYXRVQkFnUUlFQ0FBQUVDQkNZRgpE
SkRKV2h4RmdBQUJBZ1FJRUNCQW9DbGdnRFI3bFlvQUFRSUVDQkFnUUlEQXBJQUJNbG1Mb3dnUUlF
Q0FBQUVDQkFnMEJReVFacTlTCkVTQkFnQUFCQWdRSUVKZ1VNRUFtYTNFVUFRSUVDQkFnUUlBQWdh
YUFBZExzVlNvQ0JBZ1FJRUNBQUFFQ2t3SUd5R1F0amlKQWdBQUIKQWdRSUVDRFFGREJBbXIxS1JZ
QUFBUUlFQ0JBZ1FHQlN3QUNack1WUkJBZ1FJRUNBQUFFQ0JKb0NCa2l6VjZrSUVDQkFnQUFCQWdR
SQpUQW9ZSUpPMU9Jb0FBUUlFQ0JBZ1FJQkFVOEFBYWZZcUZRRUNCQWdRSUVDQUFJRkpBUU5rc2ha
SEVTQkFnQUFCQWdRSUVHZ0tHQ0ROClhxVWlRSUFBQVFJRUNCQWdNQ2xnZ0V6VzRpZ0NCQWdRSUVD
QUFBRUNUUUVEcE5tclZBUUlFQ0JBZ0FBQkFnUW1CUXlReVZvY1JZQUEKQVFJRUNCQWdRS0FwWUlB
MGU1V0tBQUVDQkFnUUlFQ0F3S1NBQVRKWmk2TUlFQ0JBZ0FBQkFnUUlOQVVNa0dhdlVoRWdRSUFB
QVFJRQpDQkNZRkRCQUptdHhGQUVDQkFnUUlFQ0FBSUdtZ0FIUzdGVXFBZ1FJRUNCQWdBQUJBcE1D
QnNoa0xZNGlRSUFBQVFJRUNCQWcwQlF3ClFKcTlTa1dBQUFFQ0JBZ1FJRUJnVXNBQW1hekZVUVFJ
RUNCQWdBQUJBZ1NhQWdaSXMxZXBDQkFnUUlBQUFRSUVDRXdLR0NDVHRUaUsKQUFFQ0JBZ1FJRUNB
UUZQQUFHbjJLaFVCQWdRSUVDQkFnQUNCU1FFRFpMSVdSeEVnUUlBQUFRSUVDQkJvQ2hnZ3pWNmxJ
a0NBQUFFQwpCQWdRSURBcFlJQk0xdUlvQWdRSUVDQkFnQUFCQWswQkE2VFpxMVFFQ0JBZ1FJQUFB
UUlFSmdVTWtNbGFIRVdBQUFFQ0JBZ1FJRUNnCktXQ0FOSHVWaWdBQkFnUUlFQ0JBZ01Da2dBRXlX
WXVqQ0JBZ1FJQUFBUUlFQ0RRRkRKQm1yMUlSSUVDQUFBRUNCQWdRbUJRd1FDWnIKY1JRQkFnUUlF
Q0JBZ0FDQnBvQUIwdXhWS2dJRUNCQWdRSUFBQVFLVEFnYklaQzJPSWtDQUFBRUNCQWdRSU5BVU1F
Q2F2VXBGZ0FBQgpBZ1FJRUNCQVlGTEFBSm1zeFZFRUNCQWdRSUFBQVFJRW1nSUdTTE5YcVFnUUlF
Q0FBQUVDQkFoTUNoZ2drN1U0aWdBQkFnUUlFQ0JBCmdFQlR3QUJwOWlvVkFRSUVDQkFnUUlBQWdV
a0JBMlN5RmtjUklFQ0FBQUVDQkFnUWFBb1lJTTFlcFNKQWdBQUJBZ1FJRUNBd0tXQ0EKVE5iaUtB
SUVDQkFnUUlBQUFRSk5BUU9rMmF0VUJBZ1FJRUNBQUFFQ0JDWUZESkRKV2h4RmdBQUJBZ1FJRUNC
QW9DbGdnRFI3bFlvQQpBUUlFQ0JBZ1FJREFwSUFCTWxtTG93Z1FJRUNBQUFFQ0JBZzBCUXlRWnE5
U0VTQkFnQUFCQWdRSUVKZ1VNRUFtYTNFVUFRSUVDQkFnClFJQUFnYWFBQWRMc1ZTb0NCQWdRSUVD
QUFBRUNrd0lHeUdRdGppSkFnQUFCQWdRSUVDRFFGREJBbXIxS1JZQUFBUUlFQ0JBZ1FHQlMKd0FD
WnJNVlJCQWdRSUVDQUFBRUNCSm9DQmtpelY2a0lFQ0JBZ0FBQkFnUUlUQW9ZSUpPMU9Jb0FBUUlF
Q0JBZ1FJQkFVOEFBYWZZcQpGUUVDQkFnUUlFQ0FuQy9USFFBQUNPVkpSRUZVQUlGSkFRTmtzaFpI
RVNCQWdBQUJBZ1FJRUdnS0dDRE5YcVVpUUlBQUFRSUVDQkFnCk1DbGdnRXpXNGlnQ0JBZ1FJRUNB
QUFFQ1RRRURwTm1yVkFRSUVDQkFnQUFCQWdRbUJReVF5Vm9jUllBQUFRSUVDQkFnUUtBcFlJQTAK
ZTVXS0FBRUNCQWdRSUVDQXdLU0FBVEpaaTZNSUVDQkFnQUFCQWdRSU5BVU1rR2F2VWhFZ1FJQUFB
UUlFQ0JDWUZEQkFKbXR4RkFFQwpCQWdRSUVDQUFJR21nQUhTN0ZVcUFnUUlFQ0JBZ0FBQkFwTUNC
c2hrTFk0aVFJQUFBUUlFQ0JBZzBCUXdRSnE5U2tXQUFBRUNCQWdRCklFQmdVc0FBbWF6RlVRUUlF
Q0JBZ0FBQkFnU2FBZ1pJczFlcENCQWdRSUFBQVFJRUNFd0tHQ0NUdFRpS0FBRUNCQWdRSUVDQVFG
UEEKQUduMktoVUJBZ1FJRUNCQWdBQ0JTUUVEWkxJV1J4RWdRSUFBQVFJRUNCQm9DaGdnelY2bElr
Q0FBQUVDQkFnUUlEQXBZSUJNMXVJbwpBZ1FJRUNCQWdBQUJBazBCQTZUWnExUUVDQkFnUUlBQUFR
SUVKZ1VNa01sYUhFV0FBQUVDQkFnUUlFQ2dLV0NBTkh1VmlnQUJBZ1FJCkVDQkFnTUNrZ0FFeVdZ
dWpDQkFnUUlBQUFRSUVDRFFGREpCbXIxSVJJRUNBQUFFQ0JBZ1FtQlF3UUNacmNSUUJBZ1FJRUNC
QWdBQ0IKcG9BQjB1eFZLZ0lFQ0JBZ1FJQUFBUUtUQWdiSVpDMk9Ja0NBQUFFQ0JBZ1FJTkFVTUVD
YXZVcEZnQUFCQWdRSUVDQkFZRkxBQUptcwp4VkVFQ0JBZ1FJQUFBUUlFbWdJR1NMTlhxUWdRSUVD
QUFBRUNCQWhNQ2hnZ2s3VTRpZ0FCQWdRSUVDQkFnRUJUd0FCcDlpb1ZBUUlFCkNCQWdRSUFBZ1Vr
QkEyU3lGa2NSSUVDQUFBRUNCQWdRYUFvWUlNMWVwU0pBZ0FBQkFnUUlFQ0F3S1dDQVROYmlLQUlF
Q0JBZ1FJQUEKQVFKTkFRT2syYXRVQkFnUUlFQ0FBQUVDQkNZRkRKREpXaHhGZ0FBQkFnUUlFQ0JB
b0NsZ2dEUjdsWW9BQVFJRUNCQWdRSURBcElBQgpNbG1Mb3dnUUlFQ0FBQUVDQkFnMEJReVFacTlT
RVNCQWdBQUJBZ1FJRUpnVU1FQW1hM0VVQVFJRUNCQWdRSUFBZ2FhQUFkTHNWU29DCkJBZ1FJRUNB
QUFFQ2t3SUd5R1F0amlKQWdBQUJBZ1FJRUNEUUZEQkFtcjFLUllBQUFRSUVDQkFnUUdCU3dBQ1py
TVZSQkFnUUlFQ0EKQUFFQ0JKb0NCa2l6VjZrSUVDQkFnQUFCQWdRSVRBb1lJSk8xT0lvQUFRSUVD
QkFnUUlCQVU4QUFhZllxRlFFQ0JBZ1FJRUNBQUlGSgpBUU5rc2haSEVTQkFnQUFCQWdRSUVHZ0tH
Q0ROWHFVaVFJQUFBUUlFQ0JBZ01DbGdnRXpXNGlnQ0JBZ1FJRUNBQUFFQ1RRRURwTm1yClZBUUlF
Q0JBZ0FBQkFnUW1CUXlReVZvY1JZQUFBUUlFQ0JBZ1FLQXBZSUEwZTVXS0FBRUNCQWdRSUVDQXdL
U0FBVEpaaTZNSUVDQkEKZ0FBQkFnUUlOQVVNa0dhdlVoRWdRSUFBQVFJRUNCQ1lGREJBSm10eEZB
RUNCQWdRSUVDQUFJR21nQUhTN0ZVcUFnUUlFQ0JBZ0FBQgpBcE1DQnNoa0xZNGlRSUFBQVFJRUNC
QWcwQlF3UUpxOVNrV0FBQUVDQkFnUUlFQmdVc0FBbWF6RlVRUUlFQ0JBZ0FBQkFnU2FBZ1pJCnMx
ZXBDQkFnUUlBQUFRSUVDRXdLR0NDVHRUaUtBQUVDQkFnUUlFQ0FRRlBBQUduMktoVUJBZ1FJRUNC
QWdBQ0JTUUVEWkxJV1J4RWcKUUlBQUFRSUVDQkJvQ2hnZ3pWNmxJa0NBQUFFQ0JBZ1FJREFwWUlC
TTF1SW9BZ1FJRUNCQWdBQUJBazBCQTZUWnExUUVDQkFnUUlBQQpBUUlFSmdVTWtNbGFIRVdBQUFF
Q0JBZ1FJRUNnS1dDQU5IdVZpZ0FCQWdRSUVDQkFnTUNrZ0FFeVdZdWpDQkFnUUlBQUFRSUVDRFFG
CkRKQm1yMUlSSUVDQUFBRUNCQWdRbUJRd1FDWnJjUlFCQWdRSUVDQkFnQUNCcG9BQjB1eFZLZ0lF
Q0JBZ1FJQUFBUUtUQWdiSVpDMk8KSWtDQUFBRUNCQWdRSU5BVU1FQ2F2VXBGZ0FBQkFnUUlFQ0JB
WUZMQUFKbXN4VkVFQ0JBZ1FJQUFBUUlFbWdJR1NMTlhxUWdRSUVDQQpBQUVDQkFoTUNoZ2drN1U0
aWdBQkFnUUlFQ0JBZ0VCVHdBQnA5aW9WQVFJRUNCQWdRSUFBZ1VrQkEyU3lGa2NSSUVDQUFBRUNC
QWdRCmFBb1lJTTFlcFNKQWdBQUJBZ1FJRUNBd0tXQ0FUTmJpS0FJRUNCQWdRSUFBQVFKTkFRT2sy
YXRVQkFnUUlFQ0FBQUVDQkNZRkRKREoKV2h4RmdBQUJBZ1FJRUNCQW9DbGdnRFI3bFlvQUFRSUVD
QkFnUUlEQXBJQUJNbG1Mb3dnUUlFQ0FBQUVDQkFnMEJReVFacTlTRVNCQQpnQUFCQWdRSUVKZ1VN
RUFtYTNFVUFRSUVDQkFnUUlBQWdhYUFBZExzVlNvQ0JBZ1FJRUNBQUFFQ2t3SUd5R1F0amlKQWdB
QUJBZ1FJCkVDRFFGREJBbXIxS1JZQUFBUUlFQ0JBZ1FHQlN3QUNack1WUkJBZ1FJRUNBQUFFQ0JK
b0NCa2l6VjZrSUVDQkFnQUFCQWdRSVRBb1kKSUpPMU9Jb0FBUUlFQ0JBZ1FJQkFVOEFBYWZZcUZR
RUNCQWdRSUVDQUFJRkpBUU5rc2haSEVTQkFnQUFCQWdRSUVHZ0tHQ0ROWHFVaQpRSUFBQVFJRUNC
QWdNQ2xnZ0V6VzRpZ0NCQWdRSUVDQUFBRUNUUUVEcE5tclZBUUlFQ0JBZ0FBQkFnUW1CUXlReVZv
Y1JZQUFBUUlFCkNCQWdRS0FwWUlBMGU1V0tBQUVDQkFnUUlFQ0F3S1NBQVRKWmk2TUlFQ0JBZ0FB
QkFnUUlOQVVNa0dhdlVoRWdRSUFBQVFJRUNCQ1kKRkRCQUptdHhGQUVDQkFnUUlFQ0FBSUdtZ0FI
UzdGVXFBZ1FJRUNCQWdBQUJBcE1DQnNoa0xZNGlRSUFBQVFJRUNCQWcwQlF3UUpxOQpTa1dBQUFF
Q0JBZ1FJRUJnVXNBQW1hekZVUVFJRUNCQWdBQUJBZ1NhQWdaSXMxZXBDQkFnUUlBQUFRSUVDRXdL
R0NDVHRUaUtBQUVDCkJBZ1FJRUNBUUZQQUFHbjJLaFVCQWdRSUVDQkFnQUNCU1FFRFpMSVdSeEVn
UUlBQUFRSUVDQkJvQ2hnZ3pWNmxJa0NBQUFFQ0JBZ1EKSURBcFlJQk0xdUlvQWdRSUVDQkFnQUFC
QWswQkE2VFpxMVFFQ0JBZ1FJQUFBUUlFSmdVTWtNbGFIRVdBQUFFQ0JBZ1FJRUNnS1dDQQpOSHVW
aWdBQkFnUUlFQ0JBZ01Da2dBRXlXWXVqQ0JBZ1FJQUFBUUlFQ0RRRkRKQm1yMUlSSUVDQUFBRUNC
QWdRbUJRd1FDWnJjUlFCCkFnUUlFQ0JBZ0FDQnBvQUIwdXhWS2dJRUNCQWdRSUFBQVFLVEFnYkla
QzJPSWtDQUFBRUNCQWdRSU5BVU1FQ2F2VXBGZ0FBQkFnUUkKRUNCQVlGTEFBSm1zeFZFRUNCQWdR
SUFBQVFJRW1nSUdTTE5YcVFnUUlFQ0FBQUVDQkFoTUNoZ2drN1U0aWdBQkFnUUlFQ0JBZ0VCVAp3
QUJwOWlvVkFRSUVDQkFnUUlBQWdVa0JBMlN5RmtjUklFQ0FBQUVDQkFnUWFBb1lJTTFlcFNKQWdB
QUJBZ1FJRUNBd0tXQ0FUTmJpCktBSUVDQkFnUUlBQUFRSk5nYjhiV2c2ODY3eEliZ0FBQUFCSlJV
NUVya0pnZ2c9PQoK
</data>
<flag name="review"
          id="39927"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>