<?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>137381</bug_id>
          
          <creation_ts>2014-10-02 22:37:27 -0700</creation_ts>
          <short_desc>Use is&lt;&gt;() / downcast&lt;&gt;() for CSSValue subclasses</short_desc>
          <delta_ts>2014-10-03 16:17:09 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>137056</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1039129</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-02 22:37:27 -0700</bug_when>
    <thetext>Use is&lt;&gt;() / downcast&lt;&gt;() for CSSValue subclasses</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039131</commentid>
    <comment_count>1</comment_count>
      <attachid>239180</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-02 23:16:35 -0700</bug_when>
    <thetext>Created attachment 239180
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039132</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-02 23:17:59 -0700</bug_when>
    <thetext>Attachment 239180 did not pass style-queue:


ERROR: Source/WebCore/editing/EditingStyle.cpp:1494:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/CSSValueList.h:99:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 2 in 63 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>1039141</commentid>
    <comment_count>3</comment_count>
      <attachid>239182</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-03 00:13:46 -0700</bug_when>
    <thetext>Created attachment 239182
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039142</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-03 00:16:14 -0700</bug_when>
    <thetext>Attachment 239182 did not pass style-queue:


ERROR: Source/WebCore/editing/EditingStyle.cpp:1494:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/CSSValueList.h:99:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 2 in 63 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>1039244</commentid>
    <comment_count>5</comment_count>
      <attachid>239208</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-03 10:05:44 -0700</bug_when>
    <thetext>Created attachment 239208
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039245</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-03 10:06:43 -0700</bug_when>
    <thetext>Attachment 239208 did not pass style-queue:


ERROR: Source/WebCore/editing/EditingStyle.cpp:1494:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/CSSValueList.h:99:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 2 in 63 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>1039250</commentid>
    <comment_count>7</comment_count>
      <attachid>239209</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-03 10:36:26 -0700</bug_when>
    <thetext>Created attachment 239209
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039252</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-03 10:38:08 -0700</bug_when>
    <thetext>Attachment 239209 did not pass style-queue:


ERROR: Source/WebCore/editing/EditingStyle.cpp:1494:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/CSSValueList.h:99:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 2 in 63 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>1039354</commentid>
    <comment_count>9</comment_count>
      <attachid>239209</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-10-03 14:37:11 -0700</bug_when>
    <thetext>Comment on attachment 239209
Patch

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

&gt; Source/WebCore/css/CSSGradientValue.h:237
&gt; +SPECIALIZE_TYPE_TRAITS_CSS_VALUE(CSSGradientValue, isGradientValue())
&gt; +SPECIALIZE_TYPE_TRAITS_CSS_VALUE(CSSLinearGradientValue, isLinearGradientValue())
&gt; +SPECIALIZE_TYPE_TRAITS_CSS_VALUE(CSSRadialGradientValue, isRadialGradientValue())
&gt; +

IMHO it is better to keep the traits close to the declaration of the class.

&gt; Source/WebCore/css/CSSParser.cpp:5968
&gt;          RefPtr&lt;CSSValue&gt; centerX;
&gt;          RefPtr&lt;CSSValue&gt; centerY;
&gt;          parseFillPosition(args, centerX, centerY);

It&apos;s weird that this is using CSSValue instead of CSSPrimitiveValue directly.

&gt; Source/WebCore/css/CSSToStyleMap.cpp:548
&gt; +    for (unsigned i = 0 ; i &lt; borderImage.length() ; ++i) {

Style: semi-color space.

&gt; Source/WebCore/css/CSSValueList.h:100
&gt; +    { }

Shouldn&apos;t this be on two lines.

&gt; Source/WebCore/css/DeprecatedStyleBuilder.cpp:983
&gt; +                ASSERT(is&lt;CSSPrimitiveValue&gt;(item));

Gosh, I hate this. This should be an ASSERT_WITH_MESSAGE.

&gt; Source/WebCore/css/DeprecatedStyleBuilder.cpp:1181
&gt; -        int length = list ? list-&gt;length() : 0;
&gt; +        CSSValueList&amp; list = downcast&lt;CSSValueList&gt;(*value);
&gt; +        int length = list.length();

Useless code, good catch.

&gt; Source/WebCore/css/DeprecatedStyleBuilder.cpp:1224
&gt; +            int len = list.length();

While you are fixing this cap, let&apos;s rename len to length.

&gt; Source/WebCore/css/DeprecatedStyleBuilder.cpp:1282
&gt; +            ASSERT_WITH_SECURITY_IMPLICATION(is&lt;CSSPrimitiveValue&gt;(item));

IIRC, downcast&lt;&gt; already does that (if not it should).
You should be able to drop the assertion.

&gt; Source/WebCore/css/DeprecatedStyleBuilder.cpp:1447
&gt; +            ASSERT_WITH_SECURITY_IMPLICATION(is&lt;CSSPrimitiveValue&gt;(item));

ditto

&gt; Source/WebCore/css/DeprecatedStyleBuilder.cpp:1474
&gt; +        else if (primitiveValue.isLength()) {
&gt; +            lineHeight = primitiveValue.computeLength&lt;Length&gt;(csstoLengthConversionDataWithTextZoomFactor(*styleResolver));
&gt; +        } else if (primitiveValue.isPercentage()) {

Coding style!!!

&gt; Source/WebCore/css/DeprecatedStyleBuilder.cpp:1557
&gt; +        else if (primitiveValue.isLength()) {
&gt; +            wordSpacing = primitiveValue.computeLength&lt;Length&gt;(csstoLengthConversionDataWithTextZoomFactor(*styleResolver));
&gt; +        } else if (primitiveValue.isPercentage())

coding style

&gt; Source/WebCore/css/DeprecatedStyleBuilder.cpp:1943
&gt;          EResize r = RESIZE_NONE;

arrrrrrr...

Probably coded on talk-like-a-pirate day.

&gt; Source/WebCore/css/DeprecatedStyleBuilder.cpp:2254
&gt; +        for (size_t i = 0; i &lt; valueList.length(); i++) {

++i

&gt; Source/WebCore/css/DeprecatedStyleBuilder.cpp:2256
&gt; +            CSSValue* item = valueList.itemWithoutBoundsCheck(i);
&gt; +            if (!is&lt;CSSPrimitiveValue&gt;(*item))

Why not use a reference from the beginning?
    CSSValue&amp; item = *valueList.itemWithoutBoundsCheck(i);

&gt; Source/WebCore/css/MediaQueryEvaluator.cpp:200
&gt; +    if (is&lt;CSSPrimitiveValue&gt;(*value)
&gt; +        &amp;&amp; downcast&lt;CSSPrimitiveValue&gt;(*value).isNumber()) {

Could be on one line.

&gt; Source/WebCore/css/StyleResolver.cpp:2274
&gt; +                ASSERT_WITH_SECURITY_IMPLICATION(is&lt;CSSPrimitiveValue&gt;(*first));
&gt; +                ASSERT_WITH_SECURITY_IMPLICATION(is&lt;CSSPrimitiveValue&gt;(*second));

Necessary?

&gt; Source/WebCore/css/StyleResolver.cpp:3541
&gt; +            CSSValue* argument = filterValue.itemWithoutBoundsCheck(0);

Why not CSSValue&amp; argument?

&gt; Source/WebCore/css/StyleResolver.cpp:3625
&gt; +            CSSValue* cssValue = filterValue.itemWithoutBoundsCheck(0);

CSSValue&amp; ?

&gt; Source/WebCore/css/TransformFunctions.cpp:93
&gt;          CSSValue* currValue = i.value();

ditto?

&gt; Source/WebCore/css/WebKitCSSMatrix.cpp:66
&gt; +        if (!value || (is&lt;CSSPrimitiveValue&gt;(*value) &amp;&amp; downcast&lt;CSSPrimitiveValue&gt;(*value).getValueID() == CSSValueNone))

Couldn&apos;t you remove the !value and use is&lt;CSSPrimitiveValue&gt;(value)?

&gt; Source/WebCore/editing/ApplyStyleCommand.cpp:1513
&gt; +    ASSERT(is&lt;CSSPrimitiveValue&gt;(value.get()));

This shouldn&apos;t be needed.

&gt; Source/WebCore/editing/EditingStyle.cpp:1082
&gt; +            value = nullptr; // text-decoration: none is equivalent to not having the property

Missing period.

&gt; Source/WebCore/editing/EditingStyle.cpp:1511
&gt; +    for (size_t i = 0; i &lt; valuesInRefTextDecoration.length(); i++)

++i

&gt; Source/WebCore/rendering/RenderTextControl.cpp:87
&gt; +            if (is&lt;CSSPrimitiveValue&gt;(value.get()))

I would be nice to teach the is&lt;&gt; template about Ref and RefPtr.

&gt; Source/WebCore/svg/SVGFontFaceElement.cpp:259
&gt;          for (unsigned i = 0; i &lt; srcLength; i++) {

++i</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039376</commentid>
    <comment_count>10</comment_count>
      <attachid>239243</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-03 15:24:12 -0700</bug_when>
    <thetext>Created attachment 239243
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039379</commentid>
    <comment_count>11</comment_count>
      <attachid>239245</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-03 15:34:06 -0700</bug_when>
    <thetext>Created attachment 239245
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039384</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-03 15:52:38 -0700</bug_when>
    <thetext>Attachment 239245 did not pass style-queue:


ERROR: Source/WebCore/editing/EditingStyle.cpp:1494:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/css/CSSValueList.h:99:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 2 in 63 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>1039397</commentid>
    <comment_count>13</comment_count>
      <attachid>239245</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-03 16:17:04 -0700</bug_when>
    <thetext>Comment on attachment 239245
Patch

Clearing flags on attachment: 239245

Committed r174300: &lt;http://trac.webkit.org/changeset/174300&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039398</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-03 16:17:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239180</attachid>
            <date>2014-10-02 23:16:35 -0700</date>
            <delta_ts>2014-10-03 00:13:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137381-20141002231636.patch</filename>
            <type>text/plain</type>
            <size>278000</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjAwM2JhMmJjMDAzMmFk
YWQ1YTZlYzZkNjIyNTY1MzgzMzI4Mjk1ZS4uYjJkZmY4ZDM2ZmNiN2NiY2MxMWI3NjAxNzQ4MTBl
YjcyYmI2MmJkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0MSBAQAorMjAxNC0xMC0wMiAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSBmb3IgQ1NTVmFsdWUgc3ViY2xhc3NlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzgxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBm
b3IgQ1NTVmFsdWUgc3ViY2xhc3Nlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2
aW9yIGNoYW5nZS4KKworICAgICAgICAqIGNzcy9DU1NBc3BlY3RSYXRpb1ZhbHVlLmg6CisgICAg
ICAgICogY3NzL0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1ND
YWxjdWxhdGlvblZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9u
Tm9kZVBhcnNlcjo6cGFyc2VWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU0NhbGN1bGF0aW9uVmFs
dWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTQ2FudmFzVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEJvcmRl
clJhZGl1c1Nob3J0aGFuZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVF
eHRyYWN0b3I6OnByb3BlcnR5TWF0Y2hlcyk6CisgICAgICAgICogY3NzL0NTU0Nyb3NzZmFkZVZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN1YmltYWdlS25vd25Ub0JlT3BhcXVlKToKKyAg
ICAgICAgKiBjc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDdXJzb3JJbWFnZVZhbHVlOjp+
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDdXJzb3JJbWFnZVZh
bHVlOjp1cGRhdGVJZlNWR0N1cnNvcklzVXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDdXJz
b3JJbWFnZVZhbHVlOjpjYWNoZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDdXJzb3JJ
bWFnZVZhbHVlOjpjYWNoZWRPclBlbmRpbmdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1ND
dXJzb3JJbWFnZVZhbHVlOjppc1NWR0N1cnNvcik6CisgICAgICAgICogY3NzL0NTU0N1cnNvcklt
YWdlVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5oOgorICAgICAg
ICAqIGNzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0ZvbnRGZWF0
dXJlVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKToKKyAgICAgICAgKiBj
c3MvQ1NTRm9udFZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0Z1bmN0aW9uVmFsdWUuaDoKKyAg
ICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NH
cmFkaWVudFZhbHVlOjppbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVl
OjpncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCk6CisgICAgICAgICogY3NzL0NTU0dyYWRpZW50
VmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLmg6CisgICAgICAg
ICogY3NzL0NTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRv
clZhbHVlOjppbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVl
Ojppc0ZpeGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVl
OjpmaXhlZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6
aXNQZW5kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6Omtu
b3duVG9CZU9wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVl
Ojpsb2FkU3ViaW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFs
dWU6OnN1YmltYWdlSXNQZW5kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJh
dG9yVmFsdWU6OmNhY2hlZEltYWdlRm9yQ1NTVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NJbWFn
ZUdlbmVyYXRvclZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0ltYWdlU2V0VmFsdWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VTZXRWYWx1ZTo6ZmlsbEltYWdlU2V0KToKKyAgICAg
ICAgKiBjc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NJbWFnZVZhbHVl
Lmg6CisgICAgICAgICogY3NzL0NTU0luaGVyaXRlZFZhbHVlLmg6CisgICAgICAgICogY3NzL0NT
U0luaXRpYWxWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NMaW5lQm94Q29udGFpblZhbHVlLmg6
CisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OnBhcnNlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjphZGRGaWxsVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjphZGRBbmltYXRpb25WYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlM1ZhbHVlc0ZpbGxQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRmlsbFBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGaWxsUmVwZWF0KToKKyAgICAgICAgKFdlYkNvcmU6
OmdyaWRNaXNzaW5nR3JpZFBvc2l0aW9uVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZUdyaWRUZW1wbGF0ZVJvd3NBbmRBcmVhcyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUNpcmNsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
YXJzZXI6OnBhcnNlQmFzaWNTaGFwZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZURlcHJlY2F0ZWRHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OnBhcnNlRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6cGFyc2VSYWRpYWxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OmNyZWF0ZUZvbnRGYWNlUnVsZSk6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVl
Lmg6CisgICAgICAgICogY3NzL0NTU1JlZmxlY3RWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NT
aGFkb3dWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmg6Cisg
ICAgICAgICogY3NzL0NTU1RvU3R5bGVNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9T
dHlsZU1hcDo6bWFwRmlsbEF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHls
ZU1hcDo6bWFwRmlsbENsaXApOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFw
RmlsbENvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBGaWxs
QmxlbmRNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxPcmln
aW4pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbFJlcGVhdFgpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbFJlcGVhdFkpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbFhQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NUb1N0eWxlTWFwOjptYXBGaWxsWVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Rv
U3R5bGVNYXA6Om1hcEZpbGxNYXNrU291cmNlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjptYXBBbmltYXRpb25EZWxheSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0
eWxlTWFwOjptYXBBbmltYXRpb25EaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9T
dHlsZU1hcDo6bWFwQW5pbWF0aW9uRHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9T
dHlsZU1hcDo6bWFwQW5pbWF0aW9uRmlsbE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9T
dHlsZU1hcDo6bWFwQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjptYXBBbmltYXRpb25QbGF5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VTbGljZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVF1YWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQpOgorICAgICAgICAqIGNz
cy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6aXNJbXBsaWNpdEluaXRpYWxWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTVmFsdWU6Omhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWU6OmVxdWFscyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NWYWx1ZTo6Y3NzVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6ZGVzdHJveSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6Y2xvbmVGb3JDU1NPTSk6CisgICAgICAgICog
Y3NzL0NTU1ZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5oOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTVmFsdWVMaXN0SW5zcGVjdG9yOjpDU1NWYWx1ZUxpc3RJbnNwZWN0b3IpOgor
ICAgICAgICAqIGNzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlEZWZhdWx0OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlOdW1iZXI6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eUF1dG86OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eUNsaXA6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNv
bG9yOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlMZW5ndGg6
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVN0cmluZzo6YXBw
bHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVyUmFkaXVzOjph
cHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGaWxsTGF5ZXI6OmFw
cGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGg6
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnQ6OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRGYW1pbHk6OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250V2VpZ2h0OjphcHBseVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250VmFyaWFudExpZ2F0dXJl
czo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291bnRlcjo6
YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q3Vyc29yOjphcHBs
eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0QWxpZ246OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHREZWNvcmF0aW9uOjph
cHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RGVjb3JhdGlv
blNraXA6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU1hcnF1
ZWVJbmNyZW1lbnQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eU1hcnF1ZWVSZXBldGl0aW9uOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlNYXJxdWVlU3BlZWQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eVRleHRVbmRlcmxpbmVQb3NpdGlvbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5TGluZUhlaWdodDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5TGluZUhlaWdodEZvcklPU1RleHRBdXRvc2l6aW5nOjphcHBs
eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlXb3JkU3BhY2luZzo6YXBw
bHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5UGFnZVNpemU6OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRFbXBoYXNpc1N0eWxl
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RW1waGFz
aXNQb3NpdGlvbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
UmVzaXplOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlWZXJ0
aWNhbEFsaWduOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlB
c3BlY3RSYXRpbzo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
Wm9vbTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGlzcGxh
eTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q2xpcFBhdGg6
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVNoYXBlOjphcHBs
eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlJbWFnZVJlc29sdXRpb246
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRJbmRlbnQ6
OmFwcGx5VmFsdWUpOgorICAgICAgICAqIGNzcy9NZWRpYUxpc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6cmVwb3J0TWVkaWFRdWVyeVdhcm5pbmdJZk5lZWRlZCk6CisgICAgICAgICogY3NzL01l
ZGlhUXVlcnlFdmFsdWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGFyZUFzcGVjdFJh
dGlvVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6bnVtYmVyVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6b3JpZW50YXRpb25NZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OmV2
YWxSZXNvbHV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmRldmljZV9waXhlbF9yYXRpb01lZGlh
RmVhdHVyZUV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x1dGlvbk1lZGlhRmVhdHVyZUV2
YWwpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3Jl
Ojp2aWV3X21vZGVNZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OnBvaW50ZXJN
ZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKiBjc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cm9rZURhc2hBcnJheVRvQ1NTVmFsdWVM
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnN2Z1Byb3Bl
cnR5VmFsdWUpOgorICAgICAgICAqIGNzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkpOgorICAgICAgICAq
IGNzcy9Tb3VyY2VTaXplTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlTGVuZ3Ro
KToKKyAgICAgICAgKiBjc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUHJvcGVydGllczo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKToKKyAgICAgICAgKiBj
c3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0RGlyZWN0aW9u
QW5kV3JpdGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR3JpZFRyYWNrU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHcmlkVHJhY2tMaXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUdyaWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpwYXJzZVNuYXBDb29yZGluYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OnBhcnNlU25hcFBvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJv
bVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9w
ZXJhdGlvbnMpOgorICAgICAgICAqIGNzcy9UcmFuc2Zvcm1GdW5jdGlvbnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dHJhbnNmb3Jtc0ZvclZhbHVlKToKKyAgICAgICAgKiBjc3MvVmlld3BvcnRT
dHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZXdwb3J0U3R5bGVSZXNvbHZl
cjo6Z2V0Vmlld3BvcnRBcmd1bWVudFZhbHVlKToKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTRmls
dGVyVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTTWF0cml4LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYktpdENTU01hdHJpeDo6c2V0TWF0cml4VmFsdWUpOgorICAgICAgICAqIGNz
cy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZTo6dG9XZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxl
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6Y29tcHV0
ZWRGb250U2l6ZSk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6aWRlbnRpZmllckZvclN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEVsZW1lbnRFcXVpdmFsZW50Ojp2YWx1ZUlzUHJlc2VudEluU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudDo6dmFsdWVJc1ByZXNlbnRJ
blN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNzc1ZhbHVlVG9SR0JBKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRpbmdTdHlsZTo6ZXh0cmFjdEZvbnRTaXplRGVsdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdGluZ1N0eWxlOjp0ZXh0RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRpbmdTdHlsZTo6cHJlcGFyZVRvQXBwbHlBdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5n
U3R5bGU6Om1lcmdlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjptZXJn
ZVN0eWxlRnJvbVJ1bGVzRm9yU2VyaWFsaXphdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
aW5nU3R5bGU6OmxlZ2FjeUZvbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHls
ZTo6dGV4dERpcmVjdGlvbkZvclNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNo
YW5nZTo6ZXh0cmFjdFRleHRTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZGlmZlRleHREZWNv
cmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpmb250V2VpZ2h0SXNCb2xkKToKKyAgICAgICAg
KFdlYkNvcmU6OmlzVHJhbnNwYXJlbnRDb2xvclZhbHVlKToKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZVRvZ2dsZVN0eWxlSW5M
aXN0KToKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW06CisgICAgICAg
IChzdHJpbmdGcm9tQ1NTVmFsdWUpOgorICAgICAgICAoSFRNTENvbnZlcnRlckNhY2hlczo6Zmxv
YXRQcm9wZXJ0eVZhbHVlRm9yTm9kZSk6CisgICAgICAgIChIVE1MQ29udmVydGVyQ2FjaGVzOjpj
b2xvclByb3BlcnR5VmFsdWVGb3JOb2RlKToKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpwcm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKToKKyAgICAg
ICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJp
YWxpemVyOjpyZXRyaWV2ZVJlc291cmNlc0ZvclByb3BlcnRpZXMpOgorICAgICAgICAqIHBhZ2Uv
YW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJs
ZW5kRnVuYyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjphZGp1c3RJbm5lclRleHRTdHlsZSk6
CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlUGVuZGluZ0ltYWdlLmg6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVBlbmRpbmdJbWFnZTo6Y3NzSW1hZ2VWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVBlbmRpbmdJbWFnZTo6Y3NzQ3Vyc29ySW1hZ2VWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVBlbmRpbmdJbWFnZTo6Y3NzSW1hZ2VTZXRWYWx1ZSk6CisgICAgICAg
ICogc3ZnL1NWR0NvbG9yLmg6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFjZSk6
CisgICAgICAgICogc3ZnL1NWR1BhaW50Lmg6CisKIDIwMTQtMTAtMDIgIEFuZHkgRXN0ZXMgIDxh
ZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIENyZWF0ZSBhbiBTUEkgd3JhcHBlciBm
b3IgX1VJSGlnaGxpZ2h0VmlldyBhbmQgdXNlIGl0IGluIFdLQ29udGVudFZpZXcKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBc3BlY3RSYXRpb1ZhbHVlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQXNwZWN0UmF0aW9WYWx1ZS5oCmluZGV4IDVkNDU1ZmVjZDhjZWIwMzVhYTVj
YWRmNWQxYzQ4NTE1NjM5YWQ4NWQuLjg3ZDU0NmI4NGY3YmNhNTU0Mzg5Zjg4Njk1YzIyYmQ5MWY5
Nzg5MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBc3BlY3RSYXRpb1ZhbHVl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FzcGVjdFJhdGlvVmFsdWUuaApAQCAtNjAs
OCArNjAsOCBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fZGVub21pbmF0b3JWYWx1ZTsKIH07CiAK
LUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0FzcGVjdFJhdGlvVmFsdWUsIGlzQXNwZWN0UmF0aW9W
YWx1ZSgpKQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi19CitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0NTU19WQUxVRShDU1NBc3BlY3RSYXRpb1ZhbHVlLCBpc0FzcGVjdFJhdGlvVmFsdWUoKSkK
IAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VT
bGljZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVl
LmgKaW5kZXggZmJjMjA0YmM2NTYzZTMxNTFjNjUyMGZhYjYyNjhkMWVhODAzNDAxMy4uOGI5ZmU0
YWNlODhmZThlYTRjYzg5M2U2YjFjYjc1ZjE0OTNlZWY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaApAQCAtNTYsOCArNTYsOCBAQCBwcml2YXRl
OgogICAgIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZShQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBzbGljZXMsIGJvb2wgZmlsbCk7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NC
b3JkZXJJbWFnZVNsaWNlVmFsdWUsIGlzQm9yZGVySW1hZ2VTbGljZVZhbHVlKCkpCi0KIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NT
Qm9yZGVySW1hZ2VTbGljZVZhbHVlLCBpc0JvcmRlckltYWdlU2xpY2VWYWx1ZSgpKQorCiAjZW5k
aWYgLy8gQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
YWxjdWxhdGlvblZhbHVlLmNwcAppbmRleCAzN2E4MTcxNTAxNDFlZDJmODk5YzU2NDFhYjI5OGU3
ODY5NjVlZTEwLi41YTkwNDFkMWMyMWE1NWE0YTdiODdhNzRiOTIzMjc3ZWY0MTk4ZjNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3BwCkBAIC02MDIsMTEgKzYw
MiwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBwYXJzZXJWYWx1ZS0+Y3JlYXRlQ1NTVmFsdWUoKTsKLSAg
ICAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAg
aWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUuZ2V0KCkpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9
IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUuZ2V0KCkpOwotICAgICAgICByZXN1bHQtPnZhbHVl
ID0gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJpbWl0aXZlVmFsdWUsIHBhcnNlclZh
bHVlLT5pc0ludCk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgICAgICByZXN1bHQtPnZh
bHVlID0gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoJnByaW1pdGl2ZVZhbHVlLCBwYXJz
ZXJWYWx1ZS0+aXNJbnQpOwogCiAgICAgICAgICsrKmluZGV4OwogICAgICAgICByZXR1cm4gdHJ1
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oCmluZGV4IGNlMGNiNWE2
ZTBjNjJiMGEyZDc5MWY2ZDJlZmQ1YTg4MWIxY2MyMWIuLmZjMDQ0M2ZjYjE5OTgxMWYwMjEzMzgx
YWYzMzUxNjk2YmY5MGYyYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxj
dWxhdGlvblZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFs
dWUuaApAQCAtMTIyLDggKzEyMiw4IEBAIGlubGluZSBQYXNzUmVmPENhbGN1bGF0aW9uVmFsdWU+
IENTU0NhbGNWYWx1ZTo6Y3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShjb25zdCBDU1NUCiAgICAgICAg
IG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlID8gQ2FsY3VsYXRpb25SYW5nZU5vbk5lZ2F0aXZl
IDogQ2FsY3VsYXRpb25SYW5nZUFsbCk7CiB9CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0Nh
bGNWYWx1ZSwgaXNDYWxjVmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NDYWxjVmFsdWUsIGlzQ2FsY1ZhbHVlKCkp
CisKICNlbmRpZiAvLyBDU1NDYWxjdWxhdGlvblZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZh
c1ZhbHVlLmgKaW5kZXggYjY3ZDA0ZmViYTEwZTM0Yzc0ZDZjZDE4NzA0ZGFlMjFhZDBkZjE4OC4u
MzJlZWM2ZDU4MzNmOTg3OTZjZTdmYTg0MDRmNWEyNGQ3NzU5OTA4ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NhbnZhc1ZhbHVlLmgKQEAgLTEwMiw4ICsxMDIsOCBAQCBwcml2YXRlOgogICAgIEhUTUxD
YW52YXNFbGVtZW50KiBtX2VsZW1lbnQ7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1ND
YW52YXNWYWx1ZSwgaXNDYW52YXNWYWx1ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0NhbnZhc1ZhbHVlLCBpc0NhbnZh
c1ZhbHVlKCkpCisKICNlbmRpZiAvLyBDU1NDYW52YXNWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDA3OTAxNjcz
ODg1NmY5MTBlODdlZjA3YzdlNTM1ZWRkNGIxZjM3MDIuLmNlNWVlNmU0ZWU3Y2NjYzJjYjQ4YmNk
YzliZmEyZTFhOTA4YmMwODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC03NzMsNyArNzczLDcgQEAgc3RhdGljIFBhc3NS
ZWY8Q1NTVmFsdWVMaXN0PiBnZXRCb3JkZXJSYWRpdXNTaG9ydGhhbmRWYWx1ZShjb25zdCBSZW5k
ZXJTdHlsZSogc3QKICAgICBpZiAoc2hvd1ZlcnRpY2FsQm90dG9tTGVmdCkKICAgICAgICAgdmVy
dGljYWxSYWRpaUxpc3QtPmFwcGVuZCgqYm90dG9tTGVmdFJhZGl1cy0+aXRlbSgxKSk7CiAKLSAg
ICBpZiAoIXZlcnRpY2FsUmFkaWlMaXN0LT5lcXVhbHMoKnRvQ1NTVmFsdWVMaXN0KGxpc3QuZ2V0
KCkuaXRlbSgwKSkpKQorICAgIGlmICghdmVydGljYWxSYWRpaUxpc3QtPmVxdWFscyhkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KCpsaXN0LmdldCgpLml0ZW0oMCkpKSkKICAgICAgICAgbGlzdC5nZXQo
KS5hcHBlbmQodmVydGljYWxSYWRpaUxpc3QucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXR1
cm4gbGlzdDsKQEAgLTMxNDksMTMgKzMxNDksMTMgQEAgU3RyaW5nIENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbjo6aXRlbSh1bnNpZ25lZCBpKSBjb25zdAogCiBib29sIENvbXB1dGVkU3R5bGVF
eHRyYWN0b3I6OnByb3BlcnR5TWF0Y2hlcyhDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0
IENTU1ZhbHVlKiB2YWx1ZSkgY29uc3QKIHsKLSAgICBpZiAocHJvcGVydHlJRCA9PSBDU1NQcm9w
ZXJ0eUZvbnRTaXplICYmIHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYgbV9ub2RlKSB7Cisg
ICAgaWYgKHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlGb250U2l6ZSAmJiBpczxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKSAmJiBtX25vZGUpIHsKICAgICAgICAgbV9ub2RlLT5kb2N1bWVudCgp
LnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgICAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSBtX25vZGUtPmNvbXB1dGVkU3R5bGUobV9wc2V1ZG9FbGVtZW50U3BlY2lm
aWVyKTsKICAgICAgICAgaWYgKHN0eWxlICYmIHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5rZXl3
b3JkU2l6ZSgpKSB7CiAgICAgICAgICAgICBDU1NWYWx1ZUlEIHNpemVWYWx1ZSA9IGNzc0lkZW50
aWZpZXJGb3JGb250U2l6ZUtleXdvcmQoc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmtleXdvcmRT
aXplKCkpOwotICAgICAgICAgICAgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZh
bHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUtPmlzVmFsdWVJRCgpICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0g
c2l6ZVZhbHVlKQorICAgICAgICAgICAgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2
ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUuaXNWYWx1ZUlEKCkgJiYgcHJpbWl0aXZlVmFsdWUuZ2V0VmFs
dWVJRCgpID09IHNpemVWYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVW
YWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwCmluZGV4
IGQ0M2RiMWU2YTRhYWU2YzQ4OWZmZTI5ZmI0N2FkYjY2YzVjMmU0N2IuLjE5MDIzY2I5NjM5Njlh
YTdlM2EyMThiNTQyODQ0ZGFkY2U0MGM4OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3Nz
ZmFkZVZhbHVlLmNwcApAQCAtNDcsMTEgKzQ3LDExIEBAIHN0YXRpYyBpbmxpbmUgZG91YmxlIGJs
ZW5kRnVuYyhkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiAKIHN0YXRp
YyBib29sIHN1YmltYWdlS25vd25Ub0JlT3BhcXVlKENTU1ZhbHVlJiB2YWx1ZSwgY29uc3QgUmVu
ZGVyRWxlbWVudCogcmVuZGVyZXIpCiB7Ci0gICAgaWYgKHZhbHVlLmlzSW1hZ2VWYWx1ZSgpKQot
ICAgICAgICByZXR1cm4gdG9DU1NJbWFnZVZhbHVlKHZhbHVlKS5rbm93blRvQmVPcGFxdWUocmVu
ZGVyZXIpOworICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPih2YWx1ZSkpCisgICAgICAgIHJldHVy
biBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPih2YWx1ZSkua25vd25Ub0JlT3BhcXVlKHJlbmRlcmVy
KTsKIAotICAgIGlmICh2YWx1ZS5pc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSkKLSAgICAgICAgcmV0
dXJuIHRvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSh2YWx1ZSkua25vd25Ub0JlT3BhcXVlKHJlbmRl
cmVyKTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKQorICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpLmtub3duVG9C
ZU9wYXF1ZShyZW5kZXJlcik7CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuaAppbmRleCAxNGRhNTljNzk0ZGM3Y2JhMjE5OWQ0
MjA5ODhiZWUwNTQxZTc5OWY1Li4zMzA1NDBiOGEzNDU5MmMzOGUwZjU5ZTliMzQyODBjNTUwNTM3
MTVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuaApAQCAtMTEwLDggKzEx
MCw4IEBAIHByaXZhdGU6CiAgICAgQ3Jvc3NmYWRlU3ViaW1hZ2VPYnNlcnZlclByb3h5IG1fY3Jv
c3NmYWRlU3ViaW1hZ2VPYnNlcnZlcjsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0Ny
b3NzZmFkZVZhbHVlLCBpc0Nyb3NzZmFkZVZhbHVlKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTQ3Jvc3NmYWRlVmFsdWUs
IGlzQ3Jvc3NmYWRlVmFsdWUoKSkKKwogI2VuZGlmIC8vIENTU0Nyb3NzZmFkZVZhbHVlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmNwcAppbmRleCBmNThjOTIwNWFk
ZmI0MWMyODc2NGVmYjhhNDNjNmQyZjNhNGQ4ZDI0Li45ZjQ2ZTc5MTlkNTVhMmMyZTMyZmRmOTM3
ZTU5MTZlYjdiM2ZhOGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFs
dWUuY3BwCkBAIC04MSw3ICs4MSw3IEBAIENTU0N1cnNvckltYWdlVmFsdWU6On5DU1NDdXJzb3JJ
bWFnZVZhbHVlKCkKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFNWR0Vs
ZW1lbnQqIHJlZmVyZW5jZWRFbGVtZW50ID0gKml0OwogICAgICAgICByZWZlcmVuY2VkRWxlbWVu
dC0+Y3Vyc29ySW1hZ2VWYWx1ZVJlbW92ZWQoKTsKLSAgICAgICAgaWYgKFNWR0N1cnNvckVsZW1l
bnQqIGN1cnNvckVsZW1lbnQgPSByZXNvdXJjZVJlZmVyZW5jZWRCeUN1cnNvckVsZW1lbnQodG9D
U1NJbWFnZVZhbHVlKG1faW1hZ2VWYWx1ZS5nZXQoKSkudXJsKCksIHJlZmVyZW5jZWRFbGVtZW50
LT5kb2N1bWVudCgpKSkKKyAgICAgICAgaWYgKFNWR0N1cnNvckVsZW1lbnQqIGN1cnNvckVsZW1l
bnQgPSByZXNvdXJjZVJlZmVyZW5jZWRCeUN1cnNvckVsZW1lbnQoZG93bmNhc3Q8Q1NTSW1hZ2VW
YWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKS51cmwoKSwgcmVmZXJlbmNlZEVsZW1lbnQtPmRvY3Vt
ZW50KCkpKQogICAgICAgICAgICAgY3Vyc29yRWxlbWVudC0+cmVtb3ZlQ2xpZW50KHJlZmVyZW5j
ZWRFbGVtZW50KTsKICAgICB9CiB9CkBAIC0xMDcsNyArMTA3LDcgQEAgYm9vbCBDU1NDdXJzb3JJ
bWFnZVZhbHVlOjp1cGRhdGVJZlNWR0N1cnNvcklzVXNlZChFbGVtZW50KiBlbGVtZW50KQogICAg
IGlmICghaXNTVkdDdXJzb3IoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKFNW
R0N1cnNvckVsZW1lbnQqIGN1cnNvckVsZW1lbnQgPSByZXNvdXJjZVJlZmVyZW5jZWRCeUN1cnNv
ckVsZW1lbnQodG9DU1NJbWFnZVZhbHVlKG1faW1hZ2VWYWx1ZS5nZXQoKSkudXJsKCksIGVsZW1l
bnQtPmRvY3VtZW50KCkpKSB7CisgICAgaWYgKFNWR0N1cnNvckVsZW1lbnQqIGN1cnNvckVsZW1l
bnQgPSByZXNvdXJjZVJlZmVyZW5jZWRCeUN1cnNvckVsZW1lbnQoZG93bmNhc3Q8Q1NTSW1hZ2VW
YWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKS51cmwoKSwgZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsK
ICAgICAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBvdmVycmlkZSBob3Qgc3BvdCBzcGVjaWZpZWQg
aW4gQ1NTLCB3aGljaCBpcyBwcm9iYWJseSBpbmNvcnJlY3QuCiAgICAgICAgIFNWR0xlbmd0aENv
bnRleHQgbGVuZ3RoQ29udGV4dCgwKTsKICAgICAgICAgbV9oYXNIb3RTcG90ID0gdHJ1ZTsKQEAg
LTEzMyw4ICsxMzMsOCBAQCBib29sIENTU0N1cnNvckltYWdlVmFsdWU6OnVwZGF0ZUlmU1ZHQ3Vy
c29ySXNVc2VkKEVsZW1lbnQqIGVsZW1lbnQpCiBTdHlsZUltYWdlKiBDU1NDdXJzb3JJbWFnZVZh
bHVlOjpjYWNoZWRJbWFnZShDYWNoZWRSZXNvdXJjZUxvYWRlciogbG9hZGVyKQogewogI2lmIEVO
QUJMRShDU1NfSU1BR0VfU0VUKQotICAgIGlmIChtX2ltYWdlVmFsdWUuZ2V0KCkuaXNJbWFnZVNl
dFZhbHVlKCkpCi0gICAgICAgIHJldHVybiB0b0NTU0ltYWdlU2V0VmFsdWUobV9pbWFnZVZhbHVl
LmdldCgpKS5jYWNoZWRJbWFnZVNldChsb2FkZXIpOworICAgIGlmIChpczxDU1NJbWFnZVNldFZh
bHVlPihtX2ltYWdlVmFsdWUuZ2V0KCkpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1h
Z2VTZXRWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKS5jYWNoZWRJbWFnZVNldChsb2FkZXIpOwog
I2VuZGlmCiAKICAgICBpZiAoIW1fYWNjZXNzZWRJbWFnZSkgewpAQCAtMTQ1LDcgKzE0NSw3IEBA
IFN0eWxlSW1hZ2UqIENTU0N1cnNvckltYWdlVmFsdWU6OmNhY2hlZEltYWdlKENhY2hlZFJlc291
cmNlTG9hZGVyKiBsb2FkZXIpCiAgICAgICAgIC8vIHdlIGNyZWF0ZSBhbiBhbHRlcm5hdGUgQ1NT
SW1hZ2VWYWx1ZSB0byB1c2UuCiAgICAgICAgIGlmIChpc1NWR0N1cnNvcigpICYmIGxvYWRlciAm
JiBsb2FkZXItPmRvY3VtZW50KCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwg
ZmFpbCBpZiB0aGUgPGN1cnNvcj4gZWxlbWVudCBpcyBpbiBhIHNoYWRvdyBET00gKGJ1ZyA1OTgy
NykKLSAgICAgICAgICAgIGlmIChTVkdDdXJzb3JFbGVtZW50KiBjdXJzb3JFbGVtZW50ID0gcmVz
b3VyY2VSZWZlcmVuY2VkQnlDdXJzb3JFbGVtZW50KHRvQ1NTSW1hZ2VWYWx1ZShtX2ltYWdlVmFs
dWUuZ2V0KCkpLnVybCgpLCAqbG9hZGVyLT5kb2N1bWVudCgpKSkgeworICAgICAgICAgICAgaWYg
KFNWR0N1cnNvckVsZW1lbnQqIGN1cnNvckVsZW1lbnQgPSByZXNvdXJjZVJlZmVyZW5jZWRCeUN1
cnNvckVsZW1lbnQoZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKS51
cmwoKSwgKmxvYWRlci0+ZG9jdW1lbnQoKSkpIHsKICAgICAgICAgICAgICAgICBkZXRhY2hQZW5k
aW5nSW1hZ2UoKTsKICAgICAgICAgICAgICAgICBSZWY8Q1NTSW1hZ2VWYWx1ZT4gc3ZnSW1hZ2VW
YWx1ZShDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY3Vyc29yRWxlbWVudC0+aHJlZigpKSk7CiAgICAg
ICAgICAgICAgICAgU3R5bGVDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBzdmdJbWFnZVZhbHVl
LT5jYWNoZWRJbWFnZShsb2FkZXIpOwpAQCAtMTU0LDkgKzE1NCw5IEBAIFN0eWxlSW1hZ2UqIENT
U0N1cnNvckltYWdlVmFsdWU6OmNhY2hlZEltYWdlKENhY2hlZFJlc291cmNlTG9hZGVyKiBsb2Fk
ZXIpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobV9pbWFnZVZhbHVl
LmdldCgpLmlzSW1hZ2VWYWx1ZSgpKSB7CisgICAgICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPiht
X2ltYWdlVmFsdWUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBkZXRhY2hQZW5kaW5nSW1hZ2UoKTsK
LSAgICAgICAgICAgIG1faW1hZ2UgPSB0b0NTU0ltYWdlVmFsdWUobV9pbWFnZVZhbHVlLmdldCgp
KS5jYWNoZWRJbWFnZShsb2FkZXIpOworICAgICAgICAgICAgbV9pbWFnZSA9IGRvd25jYXN0PENT
U0ltYWdlVmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkuY2FjaGVkSW1hZ2UobG9hZGVyKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtMTcwLDggKzE3MCw4IEBAIFN0eWxlSW1hZ2UqIENTU0N1cnNv
ckltYWdlVmFsdWU6OmNhY2hlZE9yUGVuZGluZ0ltYWdlKERvY3VtZW50JiBkb2N1bWVudCkKIHsK
ICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKICAgICAvLyBOZWVkIHRvIGRlbGVnYXRlIGNvbXBs
ZXRlbHkgc28gdGhhdCBjaGFuZ2VzIGluIGRldmljZSBzY2FsZSBmYWN0b3IgY2FuIGJlIGhhbmRs
ZWQgYXBwcm9wcmlhdGVseS4KLSAgICBpZiAobV9pbWFnZVZhbHVlLmdldCgpLmlzSW1hZ2VTZXRW
YWx1ZSgpKQotICAgICAgICByZXR1cm4gdG9DU1NJbWFnZVNldFZhbHVlKG1faW1hZ2VWYWx1ZS5n
ZXQoKSkuY2FjaGVkT3JQZW5kaW5nSW1hZ2VTZXQoZG9jdW1lbnQpOworICAgIGlmIChpczxDU1NJ
bWFnZVNldFZhbHVlPihtX2ltYWdlVmFsdWUuZ2V0KCkpKQorICAgICAgICByZXR1cm4gZG93bmNh
c3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKS5jYWNoZWRPclBlbmRpbmdJ
bWFnZVNldChkb2N1bWVudCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7CiAj
ZW5kaWYKQEAgLTE4NCw4ICsxODQsOCBAQCBTdHlsZUltYWdlKiBDU1NDdXJzb3JJbWFnZVZhbHVl
OjpjYWNoZWRPclBlbmRpbmdJbWFnZShEb2N1bWVudCYgZG9jdW1lbnQpCiAKIGJvb2wgQ1NTQ3Vy
c29ySW1hZ2VWYWx1ZTo6aXNTVkdDdXJzb3IoKSBjb25zdAogewotICAgIGlmIChtX2ltYWdlVmFs
dWUuZ2V0KCkuaXNJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAgVVJMIGt1cmwoUGFyc2VkVVJMU3Ry
aW5nLCB0b0NTU0ltYWdlVmFsdWUobV9pbWFnZVZhbHVlLmdldCgpKS51cmwoKSk7CisgICAgaWYg
KGlzPENTU0ltYWdlVmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkpIHsKKyAgICAgICAgVVJMIGt1
cmwoUGFyc2VkVVJMU3RyaW5nLCBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX2ltYWdlVmFsdWUu
Z2V0KCkpLnVybCgpKTsKICAgICAgICAgcmV0dXJuIGt1cmwuaGFzRnJhZ21lbnRJZGVudGlmaWVy
KCk7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZS5oCmluZGV4IDY1MWNkNjMzMDBiNGNhMTA1NmEzMjgzNjg5ZDkxYTA0NGViYTkx
ODAuLjg2ZGY3YWRhNDI3ZDI1MzQwODhmMzA4OWI1OTQzODgxYjI0ZDIxODMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuaApAQCAtNzgsOCArNzgsOCBAQCBwcml2YXRl
OgogICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+IG1fcmVmZXJlbmNlZEVsZW1lbnRzOwogfTsKIAot
Q1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSwgaXNDdXJzb3JJbWFnZVZh
bHVlKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19DU1NfVkFMVUUoQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSwgaXNDdXJzb3JJbWFnZVZhbHVlKCkpCisK
ICNlbmRpZiAvLyBDU1NDdXJzb3JJbWFnZVZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmls
dGVySW1hZ2VWYWx1ZS5oCmluZGV4IDYwMDVmN2U3YzA0YzY4NGFkMDk5ODlhZTg5YjcwM2IyMDFm
OGEwNjMuLjNjMDY4ZDU4Y2NhMDNhZTJiNThiZmM0ZDhiM2I2ODBkNWM2Y2E3NmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuaApAQCAtMTE3LDggKzExNyw4IEBAIHBy
aXZhdGU6CiAgICAgRmlsdGVyU3ViaW1hZ2VPYnNlcnZlclByb3h5IG1fZmlsdGVyU3ViaW1hZ2VP
YnNlcnZlcjsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0ZpbHRlckltYWdlVmFsdWUs
IGlzRmlsdGVySW1hZ2VWYWx1ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0ZpbHRlckltYWdlVmFsdWUsIGlzRmlsdGVy
SW1hZ2VWYWx1ZSgpKQorCiAjZW5kaWYgLy8gQ1NTRmlsdGVySW1hZ2VWYWx1ZV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaAppbmRleCA4OTIxMDcyMTRkMDlkMTBkMGMz
NTk5NTY5NTk1NGZlZDFlM2RlZGJmLi4yMzA3MzQ2MGY3MzJiODJjY2E1ODgxNDQ2NWUwYWI2ZWJh
NjI4Y2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmgKQEAgLTM3
LDcgKzM3LDcgQEAgY2xhc3MgQ2FjaGVkRm9udDsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgU1ZH
Rm9udEZhY2VFbGVtZW50OwogCi1jbGFzcyBDU1NGb250RmFjZVNyY1ZhbHVlIDogcHVibGljIENT
U1ZhbHVlIHsKK2NsYXNzIENTU0ZvbnRGYWNlU3JjVmFsdWUgZmluYWwgOiBwdWJsaWMgQ1NTVmFs
dWUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmPENTU0ZvbnRGYWNlU3JjVmFsdWU+IGNy
ZWF0ZShjb25zdCBTdHJpbmcmIHJlc291cmNlKQogICAgIHsKQEAgLTk1LDggKzk1LDggQEAgcHJp
dmF0ZToKICNlbmRpZgogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTRm9udEZhY2VTcmNW
YWx1ZSwgaXNGb250RmFjZVNyY1ZhbHVlKCkpCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLX0K
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0ZvbnRGYWNlU3JjVmFsdWUsIGlz
Rm9udEZhY2VTcmNWYWx1ZSgpKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmVhdHVyZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZl
YXR1cmVWYWx1ZS5oCmluZGV4IGRmMWNkMTc1OWNkYTNlYThkM2FhMzFkMzNjNzY0MzQ5ZDNmNzNm
NGEuLmNmNmMzODFmZWNhMTU1MWJhYzRkMjU2Mzk3MTM0YjA2OTUyZGYzNDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmVhdHVyZVZhbHVlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRGZWF0dXJlVmFsdWUuaApAQCAtNTEsOCArNTEsOCBAQCBwcml2YXRl
OgogICAgIGNvbnN0IGludCBtX3ZhbHVlOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NT
Rm9udEZlYXR1cmVWYWx1ZSwgaXNGb250RmVhdHVyZVZhbHVlKCkpCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKLX0gLy8gbmFtZXNwYWNlCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxV
RShDU1NGb250RmVhdHVyZVZhbHVlLCBpc0ZvbnRGZWF0dXJlVmFsdWUoKSkKIAogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCmluZGV4IDBhZDk4MjM1M2ZhM2QwMGEy
YTQ2ZGRmNjQyNjM2MmYxMjAwNTFkZTcuLjM5MjVhZWUyNGViYTFjM2Y3NWNjNTAwZTA1NDAwMjRm
NDZiYzFjYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCkBAIC05MSwy
NiArOTEsMjYgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjb25zdCBT
dHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlKQogICAgIFJlZlB0cjxDU1NWYWx1ZT4gZm9u
dEZhbWlseSA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5
KTsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHNyYyA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUo
Q1NTUHJvcGVydHlTcmMpOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5pY29kZVJhbmdlID0gc3R5
bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVSYW5nZSk7Ci0gICAgaWYg
KCFmb250RmFtaWx5IHx8ICFzcmMgfHwgIWZvbnRGYW1pbHktPmlzVmFsdWVMaXN0KCkgfHwgIXNy
Yy0+aXNWYWx1ZUxpc3QoKSB8fCAodW5pY29kZVJhbmdlICYmICF1bmljb2RlUmFuZ2UtPmlzVmFs
dWVMaXN0KCkpKQorICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0Pihmb250RmFtaWx5LmdldCgpKSB8
fCAhaXM8Q1NTVmFsdWVMaXN0PihzcmMuZ2V0KCkpIHx8ICh1bmljb2RlUmFuZ2UgJiYgIWlzPENT
U1ZhbHVlTGlzdD4oKnVuaWNvZGVSYW5nZSkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NW
YWx1ZUxpc3QqIGZhbWlseUxpc3QgPSB0b0NTU1ZhbHVlTGlzdChmb250RmFtaWx5LmdldCgpKTsK
LSAgICBpZiAoIWZhbWlseUxpc3QtPmxlbmd0aCgpKQorICAgIENTU1ZhbHVlTGlzdCYgZmFtaWx5
TGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKmZvbnRGYW1pbHkpOworICAgIGlmICghZmFt
aWx5TGlzdC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTVmFsdWVMaXN0KiBz
cmNMaXN0ID0gdG9DU1NWYWx1ZUxpc3Qoc3JjLmdldCgpKTsKLSAgICBpZiAoIXNyY0xpc3QtPmxl
bmd0aCgpKQorICAgIENTU1ZhbHVlTGlzdCYgc3JjTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlz
dD4oKnNyYyk7CisgICAgaWYgKCFzcmNMaXN0Lmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBDU1NWYWx1ZUxpc3QqIHJhbmdlTGlzdCA9IHRvQ1NTVmFsdWVMaXN0KHVuaWNvZGVSYW5n
ZS5nZXQoKSk7CisgICAgQ1NTVmFsdWVMaXN0KiByYW5nZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1
ZUxpc3Q+KHVuaWNvZGVSYW5nZS5nZXQoKSk7CiAKICAgICB1bnNpZ25lZCB0cmFpdHNNYXNrID0g
MDsKIAogICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IGZvbnRTdHlsZSA9IHN0eWxlLmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUpKSB7Ci0gICAgICAgIGlmICghZm9udFN0
eWxlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCpmb250U3R5bGUpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHN3aXRjaCAo
dG9DU1NQcmltaXRpdmVWYWx1ZShmb250U3R5bGUuZ2V0KCkpLT5nZXRWYWx1ZUlEKCkpIHsKKyAg
ICAgICAgc3dpdGNoIChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmZvbnRTdHlsZSkuZ2V0
VmFsdWVJRCgpKSB7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6CiAgICAgICAgICAgICB0
cmFpdHNNYXNrIHw9IEZvbnRTdHlsZU5vcm1hbE1hc2s7CiAgICAgICAgICAgICBicmVhazsKQEAg
LTEyNSwxMCArMTI1LDEwIEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUo
Y29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSkKICAgICAgICAgdHJhaXRzTWFz
ayB8PSBGb250U3R5bGVOb3JtYWxNYXNrOwogCiAgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gZm9u
dFdlaWdodCA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0
KSkgewotICAgICAgICBpZiAoIWZvbnRXZWlnaHQtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAg
ICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmZvbnRXZWlnaHQpKQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIHN3aXRjaCAodG9DU1NQcmltaXRpdmVWYWx1ZShmb250V2VpZ2h0
LmdldCgpKS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgICAgIHN3aXRjaCAoZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCpmb250V2VpZ2h0KS5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgY2FzZSBD
U1NWYWx1ZUJvbGQ6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWU3MDA6CiAgICAgICAgICAgICB0cmFp
dHNNYXNrIHw9IEZvbnRXZWlnaHQ3MDBNYXNrOwpAQCAtMTcwLDE2ICsxNzAsMTYgQEAgdm9pZCBD
U1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSog
Zm9udEZhY2VSdWxlKQogICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENT
U1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICAgICAgICAgIGxpc3QtPmFw
cGVuZChmb250VmFyaWFudC5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAgIGZvbnRWYXJp
YW50ID0gbGlzdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICB9IGVsc2UgaWYgKCFmb250VmFy
aWFudC0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgfSBlbHNlIGlmICghaXM8Q1NTVmFsdWVMaXN0
PigqZm9udFZhcmlhbnQpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIENTU1ZhbHVl
TGlzdCogdmFyaWFudExpc3QgPSB0b0NTU1ZhbHVlTGlzdChmb250VmFyaWFudC5nZXQoKSk7Ci0g
ICAgICAgIHVuc2lnbmVkIG51bVZhcmlhbnRzID0gdmFyaWFudExpc3QtPmxlbmd0aCgpOworICAg
ICAgICBDU1NWYWx1ZUxpc3QmIHZhcmlhbnRMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pigq
Zm9udFZhcmlhbnQpOworICAgICAgICB1bnNpZ25lZCBudW1WYXJpYW50cyA9IHZhcmlhbnRMaXN0
Lmxlbmd0aCgpOwogICAgICAgICBpZiAoIW51bVZhcmlhbnRzKQogICAgICAgICAgICAgcmV0dXJu
OwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1WYXJpYW50czsgKytpKSB7
Ci0gICAgICAgICAgICBzd2l0Y2ggKHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFyaWFudExpc3QtPml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICAgICAgICAgIHN3
aXRjaCAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhcmlhbnRMaXN0Lml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soaSkpLT5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIENT
U1ZhbHVlTm9ybWFsOgogICAgICAgICAgICAgICAgICAgICB0cmFpdHNNYXNrIHw9IEZvbnRWYXJp
YW50Tm9ybWFsTWFzazsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTYsMjUgKzE5
NiwyNSBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvbnN0IFN0eWxl
UnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUpCiAgICAgLy8gRWFjaCBpdGVtIGluIHRoZSBzcmMg
cHJvcGVydHkncyBsaXN0IGlzIGEgc2luZ2xlIENTU0ZvbnRGYWNlU291cmNlLiBQdXQgdGhlbSBh
bGwgaW50byBhIENTU0ZvbnRGYWNlLgogICAgIFJlZlB0cjxDU1NGb250RmFjZT4gZm9udEZhY2U7
CiAKLSAgICBpbnQgc3JjTGVuZ3RoID0gc3JjTGlzdC0+bGVuZ3RoKCk7CisgICAgaW50IHNyY0xl
bmd0aCA9IHNyY0xpc3QubGVuZ3RoKCk7CiAKICAgICBib29sIGZvdW5kU1ZHRm9udCA9IGZhbHNl
OwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzcmNMZW5ndGg7IGkrKykgewogICAgICAgICAv
LyBBbiBpdGVtIGluIHRoZSBsaXN0IGVpdGhlciBzcGVjaWZpZXMgYSBzdHJpbmcgKGxvY2FsIGZv
bnQgbmFtZSkgb3IgYSBVUkwgKHJlbW90ZSBmb250IHRvIGRvd25sb2FkKS4KLSAgICAgICAgQ1NT
Rm9udEZhY2VTcmNWYWx1ZSogaXRlbSA9IHRvQ1NTRm9udEZhY2VTcmNWYWx1ZShzcmNMaXN0LT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKKyAgICAgICAgQ1NTRm9udEZhY2VTcmNWYWx1ZSYg
aXRlbSA9IGRvd25jYXN0PENTU0ZvbnRGYWNlU3JjVmFsdWU+KCpzcmNMaXN0Lml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soaSkpOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTRm9udEZhY2VTb3Vy
Y2U+IHNvdXJjZTsKIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgICAgIGZvdW5kU1ZHRm9u
dCA9IGl0ZW0tPmlzU1ZHRm9udEZhY2VTcmMoKSB8fCBpdGVtLT5zdmdGb250RmFjZUVsZW1lbnQo
KTsKKyAgICAgICAgZm91bmRTVkdGb250ID0gaXRlbS5pc1NWR0ZvbnRGYWNlU3JjKCkgfHwgaXRl
bS5zdmdGb250RmFjZUVsZW1lbnQoKTsKICNlbmRpZgotICAgICAgICBpZiAoIWl0ZW0tPmlzTG9j
YWwoKSkgeworICAgICAgICBpZiAoIWl0ZW0uaXNMb2NhbCgpKSB7CiAgICAgICAgICAgICBTZXR0
aW5ncyogc2V0dGluZ3MgPSBtX2RvY3VtZW50ID8gbV9kb2N1bWVudC0+ZnJhbWUoKSA/ICZtX2Rv
Y3VtZW50LT5mcmFtZSgpLT5zZXR0aW5ncygpIDogMCA6IDA7CiAgICAgICAgICAgICBib29sIGFs
bG93RG93bmxvYWRpbmcgPSBmb3VuZFNWR0ZvbnQgfHwgKHNldHRpbmdzICYmIHNldHRpbmdzLT5k
b3dubG9hZGFibGVCaW5hcnlGb250c0VuYWJsZWQoKSk7Ci0gICAgICAgICAgICBpZiAoYWxsb3dE
b3dubG9hZGluZyAmJiBpdGVtLT5pc1N1cHBvcnRlZEZvcm1hdCgpICYmIG1fZG9jdW1lbnQpIHsK
LSAgICAgICAgICAgICAgICBDYWNoZWRGb250KiBjYWNoZWRGb250ID0gaXRlbS0+Y2FjaGVkRm9u
dChtX2RvY3VtZW50KTsKKyAgICAgICAgICAgIGlmIChhbGxvd0Rvd25sb2FkaW5nICYmIGl0ZW0u
aXNTdXBwb3J0ZWRGb3JtYXQoKSAmJiBtX2RvY3VtZW50KSB7CisgICAgICAgICAgICAgICAgQ2Fj
aGVkRm9udCogY2FjaGVkRm9udCA9IGl0ZW0uY2FjaGVkRm9udChtX2RvY3VtZW50KTsKICAgICAg
ICAgICAgICAgICBpZiAoY2FjaGVkRm9udCkgewotICAgICAgICAgICAgICAgICAgICBzb3VyY2Ug
PSBzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihpdGVtLT5yZXNvdXJjZSgpLCBj
YWNoZWRGb250KTsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlID0gc3RkOjptYWtlX3VuaXF1
ZTxDU1NGb250RmFjZVNvdXJjZT4oaXRlbS5yZXNvdXJjZSgpLCBjYWNoZWRGb250KTsKICNpZiBF
TkFCTEUoU1ZHX0ZPTlRTKQogICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRTVkdGb250KQog
ICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLT5zZXRIYXNFeHRlcm5hbFNWR0ZvbnQodHJ1
ZSk7CkBAIC0yMjIsNyArMjIyLDcgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNl
UnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlKQogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNvdXJj
ZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTRm9udEZhY2VTb3VyY2U+KGl0ZW0tPnJlc291cmNlKCkp
OworICAgICAgICAgICAgc291cmNlID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NGb250RmFjZVNvdXJj
ZT4oaXRlbS5yZXNvdXJjZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghZm9udEZhY2Up
IHsKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VS
dWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUpCiAKICAgICAgICAgaWYg
KHNvdXJjZSkgewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgICAgICAgICBzb3VyY2UtPnNl
dFNWR0ZvbnRGYWNlRWxlbWVudChpdGVtLT5zdmdGb250RmFjZUVsZW1lbnQoKSk7CisgICAgICAg
ICAgICBzb3VyY2UtPnNldFNWR0ZvbnRGYWNlRWxlbWVudChpdGVtLnN2Z0ZvbnRGYWNlRWxlbWVu
dCgpKTsKICNlbmRpZgogICAgICAgICAgICAgZm9udEZhY2UtPmFkZFNvdXJjZShXVEY6Om1vdmUo
c291cmNlKSk7CiAgICAgICAgIH0KQEAgLTI1MSwxNSArMjUxLDE1IEBAIHZvaWQgQ1NTRm9udFNl
bGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNl
UnVsZSkKICAgICBpZiAocmFuZ2VMaXN0KSB7CiAgICAgICAgIHVuc2lnbmVkIG51bVJhbmdlcyA9
IHJhbmdlTGlzdC0+bGVuZ3RoKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1SYW5nZXM7IGkrKykgewotICAgICAgICAgICAgQ1NTVW5pY29kZVJhbmdlVmFsdWUqIHJhbmdl
ID0gdG9DU1NVbmljb2RlUmFuZ2VWYWx1ZShyYW5nZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soaSkpOwotICAgICAgICAgICAgZm9udEZhY2UtPmFkZFJhbmdlKHJhbmdlLT5mcm9tKCksIHJh
bmdlLT50bygpKTsKKyAgICAgICAgICAgIENTU1VuaWNvZGVSYW5nZVZhbHVlJiByYW5nZSA9IGRv
d25jYXN0PENTU1VuaWNvZGVSYW5nZVZhbHVlPigqcmFuZ2VMaXN0LT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKGkpKTsKKyAgICAgICAgICAgIGZvbnRGYWNlLT5hZGRSYW5nZShyYW5nZS5mcm9tKCks
IHJhbmdlLnRvKCkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gSGFzaCB1bmRlciBldmVy
eSBzaW5nbGUgZmFtaWx5IG5hbWUuCi0gICAgaW50IGZhbWlseUxlbmd0aCA9IGZhbWlseUxpc3Qt
Pmxlbmd0aCgpOworICAgIGludCBmYW1pbHlMZW5ndGggPSBmYW1pbHlMaXN0Lmxlbmd0aCgpOwog
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmFtaWx5TGVuZ3RoOyBpKyspIHsKLSAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIGl0ZW0gPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGZhbWlseUxpc3QtPml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogaXRl
bSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihmYW1pbHlMaXN0Lml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soaSkpOwogICAgICAgICBTdHJpbmcgZmFtaWx5TmFtZTsKICAgICAgICAgaWYgKGl0
ZW0tPmlzU3RyaW5nKCkpIHsKICAgICAgICAgICAgIGZhbWlseU5hbWUgPSBpdGVtLT5nZXRTdHJp
bmdWYWx1ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRWYWx1ZS5o
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRWYWx1ZS5oCmluZGV4IDgxYWM0MWE3YWMwOTg0
NTczYTVjZGM0MGM0OTU1ODI3NDIxMTU5OWMuLjAwZDcwMWY4YzMyNDhjYzkyNWMyNzdjNTYzYzc1
MzE2N2Q1ODVhZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250VmFsdWUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFZhbHVlLmgKQEAgLTU1LDggKzU1LDgg
QEAgcHJpdmF0ZToKICAgICB9CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NGb250VmFs
dWUsIGlzRm9udFZhbHVlKCkpCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLX0gLy8gbmFtZXNw
YWNlCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NGb250VmFsdWUsIGlzRm9u
dFZhbHVlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Z1
bmN0aW9uVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGdW5jdGlvblZhbHVlLmgKaW5k
ZXggNTExMTIzYjg3MzNhZjNkN2ExYmQxMmM0YTcwYzlmMmU3ODVlYjUxZS4uNTUxZjQ1ZTg4NzRk
MDM0NmJkYmU2MDI3YTQ5NTA2MjQwYzdiODhjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0Z1bmN0aW9uVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRnVuY3Rp
b25WYWx1ZS5oCkBAIC01OSw4ICs1OSw5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPENTU1ZhbHVl
TGlzdD4gbV9hcmdzOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTRnVuY3Rpb25WYWx1
ZSwgaXNGdW5jdGlvblZhbHVlKCkpCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0Z1bmN0aW9uVmFsdWUsIGlzRnVuY3Rpb25WYWx1
ZSgpKQogCi19CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
YWRpZW50VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3Bw
CmluZGV4IDQzMzMyYzBiZmExMzMyY2QxYTFiM2MyZTM4NGE3YjkwNWFhOTE5ZDEuLjMwMjY3NTll
M2MzMWNkZTEzMWUyY2ZjODcwNzE1N2VhNzhmYWI4YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
R3JhZGllbnRWYWx1ZS5jcHAKQEAgLTQ2LDEyICs0NiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBQYXNzUmVmUHRyPEltYWdlPiBDU1NHcmFkaWVudFZhbHVlOjppbWFnZShSZW5kZXJFbGVtZW50
KiByZW5kZXJlciwgY29uc3QgRmxvYXRTaXplJiBzaXplKQogewogICAgIGlmIChzaXplLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
Ym9vbCBjYWNoZWFibGUgPSBpc0NhY2hlYWJsZSgpOwogICAgIGlmIChjYWNoZWFibGUpIHsKICAg
ICAgICAgaWYgKCFjbGllbnRzKCkuY29udGFpbnMocmVuZGVyZXIpKQotICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBJbWFnZSogcmVz
dWx0ID0gY2FjaGVkSW1hZ2VGb3JTaXplKHNpemUpOwogICAgICAgICBpZiAocmVzdWx0KQpAQCAt
NjAsMTAgKzYwLDEwIEBAIFBhc3NSZWZQdHI8SW1hZ2U+IENTU0dyYWRpZW50VmFsdWU6OmltYWdl
KFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpCiAKICAgICBSZWZQdHI8R3Jh
ZGllbnQ+IGdyYWRpZW50OwogCi0gICAgaWYgKGlzTGluZWFyR3JhZGllbnRWYWx1ZSgpKQotICAg
ICAgICBncmFkaWVudCA9IHRvQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSh0aGlzKS0+Y3JlYXRlR3Jh
ZGllbnQoKnJlbmRlcmVyLCBzaXplKTsKKyAgICBpZiAoaXM8Q1NTTGluZWFyR3JhZGllbnRWYWx1
ZT4oKnRoaXMpKQorICAgICAgICBncmFkaWVudCA9IGRvd25jYXN0PENTU0xpbmVhckdyYWRpZW50
VmFsdWU+KCp0aGlzKS5jcmVhdGVHcmFkaWVudCgqcmVuZGVyZXIsIHNpemUpOwogICAgIGVsc2UK
LSAgICAgICAgZ3JhZGllbnQgPSB0b0NTU1JhZGlhbEdyYWRpZW50VmFsdWUodGhpcyktPmNyZWF0
ZUdyYWRpZW50KCpyZW5kZXJlciwgc2l6ZSk7CisgICAgICAgIGdyYWRpZW50ID0gZG93bmNhc3Q8
Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnRoaXMpLmNyZWF0ZUdyYWRpZW50KCpyZW5kZXJlciwg
c2l6ZSk7CiAKICAgICBSZWZQdHI8R3JhZGllbnRJbWFnZT4gbmV3SW1hZ2UgPSBHcmFkaWVudElt
YWdlOjpjcmVhdGUoZ3JhZGllbnQsIHNpemUpOwogICAgIGlmIChjYWNoZWFibGUpCkBAIC0xMTgs
MTMgKzExOCwxMyBAQCBQYXNzUmVmUHRyPENTU0dyYWRpZW50VmFsdWU+IENTU0dyYWRpZW50VmFs
dWU6OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlUgogICAgIFJlZlB0cjxDU1NHcmFk
aWVudFZhbHVlPiByZXN1bHQ7CiAgICAgaWYgKCFkZXJpdmVkKQogICAgICAgICByZXN1bHQgPSB0
aGlzOwotICAgIGVsc2UgaWYgKGlzTGluZWFyR3JhZGllbnRWYWx1ZSgpKQotICAgICAgICByZXN1
bHQgPSB0b0NTU0xpbmVhckdyYWRpZW50VmFsdWUodGhpcyktPmNsb25lKCk7Ci0gICAgZWxzZSBp
ZiAoaXNSYWRpYWxHcmFkaWVudFZhbHVlKCkpCi0gICAgICAgIHJlc3VsdCA9IHRvQ1NTUmFkaWFs
R3JhZGllbnRWYWx1ZSh0aGlzKS0+Y2xvbmUoKTsKKyAgICBlbHNlIGlmIChpczxDU1NMaW5lYXJH
cmFkaWVudFZhbHVlPigqdGhpcykpCisgICAgICAgIHJlc3VsdCA9IGRvd25jYXN0PENTU0xpbmVh
ckdyYWRpZW50VmFsdWU+KCp0aGlzKS5jbG9uZSgpOworICAgIGVsc2UgaWYgKGlzPENTU1JhZGlh
bEdyYWRpZW50VmFsdWU+KCp0aGlzKSkKKyAgICAgICAgcmVzdWx0ID0gZG93bmNhc3Q8Q1NTUmFk
aWFsR3JhZGllbnRWYWx1ZT4oKnRoaXMpLmNsb25lKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBzdG9wIDogcmVzdWx0LT5tX3N0b3BzKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAppbmRleCBlNDUyMTJmMzBlZWVlZTk5
ZWRiZWY5NDAxODU2Mzc0MDVhMTdjM2U3Li42YWI3OGRiMDI5NWY0MzAwMTI4Zjc0MTVlYTRiMWJk
MzAyMGQ5ZTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgKQEAgLTEzMSw4
ICsxMzEsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX3JlcGVhdGluZzsKIH07CiAKLUNTU19W
QUxVRV9UWVBFX0NBU1RTKENTU0dyYWRpZW50VmFsdWUsIGlzR3JhZGllbnRWYWx1ZSgpKQotCiBj
bGFzcyBDU1NMaW5lYXJHcmFkaWVudFZhbHVlIDogcHVibGljIENTU0dyYWRpZW50VmFsdWUgewog
cHVibGljOgogCkBAIC0xNzAsOCArMTY4LDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IG1fYW5nbGU7IC8vIG1heSBiZSBudWxsLgogfTsKIAotQ1NTX1ZBTFVFX1RZ
UEVfQ0FTVFMoQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSwgaXNMaW5lYXJHcmFkaWVudFZhbHVlKCkp
Ci0KIGNsYXNzIENTU1JhZGlhbEdyYWRpZW50VmFsdWUgOiBwdWJsaWMgQ1NTR3JhZGllbnRWYWx1
ZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWY8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4g
Y3JlYXRlKENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdCwgQ1NTR3JhZGllbnRUeXBlIGdyYWRpZW50
VHlwZSA9IENTU1JhZGlhbEdyYWRpZW50KQpAQCAtMjMzLDggKzIyOSwxMCBAQCBwcml2YXRlOgog
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9lbmRWZXJ0aWNhbFNpemU7CiB9OwogCi1D
U1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NSYWRpYWxHcmFkaWVudFZhbHVlLCBpc1JhZGlhbEdyYWRp
ZW50VmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0NTU19WQUxVRShDU1NHcmFkaWVudFZhbHVlLCBpc0dyYWRpZW50VmFsdWUoKSkKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0xpbmVhckdyYWRpZW50VmFsdWUsIGlz
TGluZWFyR3JhZGllbnRWYWx1ZSgpKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUo
Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZSwgaXNSYWRpYWxHcmFkaWVudFZhbHVlKCkpCisKICNlbmRp
ZiAvLyBDU1NHcmFkaWVudFZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NHcmlkTGluZU5hbWVzVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmlkTGluZU5h
bWVzVmFsdWUuaAppbmRleCAxYjBkMWI4N2VlNmE0Yjc3NTA1NGQ0MDQ5Y2NlMDhlMjE3ZmJmYTJl
Li43YWI4YjI1OGE5NjY0OTdmNjg3MjVhNjEyNDAzY2QwNTMwMDVlMGFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0dyaWRMaW5lTmFtZXNWYWx1ZS5oCkBAIC01Miw5ICs1Miw5IEBAIHByaXZh
dGU6CiAgICAgQ1NTR3JpZExpbmVOYW1lc1ZhbHVlKCk7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9D
QVNUUyhDU1NHcmlkTGluZU5hbWVzVmFsdWUsIGlzR3JpZExpbmVOYW1lc1ZhbHVlKCkpOworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi19CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxV
RShDU1NHcmlkTGluZU5hbWVzVmFsdWUsIGlzR3JpZExpbmVOYW1lc1ZhbHVlKCkpOwogCi0jZW5k
aWYKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCisjZW5kaWYgLy8g
Q1NTR3JpZExpbmVOYW1lc1ZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JpZFRl
bXBsYXRlQXJlYXNWYWx1ZS5oCmluZGV4IDhkMjVmMmNkNzVkNWUzMjc0OTMyYWE3NWVhNzlhYTRl
ZjkwMTY1MmUuLjQ5ODRlNzYwYmVkOWFiNDgxNDdmZjk5NGE2NzcyMGZlNTBjZDdlN2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuaApAQCAtNjIs
MTAgKzYyLDEwIEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fY29sdW1uQ291bnQ7CiB9OwogCi1D
U1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlLCBpc0dyaWRUZW1w
bGF0ZUFyZWFzVmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlLCBpc0dyaWRU
ZW1wbGF0ZUFyZWFzVmFsdWUoKSkKKwogI2VuZGlmIC8qIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQp
ICovCiAKICNlbmRpZiAvLyBDU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcAppbmRleCAwZWY3NzRmODRiMWJh
NjUzOTY5Y2VhMThhNWVkNDQ2Mjk5NjBiNGYyLi5mYjg5OTU1NzE3NTU2M2I5NTVkMzgxNzg3NGVk
NGI3NzhjMDI0N2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9y
VmFsdWUuY3BwCkBAIC0xMDksMTUgKzEwOSwxNSBAQCBQYXNzUmVmUHRyPEltYWdlPiBDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlOjppbWFnZShSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgRgog
ewogICAgIHN3aXRjaCAoY2xhc3NUeXBlKCkpIHsKICAgICBjYXNlIENhbnZhc0NsYXNzOgotICAg
ICAgICByZXR1cm4gdG9DU1NDYW52YXNWYWx1ZSh0aGlzKS0+aW1hZ2UocmVuZGVyZXIsIHNpemUp
OworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ2FudmFzVmFsdWU+KCp0aGlzKS5pbWFnZShy
ZW5kZXJlciwgc2l6ZSk7CiAgICAgY2FzZSBDcm9zc2ZhZGVDbGFzczoKLSAgICAgICAgcmV0dXJu
IHRvQ1NTQ3Jvc3NmYWRlVmFsdWUodGhpcyktPmltYWdlKHJlbmRlcmVyLCBzaXplKTsKKyAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPigqdGhpcykuaW1hZ2UocmVuZGVy
ZXIsIHNpemUpOwogICAgIGNhc2UgRmlsdGVySW1hZ2VDbGFzczoKLSAgICAgICAgcmV0dXJuIHRv
Q1NTRmlsdGVySW1hZ2VWYWx1ZSh0aGlzKS0+aW1hZ2UocmVuZGVyZXIsIHNpemUpOworICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oKnRoaXMpLmltYWdlKHJlbmRl
cmVyLCBzaXplKTsKICAgICBjYXNlIExpbmVhckdyYWRpZW50Q2xhc3M6Ci0gICAgICAgIHJldHVy
biB0b0NTU0xpbmVhckdyYWRpZW50VmFsdWUodGhpcyktPmltYWdlKHJlbmRlcmVyLCBzaXplKTsK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0xpbmVhckdyYWRpZW50VmFsdWU+KCp0aGlzKS5p
bWFnZShyZW5kZXJlciwgc2l6ZSk7CiAgICAgY2FzZSBSYWRpYWxHcmFkaWVudENsYXNzOgotICAg
ICAgICByZXR1cm4gdG9DU1NSYWRpYWxHcmFkaWVudFZhbHVlKHRoaXMpLT5pbWFnZShyZW5kZXJl
ciwgc2l6ZSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVl
PigqdGhpcykuaW1hZ2UocmVuZGVyZXIsIHNpemUpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTEyOCwxNSArMTI4LDE1IEBAIGJvb2wgQ1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZTo6aXNGaXhlZFNpemUoKSBjb25zdAogewogICAgIHN3aXRjaCAo
Y2xhc3NUeXBlKCkpIHsKICAgICBjYXNlIENhbnZhc0NsYXNzOgotICAgICAgICByZXR1cm4gdG9D
U1NDYW52YXNWYWx1ZSh0aGlzKS0+aXNGaXhlZFNpemUoKTsKKyAgICAgICAgcmV0dXJuIGRvd25j
YXN0PENTU0NhbnZhc1ZhbHVlPigqdGhpcykuaXNGaXhlZFNpemUoKTsKICAgICBjYXNlIENyb3Nz
ZmFkZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NDcm9zc2ZhZGVWYWx1ZSh0aGlzKS0+aXNG
aXhlZFNpemUoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPigq
dGhpcykuaXNGaXhlZFNpemUoKTsKICAgICBjYXNlIEZpbHRlckltYWdlQ2xhc3M6Ci0gICAgICAg
IHJldHVybiB0b0NTU0ZpbHRlckltYWdlVmFsdWUodGhpcyktPmlzRml4ZWRTaXplKCk7CisgICAg
ICAgIHJldHVybiBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPigqdGhpcykuaXNGaXhlZFNp
emUoKTsKICAgICBjYXNlIExpbmVhckdyYWRpZW50Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NT
U0xpbmVhckdyYWRpZW50VmFsdWUodGhpcyktPmlzRml4ZWRTaXplKCk7CisgICAgICAgIHJldHVy
biBkb3duY2FzdDxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPigqdGhpcykuaXNGaXhlZFNpemUoKTsK
ICAgICBjYXNlIFJhZGlhbEdyYWRpZW50Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU1JhZGlh
bEdyYWRpZW50VmFsdWUodGhpcyktPmlzRml4ZWRTaXplKCk7CisgICAgICAgIHJldHVybiBkb3du
Y2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigqdGhpcykuaXNGaXhlZFNpemUoKTsKICAgICBk
ZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xNDcsMTUg
KzE0NywxNSBAQCBGbG9hdFNpemUgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6Zml4ZWRTaXplKGNv
bnN0IFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyKQogewogICAgIHN3aXRjaCAoY2xhc3NUeXBlKCkp
IHsKICAgICBjYXNlIENhbnZhc0NsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NDYW52YXNWYWx1
ZSh0aGlzKS0+Zml4ZWRTaXplKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENT
U0NhbnZhc1ZhbHVlPigqdGhpcykuZml4ZWRTaXplKHJlbmRlcmVyKTsKICAgICBjYXNlIENyb3Nz
ZmFkZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NDcm9zc2ZhZGVWYWx1ZSh0aGlzKS0+Zml4
ZWRTaXplKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0Nyb3NzZmFkZVZh
bHVlPigqdGhpcykuZml4ZWRTaXplKHJlbmRlcmVyKTsKICAgICBjYXNlIEZpbHRlckltYWdlQ2xh
c3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0ZpbHRlckltYWdlVmFsdWUodGhpcyktPmZpeGVkU2l6
ZShyZW5kZXJlcik7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVl
PigqdGhpcykuZml4ZWRTaXplKHJlbmRlcmVyKTsKICAgICBjYXNlIExpbmVhckdyYWRpZW50Q2xh
c3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0xpbmVhckdyYWRpZW50VmFsdWUodGhpcyktPmZpeGVk
U2l6ZShyZW5kZXJlcik7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NMaW5lYXJHcmFkaWVu
dFZhbHVlPigqdGhpcykuZml4ZWRTaXplKHJlbmRlcmVyKTsKICAgICBjYXNlIFJhZGlhbEdyYWRp
ZW50Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU1JhZGlhbEdyYWRpZW50VmFsdWUodGhpcykt
PmZpeGVkU2l6ZShyZW5kZXJlcik7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NSYWRpYWxH
cmFkaWVudFZhbHVlPigqdGhpcykuZml4ZWRTaXplKHJlbmRlcmVyKTsKICAgICBkZWZhdWx0Ogog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xNjYsMTUgKzE2NiwxNSBA
QCBib29sIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmlzUGVuZGluZygpIGNvbnN0CiB7CiAgICAg
c3dpdGNoIChjbGFzc1R5cGUoKSkgewogICAgIGNhc2UgQ3Jvc3NmYWRlQ2xhc3M6Ci0gICAgICAg
IHJldHVybiB0b0NTU0Nyb3NzZmFkZVZhbHVlKHRoaXMpLT5pc1BlbmRpbmcoKTsKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPigqdGhpcykuaXNQZW5kaW5nKCk7CiAg
ICAgY2FzZSBDYW52YXNDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTQ2FudmFzVmFsdWUodGhp
cyktPmlzUGVuZGluZygpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ2FudmFzVmFsdWU+
KCp0aGlzKS5pc1BlbmRpbmcoKTsKICAgICBjYXNlIEZpbHRlckltYWdlQ2xhc3M6Ci0gICAgICAg
IHJldHVybiB0b0NTU0ZpbHRlckltYWdlVmFsdWUodGhpcyktPmlzUGVuZGluZygpOworICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oKnRoaXMpLmlzUGVuZGluZygp
OwogICAgIGNhc2UgTGluZWFyR3JhZGllbnRDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTTGlu
ZWFyR3JhZGllbnRWYWx1ZSh0aGlzKS0+aXNQZW5kaW5nKCk7CisgICAgICAgIHJldHVybiBkb3du
Y2FzdDxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPigqdGhpcykuaXNQZW5kaW5nKCk7CiAgICAgY2Fz
ZSBSYWRpYWxHcmFkaWVudENsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NSYWRpYWxHcmFkaWVu
dFZhbHVlKHRoaXMpLT5pc1BlbmRpbmcoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1Jh
ZGlhbEdyYWRpZW50VmFsdWU+KCp0aGlzKS5pc1BlbmRpbmcoKTsKICAgICBkZWZhdWx0OgogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xODUsMTUgKzE4NSwxNSBAQCBi
b29sIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6Omtub3duVG9CZU9wYXF1ZShjb25zdCBSZW5kZXJF
bGVtZW50KiByZW5kZXJlcikgY29ucwogewogICAgIHN3aXRjaCAoY2xhc3NUeXBlKCkpIHsKICAg
ICBjYXNlIENyb3NzZmFkZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NDcm9zc2ZhZGVWYWx1
ZSh0aGlzKS0+a25vd25Ub0JlT3BhcXVlKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuIGRvd25j
YXN0PENTU0Nyb3NzZmFkZVZhbHVlPigqdGhpcykua25vd25Ub0JlT3BhcXVlKHJlbmRlcmVyKTsK
ICAgICBjYXNlIENhbnZhc0NsYXNzOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2FzZSBG
aWx0ZXJJbWFnZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NGaWx0ZXJJbWFnZVZhbHVlKHRo
aXMpLT5rbm93blRvQmVPcGFxdWUocmVuZGVyZXIpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oKnRoaXMpLmtub3duVG9CZU9wYXF1ZShyZW5kZXJlcik7CiAg
ICAgY2FzZSBMaW5lYXJHcmFkaWVudENsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NMaW5lYXJH
cmFkaWVudFZhbHVlKHRoaXMpLT5rbm93blRvQmVPcGFxdWUocmVuZGVyZXIpOworICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4oKnRoaXMpLmtub3duVG9CZU9w
YXF1ZShyZW5kZXJlcik7CiAgICAgY2FzZSBSYWRpYWxHcmFkaWVudENsYXNzOgotICAgICAgICBy
ZXR1cm4gdG9DU1NSYWRpYWxHcmFkaWVudFZhbHVlKHRoaXMpLT5rbm93blRvQmVPcGFxdWUocmVu
ZGVyZXIpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4o
KnRoaXMpLmtub3duVG9CZU9wYXF1ZShyZW5kZXJlcik7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMjA0LDE5ICsyMDQsMTkgQEAgdm9pZCBD
U1NJbWFnZUdlbmVyYXRvclZhbHVlOjpsb2FkU3ViaW1hZ2VzKENhY2hlZFJlc291cmNlTG9hZGVy
KiBjYWNoZWRSZXNvdXJjZUwKIHsKICAgICBzd2l0Y2ggKGNsYXNzVHlwZSgpKSB7CiAgICAgY2Fz
ZSBDcm9zc2ZhZGVDbGFzczoKLSAgICAgICAgdG9DU1NDcm9zc2ZhZGVWYWx1ZSh0aGlzKS0+bG9h
ZFN1YmltYWdlcyhjYWNoZWRSZXNvdXJjZUxvYWRlcik7CisgICAgICAgIGRvd25jYXN0PENTU0Ny
b3NzZmFkZVZhbHVlPigqdGhpcykubG9hZFN1YmltYWdlcyhjYWNoZWRSZXNvdXJjZUxvYWRlcik7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2FudmFzQ2xhc3M6Ci0gICAgICAgIHRvQ1NTQ2Fu
dmFzVmFsdWUodGhpcyktPmxvYWRTdWJpbWFnZXMoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOworICAg
ICAgICBkb3duY2FzdDxDU1NDYW52YXNWYWx1ZT4oKnRoaXMpLmxvYWRTdWJpbWFnZXMoY2FjaGVk
UmVzb3VyY2VMb2FkZXIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlckltYWdlQ2xh
c3M6Ci0gICAgICAgIHRvQ1NTRmlsdGVySW1hZ2VWYWx1ZSh0aGlzKS0+bG9hZFN1YmltYWdlcyhj
YWNoZWRSZXNvdXJjZUxvYWRlcik7CisgICAgICAgIGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFs
dWU+KCp0aGlzKS5sb2FkU3ViaW1hZ2VzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBMaW5lYXJHcmFkaWVudENsYXNzOgotICAgICAgICB0b0NTU0xpbmVh
ckdyYWRpZW50VmFsdWUodGhpcyktPmxvYWRTdWJpbWFnZXMoY2FjaGVkUmVzb3VyY2VMb2FkZXIp
OworICAgICAgICBkb3duY2FzdDxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPigqdGhpcykubG9hZFN1
YmltYWdlcyhjYWNoZWRSZXNvdXJjZUxvYWRlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
UmFkaWFsR3JhZGllbnRDbGFzczoKLSAgICAgICAgdG9DU1NSYWRpYWxHcmFkaWVudFZhbHVlKHRo
aXMpLT5sb2FkU3ViaW1hZ2VzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKyAgICAgICAgZG93bmNh
c3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnRoaXMpLmxvYWRTdWJpbWFnZXMoY2FjaGVkUmVz
b3VyY2VMb2FkZXIpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIyNSwxMyArMjI1LDEzIEBAIHZvaWQgQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZTo6bG9hZFN1YmltYWdlcyhDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVz
b3VyY2VMCiAKIGJvb2wgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6c3ViaW1hZ2VJc1BlbmRpbmco
Q1NTVmFsdWUqIHZhbHVlKQogewotICAgIGlmICh2YWx1ZS0+aXNJbWFnZVZhbHVlKCkpCi0gICAg
ICAgIHJldHVybiB0b0NTU0ltYWdlVmFsdWUodmFsdWUpLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgp
LT5pc1BlbmRpbmdJbWFnZSgpOworICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPigqdmFsdWUpKQor
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oKnZhbHVlKS5jYWNoZWRPclBl
bmRpbmdJbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpOwogICAgIAotICAgIGlmICh2YWx1ZS0+aXNJ
bWFnZUdlbmVyYXRvclZhbHVlKCkpCi0gICAgICAgIHJldHVybiB0b0NTU0ltYWdlR2VuZXJhdG9y
VmFsdWUodmFsdWUpLT5pc1BlbmRpbmcoKTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZT4oKnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ltYWdlR2VuZXJhdG9y
VmFsdWU+KCp2YWx1ZSkuaXNQZW5kaW5nKCk7CiAKLSAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+Z2V0VmFsdWVJRCgpID09IENT
U1ZhbHVlTm9uZSkKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVl
Tm9uZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkBAIC0yNDQsMjEgKzI0NCwyMSBAQCBDYWNoZWRJbWFnZSogQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZTo6Y2FjaGVkSW1hZ2VGb3JDU1NWYWx1ZShDU1NWYWx1ZSogdmFsdWUsIENhYwogICAgIGlmICgh
dmFsdWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKHZhbHVlLT5pc0ltYWdl
VmFsdWUoKSkgewotICAgICAgICBTdHlsZUNhY2hlZEltYWdlKiBzdHlsZUNhY2hlZEltYWdlID0g
dG9DU1NJbWFnZVZhbHVlKHZhbHVlKS0+Y2FjaGVkSW1hZ2UoY2FjaGVkUmVzb3VyY2VMb2FkZXIp
OworICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPigqdmFsdWUpKSB7CisgICAgICAgIFN0eWxlQ2Fj
aGVkSW1hZ2UqIHN0eWxlQ2FjaGVkSW1hZ2UgPSBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPigqdmFs
dWUpLmNhY2hlZEltYWdlKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKICAgICAgICAgaWYgKCFzdHls
ZUNhY2hlZEltYWdlKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgcmV0
dXJuIHN0eWxlQ2FjaGVkSW1hZ2UtPmNhY2hlZEltYWdlKCk7CiAgICAgfQogICAgIAotICAgIGlm
ICh2YWx1ZS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKLSAgICAgICAgdG9DU1NJbWFnZUdl
bmVyYXRvclZhbHVlKHZhbHVlKS0+bG9hZFN1YmltYWdlcyhjYWNoZWRSZXNvdXJjZUxvYWRlcik7
CisgICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KCp2YWx1ZSkpIHsKKyAgICAgICAg
ZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oKnZhbHVlKS5sb2FkU3ViaW1hZ2VzKGNh
Y2hlZFJlc291cmNlTG9hZGVyKTsKICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBDU1NJbWFnZUdl
bmVyYXRvclZhbHVlIChhbmQgdGh1cyBjcm9zcy1mYWRlcyB3aXRoIGdyYWRpZW50cyBhbmQgY2Fu
dmFzKS4KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKHZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkgJiYgdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSktPmdldFZhbHVl
SUQoKSA9PSBDU1NWYWx1ZU5vbmUpCisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKSA9
PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUu
aAppbmRleCA2M2M4MTM3ZTI5YjBmMDhlM2RhZWVkMDA4YzFjYjZmOTFkNWQ4YjZiLi43ZDk5ZDQx
ZWE2YTc0MDgzY2M4MzQzODhiMzFlNTUyNDg4NzczYjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgKQEAgLTkyLDggKzkyLDggQEAgcHJpdmF0ZToKICAg
ICBIYXNoTWFwPEZsb2F0U2l6ZSwgc3RkOjp1bmlxdWVfcHRyPENhY2hlZEdlbmVyYXRlZEltYWdl
Pj4gbV9pbWFnZXM7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NJbWFnZUdlbmVyYXRv
clZhbHVlLCBpc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NJbWFnZUdlbmVyYXRvclZh
bHVlLCBpc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSkKKwogI2VuZGlmIC8vIENTU0ltYWdlR2VuZXJh
dG9yVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFs
dWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUuY3BwCmluZGV4IDRk
YmIwZTY1YjFjZmM3NDY5OWMxYmMzNWU5NWQ5ODkzYWMyYTljM2EuLmJhMTg4YTVjZjEyODk2NTM3
M2ExZGZhYzZjZTRhZjVjNTIyOThlZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NJbWFnZVNldFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VTZXRW
YWx1ZS5jcHAKQEAgLTcwLDEzICs3MCwxMyBAQCB2b2lkIENTU0ltYWdlU2V0VmFsdWU6OmZpbGxJ
bWFnZVNldCgpCiAgICAgc2l6ZV90IGkgPSAwOwogICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7CiAg
ICAgICAgIENTU1ZhbHVlKiBpbWFnZVZhbHVlID0gaXRlbShpKTsKLSAgICAgICAgU3RyaW5nIGlt
YWdlVVJMID0gdG9DU1NJbWFnZVZhbHVlKGltYWdlVmFsdWUpLT51cmwoKTsKKyAgICAgICAgU3Ry
aW5nIGltYWdlVVJMID0gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oKmltYWdlVmFsdWUpLnVybCgp
OwogCiAgICAgICAgICsraTsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oaSA8IGxlbmd0aCk7CiAgICAgICAgIENTU1ZhbHVlKiBzY2FsZUZhY3RvclZhbHVlID0gaXRl
bShpKTsKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc2NhbGVGYWN0
b3JWYWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3Ig
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHNjYWxlRmFjdG9yVmFsdWUpLT5nZXRGbG9hdFZhbHVlKCk7
CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlzPENTU1ByaW1pdGl2
ZVZhbHVlPigqc2NhbGVGYWN0b3JWYWx1ZSkpOworICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqc2NhbGVGYWN0b3JWYWx1ZSkuZ2V0RmxvYXRW
YWx1ZSgpOwogCiAgICAgICAgIEltYWdlV2l0aFNjYWxlIGltYWdlOwogICAgICAgICBpbWFnZS5p
bWFnZVVSTCA9IGltYWdlVVJMOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0lt
YWdlU2V0VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZhbHVlLmgKaW5k
ZXggYzE4OTlmM2FiNzAxODc4MWQ4MzkxYmExY2VjZWRkYTkxOGRhNTAyZC4uNDBhOTk2NTNjNzM3
ZGFkYjdhYzBhODYxODA5MjRkMTQ5Y2I1ZDNkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ltYWdlU2V0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VT
ZXRWYWx1ZS5oCkBAIC04NywxMCArODcsMTAgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8SW1hZ2VX
aXRoU2NhbGU+IG1faW1hZ2VzSW5TZXQ7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NJ
bWFnZVNldFZhbHVlLCBpc0ltYWdlU2V0VmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NJbWFnZVNldFZhbHVlLCBp
c0ltYWdlU2V0VmFsdWUoKSkKKwogI2VuZGlmIC8vIEVOQUJMRShDU1NfSU1BR0VfU0VUKQogCiAj
ZW5kaWYgLy8gQ1NTSW1hZ2VTZXRWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTSW1hZ2VWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlVmFsdWUuaApp
bmRleCA5Y2M4YmMzZTQ5NDJkNmMyNTY0MmVjZTQxZWVhYTBjNzYzMjEzYTk4Li45YzQyMDhmOWYy
YjAzMzBmY2JmNzgzNDY1YWM0YmVmNDE1NzgwN2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVZh
bHVlLmgKQEAgLTY5LDggKzY5LDggQEAgcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmcgbV9pbml0
aWF0b3JOYW1lOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTSW1hZ2VWYWx1ZSwgaXNJ
bWFnZVZhbHVlKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19DU1NfVkFMVUUoQ1NTSW1hZ2VWYWx1ZSwgaXNJbWFnZVZhbHVlKCkpCisKICNlbmRp
ZiAvLyBDU1NJbWFnZVZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJ
bmhlcml0ZWRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0luaGVyaXRlZFZhbHVlLmgK
aW5kZXggZjZkMTY4ZWVhMDc2OGJmOGQwMTY2ZTVjNTM4ZmEwOGRiNjMwNmQ1NC4uMzE2NzFiYTcy
NTc3ZTdkOTYzM2U3MDRhZmExMzE1N2IwZjhhZjIyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0luaGVyaXRlZFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0lu
aGVyaXRlZFZhbHVlLmgKQEAgLTQ0LDggKzQ0LDggQEAgcHJpdmF0ZToKICAgICB9CiB9OwogCi1D
U1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NJbmhlcml0ZWRWYWx1ZSwgaXNJbmhlcml0ZWRWYWx1ZSgp
KQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NT
X1ZBTFVFKENTU0luaGVyaXRlZFZhbHVlLCBpc0luaGVyaXRlZFZhbHVlKCkpCisKICNlbmRpZiAv
LyBDU1NJbmhlcml0ZWRWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
SW5pdGlhbFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW5pdGlhbFZhbHVlLmgKaW5k
ZXggYTBhNmU1NTQ4ODVmYTEwODE1NjBjYWI2ODQ0MmQ3Nzk3YWUyZmUxYi4uOTExNmMxOGJkOWY5
NTE3ZDRlZjFiZjAzM2NkM2JhY2UyNWUyNjBjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0luaXRpYWxWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbml0aWFs
VmFsdWUuaApAQCAtNTMsOCArNTMsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0ltcGxpY2l0
OwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTSW5pdGlhbFZhbHVlLCBpc0luaXRpYWxW
YWx1ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQ1NTX1ZBTFVFKENTU0luaXRpYWxWYWx1ZSwgaXNJbml0aWFsVmFsdWUoKSkKKwogI2VuZGlm
IC8vIENTU0luaXRpYWxWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
TGluZUJveENvbnRhaW5WYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0xpbmVCb3hDb250
YWluVmFsdWUuaAppbmRleCBiOTgwZThlZmE5ZTRiMWQxMDM3YjNkYjJiOGU5M2FiMjY2ZTI3ZDI0
Li5kNzY0M2ZhMzE0ZTAxZDNmOThhNDkwYjlmZDdhMWMxNDE0NDEwMmIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTTGluZUJveENvbnRhaW5WYWx1ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NMaW5lQm94Q29udGFpblZhbHVlLmgKQEAgLTU2LDggKzU2LDggQEAgcHJp
dmF0ZToKICAgICBMaW5lQm94Q29udGFpbiBtX3ZhbHVlOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVf
Q0FTVFMoQ1NTTGluZUJveENvbnRhaW5WYWx1ZSwgaXNMaW5lQm94Q29udGFpblZhbHVlKCkpCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLX0gLy8gbmFtZXNwYWNlCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0NTU19WQUxVRShDU1NMaW5lQm94Q29udGFpblZhbHVlLCBpc0xpbmVCb3hDb250YWlu
VmFsdWUoKSkKIAotI2VuZGlmCisjZW5kaWYgLy8gQ1NTTGluZUJveENvbnRhaW5WYWx1ZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IGMxOGE0YjNhNTE1MzU3OWE3YTljYzU2ZjhmYjg0
YjA5ZTJjZTgyYWEuLjBkMDdiNDdmNGY1MWFjNGM5MDdlOGJmMWJlNzA3NWE0YTNkYzcyZTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC0xMzQ1LDE0ICsxMzQ1LDE0IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZUNvbG9yKFJHQkEzMiYgY29sb3IsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBi
b29sIHN0cmljdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQ1NTVmFsdWUqIHZhbHVl
ID0gcGFyc2VyLm1fcGFyc2VkUHJvcGVydGllcy5maXJzdCgpLnZhbHVlKCk7Ci0gICAgaWYgKCF2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIGlmICgh
cHJpbWl0aXZlVmFsdWUtPmlzUkdCQ29sb3IoKSkKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBp
ZiAoIXByaW1pdGl2ZVZhbHVlLmlzUkdCQ29sb3IoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgY29sb3IgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UkdCQTMyVmFsdWUoKTsKKyAgICBjb2xv
ciA9IHByaW1pdGl2ZVZhbHVlLmdldFJHQkEzMlZhbHVlKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTMxMTgsNyArMzExOCw3IEBAIHZvaWQgQ1NTUGFyc2VyOjphZGRGaWxsVmFsdWUoUmVm
UHRyPENTU1ZhbHVlPiYgbHZhbCwgUGFzc1JlZjxDU1NWYWx1ZT4gcnZhbCkKICAgICB9CiAKICAg
ICBpZiAobHZhbC0+aXNCYXNlVmFsdWVMaXN0KCkpIHsKLSAgICAgICAgdG9DU1NWYWx1ZUxpc3Qo
Kmx2YWwpLmFwcGVuZChXVEY6Om1vdmUocnZhbCkpOworICAgICAgICBkb3duY2FzdDxDU1NWYWx1
ZUxpc3Q+KCpsdmFsKS5hcHBlbmQoV1RGOjptb3ZlKHJ2YWwpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMzQyNSw4ICszNDI1LDggQEAgdm9pZCBDU1NQYXJzZXI6OmFkZEFuaW1hdGlv
blZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFBhc3NSZWY8Q1NTVmFsdWU+IHJ2YWwKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChsdmFsLT5pc1ZhbHVlTGlzdCgpKSB7Ci0g
ICAgICAgIHRvQ1NTVmFsdWVMaXN0KCpsdmFsKS5hcHBlbmQoV1RGOjptb3ZlKHJ2YWwpKTsKKyAg
ICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqbHZhbCkpIHsKKyAgICAgICAgZG93bmNhc3Q8Q1NTVmFs
dWVMaXN0PigqbHZhbCkuYXBwZW5kKFdURjo6bW92ZShydmFsKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTQxNzAsMTAgKzQxNzAsMTAgQEAgdm9pZCBDU1NQYXJzZXI6OnBhcnNlM1Zh
bHVlc0ZpbGxQb3NpdGlvbihDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRyPEMK
ICAgICAgICAgdmFsdWUxLnN3YXAodmFsdWUyKTsKIAogI2lmbmRlZiBOREVCVUcKLSAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogZmlyc3QgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlMS5nZXQoKSk7
Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZCA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFs
dWUyLmdldCgpKTsKLSAgICBpZGVudDEgPSBmaXJzdC0+Z2V0UGFpclZhbHVlKCktPmZpcnN0KCkt
PmdldFZhbHVlSUQoKTsKLSAgICBpZGVudDIgPSBzZWNvbmQtPmdldFBhaXJWYWx1ZSgpLT5maXJz
dCgpLT5nZXRWYWx1ZUlEKCk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGZpcnN0ID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZTEpOworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBz
ZWNvbmQgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlMik7CisgICAgaWRlbnQx
ID0gZmlyc3QuZ2V0UGFpclZhbHVlKCktPmZpcnN0KCktPmdldFZhbHVlSUQoKTsKKyAgICBpZGVu
dDIgPSBzZWNvbmQuZ2V0UGFpclZhbHVlKCktPmZpcnN0KCktPmdldFZhbHVlSUQoKTsKICAgICBB
U1NFUlQoaWRlbnQxID09IENTU1ZhbHVlTGVmdCB8fCBpZGVudDEgPT0gQ1NTVmFsdWVSaWdodCk7
CiAgICAgQVNTRVJUKGlkZW50MiA9PSBDU1NWYWx1ZUJvdHRvbSB8fCBpZGVudDIgPT0gQ1NTVmFs
dWVUb3ApOwogI2VuZGlmCkBAIC00MjMxLDggKzQyMzEsOCBAQCB2b2lkIENTU1BhcnNlcjo6cGFy
c2VGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NW
YWx1ZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBwYXJzZWRWYWx1ZTEgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlMS5nZXQoKSk7Ci0g
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZTIgPSB0b0NTU1ByaW1pdGl2
ZVZhbHVlKHZhbHVlMi5nZXQoKSk7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJz
ZWRWYWx1ZTEgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUxLmdldCgpKTsKKyAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMiA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZTIuZ2V0KCkpOwogCiAgICAgdmFsdWUxLmNsZWFyKCk7CiAgICAg
dmFsdWUyLmNsZWFyKCk7CkBAIC00MzI5LDcgKzQzMjksNyBAQCB2b2lkIENTU1BhcnNlcjo6cGFy
c2VGaWxsUmVwZWF0KFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMSwgUmVmUHRyPENTU1ZhbHVlPiYg
dmFsdQogCiAgICAgLy8gSWYgb25seSBvbmUgdmFsdWUgd2FzIHNwZWNpZmllZCwgdmFsdWUyIGlz
IHRoZSBzYW1lIGFzIHZhbHVlMS4KICAgICBtX2ltcGxpY2l0U2hvcnRoYW5kID0gdHJ1ZTsKLSAg
ICB2YWx1ZTIgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodG9DU1NQcmlt
aXRpdmVWYWx1ZSh2YWx1ZTEuZ2V0KCkpLT5nZXRWYWx1ZUlEKCkpOworICAgIHZhbHVlMiA9IGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlMSkuZ2V0VmFsdWVJRCgpKTsKIH0KIAogUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZUZpbGxTaXplKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sJiBhbGxv
d0NvbW1hKQpAQCAtNDk0Niw3ICs0OTQ2LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZUdyaWRQb3NpdGlvbigpCiAKIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBn
cmlkTWlzc2luZ0dyaWRQb3NpdGlvblZhbHVlKENTU1ZhbHVlKiB2YWx1ZSkKIHsKLSAgICBpZiAo
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+
aXNTdHJpbmcoKSkKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0
dXJuIHZhbHVlOwogCiAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZUF1dG8pOwpAQCAtNDk5OCw3ICs0OTk4LDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlR3JpZFRlbXBsYXRlUm93c0FuZEFyZWFzKFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHRlbXBs
YXRlQ29sdW0KICAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPnVuaXQgPT0gQ1NT
UGFyc2VyVmFsdWU6OlZhbHVlTGlzdCkgewogICAgICAgICAgICAgaWYgKHRyYWlsaW5nSWRlbnRX
YXNBZGRlZCkgewogICAgICAgICAgICAgICAgIC8vIEEgcm93J3MgdHJhaWxpbmcgaWRlbnQgbXVz
dCBiZSBjb25jYXRlbmF0ZWQgd2l0aCB0aGUgbmV4dCByb3cncyBsZWFkaW5nIG9uZS4KLSAgICAg
ICAgICAgICAgICBwYXJzZUdyaWRMaW5lTmFtZXMoKm1fdmFsdWVMaXN0LCAqdGVtcGxhdGVSb3dz
LCB0b0NTU0dyaWRMaW5lTmFtZXNWYWx1ZSh0ZW1wbGF0ZVJvd3MtPml0ZW0odGVtcGxhdGVSb3dz
LT5sZW5ndGgoKSAtIDEpKSk7CisgICAgICAgICAgICAgICAgcGFyc2VHcmlkTGluZU5hbWVzKCpt
X3ZhbHVlTGlzdCwgKnRlbXBsYXRlUm93cywgZG93bmNhc3Q8Q1NTR3JpZExpbmVOYW1lc1ZhbHVl
Pih0ZW1wbGF0ZVJvd3MtPml0ZW0odGVtcGxhdGVSb3dzLT5sZW5ndGgoKSAtIDEpKSk7CiAgICAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBwYXJzZUdyaWRMaW5lTmFtZXMoKm1fdmFs
dWVMaXN0LCAqdGVtcGxhdGVSb3dzKTsKICAgICAgICAgfQpAQCAtNTkwMCw3ICs1OTAwLDcgQEAg
UGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUNpcmNs
ZShDU1NQYXJzZXJWYWx1ZUxpc3QqIGEKICAgICAgICAgLy8gYXJndW1lbnRzIGV4Y2VwdCB0aGUg
Zmlyc3QgdHdvLiBUaHVzLCBhbmQgaW5kZXggZ3JlYXRlciB0aGFuIG9uZQogICAgICAgICAvLyBp
bmRpY2F0ZXMgYW4gaW52YWxpZCBwcm9kdWN0aW9uLgogICAgICAgICBpZiAoYXJncy0+Y3VycmVu
dEluZGV4KCkgPiAxKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgICAgICBpZiAoIWFyZ3MtPmN1cnJlbnRJbmRleCgpICYmIGFyZ3VtZW50
LT5pZCAhPSBDU1NWYWx1ZUF0KSB7CiAgICAgICAgICAgICBpZiAoUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiByYWRpdXMgPSBwYXJzZVNoYXBlUmFkaXVzKGFyZ3VtZW50KSkgewpAQCAtNTkwOCw3
ICs1OTA4LDcgQEAgUGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFz
aWNTaGFwZUNpcmNsZShDU1NQYXJzZXJWYWx1ZUxpc3QqIGEKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChhcmd1bWVudC0+aWQg
PT0gQ1NTVmFsdWVBdCAmJiBhcmdzLT5uZXh0KCkpIHsKQEAgLTU5MTYsMTQgKzU5MTYsMTQgQEAg
UGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUNpcmNs
ZShDU1NQYXJzZXJWYWx1ZUxpc3QqIGEKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY2Vu
dGVyWTsKICAgICAgICAgICAgIHBhcnNlRmlsbFBvc2l0aW9uKGFyZ3MsIGNlbnRlclgsIGNlbnRl
clkpOwogICAgICAgICAgICAgaWYgKGNlbnRlclggJiYgY2VudGVyWSAmJiAhYXJncy0+Y3VycmVu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGNlbnRlclgtPmlzUHJpbWl0aXZlVmFsdWUo
KSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGNlbnRlclktPmlzUHJpbWl0aXZlVmFsdWUoKSk7
Ci0gICAgICAgICAgICAgICAgc2hhcGUtPnNldENlbnRlclgodG9DU1NQcmltaXRpdmVWYWx1ZShj
ZW50ZXJYLmdldCgpKSk7Ci0gICAgICAgICAgICAgICAgc2hhcGUtPnNldENlbnRlclkodG9DU1NQ
cmltaXRpdmVWYWx1ZShjZW50ZXJZLmdldCgpKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlz
PENTU1ByaW1pdGl2ZVZhbHVlPigqY2VudGVyWCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChp
czxDU1NQcmltaXRpdmVWYWx1ZT4oKmNlbnRlclkpKTsKKyAgICAgICAgICAgICAgICBzaGFwZS0+
c2V0Q2VudGVyWChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY2VudGVyWC5nZXQoKSkpOwor
ICAgICAgICAgICAgICAgIHNoYXBlLT5zZXRDZW50ZXJZKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPihjZW50ZXJZLmdldCgpKSk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KIAogICAgIHJldHVybiBzaGFwZTsKQEAgLTU5NDYsNyArNTk0Niw3IEBAIFBhc3NSZWZQ
dHI8Q1NTQmFzaWNTaGFwZT4gQ1NTUGFyc2VyOjpwYXJzZUJhc2ljU2hhcGVFbGxpcHNlKENTU1Bh
cnNlclZhbHVlTGlzdCoKICAgICAgICAgLy8gYXJndW1lbnRzIGV4Y2VwdCB0aGUgZmlyc3QgdGhy
ZWUuIFRodXMsIGFuIGluZGV4IGdyZWF0ZXIgdGhhbiB0d28KICAgICAgICAgLy8gaW5kaWNhdGVz
IGFuIGludmFsaWQgcHJvZHVjdGlvbi4KICAgICAgICAgaWYgKGFyZ3MtPmN1cnJlbnRJbmRleCgp
ID4gMikKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICAgICAgaWYgKGFyZ3MtPmN1cnJlbnRJbmRleCgpIDwgMiAmJiBhcmd1bWVudC0+aWQg
IT0gQ1NTVmFsdWVBdCkgewogICAgICAgICAgICAgaWYgKFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gcmFkaXVzID0gcGFyc2VTaGFwZVJhZGl1cyhhcmd1bWVudCkpIHsKQEAgLTU5NTcsMjIgKzU5
NTcsMjIgQEAgUGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNT
aGFwZUVsbGlwc2UoQ1NTUGFyc2VyVmFsdWVMaXN0KgogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGFyZ3VtZW50LT5pZCAhPSBD
U1NWYWx1ZUF0IHx8ICFhcmdzLT5uZXh0KCkpIC8vIGV4cGVjdGluZyBlbGxpcHNlKC4uIGF0IDxw
b3NpdGlvbj4pCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY2VudGVyWDsKICAgICAgICAgUmVmUHRy
PENTU1ZhbHVlPiBjZW50ZXJZOwogICAgICAgICBwYXJzZUZpbGxQb3NpdGlvbihhcmdzLCBjZW50
ZXJYLCBjZW50ZXJZKTsKICAgICAgICAgaWYgKCFjZW50ZXJYIHx8ICFjZW50ZXJZIHx8IGFyZ3Mt
PmN1cnJlbnQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICAgICAgQVNTRVJUKGNlbnRlclgtPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0g
ICAgICAgIEFTU0VSVChjZW50ZXJZLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICBzaGFw
ZS0+c2V0Q2VudGVyWCh0b0NTU1ByaW1pdGl2ZVZhbHVlKGNlbnRlclguZ2V0KCkpKTsKLSAgICAg
ICAgc2hhcGUtPnNldENlbnRlclkodG9DU1NQcmltaXRpdmVWYWx1ZShjZW50ZXJZLmdldCgpKSk7
CisgICAgICAgIEFTU0VSVChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmNlbnRlclgpKTsKKyAgICAg
ICAgQVNTRVJUKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqY2VudGVyWSkpOworICAgICAgICBzaGFw
ZS0+c2V0Q2VudGVyWChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY2VudGVyWC5nZXQoKSkp
OworICAgICAgICBzaGFwZS0+c2V0Q2VudGVyWShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
Y2VudGVyWS5nZXQoKSkpOwogICAgIH0KIAogICAgIHJldHVybiBzaGFwZTsKQEAgLTgxMTUsNyAr
ODExNSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRHcmFkaWVudChDU1NQYXJz
ZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRyPENTCiAgICAgICAgIGEgPSBhcmdzLT5uZXh0
KCk7CiAgICAgICAgIGlmICghYSB8fCBhLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
TlVNQkVSKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB0b0NTU1JhZGlhbEdy
YWRpZW50VmFsdWUocmVzdWx0LmdldCgpKS0+c2V0Rmlyc3RSYWRpdXMoY3JlYXRlUHJpbWl0aXZl
TnVtZXJpY1ZhbHVlKGEpKTsKKyAgICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1
ZT4oKnJlc3VsdCkuc2V0Rmlyc3RSYWRpdXMoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGEp
KTsKIAogICAgICAgICAvLyBDb21tYSBhZnRlciB0aGUgZmlyc3QgcmFkaXVzLgogICAgICAgICBh
ID0gYXJncy0+bmV4dCgpOwpAQCAtODE1Miw3ICs4MTUyLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0LCBSZWZQ
dHI8Q1MKICAgICAgICAgYSA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgaWYgKCFhIHx8IGEtPnVu
aXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIHRvQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZShyZXN1bHQuZ2V0KCkpLT5z
ZXRTZWNvbmRSYWRpdXMoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGEpKTsKKyAgICAgICAg
ZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0U2Vjb25kUmFkaXVz
KGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhKSk7CiAgICAgfQogCiAgICAgLy8gV2Ugbm93
IHdpbGwgYWNjZXB0IGFueSBudW1iZXIgb2Ygc3RvcHMgKDAgb3IgbW9yZSkuCkBAIC04MzEyLDE0
ICs4MzEyLDE0IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRSYWRpYWxHcmFkaWVu
dChDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgQVNTRVJUKCFjZW50ZXJYIHx8IGNlbnRlclgtPmlzUHJpbWl0
aXZlVmFsdWUoKSk7Ci0gICAgQVNTRVJUKCFjZW50ZXJZIHx8IGNlbnRlclktPmlzUHJpbWl0aXZl
VmFsdWUoKSk7CisgICAgQVNTRVJUKCFjZW50ZXJYIHx8IGlzPENTU1ByaW1pdGl2ZVZhbHVlPigq
Y2VudGVyWCkpOworICAgIEFTU0VSVCghY2VudGVyWSB8fCBpczxDU1NQcmltaXRpdmVWYWx1ZT4o
KmNlbnRlclkpKTsKIAotICAgIHJlc3VsdC0+c2V0Rmlyc3RYKHRvQ1NTUHJpbWl0aXZlVmFsdWUo
Y2VudGVyWC5nZXQoKSkpOwotICAgIHJlc3VsdC0+c2V0U2Vjb25kWCh0b0NTU1ByaW1pdGl2ZVZh
bHVlKGNlbnRlclguZ2V0KCkpKTsKKyAgICByZXN1bHQtPnNldEZpcnN0WChkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oY2VudGVyWC5nZXQoKSkpOworICAgIHJlc3VsdC0+c2V0U2Vjb25kWChk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY2VudGVyWC5nZXQoKSkpOwogICAgIC8vIENTUzMg
cmFkaWFsIGdyYWRpZW50cyBhbHdheXMgc2hhcmUgdGhlIHNhbWUgc3RhcnQgYW5kIGVuZCBwb2lu
dC4KLSAgICByZXN1bHQtPnNldEZpcnN0WSh0b0NTU1ByaW1pdGl2ZVZhbHVlKGNlbnRlclkuZ2V0
KCkpKTsKLSAgICByZXN1bHQtPnNldFNlY29uZFkodG9DU1NQcmltaXRpdmVWYWx1ZShjZW50ZXJZ
LmdldCgpKSk7CisgICAgcmVzdWx0LT5zZXRGaXJzdFkoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KGNlbnRlclkuZ2V0KCkpKTsKKyAgICByZXN1bHQtPnNldFNlY29uZFkoZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KGNlbnRlclkuZ2V0KCkpKTsKIAogICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gc2hhcGVWYWx1ZTsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNpemVW
YWx1ZTsKQEAgLTg1NzgsMTMgKzg1NzgsMTMgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlUmFkaWFs
R3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWwKICAg
ICAgICAgaWYgKCFhKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEFTU0VS
VChjZW50ZXJYLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICBBU1NFUlQoY2VudGVyWS0+
aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFgodG9DU1NQcmlt
aXRpdmVWYWx1ZShjZW50ZXJYLmdldCgpKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0Rmlyc3RZKHRv
Q1NTUHJpbWl0aXZlVmFsdWUoY2VudGVyWS5nZXQoKSkpOworICAgICAgICBBU1NFUlQoaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KCpjZW50ZXJYKSk7CisgICAgICAgIEFTU0VSVChpczxDU1NQcmltaXRp
dmVWYWx1ZT4oKmNlbnRlclkpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFgoZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KGNlbnRlclguZ2V0KCkpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRG
aXJzdFkoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGNlbnRlclkuZ2V0KCkpKTsKICAgICAg
ICAgLy8gUmlnaHQgbm93LCBDU1MgcmFkaWFsIGdyYWRpZW50cyBoYXZlIHRoZSBzYW1lIHN0YXJ0
IGFuZCBlbmQgY2VudGVycy4KLSAgICAgICAgcmVzdWx0LT5zZXRTZWNvbmRYKHRvQ1NTUHJpbWl0
aXZlVmFsdWUoY2VudGVyWC5nZXQoKSkpOwotICAgICAgICByZXN1bHQtPnNldFNlY29uZFkodG9D
U1NQcmltaXRpdmVWYWx1ZShjZW50ZXJZLmdldCgpKSk7CisgICAgICAgIHJlc3VsdC0+c2V0U2Vj
b25kWChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY2VudGVyWC5nZXQoKSkpOworICAgICAg
ICByZXN1bHQtPnNldFNlY29uZFkoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGNlbnRlclku
Z2V0KCkpKTsKICAgICB9CiAKICAgICBpZiAoc2hhcGVWYWx1ZSB8fCBzaXplVmFsdWUgfHwgaG9y
aXpvbnRhbFNpemUgfHwgY2VudGVyWCB8fCBjZW50ZXJZKQpAQCAtMTE3MjgsNyArMTE3MjgsNyBA
QCBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IENTU1BhcnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxl
KCkKICAgICAgICAgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gbV9wYXJzZWRQcm9wZXJ0aWVzW2ld
OwogICAgICAgICBpZiAocHJvcGVydHkuaWQoKSA9PSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50ICYm
IHByb3BlcnR5LnZhbHVlKCktPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHByb3Bl
cnR5LndyYXBWYWx1ZUluQ29tbWFTZXBhcmF0ZWRMaXN0KCk7Ci0gICAgICAgIGVsc2UgaWYgKHBy
b3BlcnR5LmlkKCkgPT0gQ1NTUHJvcGVydHlGb250RmFtaWx5ICYmICghcHJvcGVydHkudmFsdWUo
KS0+aXNWYWx1ZUxpc3QoKSB8fCB0b0NTU1ZhbHVlTGlzdChwcm9wZXJ0eS52YWx1ZSgpKS0+bGVu
Z3RoKCkgIT0gMSkpIHsKKyAgICAgICAgZWxzZSBpZiAocHJvcGVydHkuaWQoKSA9PSBDU1NQcm9w
ZXJ0eUZvbnRGYW1pbHkgJiYgKCFpczxDU1NWYWx1ZUxpc3Q+KCpwcm9wZXJ0eS52YWx1ZSgpKSB8
fCBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpwcm9wZXJ0eS52YWx1ZSgpKS5sZW5ndGgoKSAhPSAx
KSkgewogICAgICAgICAgICAgLy8gVW5saWtlIGZvbnQtZmFtaWx5IHByb3BlcnR5LCBmb250LWZh
bWlseSBkZXNjcmlwdG9yIGluIEBmb250LWZhY2UgcnVsZQogICAgICAgICAgICAgLy8gaGFzIHRv
IGJlIGEgdmFsdWUgbGlzdCB3aXRoIGV4YWN0bHkgb25lIGZhbWlseSBuYW1lLiBJdCBjYW5ub3Qg
aGF2ZSBhCiAgICAgICAgICAgICAvLyBoYXZlICdpbml0aWFsJyB2YWx1ZSBhbmQgY2Fubm90ICdp
bmhlcml0JyBmcm9tIHBhcmVudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
cmltaXRpdmVWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgK
aW5kZXggYTEzYzE1MzNhNDFmMzY0YWQ0ODk4ODZkM2I0N2ExNmJiY2FiMTRlOS4uMjQ0NjA5M2Iy
OWZhMDIxYmFmZTFiZjJkMmY1ZGUyMzhjZmVkNmFiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1By
aW1pdGl2ZVZhbHVlLmgKQEAgLTQyMSw4ICs0MjEsOCBAQCBwcml2YXRlOgogICAgIH0gbV92YWx1
ZTsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU1ByaW1pdGl2ZVZhbHVlLCBpc1ByaW1p
dGl2ZVZhbHVlKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19DU1NfVkFMVUUoQ1NTUHJpbWl0aXZlVmFsdWUsIGlzUHJpbWl0aXZlVmFsdWUoKSkK
KwogI2VuZGlmIC8vIENTU1ByaW1pdGl2ZVZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0
VmFsdWUuaAppbmRleCA4ZDBmZTYwNTljOWIyMTE4OTRhMTI4YjlkYWQxZTg1NDFjZjBlZjExLi5l
MjFlOTQzYWNlOTJmYjQzZTQ5YzEyZTdjZmM2YjYyYWZhZmUwZWZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUmVmbGVjdFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1JlZmxlY3RWYWx1ZS5oCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWU7CiAKLWNsYXNzIENTU1JlZmxlY3RWYWx1ZSA6IHB1
YmxpYyBDU1NWYWx1ZSB7CitjbGFzcyBDU1NSZWZsZWN0VmFsdWUgZmluYWwgOiBwdWJsaWMgQ1NT
VmFsdWUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmPENTU1JlZmxlY3RWYWx1ZT4gY3Jl
YXRlKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGRpcmVjdGlvbiwKICAgICAgICAgUGFz
c1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gb2Zmc2V0LCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBt
YXNrKQpAQCAtNjcsOCArNjcsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxDU1NWYWx1ZT4gbV9t
YXNrOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTUmVmbGVjdFZhbHVlLCBpc1JlZmxl
Y3RWYWx1ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQ1NTX1ZBTFVFKENTU1JlZmxlY3RWYWx1ZSwgaXNSZWZsZWN0VmFsdWUoKSkKKwogI2Vu
ZGlmIC8vIENTU1JlZmxlY3RWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU2hhZG93VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTaGFkb3dWYWx1ZS5oCmlu
ZGV4IDYxNzVkZjgyNmZhOTEyYmQwODY0MTJiY2NmYmUxM2E1ZjViMWQyOTAuLjAwNmM2MjkyZjE2
YzRiMTE0NDk0M2MzMTRhODg4ZjJiN2U4Nzk2ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTaGFkb3dWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTaGFkb3dW
YWx1ZS5oCkBAIC02Miw4ICs2Miw4IEBAIHByaXZhdGU6CiAgICAgICAgIFBhc3NSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGNvbG9yKTsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU1No
YWRvd1ZhbHVlLCBpc1NoYWRvd1ZhbHVlKCkpCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLX0g
Ly8gbmFtZXNwYWNlCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NTaGFkb3dW
YWx1ZSwgaXNTaGFkb3dWYWx1ZSgpKQogCi0jZW5kaWYKKyNlbmRpZiAvLyBDU1NTaGFkb3dWYWx1
ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVGltaW5nRnVuY3Rpb25WYWx1
ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaAppbmRleCA2
NmMyYzNiMjU2ZjA4YzE3MDg2MzUxM2FkYmVmOGRiMjhlOWJhMDAzLi5jMzlhYjBjZmYyMGRiNWFk
ODk5NGI3NjQ3NjdlZDhjNWNkZTVkZjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUaW1p
bmdGdW5jdGlvblZhbHVlLmgKQEAgLTYzLDggKzYzLDYgQEAgcHJpdmF0ZToKICAgICBkb3VibGUg
bV95MjsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0N1YmljQmV6aWVyVGltaW5nRnVu
Y3Rpb25WYWx1ZSwgaXNDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUoKSkKLQogY2xhc3Mg
Q1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlIDogcHVibGljIENTU1ZhbHVlIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUGFzc1JlZjxDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWU+IGNyZWF0ZShp
bnQgc3RlcHMsIGJvb2wgc3RlcEF0U3RhcnQpCkBAIC05MSw4ICs4OSw5IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX3N0ZXBBdFN0YXJ0OwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTU3Rl
cHNUaW1pbmdGdW5jdGlvblZhbHVlLCBpc1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZSgpKQorfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi19IC8vIG5hbWVzcGFjZQorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19DU1NfVkFMVUUoQ1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlLCBpc0N1Ymlj
QmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSgpKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1Nf
VkFMVUUoQ1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlLCBpc1N0ZXBzVGltaW5nRnVuY3Rpb25W
YWx1ZSgpKQogCi0jZW5kaWYKKyNlbmRpZiAvLyBDU1NUaW1pbmdGdW5jdGlvblZhbHVlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAppbmRleCA1MTNjNGQ5YjczOWI1NzQ4YThmMzg4
MDkzMWRiZTczMDgwMWRhOTFkLi4wYTE4NWY0ZDZiNjNhNjcwYTZlZWYyZmFjYWQ0OGE5NjQ0Zjhl
ZDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCkBAIC03NCwxMCArNzQsMTAg
QEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsQXR0YWNobWVudChDU1NQcm9wZXJ0eUlELCBG
aWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSoKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2
ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzd2l0Y2ggKHRvQ1NTUHJp
bWl0aXZlVmFsdWUodmFsdWUpLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICBzd2l0Y2ggKGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKSkgewogICAgIGNhc2UgQ1NT
VmFsdWVGaXhlZDoKICAgICAgICAgbGF5ZXItPnNldEF0dGFjaG1lbnQoRml4ZWRCYWNrZ3JvdW5k
QXR0YWNobWVudCk7CiAgICAgICAgIGJyZWFrOwpAQCAtOTksMTEgKzk5LDExIEBAIHZvaWQgQ1NT
VG9TdHlsZU1hcDo6bWFwRmlsbENsaXAoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwg
Q1NTVmFsdWUqIHZhbHVlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgbGF5ZXItPnNldENsaXAo
KnByaW1pdGl2ZVZhbHVlKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBsYXllci0+c2V0Q2xp
cChwcmltaXRpdmVWYWx1ZSk7CiB9CiAKIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbENvbXBv
c2l0ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCkBA
IC0xMTMsMTEgKzExMywxMSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxDb21wb3NpdGUo
Q1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYg
KCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2
YWx1ZSk7Ci0gICAgbGF5ZXItPnNldENvbXBvc2l0ZSgqcHJpbWl0aXZlVmFsdWUpOworICAgIENT
U1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqdmFsdWUpOworICAgIGxheWVyLT5zZXRDb21wb3NpdGUocHJpbWl0aXZlVmFsdWUpOwog
fQogCiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxCbGVuZE1vZGUoQ1NTUHJvcGVydHlJRCwg
RmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQpAQCAtMTI3LDExICsxMjcsMTEgQEAg
dm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsQmxlbmRNb2RlKENTU1Byb3BlcnR5SUQsIEZpbGxM
YXllciogbGF5ZXIsIENTU1ZhbHVlKgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYg
KCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIGxheWVyLT5z
ZXRCbGVuZE1vZGUoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBs
YXllci0+c2V0QmxlbmRNb2RlKHByaW1pdGl2ZVZhbHVlKTsKIH0KIAogdm9pZCBDU1NUb1N0eWxl
TWFwOjptYXBGaWxsT3JpZ2luKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKQEAgLTE0MSwxMSArMTQxLDExIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFw
RmlsbE9yaWdpbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFs
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZh
bHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQ
cmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgbGF5ZXItPnNldE9yaWdpbigqcHJpbWl0aXZlVmFs
dWUpOworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGxheWVyLT5zZXRPcmlnaW4ocHJpbWl0aXZl
VmFsdWUpOwogfQogCiAKQEAgLTE2NiwxMSArMTY2LDExIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6
bWFwRmlsbFJlcGVhdFgoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUq
IHZhCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9D
U1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgbGF5ZXItPnNldFJlcGVhdFgoKnByaW1pdGl2
ZVZhbHVlKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBsYXllci0+c2V0UmVwZWF0WChwcmlt
aXRpdmVWYWx1ZSk7CiB9CiAKIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFJlcGVhdFkoQ1NT
UHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQpAQCAtMTgwLDMx
ICsxODAsMzEgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WShDU1NQcm9wZXJ0
eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmEKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsK
LSAgICBsYXllci0+c2V0UmVwZWF0WSgqcHJpbWl0aXZlVmFsdWUpOworICAgIENTU1ByaW1pdGl2
ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpOworICAgIGxheWVyLT5zZXRSZXBlYXRZKHByaW1pdGl2ZVZhbHVlKTsKIH0KIAogdm9pZCBD
U1NUb1N0eWxlTWFwOjptYXBGaWxsU2l6ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVy
LCBDU1NWYWx1ZSogdmFsdWUpCiB7Ci0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KSB7CisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkgewogICAgICAgICBs
YXllci0+c2V0U2l6ZVR5cGUoU2l6ZU5vbmUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSh2YWx1ZSk7Ci0gICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFs
dWVDb250YWluKQorICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS5n
ZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVDb250YWluKQogICAgICAgICBsYXllci0+c2V0U2l6ZVR5
cGUoQ29udGFpbik7Ci0gICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9
PSBDU1NWYWx1ZUNvdmVyKQorICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQo
KSA9PSBDU1NWYWx1ZUNvdmVyKQogICAgICAgICBsYXllci0+c2V0U2l6ZVR5cGUoQ292ZXIpOwog
ICAgIGVsc2UKICAgICAgICAgbGF5ZXItPnNldFNpemVUeXBlKFNpemVMZW5ndGgpOwogCiAgICAg
TGVuZ3RoU2l6ZSBiID0gRmlsbExheWVyOjppbml0aWFsRmlsbFNpemVMZW5ndGgobGF5ZXItPnR5
cGUoKSk7CiAKLSAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgcHJpbWl0aXZlVmFs
dWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUNvbnRhaW4gfHwgcHJpbWl0aXZlVmFsdWUtPmdl
dFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUNvdmVyKSB7CisgICAgaWYgKHZhbHVlLT5pc0luaXRpYWxW
YWx1ZSgpIHx8IHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUNvbnRhaW4g
fHwgcHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ292ZXIpIHsKICAgICAg
ICAgbGF5ZXItPnNldFNpemVMZW5ndGgoYik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0y
MTIsMTMgKzIxMiwxMyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxTaXplKENTU1Byb3Bl
cnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZQogICAgIExlbmd0aCBmaXJz
dExlbmd0aDsKICAgICBMZW5ndGggc2Vjb25kTGVuZ3RoOwogCi0gICAgaWYgKFBhaXIqIHBhaXIg
PSBwcmltaXRpdmVWYWx1ZS0+Z2V0UGFpclZhbHVlKCkpIHsKKyAgICBpZiAoUGFpciogcGFpciA9
IHByaW1pdGl2ZVZhbHVlLmdldFBhaXJWYWx1ZSgpKSB7CiAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBmaXJzdCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4ocGFpci0+Zmlyc3Qo
KSk7CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHBhaXItPnNlY29uZCgpKTsKICAgICAgICAgZmlyc3RMZW5ndGggPSBm
aXJzdC0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KG1fcmVzb2x2ZXItPnN0YXRlKCku
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKICAgICAgICAgc2Vjb25kTGVuZ3RoID0gc2Vj
b25kLT5jb252ZXJ0VG9MZW5ndGg8QW55Q29udmVyc2lvbj4obV9yZXNvbHZlci0+c3RhdGUoKS5j
c3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZpcnN0
TGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxBbnlDb252ZXJzaW9uPiht
X3Jlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CisgICAgICAg
IGZpcnN0TGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUuY29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNp
b24+KG1fcmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKICAg
ICAgICAgc2Vjb25kTGVuZ3RoID0gTGVuZ3RoKCk7CiAgICAgfQogCkBAIC0yMzcsMTAgKzIzNywx
MCBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxYUG9zaXRpb24oQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOworICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSk7CiAgICAgUGFpciogcGFpciA9IHByaW1pdGl2ZVZhbHVlLT5nZXRQYWlyVmFs
dWUoKTsKICAgICBpZiAocGFpcikgewogICAgICAgICBBU1NFUlRfVU5VU0VEKHByb3BlcnR5SUQs
IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YIHx8IHByb3BlcnR5
SUQgPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25YKTsKQEAgLTI2OSwxMCArMjY5LDEw
IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFlQb3NpdGlvbihDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlKTsKICAgICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1
ZSgpOwogICAgIGlmIChwYWlyKSB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQocHJvcGVydHlJRCwg
cHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblkgfHwgcHJvcGVydHlJ
RCA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblkpOwpAQCAtMzAyLDExICszMDIsMTEg
QEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsTWFza1NvdXJjZVR5cGUoQ1NTUHJvcGVydHlJ
RCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmEKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2
ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICBzd2l0
Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICBDU1NQcmltaXRpdmVWYWx1
ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsK
KyAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSkgewogICAgIGNhc2UgQ1NT
VmFsdWVBbHBoYToKICAgICAgICAgdHlwZSA9IEVNYXNrU291cmNlVHlwZTo6TWFza0FscGhhOwog
ICAgICAgICBicmVhazsKQEAgLTMyOSwxMSArMzI5LDExIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6
bWFwQW5pbWF0aW9uRGVsYXkoQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFs
dWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1By
aW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICBhbmltYXRpb24tPnNldERlbGF5KHByaW1pdGl2ZVZh
bHVlLT5jb21wdXRlVGltZTxkb3VibGUsIENTU1ByaW1pdGl2ZVZhbHVlOjpTZWNvbmRzPigpKTsK
KyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBhbmltYXRpb24tPnNldERlbGF5KHByaW1pdGl2ZVZh
bHVlLmNvbXB1dGVUaW1lPGRvdWJsZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlNlY29uZHM+KCkpOwog
fQogCiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbkRpcmVjdGlvbihBbmltYXRpb24q
IGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCkBAIC0zNDMsMTEgKzM0MywxMSBAQCB2b2lkIENTU1Rv
U3R5bGVNYXA6Om1hcEFuaW1hdGlvbkRpcmVjdGlvbihBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgc3dpdGNoIChwcmltaXRpdmVWYWx1
ZS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgc3dpdGNoIChwcmlt
aXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgogICAg
ICAgICBsYXllci0+c2V0RGlyZWN0aW9uKEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uTm9y
bWFsKTsKICAgICAgICAgYnJlYWs7CkBAIC0zNzIsMTEgKzM3MiwxMSBAQCB2b2lkIENTU1RvU3R5
bGVNYXA6Om1hcEFuaW1hdGlvbkR1cmF0aW9uKEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgYW5pbWF0aW9uLT5zZXREdXJhdGlv
bihwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZVRpbWU8ZG91YmxlLCBDU1NQcmltaXRpdmVWYWx1ZTo6
U2Vjb25kcz4oKSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgYW5pbWF0aW9uLT5zZXREdXJh
dGlvbihwcmltaXRpdmVWYWx1ZS5jb21wdXRlVGltZTxkb3VibGUsIENTU1ByaW1pdGl2ZVZhbHVl
OjpTZWNvbmRzPigpKTsKIH0KIAogdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25GaWxs
TW9kZShBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCkBAIC0zODYsMTEgKzM4Niwx
MSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbkZpbGxNb2RlKEFuaW1hdGlvbiog
bGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
ICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZh
bHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICBzd2l0Y2gg
KHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYg
cHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAg
ICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSkgewogICAgIGNhc2UgQ1NTVmFs
dWVOb25lOgogICAgICAgICBsYXllci0+c2V0RmlsbE1vZGUoQW5pbWF0aW9uRmlsbE1vZGVOb25l
KTsKICAgICAgICAgYnJlYWs7CkBAIC00MTUsMTQgKzQxNSwxNCBAQCB2b2lkIENTU1RvU3R5bGVN
YXA6Om1hcEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NW
YWx1ZSogdgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9
IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0
VmFsdWVJRCgpID09IENTU1ZhbHVlSW5maW5pdGUpCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHBy
aW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAg
aWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUluZmluaXRlKQogICAg
ICAgICBhbmltYXRpb24tPnNldEl0ZXJhdGlvbkNvdW50KEFuaW1hdGlvbjo6SXRlcmF0aW9uQ291
bnRJbmZpbml0ZSk7CiAgICAgZWxzZQotICAgICAgICBhbmltYXRpb24tPnNldEl0ZXJhdGlvbkNv
dW50KHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpOworICAgICAgICBhbmltYXRpb24t
PnNldEl0ZXJhdGlvbkNvdW50KHByaW1pdGl2ZVZhbHVlLmdldEZsb2F0VmFsdWUoKSk7CiB9CiAK
IHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uTmFtZShBbmltYXRpb24qIGxheWVyLCBD
U1NWYWx1ZSogdmFsdWUpCkBAIC00MzIsMTQgKzQzMiwxNCBAQCB2b2lkIENTU1RvU3R5bGVNYXA6
Om1hcEFuaW1hdGlvbk5hbWUoQW5pbWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0
aXZlVmFsdWUodmFsdWUpOwotICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09
IENTU1ZhbHVlTm9uZSkKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBpZiAocHJpbWl0aXZlVmFs
dWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgbGF5ZXItPnNldElzTm9u
ZUFuaW1hdGlvbih0cnVlKTsKICAgICBlbHNlCi0gICAgICAgIGxheWVyLT5zZXROYW1lKHByaW1p
dGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKKyAgICAgICAgbGF5ZXItPnNldE5hbWUocHJp
bWl0aXZlVmFsdWUuZ2V0U3RyaW5nVmFsdWUoKSk7CiB9CiAKIHZvaWQgQ1NTVG9TdHlsZU1hcDo6
bWFwQW5pbWF0aW9uUGxheVN0YXRlKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
QEAgLTQ0OSwxMSArNDQ5LDExIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uUGxh
eVN0YXRlKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAo
IWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBD
U1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZh
bHVlKTsKLSAgICBFQW5pbVBsYXlTdGF0ZSBwbGF5U3RhdGUgPSAocHJpbWl0aXZlVmFsdWUtPmdl
dFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVBhdXNlZCkgPyBBbmltUGxheVN0YXRlUGF1c2VkIDogQW5p
bVBsYXlTdGF0ZVBsYXlpbmc7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgRUFuaW1QbGF5U3Rh
dGUgcGxheVN0YXRlID0gKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVBh
dXNlZCkgPyBBbmltUGxheVN0YXRlUGF1c2VkIDogQW5pbVBsYXlTdGF0ZVBsYXlpbmc7CiAgICAg
bGF5ZXItPnNldFBsYXlTdGF0ZShwbGF5U3RhdGUpOwogfQogCkBAIC00NjUsMTkgKzQ2NSwxOSBA
QCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblByb3BlcnR5KEFuaW1hdGlvbiogYW5p
bWF0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVBbGwpIHsKKyAgICBDU1NQcmlt
aXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
KnZhbHVlKTsKKyAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVl
QWxsKSB7CiAgICAgICAgIGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uTW9kZShBbmltYXRpb246OkFu
aW1hdGVBbGwpOwogICAgICAgICBhbmltYXRpb24tPnNldFByb3BlcnR5KENTU1Byb3BlcnR5SW52
YWxpZCk7Ci0gICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENT
U1ZhbHVlTm9uZSkgeworICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgp
ID09IENTU1ZhbHVlTm9uZSkgewogICAgICAgICBhbmltYXRpb24tPnNldEFuaW1hdGlvbk1vZGUo
QW5pbWF0aW9uOjpBbmltYXRlTm9uZSk7CiAgICAgICAgIGFuaW1hdGlvbi0+c2V0UHJvcGVydHko
Q1NTUHJvcGVydHlJbnZhbGlkKTsKICAgICB9IGVsc2UgewogICAgICAgICBhbmltYXRpb24tPnNl
dEFuaW1hdGlvbk1vZGUoQW5pbWF0aW9uOjpBbmltYXRlU2luZ2xlUHJvcGVydHkpOwotICAgICAg
ICBhbmltYXRpb24tPnNldFByb3BlcnR5KHByaW1pdGl2ZVZhbHVlLT5nZXRQcm9wZXJ0eUlEKCkp
OworICAgICAgICBhbmltYXRpb24tPnNldFByb3BlcnR5KHByaW1pdGl2ZVZhbHVlLmdldFByb3Bl
cnR5SUQoKSk7CiAgICAgfQogfQogCkBAIC00ODgsOSArNDg4LDkgQEAgdm9pZCBDU1NUb1N0eWxl
TWFwOjptYXBBbmltYXRpb25UaW1pbmdGdW5jdGlvbihBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NT
VmFsdWUqIHYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICh2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgICAgICBzd2l0Y2ggKHByaW1pdGl2
ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSkpIHsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgICAgIHN3aXRjaCAocHJpbWl0
aXZlVmFsdWUuZ2V0VmFsdWVJRCgpKSB7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVMaW5lYXI6CiAg
ICAgICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKExpbmVhclRpbWluZ0Z1bmN0
aW9uOjpjcmVhdGUoKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTUxOCwyMyArNTE4LDIzIEBA
IHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9u
KiBhbmltYXRpb24sIENTU1ZhbHVlKiB2CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAodmFsdWUtPmlzQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlKCkpIHsKLSAgICAgICAg
Q1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlKiBjdWJpY1RpbWluZ0Z1bmN0aW9uID0g
dG9DU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUodmFsdWUpOwotICAgICAgICBhbmlt
YXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0
ZShjdWJpY1RpbWluZ0Z1bmN0aW9uLT54MSgpLCBjdWJpY1RpbWluZ0Z1bmN0aW9uLT55MSgpLCBj
dWJpY1RpbWluZ0Z1bmN0aW9uLT54MigpLCBjdWJpY1RpbWluZ0Z1bmN0aW9uLT55MigpKSk7Ci0g
ICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWUoKSkgewotICAg
ICAgICBDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWUqIHN0ZXBzVGltaW5nRnVuY3Rpb24gPSB0
b0NTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGFuaW1hdGlvbi0+
c2V0VGltaW5nRnVuY3Rpb24oU3RlcHNUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKHN0ZXBzVGltaW5n
RnVuY3Rpb24tPm51bWJlck9mU3RlcHMoKSwgc3RlcHNUaW1pbmdGdW5jdGlvbi0+c3RlcEF0U3Rh
cnQoKSkpOworICAgIGlmIChpczxDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWU+KCp2
YWx1ZSkpIHsKKyAgICAgICAgQ1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlJiBjdWJp
Y1RpbWluZ0Z1bmN0aW9uID0gZG93bmNhc3Q8Q1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZh
bHVlPigqdmFsdWUpOworICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKEN1Ymlj
QmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZShjdWJpY1RpbWluZ0Z1bmN0aW9uLngxKCksIGN1
YmljVGltaW5nRnVuY3Rpb24ueTEoKSwgY3ViaWNUaW1pbmdGdW5jdGlvbi54MigpLCBjdWJpY1Rp
bWluZ0Z1bmN0aW9uLnkyKCkpKTsKKyAgICB9IGVsc2UgaWYgKGlzPENTU1N0ZXBzVGltaW5nRnVu
Y3Rpb25WYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICBDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFs
dWUmIHN0ZXBzVGltaW5nRnVuY3Rpb24gPSBkb3duY2FzdDxDU1NTdGVwc1RpbWluZ0Z1bmN0aW9u
VmFsdWU+KCp2YWx1ZSk7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oU3Rl
cHNUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKHN0ZXBzVGltaW5nRnVuY3Rpb24ubnVtYmVyT2ZTdGVw
cygpLCBzdGVwc1RpbWluZ0Z1bmN0aW9uLnN0ZXBBdFN0YXJ0KCkpKTsKICAgICB9CiB9CiAKIHZv
aWQgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgQ1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCiB7CiAgICAgLy8gSWYg
d2UncmUgbm90IGEgdmFsdWUgbGlzdCwgdGhlbiB3ZSBhcmUgIm5vbmUiIGFuZCBkb24ndCBuZWVk
IHRvIGFsdGVyIHRoZSBlbXB0eSBpbWFnZSBhdCBhbGwuCi0gICAgaWYgKCF2YWx1ZSB8fCAhdmFs
dWUtPmlzVmFsdWVMaXN0KCkpCisgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gUmV0cmlldmUgdGhlIGJvcmRlciBpbWFnZSB2YWx1ZS4K
LSAgICBDU1NWYWx1ZUxpc3QqIGJvcmRlckltYWdlID0gdG9DU1NWYWx1ZUxpc3QodmFsdWUpOwor
ICAgIENTU1ZhbHVlTGlzdCYgYm9yZGVySW1hZ2UgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2
YWx1ZSk7CiAKICAgICAvLyBTZXQgdGhlIGltYWdlICh0aGlzIGtpY2tzIG9mZiB0aGUgbG9hZCku
CiAgICAgQ1NTUHJvcGVydHlJRCBpbWFnZVByb3BlcnR5OwpAQCAtNTQ1LDggKzU0NSw4IEBAIHZv
aWQgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgQ1NTVmFsdWUqIHZhbHVlLCBOCiAgICAgZWxzZQogICAgICAgICBpbWFnZVByb3BlcnR5ID0g
cHJvcGVydHk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IGJvcmRlckltYWdlLT5s
ZW5ndGgoKSA7ICsraSkgewotICAgICAgICBDU1NWYWx1ZSogY3VycmVudCA9IGJvcmRlckltYWdl
LT5pdGVtKGkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBpIDwgYm9yZGVySW1hZ2UubGVu
Z3RoKCkgOyArK2kpIHsKKyAgICAgICAgQ1NTVmFsdWUqIGN1cnJlbnQgPSBib3JkZXJJbWFnZS5p
dGVtKGkpOwogCiAgICAgICAgIGlmIChjdXJyZW50LT5pc0ltYWdlVmFsdWUoKSB8fCBjdXJyZW50
LT5pc0ltYWdlR2VuZXJhdG9yVmFsdWUoKQogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQpAQCAt
NTU2LDE5ICs1NTYsMTkgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUsIE4KICAgICAgICAgICAgIGlt
YWdlLnNldEltYWdlKHN0eWxlSW1hZ2UoaW1hZ2VQcm9wZXJ0eSwgY3VycmVudCkpOwogICAgICAg
ICBlbHNlIGlmIChjdXJyZW50LT5pc0JvcmRlckltYWdlU2xpY2VWYWx1ZSgpKQogICAgICAgICAg
ICAgbWFwTmluZVBpZWNlSW1hZ2VTbGljZShjdXJyZW50LCBpbWFnZSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGN1cnJlbnQtPmlzVmFsdWVMaXN0KCkpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlTGlzdCog
c2xhc2hMaXN0ID0gdG9DU1NWYWx1ZUxpc3QoY3VycmVudCk7CisgICAgICAgIGVsc2UgaWYgKGlz
PENTU1ZhbHVlTGlzdD4oKmN1cnJlbnQpKSB7CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIHNs
YXNoTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKmN1cnJlbnQpOwogICAgICAgICAgICAg
Ly8gTWFwIGluIHRoZSBpbWFnZSBzbGljZXMuCi0gICAgICAgICAgICBpZiAoc2xhc2hMaXN0LT5p
dGVtKDApICYmIHNsYXNoTGlzdC0+aXRlbSgwKS0+aXNCb3JkZXJJbWFnZVNsaWNlVmFsdWUoKSkK
LSAgICAgICAgICAgICAgICBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKHNsYXNoTGlzdC0+aXRlbSgw
KSwgaW1hZ2UpOworICAgICAgICAgICAgaWYgKHNsYXNoTGlzdC5pdGVtKDApICYmIHNsYXNoTGlz
dC5pdGVtKDApLT5pc0JvcmRlckltYWdlU2xpY2VWYWx1ZSgpKQorICAgICAgICAgICAgICAgIG1h
cE5pbmVQaWVjZUltYWdlU2xpY2Uoc2xhc2hMaXN0Lml0ZW0oMCksIGltYWdlKTsKIAogICAgICAg
ICAgICAgLy8gTWFwIGluIHRoZSBib3JkZXIgc2xpY2VzLgotICAgICAgICAgICAgaWYgKHNsYXNo
TGlzdC0+aXRlbSgxKSkKLSAgICAgICAgICAgICAgICBpbWFnZS5zZXRCb3JkZXJTbGljZXMobWFw
TmluZVBpZWNlSW1hZ2VRdWFkKHNsYXNoTGlzdC0+aXRlbSgxKSkpOworICAgICAgICAgICAgaWYg
KHNsYXNoTGlzdC5pdGVtKDEpKQorICAgICAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNl
cyhtYXBOaW5lUGllY2VJbWFnZVF1YWQoc2xhc2hMaXN0Lml0ZW0oMSkpKTsKIAogICAgICAgICAg
ICAgLy8gTWFwIGluIHRoZSBvdXRzZXQuCi0gICAgICAgICAgICBpZiAoc2xhc2hMaXN0LT5pdGVt
KDIpKQotICAgICAgICAgICAgICAgIGltYWdlLnNldE91dHNldChtYXBOaW5lUGllY2VJbWFnZVF1
YWQoc2xhc2hMaXN0LT5pdGVtKDIpKSk7CisgICAgICAgICAgICBpZiAoc2xhc2hMaXN0Lml0ZW0o
MikpCisgICAgICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KG1hcE5pbmVQaWVjZUltYWdlUXVh
ZChzbGFzaExpc3QuaXRlbSgyKSkpOwogICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQtPmlzUHJp
bWl0aXZlVmFsdWUoKSkgewogICAgICAgICAgICAgLy8gU2V0IHRoZSBhcHByb3ByaWF0ZSBydWxl
cyBmb3Igc3RyZXRjaC9yb3VuZC9yZXBlYXQgb2YgdGhlIHNsaWNlcy4KICAgICAgICAgICAgIG1h
cE5pbmVQaWVjZUltYWdlUmVwZWF0KGN1cnJlbnQsIGltYWdlKTsKQEAgLTU5MiwxNSArNTkyLDE1
IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlLCBOCiAKIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwTmlu
ZVBpZWNlSW1hZ2VTbGljZShDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkK
IHsKLSAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNCb3JkZXJJbWFnZVNsaWNlVmFsdWUoKSkK
KyAgICBpZiAoIWlzPENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZT4odmFsdWUpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBSZXRyaWV2ZSB0aGUgYm9yZGVyIGltYWdlIHZhbHVlLgotICAgIENT
U0JvcmRlckltYWdlU2xpY2VWYWx1ZSogYm9yZGVySW1hZ2VTbGljZSA9IHRvQ1NTQm9yZGVySW1h
Z2VTbGljZVZhbHVlKHZhbHVlKTsKKyAgICBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUmIGJvcmRl
ckltYWdlU2xpY2UgPSBkb3duY2FzdDxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+KCp2YWx1ZSk7
CiAKICAgICAvLyBTZXQgdXAgYSBsZW5ndGggYm94IHRvIHJlcHJlc2VudCBvdXIgaW1hZ2Ugc2xp
Y2VzLgogICAgIExlbmd0aEJveCBib3g7Ci0gICAgUXVhZCogc2xpY2VzID0gYm9yZGVySW1hZ2VT
bGljZS0+c2xpY2VzKCk7CisgICAgUXVhZCogc2xpY2VzID0gYm9yZGVySW1hZ2VTbGljZS5zbGlj
ZXMoKTsKICAgICBpZiAoc2xpY2VzLT50b3AoKS0+aXNQZXJjZW50YWdlKCkpCiAgICAgICAgIGJv
eC5tX3RvcCA9IExlbmd0aChzbGljZXMtPnRvcCgpLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50
KTsKICAgICBlbHNlCkBAIC02MjAsMjMgKzYyMCwyMyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1h
cE5pbmVQaWVjZUltYWdlU2xpY2UoQ1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYgaW1h
ZwogICAgIGltYWdlLnNldEltYWdlU2xpY2VzKGJveCk7CiAKICAgICAvLyBTZXQgb3VyIGZpbGwg
bW9kZS4KLSAgICBpbWFnZS5zZXRGaWxsKGJvcmRlckltYWdlU2xpY2UtPm1fZmlsbCk7CisgICAg
aW1hZ2Uuc2V0RmlsbChib3JkZXJJbWFnZVNsaWNlLm1fZmlsbCk7CiB9CiAKIExlbmd0aEJveCBD
U1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVF1YWQoQ1NTVmFsdWUqIHZhbHVlKQogewot
ICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFp
czxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQogICAgICAgICByZXR1cm4gTGVuZ3RoQm94KCk7
CiAKICAgICAvLyBHZXQgb3VyIHpvb20gdmFsdWUuCiAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSBjb252ZXJzaW9uRGF0YSA9IHVzZVNWR1pvb21SdWxlcygpID8gbV9yZXNvbHZlci0+c3Rh
dGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4w
ZikgOiBtX3Jlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKIAog
ICAgIC8vIFJldHJpZXZlIHRoZSBwcmltaXRpdmUgdmFsdWUuCi0gICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIGJvcmRlcldpZHRocyA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOworICAgIENTU1By
aW1pdGl2ZVZhbHVlJiBib3JkZXJXaWR0aHMgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
KnZhbHVlKTsKIAogICAgIC8vIFNldCB1cCBhIGxlbmd0aCBib3ggdG8gcmVwcmVzZW50IG91ciBp
bWFnZSBzbGljZXMuCiAgICAgTGVuZ3RoQm94IGJveDsgLy8gRGVmYXVsdHMgdG8gJ2F1dG8nIHNv
IHdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIHRoYXQgZXhwbGljaXRseSBiZWxvdy4KLSAgICBRdWFk
KiBzbGljZXMgPSBib3JkZXJXaWR0aHMtPmdldFF1YWRWYWx1ZSgpOworICAgIFF1YWQqIHNsaWNl
cyA9IGJvcmRlcldpZHRocy5nZXRRdWFkVmFsdWUoKTsKICAgICBpZiAoc2xpY2VzLT50b3AoKS0+
aXNOdW1iZXIoKSkKICAgICAgICAgYm94Lm1fdG9wID0gTGVuZ3RoKHNsaWNlcy0+dG9wKCktPmdl
dEludFZhbHVlKCksIFJlbGF0aXZlKTsKICAgICBlbHNlIGlmIChzbGljZXMtPnRvcCgpLT5pc1Bl
cmNlbnRhZ2UoKSkKQEAgLTY3MCwxMSArNjcwLDExIEBAIExlbmd0aEJveCBDU1NUb1N0eWxlTWFw
OjptYXBOaW5lUGllY2VJbWFnZVF1YWQoQ1NTVmFsdWUqIHZhbHVlKQogCiB2b2lkIENTU1RvU3R5
bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KENTU1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNl
SW1hZ2UmIGltYWdlKQogewotICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc1ByaW1pdGl2ZVZh
bHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1By
aW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdl
dFBhaXJWYWx1ZSgpOworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIFBhaXIqIHBhaXIgPSBwcmlt
aXRpdmVWYWx1ZS5nZXRQYWlyVmFsdWUoKTsKICAgICBpZiAoIXBhaXIgfHwgIXBhaXItPmZpcnN0
KCkgfHwgIXBhaXItPnNlY29uZCgpKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1VuaWNvZGVSYW5nZVZhbHVlLmgKaW5kZXggNTlkYWM4ZTVjMDk3N2IyYzY1MTRiMWRm
MjcwNjQzMTYxZGEyOTIzYy4uMDZjMTc3NDAwODc1NWI2MjU2Y2E0NDMxODQwNjI1YTljODc5OTcy
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1VuaWNvZGVSYW5nZVZhbHVlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1VuaWNvZGVSYW5nZVZhbHVlLmgKQEAgLTU3LDgg
KzU3LDggQEAgcHJpdmF0ZToKICAgICBVQ2hhcjMyIG1fdG87CiB9OwogCi1DU1NfVkFMVUVfVFlQ
RV9DQVNUUyhDU1NVbmljb2RlUmFuZ2VWYWx1ZSwgaXNVbmljb2RlUmFuZ2VWYWx1ZSgpKQotCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVF
KENTU1VuaWNvZGVSYW5nZVZhbHVlLCBpc1VuaWNvZGVSYW5nZVZhbHVlKCkpCisKICNlbmRpZiAv
LyBDU1NVbmljb2RlUmFuZ2VWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcAppbmRleCBhYWNm
Njg2ODUzZDViMjViYTUxMDc3ODU5NjYzOTMyMDRkMjA1NGU2Li5kMDI5ZWMxN2VlMjNjYjI3ZjJj
MDBkMjkwZDc5MzE1ODNkZGUxMWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5jcHAKQEAgLTkxLDcg
KzkxLDcgQEAgcHJpdmF0ZToKIAogYm9vbCBDU1NWYWx1ZTo6aXNJbXBsaWNpdEluaXRpYWxWYWx1
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY2xhc3NUeXBlID09IEluaXRpYWxDbGFzcyAmJiB0
b0NTU0luaXRpYWxWYWx1ZSh0aGlzKS0+aXNJbXBsaWNpdCgpOworICAgIHJldHVybiBtX2NsYXNz
VHlwZSA9PSBJbml0aWFsQ2xhc3MgJiYgZG93bmNhc3Q8Q1NTSW5pdGlhbFZhbHVlPigqdGhpcyku
aXNJbXBsaWNpdCgpOwogfQogCiBDU1NWYWx1ZTo6VHlwZSBDU1NWYWx1ZTo6Y3NzVmFsdWVUeXBl
KCkgY29uc3QKQEAgLTExMiwxNCArMTEyLDE0IEBAIHZvaWQgQ1NTVmFsdWU6OmFkZFN1YnJlc291
cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PFVSTD4mIHVybHMsIGNvbnN0IFN0eWxlU2hlZXRDCiAg
ICAgLy8gVGhpcyBzaG91bGQgZ2V0IGNhbGxlZCBmb3IgaW50ZXJuYWwgaW5zdGFuY2VzIG9ubHku
CiAgICAgQVNTRVJUKCFpc0NTU09NU2FmZSgpKTsKIAotICAgIGlmIChpc1ByaW1pdGl2ZVZhbHVl
KCkpCi0gICAgICAgIHRvQ1NTUHJpbWl0aXZlVmFsdWUodGhpcyktPmFkZFN1YnJlc291cmNlU3R5
bGVVUkxzKHVybHMsIHN0eWxlU2hlZXQpOwotICAgIGVsc2UgaWYgKGlzVmFsdWVMaXN0KCkpCi0g
ICAgICAgIHRvQ1NTVmFsdWVMaXN0KHRoaXMpLT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxz
LCBzdHlsZVNoZWV0KTsKLSAgICBlbHNlIGlmIChjbGFzc1R5cGUoKSA9PSBGb250RmFjZVNyY0Ns
YXNzKQotICAgICAgICB0b0NTU0ZvbnRGYWNlU3JjVmFsdWUodGhpcyktPmFkZFN1YnJlc291cmNl
U3R5bGVVUkxzKHVybHMsIHN0eWxlU2hlZXQpOwotICAgIGVsc2UgaWYgKGNsYXNzVHlwZSgpID09
IFJlZmxlY3RDbGFzcykKLSAgICAgICAgdG9DU1NSZWZsZWN0VmFsdWUodGhpcyktPmFkZFN1YnJl
c291cmNlU3R5bGVVUkxzKHVybHMsIHN0eWxlU2hlZXQpOworICAgIGlmIChpczxDU1NQcmltaXRp
dmVWYWx1ZT4oKnRoaXMpKQorICAgICAgICBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRo
aXMpLmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKHVybHMsIHN0eWxlU2hlZXQpOworICAgIGVsc2Ug
aWYgKGlzPENTU1ZhbHVlTGlzdD4oKnRoaXMpKQorICAgICAgICBkb3duY2FzdDxDU1NWYWx1ZUxp
c3Q+KCp0aGlzKS5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBzdHlsZVNoZWV0KTsKKyAg
ICBlbHNlIGlmIChpczxDU1NGb250RmFjZVNyY1ZhbHVlPigqdGhpcykpCisgICAgICAgIGRvd25j
YXN0PENTU0ZvbnRGYWNlU3JjVmFsdWU+KCp0aGlzKS5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1
cmxzLCBzdHlsZVNoZWV0KTsKKyAgICBlbHNlIGlmIChpczxDU1NSZWZsZWN0VmFsdWU+KCp0aGlz
KSkKKyAgICAgICAgZG93bmNhc3Q8Q1NTUmVmbGVjdFZhbHVlPigqdGhpcykuYWRkU3VicmVzb3Vy
Y2VTdHlsZVVSTHModXJscywgc3R5bGVTaGVldCk7CiB9CiAKIGJvb2wgQ1NTVmFsdWU6Omhhc0Zh
aWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoKSBjb25zdApAQCAtMTI3LDE5ICsxMjcsMTkgQEAg
Ym9vbCBDU1NWYWx1ZTo6aGFzRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcygpIGNvbnN0CiAg
ICAgLy8gVGhpcyBzaG91bGQgZ2V0IGNhbGxlZCBmb3IgaW50ZXJuYWwgaW5zdGFuY2VzIG9ubHku
CiAgICAgQVNTRVJUKCFpc0NTU09NU2FmZSgpKTsKIAotICAgIGlmIChpc1ZhbHVlTGlzdCgpKQot
ICAgICAgICByZXR1cm4gdG9DU1NWYWx1ZUxpc3QodGhpcyktPmhhc0ZhaWxlZE9yQ2FuY2VsZWRT
dWJyZXNvdXJjZXMoKTsKLSAgICBpZiAoY2xhc3NUeXBlKCkgPT0gRm9udEZhY2VTcmNDbGFzcykK
LSAgICAgICAgcmV0dXJuIHRvQ1NTRm9udEZhY2VTcmNWYWx1ZSh0aGlzKS0+aGFzRmFpbGVkT3JD
YW5jZWxlZFN1YnJlc291cmNlcygpOwotICAgIGlmIChjbGFzc1R5cGUoKSA9PSBJbWFnZUNsYXNz
KQotICAgICAgICByZXR1cm4gdG9DU1NJbWFnZVZhbHVlKHRoaXMpLT5oYXNGYWlsZWRPckNhbmNl
bGVkU3VicmVzb3VyY2VzKCk7Ci0gICAgaWYgKGNsYXNzVHlwZSgpID09IENyb3NzZmFkZUNsYXNz
KQotICAgICAgICByZXR1cm4gdG9DU1NDcm9zc2ZhZGVWYWx1ZSh0aGlzKS0+aGFzRmFpbGVkT3JD
YW5jZWxlZFN1YnJlc291cmNlcygpOwotICAgIGlmIChjbGFzc1R5cGUoKSA9PSBGaWx0ZXJJbWFn
ZUNsYXNzKQotICAgICAgICByZXR1cm4gdG9DU1NGaWx0ZXJJbWFnZVZhbHVlKHRoaXMpLT5oYXNG
YWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKCk7CisgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4o
KnRoaXMpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdGhpcykuaGFz
RmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcygpOworICAgIGlmIChpczxDU1NGb250RmFjZVNy
Y1ZhbHVlPigqdGhpcykpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NGb250RmFjZVNyY1Zh
bHVlPigqdGhpcykuaGFzRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcygpOworICAgIGlmIChp
czxDU1NJbWFnZVZhbHVlPigqdGhpcykpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFn
ZVZhbHVlPigqdGhpcykuaGFzRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcygpOworICAgIGlm
IChpczxDU1NDcm9zc2ZhZGVWYWx1ZT4oKnRoaXMpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q1NTQ3Jvc3NmYWRlVmFsdWU+KCp0aGlzKS5oYXNGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2Vz
KCk7CisgICAgaWYgKGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KCp0aGlzKSkKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KCp0aGlzKS5oYXNGYWlsZWRPckNhbmNl
bGVkU3VicmVzb3VyY2VzKCk7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAgaWYgKGNs
YXNzVHlwZSgpID09IEltYWdlU2V0Q2xhc3MpCi0gICAgICAgIHJldHVybiB0b0NTU0ltYWdlU2V0
VmFsdWUodGhpcyktPmhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoKTsKKyAgICBpZiAo
aXM8Q1NTSW1hZ2VTZXRWYWx1ZT4oKnRoaXMpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NT
SW1hZ2VTZXRWYWx1ZT4oKnRoaXMpLmhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoKTsK
ICNlbmRpZgogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTIyOSw5ICsyMjksOSBAQCBib29sIENT
U1ZhbHVlOjplcXVhbHMoY29uc3QgQ1NTVmFsdWUmIG90aGVyKSBjb25zdAogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKG1fY2xhc3NUeXBlID09IFZhbHVlTGlzdENsYXNzICYmIG90aGVy
Lm1fY2xhc3NUeXBlICE9IFZhbHVlTGlzdENsYXNzKQotICAgICAgICByZXR1cm4gdG9DU1NWYWx1
ZUxpc3QodGhpcyktPmVxdWFscyhvdGhlcik7Ci0gICAgZWxzZSBpZiAobV9jbGFzc1R5cGUgIT0g
VmFsdWVMaXN0Q2xhc3MgJiYgb3RoZXIubV9jbGFzc1R5cGUgPT0gVmFsdWVMaXN0Q2xhc3MpCisg
ICAgfSBlbHNlIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp0aGlzKSAmJiAhaXM8Q1NTVmFsdWVMaXN0
PihvdGhlcikpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp0aGlzKS5l
cXVhbHMob3RoZXIpOworICAgIGVsc2UgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KCp0aGlzKSAmJiBp
czxDU1NWYWx1ZUxpc3Q+KG90aGVyKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IENTU1ZhbHVlTGlzdCY+KG90aGVyKS5lcXVhbHMoKnRoaXMpOwogICAgIHJldHVybiBmYWxzZTsK
IH0KQEAgLTI0Niw3MSArMjQ2LDcxIEBAIFN0cmluZyBDU1NWYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0
CiAKICAgICBzd2l0Y2ggKGNsYXNzVHlwZSgpKSB7CiAgICAgY2FzZSBBc3BlY3RSYXRpb0NsYXNz
OgotICAgICAgICByZXR1cm4gdG9DU1NBc3BlY3RSYXRpb1ZhbHVlKHRoaXMpLT5jdXN0b21DU1NU
ZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NBc3BlY3RSYXRpb1ZhbHVlPigqdGhp
cykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgQm9yZGVySW1hZ2VTbGljZUNsYXNzOgotICAg
ICAgICByZXR1cm4gdG9DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUodGhpcyktPmN1c3RvbUNTU1Rl
eHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZT4o
KnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIENhbnZhc0NsYXNzOgotICAgICAgICBy
ZXR1cm4gdG9DU1NDYW52YXNWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8Q1NTQ2FudmFzVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAg
ICAgY2FzZSBDdXJzb3JJbWFnZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NDdXJzb3JJbWFn
ZVZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxD
U1NDdXJzb3JJbWFnZVZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgRmls
dGVySW1hZ2VDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTRmlsdGVySW1hZ2VWYWx1ZSh0aGlz
KS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTRmlsdGVySW1h
Z2VWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIEZvbnRDbGFzczoKLSAg
ICAgICAgcmV0dXJuIHRvQ1NTRm9udFZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAg
ICAgIHJldHVybiBkb3duY2FzdDxDU1NGb250VmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7
CiAgICAgY2FzZSBGb250RmFjZVNyY0NsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NGb250RmFj
ZVNyY1ZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2Fz
dDxDU1NGb250RmFjZVNyY1ZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2Ug
Rm9udEZlYXR1cmVDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTRm9udEZlYXR1cmVWYWx1ZSh0
aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTRm9udEZl
YXR1cmVWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIEZ1bmN0aW9uQ2xh
c3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0Z1bmN0aW9uVmFsdWUodGhpcyktPmN1c3RvbUNTU1Rl
eHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0Z1bmN0aW9uVmFsdWU+KCp0aGlzKS5j
dXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBMaW5lYXJHcmFkaWVudENsYXNzOgotICAgICAgICBy
ZXR1cm4gdG9DU1NMaW5lYXJHcmFkaWVudFZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7Cisg
ICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPigqdGhpcykuY3Vz
dG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgUmFkaWFsR3JhZGllbnRDbGFzczoKLSAgICAgICAgcmV0
dXJuIHRvQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnRoaXMpLmN1c3Rv
bUNTU1RleHQoKTsKICAgICBjYXNlIENyb3NzZmFkZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9D
U1NDcm9zc2ZhZGVWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAg
Y2FzZSBJbWFnZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NJbWFnZVZhbHVlKHRoaXMpLT5j
dXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPigq
dGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgSW5oZXJpdGVkQ2xhc3M6Ci0gICAgICAg
IHJldHVybiB0b0NTU0luaGVyaXRlZFZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAg
ICAgIHJldHVybiBkb3duY2FzdDxDU1NJbmhlcml0ZWRWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1Rl
eHQoKTsKICAgICBjYXNlIEluaXRpYWxDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTSW5pdGlh
bFZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxD
U1NJbml0aWFsVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAjaWYgRU5BQkxFKENTU19H
UklEX0xBWU9VVCkKICAgICBjYXNlIEdyaWRMaW5lTmFtZXNDbGFzczoKLSAgICAgICAgcmV0dXJu
IHRvQ1NTR3JpZExpbmVOYW1lc1ZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAg
IHJldHVybiBkb3duY2FzdDxDU1NHcmlkTGluZU5hbWVzVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NU
ZXh0KCk7CiAgICAgY2FzZSBHcmlkVGVtcGxhdGVBcmVhc0NsYXNzOgotICAgICAgICByZXR1cm4g
dG9DU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAg
ICAgIHJldHVybiBkb3duY2FzdDxDU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlPigqdGhpcykuY3Vz
dG9tQ1NTVGV4dCgpOwogI2VuZGlmCiAgICAgY2FzZSBQcmltaXRpdmVDbGFzczoKLSAgICAgICAg
cmV0dXJuIHRvQ1NTUHJpbWl0aXZlVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4
dCgpOwogICAgIGNhc2UgUmVmbGVjdENsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NSZWZsZWN0
VmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENT
U1JlZmxlY3RWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIFNoYWRvd0Ns
YXNzOgotICAgICAgICByZXR1cm4gdG9DU1NTaGFkb3dWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4
dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTU2hhZG93VmFsdWU+KCp0aGlzKS5jdXN0
b21DU1NUZXh0KCk7CiAgICAgY2FzZSBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uQ2xhc3M6Ci0g
ICAgICAgIHJldHVybiB0b0NTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSh0aGlzKS0+
Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ3ViaWNCZXppZXJU
aW1pbmdGdW5jdGlvblZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgU3Rl
cHNUaW1pbmdGdW5jdGlvbkNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NTdGVwc1RpbWluZ0Z1
bmN0aW9uVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25j
YXN0PENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsK
ICAgICBjYXNlIFVuaWNvZGVSYW5nZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NVbmljb2Rl
UmFuZ2VWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNh
c3Q8Q1NTVW5pY29kZVJhbmdlVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2Fz
ZSBWYWx1ZUxpc3RDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTVmFsdWVMaXN0KHRoaXMpLT5j
dXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp0
aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1DbGFzczoK
LSAgICAgICAgcmV0dXJuIHRvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUodGhpcyktPmN1c3RvbUNT
U1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
PigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgTGluZUJveENvbnRhaW5DbGFzczoK
LSAgICAgICAgcmV0dXJuIHRvQ1NTTGluZUJveENvbnRhaW5WYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NT
VGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTTGluZUJveENvbnRhaW5WYWx1ZT4o
KnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIENhbGN1bGF0aW9uQ2xhc3M6Ci0gICAg
ICAgIHJldHVybiB0b0NTU0NhbGNWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8Q1NTQ2FsY1ZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwog
I2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQogICAgIGNhc2UgSW1hZ2VTZXRDbGFzczoKLSAgICAg
ICAgcmV0dXJuIHRvQ1NTSW1hZ2VTZXRWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1Rl
eHQoKTsKICNlbmRpZgogICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyQ2xhc3M6Ci0gICAgICAgIHJl
dHVybiB0b1dlYktpdENTU0ZpbHRlclZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAg
ICAgIHJldHVybiBkb3duY2FzdDxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4oKnRoaXMpLmN1c3RvbUNT
U1RleHQoKTsKICAgICBjYXNlIFNWR0NvbG9yQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b1NWR0Nv
bG9yKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxTVkdD
b2xvcj4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIFNWR1BhaW50Q2xhc3M6Ci0g
ICAgICAgIHJldHVybiB0b1NWR1BhaW50KHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAg
IHJldHVybiBkb3duY2FzdDxTVkdQYWludD4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICB9
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAtMzI3
LDEwMSArMzI3LDEwMSBAQCB2b2lkIENTU1ZhbHVlOjpkZXN0cm95KCkKIAogICAgIHN3aXRjaCAo
Y2xhc3NUeXBlKCkpIHsKICAgICBjYXNlIEFzcGVjdFJhdGlvQ2xhc3M6Ci0gICAgICAgIGRlbGV0
ZSB0b0NTU0FzcGVjdFJhdGlvVmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxD
U1NBc3BlY3RSYXRpb1ZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQm9y
ZGVySW1hZ2VTbGljZUNsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NCb3JkZXJJbWFnZVNsaWNl
VmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NCb3JkZXJJbWFnZVNsaWNl
VmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDYW52YXNDbGFzczoKLSAg
ICAgICAgZGVsZXRlIHRvQ1NTQ2FudmFzVmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3du
Y2FzdDxDU1NDYW52YXNWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEN1
cnNvckltYWdlQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0N1cnNvckltYWdlVmFsdWUodGhp
cyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlPih0aGlzKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgRm9udENsYXNzOgotICAgICAgICBkZWxldGUgdG9D
U1NGb250VmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NGb250VmFsdWU+
KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBGb250RmFjZVNyY0NsYXNzOgotICAg
ICAgICBkZWxldGUgdG9DU1NGb250RmFjZVNyY1ZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUg
ZG93bmNhc3Q8Q1NTRm9udEZhY2VTcmNWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIEZvbnRGZWF0dXJlQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0ZvbnRGZWF0dXJl
VmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NGb250RmVhdHVyZVZhbHVl
Pih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgRnVuY3Rpb25DbGFzczoKLSAgICAg
ICAgZGVsZXRlIHRvQ1NTRnVuY3Rpb25WYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25j
YXN0PENTU0Z1bmN0aW9uVmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBM
aW5lYXJHcmFkaWVudENsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NMaW5lYXJHcmFkaWVudFZh
bHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTTGluZWFyR3JhZGllbnRWYWx1
ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFJhZGlhbEdyYWRpZW50Q2xhc3M6
Ci0gICAgICAgIGRlbGV0ZSB0b0NTU1JhZGlhbEdyYWRpZW50VmFsdWUodGhpcyk7CisgICAgICAg
IGRlbGV0ZSBkb3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPih0aGlzKTsKICAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgQ3Jvc3NmYWRlQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0Ny
b3NzZmFkZVZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRl
VmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJbWFnZUNsYXNzOgotICAg
ICAgICBkZWxldGUgdG9DU1NJbWFnZVZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNh
c3Q8Q1NTSW1hZ2VWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEluaGVy
aXRlZENsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NJbmhlcml0ZWRWYWx1ZSh0aGlzKTsKKyAg
ICAgICAgZGVsZXRlIGRvd25jYXN0PENTU0luaGVyaXRlZFZhbHVlPih0aGlzKTsKICAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgSW5pdGlhbENsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NJbml0
aWFsVmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NJbml0aWFsVmFsdWU+
KHRoaXMpOwogICAgICAgICByZXR1cm47CiAjaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKICAg
ICBjYXNlIEdyaWRMaW5lTmFtZXNDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTR3JpZExpbmVO
YW1lc1ZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTR3JpZExpbmVOYW1l
c1ZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgR3JpZFRlbXBsYXRlQXJl
YXNDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSh0aGlz
KTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWU+KHRo
aXMpOwogICAgICAgICByZXR1cm47CiAjZW5kaWYKICAgICBjYXNlIFByaW1pdGl2ZUNsYXNzOgot
ICAgICAgICBkZWxldGUgdG9DU1NQcmltaXRpdmVWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRl
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgUmVmbGVjdENsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NSZWZsZWN0VmFsdWUodGhp
cyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NSZWZsZWN0VmFsdWU+KHRoaXMpOwogICAg
ICAgICByZXR1cm47CiAgICAgY2FzZSBTaGFkb3dDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NT
U2hhZG93VmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NTaGFkb3dWYWx1
ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEN1YmljQmV6aWVyVGltaW5nRnVu
Y3Rpb25DbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
blZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTQ3ViaWNCZXppZXJUaW1p
bmdGdW5jdGlvblZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU3RlcHNU
aW1pbmdGdW5jdGlvbkNsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NTdGVwc1RpbWluZ0Z1bmN0
aW9uVmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NTdGVwc1RpbWluZ0Z1
bmN0aW9uVmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBVbmljb2RlUmFu
Z2VDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTVW5pY29kZVJhbmdlVmFsdWUodGhpcyk7Cisg
ICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NVbmljb2RlUmFuZ2VWYWx1ZT4odGhpcyk7CiAgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIFZhbHVlTGlzdENsYXNzOgotICAgICAgICBkZWxldGUgdG9D
U1NWYWx1ZUxpc3QodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+
KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1DbGFz
czoKLSAgICAgICAgZGVsZXRlIHRvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUodGhpcyk7CisgICAg
ICAgIGRlbGV0ZSBkb3duY2FzdDxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZT4odGhpcyk7CiAgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIExpbmVCb3hDb250YWluQ2xhc3M6Ci0gICAgICAgIGRlbGV0
ZSB0b0NTU0xpbmVCb3hDb250YWluVmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2Fz
dDxDU1NMaW5lQm94Q29udGFpblZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgQ2FsY3VsYXRpb25DbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTQ2FsY1ZhbHVlKHRoaXMp
OworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTQ2FsY1ZhbHVlPih0aGlzKTsKICAgICAgICAg
cmV0dXJuOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQogICAgIGNhc2UgSW1hZ2VTZXRDbGFz
czoKLSAgICAgICAgZGVsZXRlIHRvQ1NTSW1hZ2VTZXRWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVs
ZXRlIGRvd25jYXN0PENTU0ltYWdlU2V0VmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAj
ZW5kaWYKICAgICBjYXNlIEZpbHRlckltYWdlQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0Zp
bHRlckltYWdlVmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NGaWx0ZXJJ
bWFnZVZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgV2ViS2l0Q1NTRmls
dGVyQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b1dlYktpdENTU0ZpbHRlclZhbHVlKHRoaXMpOwor
ICAgICAgICBkZWxldGUgZG93bmNhc3Q8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+KHRoaXMpOwogICAg
ICAgICByZXR1cm47CiAgICAgY2FzZSBTVkdDb2xvckNsYXNzOgotICAgICAgICBkZWxldGUgdG9T
VkdDb2xvcih0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PFNWR0NvbG9yPih0aGlzKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU1ZHUGFpbnRDbGFzczoKLSAgICAgICAgZGVsZXRl
IHRvU1ZHUGFpbnQodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxTVkdQYWludD4odGhp
cyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBA
IC00MzEsMjQgKzQzMSwyNCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NWYWx1ZTo6Y2xvbmVG
b3JDU1NPTSgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChjbGFzc1R5cGUoKSkgewogICAgIGNhc2Ug
UHJpbWl0aXZlQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRoaXMp
LT5jbG9uZUZvckNTU09NKCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnRoaXMpLmNsb25lRm9yQ1NTT00oKTsKICAgICBjYXNlIFZhbHVlTGlzdENsYXNzOgot
ICAgICAgICByZXR1cm4gdG9DU1NWYWx1ZUxpc3QodGhpcyktPmNsb25lRm9yQ1NTT00oKTsKKyAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnRoaXMpLmNsb25lRm9yQ1NTT00o
KTsKICAgICBjYXNlIEltYWdlQ2xhc3M6CiAgICAgY2FzZSBDdXJzb3JJbWFnZUNsYXNzOgotICAg
ICAgICByZXR1cm4gdG9DU1NJbWFnZVZhbHVlKHRoaXMpLT5jbG9uZUZvckNTU09NKCk7CisgICAg
ICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPigqdGhpcykuY2xvbmVGb3JDU1NPTSgp
OwogICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b1dlYktp
dENTU0ZpbHRlclZhbHVlKHRoaXMpLT5jbG9uZUZvckNTU09NKCk7CisgICAgICAgIHJldHVybiBk
b3duY2FzdDxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4oKnRoaXMpLmNsb25lRm9yQ1NTT00oKTsKICAg
ICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybUNsYXNzOgotICAgICAgICByZXR1cm4gdG9XZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZSh0aGlzKS0+Y2xvbmVGb3JDU1NPTSgpOworICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU+KCp0aGlzKS5jbG9uZUZvckNTU09NKCk7
CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCiAgICAgY2FzZSBJbWFnZVNldENsYXNzOgotICAg
ICAgICByZXR1cm4gdG9DU1NJbWFnZVNldFZhbHVlKHRoaXMpLT5jbG9uZUZvckNTU09NKCk7Cisg
ICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPigqdGhpcykuY2xvbmVGb3JD
U1NPTSgpOwogI2VuZGlmCiAgICAgY2FzZSBTVkdDb2xvckNsYXNzOgotICAgICAgICByZXR1cm4g
dG9TVkdDb2xvcih0aGlzKS0+Y2xvbmVGb3JDU1NPTSgpOworICAgICAgICByZXR1cm4gZG93bmNh
c3Q8U1ZHQ29sb3I+KCp0aGlzKS5jbG9uZUZvckNTU09NKCk7CiAgICAgY2FzZSBTVkdQYWludENs
YXNzOgotICAgICAgICByZXR1cm4gdG9TVkdQYWludCh0aGlzKS0+Y2xvbmVGb3JDU1NPTSgpOwor
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHUGFpbnQ+KCp0aGlzKS5jbG9uZUZvckNTU09NKCk7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUKCFpc1N1YnR5cGVFeHBvc2VkVG9DU1NPTSgp
KTsKICAgICAgICAgcmV0dXJuIFRleHRDbG9uZUNTU1ZhbHVlOjpjcmVhdGUoY2xhc3NUeXBlKCks
IGNzc1RleHQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuaCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5oCmluZGV4IDgwNDEzZjg4MjBhN2Y3NmQyYmM0
ZWUyM2IyOGExY2MyNDQ0ZmMzNzEuLjBlODE2YzIyZDNiYTJjYmFiNWYwNGI3YWUyODZlMGUzZjlk
NWJiZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8
d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTI0OSw5ICsyNTAsMTEgQEAgaW5saW5lIGJvb2wgY29tcGFyZUNTU1Zh
bHVlKGNvbnN0IFJlZjxDU1NWYWx1ZVR5cGU+JiBmaXJzdCwgY29uc3QgUmVmPENTU1ZhbHVlVHkK
ICAgICByZXR1cm4gZmlyc3QuZ2V0KCkuZXF1YWxzKHNlY29uZC5nZXQoKSk7CiB9CiAKLSNkZWZp
bmUgQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKLSAg
ICBUWVBFX0NBU1RTX0JBU0UoVG9WYWx1ZVR5cGVOYW1lLCBDU1NWYWx1ZSwgdmFsdWUsIHZhbHVl
LT5wcmVkaWNhdGUsIHZhbHVlLnByZWRpY2F0ZSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKFRvVmFsdWVUeXBlTmFt
ZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlRv
VmFsdWVUeXBlTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpD
U1NWYWx1ZSYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0VORCgpCisKICNlbmRpZiAvLyBDU1NWYWx1ZV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VmFsdWVMaXN0LmgKaW5kZXggMDEyNzkyNGJlNGYxZGJlZDcyMWNlODYwYWEyMjZmNDZlZGVjMWRm
Yy4uYTljZWEyOTQxNzc2YjdiMjllMGYxYjIyMGQzYTAzNWU2MGY4ZjRmYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NWYWx1ZUxpc3QuaApAQCAtODEsOCArODEsNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxS
ZWY8Q1NTVmFsdWU+LCA0PiBtX3ZhbHVlczsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENT
U1ZhbHVlTGlzdCwgaXNWYWx1ZUxpc3QoKSkKLQogaW5saW5lIHZvaWQgQ1NTVmFsdWVMaXN0Ojph
cHBlbmQoUGFzc1JlZjxDU1NWYWx1ZT4gdmFsdWUpCiB7CiAgICAgbV92YWx1ZXMuYXBwZW5kKFdU
Rjo6bW92ZSh2YWx1ZSkpOwpAQCAtOTcsNyArOTUsMTAgQEAgaW5saW5lIHZvaWQgQ1NTVmFsdWVM
aXN0OjpwcmVwZW5kKFBhc3NSZWY8Q1NTVmFsdWU+IHZhbHVlKQogLy8gUGxlYXNlIHRha2UgY2Fy
ZSBub3QgdG8gcGFzcyB0aGVzZSBhcm91bmQgYXMgdGhleSBkbyBob2xkIG9udG8gYSByYXcgcG9p
bnRlci4KIGNsYXNzIENTU1ZhbHVlTGlzdEluc3BlY3RvciB7CiBwdWJsaWM6Ci0gICAgQ1NTVmFs
dWVMaXN0SW5zcGVjdG9yKENTU1ZhbHVlKiB2YWx1ZSkgOiBtX2xpc3QoKHZhbHVlICYmIHZhbHVl
LT5pc1ZhbHVlTGlzdCgpKSA/IHRvQ1NTVmFsdWVMaXN0KHZhbHVlKSA6IDApIHsgfQorICAgIENT
U1ZhbHVlTGlzdEluc3BlY3RvcihDU1NWYWx1ZSogdmFsdWUpCisgICAgICAgIDogbV9saXN0KGlz
PENTU1ZhbHVlTGlzdD4odmFsdWUpID8gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkgOiBu
dWxscHRyKQorICAgIHsgfQorCiAgICAgQ1NTVmFsdWUqIGl0ZW0oc2l6ZV90IGluZGV4KSBjb25z
dCB7IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgbGVuZ3RoKCkpOyBy
ZXR1cm4gbV9saXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGluZGV4KTsgfQogICAgIENTU1Zh
bHVlKiBmaXJzdCgpIGNvbnN0IHsgcmV0dXJuIGl0ZW0oMCk7IH0KICAgICBDU1NWYWx1ZSogc2Vj
b25kKCkgY29uc3QgeyByZXR1cm4gaXRlbSgxKTsgfQpAQCAtMTIzLDQgKzEyNCw2IEBAIHByaXZh
dGU6CiB9OwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0NTU19WQUxVRShDU1NWYWx1ZUxpc3QsIGlzVmFsdWVMaXN0KCkpCisKICNlbmRpZiAvLyBDU1NW
YWx1ZUxpc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHls
ZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIu
Y3BwCmluZGV4IGIyZmY3YjFhZmU2OGI2NzMxMGFjMzA1MzFkZWRkNmU4OTExM2NiZTYuLjUxODVl
MDBiZDY2ZTAyMDlhYjc2ZDExZTRhOGU2NzlmM2U3ZmJlYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJDU1NBc3BlY3RSYXRpb1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1
ZS5oIgogI2luY2x1ZGUgIkNTU0N1cnNvckltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NJbWFn
ZVNldFZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJD
U1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCiAjaW5jbHVkZSAiQ1NTVG9TdHlsZU1hcC5oIgpA
QCAtMTQ5LDggKzE1MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5k
ZXJTdHlsZSogc3R5bGUsIFNldHRlclR5cGUgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rp
b24pKHZhbHVlKTsgfQogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAg
ICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICBzZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAqdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSkpOwor
ICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCisgICAgICAgICAgICBz
ZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKSk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFu
ZGxlcigpCiAgICAgewpAQCAtMTY1LDE0ICsxNjYsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyB2
b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgTnVtYmVyVHlwZSB2YWx1ZSkgeyAoc3R5
bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisg
ICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9D
U1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0
VmFsdWVJRCgpID09IGlkTWFwc1RvTWludXNPbmUpCisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
JiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwor
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IGlkTWFwc1RvTWludXNP
bmUpCiAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAtMSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCks
IHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZTxOdW1iZXJUeXBlPihDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUikpOworICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgcHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWU8TnVtYmVyVHlwZT4oQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIpKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVI
YW5kbGVyKCkKICAgICB7CkBAIC0yMTMsMTYgKzIxNCwxNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gYXV0b0lkZW50aXR5KQorICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBh
dXRvSWRlbnRpdHkpCiAgICAgICAgICAgICBzZXRBdXRvKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkp
OwogICAgICAgICBlbHNlIGlmICh2YWx1ZVR5cGUgPT0gTnVtYmVyKQotICAgICAgICAgICAgc2V0
VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAg
ICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlKTsKICAg
ICAgICAgZWxzZSBpZiAodmFsdWVUeXBlID09IENvbXB1dGVMZW5ndGgpCi0gICAgICAgICAgICBz
ZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxl
bmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEo
KSkpOworICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgcHJpbWl0
aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEoKSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRs
ZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0
VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CkBAIC0yNTIsMTkgKzI1
MywxOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7
Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFp
czxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKHZhbHVlKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAKLSAgICAgICAgaWYgKFJlY3Qq
IHJlY3QgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UmVjdFZhbHVlKCkpIHsKKyAgICAgICAgaWYgKFJl
Y3QqIHJlY3QgPSBwcmltaXRpdmVWYWx1ZS5nZXRSZWN0VmFsdWUoKSkgewogICAgICAgICAgICAg
TGVuZ3RoIHRvcCA9IGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0LT50b3AoKSk7
CiAgICAgICAgICAgICBMZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZl
ciwgcmVjdC0+cmlnaHQoKSk7CiAgICAgICAgICAgICBMZW5ndGggYm90dG9tID0gY29udmVydFRv
TGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3QtPmJvdHRvbSgpKTsKICAgICAgICAgICAgIExlbmd0
aCBsZWZ0ID0gY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3QtPmxlZnQoKSk7CiAg
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDbGlwKHRvcCwgcmlnaHQsIGJv
dHRvbSwgbGVmdCk7CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXND
bGlwKHRydWUpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlE
KCkgPT0gQ1NTVmFsdWVBdXRvKSB7CisgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUu
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykgewogICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgo
KSk7CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKGZhbHNl
KTsKICAgICAgICAgfQpAQCAtMjk4LDE3ICsyOTksMTcgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICAg
ICAgaWYgKGluaGVyaXRDb2xvckZyb21QYXJlbnQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVl
SUQoKSA9PSBDU1NWYWx1ZUN1cnJlbnRjb2xvcikKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUm
IHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7Cisg
ICAgICAgIGlmIChpbmhlcml0Q29sb3JGcm9tUGFyZW50ICYmIHByaW1pdGl2ZVZhbHVlLmdldFZh
bHVlSUQoKSA9PSBDU1NWYWx1ZUN1cnJlbnRjb2xvcikKICAgICAgICAgICAgIGFwcGx5SW5oZXJp
dFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSkK
LSAgICAgICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9u
KShzdHlsZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1ZSkp
OworICAgICAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rp
b24pKHN0eWxlUmVzb2x2ZXItPmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKCZwcmltaXRpdmVWYWx1
ZSkpOwogICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUoKSkKLSAgICAgICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
KnZpc2l0ZWRMaW5rU2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPmNvbG9yRnJvbVByaW1p
dGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlLCAvKiBmb3JWaXNpdGVkTGluayAqLyB0cnVlKSk7Cisg
ICAgICAgICAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPip2aXNpdGVkTGlua1NldHRl
ckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZSgmcHJpbWl0
aXZlVmFsdWUsIC8qIGZvclZpc2l0ZWRMaW5rICovIHRydWUpKTsKICAgICAgICAgfQogICAgIH0K
IApAQCAtMzU5LDQ2ICszNjAsNDYgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVl
KFJlbmRlclN0eWxlKiBzdHlsZSwgTGVuZ3RoIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0
aW9uKShXVEY6Om1vdmUodmFsdWUpKTsgfQogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAg
ICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJp
bWl0aXZlVmFsdWUodmFsdWUpOwotICAgICAgICBpZiAobm9uZUVuYWJsZWQgJiYgcHJpbWl0aXZl
VmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKKyAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSk7CisgICAgICAgIGlmIChub25lRW5hYmxlZCAmJiBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1
ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKSB7CiAgICAgICAgICAgICBpZiAobm9uZVVuZGVmaW5lZCkK
ICAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgo
VW5kZWZpbmVkKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc2V0VmFsdWUo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKCkpOwogICAgICAgICB9CiAgICAgICAgIGlm
IChsZWdhY3lJbnRyaW5zaWNFbmFibGVkKSB7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUludHJpbnNpYykKKyAgICAgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVJbnRyaW5zaWMpCiAgICAgICAg
ICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKEludHJpbnNp
YykpOwotICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9
PSBDU1NWYWx1ZU1pbkludHJpbnNpYykKKyAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU1pbkludHJpbnNpYykKICAgICAgICAgICAgICAg
ICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoTWluSW50cmluc2ljKSk7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKGludHJpbnNpY0VuYWJsZWQpIHsKLSAgICAgICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Via2l0TWluQ29u
dGVudCkKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NT
VmFsdWVXZWJraXRNaW5Db250ZW50KQogICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksIExlbmd0aChNaW5Db250ZW50KSk7Ci0gICAgICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Via2l0TWF4Q29udGVu
dCkKKyAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBD
U1NWYWx1ZVdlYmtpdE1heENvbnRlbnQpCiAgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKE1heENvbnRlbnQpKTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRGaWxsQXZh
aWxhYmxlKQorICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgp
ID09IENTU1ZhbHVlV2Via2l0RmlsbEF2YWlsYWJsZSkKICAgICAgICAgICAgICAgICBzZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoRmlsbEF2YWlsYWJsZSkpOwotICAgICAg
ICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdl
YmtpdEZpdENvbnRlbnQpCisgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRW
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRGaXRDb250ZW50KQogICAgICAgICAgICAgICAgIHNl
dFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChGaXRDb250ZW50KSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRh
ID0gc3R5bGVSZXNvbHZlci0+dXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCkgPwogICAgICAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29w
eVdpdGhBZGp1c3RlZFpvb20oMS4wZikKICAgICAgICAgICAgIDogc3R5bGVSZXNvbHZlci0+c3Rh
dGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7Ci0gICAgICAgIGlmIChhdXRvRW5hYmxl
ZCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykKKyAgICAg
ICAgaWYgKGF1dG9FbmFibGVkICYmIHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NW
YWx1ZUF1dG8pCiAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBM
ZW5ndGgoKSk7Ci0gICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7
Ci0gICAgICAgICAgICBMZW5ndGggbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5n
dGg8TGVuZ3RoPihjb252ZXJzaW9uRGF0YSk7Ci0gICAgICAgICAgICBsZW5ndGguc2V0SGFzUXVp
cmsocHJpbWl0aXZlVmFsdWUtPmlzUXVpcmtWYWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkgeworICAgICAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IHBy
aW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJzaW9uRGF0YSk7CisgICAg
ICAgICAgICBsZW5ndGguc2V0SGFzUXVpcmsocHJpbWl0aXZlVmFsdWUuaXNRdWlya1ZhbHVlKCkp
OwogICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgbGVuZ3RoKTsK
LSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCi0gICAg
ICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZl
VmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpKTsKLSAgICAgICAgZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAg
ICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZlVmFs
dWUtPmNzc0NhbGNWYWx1ZSgpLT5jcmVhdGVDYWxjdWxhdGlvblZhbHVlKGNvbnZlcnNpb25EYXRh
KSkpOworICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpKQor
ICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKHByaW1p
dGl2ZVZhbHVlLmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpKTsKKyAgICAgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUuaXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKKyAgICAg
ICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVW
YWx1ZS5jc3NDYWxjVmFsdWUoKS0+Y3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShjb252ZXJzaW9uRGF0
YSkpKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIo
KQpAQCAtNDE1LDE0ICs0MTYsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVl
KFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgeyAoc3R5bGUt
PipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAg
ICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJp
bWl0aXZlVmFsdWUodmFsdWUpOwotICAgICAgICBpZiAoKGlkZW50QmVoYXZpb3IgPT0gTWFwTm9u
ZVRvTnVsbCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkK
LSAgICAgICAgICAgIHx8IChpZGVudEJlaGF2aW9yID09IE1hcEF1dG9Ub051bGwgJiYgcHJpbWl0
aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pKQorICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
KnZhbHVlKTsKKyAgICAgICAgaWYgKChpZGVudEJlaGF2aW9yID09IE1hcE5vbmVUb051bGwgJiYg
cHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKKyAgICAgICAgICAg
IHx8IChpZGVudEJlaGF2aW9yID09IE1hcEF1dG9Ub051bGwgJiYgcHJpbWl0aXZlVmFsdWUuZ2V0
VmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykpCiAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBudWxsQXRvbSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNl
dFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdW
YWx1ZSgpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHBy
aW1pdGl2ZVZhbHVlLmdldFN0cmluZ1ZhbHVlKCkpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVy
dHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTQzNywxMSArNDM4LDExIEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIExlbmd0
aFNpemUgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKFdURjo6bW92ZSh2YWx1ZSkp
OyB9CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0g
ICAgICAgIFBhaXIqIHBhaXIgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UGFpclZhbHVlKCk7CisgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPigqdmFsdWUpOworICAgICAgICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUu
Z2V0UGFpclZhbHVlKCk7CiAgICAgICAgIGlmICghcGFpciB8fCAhcGFpci0+Zmlyc3QoKSB8fCAh
cGFpci0+c2Vjb25kKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTU1MiwxMyArNTUzLDEz
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEZpbGxMYXllciogY2hpbGQgPSAoc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOwogICAgICAgICBGaWxsTGF5
ZXIqIHByZXZpb3VzQ2hpbGQgPSBudWxscHRyOwotICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVM
aXN0KCkKKyAgICAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKQogI2lmIEVOQUJMRShD
U1NfSU1BR0VfU0VUKQotICAgICAgICAmJiAhdmFsdWUtPmlzSW1hZ2VTZXRWYWx1ZSgpCisgICAg
ICAgICYmICFpczxDU1NJbWFnZVNldFZhbHVlPigqdmFsdWUpCiAjZW5kaWYKICAgICAgICAgKSB7
CiAgICAgICAgICAgICAvLyBXYWxrIGVhY2ggdmFsdWUgYW5kIHB1dCBpdCBpbnRvIGEgbGF5ZXIs
IGNyZWF0aW5nIG5ldyBsYXllcnMgYXMgbmVlZGVkLgotICAgICAgICAgICAgQ1NTVmFsdWVMaXN0
JiB2YWx1ZUxpc3QgPSB0b0NTU1ZhbHVlTGlzdCgqdmFsdWUpOworICAgICAgICAgICAgQ1NTVmFs
dWVMaXN0JiB2YWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVMaXN0Lmxlbmd0aCgpOyBpKysp
IHsKICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkKSB7CiAgICAgICAgICAgICAgICAgICAgIHBy
ZXZpb3VzQ2hpbGQtPnNldE5leHQoc3RkOjptYWtlX3VuaXF1ZTxGaWxsTGF5ZXI+KGZpbGxMYXll
clR5cGUpKTsKQEAgLTU5NSwxMiArNTk2LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIC8vIG5vdGU6IENTU1Byb3BlcnR5TGV0dGVy
L1dvcmRTcGFjaW5nIHJpZ2h0IG5vdyBzZXRzIHRvIHplcm8gaWYgaXQncyBub3QgYSBwcmltaXRp
dmUgdmFsdWUgZm9yIHNvbWUgcmVhc29uLi4uCi0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkK
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSk7CiAKLSAgICAgICAgQ1NTVmFsdWVJRCBpZGVudCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRW
YWx1ZUlEKCk7CisgICAgICAgIENTU1ZhbHVlSUQgaWRlbnQgPSBwcmltaXRpdmVWYWx1ZS5nZXRW
YWx1ZUlEKCk7CiAgICAgICAgIFQgbGVuZ3RoOwogICAgICAgICBpZiAobm9ybWFsRW5hYmxlZCAm
JiBpZGVudCA9PSBDU1NWYWx1ZU5vcm1hbCkgewogICAgICAgICAgICAgbGVuZ3RoID0gMDsKQEAg
LTYxNSw5ICs2MTYsOSBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIC8vIEFueSBvcmlnaW5hbCBy
ZXN1bHQgdGhhdCB3YXMgPj0gMSBzaG91bGQgbm90IGJlIGFsbG93ZWQgdG8gZmFsbCBiZWxvdyAx
LgogICAgICAgICAgICAgLy8gVGhpcyBrZWVwcyBib3JkZXIgbGluZXMgZnJvbSB2YW5pc2hpbmcu
Ci0gICAgICAgICAgICBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihj
b252ZXJzaW9uRGF0YSk7CisgICAgICAgICAgICBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS5jb21w
dXRlTGVuZ3RoPFQ+KGNvbnZlcnNpb25EYXRhKTsKICAgICAgICAgICAgIGlmIChjb252ZXJzaW9u
RGF0YS56b29tKCkgPCAxLjBmICYmIGxlbmd0aCA8IDEuMCkgewotICAgICAgICAgICAgICAgIFQg
b3JpZ2luYWxMZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihjb252ZXJz
aW9uRGF0YS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSk7CisgICAgICAgICAgICAgICAgVCBv
cmlnaW5hbExlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8VD4oY29udmVyc2lv
bkRhdGEuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpOwogICAgICAgICAgICAgICAgIGlmIChv
cmlnaW5hbExlbmd0aCA+PSAxLjApCiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IDEuMDsK
ICAgICAgICAgICAgIH0KQEAgLTY1NCwxMSArNjU1LDExIEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUp
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSk7CiAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJl
c29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgKGZvbnREZXNjcmlwdGlvbi4qc2V0
dGVyRnVuY3Rpb24pKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgIChmb250RGVzY3JpcHRpb24u
KnNldHRlckZ1bmN0aW9uKShwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KIApAQCAtNjk3LDEw
ICs2OTgsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICBpZiAoIWlz
PENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBh
dXRvJiB2YWx1ZUxpc3QgPSB0b0NTU1ZhbHVlTGlzdCgqdmFsdWUpOworICAgICAgICBhdXRvJiB2
YWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CiAKICAgICAgICAgRm9u
dERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZv
bnREZXNjcmlwdGlvbigpOwogICAgICAgICAvLyBCZWZvcmUgbWFwcGluZyBpbiBhIG5ldyBmb250
LWZhbWlseSBwcm9wZXJ0eSwgd2Ugc2hvdWxkIHJlc2V0IHRoZSBnZW5lcmljIGZhbWlseS4KQEAg
LTcxMiwxNCArNzEzLDE0IEBAIHB1YmxpYzoKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdmFsdWVMaXN0Lmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgICAgIENTU1ZhbHVlKiBp
dGVtID0gdmFsdWVMaXN0Lml0ZW0oaSk7Ci0gICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0
aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVt
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBjb250ZW50VmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGl0ZW0pOworICAgICAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGNvbnRlbnRWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPigqaXRlbSk7CiAgICAgICAgICAgICBBdG9taWNTdHJpbmcgZmFjZTsKLSAgICAgICAg
ICAgIGlmIChjb250ZW50VmFsdWUtPmlzU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgZmFjZSA9
IGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKTsKKyAgICAgICAgICAgIGlmIChjb250ZW50
VmFsdWUuaXNTdHJpbmcoKSkKKyAgICAgICAgICAgICAgICBmYWNlID0gY29udGVudFZhbHVlLmdl
dFN0cmluZ1ZhbHVlKCk7CiAgICAgICAgICAgICBlbHNlIGlmIChTZXR0aW5ncyogc2V0dGluZ3Mg
PSBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLnNldHRpbmdzKCkpIHsKLSAgICAgICAgICAgICAg
ICBzd2l0Y2ggKGNvbnRlbnRWYWx1ZS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgICAgICAgICAgICAg
c3dpdGNoIChjb250ZW50VmFsdWUuZ2V0VmFsdWVJRCgpKSB7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZVdlYmtpdEJvZHk6CiAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBzZXR0aW5n
cy0+c3RhbmRhcmRGb250RmFtaWx5KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
ODQwLDEwICs4NDEsMTAgQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQor
ICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKIAogICAg
ICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3
b3JkU2l6ZSgwKTsKQEAgLTg1Niw3ICs4NTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBwYXJl
bnRJc0Fic29sdXRlU2l6ZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmZvbnREZXNj
cmlwdGlvbigpLmlzQWJzb2x1dGVTaXplKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoQ1NT
VmFsdWVJRCBpZGVudCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICAgICAg
aWYgKENTU1ZhbHVlSUQgaWRlbnQgPSBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAg
ICAgICAgICAgIC8vIEtleXdvcmRzIGFyZSBiZWluZyB1c2VkLgogICAgICAgICAgICAgc3dpdGNo
IChpZGVudCkgewogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVh4U21hbGw6CkBAIC04ODYsMTUg
Kzg4NywxNCBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fi
c29sdXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZSAmJiAoaWRlbnQgPT0gQ1NTVmFsdWVMYXJn
ZXIgfHwgaWRlbnQgPT0gQ1NTVmFsdWVTbWFsbGVyIHx8IGlkZW50ID09IENTU1ZhbHVlV2Via2l0
UnVieVRleHQpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRJc0Fic29sdXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICEocHJpbWl0aXZlVmFsdWUtPmlzUGVy
Y2VudGFnZSgpIHx8IHByaW1pdGl2ZVZhbHVlLT5pc0ZvbnRSZWxhdGl2ZUxlbmd0aCgpKSk7Ci0g
ICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpIHsKLSAgICAgICAgICAg
ICAgICBzaXplID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KENTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5bGVSZXNv
bHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLnJlbmRl
clZpZXcoKSwgMS4wZiwgdHJ1ZSkpOwotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
YXRlKCkuc2V0Rm9udFNpemVIYXNWaWV3cG9ydFVuaXRzKHByaW1pdGl2ZVZhbHVlLT5pc1ZpZXdw
b3J0UGVyY2VudGFnZUxlbmd0aCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZl
VmFsdWUtPmlzUGVyY2VudGFnZSgpKQotICAgICAgICAgICAgICAgIHNpemUgPSAocHJpbWl0aXZl
VmFsdWUtPmdldEZsb2F0VmFsdWUoKSAqIHBhcmVudFNpemUpIC8gMTAwLjBmOwotICAgICAgICAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVu
Z3RoKCkpIHsKLSAgICAgICAgICAgICAgICBSZWY8Q2FsY3VsYXRpb25WYWx1ZT4gY2FsY3VsYXRp
b25WYWx1ZSB7IHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+Y3JlYXRlQ2FsY3VsYXRp
b25WYWx1ZShzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEo
KS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSkgfTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRJc0Fic29sdXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZSB8fCAhKHByaW1pdGl2
ZVZhbHVlLmlzUGVyY2VudGFnZSgpIHx8IHByaW1pdGl2ZVZhbHVlLmlzRm9udFJlbGF0aXZlTGVu
Z3RoKCkpKTsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7Cisg
ICAgICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8ZmxvYXQ+
KENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSwg
c3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5kb2N1bWVu
dCgpLnJlbmRlclZpZXcoKSwgMS4wZiwgdHJ1ZSkpOworICAgICAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXItPnN0YXRlKCkuc2V0Rm9udFNpemVIYXNWaWV3cG9ydFVuaXRzKHByaW1pdGl2ZVZhbHVl
LmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSkKKyAgICAgICAgICAgICAgICBzaXplID0gKHBy
aW1pdGl2ZVZhbHVlLmdldEZsb2F0VmFsdWUoKSAqIHBhcmVudFNpemUpIC8gMTAwLjBmOworICAg
ICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNDYWxjdWxhdGVkUGVyY2VudGFnZVdp
dGhMZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIFJlZjxDYWxjdWxhdGlvblZhbHVlPiBjYWxj
dWxhdGlvblZhbHVlIHsgcHJpbWl0aXZlVmFsdWUuY3NzQ2FsY1ZhbHVlKCktPmNyZWF0ZUNhbGN1
bGF0aW9uVmFsdWUoc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25E
YXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpIH07CiAgICAgICAgICAgICAgICAgc2l6
ZSA9IGNhbGN1bGF0aW9uVmFsdWUtPmV2YWx1YXRlKHBhcmVudFNpemUpOwogICAgICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtOTE5LDExICs5MTksMTEgQEAgY2xh
c3MgQXBwbHlQcm9wZXJ0eUZvbnRXZWlnaHQgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUm
IHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAg
ICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5m
b250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFs
dWVJRCgpKSB7CisgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpKSB7
CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVJbnZhbGlkOgogICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTkzNCw3ICs5MzQsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KGZvbnREZXNjcmlwdGlvbi5s
aWdodGVyV2VpZ2h0KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KCpwcmltaXRpdmVWYWx1ZSk7Cisg
ICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KHByaW1pdGl2ZVZhbHVlKTsKICAg
ICAgICAgfQogICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERl
c2NyaXB0aW9uKTsKICAgICB9CkBAIC05NzYsMTMgKzk3NiwxMyBAQCBwdWJsaWM6CiAgICAgICAg
IEZvbnREZXNjcmlwdGlvbjo6TGlnYXR1cmVzU3RhdGUgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0
YXRlID0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZTsKICAgICAgICAgRm9u
dERlc2NyaXB0aW9uOjpMaWdhdHVyZXNTdGF0ZSBoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPSBG
b250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOwogCi0gICAgICAgIGlmICh2YWx1
ZS0+aXNWYWx1ZUxpc3QoKSkgewotICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3Qg
PSB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHZhbHVlTGlzdC0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgICAgIENTU1ZhbHVl
KiBpdGVtID0gdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwotICAgICAgICAg
ICAgICAgIEFTU0VSVChpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICAgICAgICAg
IGlmIChpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3dp
dGNoICh0b0NTU1ByaW1pdGl2ZVZhbHVlKGl0ZW0pLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICAgICAg
aWYgKGlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkgeworICAgICAgICAgICAgQ1NTVmFsdWVMaXN0
JiB2YWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlTGlzdC5sZW5ndGgoKTsgKytpKSB7CisgICAg
ICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSB2YWx1ZUxpc3QuaXRlbVdpdGhvdXRCb3VuZHND
aGVjayhpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0
ZW0pKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKSkg
eworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqaXRlbSkuZ2V0VmFsdWVJRCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVOb0NvbW1vbkxpZ2F0dXJlczoKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbkxpZ2F0
dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlOwogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDEwLDggKzEwMTAsOCBAQCBwdWJsaWM6
CiAgICAgICAgIH0KICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04odmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQodG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSkt
PmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCk7CisgICAgICAgICAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTihpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSk7Cisg
ICAgICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0
VmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKTsKICAgICAgICAgfQogI2VuZGlmCiAKQEAgLTEx
NTksOSArMTE1OSw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgewotICAgICAgICBib29sIHNldENvdW50ZXJJbmNyZW1lbnRUb05vbmUgPSBj
b3VudGVyQmVoYXZpb3IgPT0gSW5jcmVtZW50ICYmIHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkg
JiYgdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSktPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5v
bmU7CisgICAgICAgIGJvb2wgc2V0Q291bnRlckluY3JlbWVudFRvTm9uZSA9IGNvdW50ZXJCZWhh
dmlvciA9PSBJbmNyZW1lbnQgJiYgaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVl
Tm9uZTsKIAotICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpICYmICFzZXRDb3VudGVy
SW5jcmVtZW50VG9Ob25lKQorICAgICAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSAm
JiAhc2V0Q291bnRlckluY3JlbWVudFRvTm9uZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5h
Y2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwpAQCAtMTE3NywxNCArMTE3NywxNCBAQCBwdWJsaWM6
CiAgICAgICAgIGlmIChzZXRDb3VudGVySW5jcmVtZW50VG9Ob25lKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKLSAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gdG9DU1NWYWx1ZUxp
c3QodmFsdWUpOwotICAgICAgICBpbnQgbGVuZ3RoID0gbGlzdCA/IGxpc3QtPmxlbmd0aCgpIDog
MDsKKyAgICAgICAgQ1NTVmFsdWVMaXN0JiBsaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pigq
dmFsdWUpOworICAgICAgICBpbnQgbGVuZ3RoID0gbGlzdC5sZW5ndGgoKTsKICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgQ1NTVmFsdWUqIGN1
cnJWYWx1ZSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7Ci0gICAgICAgICAgICBp
ZiAoIWN1cnJWYWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgQ1NTVmFsdWUq
IGN1cnJWYWx1ZSA9IGxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAgICAgICAg
IGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCpjdXJyVmFsdWUpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgICAgICBQYWlyKiBwYWlyID0gdG9DU1NQcmltaXRpdmVWYWx1
ZShjdXJyVmFsdWUpLT5nZXRQYWlyVmFsdWUoKTsKKyAgICAgICAgICAgIFBhaXIqIHBhaXIgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmN1cnJWYWx1ZSkuZ2V0UGFpclZhbHVlKCk7CiAg
ICAgICAgICAgICBpZiAoIXBhaXIgfHwgIXBhaXItPmZpcnN0KCkgfHwgIXBhaXItPnNlY29uZCgp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMjE5LDI3ICsxMjE5LDI3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPmNsZWFyQ3Vyc29yTGlzdCgpOwotICAgICAgICBpZiAodmFs
dWUtPmlzVmFsdWVMaXN0KCkpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHRv
Q1NTVmFsdWVMaXN0KHZhbHVlKTsKLSAgICAgICAgICAgIGludCBsZW4gPSBsaXN0LT5sZW5ndGgo
KTsKKyAgICAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkgeworICAgICAgICAgICAg
Q1NTVmFsdWVMaXN0JiBsaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpOworICAg
ICAgICAgICAgaW50IGxlbiA9IGxpc3QubGVuZ3RoKCk7CiAgICAgICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRDdXJzb3IoQ3Vyc29yQXV0byk7CiAgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0g
PSBsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwotICAgICAgICAgICAgICAgIGlmIChp
dGVtLT5pc0N1cnNvckltYWdlVmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAgICBDU1NDdXJz
b3JJbWFnZVZhbHVlKiBpbWFnZSA9IHRvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZShpdGVtKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGltYWdlLT51cGRhdGVJZlNWR0N1cnNvcklzVXNlZChzdHlsZVJl
c29sdmVyLT5lbGVtZW50KCkpKSAvLyBFbGVtZW50cyB3aXRoIFNWRyBjdXJzb3JzIGFyZSBub3Qg
YWxsb3dlZCB0byBzaGFyZSBzdHlsZS4KKyAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9
IGxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4oKml0ZW0pKSB7CisgICAgICAgICAgICAgICAgICAgIENTU0N1
cnNvckltYWdlVmFsdWUmIGltYWdlID0gZG93bmNhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4oKml0
ZW0pOworICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UudXBkYXRlSWZTVkdDdXJzb3JJc1Vz
ZWQoc3R5bGVSZXNvbHZlci0+ZWxlbWVudCgpKSkgLy8gRWxlbWVudHMgd2l0aCBTVkcgY3Vyc29y
cyBhcmUgbm90IGFsbG93ZWQgdG8gc2hhcmUgc3R5bGUuCiAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRVbmlxdWUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+YWRkQ3Vyc29yKHN0eWxlUmVzb2x2ZXItPnN0eWxl
SW1hZ2UoQ1NTUHJvcGVydHlDdXJzb3IsIGltYWdlKSwgaW1hZ2UtPmhvdFNwb3QoKSk7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQ
cmltaXRpdmVWYWx1ZShpdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc1ZhbHVlSUQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5hZGRDdXJzb3Ioc3R5bGVSZXNvbHZlci0+c3R5bGVJ
bWFnZShDU1NQcm9wZXJ0eUN1cnNvciwgJmltYWdlKSwgaW1hZ2UuaG90U3BvdCgpKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlLmlzVmFsdWVJRCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKHByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSkgewotICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPmlzVmFsdWVJRCgpICYmIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmN1cnNv
cigpICE9IEVDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKSkKLSAgICAgICAgICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgfSBl
bHNlIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSk7CisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNWYWx1ZUlEKCkg
JiYgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y3Vyc29yKCkgIT0gRUN1cnNvcihwcmltaXRpdmVW
YWx1ZSkpCisgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29y
KHByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTI1MCwxNCArMTI1MCwx
NCBAQCBjbGFzcyBBcHBseVByb3BlcnR5VGV4dEFsaWduIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkK
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICAgICAgQVNTRVJUKHBy
aW1pdGl2ZVZhbHVlLT5pc1ZhbHVlSUQoKSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBw
cmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAg
ICAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUuaXNWYWx1ZUlEKCkpOwogCi0gICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpICE9IENTU1ZhbHVlV2Via2l0TWF0Y2hQYXJlbnQp
Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oKnByaW1p
dGl2ZVZhbHVlKTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSAhPSBD
U1NWYWx1ZVdlYmtpdE1hdGNoUGFyZW50KQorICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0VGV4dEFsaWduKHByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgZWxzZSBpZiAoc3R5
bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+dGV4dEFsaWduKCkgPT0gVEFTVEFSVCkKICAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbihzdHlsZVJlc29sdmVy
LT5wYXJlbnRTdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBMRUZUIDogUklHSFQp
OwogICAgICAgICBlbHNlIGlmIChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0QWxp
Z24oKSA9PSBUQUVORCkKQEAgLTEyNzksOCArMTI3OSw4IEBAIHB1YmxpYzoKICAgICAgICAgVGV4
dERlY29yYXRpb24gdCA9IFJlbmRlclN0eWxlOjppbml0aWFsVGV4dERlY29yYXRpb24oKTsKICAg
ICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpKHZhbHVlKTsgaS5oYXNNb3JlKCk7IGku
YWR2YW5jZSgpKSB7CiAgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFsdWUoKTsKLSAg
ICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGl0ZW0tPmlzUHJpbWl0
aXZlVmFsdWUoKSk7Ci0gICAgICAgICAgICB0IHw9ICp0b0NTU1ByaW1pdGl2ZVZhbHVlKGl0ZW0p
OworICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KGl0ZW0pKTsKKyAgICAgICAgICAgIHQgfD0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCppdGVtKTsKICAgICAgICAgfQogICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRUZXh0RGVjb3JhdGlvbih0KTsKICAgICB9CkBAIC0xMzI0LDE0ICsxMzI0LDE0IEBA
IGNsYXNzIEFwcGx5UHJvcGVydHlUZXh0RGVjb3JhdGlvblNraXAgewogcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dFRleHREZWNvcmF0aW9uU2tpcCh2YWx1ZVRvRGVjb3JhdGlvblNraXAoKnRvQ1NTUHJpbWl0aXZl
VmFsdWUodmFsdWUpKSk7CisgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KSkgeworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dERlY29yYXRp
b25Ta2lwKHZhbHVlVG9EZWNvcmF0aW9uU2tpcChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
KnZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgVGV4
dERlY29yYXRpb25Ta2lwIHNraXAgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHREZWNvcmF0aW9u
U2tpcCgpOwogICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkodmFsdWUpOyBpLmhh
c01vcmUoKTsgaS5hZHZhbmNlKCkpCi0gICAgICAgICAgICBza2lwIHw9IHZhbHVlVG9EZWNvcmF0
aW9uU2tpcCgqdG9DU1NQcmltaXRpdmVWYWx1ZShpLnZhbHVlKCkpKTsKKyAgICAgICAgICAgIHNr
aXAgfD0gdmFsdWVUb0RlY29yYXRpb25Ta2lwKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
aS52YWx1ZSgpKSk7CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHREZWNv
cmF0aW9uU2tpcChza2lwKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVh
dGVIYW5kbGVyKCkKQEAgLTEzNDUsMTAgKzEzNDUsMTAgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eU1h
cnF1ZWVJbmNyZW1lbnQgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAg
ICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJp
bWl0aXZlVmFsdWUoKnZhbHVlKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2
ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgIExl
bmd0aCBtYXJxdWVlTGVuZ3RoKFVuZGVmaW5lZCk7CiAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZl
VmFsdWUuZ2V0VmFsdWVJRCgpKSB7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbDoKQEAgLTEz
ODAsMTQgKzEzODAsMTQgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eU1hcnF1ZWVSZXBldGl0aW9uIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVl
KTsKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVJ
bmZpbml0ZSkKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgICAgIGlmIChwcmltaXRpdmVW
YWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKICAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldE1hcnF1ZWVMb29wQ291bnQoLTEpOyAvLyAtMSBtZWFucyBy
ZXBlYXQgZm9yZXZlci4KLSAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVy
KCkpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRNYXJxdWVlTG9vcENv
dW50KHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldE1hcnF1ZWVMb29wQ291bnQocHJpbWl0aXZlVmFsdWUuZ2V0SW50VmFsdWUoKSk7CiAg
ICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpA
QCAtMTQwMCwxMSArMTQwMCwxMSBAQCBjbGFzcyBBcHBseVByb3BlcnR5TWFycXVlZVNwZWVkIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVl
KTsKLSAgICAgICAgaWYgKENTU1ZhbHVlSUQgaWRlbnQgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFs
dWVJRCgpKSB7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgICAgICBpZiAoQ1NTVmFsdWVJ
RCBpZGVudCA9IHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSkgewogICAgICAgICAgICAgc3dp
dGNoIChpZGVudCkgewogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNsb3c6CiAgICAgICAgICAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKDUwMCk7IC8vIDUw
MCBtc2VjLgpAQCAtMTQxOCwxMCArMTQxOCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1RpbWUoKSkKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZVRpbWU8
aW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6TWlsbGlzZWNvbmRzPigpKTsKLSAgICAgICAgZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIC8vIEZvciBzY3JvbGxhbW91bnQgc3VwcG9y
dC4KLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZChw
cmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0
aXZlVmFsdWUuaXNUaW1lKCkpCisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5z
ZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUuY29tcHV0ZVRpbWU8aW50LCBDU1NQcmltaXRp
dmVWYWx1ZTo6TWlsbGlzZWNvbmRzPigpKTsKKyAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUuaXNOdW1iZXIoKSkgLy8gRm9yIHNjcm9sbGFtb3VudCBzdXBwb3J0LgorICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLmdl
dEludFZhbHVlKCkpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhh
bmRsZXIoKQogICAgIHsKQEAgLTE0MzUsOCArMTQzNSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIC8vIFRoaXMgaXMgdHJ1ZSBpZiB2
YWx1ZSBpcyAnYXV0bycgb3IgJ2FscGhhYmV0aWMnLgotICAgICAgICBpZiAodmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSkgewotICAgICAgICAgICAgVGV4dFVuZGVybGluZVBvc2l0aW9uIHQgPSAq
dG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKSkgeworICAgICAgICAgICAgVGV4dFVuZGVybGluZVBvc2l0aW9uIHQgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKICAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPnNldFRleHRVbmRlcmxpbmVQb3NpdGlvbih0KTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQpAQCAtMTQ0NCw4ICsxNDQ0LDggQEAgcHVibGljOgogICAgICAg
ICB1bnNpZ25lZCB0ID0gMDsKICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpKHZh
bHVlKTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7CiAgICAgICAgICAgICBDU1NWYWx1ZSog
aXRlbSA9IGkudmFsdWUoKTsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKGl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgICAgICBUZXh0VW5kZXJs
aW5lUG9zaXRpb24gdDIgPSAqdG9DU1NQcmltaXRpdmVWYWx1ZShpdGVtKTsKKyAgICAgICAgICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlzPENTU1ByaW1pdGl2ZVZhbHVlPihp
dGVtKSk7CisgICAgICAgICAgICBUZXh0VW5kZXJsaW5lUG9zaXRpb24gdDIgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pOwogICAgICAgICAgICAgdCB8PSB0MjsKICAgICAgICAg
fQogICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0VW5kZXJsaW5lUG9zaXRp
b24oc3RhdGljX2Nhc3Q8VGV4dFVuZGVybGluZVBvc2l0aW9uPih0KSk7CkBAIC0xNDYxLDIyICsx
NDYxLDIyIEBAIGNsYXNzIEFwcGx5UHJvcGVydHlMaW5lSGVpZ2h0IHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSk7CiAgICAgICAgIExlbmd0aCBsaW5lSGVpZ2h0OwogCi0gICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKQorICAgICAgICBp
ZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAg
ICAgICAgbGluZUhlaWdodCA9IFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpOwotICAg
ICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewotICAgICAgICAgICAg
bGluZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY3NzdG9M
ZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3Rvcigqc3R5bGVSZXNvbHZlcikpOwot
ICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkgeworICAg
ICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7CisgICAgICAgICAgICBs
aW5lSGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNzc3RvTGVu
Z3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoKnN0eWxlUmVzb2x2ZXIpKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSkgewogICAgICAg
ICAgICAgLy8gRklYTUU6IHBlcmNlbnRhZ2Ugc2hvdWxkIG5vdCBiZSByZXN0cmljdGVkIHRvIGFu
IGludGVnZXIgaGVyZS4KLSAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgoKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPmNvbXB1dGVkRm9udFNpemUoKSAqIHByaW1pdGl2ZVZhbHVlLT5nZXRJ
bnRWYWx1ZSgpKSAvIDEwMCwgRml4ZWQpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc051bWJlcigpKSB7CisgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKChzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5jb21wdXRlZEZvbnRTaXplKCkgKiBwcmltaXRpdmVWYWx1ZS5n
ZXRJbnRWYWx1ZSgpKSAvIDEwMCwgRml4ZWQpOworICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2
ZVZhbHVlLmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBudW1iZXIgYW5kIHBl
cmNlbnRhZ2UgdmFsdWVzIHNob3VsZCBwcm9kdWNlIHRoZSBzYW1lIHR5cGUgb2YgTGVuZ3RoIChp
ZS4gRml4ZWQgb3IgUGVyY2VudCkuCi0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKHBy
aW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpICogMTAwLjAsIFBlcmNlbnQpOworICAgICAg
ICAgICAgbGluZUhlaWdodCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS5nZXREb3VibGVWYWx1ZSgp
ICogMTAwLjAsIFBlcmNlbnQpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TGluZUhlaWdodChsaW5lSGVpZ2h0
KTsKQEAgLTE0OTQsMjcgKzE0OTQsMjcgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eUxpbmVIZWlnaHRG
b3JJT1NUZXh0QXV0b3NpemluZyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisg
ICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9D
U1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmlt
aXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogICAgICAg
ICBMZW5ndGggbGluZUhlaWdodDsKIAotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZh
bHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdl
dFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkKICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBS
ZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKTsKLSAgICAgICAgZWxzZSBpZiAocHJpbWl0
aXZlVmFsdWUtPmlzTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBwcmltaXRp
dmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFX
aXRoVGV4dFpvb21GYWN0b3IoKnN0eWxlUmVzb2x2ZXIpKTsKKyAgICAgICAgZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkgeworICAgICAgICAgICAgbGluZUhlaWdodCA9IHByaW1p
dGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRh
V2l0aFRleHRab29tRmFjdG9yKCpzdHlsZVJlc29sdmVyKSk7CiAgICAgICAgICAgICBpZiAoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+dGV4dFNpemVBZGp1c3QoKS5pc1BlcmNlbnRhZ2UoKSkKICAg
ICAgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKGxpbmVIZWlnaHQudmFsdWUoKSAqIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnRleHRTaXplQWRqdXN0KCkubXVsdGlwbGllcigpLCBGaXhl
ZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKSB7
CisgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkpIHsKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBwZXJjZW50YWdlIHNob3VsZCBub3QgYmUgcmVzdHJpY3RlZCB0
byBhbiBpbnRlZ2VyIGhlcmUuCi0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKChzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5mb250U2l6ZSgpICogcHJpbWl0aXZlVmFsdWUtPmdldEludFZh
bHVlKCkpIC8gMTAwLCBGaXhlZCk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUt
PmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgoKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPmZvbnRTaXplKCkgKiBwcmltaXRpdmVWYWx1ZS5nZXRJbnRWYWx1ZSgp
KSAvIDEwMCwgRml4ZWQpOworICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTnVt
YmVyKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBudW1iZXIgYW5kIHBlcmNlbnRhZ2UgdmFs
dWVzIHNob3VsZCBwcm9kdWNlIHRoZSBzYW1lIHR5cGUgb2YgTGVuZ3RoIChpZS4gRml4ZWQgb3Ig
UGVyY2VudCkuCiAgICAgICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+dGV4dFNp
emVBZGp1c3QoKS5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0ID0g
TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpICogc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+dGV4dFNpemVBZGp1c3QoKS5tdWx0aXBsaWVyKCkgKiAxMDAuMCwgUGVyY2VudCk7
CisgICAgICAgICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS5nZXRE
b3VibGVWYWx1ZSgpICogc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+dGV4dFNpemVBZGp1c3QoKS5t
dWx0aXBsaWVyKCkgKiAxMDAuMCwgUGVyY2VudCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFs
dWUoKSAqIDEwMC4wLCBQZXJjZW50KTsKKyAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVu
Z3RoKHByaW1pdGl2ZVZhbHVlLmdldERvdWJsZVZhbHVlKCkgKiAxMDAuMCwgUGVyY2VudCk7CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KGxpbmVIZWlnaHQpOwpAQCAtMTU0NCwyMCArMTU0NCwy
MCBAQCBjbGFzcyBBcHBseVByb3BlcnR5V29yZFNwYWNpbmcgewogcHVibGljOgogICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUp
KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmlt
aXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOworICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
KnZhbHVlKTsKICAgICAgICAgTGVuZ3RoIHdvcmRTcGFjaW5nOwogCi0gICAgICAgIGlmIChwcmlt
aXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKQorICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICAg
ICAgd29yZFNwYWNpbmcgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFdvcmRTcGFjaW5nKCk7Ci0gICAg
ICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7Ci0gICAgICAgICAgICB3
b3JkU3BhY2luZyA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY3NzdG9M
ZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3Rvcigqc3R5bGVSZXNvbHZlcikpOwot
ICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAg
ICAgICAgIHdvcmRTcGFjaW5nID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1
ZSgpLCBQZXJjZW50KTsKLSAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVy
KCkpCi0gICAgICAgICAgICB3b3JkU3BhY2luZyA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0
RG91YmxlVmFsdWUoKSwgRml4ZWQpOworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5p
c0xlbmd0aCgpKSB7CisgICAgICAgICAgICB3b3JkU3BhY2luZyA9IHByaW1pdGl2ZVZhbHVlLmNv
bXB1dGVMZW5ndGg8TGVuZ3RoPihjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29t
RmFjdG9yKCpzdHlsZVJlc29sdmVyKSk7CisgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUuaXNQZXJjZW50YWdlKCkpCisgICAgICAgICAgICB3b3JkU3BhY2luZyA9IExlbmd0aChwcmlt
aXRpdmVWYWx1ZS5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKKyAgICAgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgIHdvcmRTcGFjaW5nID0gTGVu
Z3RoKHByaW1pdGl2ZVZhbHVlLmdldERvdWJsZVZhbHVlKCksIEZpeGVkKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5z
ZXRXb3JkU3BhY2luZyh3b3JkU3BhY2luZyk7CkBAIC0xNjY3LDIxICsxNjY3LDIxIEBAIHB1Ymxp
YzoKICAgICAgICAgc3dpdGNoIChpbnNwZWN0b3IubGVuZ3RoKCkpIHsKICAgICAgICAgY2FzZSAy
OiB7CiAgICAgICAgICAgICAvLyA8bGVuZ3RoPnsyfSB8IDxwYWdlLXNpemU+IDxvcmllbnRhdGlv
bj4KLSAgICAgICAgICAgIGlmICghaW5zcGVjdG9yLmZpcnN0KCktPmlzUHJpbWl0aXZlVmFsdWUo
KSB8fCAhaW5zcGVjdG9yLnNlY29uZCgpLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAg
ICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaW5zcGVjdG9yLmZpcnN0KCkpIHx8ICFpczxD
U1NQcmltaXRpdmVWYWx1ZT4oKmluc3BlY3Rvci5zZWNvbmQoKSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0ID0gdG9DU1NQcmlt
aXRpdmVWYWx1ZShpbnNwZWN0b3IuZmlyc3QoKSk7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogc2Vjb25kID0gdG9DU1NQcmltaXRpdmVWYWx1ZShpbnNwZWN0b3Iuc2Vjb25kKCkpOwot
ICAgICAgICAgICAgaWYgKGZpcnN0LT5pc0xlbmd0aCgpKSB7CisgICAgICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSYgZmlyc3QgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmluc3BlY3Rv
ci5maXJzdCgpKTsKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBzZWNvbmQgPSBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmluc3BlY3Rvci5zZWNvbmQoKSk7CisgICAgICAgICAg
ICBpZiAoZmlyc3QuaXNMZW5ndGgoKSkgewogICAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+ezJ9
Ci0gICAgICAgICAgICAgICAgaWYgKCFzZWNvbmQtPmlzTGVuZ3RoKCkpCisgICAgICAgICAgICAg
ICAgaWYgKCFzZWNvbmQuaXNMZW5ndGgoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEg
PSBzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5
V2l0aEFkanVzdGVkWm9vbSgxLjBmKTsKLSAgICAgICAgICAgICAgICB3aWR0aCA9IGZpcnN0LT5j
b21wdXRlTGVuZ3RoPExlbmd0aD4oY29udmVyc2lvbkRhdGEpOwotICAgICAgICAgICAgICAgIGhl
aWdodCA9IHNlY29uZC0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKKyAg
ICAgICAgICAgICAgICB3aWR0aCA9IGZpcnN0LmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJz
aW9uRGF0YSk7CisgICAgICAgICAgICAgICAgaGVpZ2h0ID0gc2Vjb25kLmNvbXB1dGVMZW5ndGg8
TGVuZ3RoPihjb252ZXJzaW9uRGF0YSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIC8vIDxwYWdlLXNpemU+IDxvcmllbnRhdGlvbj4KICAgICAgICAgICAgICAgICAvLyBU
aGUgdmFsdWUgb3JkZXIgaXMgZ3VhcmFudGVlZC4gU2VlIENTU1BhcnNlcjo6cGFyc2VTaXplUGFy
YW1ldGVyLgotICAgICAgICAgICAgICAgIGlmICghZ2V0UGFnZVNpemVGcm9tTmFtZShmaXJzdCwg
c2Vjb25kLCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgICAgICAgICBpZiAoIWdldFBhZ2VTaXpl
RnJvbU5hbWUoJmZpcnN0LCAmc2Vjb25kLCB3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcGFnZVNpemVUeXBlID0g
UEFHRV9TSVpFX1JFU09MVkVEOwpAQCAtMTY4OSwxNSArMTY4OSwxNSBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSAxOiB7CiAgICAgICAgICAgICAvLyA8bGVuZ3RoPiB8IGF1dG8g
fCA8cGFnZS1zaXplPiB8IFsgcG9ydHJhaXQgfCBsYW5kc2NhcGVdCi0gICAgICAgICAgICBpZiAo
IWluc3BlY3Rvci5maXJzdCgpLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICBpZiAo
IWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaW5zcGVjdG9yLmZpcnN0KCkpKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoaW5zcGVjdG9yLmZpcnN0KCkpOwotICAgICAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7CisgICAgICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmlu
c3BlY3Rvci5maXJzdCgpKTsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0
aCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gPGxlbmd0aD4KICAgICAgICAgICAgICAgICBwYWdl
U2l6ZVR5cGUgPSBQQUdFX1NJWkVfUkVTT0xWRUQ7Ci0gICAgICAgICAgICAgICAgd2lkdGggPSBo
ZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlUmVzb2x2
ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRa
b29tKDEuMGYpKTsKKyAgICAgICAgICAgICAgICB3aWR0aCA9IGhlaWdodCA9IHByaW1pdGl2ZVZh
bHVlLmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSk7CiAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdl
dFZhbHVlSUQoKSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUuZ2V0
VmFsdWVJRCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUF1dG86CkBAIC0xNzEyLDcg
KzE3MTIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
ICAgICAgICAgLy8gPHBhZ2Utc2l6ZT4KICAgICAgICAgICAgICAgICAgICAgcGFnZVNpemVUeXBl
ID0gUEFHRV9TSVpFX1JFU09MVkVEOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWdldFBhZ2VT
aXplRnJvbU5hbWUocHJpbWl0aXZlVmFsdWUsIDAsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAg
ICAgICAgICAgICBpZiAoIWdldFBhZ2VTaXplRnJvbU5hbWUoJnByaW1pdGl2ZVZhbHVlLCBudWxs
cHRyLCB3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xNzQ1LDQ1ICsxNzQ1LDQ1IEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAg
aWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIGxp
c3QgPSB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSk7Ci0gICAgICAgICAgICBBU1NFUlQobGlzdC0+bGVu
Z3RoKCkgPT0gMik7Ci0gICAgICAgICAgICBpZiAobGlzdC0+bGVuZ3RoKCkgIT0gMikKKyAgICAg
ICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkgeworICAgICAgICAgICAgQ1NTVmFsdWVM
aXN0JiBsaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpOworICAgICAgICAgICAg
QVNTRVJUKGxpc3QubGVuZ3RoKCkgPT0gMik7CisgICAgICAgICAgICBpZiAobGlzdC5sZW5ndGgo
KSAhPSAyKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCAyOyArK2kpIHsKLSAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9
IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFp
dGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0g
PSBsaXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CisgICAgICAgICAgICAgICAgaWYgKCFp
czxDU1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSA9IHRvQ1NTUHJp
bWl0aXZlVmFsdWUoaXRlbSk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5nZXRWYWx1ZUlE
KCkgPT0gQ1NTVmFsdWVGaWxsZWQgfHwgdmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU9w
ZW4pCi0gICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRF
bXBoYXNpc0ZpbGwoKnZhbHVlKTsKKyAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYg
dmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pOworICAgICAgICAgICAg
ICAgIGlmICh2YWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVGaWxsZWQgfHwgdmFsdWUuZ2V0
VmFsdWVJRCgpID09IENTU1ZhbHVlT3BlbikKKyAgICAgICAgICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbCh2YWx1ZSk7CiAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRU
ZXh0RW1waGFzaXNNYXJrKCp2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsodmFsdWUpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9t
TWFyayhudWxsQXRvbSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUp
OworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKIAotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUt
PmlzU3RyaW5nKCkpIHsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzU3RyaW5nKCkpIHsK
ICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwo
VGV4dEVtcGhhc2lzRmlsbEZpbGxlZCk7CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFRleHRFbXBoYXNpc01hcmtDdXN0b20pOwotICAgICAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhw
cmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7CisgICAgICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHByaW1pdGl2ZVZhbHVlLmdl
dFN0cmluZ1ZhbHVlKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhudWxs
QXRvbSk7CiAKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NT
VmFsdWVGaWxsZWQgfHwgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU9w
ZW4pIHsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNp
c0ZpbGwoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZh
bHVlSUQoKSA9PSBDU1NWYWx1ZUZpbGxlZCB8fCBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkg
PT0gQ1NTVmFsdWVPcGVuKSB7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5z
ZXRUZXh0RW1waGFzaXNGaWxsKHByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVtcGhhc2lzTWFya0F1dG8p
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0VGV4dEVtcGhhc2lzRmlsbChUZXh0RW1waGFzaXNGaWxsRmlsbGVkKTsKLSAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoKnByaW1pdGl2ZVZh
bHVlKTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNp
c01hcmsocHJpbWl0aXZlVmFsdWUpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xODE1LDE0ICsx
ODE1LDE0IEBAIGNsYXNzIEFwcGx5UHJvcGVydHlUZXh0RW1waGFzaXNQb3NpdGlvbiB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAo
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzUG9zaXRpb24odmFsdWVUb0VtcGhhc2lzUG9zaXRpb24o
KnRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpKSk7CisgICAgICAgIGlmIChpczxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0VGV4dEVtcGhhc2lzUG9zaXRpb24odmFsdWVUb0VtcGhhc2lzUG9zaXRpb24oZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCiAgICAgICAgIFRleHRFbXBoYXNpc1Bvc2l0aW9uIHBvc2l0aW9uID0gMDsKICAgICAg
ICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpKHZhbHVlKTsgaS5oYXNNb3JlKCk7IGkuYWR2
YW5jZSgpKQotICAgICAgICAgICAgcG9zaXRpb24gfD0gdmFsdWVUb0VtcGhhc2lzUG9zaXRpb24o
KnRvQ1NTUHJpbWl0aXZlVmFsdWUoaS52YWx1ZSgpKSk7CisgICAgICAgICAgICBwb3NpdGlvbiB8
PSB2YWx1ZVRvRW1waGFzaXNQb3NpdGlvbihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmku
dmFsdWUoKSkpOwogICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFz
aXNQb3NpdGlvbihwb3NpdGlvbik7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIg
Y3JlYXRlSGFuZGxlcigpCkBAIC0xOTM1LDEzICsxOTM1LDEzIEBAIGNsYXNzIEFwcGx5UHJvcGVy
dHlSZXNpemUgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
IHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAo
IWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZl
VmFsdWUodmFsdWUpOworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKIAogICAgICAgICBFUmVzaXpl
IHIgPSBSRVNJWkVfTk9ORTsKLSAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFs
dWVJRCgpKSB7CisgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpKSB7
CiAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBDU1NW
YWx1ZUF1dG86CkBAIC0xOTQ5LDcgKzE5NDksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ciA9IHNldHRpbmdzLT50ZXh0QXJlYXNBcmVSZXNpemFibGUoKSA/IFJFU0laRV9CT1RIIDogUkVT
SVpFX05PTkU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHIgPSAqcHJpbWl0aXZlVmFsdWU7CisgICAgICAgICAgICByID0gcHJpbWl0aXZlVmFsdWU7
CiAgICAgICAgIH0KICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0UmVzaXplKHIp
OwogICAgIH0KQEAgLTE5NjUsMTUgKzE5NjUsMTUgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eVZlcnRp
Y2FsQWxpZ24gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
IHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAo
IWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZl
VmFsdWUodmFsdWUpOworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKIAotICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSkKLSAgICAgICAgICAgIHJldHVybiBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFsaWduKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpCisgICAgICAgICAgICByZXR1cm4gc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbihwcmltaXRpdmVWYWx1ZSk7CiAK
LSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbkxlbmd0aChw
cmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQ
ZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdHlsZVJlc29sdmVyLT5z
dGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSkpOworICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFsaWduTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLmNvbnZl
cnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBD
YWxjdWxhdGVkQ29udmVyc2lvbj4oc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENv
bnZlcnNpb25EYXRhKCkpKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNy
ZWF0ZUhhbmRsZXIoKQpAQCAtMjAwMywyNiArMjAwMywyNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgaWYgKGlzPENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpKSB7CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYg
cHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKIAot
ICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVB
dXRvKQorICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NW
YWx1ZUF1dG8pCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldEFzcGVjdFJhdGlvVHlwZShBc3BlY3RSYXRpb0F1dG8pOwotICAgICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVGcm9tRGltZW5zaW9ucykKKyAg
ICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVGcm9t
RGltZW5zaW9ucykKICAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0QXNwZWN0UmF0aW9UeXBlKEFzcGVjdFJhdGlvRnJvbURpbWVuc2lvbnMpOwotICAgICAg
ICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVGcm9tSW50
cmluc2ljKQorICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBD
U1NWYWx1ZUZyb21JbnRyaW5zaWMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvVHlwZShBc3BlY3RSYXRpb0Zyb21JbnRyaW5zaWMp
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNBc3BlY3RSYXRpb1ZhbHVlKCkp
IHsKKyAgICAgICAgaWYgKCFpczxDU1NBc3BlY3RSYXRpb1ZhbHVlPigqdmFsdWUpKSB7CiAgICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb1R5cGUoQXNwZWN0
UmF0aW9BdXRvKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIENT
U0FzcGVjdFJhdGlvVmFsdWUqIGFzcGVjdFJhdGlvVmFsdWUgPSB0b0NTU0FzcGVjdFJhdGlvVmFs
dWUodmFsdWUpOworICAgICAgICBDU1NBc3BlY3RSYXRpb1ZhbHVlJiBhc3BlY3RSYXRpb1ZhbHVl
ID0gZG93bmNhc3Q8Q1NTQXNwZWN0UmF0aW9WYWx1ZT4oKnZhbHVlKTsKICAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9UeXBlKEFzcGVjdFJhdGlvU3BlY2lmaWVk
KTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWlu
YXRvcihhc3BlY3RSYXRpb1ZhbHVlLT5kZW5vbWluYXRvclZhbHVlKCkpOwotICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihhc3BlY3RSYXRpb1Zh
bHVlLT5udW1lcmF0b3JWYWx1ZSgpKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihhc3BlY3RSYXRpb1ZhbHVlLmRlbm9taW5hdG9yVmFs
dWUoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvTnVt
ZXJhdG9yKGFzcGVjdFJhdGlvVmFsdWUubnVtZXJhdG9yVmFsdWUoKSk7CiAgICAgfQogCiAgICAg
c3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTIwNTQsMjYgKzIwNTQs
MjYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewot
ICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTih2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKTsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
dG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOworICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKTsKIAotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9
PSBDU1NWYWx1ZU5vcm1hbCkgeworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJ
RCgpID09IENTU1ZhbHVlTm9ybWFsKSB7CiAgICAgICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20o
c3R5bGVSZXNvbHZlcik7CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKFJlbmRl
clN0eWxlOjppbml0aWFsWm9vbSgpKTsKLSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlUmVzZXQpIHsKKyAgICAgICAgfSBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVSZXNldCkgewogICAgICAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c2V0RWZmZWN0aXZlWm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpv
b20oKSk7CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKFJlbmRlclN0eWxlOjpp
bml0aWFsWm9vbSgpKTsKLSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFs
dWVJRCgpID09IENTU1ZhbHVlRG9jdW1lbnQpIHsKKyAgICAgICAgfSBlbHNlIGlmIChwcmltaXRp
dmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVEb2N1bWVudCkgewogICAgICAgICAgICAg
ZmxvYXQgZG9jWm9vbSA9IHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSA/IHN0eWxl
UmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKS0+em9vbSgpIDogUmVuZGVyU3R5bGU6OmluaXRp
YWxab29tKCk7CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRFZmZlY3RpdmVab29tKGRv
Y1pvb20pOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9vbShkb2Nab29tKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpIHsKKyAgICAg
ICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSkgewogICAgICAgICAg
ICAgcmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICAgICAgaWYgKGZs
b2F0IHBlcmNlbnQgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKQorICAgICAgICAg
ICAgaWYgKGZsb2F0IHBlcmNlbnQgPSBwcmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKCkpCiAg
ICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9vbShwZXJjZW50IC8gMTAwLjBmKTsK
LSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgeworICAgICAg
ICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIHJl
c2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKLSAgICAgICAgICAgIGlmIChmbG9hdCBu
dW1iZXIgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKQorICAgICAgICAgICAgaWYg
KGZsb2F0IG51bWJlciA9IHByaW1pdGl2ZVZhbHVlLmdldEZsb2F0VmFsdWUoKSkKICAgICAgICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKG51bWJlcik7CiAgICAgICAgIH0KICAgICB9
CkBAIC0yMTA4LDEwICsyMTA4LDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAg
ICAgcmV0dXJuOwogCi0gICAgICAgIEVEaXNwbGF5IGRpc3BsYXkgPSAqdG9DU1NQcmltaXRpdmVW
YWx1ZSh2YWx1ZSk7CisgICAgICAgIEVEaXNwbGF5IGRpc3BsYXkgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnZhbHVlKTsKIAogICAgICAgICBpZiAoIWlzVmFsaWREaXNwbGF5VmFsdWUo
c3R5bGVSZXNvbHZlciwgZGlzcGxheSkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0yMTMxLDgg
KzIxMzEsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUq
IHN0eWxlLCBQYXNzUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiB2YWx1ZSkgeyAoc3R5bGUtPipz
ZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgewotICAgICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAg
ICAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSk7
CisgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICAg
ICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKTsKICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NT
VmFsdWVOb25lKQogICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCksIDApOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUucHJpbWl0aXZlVHlw
ZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CkBAIC0yMTQzLDEzICsyMTQzLDEz
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICBpZiAoIWlzPENT
U1ZhbHVlTGlzdD4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgQ1NTQm94
VHlwZSByZWZlcmVuY2VCb3ggPSBCb3hNaXNzaW5nOwogICAgICAgICBSZWZQdHI8Q2xpcFBhdGhP
cGVyYXRpb24+IG9wZXJhdGlvbjsKLSAgICAgICAgYXV0byYgdmFsdWVMaXN0ID0gdG9DU1NWYWx1
ZUxpc3QoKnZhbHVlKTsKKyAgICAgICAgYXV0byYgdmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFs
dWVMaXN0PigqdmFsdWUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVM
aXN0Lmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0g
dG9DU1NQcmltaXRpdmVWYWx1ZSgqdmFsdWVMaXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkp
OworICAgICAgICAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlTGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKICAgICAgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1NoYXBlKCkgJiYgIW9wZXJhdGlvbikKICAgICAgICAg
ICAgICAgICBvcGVyYXRpb24gPSBTaGFwZUNsaXBQYXRoT3BlcmF0aW9uOjpjcmVhdGUoYmFzaWNT
aGFwZUZvclZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSgpLCBwcmltaXRpdmVWYWx1ZS5nZXRTaGFwZVZhbHVlKCkpKTsKICAgICAgICAgICAgIGVs
c2UgaWYgKChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVDb250ZW50Qm94
CkBAIC0yMTg2LDI2ICsyMTg2LDI2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1
ZShSZW5kZXJTdHlsZSogc3R5bGUsIFBhc3NSZWZQdHI8U2hhcGVWYWx1ZT4gdmFsdWUpIHsgKHN0
eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZh
bHVlKCkpIHsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9
IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICBpZiAoaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBw
cmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAg
ICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8p
CiAgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgMCk7CiAg
ICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlzSW1hZ2VWYWx1ZSgpIHx8IHZhbHVlLT5pc0ltYWdl
R2VuZXJhdG9yVmFsdWUoKSB8fCB2YWx1ZS0+aXNJbWFnZVNldFZhbHVlKCkpIHsKICAgICAgICAg
ICAgIFJlZlB0cjxTaGFwZVZhbHVlPiBzaGFwZSA9IFNoYXBlVmFsdWU6OmNyZWF0ZUltYWdlVmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShwcm9wZXJ0eSwgdmFsdWUpKTsKICAgICAgICAg
ICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHNoYXBlLnJlbGVhc2UoKSk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKKyAgICAgICAgfSBlbHNl
IGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpIHsKICAgICAgICAgICAgIFJlZlB0cjxCYXNp
Y1NoYXBlPiBzaGFwZTsKICAgICAgICAgICAgIENTU0JveFR5cGUgcmVmZXJlbmNlQm94ID0gQm94
TWlzc2luZzsKLSAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogdmFsdWVMaXN0ID0gdG9DU1NWYWx1
ZUxpc3QodmFsdWUpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVl
TGlzdC0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWVMaXN0LT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKGkpKTsKLSAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUt
PmlzU2hhcGUoKSkKLSAgICAgICAgICAgICAgICAgICAgc2hhcGUgPSBiYXNpY1NoYXBlRm9yVmFs
dWUoc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCksIHBy
aW1pdGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVDb250ZW50Qm94Ci0gICAg
ICAgICAgICAgICAgICAgIHx8IHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFs
dWVCb3JkZXJCb3gKLSAgICAgICAgICAgICAgICAgICAgfHwgcHJpbWl0aXZlVmFsdWUtPmdldFZh
bHVlSUQoKSA9PSBDU1NWYWx1ZVBhZGRpbmdCb3gKLSAgICAgICAgICAgICAgICAgICAgfHwgcHJp
bWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU1hcmdpbkJveCkKLSAgICAgICAg
ICAgICAgICAgICAgcmVmZXJlbmNlQm94ID0gQ1NTQm94VHlwZSgqcHJpbWl0aXZlVmFsdWUpOwor
ICAgICAgICAgICAgQ1NTVmFsdWVMaXN0JiB2YWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxp
c3Q+KCp2YWx1ZSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVM
aXN0Lmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYg
cHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlTGlzdC5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKKyAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUuaXNTaGFwZSgpKQorICAgICAgICAgICAgICAgICAgICBzaGFwZSA9IGJhc2ljU2hhcGVG
b3JWYWx1ZShzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEo
KSwgcHJpbWl0aXZlVmFsdWUuZ2V0U2hhcGVWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVDb250ZW50Qm94Cisg
ICAgICAgICAgICAgICAgICAgIHx8IHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NW
YWx1ZUJvcmRlckJveAorICAgICAgICAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS5nZXRW
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVQYWRkaW5nQm94CisgICAgICAgICAgICAgICAgICAgIHx8IHBy
aW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU1hcmdpbkJveCkKKyAgICAgICAg
ICAgICAgICAgICAgcmVmZXJlbmNlQm94ID0gQ1NTQm94VHlwZShwcmltaXRpdmVWYWx1ZSk7CiAg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CkBAIC0yMjQ1LDIzICsyMjQ1LDIzIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3Qo
KSkKKyAgICAgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIENTU1ZhbHVlTGlzdCogdmFsdWVMaXN0ID0gdG9DU1NWYWx1ZUxpc3Qo
dmFsdWUpOworICAgICAgICBDU1NWYWx1ZUxpc3QmIHZhbHVlTGlzdCA9IGRvd25jYXN0PENTU1Zh
bHVlTGlzdD4oKnZhbHVlKTsKICAgICAgICAgSW1hZ2VSZXNvbHV0aW9uU291cmNlIHNvdXJjZSA9
IFJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlKCk7CiAgICAgICAgIElt
YWdlUmVzb2x1dGlvblNuYXAgc25hcCA9IFJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0
aW9uU25hcCgpOwogICAgICAgICBkb3VibGUgcmVzb2x1dGlvbiA9IFJlbmRlclN0eWxlOjppbml0
aWFsSW1hZ2VSZXNvbHV0aW9uKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFs
dWVMaXN0LT5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IHZh
bHVlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKLSAgICAgICAgICAgIGlmICghaXRl
bS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZh
bHVlTGlzdC5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IHZh
bHVlTGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAgICAgaWYgKCFpczxD
U1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRp
dmVWYWx1ZShpdGVtKTsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJ
RCgpID09IENTU1ZhbHVlRnJvbUltYWdlKQorICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUm
IHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKTsKKyAg
ICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVGcm9t
SW1hZ2UpCiAgICAgICAgICAgICAgICAgc291cmNlID0gSW1hZ2VSZXNvbHV0aW9uRnJvbUltYWdl
OwotICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBD
U1NWYWx1ZVNuYXApCisgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1
ZUlEKCkgPT0gQ1NTVmFsdWVTbmFwKQogICAgICAgICAgICAgICAgIHNuYXAgPSBJbWFnZVJlc29s
dXRpb25TbmFwUGl4ZWxzOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc29s
dXRpb24gPSBwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19EUFBYKTsKKyAgICAgICAgICAgICAgICByZXNvbHV0aW9uID0gcHJpbWl0aXZlVmFsdWUu
Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUFBYKTsKICAgICAgICAgfQog
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25Tb3VyY2Uo
c291cmNlKTsKICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0
aW9uU25hcChzbmFwKTsKQEAgLTIyOTcsNyArMjI5Nyw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1
ZUxpc3QoKSkKKyAgICAgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgTGVuZ3RoIGxlbmd0aE9yUGVyY2VudGFnZVZhbHVlOwpA
QCAtMjMwNSwxOSArMjMwNSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIFRleHRJbmRlbnRMaW5lIHRl
eHRJbmRlbnRMaW5lVmFsdWUgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRJbmRlbnRMaW5lKCk7
CiAgICAgICAgIFRleHRJbmRlbnRUeXBlIHRleHRJbmRlbnRUeXBlVmFsdWUgPSBSZW5kZXJTdHls
ZTo6aW5pdGlhbFRleHRJbmRlbnRUeXBlKCk7CiAjZW5kaWYKLSAgICAgICAgQ1NTVmFsdWVMaXN0
KiB2YWx1ZUxpc3QgPSB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdmFsdWVMaXN0LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBDU1NW
YWx1ZSogaXRlbSA9IHZhbHVlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKLSAgICAg
ICAgICAgIGlmICghaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBDU1NWYWx1ZUxp
c3QmIHZhbHVlTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZUxpc3QubGVuZ3RoKCk7ICsraSkgeworICAgICAg
ICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSB2YWx1ZUxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhp
KTsKKyAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZShpdGVtKTsKLSAgICAgICAgICAgIGlm
ICghcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSkKLSAgICAgICAgICAgICAgICBsZW5ndGhP
clBlcmNlbnRhZ2VWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJ
bnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNp
b24+KHN0eWxlUmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsK
KyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSk7CisgICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZh
bHVlLmdldFZhbHVlSUQoKSkKKyAgICAgICAgICAgICAgICBsZW5ndGhPclBlcmNlbnRhZ2VWYWx1
ZSA9IHByaW1pdGl2ZVZhbHVlLmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9u
IHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3R5bGVSZXNvbHZl
ci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwogI2lmIEVOQUJMRShDU1Mz
X1RFWFQpCi0gICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgp
ID09IENTU1ZhbHVlV2Via2l0RWFjaExpbmUpCisgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRp
dmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRFYWNoTGluZSkKICAgICAgICAg
ICAgICAgICB0ZXh0SW5kZW50TGluZVZhbHVlID0gVGV4dEluZGVudEVhY2hMaW5lOwotICAgICAg
ICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdl
YmtpdEhhbmdpbmcpCisgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1
ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRIYW5naW5nKQogICAgICAgICAgICAgICAgIHRleHRJbmRl
bnRUeXBlVmFsdWUgPSBUZXh0SW5kZW50SGFuZ2luZzsKICNlbmRpZgogICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9NZWRpYUxpc3QuY3BwCmluZGV4IDk0NDUwODYzZjFiOTNhYzZhNzM1ODk2YjJjYTkyYjFm
ZmJkZWE0YWYuLmVlNjY3MTIwNDI0MjYwZThkYjM1ZjUyMjhhM2U0NWVhYzEzMjMyMDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9NZWRpYUxpc3QuY3BwCkBAIC0zMzIsMTAgKzMzMiwxMCBAQCB2b2lkIHJlcG9ydE1l
ZGlhUXVlcnlXYXJuaW5nSWZOZWVkZWQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBNZWRpYVF1
ZXJ5U2V0KiBtZQogICAgICAgICAgICAgICAgIGNvbnN0IE1lZGlhUXVlcnlFeHAqIGV4cCA9IGV4
cHJlc3Npb25zLmF0KGopLmdldCgpOwogICAgICAgICAgICAgICAgIGlmIChleHAtPm1lZGlhRmVh
dHVyZSgpID09IE1lZGlhRmVhdHVyZU5hbWVzOjpyZXNvbHV0aW9uTWVkaWFGZWF0dXJlIHx8IGV4
cC0+bWVkaWFGZWF0dXJlKCkgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heF9yZXNvbHV0aW9uTWVk
aWFGZWF0dXJlIHx8IGV4cC0+bWVkaWFGZWF0dXJlKCkgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1p
bl9yZXNvbHV0aW9uTWVkaWFGZWF0dXJlKSB7CiAgICAgICAgICAgICAgICAgICAgIENTU1ZhbHVl
KiBjc3NWYWx1ZSA9ICBleHAtPnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjc3NW
YWx1ZSAmJiBjc3NWYWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2
ZVZhbHVlKGNzc1ZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVW
YWx1ZS0+aXNEb3RzUGVySW5jaCgpIHx8IHByaW1pdGl2ZVZhbHVlLT5pc0RvdHNQZXJDZW50aW1l
dGVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUmVzb2x1dGlvbldhcm5pbmdN
ZXNzYWdlVG9Db25zb2xlKGRvY3VtZW50LCBtZWRpYVF1ZXJ5U2V0LT5tZWRpYVRleHQoKSwgcHJp
bWl0aXZlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KGNzc1ZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpjc3NWYWx1
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNEb3RzUGVy
SW5jaCgpIHx8IHByaW1pdGl2ZVZhbHVlLmlzRG90c1BlckNlbnRpbWV0ZXIoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhZGRSZXNvbHV0aW9uV2FybmluZ01lc3NhZ2VUb0NvbnNvbGUo
ZG9jdW1lbnQsIG1lZGlhUXVlcnlTZXQtPm1lZGlhVGV4dCgpLCAmcHJpbWl0aXZlVmFsdWUpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCmluZGV4IGUxOGI5MTE0
MDVmYTY3ZDhiZjY2ZTExMTc5YjE1YmRiYTZiZDQ0NWYuLjE2MmM1OGVlYjBhNzI4OWJiMjg3ZDFk
ZmY1ZjA0MDRmNGIzZmNjMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1
ZXJ5RXZhbHVhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1
YXRvci5jcHAKQEAgLTE4Niw5ICsxODYsOSBAQCBib29sIGNvbXBhcmVWYWx1ZShUIGEsIFQgYiwg
TWVkaWFGZWF0dXJlUHJlZml4IG9wKQogCiBzdGF0aWMgYm9vbCBjb21wYXJlQXNwZWN0UmF0aW9W
YWx1ZShDU1NWYWx1ZSogdmFsdWUsIGludCB3aWR0aCwgaW50IGhlaWdodCwgTWVkaWFGZWF0dXJl
UHJlZml4IG9wKQogewotICAgIGlmICh2YWx1ZS0+aXNBc3BlY3RSYXRpb1ZhbHVlKCkpIHsKLSAg
ICAgICAgQ1NTQXNwZWN0UmF0aW9WYWx1ZSogYXNwZWN0UmF0aW8gPSB0b0NTU0FzcGVjdFJhdGlv
VmFsdWUodmFsdWUpOwotICAgICAgICByZXR1cm4gY29tcGFyZVZhbHVlKHdpZHRoICogc3RhdGlj
X2Nhc3Q8aW50Pihhc3BlY3RSYXRpby0+ZGVub21pbmF0b3JWYWx1ZSgpKSwgaGVpZ2h0ICogc3Rh
dGljX2Nhc3Q8aW50Pihhc3BlY3RSYXRpby0+bnVtZXJhdG9yVmFsdWUoKSksIG9wKTsKKyAgICBp
ZiAoaXM8Q1NTQXNwZWN0UmF0aW9WYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICBDU1NBc3BlY3RS
YXRpb1ZhbHVlJiBhc3BlY3RSYXRpbyA9IGRvd25jYXN0PENTU0FzcGVjdFJhdGlvVmFsdWU+KCp2
YWx1ZSk7CisgICAgICAgIHJldHVybiBjb21wYXJlVmFsdWUod2lkdGggKiBzdGF0aWNfY2FzdDxp
bnQ+KGFzcGVjdFJhdGlvLmRlbm9taW5hdG9yVmFsdWUoKSksIGhlaWdodCAqIHN0YXRpY19jYXN0
PGludD4oYXNwZWN0UmF0aW8ubnVtZXJhdG9yVmFsdWUoKSksIG9wKTsKICAgICB9CiAKICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xOTYsOSArMTk2LDkgQEAgc3RhdGljIGJvb2wgY29tcGFyZUFzcGVj
dFJhdGlvVmFsdWUoQ1NTVmFsdWUqIHZhbHVlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIE1lZGkK
IAogc3RhdGljIGJvb2wgbnVtYmVyVmFsdWUoQ1NTVmFsdWUqIHZhbHVlLCBmbG9hdCYgcmVzdWx0
KQogewotICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpCi0gICAgICAgICYmIHRvQ1NT
UHJpbWl0aXZlVmFsdWUodmFsdWUpLT5pc051bWJlcigpKSB7Ci0gICAgICAgIHJlc3VsdCA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpLT5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfTlVNQkVSKTsKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkKKyAg
ICAgICAgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNOdW1iZXIoKSkg
eworICAgICAgICByZXN1bHQgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5n
ZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTI0Niw4ICsyNDYsOCBAQCBz
dGF0aWMgYm9vbCBvcmllbnRhdGlvbk1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBj
b25zdCBDU1NUb0xlbmd0aENvbnZlcgogCiAgICAgaW50IHdpZHRoID0gdmlldy0+bGF5b3V0V2lk
dGgoKTsKICAgICBpbnQgaGVpZ2h0ID0gdmlldy0+bGF5b3V0SGVpZ2h0KCk7Ci0gICAgaWYgKHZh
bHVlICYmIHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgY29uc3QgQ1NTVmFs
dWVJRCBpZCA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpLT5nZXRWYWx1ZUlEKCk7CisgICAg
aWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKKyAgICAgICAgY29uc3QgQ1NTVmFs
dWVJRCBpZCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVlSUQo
KTsKICAgICAgICAgaWYgKHdpZHRoID4gaGVpZ2h0KSAvLyBTcXVhcmUgdmlld3BvcnQgaXMgcG9y
dHJhaXQuCiAgICAgICAgICAgICByZXR1cm4gQ1NTVmFsdWVMYW5kc2NhcGUgPT0gaWQ7CiAgICAg
ICAgIHJldHVybiBDU1NWYWx1ZVBvcnRyYWl0ID09IGlkOwpAQCAtMzA4LDIyICszMDgsMjIgQEAg
c3RhdGljIGJvb2wgZXZhbFJlc29sdXRpb24oQ1NTVmFsdWUqIHZhbHVlLCBGcmFtZSogZnJhbWUs
IE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4g
ISFkZXZpY2VTY2FsZUZhY3RvcjsKIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcmVzb2x1dGlvbiA9IHRvQ1NTUHJp
bWl0aXZlVmFsdWUodmFsdWUpOwotICAgIHJldHVybiBjb21wYXJlVmFsdWUoZGV2aWNlU2NhbGVG
YWN0b3IsIHJlc29sdXRpb24tPmlzTnVtYmVyKCkgPyByZXNvbHV0aW9uLT5nZXRGbG9hdFZhbHVl
KCkgOiByZXNvbHV0aW9uLT5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQ
WCksIG9wKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcmVzb2x1dGlvbiA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIHJldHVybiBjb21wYXJlVmFsdWUoZGV2aWNl
U2NhbGVGYWN0b3IsIHJlc29sdXRpb24uaXNOdW1iZXIoKSA/IHJlc29sdXRpb24uZ2V0RmxvYXRW
YWx1ZSgpIDogcmVzb2x1dGlvbi5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
RFBQWCksIG9wKTsKIH0KIAogc3RhdGljIGJvb2wgZGV2aWNlX3BpeGVsX3JhdGlvTWVkaWFGZWF0
dXJlRXZhbChDU1NWYWx1ZSAqdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEm
LCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKLSAgICByZXR1cm4gKCF2
YWx1ZSB8fCB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+aXNOdW1iZXIoKSkgJiYgZXZhbFJl
c29sdXRpb24odmFsdWUsIGZyYW1lLCBvcCk7CisgICAgcmV0dXJuICghdmFsdWUgfHwgZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNOdW1iZXIoKSkgJiYgZXZhbFJlc29sdXRp
b24odmFsdWUsIGZyYW1lLCBvcCk7CiB9CiAKIHN0YXRpYyBib29sIHJlc29sdXRpb25NZWRpYUZl
YXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSYsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewogI2lmIEVOQUJMRShS
RVNPTFVUSU9OX01FRElBX1FVRVJZKQotICAgIHJldHVybiAoIXZhbHVlIHx8IHRvQ1NTUHJpbWl0
aXZlVmFsdWUodmFsdWUpLT5pc1Jlc29sdXRpb24oKSkgJiYgZXZhbFJlc29sdXRpb24odmFsdWUs
IGZyYW1lLCBvcCk7CisgICAgcmV0dXJuICghdmFsdWUgfHwgZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp2YWx1ZSkuaXNSZXNvbHV0aW9uKCkpICYmIGV2YWxSZXNvbHV0aW9uKHZhbHVlLCBm
cmFtZSwgb3ApOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwogICAgIFVOVVNFRF9Q
QVJBTShmcmFtZSk7CkBAIC0zNDQsMTggKzM0NCwxOCBAQCBzdGF0aWMgYm9vbCBncmlkTWVkaWFG
ZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dAogCiBzdGF0aWMgYm9vbCBjb21wdXRlTGVuZ3RoKENTU1ZhbHVlKiB2YWx1ZSwgYm9vbCBzdHJp
Y3QsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBpbnQm
IHJlc3VsdCkKIHsKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYg
KCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVW
YWx1ZSh2YWx1ZSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAKLSAgICBpZiAocHJpbWl0aXZlVmFs
dWUtPmlzTnVtYmVyKCkpIHsKLSAgICAgICAgcmVzdWx0ID0gcHJpbWl0aXZlVmFsdWUtPmdldElu
dFZhbHVlKCk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTnVtYmVyKCkpIHsKKyAgICAgICAg
cmVzdWx0ID0gcHJpbWl0aXZlVmFsdWUuZ2V0SW50VmFsdWUoKTsKICAgICAgICAgcmV0dXJuICFz
dHJpY3QgfHwgIXJlc3VsdDsKICAgICB9CiAKLSAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVu
Z3RoKCkpIHsKLSAgICAgICAgcmVzdWx0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8
aW50Pihjb252ZXJzaW9uRGF0YSk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkp
IHsKKyAgICAgICAgcmVzdWx0ID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxpbnQ+KGNv
bnZlcnNpb25EYXRhKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC01OTMsNyAr
NTkzLDcgQEAgc3RhdGljIGJvb2wgdmlld19tb2RlTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSog
dmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2kKICAgICBpZiAoIXZhbHVlKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgIGNvbnN0IGludCB2aWV3TW9kZUNTU0tleXdvcmRJRCA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpLT5nZXRWYWx1ZUlEKCk7CisgICAgY29uc3QgaW50IHZp
ZXdNb2RlQ1NTS2V5d29yZElEID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSku
Z2V0VmFsdWVJRCgpOwogICAgIGNvbnN0IFBhZ2U6OlZpZXdNb2RlIHZpZXdNb2RlID0gZnJhbWUt
PnBhZ2UoKS0+dmlld01vZGUoKTsKICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwogICAgIHN3aXRj
aCAodmlld01vZGUpIHsKQEAgLTY4OCwxMCArNjg4LDEwIEBAIHN0YXRpYyBib29sIHBvaW50ZXJN
ZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uCiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIHBvaW50ZXIgIT0gTm9Qb2ludGVy
OwogCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNv
bnN0IENTU1ZhbHVlSUQgaWQgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+Z2V0VmFsdWVJ
RCgpOworICAgIGNvbnN0IENTU1ZhbHVlSUQgaWQgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCk7CiAgICAgcmV0dXJuIChwb2ludGVyID09IE5vUG9pbnRl
ciAmJiBpZCA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgIHx8IChwb2ludGVyID09IFRvdWNoUG9p
bnRlciAmJiBpZCA9PSBDU1NWYWx1ZUNvYXJzZSkKICAgICAgICAgfHwgKHBvaW50ZXIgPT0gTW91
c2VQb2ludGVyICYmIGlkID09IENTU1ZhbHVlRmluZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZH
Q1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXggZmE0MzIxZThiN2JiNDRiOWE3YjZlMTQ3YWUyMjIx
YjM0OTBhN2UyMi4uNjg1NDk0NTkxN2M2ZTQ5MTY4ZTRkMmNmYWNkZTBmZGVjNzZkZjMyOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcApAQCAtMTAzLDkgKzEw
Myw5IEBAIHN0YXRpYyBDb2xvciBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKFNWR0NvbG9yKiBz
dmdDb2xvciwgY29uc3QgQ29sb3ImIGZnQ29sb3IpCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIEFT
U0VSVCh2YWx1ZSk7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gMDsK
LSAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgcHJpbWl0aXZlVmFs
dWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUgPSBudWxscHRyOworICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4o
KnZhbHVlKSkKKyAgICAgICAgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWUpOwogCiAgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICBT
VkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdGF0ZS5zdHlsZSgpLT5hY2Nlc3NTVkdTdHlsZSgp
OwpAQCAtMjA4LDEzICsyMDgsMTMgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIC8vICdu
b3JtYWwnIGlzIHRoZSBvbmx5IHByaW1pdGl2ZVZhbHVlCiAgICAgICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUpCiAgICAgICAgICAgICAgICAgc3ZnU3R5bGUuc2V0UGFpbnRPcmRlcihQYWludE9y
ZGVyTm9ybWFsKTsKLSAgICAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAg
ICAgICAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogb3JkZXJUeXBlTGlzdCA9IHRvQ1NTVmFs
dWVMaXN0KHZhbHVlKTsKKyAgICAgICAgICAgIENTU1ZhbHVlTGlzdCYgb3JkZXJUeXBlTGlzdCA9
IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKIAogICAgICAgICAgICAgLy8gU2VyaWFs
aXphdGlvbiBoYXBwZW5lZCBkdXJpbmcgcGFyc2luZy4gTm8gYWRkaXRpb25hbCBjaGVja2luZyBu
ZWVkZWQuCi0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBvcmRlclR5cGVMaXN0LT5sZW5n
dGgoKTsKLSAgICAgICAgICAgIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZShv
cmRlclR5cGVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IG9yZGVyVHlwZUxpc3QubGVuZ3RoKCk7CisgICAgICAgICAgICBwcmlt
aXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihvcmRlclR5cGVMaXN0Lml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOwogICAgICAgICAgICAgUGFpbnRPcmRlciBwYWludE9y
ZGVyOwogICAgICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpKSB7
CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlRmlsbDoKQEAgLTI2Niw5ICsyNjYsOSBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIHN2Z1N0eWxlLnNldEZpbGxQYWludChTVkdSZW5k
ZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludFR5cGUoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxG
aWxsUGFpbnRDb2xvcigpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludFVyaSgpLCBh
cHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtT
dHlsZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkgewotICAgICAgICAgICAgICAgIFNWR1BhaW50
KiBzdmdQYWludCA9IHRvU1ZHUGFpbnQodmFsdWUpOwotICAgICAgICAgICAgICAgIHN2Z1N0eWxl
LnNldEZpbGxQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NT
VmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCks
IGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlu
a1N0eWxlKCkpOworICAgICAgICAgICAgaWYgKGlzPFNWR1BhaW50PigqdmFsdWUpKSB7CisgICAg
ICAgICAgICAgICAgU1ZHUGFpbnQmIHN2Z1BhaW50ID0gZG93bmNhc3Q8U1ZHUGFpbnQ+KCp2YWx1
ZSk7CisgICAgICAgICAgICAgICAgc3ZnU3R5bGUuc2V0RmlsbFBhaW50KHN2Z1BhaW50LnBhaW50
VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKCZzdmdQYWludCwgc3RhdGUuc3R5bGUo
KS0+Y29sb3IoKSksIHN2Z1BhaW50LnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUo
KSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yODMsMzAgKzI4MywzMCBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICAgICAgICAgIHN2Z1N0eWxlLnNldFN0cm9rZVBhaW50KFNWR1JlbmRl
clN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRUeXBlKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFs
U3Ryb2tlUGFpbnRDb2xvcigpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50VXJp
KCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVk
TGlua1N0eWxlKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdQYWludCgpKSB7Ci0gICAgICAgICAgICAgICAgU1ZH
UGFpbnQqIHN2Z1BhaW50ID0gdG9TVkdQYWludCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgc3Zn
U3R5bGUuc2V0U3Ryb2tlUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdD
b2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFpbnQt
PnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlz
aXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgIGlmIChpczxTVkdQYWludD4oKnZhbHVlKSkg
eworICAgICAgICAgICAgICAgIFNWR1BhaW50JiBzdmdQYWludCA9IGRvd25jYXN0PFNWR1BhaW50
PigqdmFsdWUpOworICAgICAgICAgICAgICAgIHN2Z1N0eWxlLnNldFN0cm9rZVBhaW50KHN2Z1Bh
aW50LnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKCZzdmdQYWludCwgc3Rh
dGUuc3R5bGUoKS0+Y29sb3IoKSksIHN2Z1BhaW50LnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlTdHJva2VEYXNoYXJyYXk6CiAgICAgICAgIHsKICAgICAgICAgICAgIEhBTkRMRV9JTkhF
UklUX0FORF9JTklUSUFMKHN0cm9rZURhc2hBcnJheSwgU3Ryb2tlRGFzaEFycmF5KQotICAgICAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgeworICAgICAgICAgICAgaWYgKCFpczxD
U1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICBzdmdTdHlsZS5zZXRTdHJv
a2VEYXNoQXJyYXkoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VEYXNoQXJyYXkoKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIENTU1Zh
bHVlTGlzdCogZGFzaGVzID0gdG9DU1NWYWx1ZUxpc3QodmFsdWUpOworICAgICAgICAgICAgQ1NT
VmFsdWVMaXN0JiBkYXNoZXMgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CiAKICAg
ICAgICAgICAgIFZlY3RvcjxTVkdMZW5ndGg+IGFycmF5OwotICAgICAgICAgICAgc2l6ZV90IGxl
bmd0aCA9IGRhc2hlcy0+bGVuZ3RoKCk7CisgICAgICAgICAgICBzaXplX3QgbGVuZ3RoID0gZGFz
aGVzLmxlbmd0aCgpOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBjdXJyVmFsdWUgPSBkYXNoZXMtPml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjdXJyVmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVl
ID0gZGFzaGVzLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CisgICAgICAgICAgICAgICAgaWYg
KCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmN1cnJWYWx1ZSkpCiAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGRhc2ggPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKGRhc2hlcy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7Cisg
ICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGRhc2ggPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oZGFzaGVzLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOwogICAgICAgICAg
ICAgICAgIGFycmF5LmFwcGVuZChTVkdMZW5ndGg6OmZyb21DU1NQcmltaXRpdmVWYWx1ZShkYXNo
KSk7CiAgICAgICAgICAgICB9CiAKQEAgLTQ5MSwxNSArNDkxLDE1IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlTdG9wQ29sb3I6CiAgICAgICAgIHsKICAgICAgICAg
ICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHN0b3BDb2xvciwgU3RvcENvbG9yKTsKLSAg
ICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICAgICAgICAgIHN2Z1N0
eWxlLnNldFN0b3BDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHRvU1ZHQ29sb3IodmFs
dWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSk7CisgICAgICAgICAgICBpZiAoaXM8U1ZHQ29s
b3I+KCp2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3ZnU3R5bGUuc2V0U3RvcENvbG9yKGNvbG9y
RnJvbVNWR0NvbG9yQ1NTVmFsdWUoZG93bmNhc3Q8U1ZHQ29sb3I+KHZhbHVlKSwgc3RhdGUuc3R5
bGUoKS0+Y29sb3IoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICBj
YXNlIENTU1Byb3BlcnR5TGlnaHRpbmdDb2xvcjoKICAgICAgICAgewogICAgICAgICAgICAgSEFO
RExFX0lOSEVSSVRfQU5EX0lOSVRJQUwobGlnaHRpbmdDb2xvciwgTGlnaHRpbmdDb2xvcik7Ci0g
ICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZHQ29sb3IoKSkKLSAgICAgICAgICAgICAgICBzdmdT
dHlsZS5zZXRMaWdodGluZ0NvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUodG9TVkdDb2xv
cih2YWx1ZSksIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpKTsKKyAgICAgICAgICAgIGlmIChpczxT
VkdDb2xvcj4oKnZhbHVlKSkKKyAgICAgICAgICAgICAgICBzdmdTdHlsZS5zZXRMaWdodGluZ0Nv
bG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoZG93bmNhc3Q8U1ZHQ29sb3I+KHZhbHVlKSwg
c3RhdGUuc3R5bGUoKS0+Y29sb3IoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZsb29kT3BhY2l0eToKQEAgLTUyMyw4ICs1MjMsOCBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rmxvb2RDb2xvcjoKICAg
ICAgICAgewogICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoZmxvb2RDb2xv
ciwgRmxvb2RDb2xvcik7Ci0gICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZHQ29sb3IoKSkKLSAg
ICAgICAgICAgICAgICBzdmdTdHlsZS5zZXRGbG9vZENvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NT
VmFsdWUodG9TVkdDb2xvcih2YWx1ZSksIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpKTsKKyAgICAg
ICAgICAgIGlmIChpczxTVkdDb2xvcj4oKnZhbHVlKSkKKyAgICAgICAgICAgICAgICBzdmdTdHls
ZS5zZXRGbG9vZENvbG9yKGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoZG93bmNhc3Q8U1ZHQ29s
b3I+KHZhbHVlKSwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUdseXBoT3JpZW50YXRpb25Ib3Jp
em9udGFsOgpAQCAtNTcxLDI3ICs1NzEsMjcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNW
R1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAg
IGlmIChpc0luaXRpYWwgfHwgcHJpbWl0aXZlVmFsdWUpIC8vIGluaXRpYWwgfCBub25lCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN2Z1N0eWxlLnNldFNoYWRvdyhudWxscHRyKTsKIAotICAgICAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgICAgIGlmICghaXM8Q1NT
VmFsdWVMaXN0PigqdmFsdWUpKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAg
ICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gdG9DU1NWYWx1ZUxpc3QodmFsdWUpOwotICAgICAgICAg
ICAgaWYgKCFsaXN0LT5sZW5ndGgoKSkKKyAgICAgICAgICAgIENTU1ZhbHVlTGlzdCYgbGlzdCA9
IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKKyAgICAgICAgICAgIGlmICghbGlzdC5s
ZW5ndGgoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIENTU1ZhbHVl
KiBmaXJzdFZhbHVlID0gbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKTsKLSAgICAgICAg
ICAgIGlmICghZmlyc3RWYWx1ZS0+aXNTaGFkb3dWYWx1ZSgpKQorICAgICAgICAgICAgQ1NTVmFs
dWUqIGZpcnN0VmFsdWUgPSBsaXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCk7CisgICAgICAg
ICAgICBpZiAoIWlzPENTU1NoYWRvd1ZhbHVlPigqZmlyc3RWYWx1ZSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgQ1NTU2hhZG93VmFsdWUqIGl0ZW0gPSB0b0NTU1NoYWRv
d1ZhbHVlKGZpcnN0VmFsdWUpOwotICAgICAgICAgICAgSW50UG9pbnQgbG9jYXRpb24oaXRlbS0+
eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5j
b3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSksCi0gICAgICAgICAgICAgICAgaXRlbS0+eS0+Y29t
cHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0
aEFkanVzdGVkWm9vbSgxLjBmKSkpOwotICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVy
ID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSkgOiAwOworICAgICAgICAgICAg
Q1NTU2hhZG93VmFsdWUmIGl0ZW0gPSBkb3duY2FzdDxDU1NTaGFkb3dWYWx1ZT4oKmZpcnN0VmFs
dWUpOworICAgICAgICAgICAgSW50UG9pbnQgbG9jYXRpb24oaXRlbS54LT5jb21wdXRlTGVuZ3Ro
PGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRa
b29tKDEuMGYpKSwKKyAgICAgICAgICAgICAgICBpdGVtLnktPmNvbXB1dGVMZW5ndGg8aW50Pihz
dGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4w
ZikpKTsKKyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS5ibHVyID8gaXRlbS5ibHVyLT5jb21w
dXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRo
QWRqdXN0ZWRab29tKDEuMGYpKSA6IDA7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKLSAgICAg
ICAgICAgIGlmIChpdGVtLT5jb2xvcikKLSAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJv
bVByaW1pdGl2ZVZhbHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChpdGVt
LmNvbG9yKQorICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUo
aXRlbS5jb2xvci5nZXQoKSk7CiAKICAgICAgICAgICAgIC8vIC13ZWJraXQtc3ZnLXNoYWRvdyBk
b2VzIHNob3VsZCBub3QgaGF2ZSBhIHNwcmVhZCBvciBzdHlsZQotICAgICAgICAgICAgQVNTRVJU
KCFpdGVtLT5zcHJlYWQpOwotICAgICAgICAgICAgQVNTRVJUKCFpdGVtLT5zdHlsZSk7CisgICAg
ICAgICAgICBBU1NFUlQoIWl0ZW0uc3ByZWFkKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXRlbS5z
dHlsZSk7CiAKICAgICAgICAgICAgIGF1dG8gc2hhZG93RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8
U2hhZG93RGF0YT4obG9jYXRpb24sIGJsdXIsIDAsIE5vcm1hbCwgZmFsc2UsIGNvbG9yLmlzVmFs
aWQoKSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFyZW50KTsKICAgICAgICAgICAgIHN2Z1N0eWxl
LnNldFNoYWRvdyhXVEY6Om1vdmUoc2hhZG93RGF0YSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1NvdXJjZVNpemVMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Tb3VyY2VT
aXplTGlzdC5jcHAKaW5kZXggN2Q4NjJlMWQ1ODQzOGQ1YjA4ZTRlYzBlZTc4ZDJhZTU0ZGU1MzJl
OC4uODg4N2JjZWQ4ZGNiZjRjYmY2MmIxMDBhZGY5MmU4MjZhZjQ3ZGZjMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL1NvdXJjZVNpemVMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU291cmNlU2l6ZUxpc3QuY3BwCkBAIC02MCw3ICs2MCw3IEBAIHN0YXRpYyB1bnNpZ25l
ZCBjb21wdXRlTGVuZ3RoKENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgUmVuZGVyU3R5bGUmIHN0eWxl
LCBSZW5kZXJWCiAgICAgICAgIH0KICAgICB9CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1
ZSA9IHZhbHVlLmNyZWF0ZUNTU1ZhbHVlKCk7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoY3NzVmFsdWUuZ2V0KCkpOwor
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oY3NzVmFsdWUuZ2V0KCkpOwogICAgIHJldHVybiBwcmltaXRpdmVW
YWx1ZS0+Y29tcHV0ZUxlbmd0aDx1bnNpZ25lZD4oY29udmVyc2lvbkRhdGEpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCmluZGV4IDZkMmZkY2UyMWRmMTZlZWMxZDUw
ZDI2NTVlYjQwYzQ1MDk5YmQyYjIuLmY4ZWE0MGQ0OWFkMGU1NjQ5NGE4MGFkMWNhY2RmMGVmMGQ1
MTQ4MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwCkBAIC0zNjMsNyAr
MzYzLDcgQEAgU3RyaW5nIFN0eWxlUHJvcGVydGllczo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVl
KGNvbnN0IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmIHMKICAgICAgICAgdmFsdWVzW2ldID0gZ2V0
UHJvcGVydHlDU1NWYWx1ZShzaG9ydGhhbmQucHJvcGVydGllcygpW2ldKTsKICAgICAgICAgaWYg
KHZhbHVlc1tpXSkgewogICAgICAgICAgICAgaWYgKHZhbHVlc1tpXS0+aXNCYXNlVmFsdWVMaXN0
KCkpCi0gICAgICAgICAgICAgICAgbnVtTGF5ZXJzID0gc3RkOjptYXgodG9DU1NWYWx1ZUxpc3Qo
dmFsdWVzW2ldLmdldCgpKS0+bGVuZ3RoKCksIG51bUxheWVycyk7CisgICAgICAgICAgICAgICAg
bnVtTGF5ZXJzID0gc3RkOjptYXgoZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWVzW2ldKS5s
ZW5ndGgoKSwgbnVtTGF5ZXJzKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBu
dW1MYXllcnMgPSBzdGQ6Om1heDxzaXplX3Q+KDFVLCBudW1MYXllcnMpOwogICAgICAgICB9CkBA
IC0zODQsNyArMzg0LDcgQEAgU3RyaW5nIFN0eWxlUHJvcGVydGllczo6Z2V0TGF5ZXJlZFNob3J0
aGFuZFZhbHVlKGNvbnN0IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmIHMKICAgICAgICAgICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gdmFsdWU7CiAgICAgICAgICAgICBpZiAodmFsdWVzW2pdKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlc1tqXS0+aXNCYXNlVmFsdWVMaXN0KCkpCi0gICAgICAgICAg
ICAgICAgICAgIHZhbHVlID0gdG9DU1NWYWx1ZUxpc3QodmFsdWVzW2pdLmdldCgpKS0+aXRlbShp
KTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2
YWx1ZXNbal0pLml0ZW0oaSk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlID0gdmFsdWVzW2pdOwogCkBAIC00MDgsMTYgKzQwOCwxNiBAQCBTdHJpbmcg
U3R5bGVQcm9wZXJ0aWVzOjpnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUoY29uc3QgU3R5bGVQcm9w
ZXJ0eVNob3J0aGFuZCYgcwogICAgICAgICAgICAgICAgICAgICB8fCAoaiA8IHNpemUgLSAxICYm
IHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbaiArIDFdID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Jl
cGVhdFkgJiYgdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4g
eVZhbHVlOwogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IG5leHRWYWx1ZSA9
IHZhbHVlc1tqICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VmFsdWUtPmlzVmFs
dWVMaXN0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB5VmFsdWUgPSB0b0NTU1ZhbHVlTGlz
dChuZXh0VmFsdWUuZ2V0KCkpLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqbmV4dFZhbHVlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHlWYWx1ZSA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKm5leHRWYWx1ZSku
aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICAgICAgeVZhbHVlID0gbmV4dFZhbHVlOwogCi0gICAgICAgICAgICAg
ICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSB8fCAheVZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSkgfHwgIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqeVZhbHVlKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgICAgIENTU1ZhbHVl
SUQgeElkID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS5nZXQoKSktPmdldFZhbHVlSUQoKTsK
LSAgICAgICAgICAgICAgICAgICAgQ1NTVmFsdWVJRCB5SWQgPSB0b0NTU1ByaW1pdGl2ZVZhbHVl
KHlWYWx1ZS5nZXQoKSktPmdldFZhbHVlSUQoKTsKKyAgICAgICAgICAgICAgICAgICAgQ1NTVmFs
dWVJRCB4SWQgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlE
KCk7CisgICAgICAgICAgICAgICAgICAgIENTU1ZhbHVlSUQgeUlkID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp5VmFsdWUpLmdldFZhbHVlSUQoKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKHhJZCAhPSB5SWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4SWQgPT0gQ1NT
VmFsdWVSZXBlYXQgJiYgeUlkID09IENTU1ZhbHVlTm9SZXBlYXQpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1c2VSZXBlYXRYU2hvcnRoYW5kID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmNwcAppbmRleCAyZjJkZmM2MTdiZDFjNDE1ZDFmNDA3MWE0ZGYxNDk3MTdj
OThhMDI4Li4zNjEwYWI5MGEzYjk0ZjMxZWExNTI5OGZiOWQyMzUyZDZkMzdhNDM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC0xNjQzLDEzICsxNjQzLDEzIEBAIHZvaWQg
ZXh0cmFjdERpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
Y29uc3QgU3R5bGVSZXNvbHZlCiAgICAgICAgICAgICBzd2l0Y2ggKHByb3BlcnR5LmlkKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRXcml0aW5nTW9kZToKICAgICAgICAg
ICAgICAgICBpZiAoIWhhZEltcG9ydGFudFdlYmtpdFdyaXRpbmdNb2RlIHx8IHByb3BlcnR5Lmlz
SW1wb3J0YW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGluZ01vZGUgPSB0b0NTU1By
aW1pdGl2ZVZhbHVlKCpwcm9wZXJ0eS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgd3Jp
dGluZ01vZGUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnByb3BlcnR5LnZhbHVlKCkp
OwogICAgICAgICAgICAgICAgICAgICBoYWRJbXBvcnRhbnRXZWJraXRXcml0aW5nTW9kZSA9IHBy
b3BlcnR5LmlzSW1wb3J0YW50KCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eURpcmVjdGlvbjoKICAgICAgICAg
ICAgICAgICBpZiAoIWhhZEltcG9ydGFudERpcmVjdGlvbiB8fCBwcm9wZXJ0eS5pc0ltcG9ydGFu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IHRvQ1NTUHJpbWl0aXZlVmFs
dWUoKnByb3BlcnR5LnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnByb3BlcnR5LnZhbHVlKCkpOwogICAgICAgICAg
ICAgICAgICAgICBoYWRJbXBvcnRhbnREaXJlY3Rpb24gPSBwcm9wZXJ0eS5pc0ltcG9ydGFudCgp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE5MzEsMjIg
KzE5MzEsMjIgQEAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIGNvbnN0IFN0eWwKIAogc3RhdGljIGJvb2wgY3JlYXRl
R3JpZFRyYWNrU2l6ZShDU1NWYWx1ZSogdmFsdWUsIEdyaWRUcmFja1NpemUmIHRyYWNrU2l6ZSwg
Y29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogewotICAgIGlmICh2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOworICAgIGlmIChpczxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZl
VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKICAgICAgICAgR3Jp
ZExlbmd0aCB3b3JraW5nTGVuZ3RoOwotICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0JyZWFk
dGgocHJpbWl0aXZlVmFsdWUsIHN0YXRlLCB3b3JraW5nTGVuZ3RoKSkKKyAgICAgICAgaWYgKCFj
cmVhdGVHcmlkVHJhY2tCcmVhZHRoKCZwcmltaXRpdmVWYWx1ZSwgc3RhdGUsIHdvcmtpbmdMZW5n
dGgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIHRyYWNrU2l6ZS5zZXRM
ZW5ndGgod29ya2luZ0xlbmd0aCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IENTU0Z1bmN0aW9uVmFsdWUqIG1pbm1heEZ1bmN0aW9uID0gdG9DU1NGdW5jdGlvblZhbHVlKHZh
bHVlKTsKLSAgICBDU1NWYWx1ZUxpc3QqIGFyZ3VtZW50cyA9IG1pbm1heEZ1bmN0aW9uLT5hcmd1
bWVudHMoKTsKKyAgICBDU1NGdW5jdGlvblZhbHVlJiBtaW5tYXhGdW5jdGlvbiA9IGRvd25jYXN0
PENTU0Z1bmN0aW9uVmFsdWU+KCp2YWx1ZSk7CisgICAgQ1NTVmFsdWVMaXN0KiBhcmd1bWVudHMg
PSBtaW5tYXhGdW5jdGlvbi5hcmd1bWVudHMoKTsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihhcmd1bWVudHMtPmxlbmd0aCgpID09IDIpOwogICAgIEdyaWRMZW5ndGggbWlu
VHJhY2tCcmVhZHRoOwogICAgIEdyaWRMZW5ndGggbWF4VHJhY2tCcmVhZHRoOwotICAgIGlmICgh
Y3JlYXRlR3JpZFRyYWNrQnJlYWR0aCh0b0NTU1ByaW1pdGl2ZVZhbHVlKGFyZ3VtZW50cy0+aXRl
bVdpdGhvdXRCb3VuZHNDaGVjaygwKSksIHN0YXRlLCBtaW5UcmFja0JyZWFkdGgpIHx8ICFjcmVh
dGVHcmlkVHJhY2tCcmVhZHRoKHRvQ1NTUHJpbWl0aXZlVmFsdWUoYXJndW1lbnRzLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDEpKSwgc3RhdGUsIG1heFRyYWNrQnJlYWR0aCkpCisgICAgaWYgKCFj
cmVhdGVHcmlkVHJhY2tCcmVhZHRoKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihhcmd1bWVu
dHMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpLCBzdGF0ZSwgbWluVHJhY2tCcmVhZHRoKSB8
fCAhY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oYXJn
dW1lbnRzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKSwgc3RhdGUsIG1heFRyYWNrQnJlYWR0
aCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHRyYWNrU2l6ZS5zZXRNaW5NYXgobWlu
VHJhY2tCcmVhZHRoLCBtYXhUcmFja0JyZWFkdGgpOwpAQCAtMTk1Niw5ICsxOTU2LDkgQEAgc3Rh
dGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrU2l6ZShDU1NWYWx1ZSogdmFsdWUsIEdyaWRUcmFja1Np
emUmIHRyYWNrU2l6ZSwgY29uc3QKIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3QoQ1NT
VmFsdWUqIHZhbHVlLCBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4mIHRyYWNrU2l6ZXMsIE5hbWVkR3Jp
ZExpbmVzTWFwJiBuYW1lZEdyaWRMaW5lcywgT3JkZXJlZE5hbWVkR3JpZExpbmVzTWFwJiBvcmRl
cmVkTmFtZWRHcmlkTGluZXMsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKIHsK
ICAgICAvLyBIYW5kbGUgJ25vbmUnLgotICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KSB7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJp
bWl0aXZlVmFsdWUodmFsdWUpOwotICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWUtPmdldFZh
bHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmU7CisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpKSB7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgICAgICByZXR1cm4gcHJpbWl0
aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZTsKICAgICB9CiAKICAgICBpZiAo
IXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQpAQCAtMTk2NywxMCArMTk2NywxMCBAQCBzdGF0aWMgYm9v
bCBjcmVhdGVHcmlkVHJhY2tMaXN0KENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPEdyaWRUcmFja1Np
emU+JiB0cmFja1NpegogICAgIHNpemVfdCBjdXJyZW50TmFtZWRHcmlkTGluZSA9IDA7CiAgICAg
Zm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFu
Y2UoKSkgewogICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1ZSgpOwotICAgICAg
ICBpZiAoY3VyclZhbHVlLT5pc0dyaWRMaW5lTmFtZXNWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBD
U1NHcmlkTGluZU5hbWVzVmFsdWUqIGxpbmVOYW1lc1ZhbHVlID0gdG9DU1NHcmlkTGluZU5hbWVz
VmFsdWUoY3VyclZhbHVlKTsKLSAgICAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3Ig
aiA9IGxpbmVOYW1lc1ZhbHVlOyBqLmhhc01vcmUoKTsgai5hZHZhbmNlKCkpIHsKLSAgICAgICAg
ICAgICAgICBTdHJpbmcgbmFtZWRHcmlkTGluZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoai52YWx1
ZSgpKS0+Z2V0U3RyaW5nVmFsdWUoKTsKKyAgICAgICAgaWYgKGlzPENTU0dyaWRMaW5lTmFtZXNW
YWx1ZT4oKmN1cnJWYWx1ZSkpIHsKKyAgICAgICAgICAgIENTU0dyaWRMaW5lTmFtZXNWYWx1ZSYg
bGluZU5hbWVzVmFsdWUgPSBkb3duY2FzdDxDU1NHcmlkTGluZU5hbWVzVmFsdWU+KCpjdXJyVmFs
dWUpOworICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBqID0gJmxpbmVOYW1l
c1ZhbHVlOyBqLmhhc01vcmUoKTsgai5hZHZhbmNlKCkpIHsKKyAgICAgICAgICAgICAgICBTdHJp
bmcgbmFtZWRHcmlkTGluZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihqLnZhbHVlKCkp
LT5nZXRTdHJpbmdWYWx1ZSgpOwogICAgICAgICAgICAgICAgIE5hbWVkR3JpZExpbmVzTWFwOjpB
ZGRSZXN1bHQgcmVzdWx0ID0gbmFtZWRHcmlkTGluZXMuYWRkKG5hbWVkR3JpZExpbmUsIFZlY3Rv
cjxzaXplX3Q+KCkpOwogICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBw
ZW5kKGN1cnJlbnROYW1lZEdyaWRMaW5lKTsKICAgICAgICAgICAgICAgICBPcmRlcmVkTmFtZWRH
cmlkTGluZXNNYXA6OkFkZFJlc3VsdCBvcmRlcmVkUmVzdWx0ID0gb3JkZXJlZE5hbWVkR3JpZExp
bmVzLmFkZChjdXJyZW50TmFtZWRHcmlkTGluZSwgVmVjdG9yPFN0cmluZz4oKSk7CkBAIC0xOTk4
LDM3ICsxOTk4LDM3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRQb3NpdGlvbihDU1NWYWx1ZSog
dmFsdWUsIEdyaWRQb3NpdGlvbiYgcG9zaXRpb24pCiB7CiAgICAgLy8gV2UgYWNjZXB0IHRoZSBz
cGVjaWZpY2F0aW9uJ3MgZ3JhbW1hcjoKICAgICAvLyBhdXRvIHwgPGN1c3RvbS1pZGVudD4gfCBb
IDxpbnRlZ2VyPiAmJiA8Y3VzdG9tLWlkZW50Pj8gXSB8IFsgc3BhbiAmJiBbIDxpbnRlZ2VyPiB8
fCA8Y3VzdG9tLWlkZW50PiBdIF0KLSAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkg
ewotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1p
dGl2ZVZhbHVlKHZhbHVlKTsKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkp
IHsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgIC8vIFdlIHRyYW5zbGF0ZSA8aWRl
bnQ+IHRvIDxzdHJpbmc+IGR1cmluZyBwYXJzaW5nIGFzIGl0IG1ha2VzIGhhbmRsaW5nIGl0IHNp
bXBsZXIuCi0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNTdHJpbmcoKSkgewotICAgICAg
ICAgICAgcG9zaXRpb24uc2V0TmFtZWRHcmlkQXJlYShwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5n
VmFsdWUoKSk7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1N0cmluZygpKSB7CisgICAg
ICAgICAgICBwb3NpdGlvbi5zZXROYW1lZEdyaWRBcmVhKHByaW1pdGl2ZVZhbHVlLmdldFN0cmlu
Z1ZhbHVlKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAotICAgICAg
ICBBU1NFUlQocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pOwor
ICAgICAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQXV0
byk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIENTU1ZhbHVlTGlzdCogdmFs
dWVzID0gdG9DU1NWYWx1ZUxpc3QodmFsdWUpOwotICAgIEFTU0VSVCh2YWx1ZXMtPmxlbmd0aCgp
KTsKKyAgICBDU1NWYWx1ZUxpc3QmIHZhbHVlcyA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZh
bHVlKTsKKyAgICBBU1NFUlQodmFsdWVzLmxlbmd0aCgpKTsKIAogICAgIGJvb2wgaXNTcGFuUG9z
aXRpb24gPSBmYWxzZTsKICAgICBpbnQgZ3JpZExpbmVOdW1iZXIgPSAwOwogICAgIFN0cmluZyBn
cmlkTGluZU5hbWU7CiAKLSAgICBDU1NWYWx1ZUxpc3RJdGVyYXRvciBpdCA9IHZhbHVlczsKLSAg
ICBDU1NQcmltaXRpdmVWYWx1ZSogY3VycmVudFZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZShp
dC52YWx1ZSgpKTsKKyAgICBDU1NWYWx1ZUxpc3RJdGVyYXRvciBpdCA9ICZ2YWx1ZXM7CisgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIGN1cnJlbnRWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPihpdC52YWx1ZSgpKTsKICAgICBpZiAoY3VycmVudFZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVTcGFuKSB7CiAgICAgICAgIGlzU3BhblBvc2l0aW9uID0gdHJ1ZTsKICAgICAgICAg
aXQuYWR2YW5jZSgpOwotICAgICAgICBjdXJyZW50VmFsdWUgPSBpdC5oYXNNb3JlKCkgPyB0b0NT
U1ByaW1pdGl2ZVZhbHVlKGl0LnZhbHVlKCkpIDogMDsKKyAgICAgICAgY3VycmVudFZhbHVlID0g
aXQuaGFzTW9yZSgpID8gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0LnZhbHVlKCkpIDog
bnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoY3VycmVudFZhbHVlICYmIGN1cnJlbnRWYWx1ZS0+
aXNOdW1iZXIoKSkgewogICAgICAgICBncmlkTGluZU51bWJlciA9IGN1cnJlbnRWYWx1ZS0+Z2V0
SW50VmFsdWUoKTsKICAgICAgICAgaXQuYWR2YW5jZSgpOwotICAgICAgICBjdXJyZW50VmFsdWUg
PSBpdC5oYXNNb3JlKCkgPyB0b0NTU1ByaW1pdGl2ZVZhbHVlKGl0LnZhbHVlKCkpIDogMDsKKyAg
ICAgICAgY3VycmVudFZhbHVlID0gaXQuaGFzTW9yZSgpID8gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KGl0LnZhbHVlKCkpIDogbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAoY3VycmVudFZh
bHVlICYmIGN1cnJlbnRWYWx1ZS0+aXNTdHJpbmcoKSkgewpAQCAtMjA1NSw3ICsyMDU1LDcgQEAg
TGVuZ3RoIFN0eWxlUmVzb2x2ZXI6OnBhcnNlU25hcENvb3JkaW5hdGUoQ1NTUHJpbWl0aXZlVmFs
dWUmIHZhbHVlKQogCiBMZW5ndGggU3R5bGVSZXNvbHZlcjo6cGFyc2VTbmFwQ29vcmRpbmF0ZShD
U1NWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgdW5zaWduZWQgb2Zmc2V0KQogewotICAgIHJldHVybiBw
YXJzZVNuYXBDb29yZGluYXRlKHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVlTGlzdC5pdGVtKG9m
ZnNldCkpKTsKKyAgICByZXR1cm4gcGFyc2VTbmFwQ29vcmRpbmF0ZShkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnZhbHVlTGlzdC5pdGVtKG9mZnNldCkpKTsKIH0KIAogTGVuZ3RoU2l6ZSBT
dHlsZVJlc29sdmVyOjpwYXJzZVNuYXBDb29yZGluYXRlUGFpcihDU1NWYWx1ZUxpc3QmIHZhbHVl
TGlzdCwgdW5zaWduZWQgb2Zmc2V0KQpAQCAtMjA2NywxNCArMjA2NywxNCBAQCBTY3JvbGxTbmFw
UG9pbnRzIFN0eWxlUmVzb2x2ZXI6OnBhcnNlU25hcFBvaW50cyhDU1NWYWx1ZSYgdmFsdWUpCiB7
CiAgICAgU2Nyb2xsU25hcFBvaW50cyBwb2ludHM7CiAKLSAgICBpZiAodmFsdWUuaXNQcmltaXRp
dmVWYWx1ZSgpICYmIHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpLmdldFZhbHVlSUQoKSA9PSBD
U1NWYWx1ZUVsZW1lbnRzKSB7CisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkg
JiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS5nZXRWYWx1ZUlEKCkgPT0gQ1NT
VmFsdWVFbGVtZW50cykgewogICAgICAgICBwb2ludHMudXNlc0VsZW1lbnRzID0gdHJ1ZTsKICAg
ICAgICAgcmV0dXJuIHBvaW50czsKICAgICB9CiAKICAgICBwb2ludHMuaGFzUmVwZWF0ID0gZmFs
c2U7CiAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpdCgmdmFsdWUpOyBpdC5oYXNNb3Jl
KCk7IGl0LmFkdmFuY2UoKSkgewotICAgICAgICBhdXRvJiBpdGVtVmFsdWUgPSB0b0NTU1ByaW1p
dGl2ZVZhbHVlKCppdC52YWx1ZSgpKTsKKyAgICAgICAgYXV0byYgaXRlbVZhbHVlID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdC52YWx1ZSgpKTsKICAgICAgICAgaWYgKGF1dG8qIGxl
bmd0aFJlcGVhdCA9IGl0ZW1WYWx1ZS5nZXRMZW5ndGhSZXBlYXRWYWx1ZSgpKSB7CiAgICAgICAg
ICAgICBpZiAoYXV0byogaW50ZXJ2YWwgPSBsZW5ndGhSZXBlYXQtPmludGVydmFsKCkpIHsKICAg
ICAgICAgICAgICAgICBwb2ludHMucmVwZWF0T2Zmc2V0ID0gcGFyc2VTbmFwQ29vcmRpbmF0ZSgq
aW50ZXJ2YWwpOwpAQCAtMjEyNyw3ICsyMTI3LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgPyB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKSA6IDA7
CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gaXM8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp2YWx1ZSkgPyBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpIDogbnVs
bHB0cjsKIAogICAgIC8vIFdoYXQgZm9sbG93cyBpcyBhIGxpc3QgdGhhdCBtYXBzIHRoZSBDU1Mg
cHJvcGVydGllcyBpbnRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgZnJvbnQtZW5kCiAgICAgLy8gUmVu
ZGVyU3R5bGUgdmFsdWVzLgpAQCAtMjE1MCw0OCArMjE1MCw0OCBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
ICAgICAgICAgYm9vbCBkaWRTZXQgPSBmYWxzZTsKICAgICAgICAgICAgIGZvciAoQ1NTVmFsdWVM
aXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKICAgICAg
ICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFsdWUoKTsKLSAgICAgICAgICAgICAgICBp
ZiAoaXRlbS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGl0ZW0tPmlzR3JhZGllbnRWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoKnRvQ1NT
R3JhZGllbnRWYWx1ZShpdGVtKS0+Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhpcykpLCBk
aWRTZXQpOworICAgICAgICAgICAgICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPigq
aXRlbSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPENTU0dyYWRpZW50VmFsdWU+KCpp
dGVtKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQo
U3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKCpkb3duY2FzdDxDU1NHcmFkaWVudFZhbHVlPigq
aXRlbSkuZ3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhpcykpLCBkaWRTZXQpOwogICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSgqdG9DU1NJbWFnZUdlbmVy
YXRvclZhbHVlKGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0
PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KCppdGVtKSksIGRpZFNldCk7CiAgICAgICAgICAgICAg
ICAgICAgIGRpZFNldCA9IHRydWU7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc0ltYWdlU2V0VmFsdWUoKSkgewotICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1
ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHRvQ1NTSW1hZ2VTZXRWYWx1ZShpdGVtKSksIGRpZFNldCk7
CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpczxDU1NJbWFnZVNldFZhbHVlPigqaXRlbSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChzZXRPclBl
bmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBkb3duY2FzdDxDU1NJbWFnZVNldFZh
bHVlPihpdGVtKSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7
CiAjZW5kaWYKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoaXRlbS0+
aXNJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
Q29udGVudChjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCB0b0NT
U0ltYWdlVmFsdWUoaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgIGlmIChpczxDU1NJ
bWFnZVZhbHVlPigqaXRlbSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0Q29udGVudChjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBk
b3duY2FzdDxDU1NJbWFnZVZhbHVlPihpdGVtKSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAg
ICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICghaXRlbS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQorICAgICAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKSkK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogY29udGVudFZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZShpdGVtKTsKKyAg
ICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgY29udGVudFZhbHVlID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKTsKIAotICAgICAgICAgICAgICAgIGlmIChjb250ZW50
VmFsdWUtPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0Q29udGVudChjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBkaWRTZXQp
OworICAgICAgICAgICAgICAgIGlmIChjb250ZW50VmFsdWUuaXNTdHJpbmcoKSkgeworICAgICAg
ICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KGNvbnRlbnRWYWx1ZS5nZXRT
dHJpbmdWYWx1ZSgpLmltcGwoKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNBdHRy
KCkpIHsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS5pc0F0dHIoKSkg
ewogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ2FuIGEgbmFtZXNwYWNlIGJlIHNwZWNp
ZmllZCBmb3IgYW4gYXR0cihmb28pPwogICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc3R5
bGUoKS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCiAgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRVbmlxdWUoKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGUucGFyZW50U3R5bGUoKS0+c2V0VW5pcXVlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIFF1YWxpZmllZE5hbWUgYXR0cihudWxsQXRvbSwgY29udGVudFZh
bHVlLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwoKSwgbnVsbEF0b20pOworICAgICAgICAgICAgICAg
ICAgICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0b20sIGNvbnRlbnRWYWx1ZS5nZXRTdHJpbmdW
YWx1ZSgpLmltcGwoKSwgbnVsbEF0b20pOwogICAgICAgICAgICAgICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlID0gc3RhdGUuZWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUoYXR0cik7CiAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQodmFsdWUuaXNOdWxs
KCkgPyBlbXB0eUF0b20gOiB2YWx1ZS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAg
ICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBm
YWN0IHRoYXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZS4KICAgICAgICAg
ICAgICAgICAgICAgbV9ydWxlU2V0cy5mZWF0dXJlcygpLmF0dHJpYnV0ZUNhbm9uaWNhbExvY2Fs
TmFtZXNJblJ1bGVzLmFkZChhdHRyLmxvY2FsTmFtZSgpLmltcGwoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIG1fcnVsZVNldHMuZmVhdHVyZXMoKS5hdHRyaWJ1dGVMb2NhbE5hbWVzSW5SdWxlcy5h
ZGQoYXR0ci5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
Y29udGVudFZhbHVlLT5pc0NvdW50ZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBDb3VudGVy
KiBjb3VudGVyVmFsdWUgPSBjb250ZW50VmFsdWUtPmdldENvdW50ZXJWYWx1ZSgpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoY29udGVudFZhbHVlLmlzQ291bnRlcigpKSB7CisgICAgICAg
ICAgICAgICAgICAgIENvdW50ZXIqIGNvdW50ZXJWYWx1ZSA9IGNvbnRlbnRWYWx1ZS5nZXRDb3Vu
dGVyVmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgRUxpc3RTdHlsZVR5cGUgbGlzdFN0eWxl
VHlwZSA9IE5vbmVMaXN0U3R5bGU7CiAgICAgICAgICAgICAgICAgICAgIENTU1ZhbHVlSUQgbGlz
dFN0eWxlSWRlbnQgPSBjb3VudGVyVmFsdWUtPmxpc3RTdHlsZUlkZW50KCk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChsaXN0U3R5bGVJZGVudCAhPSBDU1NWYWx1ZU5vbmUpCkBAIC0yMjAwLDcg
KzIyMDAsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRDb250ZW50KFdURjo6bW92ZShjb3VudGVyKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAg
ICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKGNvbnRlbnRWYWx1ZS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVlLmdldFZhbHVlSUQoKSkgewogICAgICAg
ICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlT3BlblF1b3RlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChPUEVOX1FVT1RFLCBkaWRTZXQpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKQEAgLTIyNTgsMjIgKzIyNTgsMjIg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBp
ZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRRdW90ZXMoMCk7
CisgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRRdW90ZXMobnVsbHB0cik7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgp
KSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSB0b0NTU1ZhbHVlTGlzdCh2YWx1
ZSk7CisgICAgICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpIHsKKyAgICAgICAgICAg
IENTU1ZhbHVlTGlzdCYgbGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKICAg
ICAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiBxdW90ZXM7Ci0gICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3QtPmxlbmd0aCgpOyBpICs9IDIpIHsK
LSAgICAgICAgICAgICAgICBDU1NWYWx1ZSogZmlyc3QgPSBsaXN0LT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKGkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0
aCgpOyBpICs9IDIpIHsKKyAgICAgICAgICAgICAgICBDU1NWYWx1ZSogZmlyc3QgPSBsaXN0Lml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CiAgICAgICAgICAgICAgICAgLy8gaXRlbSgpIHJldHVy
bnMgbnVsbCBpZiBvdXQgb2YgYm91bmRzIHNvIHRoaXMgaXMgc2FmZS4KLSAgICAgICAgICAgICAg
ICBDU1NWYWx1ZSogc2Vjb25kID0gbGlzdC0+aXRlbShpICsgMSk7CisgICAgICAgICAgICAgICAg
Q1NTVmFsdWUqIHNlY29uZCA9IGxpc3QuaXRlbShpICsgMSk7CiAgICAgICAgICAgICAgICAgaWYg
KCFzZWNvbmQpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGZpcnN0LT5pc1ByaW1pdGl2ZVZhbHVl
KCkpOwotICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHNl
Y29uZC0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgc3RhcnRR
dW90ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoZmlyc3QpLT5nZXRTdHJpbmdWYWx1ZSgpOwotICAg
ICAgICAgICAgICAgIFN0cmluZyBlbmRRdW90ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoc2Vjb25k
KS0+Z2V0U3RyaW5nVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmZpcnN0KSk7CisgICAgICAgICAg
ICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCpzZWNvbmQpKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc3RhcnRRdW90ZSA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZmlyc3QpLmdldFN0cmluZ1ZhbHVlKCk7CisgICAgICAg
ICAgICAgICAgU3RyaW5nIGVuZFF1b3RlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpz
ZWNvbmQpLmdldFN0cmluZ1ZhbHVlKCk7CiAgICAgICAgICAgICAgICAgcXVvdGVzLmFwcGVuZChz
dGQ6Om1ha2VfcGFpcihzdGFydFF1b3RlLCBlbmRRdW90ZSkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UXVvdGVzKFF1b3Rlc0RhdGE6OmNyZWF0ZShxdW90
ZXMpKTsKQEAgLTIzMTgsMjQgKzIzMTgsMjQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFN0eWxlOjpjb21wdXRlZEZvbnRTaXpl
RnJvbVNwZWNpZmllZFNpemUoZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKSwgZm9udERl
c2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHVzZVNWR1pvb21SdWxlcygpLCBzdGF0ZS5zdHls
ZSgpLCBkb2N1bWVudCgpKSk7CiAgICAgICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbik7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUt
PmlzRm9udFZhbHVlKCkpIHsKLSAgICAgICAgICAgIENTU0ZvbnRWYWx1ZSogZm9udCA9IHRvQ1NT
Rm9udFZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghZm9udC0+c3R5bGUgfHwgIWZvbnQt
PnZhcmlhbnQgfHwgIWZvbnQtPndlaWdodAotICAgICAgICAgICAgICAgIHx8ICFmb250LT5zaXpl
IHx8ICFmb250LT5saW5lSGVpZ2h0IHx8ICFmb250LT5mYW1pbHkpCisgICAgICAgIH0gZWxzZSBp
ZiAoaXM8Q1NTRm9udFZhbHVlPigqdmFsdWUpKSB7CisgICAgICAgICAgICBDU1NGb250VmFsdWUm
IGZvbnQgPSBkb3duY2FzdDxDU1NGb250VmFsdWU+KCp2YWx1ZSk7CisgICAgICAgICAgICBpZiAo
IWZvbnQuc3R5bGUgfHwgIWZvbnQudmFyaWFudCB8fCAhZm9udC53ZWlnaHQKKyAgICAgICAgICAg
ICAgICB8fCAhZm9udC5zaXplIHx8ICFmb250LmxpbmVIZWlnaHQgfHwgIWZvbnQuZmFtaWx5KQog
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlGb250U3R5bGUsIGZvbnQtPnN0eWxlLmdldCgpKTsKLSAgICAgICAgICAgIGFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlGb250VmFyaWFudCwgZm9udC0+dmFyaWFudC5nZXQoKSk7Ci0gICAg
ICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCwgZm9udC0+d2VpZ2h0
LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U3R5bGUs
IGZvbnQuc3R5bGUuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUZvbnRWYXJpYW50LCBmb250LnZhcmlhbnQuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGZvbnQud2VpZ2h0LmdldCgpKTsKICAgICAgICAg
ICAgIC8vIFRoZSBwcmV2aW91cyBwcm9wZXJ0aWVzIGNhbiBkaXJ0eSBvdXIgZm9udCBidXQgdGhl
eSBkb24ndCB0cnkgdG8gcmVhZCB0aGUgZm9udCdzCiAgICAgICAgICAgICAvLyBwcm9wZXJ0aWVz
IGJhY2ssIHdoaWNoIGlzIHNhZmUuIEhvd2V2ZXIgaWYgZm9udC1zaXplIGlzIHVzaW5nIHRoZSAn
ZXgnIHVuaXQsIGl0IHdpbGwKICAgICAgICAgICAgIC8vIG5lZWQgcXVlcnkgdGhlIGRpcnRpZWQg
Zm9udCdzIHgtaGVpZ2h0IHRvIGdldCB0aGUgY29tcHV0ZWQgc2l6ZS4gVG8gYmUgc2FmZSBpbiB0
aGlzCiAgICAgICAgICAgICAvLyBjYXNlLCBsZXQncyBqdXN0IHVwZGF0ZSB0aGUgZm9udCBub3cu
CiAgICAgICAgICAgICB1cGRhdGVGb250KCk7Ci0gICAgICAgICAgICBhcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5Rm9udFNpemUsIGZvbnQtPnNpemUuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBmb250LnNpemUuZ2V0KCkpOwogCi0gICAgICAg
ICAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoZm9udC0+bGluZUhlaWdodC5nZXQoKSk7Cisg
ICAgICAgICAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoZm9udC5saW5lSGVpZ2h0LmdldCgp
KTsKIAotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIGZv
bnQtPmZhbWlseS5nZXQoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
Rm9udEZhbWlseSwgZm9udC5mYW1pbHkuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
bjsKIApAQCAtMjQwNSwxNyArMjQwNSwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogCiAgICAgICAgIGZvciAo
Q1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkp
IHsKICAgICAgICAgICAgIENTU1ZhbHVlKiBjdXJyVmFsdWUgPSBpLnZhbHVlKCk7Ci0gICAgICAg
ICAgICBpZiAoIWN1cnJWYWx1ZS0+aXNTaGFkb3dWYWx1ZSgpKQorICAgICAgICAgICAgaWYgKCFp
czxDU1NTaGFkb3dWYWx1ZT4oKmN1cnJWYWx1ZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBDU1NTaGFkb3dWYWx1ZSogaXRlbSA9IHRvQ1NTU2hhZG93VmFsdWUoY3Vy
clZhbHVlKTsKLSAgICAgICAgICAgIGludCB4ID0gaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+
KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7Ci0gICAgICAgICAgICBpbnQgeSA9
IGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25E
YXRhKCkpOwotICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+
Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSkgOiAw
OwotICAgICAgICAgICAgaW50IHNwcmVhZCA9IGl0ZW0tPnNwcmVhZCA/IGl0ZW0tPnNwcmVhZC0+
Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSkgOiAw
OwotICAgICAgICAgICAgU2hhZG93U3R5bGUgc2hhZG93U3R5bGUgPSBpdGVtLT5zdHlsZSAmJiBp
dGVtLT5zdHlsZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlSW5zZXQgPyBJbnNldCA6IE5vcm1h
bDsKKyAgICAgICAgICAgIENTU1NoYWRvd1ZhbHVlJiBpdGVtID0gZG93bmNhc3Q8Q1NTU2hhZG93
VmFsdWU+KCpjdXJyVmFsdWUpOworICAgICAgICAgICAgaW50IHggPSBpdGVtLngtPmNvbXB1dGVM
ZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOworICAgICAgICAg
ICAgaW50IHkgPSBpdGVtLnktPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENv
bnZlcnNpb25EYXRhKCkpOworICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLmJsdXIgPyBpdGVt
LmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRh
KCkpIDogMDsKKyAgICAgICAgICAgIGludCBzcHJlYWQgPSBpdGVtLnNwcmVhZCA/IGl0ZW0uc3By
ZWFkLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgp
KSA6IDA7CisgICAgICAgICAgICBTaGFkb3dTdHlsZSBzaGFkb3dTdHlsZSA9IGl0ZW0uc3R5bGUg
JiYgaXRlbS5zdHlsZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlSW5zZXQgPyBJbnNldCA6IE5v
cm1hbDsKICAgICAgICAgICAgIENvbG9yIGNvbG9yOwotICAgICAgICAgICAgaWYgKGl0ZW0tPmNv
bG9yKQotICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRl
bS0+Y29sb3IuZ2V0KCkpOworICAgICAgICAgICAgaWYgKGl0ZW0uY29sb3IpCisgICAgICAgICAg
ICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLmNvbG9yLmdldCgpKTsK
ICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRlLnN0eWxlKCkpCiAgICAgICAgICAgICAgICAgY29s
b3IgPSBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpOwogCkBAIC0yNDM0LDE3ICsyNDM0LDE3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
IXZhbHVlLT5pc1JlZmxlY3RWYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1JlZmxlY3RWYWx1
ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDU1NSZWZsZWN0VmFs
dWUqIHJlZmxlY3RWYWx1ZSA9IHRvQ1NTUmVmbGVjdFZhbHVlKHZhbHVlKTsKKyAgICAgICAgQ1NT
UmVmbGVjdFZhbHVlJiByZWZsZWN0VmFsdWUgPSBkb3duY2FzdDxDU1NSZWZsZWN0VmFsdWU+KCp2
YWx1ZSk7CiAgICAgICAgIFJlZlB0cjxTdHlsZVJlZmxlY3Rpb24+IHJlZmxlY3Rpb24gPSBTdHls
ZVJlZmxlY3Rpb246OmNyZWF0ZSgpOwotICAgICAgICByZWZsZWN0aW9uLT5zZXREaXJlY3Rpb24o
KnJlZmxlY3RWYWx1ZS0+ZGlyZWN0aW9uKCkpOwotICAgICAgICBpZiAocmVmbGVjdFZhbHVlLT5v
ZmZzZXQoKSkKLSAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE9mZnNldChyZWZsZWN0VmFsdWUt
Pm9mZnNldCgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNl
bnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0YXRlLmNzc1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEoKSkpOworICAgICAgICByZWZsZWN0aW9uLT5zZXREaXJlY3Rpb24oKnJlZmxl
Y3RWYWx1ZS5kaXJlY3Rpb24oKSk7CisgICAgICAgIGlmIChyZWZsZWN0VmFsdWUub2Zmc2V0KCkp
CisgICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVjdFZhbHVlLm9mZnNldCgp
LT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJz
aW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoKSkpOwogICAgICAgICBOaW5lUGllY2VJbWFnZSBtYXNrOwogICAgICAgICBtYXNrLnNldE1h
c2tEZWZhdWx0cygpOwotICAgICAgICBtX3N0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlKGlkLCBy
ZWZsZWN0VmFsdWUtPm1hc2soKSwgbWFzayk7CisgICAgICAgIG1fc3R5bGVNYXAubWFwTmluZVBp
ZWNlSW1hZ2UoaWQsIHJlZmxlY3RWYWx1ZS5tYXNrKCksIG1hc2spOwogICAgICAgICByZWZsZWN0
aW9uLT5zZXRNYXNrKG1hc2spOwogCiAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJveFJlZmxl
Y3QocmVmbGVjdGlvbi5yZWxlYXNlKCkpOwpAQCAtMjY2NSwxMCArMjY2NSwxMCBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCF2YWx1
ZS0+aXNMaW5lQm94Q29udGFpblZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTTGluZUJveENv
bnRhaW5WYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRMaW5lQm94Q29udGFpbih0b0NTU0xpbmVCb3hDb250YWluVmFsdWUodmFs
dWUpLT52YWx1ZSgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUJveENvbnRhaW4o
ZG93bmNhc3Q8Q1NTTGluZUJveENvbnRhaW5WYWx1ZT4oKnZhbHVlKS52YWx1ZSgpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjY3OSwxOSArMjY3OSwxOSBAQCB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNW
YWx1ZUxpc3QoKSkKKyAgICAgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
biA9IHN0YXRlLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBDU1NWYWx1ZUxp
c3QqIGxpc3QgPSB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSk7CisgICAgICAgIENTU1ZhbHVlTGlzdCYg
bGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKICAgICAgICAgUmVmUHRyPEZv
bnRGZWF0dXJlU2V0dGluZ3M+IHNldHRpbmdzID0gRm9udEZlYXR1cmVTZXR0aW5nczo6Y3JlYXRl
KCk7Ci0gICAgICAgIGludCBsZW4gPSBsaXN0LT5sZW5ndGgoKTsKLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBsaXN0
LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwotICAgICAgICAgICAgaWYgKCFpdGVtLT5pc0Zv
bnRGZWF0dXJlVmFsdWUoKSkKKyAgICAgICAgaW50IGxlbmd0aCA9IGxpc3QubGVuZ3RoKCk7Cisg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIENT
U1ZhbHVlKiBpdGVtID0gbGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAg
ICAgaWYgKCFpczxDU1NGb250RmVhdHVyZVZhbHVlPigqaXRlbSkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBDU1NGb250RmVhdHVyZVZhbHVlKiBmZWF0dXJlID0gdG9D
U1NGb250RmVhdHVyZVZhbHVlKGl0ZW0pOwotICAgICAgICAgICAgc2V0dGluZ3MtPmFwcGVuZChG
b250RmVhdHVyZShmZWF0dXJlLT50YWcoKSwgZmVhdHVyZS0+dmFsdWUoKSkpOworICAgICAgICAg
ICAgQ1NTRm9udEZlYXR1cmVWYWx1ZSYgZmVhdHVyZSA9IGRvd25jYXN0PENTU0ZvbnRGZWF0dXJl
VmFsdWU+KCppdGVtKTsKKyAgICAgICAgICAgIHNldHRpbmdzLT5hcHBlbmQoRm9udEZlYXR1cmUo
ZmVhdHVyZS50YWcoKSwgZmVhdHVyZS52YWx1ZSgpKSk7CiAgICAgICAgIH0KICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldEZlYXR1cmVTZXR0aW5ncyhzZXR0aW5ncy5yZWxlYXNlKCkpOwogICAg
ICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKQEAgLTI4MzAsOCArMjgz
MCw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICBDU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlKiBncmlkVGVtcGxhdGVBcmVhc1ZhbHVlID0g
dG9DU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlKHZhbHVlKTsKLSAgICAgICAgY29uc3QgTmFtZWRH
cmlkQXJlYU1hcCYgbmV3TmFtZWRHcmlkQXJlYXMgPSBncmlkVGVtcGxhdGVBcmVhc1ZhbHVlLT5n
cmlkQXJlYU1hcCgpOworICAgICAgICBDU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlJiBncmlkVGVt
cGxhdGVBcmVhc1ZhbHVlID0gZG93bmNhc3Q8Q1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZT4oKnZh
bHVlKTsKKyAgICAgICAgY29uc3QgTmFtZWRHcmlkQXJlYU1hcCYgbmV3TmFtZWRHcmlkQXJlYXMg
PSBncmlkVGVtcGxhdGVBcmVhc1ZhbHVlLmdyaWRBcmVhTWFwKCk7CiAKICAgICAgICAgTmFtZWRH
cmlkTGluZXNNYXAgbmFtZWRHcmlkQ29sdW1uTGluZXMgPSBzdGF0ZS5zdHlsZSgpLT5uYW1lZEdy
aWRDb2x1bW5MaW5lcygpOwogICAgICAgICBOYW1lZEdyaWRMaW5lc01hcCBuYW1lZEdyaWRSb3dM
aW5lcyA9IHN0YXRlLnN0eWxlKCktPm5hbWVkR3JpZFJvd0xpbmVzKCk7CkBAIC0yODQwLDI3ICsy
ODQwLDI3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE5hbWVkR3Jp
ZENvbHVtbkxpbmVzKG5hbWVkR3JpZENvbHVtbkxpbmVzKTsKICAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0TmFtZWRHcmlkUm93TGluZXMobmFtZWRHcmlkUm93TGluZXMpOwogCi0gICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldE5hbWVkR3JpZEFyZWEoZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS0+Z3Jp
ZEFyZWFNYXAoKSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE5hbWVkR3JpZEFyZWFSb3dD
b3VudChncmlkVGVtcGxhdGVBcmVhc1ZhbHVlLT5yb3dDb3VudCgpKTsKLSAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0TmFtZWRHcmlkQXJlYUNvbHVtbkNvdW50KGdyaWRUZW1wbGF0ZUFyZWFzVmFs
dWUtPmNvbHVtbkNvdW50KCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXROYW1lZEdyaWRB
cmVhKGdyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuZ3JpZEFyZWFNYXAoKSk7CisgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldE5hbWVkR3JpZEFyZWFSb3dDb3VudChncmlkVGVtcGxhdGVBcmVhc1ZhbHVl
LnJvd0NvdW50KCkpOworICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhQ29s
dW1uQ291bnQoZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5jb2x1bW5Db3VudCgpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZEF1dG9GbG93OiB7
CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGdyaWRBdXRvRmxvdywgR3JpZEF1
dG9GbG93KTsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgaWYg
KCFpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IENTU1ZhbHVlTGlzdCogbGlzdCA9IHRvQ1NTVmFsdWVMaXN0KHZhbHVlKTsKKyAgICAgICAgQ1NT
VmFsdWVMaXN0JiBsaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpOwogCi0gICAg
ICAgIGlmICghbGlzdC0+bGVuZ3RoKCkpIHsKKyAgICAgICAgaWYgKCFsaXN0Lmxlbmd0aCgpKSB7
CiAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRHcmlkQXV0b0Zsb3coUmVuZGVyU3R5bGU6
OmluaXRpYWxHcmlkQXV0b0Zsb3coKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3QgPSB0b0NTU1ByaW1pdGl2ZVZhbHVl
KGxpc3QtPml0ZW0oMCkpOwotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kID0gbGlz
dC0+bGVuZ3RoKCkgPT0gMiA/IHRvQ1NTUHJpbWl0aXZlVmFsdWUobGlzdC0+aXRlbSgxKSkgOiBu
dWxscHRyOworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgZmlyc3QgPSBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oKmxpc3QuaXRlbSgwKSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBzZWNvbmQgPSBsaXN0Lmxlbmd0aCgpID09IDIgPyBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4obGlzdC5pdGVtKDEpKSA6IG51bGxwdHI7CiAKICAgICAgICAgR3JpZEF1dG9GbG93IGF1dG9G
bG93ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxHcmlkQXV0b0Zsb3coKTsKLSAgICAgICAgc3dpdGNo
IChmaXJzdC0+Z2V0VmFsdWVJRCgpKSB7CisgICAgICAgIHN3aXRjaCAoZmlyc3QuZ2V0VmFsdWVJ
RCgpKSB7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVSb3c6CiAgICAgICAgICAgICBpZiAoc2Vjb25k
KQogICAgICAgICAgICAgICAgIGF1dG9GbG93ID0gc2Vjb25kLT5nZXRWYWx1ZUlEKCkgPT0gQ1NT
VmFsdWVEZW5zZSA/IEF1dG9GbG93Um93RGVuc2UgOiBBdXRvRmxvd1N0YWNrUm93OwpAQCAtMjkw
NywxMiArMjkwNywxMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBicmVhazsKICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0U2Nyb2xsU25hcERlc3RpbmF0aW9uOiB7CiAgICAgICAgIEhBTkRMRV9J
TkhFUklUX0FORF9JTklUSUFMKHNjcm9sbFNuYXBEZXN0aW5hdGlvbiwgU2Nyb2xsU25hcERlc3Rp
bmF0aW9uKQotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRTY3JvbGxTbmFwRGVzdGluYXRpb24o
cGFyc2VTbmFwQ29vcmRpbmF0ZVBhaXIodG9DU1NWYWx1ZUxpc3QoKnZhbHVlKSwgMCkpOworICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRTY3JvbGxTbmFwRGVzdGluYXRpb24ocGFyc2VTbmFwQ29v
cmRpbmF0ZVBhaXIoZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpLCAwKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNjcm9sbFNuYXBDb29y
ZGluYXRlOiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHNjcm9sbFNuYXBD
b29yZGluYXRlcywgU2Nyb2xsU25hcENvb3JkaW5hdGVzKQotICAgICAgICBDU1NWYWx1ZUxpc3Qm
IHZhbHVlTGlzdCA9IHRvQ1NTVmFsdWVMaXN0KCp2YWx1ZSk7CisgICAgICAgIENTU1ZhbHVlTGlz
dCYgdmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpOwogICAgICAgICBB
U1NFUlQoISh2YWx1ZUxpc3QubGVuZ3RoKCkgJSAyKSk7CiAgICAgICAgIHNpemVfdCBwb2ludENv
dW50ID0gdmFsdWVMaXN0Lmxlbmd0aCgpIC8gMjsKICAgICAgICAgVmVjdG9yPExlbmd0aFNpemU+
IGNvb3JkaW5hdGVzOwpAQCAtMzIyMCwyNCArMzIyMCwyNCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogCiBQYXNz
UmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlKQogewotICAgIGlmICh2YWx1ZS0+aXNJbWFnZVZh
bHVlKCkpCi0gICAgICAgIHJldHVybiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHks
IHRvQ1NTSW1hZ2VWYWx1ZSh2YWx1ZSkpOworICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPigqdmFs
dWUpKQorICAgICAgICByZXR1cm4gY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBk
b3duY2FzdDxDU1NJbWFnZVZhbHVlPih2YWx1ZSkpOwogCi0gICAgaWYgKHZhbHVlLT5pc0ltYWdl
R2VuZXJhdG9yVmFsdWUoKSkgewotICAgICAgICBpZiAodmFsdWUtPmlzR3JhZGllbnRWYWx1ZSgp
KQotICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0
eSwgKnRvQ1NTR3JhZGllbnRWYWx1ZSh2YWx1ZSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVk
KHRoaXMpKTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9w
ZXJ0eSwgdG9DU1NJbWFnZUdlbmVyYXRvclZhbHVlKCp2YWx1ZSkpOworICAgIGlmIChpczxDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlPigqdmFsdWUpKSB7CisgICAgICAgIGlmIChpczxDU1NHcmFkaWVu
dFZhbHVlPigqdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yUGVuZGluZ0Zy
b21WYWx1ZShwcm9wZXJ0eSwgKmRvd25jYXN0PENTU0dyYWRpZW50VmFsdWU+KCp2YWx1ZSkuZ3Jh
ZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhpcykpOworICAgICAgICByZXR1cm4gZ2VuZXJhdGVk
T3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZh
bHVlPigqdmFsdWUpKTsKICAgICB9CiAKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKLSAgICBp
ZiAodmFsdWUtPmlzSW1hZ2VTZXRWYWx1ZSgpKQotICAgICAgICByZXR1cm4gc2V0T3JQZW5kaW5n
RnJvbVZhbHVlKHByb3BlcnR5LCB0b0NTU0ltYWdlU2V0VmFsdWUodmFsdWUpKTsKKyAgICBpZiAo
aXM8Q1NTSW1hZ2VTZXRWYWx1ZT4oKnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIHNldE9yUGVuZGlu
Z0Zyb21WYWx1ZShwcm9wZXJ0eSwgZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4odmFsdWUpKTsK
ICNlbmRpZgogCi0gICAgaWYgKHZhbHVlLT5pc0N1cnNvckltYWdlVmFsdWUoKSkKLSAgICAgICAg
cmV0dXJuIGN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgdG9DU1NDdXJzb3JJbWFn
ZVZhbHVlKHZhbHVlKSk7CisgICAgaWYgKGlzPENTU0N1cnNvckltYWdlVmFsdWU+KCp2YWx1ZSkp
CisgICAgICAgIHJldHVybiBjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIGRvd25j
YXN0PENTU0N1cnNvckltYWdlVmFsdWU+KHZhbHVlKSk7CiAKLSAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAogUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVy
OjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1h
Z2VWYWx1ZSogdmFsdWUpCkBAIC0zMjUwLDkgKzMyNTAsOSBAQCBQYXNzUmVmUHRyPFN0eWxlSW1h
Z2U+IFN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlE
IHBybwogCiBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmdlbmVyYXRlZE9y
UGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZUdlbmVyYXRv
clZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAodmFsdWUuaXNGaWx0ZXJJbWFnZVZhbHVlKCkpIHsK
KyAgICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAgIC8vIEZp
bHRlckltYWdlIG5lZWRzIHRvIGNhbGN1bGF0ZSBGaWx0ZXJPcGVyYXRpb25zLgotICAgICAgICB0
b0NTU0ZpbHRlckltYWdlVmFsdWUodmFsdWUpLmNyZWF0ZUZpbHRlck9wZXJhdGlvbnModGhpcyk7
CisgICAgICAgIGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHZhbHVlKS5jcmVhdGVGaWx0
ZXJPcGVyYXRpb25zKHRoaXMpOwogICAgIH0KIAogICAgIGlmICh2YWx1ZS5pc1BlbmRpbmcoKSkg
ewpAQCAtMzUxNyw5ICszNTE3LDkgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJP
cGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJgogICAgIGlmICgh
aW5WYWx1ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmIChpblZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZShpblZhbHVlKTsKLSAgICAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKQorICAgIGlmIChpczxDU1NQ
cmltaXRpdmVWYWx1ZT4oKmluVmFsdWUpKSB7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBw
cmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaW5WYWx1ZSk7Cisg
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApAQCAtMzUyOSwyMSArMzUyOSwy
MSBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUq
IGluVmFsdWUsIEZpbHRlck9wZXJhdGlvbnMmCiAgICAgRmlsdGVyT3BlcmF0aW9ucyBvcGVyYXRp
b25zOwogICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IGluVmFsdWU7IGkuaGFzTW9y
ZSgpOyBpLmFkdmFuY2UoKSkgewogICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1
ZSgpOwotICAgICAgICBpZiAoIWN1cnJWYWx1ZS0+aXNXZWJLaXRDU1NGaWx0ZXJWYWx1ZSgpKQor
ICAgICAgICBpZiAoIWlzPFdlYktpdENTU0ZpbHRlclZhbHVlPigqY3VyclZhbHVlKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFdlYktpdENTU0ZpbHRlclZhbHVlKiBmaWx0ZXJW
YWx1ZSA9IHRvV2ViS2l0Q1NTRmlsdGVyVmFsdWUoaS52YWx1ZSgpKTsKLSAgICAgICAgRmlsdGVy
T3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUgPSBmaWx0ZXJPcGVyYXRpb25G
b3JUeXBlKGZpbHRlclZhbHVlLT5vcGVyYXRpb25UeXBlKCkpOworICAgICAgICBXZWJLaXRDU1NG
aWx0ZXJWYWx1ZSYgZmlsdGVyVmFsdWUgPSBkb3duY2FzdDxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4o
KmkudmFsdWUoKSk7CisgICAgICAgIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBvcGVy
YXRpb25UeXBlID0gZmlsdGVyT3BlcmF0aW9uRm9yVHlwZShmaWx0ZXJWYWx1ZS5vcGVyYXRpb25U
eXBlKCkpOwogCiAgICAgICAgIGlmIChvcGVyYXRpb25UeXBlID09IEZpbHRlck9wZXJhdGlvbjo6
UkVGRVJFTkNFKSB7Ci0gICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpICE9IDEp
CisgICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUubGVuZ3RoKCkgIT0gMSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIENTU1ZhbHVlKiBhcmd1bWVudCA9IGZpbHRlclZh
bHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApOworICAgICAgICAgICAgQ1NTVmFsdWUqIGFy
Z3VtZW50ID0gZmlsdGVyVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKTsKIAotICAgICAg
ICAgICAgaWYgKCFhcmd1bWVudC0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgaWYg
KCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmFyZ3VtZW50KSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0g
dG9DU1NQcmltaXRpdmVWYWx1ZSgqYXJndW1lbnQpOworICAgICAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCphcmd1
bWVudCk7CiAgICAgICAgICAgICBTdHJpbmcgY3NzVXJsID0gcHJpbWl0aXZlVmFsdWUuZ2V0U3Ry
aW5nVmFsdWUoKTsKICAgICAgICAgICAgIFVSTCB1cmwgPSBtX3N0YXRlLmRvY3VtZW50KCkuY29t
cGxldGVVUkwoY3NzVXJsKTsKIApAQCAtMzU2MCwyNCArMzU2MCwyNCBAQCBib29sIFN0eWxlUmVz
b2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIEZpbHRlck9w
ZXJhdGlvbnMmCiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdFZhbHVlID0gbnVsbHB0
cjsKICAgICAgICAgaWYgKG9wZXJhdGlvblR5cGUgIT0gRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NI
QURPVykgewogICAgICAgICAgICAgYm9vbCBoYXZlTm9uUHJpbWl0aXZlVmFsdWUgPSBmYWxzZTsK
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBmaWx0ZXJWYWx1ZS0+bGVuZ3Ro
KCk7ICsraikgewotICAgICAgICAgICAgICAgIGlmICghZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soaiktPmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IGZpbHRlclZhbHVlLmxlbmd0aCgpOyArK2opIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqZmlsdGVyVmFsdWUuaXRlbVdpdGhv
dXRCb3VuZHNDaGVjayhqKSkpIHsKICAgICAgICAgICAgICAgICAgICAgaGF2ZU5vblByaW1pdGl2
ZVZhbHVlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGhhdmVOb25QcmltaXRpdmVWYWx1
ZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1
ZS0+bGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgZmlyc3RWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZl
VmFsdWUoZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOworICAgICAgICAg
ICAgaWYgKGZpbHRlclZhbHVlLmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIGZpcnN0VmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oZmlsdGVyVmFsdWUuaXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjaygwKSk7CiAgICAgICAgIH0KIAotICAgICAgICBzd2l0Y2ggKGZpbHRlclZhbHVlLT5v
cGVyYXRpb25UeXBlKCkpIHsKKyAgICAgICAgc3dpdGNoIChmaWx0ZXJWYWx1ZS5vcGVyYXRpb25U
eXBlKCkpIHsKICAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6R3JheXNjYWxlRmls
dGVyT3BlcmF0aW9uOgogICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpTZXBpYUZp
bHRlck9wZXJhdGlvbjoKICAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2F0dXJh
dGVGaWx0ZXJPcGVyYXRpb246IHsKICAgICAgICAgICAgIGRvdWJsZSBhbW91bnQgPSAxOwotICAg
ICAgICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA9PSAxKSB7CisgICAgICAgICAgICBp
ZiAoZmlsdGVyVmFsdWUubGVuZ3RoKCkgPT0gMSkgewogICAgICAgICAgICAgICAgIGFtb3VudCA9
IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CiAgICAgICAgICAgICAgICAgaWYgKGZpcnN0
VmFsdWUtPmlzUGVyY2VudGFnZSgpKQogICAgICAgICAgICAgICAgICAgICBhbW91bnQgLz0gMTAw
OwpAQCAtMzU4OCw3ICszNTg4LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJP
cGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJgogICAgICAgICB9
CiAgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Okh1ZVJvdGF0ZUZpbHRlck9wZXJh
dGlvbjogewogICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gMDsKLSAgICAgICAgICAgIGlmIChm
aWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPT0gMSkKKyAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5s
ZW5ndGgoKSA9PSAxKQogICAgICAgICAgICAgICAgIGFuZ2xlID0gZmlyc3RWYWx1ZS0+Y29tcHV0
ZURlZ3JlZXMoKTsKIAogICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5k
KEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShhbmdsZSwgb3BlcmF0aW9u
VHlwZSkpOwpAQCAtMzU5OCw4ICszNTk4LDggQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVG
aWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJgogICAg
ICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpCcmlnaHRuZXNzRmlsdGVyT3BlcmF0aW9u
OgogICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpDb250cmFzdEZpbHRlck9wZXJh
dGlvbjoKICAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6T3BhY2l0eUZpbHRlck9w
ZXJhdGlvbjogewotICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IChmaWx0ZXJWYWx1ZS0+b3Bl
cmF0aW9uVHlwZSgpID09IFdlYktpdENTU0ZpbHRlclZhbHVlOjpCcmlnaHRuZXNzRmlsdGVyT3Bl
cmF0aW9uKSA/IDAgOiAxOwotICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA9
PSAxKSB7CisgICAgICAgICAgICBkb3VibGUgYW1vdW50ID0gKGZpbHRlclZhbHVlLm9wZXJhdGlv
blR5cGUoKSA9PSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6QnJpZ2h0bmVzc0ZpbHRlck9wZXJhdGlv
bikgPyAwIDogMTsKKyAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5sZW5ndGgoKSA9PSAxKSB7
CiAgICAgICAgICAgICAgICAgYW1vdW50ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsK
ICAgICAgICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCiAgICAgICAg
ICAgICAgICAgICAgIGFtb3VudCAvPSAxMDA7CkBAIC0zNjEwLDcgKzM2MTAsNyBAQCBib29sIFN0
eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIEZp
bHRlck9wZXJhdGlvbnMmCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJW
YWx1ZTo6Qmx1ckZpbHRlck9wZXJhdGlvbjogewogICAgICAgICAgICAgTGVuZ3RoIHN0ZERldmlh
dGlvbiA9IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUtPmxl
bmd0aCgpID49IDEpCisgICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUubGVuZ3RoKCkgPj0gMSkK
ICAgICAgICAgICAgICAgICBzdGREZXZpYXRpb24gPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJz
dFZhbHVlLCBzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwogICAgICAgICAgICAg
aWYgKHN0ZERldmlhdGlvbi5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTM2MTksMjEgKzM2MTksMjEgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVG
aWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJW
YWx1ZTo6RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjogewotICAgICAgICAgICAgaWYgKGZpbHRl
clZhbHVlLT5sZW5ndGgoKSAhPSAxKQorICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLmxlbmd0
aCgpICE9IDEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBD
U1NWYWx1ZSogY3NzVmFsdWUgPSBmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygw
KTsKLSAgICAgICAgICAgIGlmICghY3NzVmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKKyAgICAgICAg
ICAgIENTU1ZhbHVlKiBjc3NWYWx1ZSA9IGZpbHRlclZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soMCk7CisgICAgICAgICAgICBpZiAoIWlzPENTU1NoYWRvd1ZhbHVlPigqY3NzVmFsdWUpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBDU1NTaGFkb3dWYWx1ZSog
aXRlbSA9IHRvQ1NTU2hhZG93VmFsdWUoY3NzVmFsdWUpOwotICAgICAgICAgICAgaW50IHggPSBp
dGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSgpKTsKLSAgICAgICAgICAgIGludCB5ID0gaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0
YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CisgICAgICAgICAgICBDU1NTaGFkb3dW
YWx1ZSYgaXRlbSA9IGRvd25jYXN0PENTU1NoYWRvd1ZhbHVlPigqY3NzVmFsdWUpOworICAgICAg
ICAgICAgaW50IHggPSBpdGVtLngtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0
aENvbnZlcnNpb25EYXRhKCkpOworICAgICAgICAgICAgaW50IHkgPSBpdGVtLnktPmNvbXB1dGVM
ZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwogICAgICAgICAg
ICAgSW50UG9pbnQgbG9jYXRpb24oeCwgeSk7Ci0gICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0t
PmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSgpKSA6IDA7CisgICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0uYmx1ciA/
IGl0ZW0uYmx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEoKSkgOiAwOwogICAgICAgICAgICAgQ29sb3IgY29sb3I7Ci0gICAgICAgICAgICBpZiAo
aXRlbS0+Y29sb3IpCi0gICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVW
YWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CisgICAgICAgICAgICBpZiAoaXRlbS5jb2xvcikKKyAg
ICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGl0ZW0uY29sb3Iu
Z2V0KCkpOwogCiAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoRHJv
cFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKGxvY2F0aW9uLCBibHVyLCBjb2xvci5pc1Zh
bGlkKCkgPyBjb2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCkpOwogICAgICAgICAgICAgYnJlYWs7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvVHJhbnNmb3JtRnVuY3Rpb25zLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9UcmFuc2Zvcm1GdW5jdGlvbnMuY3BwCmluZGV4IDA2NjNjMzEx
OTU4MTI3ZTI4ODhhN2Q5MDQyNjUzZTliMWFhYWVhZWMuLjlmY2YwNGM5ZmNlODgwNGI0NjlkNWRl
YzFiZjk2MTA5NjcyOTY2MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9UcmFuc2Zv
cm1GdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9UcmFuc2Zvcm1GdW5jdGlv
bnMuY3BwCkBAIC05MiwxNiArOTIsMTYgQEAgYm9vbCB0cmFuc2Zvcm1zRm9yVmFsdWUoQ1NTVmFs
dWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXIKICAgICBm
b3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5j
ZSgpKSB7CiAgICAgICAgIENTU1ZhbHVlKiBjdXJyVmFsdWUgPSBpLnZhbHVlKCk7CiAKLSAgICAg
ICAgaWYgKCFjdXJyVmFsdWUtPmlzV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoKSkKKyAgICAgICAg
aWYgKCFpczxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZT4oKmN1cnJWYWx1ZSkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSogdHJhbnNmb3Jt
VmFsdWUgPSB0b1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKGkudmFsdWUoKSk7Ci0gICAgICAgIGlm
ICghdHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpKQorICAgICAgICBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZSYgdHJhbnNmb3JtVmFsdWUgPSBkb3duY2FzdDxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZT4o
KmkudmFsdWUoKSk7CisgICAgICAgIGlmICghdHJhbnNmb3JtVmFsdWUubGVuZ3RoKCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBib29sIGhhdmVOb25QcmltaXRpdmVWYWx1ZSA9
IGZhbHNlOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdHJhbnNmb3JtVmFsdWUt
Pmxlbmd0aCgpOyArK2opIHsKLSAgICAgICAgICAgIGlmICghdHJhbnNmb3JtVmFsdWUtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soaiktPmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGogPSAwOyBqIDwgdHJhbnNmb3JtVmFsdWUubGVuZ3RoKCk7ICsraikgeworICAg
ICAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soaikpKSB7CiAgICAgICAgICAgICAgICAgaGF2ZU5vblByaW1pdGl2
ZVZhbHVlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAg
LTEwOSwyNyArMTA5LDI3IEBAIGJvb2wgdHJhbnNmb3Jtc0ZvclZhbHVlKENTU1ZhbHVlKiB2YWx1
ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyCiAgICAgICAgIGlmICho
YXZlTm9uUHJpbWl0aXZlVmFsdWUpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSogZmlyc3RWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNm
b3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOworICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSYgZmlyc3RWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNm
b3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7CiAKLSAgICAgICAgc3dpdGNoICh0
cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSB7CisgICAgICAgIHN3aXRjaCAodHJhbnNm
b3JtVmFsdWUub3BlcmF0aW9uVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOgogICAgICAgICBjYXNlIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb246CiAgICAgICAgIGNhc2Ug
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlvbjogewogICAg
ICAgICAgICAgZG91YmxlIHN4ID0gMS4wOwogICAgICAgICAgICAgZG91YmxlIHN5ID0gMS4wOwot
ICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAg
ICAgICBzeSA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBpZiAo
dHJhbnNmb3JtVmFsdWUub3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAgICAgICAgICAgc3kgPSBmaXJzdFZh
bHVlLmdldERvdWJsZVZhbHVlKCk7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBzeCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICBpZiAo
dHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFu
c2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBzeSA9IHNlY29uZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAg
ICAgIHN4ID0gZmlyc3RWYWx1ZS5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgIGlm
ICh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICBpZiAo
dHJhbnNmb3JtVmFsdWUubGVuZ3RoKCkgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSYgc2Vjb25kVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgc3kgPSBzZWNvbmRWYWx1ZS5nZXREb3VibGVWYWx1ZSgpOwogICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc3g7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgb3BlcmF0aW9ucy5v
cGVyYXRpb25zKCkuYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoc3gsIHN5
LCAxLjAsIHRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5
cGUoKSkpKTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTY2Fs
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHN4LCBzeSwgMS4wLCB0cmFuc2Zvcm1PcGVyYXRp
b25UeXBlKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSkpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNj
YWxlWlRyYW5zZm9ybU9wZXJhdGlvbjoKQEAgLTEzNywyNSArMTM3LDI1IEBAIGJvb2wgdHJhbnNm
b3Jtc0ZvclZhbHVlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSYgY29udmVyCiAgICAgICAgICAgICBkb3VibGUgc3ggPSAxLjA7CiAgICAgICAgICAgICBk
b3VibGUgc3kgPSAxLjA7CiAgICAgICAgICAgICBkb3VibGUgc3ogPSAxLjA7Ci0gICAgICAgICAg
ICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6U2NhbGVaVHJhbnNmb3JtT3BlcmF0aW9uKQotICAgICAgICAgICAgICAgIHN6ID0g
Zmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHRyYW5z
Zm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNj
YWxlWVRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICBzeSA9IGZpcnN0VmFsdWUt
PmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUub3BlcmF0
aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVpUcmFuc2Zvcm1PcGVy
YXRpb24pCisgICAgICAgICAgICAgICAgc3ogPSBmaXJzdFZhbHVlLmdldERvdWJsZVZhbHVlKCk7
CisgICAgICAgICAgICBlbHNlIGlmICh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkgPT0g
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlvbikKKyAgICAg
ICAgICAgICAgICBzeSA9IGZpcnN0VmFsdWUuZ2V0RG91YmxlVmFsdWUoKTsKICAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgIHN4ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUo
KTsKLSAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSAh
PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAyKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdGhpcmRWYWx1ZSA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MikpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3ogPSB0aGlyZFZhbHVlLT5nZXREb3VibGVW
YWx1ZSgpOworICAgICAgICAgICAgICAgIHN4ID0gZmlyc3RWYWx1ZS5nZXREb3VibGVWYWx1ZSgp
OworICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkgIT0g
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbikgeworICAg
ICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUubGVuZ3RoKCkgPiAyKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgdGhpcmRWYWx1ZSA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHND
aGVjaygyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzeiA9IHRoaXJkVmFsdWUuZ2V0RG91
YmxlVmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBp
ZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpID4gMSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh0
cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzeSA9IHNlY29uZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAg
ICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUubGVuZ3RoKCkgPiAxKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgc2Vjb25kVmFsdWUgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MSkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBzZWNvbmRWYWx1ZS5nZXREb3VibGVW
YWx1ZSgpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAg
ICAgIHN5ID0gc3g7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUoc3gsIHN5LCBzeiwgdHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1
ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25z
KCkuYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoc3gsIHN5LCBzeiwgdHJh
bnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkpKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246CkBAIC0xNjMsMTQgKzE2Mywx
NCBAQCBib29sIHRyYW5zZm9ybXNGb3JWYWx1ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcgogICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uOiB7CiAgICAgICAgICAgICBM
ZW5ndGggdHggPSBMZW5ndGgoMCwgRml4ZWQpOwogICAgICAgICAgICAgTGVuZ3RoIHR5ID0gTGVu
Z3RoKDAsIEZpeGVkKTsKLSAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9u
VHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3Bl
cmF0aW9uKQotICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RW
YWx1ZSwgY29udmVyc2lvbkRhdGEpOworICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLm9w
ZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5z
Zm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3Ro
KCZmaXJzdFZhbHVlLCBjb252ZXJzaW9uRGF0YSk7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICB0eCA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIGNvbnZlcnNp
b25EYXRhKTsKLSAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5
cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWFRyYW5zZm9ybU9wZXJh
dGlvbikgewotICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgp
ID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29u
ZFZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygxKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRUb0Zs
b2F0TGVuZ3RoKHNlY29uZFZhbHVlLCBjb252ZXJzaW9uRGF0YSk7CisgICAgICAgICAgICAgICAg
dHggPSBjb252ZXJ0VG9GbG9hdExlbmd0aCgmZmlyc3RWYWx1ZSwgY29udmVyc2lvbkRhdGEpOwor
ICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkgIT0gV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLmxlbmd0aCgpID4gMSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHNlY29uZFZhbHVlID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRM
ZW5ndGgoJnNlY29uZFZhbHVlLCBjb252ZXJzaW9uRGF0YSk7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xNzgsNyArMTc4LDcgQEAg
Ym9vbCB0cmFuc2Zvcm1zRm9yVmFsdWUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhJiBjb252ZXIKICAgICAgICAgICAgIGlmICh0eC5pc1VuZGVmaW5lZCgp
IHx8IHR5LmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUodHgsIHR5LCBMZW5ndGgoMCwgRml4ZWQpLCB0cmFuc2Zvcm1P
cGVyYXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAg
ICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3Bl
cmF0aW9uOjpjcmVhdGUodHgsIHR5LCBMZW5ndGgoMCwgRml4ZWQpLCB0cmFuc2Zvcm1PcGVyYXRp
b25UeXBlKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSkpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRy
YW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb246CkBAIC0xODYsMjAgKzE4NiwyMCBAQCBib29sIHRy
YW5zZm9ybXNGb3JWYWx1ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEmIGNvbnZlcgogICAgICAgICAgICAgTGVuZ3RoIHR4ID0gTGVuZ3RoKDAsIEZpeGVk
KTsKICAgICAgICAgICAgIExlbmd0aCB0eSA9IExlbmd0aCgwLCBGaXhlZCk7CiAgICAgICAgICAg
ICBMZW5ndGggdHogPSBMZW5ndGgoMCwgRml4ZWQpOwotICAgICAgICAgICAgaWYgKHRyYW5zZm9y
bVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5z
bGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb24pCi0gICAgICAgICAgICAgICAgdHogPSBjb252ZXJ0VG9G
bG9hdExlbmd0aChmaXJzdFZhbHVlLCBjb252ZXJzaW9uRGF0YSk7Ci0gICAgICAgICAgICBlbHNl
IGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQotICAgICAgICAgICAgICAgIHR5
ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgY29udmVyc2lvbkRhdGEpOworICAg
ICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAg
ICAgICB0eiA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKCZmaXJzdFZhbHVlLCBjb252ZXJzaW9uRGF0
YSk7CisgICAgICAgICAgICBlbHNlIGlmICh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkg
PT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb24p
CisgICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0VG9GbG9hdExlbmd0aCgmZmlyc3RWYWx1ZSwg
Y29udmVyc2lvbkRhdGEpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdHgg
PSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBjb252ZXJzaW9uRGF0YSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDIpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0aGlyZFZhbHVlID0gdG9DU1NQ
cmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eiA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKHRoaXJk
VmFsdWUsIGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAgICAgICAgICB0eCA9IGNvbnZlcnRUb0Zs
b2F0TGVuZ3RoKCZmaXJzdFZhbHVlLCBjb252ZXJzaW9uRGF0YSk7CisgICAgICAgICAgICAgICAg
aWYgKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6VHJhbnNsYXRlWFRyYW5zZm9ybU9wZXJhdGlvbikgeworICAgICAgICAgICAgICAgICAg
ICBpZiAodHJhbnNmb3JtVmFsdWUubGVuZ3RoKCkgPiAyKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgdGhpcmRWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0eiA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKCZ0aGlyZFZhbHVl
LCBjb252ZXJzaW9uRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZl
VmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChzZWNvbmRWYWx1ZSwg
Y29udmVyc2lvbkRhdGEpOworICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUu
bGVuZ3RoKCkgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSYgc2Vjb25kVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZh
bHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
dHkgPSBjb252ZXJ0VG9GbG9hdExlbmd0aCgmc2Vjb25kVmFsdWUsIGNvbnZlcnNpb25EYXRhKTsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
QEAgLTIwNywxMiArMjA3LDEyIEBAIGJvb2wgdHJhbnNmb3Jtc0ZvclZhbHVlKENTU1ZhbHVlKiB2
YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyCiAgICAgICAgICAg
ICBpZiAodHguaXNVbmRlZmluZWQoKSB8fCB0eS5pc1VuZGVmaW5lZCgpIHx8IHR6LmlzVW5kZWZp
bmVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBvcGVy
YXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUodHgsIHR5LCB0eiwgdHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+
b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCku
YXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgdHosIHRy
YW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9uVHlwZSgpKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICBkb3Vi
bGUgYW5nbGUgPSBmaXJzdFZhbHVlLT5jb21wdXRlRGVncmVlcygpOwotICAgICAgICAgICAgb3Bl
cmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3Jl
YXRlKDAsIDAsIDEsIGFuZ2xlLCB0cmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9ybVZhbHVl
LT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmaXJzdFZh
bHVlLmNvbXB1dGVEZWdyZWVzKCk7CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMo
KS5hcHBlbmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoMCwgMCwgMSwgYW5nbGUs
IHRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9uVHlwZSgpKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6Um90YXRlWFRyYW5zZm9ybU9wZXJhdGlvbjoKQEAgLTIyMSwyOCArMjIx
LDI4IEBAIGJvb2wgdHJhbnNmb3Jtc0ZvclZhbHVlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyCiAgICAgICAgICAgICBkb3VibGUgeCA9IDA7
CiAgICAgICAgICAgICBkb3VibGUgeSA9IDA7CiAgICAgICAgICAgICBkb3VibGUgeiA9IDA7Ci0g
ICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmaXJzdFZhbHVlLT5jb21wdXRlRGVncmVlcygpOwor
ICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS5jb21wdXRlRGVncmVlcygpOwog
Ci0gICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWFRyYW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAg
ICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24pCiAgICAgICAgICAgICAgICAgeCA9
IDE7Ci0gICAgICAgICAgICBlbHNlIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgp
ID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQor
ICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9uVHlwZSgpID09IFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQogICAgICAg
ICAgICAgICAgIHkgPSAxOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHogPSAx
OwotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHgsIHksIHosIGFuZ2xlLCB0cmFuc2Zvcm1PcGVyYXRpb25U
eXBlKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAgICBvcGVy
YXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVh
dGUoeCwgeSwgeiwgYW5nbGUsIHRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUu
b3BlcmF0aW9uVHlwZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlM0RUcmFuc2Zvcm1PcGVyYXRp
b246IHsKLSAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPCA0KQorICAg
ICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLmxlbmd0aCgpIDwgNCkKICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MSkpOwotICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRoaXJkVmFsdWUgPSB0b0NTU1By
aW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKTsK
LSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmb3VydGhWYWx1ZSA9IHRvQ1NTUHJpbWl0
aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMykpOwotICAg
ICAgICAgICAgZG91YmxlIHggPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAg
ICAgICAgZG91YmxlIHkgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAg
ICAgIGRvdWJsZSB6ID0gdGhpcmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAg
IGRvdWJsZSBhbmdsZSA9IGZvdXJ0aFZhbHVlLT5jb21wdXRlRGVncmVlcygpOwotICAgICAgICAg
ICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bjo6Y3JlYXRlKHgsIHksIHosIGFuZ2xlLCB0cmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9y
bVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSYgc2Vjb25kVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZh
bHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOworICAgICAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUmIHRoaXJkVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9y
bVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpOworICAgICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUmIGZvdXJ0aFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFu
c2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKTsKKyAgICAgICAgICAgIGRvdWJs
ZSB4ID0gZmlyc3RWYWx1ZS5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgZG91YmxlIHkg
PSBzZWNvbmRWYWx1ZS5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgZG91YmxlIHogPSB0
aGlyZFZhbHVlLmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBm
b3VydGhWYWx1ZS5jb21wdXRlRGVncmVlcygpOworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVy
YXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHgsIHksIHos
IGFuZ2xlLCB0cmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5
cGUoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb246CkBAIC0yNTAsNjIg
KzI1MCw2MiBAQCBib29sIHRyYW5zZm9ybXNGb3JWYWx1ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0
IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcgogICAgICAgICBjYXNlIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpTa2V3WVRyYW5zZm9ybU9wZXJhdGlvbjogewogICAgICAgICAgICAg
ZG91YmxlIGFuZ2xlWCA9IDA7CiAgICAgICAgICAgICBkb3VibGUgYW5nbGVZID0gMDsKLSAgICAg
ICAgICAgIGRvdWJsZSBhbmdsZSA9IGZpcnN0VmFsdWUtPmNvbXB1dGVEZWdyZWVzKCk7Ci0gICAg
ICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAgICAgICBkb3Vi
bGUgYW5nbGUgPSBmaXJzdFZhbHVlLmNvbXB1dGVEZWdyZWVzKCk7CisgICAgICAgICAgICBpZiAo
dHJhbnNmb3JtVmFsdWUub3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpTa2V3WVRyYW5zZm9ybU9wZXJhdGlvbikKICAgICAgICAgICAgICAgICBhbmdsZVkgPSBhbmds
ZTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGFuZ2xlWCA9IGFuZ2xlOwot
ICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSB0b0NTU1By
aW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlWSA9IHNlY29uZFZhbHVlLT5jb21wdXRlRGVn
cmVlcygpOworICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBl
KCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24pIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLmxlbmd0aCgpID4gMSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHNlY29uZFZhbHVlID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlWSA9IHNlY29uZFZh
bHVlLmNvbXB1dGVEZWdyZWVzKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMo
KS5hcHBlbmQoU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGFuZ2xlWCwgYW5nbGVZLCB0
cmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7
CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2tld1RyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKGFuZ2xlWCwgYW5nbGVZLCB0cmFuc2Zvcm1PcGVyYXRpb25UeXBl
KHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6Ok1hdHJpeFRy
YW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5n
dGgoKSA8IDYpCisgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUubGVuZ3RoKCkgPCA2KQog
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZG91YmxlIGEgPSBmaXJzdFZhbHVl
LT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgZG91YmxlIGIgPSB0b0NTU1ByaW1pdGl2
ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKS0+Z2V0RG91
YmxlVmFsdWUoKTsKLSAgICAgICAgICAgIGRvdWJsZSBjID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh0
cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSktPmdldERvdWJsZVZhbHVl
KCk7Ci0gICAgICAgICAgICBkb3VibGUgZCA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3Jt
VmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMykpLT5nZXREb3VibGVWYWx1ZSgpOwotICAg
ICAgICAgICAgZG91YmxlIGUgPSBjb252ZXJzaW9uRGF0YS56b29tKCkgKiB0b0NTU1ByaW1pdGl2
ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDQpKS0+Z2V0RG91
YmxlVmFsdWUoKTsKLSAgICAgICAgICAgIGRvdWJsZSBmID0gY29udmVyc2lvbkRhdGEuem9vbSgp
ICogdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjayg1KSktPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBkb3VibGUgYSA9IGZpcnN0
VmFsdWUuZ2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIGRvdWJsZSBiID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDEpKS5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgZG91YmxlIGMgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MikpLmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBkb3VibGUgZCA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygz
KSkuZ2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIGRvdWJsZSBlID0gY29udmVyc2lvbkRh
dGEuem9vbSgpICogZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDQpKS5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAg
ZG91YmxlIGYgPSBjb252ZXJzaW9uRGF0YS56b29tKCkgKiBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNSkpLmdldERvdWJs
ZVZhbHVlKCk7CiAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0
cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoYSwgYiwgYywgZCwgZSwgZikpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAgIGlmICh0cmFu
c2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPCAxNikKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1
ZS5sZW5ndGgoKSA8IDE2KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggbWF0cml4KHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFs
dWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAg
ICAgICAgICAgIHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soMSkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgIHRvQ1NT
UHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikp
LT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgIHRvQ1NTUHJpbWl0aXZlVmFsdWUo
dHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMykpLT5nZXREb3VibGVWYWx1
ZSgpLAotICAgICAgICAgICAgICAgIHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUt
Pml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNCkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAg
ICAgICAgIHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soNSkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgIHRvQ1NTUHJp
bWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNikpLT5n
ZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgIHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJh
bnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNykpLT5nZXREb3VibGVWYWx1ZSgp
LAotICAgICAgICAgICAgICAgIHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soOCkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAg
ICAgIHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soOSkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgIHRvQ1NTUHJpbWl0
aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTApKS0+Z2V0
RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5z
Zm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDExKSktPmdldERvdWJsZVZhbHVlKCks
Ci0gICAgICAgICAgICAgICAgY29udmVyc2lvbkRhdGEuem9vbSgpICogdG9DU1NQcmltaXRpdmVW
YWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMikpLT5nZXREb3Vi
bGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgIGNvbnZlcnNpb25EYXRhLnpvb20oKSAqIHRvQ1NT
UHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTMp
KS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVl
KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDE0KSktPmdldERvdWJsZVZh
bHVlKCksCi0gICAgICAgICAgICAgICAgdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1
ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxNSkpLT5nZXREb3VibGVWYWx1ZSgpKTsKKyAgICAg
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeChkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpLmdldERvdWJs
ZVZhbHVlKCksCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0
cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKS5nZXREb3VibGVWYWx1ZSgp
LAorICAgICAgICAgICAgICAgIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3Jt
VmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSkuZ2V0RG91YmxlVmFsdWUoKSwKKyAgICAg
ICAgICAgICAgICBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soMykpLmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAg
ICAgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDQpKS5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgIGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHND
aGVjayg1KSkuZ2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNikp
LmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDcpKS5nZXREb3Vi
bGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayg4KSkuZ2V0RG91YmxlVmFsdWUo
KSwKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9y
bVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soOSkpLmdldERvdWJsZVZhbHVlKCksCisgICAg
ICAgICAgICAgICAgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDEwKSkuZ2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAg
ICAgICBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soMTEpKS5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgIGNv
bnZlcnNpb25EYXRhLnpvb20oKSAqIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNm
b3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMikpLmdldERvdWJsZVZhbHVlKCksCisg
ICAgICAgICAgICAgICAgY29udmVyc2lvbkRhdGEuem9vbSgpICogZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEzKSkuZ2V0
RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTQpKS5nZXREb3VibGVW
YWx1ZSgpLAorICAgICAgICAgICAgICAgIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJh
bnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxNSkpLmdldERvdWJsZVZhbHVlKCkp
OwogICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKE1hdHJpeDNEVHJh
bnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobWF0cml4KSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpQZXJzcGVjdGl2
ZVRyYW5zZm9ybU9wZXJhdGlvbjogewogICAgICAgICAgICAgTGVuZ3RoIHAgPSBMZW5ndGgoMCwg
Rml4ZWQpOwotICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUtPmlzTGVuZ3RoKCkpCi0gICAgICAg
ICAgICAgICAgcCA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIGNvbnZlcnNpb25E
YXRhKTsKKyAgICAgICAgICAgIGlmIChmaXJzdFZhbHVlLmlzTGVuZ3RoKCkpCisgICAgICAgICAg
ICAgICAgcCA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKCZmaXJzdFZhbHVlLCBjb252ZXJzaW9uRGF0
YSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgcXVp
cmsgdGhhdCBzaG91bGQgZ28gYXdheSB3aGVuIDNkIHRyYW5zZm9ybXMgYXJlIGZpbmFsaXplZC4K
LSAgICAgICAgICAgICAgICBkb3VibGUgdmFsID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUo
KTsKKyAgICAgICAgICAgICAgICBkb3VibGUgdmFsID0gZmlyc3RWYWx1ZS5nZXREb3VibGVWYWx1
ZSgpOwogICAgICAgICAgICAgICAgIHAgPSB2YWwgPj0gMCA/IExlbmd0aChjbGFtcFRvUG9zaXRp
dmVJbnRlZ2VyKHZhbCksIEZpeGVkKSA6IExlbmd0aChVbmRlZmluZWQpOwogICAgICAgICAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvVmlld3BvcnRTdHlsZVJlc29sdmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9WaWV3cG9ydFN0eWxlUmVzb2x2ZXIuY3BwCmluZGV4
IDhkNDEyOWEwY2Y5YWQ5NmI5YmE2ZTIxNzk5MDA1ZTM1ZDNjMzgyYmIuLjZjMTQ2ZGUyMjkwOTlj
YTc0Y2JiZTVmNjY0YTI4Njg3N2ViMGZlOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9WaWV3cG9ydFN0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9WaWV3
cG9ydFN0eWxlUmVzb2x2ZXIuY3BwCkBAIC0xMDgsMTkgKzEwOCwxOSBAQCBmbG9hdCBWaWV3cG9y
dFN0eWxlUmVzb2x2ZXI6OmdldFZpZXdwb3J0QXJndW1lbnRWYWx1ZShDU1NQcm9wZXJ0eUlEIGlk
KSBjb25zdAogICAgICAgICBkZWZhdWx0VmFsdWUgPSAxOwogCiAgICAgUmVmUHRyPENTU1ZhbHVl
PiB2YWx1ZSA9IG1fcHJvcGVydHlTZXQtPmdldFByb3BlcnR5Q1NTVmFsdWUoaWQpOwotICAgIGlm
ICghdmFsdWUgfHwgIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpKQogICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwogCi0g
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSh2YWx1ZS5nZXQoKSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAKLSAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmlzTnVtYmVyKCkgfHwgcHJpbWl0aXZlVmFsdWUtPmlzUHgoKSkKLSAgICAgICAgcmV0
dXJuIHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCk7CisgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLmlzTnVtYmVyKCkgfHwgcHJpbWl0aXZlVmFsdWUuaXNQeCgpKQorICAgICAgICByZXR1cm4g
cHJpbWl0aXZlVmFsdWUuZ2V0RmxvYXRWYWx1ZSgpOwogCi0gICAgaWYgKHByaW1pdGl2ZVZhbHVl
LT5pc0ZvbnRSZWxhdGl2ZUxlbmd0aCgpKQotICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWUt
PmdldEZsb2F0VmFsdWUoKSAqIG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLT5yZW5kZXJT
dHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUoKTsKKyAgICBpZiAocHJpbWl0
aXZlVmFsdWUuaXNGb250UmVsYXRpdmVMZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIHByaW1pdGl2
ZVZhbHVlLmdldEZsb2F0VmFsdWUoKSAqIG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLT5y
ZW5kZXJTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUoKTsKIAotICAgIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpIHsKLSAgICAgICAgZmxvYXQgcGVyY2Vu
dFZhbHVlID0gcHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSAvIDEwMC4wZjsKKyAgICBp
ZiAocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkpIHsKKyAgICAgICAgZmxvYXQgcGVyY2Vu
dFZhbHVlID0gcHJpbWl0aXZlVmFsdWUuZ2V0RmxvYXRWYWx1ZSgpIC8gMTAwLjBmOwogICAgICAg
ICBzd2l0Y2ggKGlkKSB7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXhIZWlnaHQ6CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5IZWlnaHQ6CkBAIC0xNDAsNyArMTQwLDcgQEAgZmxvYXQg
Vmlld3BvcnRTdHlsZVJlc29sdmVyOjpnZXRWaWV3cG9ydEFyZ3VtZW50VmFsdWUoQ1NTUHJvcGVy
dHlJRCBpZCkgY29uc3QKICAgICAgICAgfQogICAgIH0KIAotICAgIHN3aXRjaCAocHJpbWl0aXZl
VmFsdWUtPmdldFZhbHVlSUQoKSkgeworICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUuZ2V0VmFs
dWVJRCgpKSB7CiAgICAgY2FzZSBDU1NWYWx1ZUF1dG86CiAgICAgICAgIHJldHVybiBkZWZhdWx0
VmFsdWU7CiAgICAgY2FzZSBDU1NWYWx1ZURldmljZUhlaWdodDoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1dlYktpdENTU0ZpbHRlclZhbHVlLmgKaW5kZXggNGY5ZDkxNTg2NjlmNTFhMGJjMWQyZDA2N2Zm
NjJhODMwZmZlNDEwNC4uZGFmM2FmYmJkMTRiNGJhMjBjZTNmOTMyODQ5NmI3OGUwNjlhNjJhMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0ZpbHRlclZhbHVlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0ZpbHRlclZhbHVlLmgKQEAgLTcwLDggKzcw
LDggQEAgcHJpdmF0ZToKICAgICBGaWx0ZXJPcGVyYXRpb25UeXBlIG1fdHlwZTsKIH07CiAKLUNT
U19WQUxVRV9UWVBFX0NBU1RTKFdlYktpdENTU0ZpbHRlclZhbHVlLCBpc1dlYktpdENTU0ZpbHRl
clZhbHVlKCkpCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLX0KK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQ1NTX1ZBTFVFKFdlYktpdENTU0ZpbHRlclZhbHVlLCBpc1dlYktpdENTU0ZpbHRlclZh
bHVlKCkpCiAKLSNlbmRpZgorI2VuZGlmIC8vIFdlYktpdENTU0ZpbHRlclZhbHVlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAKaW5kZXggNDNiYmQxYzMxYzZkOWYyNGYxNjhi
YjBjMTljNjJmMGM3NTg5YjMzNi4uYzZkNTk5OTcyMDhmMjE1YTExNDIxMTY3ZmQzOTAxZjg4ODMy
OGI0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAKQEAgLTYzLDcgKzYz
LDcgQEAgdm9pZCBXZWJLaXRDU1NNYXRyaXg6OnNldE1hdHJpeFZhbHVlKGNvbnN0IFN0cmluZyYg
c3RyaW5nLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1
ZSA9IHN0eWxlRGVjbGFyYXRpb24tPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJr
aXRUcmFuc2Zvcm0pOwogCiAgICAgICAgIC8vIENoZWNrIGZvciBhICJub25lIiBvciBlbXB0eSB0
cmFuc2Zvcm0uIEluIHRoZXNlIGNhc2VzIHdlIGNhbiB1c2UgdGhlIGRlZmF1bHQgaWRlbnRpdHkg
bWF0cml4LgotICAgICAgICBpZiAoIXZhbHVlIHx8ICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
ICYmICh0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLmdldCgpKSktPmdldFZhbHVlSUQoKSA9PSBD
U1NWYWx1ZU5vbmUpKQorICAgICAgICBpZiAoIXZhbHVlIHx8IChpczxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1
ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBU
cmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZS5oCmluZGV4IDE5NWY5NmE1MWQzYTk2ZGRlYzJkYTYyZGJiNjg5
OGJkNzc2NmM5N2UuLjlkZWM5NTZjZjExZDJjNWIwZGFlMDk2ZTM4ZDYwNDg0MDFjZTkyMTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oCkBAIC03OSwx
OCArNzksOCBAQCBwcml2YXRlOgogICAgIFRyYW5zZm9ybU9wZXJhdGlvblR5cGUgbV90eXBlOwog
fTsKIAotaW5saW5lIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKiB0b1dlYktpdENTU1RyYW5zZm9y
bVZhbHVlKENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTighdmFsdWUgfHwgdmFsdWUtPmlzV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoKSk7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKj4odmFsdWUpOwot
fQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi1pbmxpbmUgY29uc3QgV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWUqIHRvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoY29uc3QgQ1NTVmFsdWUqIHZhbHVl
KQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCF2YWx1ZSB8fCB2YWx1
ZS0+aXNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUqPih2YWx1ZSk7Ci19Ci0KLX0KK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLCBpc1dlYktp
dENTU1RyYW5zZm9ybVZhbHVlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FwcGx5U3R5bGVDb21tYW5kLmNwcAppbmRleCA2NmJlZmY0MTc1ZDA3YTBjYzcxZTJhNzg4ODdk
YTYwOWRkNGNhNDc4Li4yZjI1ZGFjNzkxZGFkMmZiYjI4YWMwMDNiMDk1YTJjNTI1MDA1NmY0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcApAQCAtMTUx
MCw4ICsxNTEwLDggQEAgZmxvYXQgQXBwbHlTdHlsZUNvbW1hbmQ6OmNvbXB1dGVkRm9udFNpemUo
Tm9kZSogbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZh
bHVlID0gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcihub2RlKS5wcm9wZXJ0eVZhbHVlKENTU1Byb3Bl
cnR5Rm9udFNpemUpOwotICAgIEFTU0VSVCh2YWx1ZSAmJiB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKTsKLSAgICByZXR1cm4gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS5nZXQoKSktPmdldEZs
b2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgQVNTRVJUKGlzPENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZS5nZXQoKSkpOworICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UFgpOwogfQogCiB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpqb2luQ2hpbGRUZXh0Tm9kZXMoTm9k
ZSogbm9kZSwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCmluZGV4IDc4MGQ4NDcxODgxYmY0ZmEz
MGFkMWQ4NjFhYWY5ZTU5ZTg3ZGEyNzEuLmM2MjVmNzdjZDRlN2E0NzM3Y2RlNGU4MmMxZmI2YjFj
NTRkNjA0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKQEAgLTE0
Miw5ICsxNDIsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW50IGlkZW50aWZpZXJGb3JTdHls
ZVByb3BlcnR5KFQqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7CiAgICAgUmVm
UHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGV4dHJhY3RQcm9wZXJ0eVZhbHVlKHN0eWxlLCBwcm9wZXJ0
eUlEKTsKLSAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAg
IGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlLmdldCgpKSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgcmV0dXJuIHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUuZ2V0KCkpLT5nZXRWYWx1
ZUlEKCk7CisgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdl
dFZhbHVlSUQoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc1JlZlB0cjxNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzPiBnZXRQcm9wZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0aWVzKiBzdHls
ZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBUKiBiYXNlU3R5bGUpOwpAQCAtMTk3LDcgKzE5Nyw3
IEBAIEhUTUxFbGVtZW50RXF1aXZhbGVudDo6SFRNTEVsZW1lbnRFcXVpdmFsZW50KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlSUQgcHJpbWl0CiBib29sIEhUTUxFbGVtZW50RXF1aXZhbGVudDo6
dmFsdWVJc1ByZXNlbnRJblN0eWxlKEVsZW1lbnQqIGVsZW1lbnQsIFN0eWxlUHJvcGVydGllcyog
c3R5bGUpIGNvbnN0CiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IHN0eWxlLT5nZXRQ
cm9wZXJ0eUNTU1ZhbHVlKG1fcHJvcGVydHlJRCk7Ci0gICAgcmV0dXJuIG1hdGNoZXMoZWxlbWVu
dCkgJiYgdmFsdWUgJiYgdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiB0b0NTU1ByaW1pdGl2
ZVZhbHVlKHZhbHVlLmdldCgpKS0+Z2V0VmFsdWVJRCgpID09IG1fcHJpbWl0aXZlVmFsdWUtPmdl
dFZhbHVlSUQoKTsKKyAgICByZXR1cm4gbWF0Y2hlcyhlbGVtZW50KSAmJiBpczxDU1NQcmltaXRp
dmVWYWx1ZT4odmFsdWUuZ2V0KCkpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpLmdldFZhbHVlSUQoKSA9PSBtX3ByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCk7CiB9CiAK
IHZvaWQgSFRNTEVsZW1lbnRFcXVpdmFsZW50OjphZGRUb1N0eWxlKEVsZW1lbnQqLCBFZGl0aW5n
U3R5bGUqIHN0eWxlKSBjb25zdApAQCAtMjI5LDcgKzIyOSw3IEBAIGJvb2wgSFRNTFRleHREZWNv
cmF0aW9uRXF1aXZhbGVudDo6dmFsdWVJc1ByZXNlbnRJblN0eWxlKEVsZW1lbnQqIGVsZW1lbnQs
IFN0eWxlCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBzdHlsZVZhbHVlID0gc3R5bGUtPmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCk7CiAg
ICAgaWYgKCFzdHlsZVZhbHVlKQogICAgICAgICBzdHlsZVZhbHVlID0gc3R5bGUtPmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7Ci0gICAgcmV0dXJuIG1hdGNo
ZXMoZWxlbWVudCkgJiYgc3R5bGVWYWx1ZSAmJiBzdHlsZVZhbHVlLT5pc1ZhbHVlTGlzdCgpICYm
IHRvQ1NTVmFsdWVMaXN0KHN0eWxlVmFsdWUuZ2V0KCkpLT5oYXNWYWx1ZShtX3ByaW1pdGl2ZVZh
bHVlLmdldCgpKTsKKyAgICByZXR1cm4gbWF0Y2hlcyhlbGVtZW50KSAmJiBpczxDU1NWYWx1ZUxp
c3Q+KHN0eWxlVmFsdWUuZ2V0KCkpICYmIGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnN0eWxlVmFs
dWUpLmhhc1ZhbHVlKG1fcHJpbWl0aXZlVmFsdWUuZ2V0KCkpOwogfQogCiBjbGFzcyBIVE1MQXR0
cmlidXRlRXF1aXZhbGVudCA6IHB1YmxpYyBIVE1MRWxlbWVudEVxdWl2YWxlbnQgewpAQCAtMzU2
LDEyICszNTYsMTIgQEAgRWRpdGluZ1N0eWxlOjp+RWRpdGluZ1N0eWxlKCkKIAogc3RhdGljIFJH
QkEzMiBjc3NWYWx1ZVRvUkdCQShDU1NWYWx1ZSogY29sb3JWYWx1ZSkKIHsKLSAgICBpZiAoIWNv
bG9yVmFsdWUgfHwgIWNvbG9yVmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlz
PENTU1ByaW1pdGl2ZVZhbHVlPihjb2xvclZhbHVlKSkKICAgICAgICAgcmV0dXJuIENvbG9yOjp0
cmFuc3BhcmVudDsKICAgICAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlQ29sb3Ig
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGNvbG9yVmFsdWUpOwotICAgIGlmIChwcmltaXRpdmVDb2xv
ci0+aXNSR0JDb2xvcigpKQotICAgICAgICByZXR1cm4gcHJpbWl0aXZlQ29sb3ItPmdldFJHQkEz
MlZhbHVlKCk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZUNvbG9yID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpjb2xvclZhbHVlKTsKKyAgICBpZiAocHJpbWl0aXZlQ29s
b3IuaXNSR0JDb2xvcigpKQorICAgICAgICByZXR1cm4gcHJpbWl0aXZlQ29sb3IuZ2V0UkdCQTMy
VmFsdWUoKTsKICAgICAKICAgICBSR0JBMzIgcmdiYSA9IDA7CiAgICAgQ1NTUGFyc2VyOjpwYXJz
ZUNvbG9yKHJnYmEsIGNvbG9yVmFsdWUtPmNzc1RleHQoKSk7CkBAIC00NzYsMTcgKzQ3NiwxNyBA
QCB2b2lkIEVkaXRpbmdTdHlsZTo6ZXh0cmFjdEZvbnRTaXplRGVsdGEoKQogCiAgICAgLy8gR2V0
IHRoZSBhZGp1c3RtZW50IGFtb3VudCBvdXQgb2YgdGhlIHN0eWxlLgogICAgIFJlZlB0cjxDU1NW
YWx1ZT4gdmFsdWUgPSBtX211dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9w
ZXJ0eVdlYmtpdEZvbnRTaXplRGVsdGEpOwotICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUuZ2V0
KCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLmdldCgpKTsKKyAgICBDU1NQcmltaXRp
dmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKTsKIAogICAgIC8vIE9ubHkgUFggaGFuZGxlZCBub3cuIElmIHdlIGhhbmRsZSBtb3JlIHR5
cGVzIGluIHRoZSBmdXR1cmUsIHBlcmhhcHMKICAgICAvLyBhIHN3aXRjaCBzdGF0ZW1lbnQgaGVy
ZSB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlLgotICAgIGlmICghcHJpbWl0aXZlVmFsdWUtPmlz
UHgoKSkKKyAgICBpZiAoIXByaW1pdGl2ZVZhbHVlLmlzUHgoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9mb250U2l6ZURlbHRhID0gcHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKTsK
KyAgICBtX2ZvbnRTaXplRGVsdGEgPSBwcmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKCk7CiAg
ICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0Rm9udFNp
emVEZWx0YSk7CiB9CiAKQEAgLTUwMSwxNiArNTAxLDE2IEBAIGJvb2wgRWRpdGluZ1N0eWxlOjp0
ZXh0RGlyZWN0aW9uKFdyaXRpbmdEaXJlY3Rpb24mIHdyaXRpbmdEaXJlY3Rpb24pIGNvbnN0CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5pY29kZUJpZGkg
PSBtX211dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVC
aWRpKTsKLSAgICBpZiAoIXVuaWNvZGVCaWRpIHx8ICF1bmljb2RlQmlkaS0+aXNQcmltaXRpdmVW
YWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHVuaWNvZGVCaWRpLmdldCgp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ1NTVmFsdWVJRCB1bmljb2RlQmlkaVZh
bHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh1bmljb2RlQmlkaS5nZXQoKSktPmdldFZhbHVlSUQo
KTsKKyAgICBDU1NWYWx1ZUlEIHVuaWNvZGVCaWRpVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnVuaWNvZGVCaWRpKS5nZXRWYWx1ZUlEKCk7CiAgICAgaWYgKHVuaWNvZGVCaWRp
VmFsdWUgPT0gQ1NTVmFsdWVFbWJlZCkgewogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGRpcmVj
dGlvbiA9IG1fbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5RGly
ZWN0aW9uKTsKLSAgICAgICAgaWYgKCFkaXJlY3Rpb24gfHwgIWRpcmVjdGlvbi0+aXNQcmltaXRp
dmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPihkaXJlY3Rpb24u
Z2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHdyaXRpbmdEaXJl
Y3Rpb24gPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGRpcmVjdGlvbi5nZXQoKSktPmdldFZhbHVlSUQo
KSA9PSBDU1NWYWx1ZUx0ciA/IExlZnRUb1JpZ2h0V3JpdGluZ0RpcmVjdGlvbiA6IFJpZ2h0VG9M
ZWZ0V3JpdGluZ0RpcmVjdGlvbjsKKyAgICAgICAgd3JpdGluZ0RpcmVjdGlvbiA9IGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPigqZGlyZWN0aW9uKS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVM
dHIgPyBMZWZ0VG9SaWdodFdyaXRpbmdEaXJlY3Rpb24gOiBSaWdodFRvTGVmdFdyaXRpbmdEaXJl
Y3Rpb247CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtOTMwLDEwICs5MzAsMTAg
QEAgdm9pZCBFZGl0aW5nU3R5bGU6OnByZXBhcmVUb0FwcGx5QXQoY29uc3QgUG9zaXRpb24mIHBv
c2l0aW9uLCBTaG91bGRQcmVzZXJ2ZVdyaXQKICAgICAgICAgfHwgY3NzVmFsdWVUb1JHQkEobV9t
dXRhYmxlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29s
b3IpLmdldCgpKSA9PSByZ2JhQmFja2dyb3VuZENvbG9ySW5FZmZlY3QocG9zaXRpb24uY29udGFp
bmVyTm9kZSgpKSkKICAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1By
b3BlcnR5QmFja2dyb3VuZENvbG9yKTsKIAotICAgIGlmICh1bmljb2RlQmlkaSAmJiB1bmljb2Rl
QmlkaS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgIG1fbXV0YWJsZVN0eWxlLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBzdGF0aWNfY2FzdDxDU1NWYWx1ZUlEPih0
b0NTU1ByaW1pdGl2ZVZhbHVlKHVuaWNvZGVCaWRpLmdldCgpKS0+Z2V0VmFsdWVJRCgpKSk7Ci0g
ICAgICAgIGlmIChkaXJlY3Rpb24gJiYgZGlyZWN0aW9uLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0g
ICAgICAgICAgICBtX211dGFibGVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rp
b24sIHN0YXRpY19jYXN0PENTU1ZhbHVlSUQ+KHRvQ1NTUHJpbWl0aXZlVmFsdWUoZGlyZWN0aW9u
LmdldCgpKS0+Z2V0VmFsdWVJRCgpKSk7CisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih1
bmljb2RlQmlkaS5nZXQoKSkpIHsKKyAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5
KENTU1Byb3BlcnR5VW5pY29kZUJpZGksIHN0YXRpY19jYXN0PENTU1ZhbHVlSUQ+KGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPigqdW5pY29kZUJpZGkpLmdldFZhbHVlSUQoKSkpOworICAgICAg
ICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KGRpcmVjdGlvbi5nZXQoKSkpCisgICAgICAgICAg
ICBtX211dGFibGVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIHN0YXRp
Y19jYXN0PENTU1ZhbHVlSUQ+KGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZGlyZWN0aW9u
KS5nZXRWYWx1ZUlEKCkpKTsKICAgICB9CiB9CiAKQEAgLTEwNzUsMTEgKzEwNzUsMTEgQEAgdm9p
ZCBFZGl0aW5nU3R5bGU6Om1lcmdlU3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwg
Q1NTUHJvcGVydHlPdmVycmlkZU0KIAogICAgICAgICAvLyB0ZXh0IGRlY29yYXRpb25zIG5ldmVy
IG92ZXJyaWRlIHZhbHVlcwogICAgICAgICBpZiAoKHByb3BlcnR5LmlkKCkgPT0gQ1NTUHJvcGVy
dHlUZXh0RGVjb3JhdGlvbiB8fCBwcm9wZXJ0eS5pZCgpID09IENTU1Byb3BlcnR5V2Via2l0VGV4
dERlY29yYXRpb25zSW5FZmZlY3QpICYmIHByb3BlcnR5LnZhbHVlKCktPmlzVmFsdWVMaXN0KCkg
JiYgdmFsdWUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewotICAg
ICAgICAgICAgICAgIG1lcmdlVGV4dERlY29yYXRpb25WYWx1ZXModG9DU1NWYWx1ZUxpc3QodmFs
dWUuZ2V0KCkpLCB0b0NTU1ZhbHVlTGlzdChwcm9wZXJ0eS52YWx1ZSgpKSk7CisgICAgICAgICAg
ICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7CisgICAgICAgICAgICAgICAgbWVyZ2VU
ZXh0RGVjb3JhdGlvblZhbHVlcyhkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlLmdldCgpKSwg
ZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pihwcm9wZXJ0eS52YWx1ZSgpKSk7CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YWx1ZSA9IDA7IC8vIHRl
eHQtZGVjb3JhdGlvbjogbm9uZSBpcyBlcXVpdmFsZW50IHRvIG5vdCBoYXZpbmcgdGhlIHByb3Bl
cnR5CisgICAgICAgICAgICB2YWx1ZSA9IG51bGxwdHI7IC8vIHRleHQtZGVjb3JhdGlvbjogbm9u
ZSBpcyBlcXVpdmFsZW50IHRvIG5vdCBoYXZpbmcgdGhlIHByb3BlcnR5CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAobW9kZSA9PSBPdmVycmlkZVZhbHVlcyB8fCAobW9kZSA9PSBEb05vdE92ZXJy
aWRlVmFsdWVzICYmICF2YWx1ZSkpCkBAIC0xMTMxLDkgKzExMzEsOSBAQCB2b2lkIEVkaXRpbmdT
dHlsZTo6bWVyZ2VTdHlsZUZyb21SdWxlc0ZvclNlcmlhbGl6YXRpb24oU3R5bGVkRWxlbWVudCog
ZWxlbWVudCkKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7
ICsraSkgewogICAgICAgICAgICAgU3R5bGVQcm9wZXJ0aWVzOjpQcm9wZXJ0eVJlZmVyZW5jZSBw
cm9wZXJ0eSA9IG1fbXV0YWJsZVN0eWxlLT5wcm9wZXJ0eUF0KGkpOwogICAgICAgICAgICAgQ1NT
VmFsdWUqIHZhbHVlID0gcHJvcGVydHkudmFsdWUoKTsKLSAgICAgICAgICAgIGlmICghdmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAo
dG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSktPmlzUGVyY2VudGFnZSgpKSB7CisgICAgICAgICAg
ICBpZiAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNQZXJjZW50YWdlKCkp
IHsKICAgICAgICAgICAgICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiBjb21wdXRlZFByb3BlcnR5
VmFsdWUgPSBjb21wdXRlZFN0eWxlLnByb3BlcnR5VmFsdWUocHJvcGVydHkuaWQoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGZyb21Db21wdXRlZFN0eWxlLT5hZGRQYXJzZWRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eShwcm9wZXJ0eS5pZCgpLCBjb21wdXRlZFByb3BlcnR5VmFsdWUucmVsZWFzZSgpKSk7
CiAgICAgICAgICAgICB9CkBAIC0xMjQ1LDkgKzEyNDUsOSBAQCBib29sIEVkaXRpbmdTdHlsZTo6
aXNGbG9hdGluZygpCiBpbnQgRWRpdGluZ1N0eWxlOjpsZWdhY3lGb250U2l6ZShEb2N1bWVudCog
ZG9jdW1lbnQpIGNvbnN0CiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSA9IG1fbXV0
YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpOwotICAg
IGlmICghY3NzVmFsdWUgfHwgIWNzc1ZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYg
KCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oY3NzVmFsdWUuZ2V0KCkpKQogICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gbGVnYWN5Rm9udFNpemVGcm9tQ1NTVmFsdWUoZG9jdW1lbnQsIHRvQ1NT
UHJpbWl0aXZlVmFsdWUoY3NzVmFsdWUuZ2V0KCkpLAorICAgIHJldHVybiBsZWdhY3lGb250U2l6
ZUZyb21DU1NWYWx1ZShkb2N1bWVudCwgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGNzc1Zh
bHVlLmdldCgpKSwKICAgICAgICAgbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZSwgQWx3
YXlzVXNlTGVnYWN5Rm9udFNpemUpOwogfQogCkBAIC0xMzA4LDEwICsxMzA4LDEwIEBAIFdyaXRp
bmdEaXJlY3Rpb24gRWRpdGluZ1N0eWxlOjp0ZXh0RGlyZWN0aW9uRm9yU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5pY29kZUJpZGkgPSBDb21wdXRlZFN0eWxlRXh0cmFjdG9y
KG4pLnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSk7Ci0gICAgICAgICAgICBp
ZiAoIXVuaWNvZGVCaWRpIHx8ICF1bmljb2RlQmlkaS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAg
ICAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odW5pY29kZUJpZGkuZ2V0KCkpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBDU1NWYWx1ZUlEIHVuaWNv
ZGVCaWRpVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHVuaWNvZGVCaWRpLmdldCgpKS0+Z2V0
VmFsdWVJRCgpOworICAgICAgICAgICAgQ1NTVmFsdWVJRCB1bmljb2RlQmlkaVZhbHVlID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp1bmljb2RlQmlkaSkuZ2V0VmFsdWVJRCgpOwogICAg
ICAgICAgICAgaWYgKHVuaWNvZGVCaWRpVmFsdWUgPT0gQ1NTVmFsdWVFbWJlZCB8fCB1bmljb2Rl
QmlkaVZhbHVlID09IENTU1ZhbHVlQmlkaU92ZXJyaWRlKQogICAgICAgICAgICAgICAgIHJldHVy
biBOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbjsKICAgICAgICAgfQpAQCAtMTMzNywxMCArMTMzNywx
MCBAQCBXcml0aW5nRGlyZWN0aW9uIEVkaXRpbmdTdHlsZTo6dGV4dERpcmVjdGlvbkZvclNlbGVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJgogCiAgICAgICAgIENvbXB1dGVkU3R5bGVFeHRy
YWN0b3IgY29tcHV0ZWRTdHlsZShub2RlKTsKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB1bmlj
b2RlQmlkaSA9IGNvbXB1dGVkU3R5bGUucHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVC
aWRpKTsKLSAgICAgICAgaWYgKCF1bmljb2RlQmlkaSB8fCAhdW5pY29kZUJpZGktPmlzUHJpbWl0
aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odW5pY29kZUJp
ZGkuZ2V0KCkpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgQ1NTVmFsdWVJRCB1
bmljb2RlQmlkaVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh1bmljb2RlQmlkaS5nZXQoKSkt
PmdldFZhbHVlSUQoKTsKKyAgICAgICAgQ1NTVmFsdWVJRCB1bmljb2RlQmlkaVZhbHVlID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp1bmljb2RlQmlkaSkuZ2V0VmFsdWVJRCgpOwogICAg
ICAgICBpZiAodW5pY29kZUJpZGlWYWx1ZSA9PSBDU1NWYWx1ZU5vcm1hbCkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCkBAIC0xMzQ5LDEwICsxMzQ5LDEwIEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRp
dGluZ1N0eWxlOjp0ZXh0RGlyZWN0aW9uRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mCiAKICAgICAgICAgQVNTRVJUKHVuaWNvZGVCaWRpVmFsdWUgPT0gQ1NTVmFsdWVFbWJlZCk7
CiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gZGlyZWN0aW9uID0gY29tcHV0ZWRTdHlsZS5wcm9w
ZXJ0eVZhbHVlKENTU1Byb3BlcnR5RGlyZWN0aW9uKTsKLSAgICAgICAgaWYgKCFkaXJlY3Rpb24g
fHwgIWRpcmVjdGlvbi0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1By
aW1pdGl2ZVZhbHVlPihkaXJlY3Rpb24uZ2V0KCkpKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgQ1NTVmFsdWVJRCBkaXJlY3Rpb25WYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUo
ZGlyZWN0aW9uLmdldCgpKS0+Z2V0VmFsdWVJRCgpOworICAgICAgICBDU1NWYWx1ZUlEIGRpcmVj
dGlvblZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpkaXJlY3Rpb24pLmdldFZh
bHVlSUQoKTsKICAgICAgICAgaWYgKGRpcmVjdGlvblZhbHVlICE9IENTU1ZhbHVlTHRyICYmIGRp
cmVjdGlvblZhbHVlICE9IENTU1ZhbHVlUnRsKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAg
LTE0NTIsMTEgKzE0NTIsMTEgQEAgdm9pZCBTdHlsZUNoYW5nZTo6ZXh0cmFjdFRleHRTdHlsZXMo
RG9jdW1lbnQqIGRvY3VtZW50LCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKgogICAgIC8vIEFzc3Vt
aW5nIHJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJvcGVydGllcyBoYXMgYmVlbiBjYWxsZWQsIHRo
ZXJlIHNob3VsZCBub3QgYmUgLXdlYmtpdC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdAogICAg
IC8vIEZ1cnRoZXJtb3JlLCB0ZXh0LWRlY29yYXRpb246IG5vbmUgaGFzIGJlZW4gdHJpbW1lZCBz
byB0aGF0IHRleHQtZGVjb3JhdGlvbiBwcm9wZXJ0eSBpcyBhbHdheXMgYSBDU1NWYWx1ZUxpc3Qu
CiAgICAgUmVmUHRyPENTU1ZhbHVlPiB0ZXh0RGVjb3JhdGlvbiA9IHN0eWxlLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOwotICAgIGlmICh0ZXh0RGVjb3Jh
dGlvbiAmJiB0ZXh0RGVjb3JhdGlvbi0+aXNWYWx1ZUxpc3QoKSkgeworICAgIGlmIChpczxDU1NW
YWx1ZUxpc3Q+KHRleHREZWNvcmF0aW9uLmdldCgpKSkgewogICAgICAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHVuZGVybGluZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZVVuZGVybGluZSk7CiAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gbGluZVRocm91Z2ggPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVMaW5lVGhyb3VnaCk7CiAKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbmV3VGV4
dERlY29yYXRpb24gPSB0b0NTU1ZhbHVlTGlzdCh0ZXh0RGVjb3JhdGlvbi5nZXQoKSktPmNvcHko
KTsKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbmV3VGV4dERlY29yYXRpb24gPSBkb3du
Y2FzdDxDU1NWYWx1ZUxpc3Q+KCp0ZXh0RGVjb3JhdGlvbikuY29weSgpOwogICAgICAgICBpZiAo
bmV3VGV4dERlY29yYXRpb24tPnJlbW92ZUFsbCh1bmRlcmxpbmUuZ2V0KCkpKQogICAgICAgICAg
ICAgbV9hcHBseVVuZGVybGluZSA9IHRydWU7CiAgICAgICAgIGlmIChuZXdUZXh0RGVjb3JhdGlv
bi0+cmVtb3ZlQWxsKGxpbmVUaHJvdWdoLmdldCgpKSkKQEAgLTE0ODksOSArMTQ4OSw5IEBAIHZv
aWQgU3R5bGVDaGFuZ2U6OmV4dHJhY3RUZXh0U3R5bGVzKERvY3VtZW50KiBkb2N1bWVudCwgTXV0
YWJsZVN0eWxlUHJvcGVydGllcyoKICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVy
dHlGb250RmFtaWx5KTsKIAogICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IGZvbnRTaXplID0gc3R5
bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSkpIHsKLSAgICAgICAg
aWYgKCFmb250U2l6ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1By
aW1pdGl2ZVZhbHVlPigqZm9udFNpemUpKQogICAgICAgICAgICAgc3R5bGUtPnJlbW92ZVByb3Bl
cnR5KENTU1Byb3BlcnR5Rm9udFNpemUpOyAvLyBDYW4ndCBtYWtlIHNlbnNlIG9mIHRoZSBudW1i
ZXIuIFB1dCBubyBmb250IHNpemUuCi0gICAgICAgIGVsc2UgaWYgKGludCBsZWdhY3lGb250U2l6
ZSA9IGxlZ2FjeUZvbnRTaXplRnJvbUNTU1ZhbHVlKGRvY3VtZW50LCB0b0NTU1ByaW1pdGl2ZVZh
bHVlKGZvbnRTaXplLmdldCgpKSwKKyAgICAgICAgZWxzZSBpZiAoaW50IGxlZ2FjeUZvbnRTaXpl
ID0gbGVnYWN5Rm9udFNpemVGcm9tQ1NTVmFsdWUoZG9jdW1lbnQsIGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPihmb250U2l6ZS5nZXQoKSksCiAgICAgICAgICAgICAgICAgc2hvdWxkVXNlRml4
ZWRGb250RGVmYXVsdFNpemUsIFVzZUxlZ2FjeUZvbnRTaXplT25seUlmUGl4ZWxWYWx1ZXNNYXRj
aCkpIHsKICAgICAgICAgICAgIG1fYXBwbHlGb250U2l6ZSA9IFN0cmluZzo6bnVtYmVyKGxlZ2Fj
eUZvbnRTaXplKTsKICAgICAgICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0
eUZvbnRTaXplKTsKQEAgLTE1MDIsMjggKzE1MDIsMjYgQEAgdm9pZCBTdHlsZUNoYW5nZTo6ZXh0
cmFjdFRleHRTdHlsZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
Kgogc3RhdGljIHZvaWQgZGlmZlRleHREZWNvcmF0aW9ucyhNdXRhYmxlU3R5bGVQcm9wZXJ0aWVz
KiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0SUQsIENTU1ZhbHVlKiByZWZUZXh0RGVjb3Jh
dGlvbikKIHsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNvcmF0aW9uID0gc3R5bGUtPmdl
dFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydElEKTsKLSAgICBpZiAoIXRleHREZWNvcmF0aW9uIHx8
ICF0ZXh0RGVjb3JhdGlvbi0+aXNWYWx1ZUxpc3QoKSB8fCAhcmVmVGV4dERlY29yYXRpb24gfHwg
IXJlZlRleHREZWNvcmF0aW9uLT5pc1ZhbHVlTGlzdCgpKQorICAgIGlmICghaXM8Q1NTVmFsdWVM
aXN0Pih0ZXh0RGVjb3JhdGlvbi5nZXQoKSkgfHwgIWlzPENTU1ZhbHVlTGlzdD4ocmVmVGV4dERl
Y29yYXRpb24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBu
ZXdUZXh0RGVjb3JhdGlvbiA9IHRvQ1NTVmFsdWVMaXN0KHRleHREZWNvcmF0aW9uLmdldCgpKS0+
Y29weSgpOwotICAgIENTU1ZhbHVlTGlzdCogdmFsdWVzSW5SZWZUZXh0RGVjb3JhdGlvbiA9IHRv
Q1NTVmFsdWVMaXN0KHJlZlRleHREZWNvcmF0aW9uKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0
PiBuZXdUZXh0RGVjb3JhdGlvbiA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnRleHREZWNvcmF0
aW9uKS5jb3B5KCk7CisgICAgQ1NTVmFsdWVMaXN0JiB2YWx1ZXNJblJlZlRleHREZWNvcmF0aW9u
ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqcmVmVGV4dERlY29yYXRpb24pOwogCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXNJblJlZlRleHREZWNvcmF0aW9uLT5sZW5ndGgoKTsg
aSsrKQotICAgICAgICBuZXdUZXh0RGVjb3JhdGlvbi0+cmVtb3ZlQWxsKHZhbHVlc0luUmVmVGV4
dERlY29yYXRpb24tPml0ZW0oaSkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVz
SW5SZWZUZXh0RGVjb3JhdGlvbi5sZW5ndGgoKTsgaSsrKQorICAgICAgICBuZXdUZXh0RGVjb3Jh
dGlvbi0+cmVtb3ZlQWxsKHZhbHVlc0luUmVmVGV4dERlY29yYXRpb24uaXRlbShpKSk7CiAKICAg
ICBzZXRUZXh0RGVjb3JhdGlvblByb3BlcnR5KHN0eWxlLCBuZXdUZXh0RGVjb3JhdGlvbi5nZXQo
KSwgcHJvcGVydElEKTsKIH0KIAogc3RhdGljIGJvb2wgZm9udFdlaWdodElzQm9sZChDU1NWYWx1
ZSogZm9udFdlaWdodCkKIHsKLSAgICBpZiAoIWZvbnRXZWlnaHQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoIWZvbnRXZWlnaHQtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAo
IWlzPENTU1ByaW1pdGl2ZVZhbHVlPihmb250V2VpZ2h0KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgLy8gQmVjYXVzZSBiIHRhZyBjYW4gb25seSBib2xkIHRleHQsIHRoZXJlIGFyZSBv
bmx5IHR3byBzdGF0ZXMgaW4gcGxhaW4gaHRtbDogYm9sZCBhbmQgbm90IGJvbGQuCiAgICAgLy8g
Q29sbGFwc2UgYWxsIG90aGVyIHZhbHVlcyB0byBlaXRoZXIgb25lIG9mIHRoZXNlIHR3byBzdGF0
ZXMgZm9yIGVkaXRpbmcgcHVycG9zZXMuCi0gICAgc3dpdGNoICh0b0NTU1ByaW1pdGl2ZVZhbHVl
KGZvbnRXZWlnaHQpLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqZm9udFdlaWdodCkuZ2V0VmFsdWVJRCgpKSB7CiAgICAgICAgIGNhc2Ug
Q1NTVmFsdWUxMDA6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWUyMDA6CiAgICAgICAgIGNhc2UgQ1NT
VmFsdWUzMDA6CkBAIC0xNjE1LDEyICsxNjEzLDEyIEBAIGJvb2wgaXNUcmFuc3BhcmVudENvbG9y
VmFsdWUoQ1NTVmFsdWUqIGNzc1ZhbHVlKQogewogICAgIGlmICghY3NzVmFsdWUpCiAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIGlmICghY3NzVmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAg
ICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqY3NzVmFsdWUpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZShjc3NWYWx1ZSk7ICAgIAotICAgIGlmICh2YWx1ZS0+aXNSR0JDb2xvcigpKQotICAgICAgICBy
ZXR1cm4gIWFscGhhQ2hhbm5lbCh2YWx1ZS0+Z2V0UkdCQTMyVmFsdWUoKSk7ICAgIAotICAgIHJl
dHVybiB2YWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlVHJhbnNwYXJlbnQ7CisgICAgQ1NT
UHJpbWl0aXZlVmFsdWUmIHZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpjc3NW
YWx1ZSk7CisgICAgaWYgKHZhbHVlLmlzUkdCQ29sb3IoKSkKKyAgICAgICAgcmV0dXJuICFhbHBo
YUNoYW5uZWwodmFsdWUuZ2V0UkdCQTMyVmFsdWUoKSk7CisgICAgcmV0dXJuIHZhbHVlLmdldFZh
bHVlSUQoKSA9PSBDU1NWYWx1ZVRyYW5zcGFyZW50OwogfQogCiBib29sIGhhc1RyYW5zcGFyZW50
QmFja2dyb3VuZENvbG9yKFN0eWxlUHJvcGVydGllcyogc3R5bGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3JDb21tYW5kLmNwcAppbmRleCA3ZGI2MzY0ZGJhNGYzNTZlMjQxODlkNzE0ZWUy
ZGNkYzIwNTQwNGFhLi5jMGMxMjg3ZWQyNzA3M2JkMmQzNzBlNTA3NjljZDgzNDRiOTk2YzdiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAgLTEzOSw4ICsxMzks
OCBAQCBzdGF0aWMgYm9vbCBleGVjdXRlVG9nZ2xlU3R5bGVJbkxpc3QoRnJhbWUmIGZyYW1lLCBF
ZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRQogCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBzZWxl
Y3RlZENTU1ZhbHVlID0gc2VsZWN0aW9uU3R5bGUtPnN0eWxlKCktPmdldFByb3BlcnR5Q1NTVmFs
dWUocHJvcGVydHlJRCk7CiAgICAgU3RyaW5nIG5ld1N0eWxlID0gQVNDSUlMaXRlcmFsKCJub25l
Iik7Ci0gICAgaWYgKHNlbGVjdGVkQ1NTVmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKLSAgICAgICAg
UmVmUHRyPENTU1ZhbHVlTGlzdD4gc2VsZWN0ZWRDU1NWYWx1ZUxpc3QgPSB0b0NTU1ZhbHVlTGlz
dChzZWxlY3RlZENTU1ZhbHVlLmdldCgpKTsKKyAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0Pigqc2Vs
ZWN0ZWRDU1NWYWx1ZSkpIHsKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gc2VsZWN0ZWRD
U1NWYWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHNlbGVjdGVkQ1NTVmFsdWUuZ2V0
KCkpOwogICAgICAgICBpZiAoIXNlbGVjdGVkQ1NTVmFsdWVMaXN0LT5yZW1vdmVBbGwodmFsdWUp
KQogICAgICAgICAgICAgc2VsZWN0ZWRDU1NWYWx1ZUxpc3QtPmFwcGVuZCgqdmFsdWUpOwogICAg
ICAgICBpZiAoc2VsZWN0ZWRDU1NWYWx1ZUxpc3QtPmxlbmd0aCgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCmluZGV4IDBkNWQzZmUwZjc5YTFiYjAx
MTRjZDcxZjI3YzcxOWVjODRmYzAzOTguLjQyNjEyZTRlOWRjMGU2MWVhMDZmODExZmUyODg0OGY1
NzZmYTYxZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENv
bnZlcnRlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0
ZXIubW0KQEAgLTcyMCw4ICs3MjAsOCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBIVE1MQ29udmVy
dGVyQ2FjaGVzOjppbmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChFbGVtZW50JgogCiBzdGF0
aWMgYm9vbCBzdHJpbmdGcm9tQ1NTVmFsdWUoQ1NTVmFsdWUmIHZhbHVlLCBTdHJpbmcmIHJlc3Vs
dCkKIHsKLSAgICBpZiAodmFsdWUuaXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgIHVuc2ln
bmVkIHNob3J0IHByaW1pdGl2ZVR5cGUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS5wcmlt
aXRpdmVUeXBlKCk7CisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKKyAg
ICAgICAgdW5zaWduZWQgc2hvcnQgcHJpbWl0aXZlVHlwZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPih2YWx1ZSkucHJpbWl0aXZlVHlwZSgpOwogICAgICAgICBpZiAocHJpbWl0aXZlVHlw
ZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyB8fCBwcmltaXRpdmVUeXBlID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJIHx8CiAgICAgICAgICAgICBwcmltaXRpdmVUeXBlID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQgfHwgcHJpbWl0aXZlVHlwZSA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0FUVFIpIHsKICAgICAgICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9
IHZhbHVlLmNzc1RleHQoKTsKQEAgLTg5MiwxMyArODkyLDEzIEBAIGJvb2wgSFRNTENvbnZlcnRl
ckNhY2hlczo6ZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9kZShOb2RlJiBub2RlLCBDU1NQcm9wZXJ0
eUlEIHByCiAKICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7
CiAgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBjb21wdXRlZFN0eWxlUHJvcGVydHlG
b3JFbGVtZW50KGVsZW1lbnQsIHByb3BlcnR5SWQpKSB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpICYmIGZsb2F0VmFsdWVGcm9tUHJpbWl0aXZlVmFsdWUodG9DU1NQcmlt
aXRpdmVWYWx1ZSgqdmFsdWUpLCByZXN1bHQpKQorICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp2YWx1ZSkgJiYgZmxvYXRWYWx1ZUZyb21QcmltaXRpdmVWYWx1ZShkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSwgcmVzdWx0KSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAogICAgIGJvb2wgaW5oZXJpdCA9IGZhbHNlOwogICAgIGlmIChSZWZQdHI8
Q1NTVmFsdWU+IHZhbHVlID0gaW5saW5lU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoZWxlbWVudCwg
cHJvcGVydHlJZCkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYg
ZmxvYXRWYWx1ZUZyb21QcmltaXRpdmVWYWx1ZSh0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSks
IHJlc3VsdCkpCisgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBm
bG9hdFZhbHVlRnJvbVByaW1pdGl2ZVZhbHVlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpLCByZXN1bHQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmICh2
YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKQogICAgICAgICAgICAgaW5oZXJpdCA9IHRydWU7CkBA
IC0xMDYxLDE0ICsxMDYxLDE0IEBAIENvbG9yIEhUTUxDb252ZXJ0ZXJDYWNoZXM6OmNvbG9yUHJv
cGVydHlWYWx1ZUZvck5vZGUoTm9kZSYgbm9kZSwgQ1NTUHJvcGVydHlJRCBwCiAKICAgICBFbGVt
ZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAgaWYgKFJlZlB0cjxD
U1NWYWx1ZT4gdmFsdWUgPSBjb21wdXRlZFN0eWxlUHJvcGVydHlGb3JFbGVtZW50KGVsZW1lbnQs
IHByb3BlcnR5SWQpKSB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpICYm
IHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVlKS5pc1JHQkNvbG9yKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gbm9ybWFsaXplZENvbG9yKENvbG9yKHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVlKS5n
ZXRSR0JBMzJWYWx1ZSgpKSwgcHJvcGVydHlJZCA9PSBDU1NQcm9wZXJ0eUNvbG9yKTsKKyAgICAg
ICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpICYmIGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPigqdmFsdWUpLmlzUkdCQ29sb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBub3Jt
YWxpemVkQ29sb3IoQ29sb3IoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0
UkdCQTMyVmFsdWUoKSksIHByb3BlcnR5SWQgPT0gQ1NTUHJvcGVydHlDb2xvcik7CiAgICAgfQog
CiAgICAgYm9vbCBpbmhlcml0ID0gZmFsc2U7CiAgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gdmFs
dWUgPSBpbmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChlbGVtZW50LCBwcm9wZXJ0eUlkKSkg
ewotICAgICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiB0b0NTU1ByaW1pdGl2
ZVZhbHVlKCp2YWx1ZSkuaXNSR0JDb2xvcigpKQotICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6
ZWRDb2xvcihDb2xvcih0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSkuZ2V0UkdCQTMyVmFsdWUo
KSksIHByb3BlcnR5SWQgPT0gQ1NTUHJvcGVydHlDb2xvcik7CisgICAgICAgIGlmIChpczxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKS5pc1JHQkNvbG9yKCkpCisgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZENvbG9yKENv
bG9yKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFJHQkEzMlZhbHVlKCkp
LCBwcm9wZXJ0eUlkID09IENTU1Byb3BlcnR5Q29sb3IpOwogICAgICAgICBpZiAodmFsdWUtPmlz
SW5oZXJpdGVkVmFsdWUoKSkKICAgICAgICAgICAgIGluaGVyaXQgPSB0cnVlOwogICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFya3VwLmNwcAppbmRleCA5MGY0NTViNmMxNjk4NmE3YWJlMTM4YzhjNTk4
MjNlMDI2MTkxZjA5Li4wZThmZjgzN2ZlZTQwYmZjMDIxZDlmYzJmOTllYjEyM2QzYjQyZGNhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCkBAIC00NzYsOSArNDc2LDkgQEAgc3RhdGljIGJv
b2wgcHJvcGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBD
U1NQcm9wZXJ0eUlEIHAKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gc3R5bGUtPmdldFBy
b3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICgh
aXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS5nZXQoKSktPmdldFZhbHVlSUQoKSA9
PSBDU1NWYWx1ZU5vbmU7CisgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmU7CiB9CiAKIHN0YXRpYyBib29sIG5l
ZWRJbnRlcmNoYW5nZU5ld2xpbmVBZnRlcihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHYpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4IDhkNDc1OGE2ZTc0MTQzYmZlNDI1
ZmFjM2FiZWFjY2MyM2EwZGY4NjMuLjNlY2FkMDliZDQ0ZGM0Njc4MDhjOWZlZjU4Yjg1NTdiNTll
OTlkOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0zMjcsMTAg
KzMyNywxMCBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZVJlc291cmNlc0ZvclByb3Bl
cnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZQogICAgIHVuc2lnbmVkIHByb3BlcnR5
Q291bnQgPSBzdHlsZURlY2xhcmF0aW9uLT5wcm9wZXJ0eUNvdW50KCk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7ICsraSkgewogICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IGNzc1ZhbHVlID0gc3R5bGVEZWNsYXJhdGlvbi0+cHJvcGVydHlBdChpKS52YWx1ZSgp
OwotICAgICAgICBpZiAoIWNzc1ZhbHVlLT5pc0ltYWdlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFp
czxDU1NJbWFnZVZhbHVlPigqY3NzVmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgU3R5bGVJbWFnZSogc3R5bGVJbWFnZSA9IHRvQ1NTSW1hZ2VWYWx1ZShjc3NWYWx1ZS5n
ZXQoKSktPmNhY2hlZE9yUGVuZGluZ0ltYWdlKCk7CisgICAgICAgIFN0eWxlSW1hZ2UqIHN0eWxl
SW1hZ2UgPSBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPigqY3NzVmFsdWUpLmNhY2hlZE9yUGVuZGlu
Z0ltYWdlKCk7CiAgICAgICAgIC8vIE5vbiBjYWNoZWQtaW1hZ2VzIGFyZSBqdXN0IHBsYWNlLWhv
bGRlcnMgYW5kIGRvIG5vdCBjb250YWluIGRhdGEuCiAgICAgICAgIGlmICghc3R5bGVJbWFnZSB8
fCAhc3R5bGVJbWFnZS0+aXNDYWNoZWRJbWFnZSgpKQogICAgICAgICAgICAgY29udGludWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1h
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1h
dGlvbi5jcHAKaW5kZXggN2YwNmNmZTA1ZWVlZGY0NDA0Nzk5OGE4OWUwNTFlY2YzMWFkZTMzZC4u
YmVhODUzZWU5ZTk0MTdlODA5NjY0MDMxMjFjNTMxYTI5MDkwN2Y4NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApA
QCAtMjk3LDE4ICsyOTcsMTggQEAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+
IGJsZW5kRnVuYyhjb25zdCBBbmltYXRpb25CYXNlKiBhbmltLCBTdHlsZUkKICAgICAgICAgQ1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVyYXRlZCA9IHRvU3R5bGVHZW5lcmF0ZWRJbWFn
ZShmcm9tKS0+aW1hZ2VWYWx1ZSgpOwogICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlJiB0
b0dlbmVyYXRlZCA9IHRvU3R5bGVHZW5lcmF0ZWRJbWFnZSh0byktPmltYWdlVmFsdWUoKTsKIAot
ICAgICAgICBpZiAoZnJvbUdlbmVyYXRlZC5pc0ZpbHRlckltYWdlVmFsdWUoKSAmJiB0b0dlbmVy
YXRlZC5pc0ZpbHRlckltYWdlVmFsdWUoKSkgeworICAgICAgICBpZiAoaXM8Q1NTRmlsdGVySW1h
Z2VWYWx1ZT4oZnJvbUdlbmVyYXRlZCkgJiYgaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5l
cmF0ZWQpKSB7CiAgICAgICAgICAgICAvLyBBbmltYXRpb24gb2YgZ2VuZXJhdGVkIGltYWdlcyBq
dXN0IHBvc3NpYmxlIGlmIGlucHV0IGltYWdlcyBhcmUgZXF1YWwuCiAgICAgICAgICAgICAvLyBP
dGhlcndpc2UgZmFsbCBiYWNrIHRvIGNyb3NzIGZhZGUgYW5pbWF0aW9uLgotICAgICAgICAgICAg
Q1NTRmlsdGVySW1hZ2VWYWx1ZSYgZnJvbUZpbHRlciA9IHRvQ1NTRmlsdGVySW1hZ2VWYWx1ZShm
cm9tR2VuZXJhdGVkKTsKLSAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIHRvRmlsdGVy
ID0gdG9DU1NGaWx0ZXJJbWFnZVZhbHVlKHRvR2VuZXJhdGVkKTsKKyAgICAgICAgICAgIENTU0Zp
bHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVl
Pihmcm9tR2VuZXJhdGVkKTsKKyAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIHRvRmls
dGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0ZWQpOwogICAgICAg
ICAgICAgaWYgKGZyb21GaWx0ZXIuZXF1YWxJbnB1dEltYWdlcyh0b0ZpbHRlcikgJiYgZnJvbUZp
bHRlci5jYWNoZWRJbWFnZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBibGVuZEZpbHRlcihh
bmltLCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21GaWx0ZXIuZmlsdGVyT3BlcmF0aW9u
cygpLCB0b0ZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIHByb2dyZXNzKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmIChmcm9tR2VuZXJhdGVkLmlzQ3Jvc3NmYWRlVmFsdWUoKSAmJiB0b0dlbmVy
YXRlZC5pc0Nyb3NzZmFkZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIENTU0Nyb3NzZmFkZVZhbHVl
JiBmcm9tQ3Jvc3NmYWRlID0gdG9DU1NDcm9zc2ZhZGVWYWx1ZShmcm9tR2VuZXJhdGVkKTsKLSAg
ICAgICAgICAgIENTU0Nyb3NzZmFkZVZhbHVlJiB0b0Nyb3NzZmFkZSA9IHRvQ1NTQ3Jvc3NmYWRl
VmFsdWUodG9HZW5lcmF0ZWQpOworICAgICAgICBpZiAoaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KGZy
b21HZW5lcmF0ZWQpICYmIGlzPENTU0Nyb3NzZmFkZVZhbHVlPih0b0dlbmVyYXRlZCkpIHsKKyAg
ICAgICAgICAgIENTU0Nyb3NzZmFkZVZhbHVlJiBmcm9tQ3Jvc3NmYWRlID0gZG93bmNhc3Q8Q1NT
Q3Jvc3NmYWRlVmFsdWU+KGZyb21HZW5lcmF0ZWQpOworICAgICAgICAgICAgQ1NTQ3Jvc3NmYWRl
VmFsdWUmIHRvQ3Jvc3NmYWRlID0gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KHRvR2VuZXJh
dGVkKTsKICAgICAgICAgICAgIGlmIChmcm9tQ3Jvc3NmYWRlLmVxdWFsSW5wdXRJbWFnZXModG9D
cm9zc2ZhZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpj
cmVhdGUoKnRvQ3Jvc3NmYWRlLmJsZW5kKGZyb21Dcm9zc2ZhZGUsIHByb2dyZXNzKSk7CiAgICAg
ICAgIH0KQEAgLTMxNywxNiArMzE3LDE2IEBAIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxTdHls
ZUltYWdlPiBibGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9uQmFzZSogYW5pbSwgU3R5bGVJCiAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTk5NTYKICAg
ICB9IGVsc2UgaWYgKGZyb20tPmlzR2VuZXJhdGVkSW1hZ2UoKSAmJiB0by0+aXNDYWNoZWRJbWFn
ZSgpKSB7CiAgICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIGZyb21HZW5lcmF0ZWQgPSB0
b1N0eWxlR2VuZXJhdGVkSW1hZ2UoZnJvbSktPmltYWdlVmFsdWUoKTsKLSAgICAgICAgaWYgKGZy
b21HZW5lcmF0ZWQuaXNGaWx0ZXJJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIENTU0ZpbHRl
ckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSB0b0NTU0ZpbHRlckltYWdlVmFsdWUoZnJvbUdlbmVy
YXRlZCk7CisgICAgICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVk
KSkgeworICAgICAgICAgICAgQ1NTRmlsdGVySW1hZ2VWYWx1ZSYgZnJvbUZpbHRlciA9IGRvd25j
YXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpOwogICAgICAgICAgICAgaWYg
KGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSAmJiB0b1N0eWxlQ2FjaGVkSW1hZ2UodG8pLT5jYWNo
ZWRJbWFnZSgpID09IGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gYmxlbmRGaWx0ZXIoYW5pbSwgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpLCBmcm9tRmls
dGVyLmZpbHRlck9wZXJhdGlvbnMoKSwgRmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7CiAg
ICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IEFkZCBpbnRlcnBvbGF0aW9uIGJldHdlZW4gY3Jv
c3MtZmFkZSBhbmQgaW1hZ2Ugc291cmNlLgogICAgIH0gZWxzZSBpZiAoZnJvbS0+aXNDYWNoZWRJ
bWFnZSgpICYmIHRvLT5pc0dlbmVyYXRlZEltYWdlKCkpIHsKICAgICAgICAgQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZSYgdG9HZW5lcmF0ZWQgPSB0b1N0eWxlR2VuZXJhdGVkSW1hZ2UodG8pLT5pbWFn
ZVZhbHVlKCk7Ci0gICAgICAgIGlmICh0b0dlbmVyYXRlZC5pc0ZpbHRlckltYWdlVmFsdWUoKSkg
ewotICAgICAgICAgICAgQ1NTRmlsdGVySW1hZ2VWYWx1ZSYgdG9GaWx0ZXIgPSB0b0NTU0ZpbHRl
ckltYWdlVmFsdWUodG9HZW5lcmF0ZWQpOworICAgICAgICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VW
YWx1ZT4odG9HZW5lcmF0ZWQpKSB7CisgICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiB0
b0ZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKTsKICAg
ICAgICAgICAgIGlmICh0b0ZpbHRlci5jYWNoZWRJbWFnZSgpICYmIHRvU3R5bGVDYWNoZWRJbWFn
ZShmcm9tKS0+Y2FjaGVkSW1hZ2UoKSA9PSB0b0ZpbHRlci5jYWNoZWRJbWFnZSgpKSAgICAgCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0sIHRvRmlsdGVyLmNhY2hlZElt
YWdlKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgdG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBw
cm9ncmVzcyk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2wuY3BwCmluZGV4IDQwMzVmNjYwNDE5ZWFmNTA4M2FkYjNkM2ViODFjMmQ5YTE5
ODc3OTMuLmY0MmVjZTc2NjZjM2VkNzFmMGQ1ZDE1NjdkNmJlMTYwOTU1Y2Q3ZTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcApAQCAtODQsOCAr
ODQsOCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjphZGp1c3RJbm5lclRleHRTdHlsZShjb25z
dCBSZW5kZXJTdHlsZSogc3RhcnRTdHlsZSwgUmVuZAogICAgIGlmIChIVE1MRWxlbWVudCogaW5u
ZXJUZXh0ID0gY29udHJvbC5pbm5lclRleHRFbGVtZW50KCkpIHsKICAgICAgICAgaWYgKGNvbnN0
IFN0eWxlUHJvcGVydGllcyogcHJvcGVydGllcyA9IGlubmVyVGV4dC0+cHJlc2VudGF0aW9uQXR0
cmlidXRlU3R5bGUoKSkgewogICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IHBy
b3BlcnRpZXMtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRVc2VyTW9kaWZ5
KTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQot
ICAgICAgICAgICAgICAgIHRleHRCbG9ja1N0eWxlLT5zZXRVc2VyTW9kaWZ5KHRvQ1NTUHJpbWl0
aXZlVmFsdWUoKnZhbHVlKSk7CisgICAgICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhbHVlLmdldCgpKSkKKyAgICAgICAgICAgICAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0VXNlck1v
ZGlmeShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSk7CiAgICAgICAgIH0KICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVBl
bmRpbmdJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUGVuZGlu
Z0ltYWdlLmgKaW5kZXggYjk1NDg2ODU0YWExYzlhY2I2YTFhYjkyMjAzZDc5NDE0MTYwNmIwNS4u
NTk5ZGEwNDdhYjYzZDY0ODJiYWE0NTZlYmNkYjAyOGQyOTNkZWVhNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUGVuZGluZ0ltYWdlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUGVuZGluZ0ltYWdlLmgKQEAgLTQ1LDEy
ICs0NSwxMiBAQCBjbGFzcyBTdHlsZVBlbmRpbmdJbWFnZSA6IHB1YmxpYyBTdHlsZUltYWdlIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVBlbmRpbmdJbWFnZT4gY3JlYXRl
KENTU1ZhbHVlKiB2YWx1ZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUGVuZGluZ0ltYWdl
KHZhbHVlKSk7IH0KIAotICAgIENTU0ltYWdlVmFsdWUqIGNzc0ltYWdlVmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlICYmIG1fdmFsdWUtPmlzSW1hZ2VWYWx1ZSgpID8gdG9DU1NJbWFnZVZh
bHVlKG1fdmFsdWUpIDogbnVsbHB0cjsgfQorICAgIENTU0ltYWdlVmFsdWUqIGNzc0ltYWdlVmFs
dWUoKSBjb25zdCB7IHJldHVybiBpczxDU1NJbWFnZVZhbHVlPihtX3ZhbHVlKSA/IGRvd25jYXN0
PENTU0ltYWdlVmFsdWU+KG1fdmFsdWUpIDogbnVsbHB0cjsgfQogICAgIENTU0ltYWdlR2VuZXJh
dG9yVmFsdWUqIGNzc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
ICYmIG1fdmFsdWUtPmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpID8gc3RhdGljX2Nhc3Q8Q1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZSo+KG1fdmFsdWUpIDogbnVsbHB0cjsgfQotICAgIENTU0N1cnNvcklt
YWdlVmFsdWUqIGNzc0N1cnNvckltYWdlVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlICYm
IG1fdmFsdWUtPmlzQ3Vyc29ySW1hZ2VWYWx1ZSgpID8gdG9DU1NDdXJzb3JJbWFnZVZhbHVlKG1f
dmFsdWUpIDogbnVsbHB0cjsgfQorICAgIENTU0N1cnNvckltYWdlVmFsdWUqIGNzc0N1cnNvcklt
YWdlVmFsdWUoKSBjb25zdCB7IHJldHVybiBpczxDU1NDdXJzb3JJbWFnZVZhbHVlPihtX3ZhbHVl
KSA/IGRvd25jYXN0PENTU0N1cnNvckltYWdlVmFsdWU+KG1fdmFsdWUpIDogbnVsbHB0cjsgfQog
CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAgQ1NTSW1hZ2VTZXRWYWx1ZSogY3NzSW1h
Z2VTZXRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgJiYgbV92YWx1ZS0+aXNJbWFnZVNl
dFZhbHVlKCkgPyB0b0NTU0ltYWdlU2V0VmFsdWUobV92YWx1ZSkgOiBudWxscHRyOyB9CisgICAg
Q1NTSW1hZ2VTZXRWYWx1ZSogY3NzSW1hZ2VTZXRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzPENT
U0ltYWdlU2V0VmFsdWU+KG1fdmFsdWUpID8gZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4obV92
YWx1ZSkgOiBudWxscHRyOyB9CiAjZW5kaWYKIAogICAgIHZvaWQgZGV0YWNoRnJvbUNTU1ZhbHVl
KCkgeyBtX3ZhbHVlID0gbnVsbHB0cjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0NvbG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ29sb3IuaAppbmRleCA0NjBjZjAy
OThjOGE0ZjM2MDY5MTJhMTIzNTI1ZTIwN2I5NTgzNWVhLi4wMDc1ZWRlY2FkN2Y2NWViYjk0OWNk
MzAwNTAwMDM3YmFlMmM0NzI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ29s
b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ29sb3IuaApAQCAtOTIsOCArOTIsOCBA
QCBwcml2YXRlOgogICAgIFNWR0NvbG9yVHlwZSBtX2NvbG9yVHlwZTsKIH07CiAKLUNTU19WQUxV
RV9UWVBFX0NBU1RTKFNWR0NvbG9yLCBpc1NWR0NvbG9yKCkpOwotCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKFNWR0NvbG9yLCBpc1NW
R0NvbG9yKCkpCisKICNlbmRpZiAvLyBTVkdDb2xvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
b250RmFjZUVsZW1lbnQuY3BwCmluZGV4IDA2ZGQyNDgwNGIyNDdlNWQ5MzZmNTU0MWQ4MGJkY2I1
NjY2MDUzMGIuLmFlNjQ5ZGVhMzE5MmY1MzkxOTZhNjk5ZjE1OWI1Yjk3NjYwMGQ4OWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCkBAIC0yNTMsMTEgKzI1Mywx
MSBAQCB2b2lkIFNWR0ZvbnRGYWNlRWxlbWVudDo6cmVidWlsZEZvbnRGYWNlKCkKICAgICBpZiAo
ZGVzY3JpYmVzUGFyZW50Rm9udCkgeyAgICAKICAgICAgICAgLy8gVHJhdmVyc2UgcGFyc2VkIENT
UyB2YWx1ZXMgYW5kIGFzc29jaWF0ZSBDU1NGb250RmFjZVNyY1ZhbHVlIGVsZW1lbnRzIHdpdGgg
b3Vyc2VsdmVzLgogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHNyYyA9IG1fZm9udEZhY2VSdWxl
LT5wcm9wZXJ0aWVzKCkuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVNyYyk7Ci0gICAg
ICAgIENTU1ZhbHVlTGlzdCogc3JjTGlzdCA9IHRvQ1NTVmFsdWVMaXN0KHNyYy5nZXQoKSk7Cisg
ICAgICAgIENTU1ZhbHVlTGlzdCogc3JjTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oc3Jj
LmdldCgpKTsKIAogICAgICAgICB1bnNpZ25lZCBzcmNMZW5ndGggPSBzcmNMaXN0ID8gc3JjTGlz
dC0+bGVuZ3RoKCkgOiAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3JjTGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChDU1NGb250RmFjZVNyY1ZhbHVlKiBpdGVtID0g
dG9DU1NGb250RmFjZVNyY1ZhbHVlKHNyY0xpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkp
KQorICAgICAgICAgICAgaWYgKENTU0ZvbnRGYWNlU3JjVmFsdWUqIGl0ZW0gPSBkb3duY2FzdDxD
U1NGb250RmFjZVNyY1ZhbHVlPihzcmNMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKSkK
ICAgICAgICAgICAgICAgICBpdGVtLT5zZXRTVkdGb250RmFjZUVsZW1lbnQodGhpcyk7CiAgICAg
ICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFpbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYWludC5oCmluZGV4IGQzMDkzYWZiMmFlMzhmOWE3NzE1
NThkYzhjNzgyZGIyOTI3MzBkMDguLmFhMzljN2UwYjk5NzcxM2NiYzkxNjFlZGQ1NjQ0MGY1MDMw
ZDAzZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYWludC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYWludC5oCkBAIC0xMTIsOCArMTEyLDggQEAgcHJpdmF0ZToK
ICAgICBTdHJpbmcgbV91cmk7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhTVkdQYWludCwg
aXNTVkdQYWludCgpKTsKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0NTU19WQUxVRShTVkdQYWludCwgaXNTVkdQYWludCgpKQorCiAjZW5kaWYgLy8g
U1ZHUGFpbnRfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239182</attachid>
            <date>2014-10-03 00:13:46 -0700</date>
            <delta_ts>2014-10-03 10:05:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137381-20141003001347.patch</filename>
            <type>text/plain</type>
            <size>277424</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MjU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGM5N2M2NjIyNmVjMDAx
NGI2YzIwYTdlNDdiOTAwOTZiMzc1YTFiYS4uM2YyYTg2NTYwYWVjOGZhMzViYWEyNzE5YTQwYTc4
YTVlZmQyOTk4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0MSBAQAorMjAxNC0xMC0wMiAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSBmb3IgQ1NTVmFsdWUgc3ViY2xhc3NlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzgxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBm
b3IgQ1NTVmFsdWUgc3ViY2xhc3Nlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2
aW9yIGNoYW5nZS4KKworICAgICAgICAqIGNzcy9DU1NBc3BlY3RSYXRpb1ZhbHVlLmg6CisgICAg
ICAgICogY3NzL0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1ND
YWxjdWxhdGlvblZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9u
Tm9kZVBhcnNlcjo6cGFyc2VWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU0NhbGN1bGF0aW9uVmFs
dWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTQ2FudmFzVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEJvcmRl
clJhZGl1c1Nob3J0aGFuZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVF
eHRyYWN0b3I6OnByb3BlcnR5TWF0Y2hlcyk6CisgICAgICAgICogY3NzL0NTU0Nyb3NzZmFkZVZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN1YmltYWdlS25vd25Ub0JlT3BhcXVlKToKKyAg
ICAgICAgKiBjc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDdXJzb3JJbWFnZVZhbHVlOjp+
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDdXJzb3JJbWFnZVZh
bHVlOjp1cGRhdGVJZlNWR0N1cnNvcklzVXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDdXJz
b3JJbWFnZVZhbHVlOjpjYWNoZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDdXJzb3JJ
bWFnZVZhbHVlOjpjYWNoZWRPclBlbmRpbmdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1ND
dXJzb3JJbWFnZVZhbHVlOjppc1NWR0N1cnNvcik6CisgICAgICAgICogY3NzL0NTU0N1cnNvcklt
YWdlVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5oOgorICAgICAg
ICAqIGNzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0ZvbnRGZWF0
dXJlVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKToKKyAgICAgICAgKiBj
c3MvQ1NTRm9udFZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0Z1bmN0aW9uVmFsdWUuaDoKKyAg
ICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NH
cmFkaWVudFZhbHVlOjppbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVl
OjpncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCk6CisgICAgICAgICogY3NzL0NTU0dyYWRpZW50
VmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLmg6CisgICAgICAg
ICogY3NzL0NTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRv
clZhbHVlOjppbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVl
Ojppc0ZpeGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVl
OjpmaXhlZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6
aXNQZW5kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6Omtu
b3duVG9CZU9wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVl
Ojpsb2FkU3ViaW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFs
dWU6OnN1YmltYWdlSXNQZW5kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJh
dG9yVmFsdWU6OmNhY2hlZEltYWdlRm9yQ1NTVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NJbWFn
ZUdlbmVyYXRvclZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0ltYWdlU2V0VmFsdWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VTZXRWYWx1ZTo6ZmlsbEltYWdlU2V0KToKKyAgICAg
ICAgKiBjc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NJbWFnZVZhbHVl
Lmg6CisgICAgICAgICogY3NzL0NTU0luaGVyaXRlZFZhbHVlLmg6CisgICAgICAgICogY3NzL0NT
U0luaXRpYWxWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NMaW5lQm94Q29udGFpblZhbHVlLmg6
CisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OnBhcnNlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjphZGRGaWxsVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjphZGRBbmltYXRpb25WYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlM1ZhbHVlc0ZpbGxQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRmlsbFBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGaWxsUmVwZWF0KToKKyAgICAgICAgKFdlYkNvcmU6
OmdyaWRNaXNzaW5nR3JpZFBvc2l0aW9uVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZUdyaWRUZW1wbGF0ZVJvd3NBbmRBcmVhcyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUNpcmNsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
YXJzZXI6OnBhcnNlQmFzaWNTaGFwZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZURlcHJlY2F0ZWRHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OnBhcnNlRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6cGFyc2VSYWRpYWxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OmNyZWF0ZUZvbnRGYWNlUnVsZSk6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVl
Lmg6CisgICAgICAgICogY3NzL0NTU1JlZmxlY3RWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NT
aGFkb3dWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmg6Cisg
ICAgICAgICogY3NzL0NTU1RvU3R5bGVNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9T
dHlsZU1hcDo6bWFwRmlsbEF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHls
ZU1hcDo6bWFwRmlsbENsaXApOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFw
RmlsbENvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBGaWxs
QmxlbmRNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxPcmln
aW4pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbFJlcGVhdFgpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbFJlcGVhdFkpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbFhQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NUb1N0eWxlTWFwOjptYXBGaWxsWVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Rv
U3R5bGVNYXA6Om1hcEZpbGxNYXNrU291cmNlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjptYXBBbmltYXRpb25EZWxheSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0
eWxlTWFwOjptYXBBbmltYXRpb25EaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9T
dHlsZU1hcDo6bWFwQW5pbWF0aW9uRHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9T
dHlsZU1hcDo6bWFwQW5pbWF0aW9uRmlsbE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9T
dHlsZU1hcDo6bWFwQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjptYXBBbmltYXRpb25QbGF5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VTbGljZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVF1YWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQpOgorICAgICAgICAqIGNz
cy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6aXNJbXBsaWNpdEluaXRpYWxWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTVmFsdWU6Omhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWU6OmVxdWFscyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NWYWx1ZTo6Y3NzVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6ZGVzdHJveSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6Y2xvbmVGb3JDU1NPTSk6CisgICAgICAgICog
Y3NzL0NTU1ZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5oOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTVmFsdWVMaXN0SW5zcGVjdG9yOjpDU1NWYWx1ZUxpc3RJbnNwZWN0b3IpOgor
ICAgICAgICAqIGNzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlEZWZhdWx0OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlOdW1iZXI6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eUF1dG86OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eUNsaXA6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNv
bG9yOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlMZW5ndGg6
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVN0cmluZzo6YXBw
bHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVyUmFkaXVzOjph
cHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGaWxsTGF5ZXI6OmFw
cGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGg6
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnQ6OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRGYW1pbHk6OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250V2VpZ2h0OjphcHBseVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250VmFyaWFudExpZ2F0dXJl
czo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291bnRlcjo6
YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q3Vyc29yOjphcHBs
eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0QWxpZ246OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHREZWNvcmF0aW9uOjph
cHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RGVjb3JhdGlv
blNraXA6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU1hcnF1
ZWVJbmNyZW1lbnQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eU1hcnF1ZWVSZXBldGl0aW9uOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlNYXJxdWVlU3BlZWQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eVRleHRVbmRlcmxpbmVQb3NpdGlvbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5TGluZUhlaWdodDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5TGluZUhlaWdodEZvcklPU1RleHRBdXRvc2l6aW5nOjphcHBs
eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlXb3JkU3BhY2luZzo6YXBw
bHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5UGFnZVNpemU6OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRFbXBoYXNpc1N0eWxl
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RW1waGFz
aXNQb3NpdGlvbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
UmVzaXplOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlWZXJ0
aWNhbEFsaWduOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlB
c3BlY3RSYXRpbzo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
Wm9vbTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGlzcGxh
eTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q2xpcFBhdGg6
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVNoYXBlOjphcHBs
eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlJbWFnZVJlc29sdXRpb246
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRJbmRlbnQ6
OmFwcGx5VmFsdWUpOgorICAgICAgICAqIGNzcy9NZWRpYUxpc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6cmVwb3J0TWVkaWFRdWVyeVdhcm5pbmdJZk5lZWRlZCk6CisgICAgICAgICogY3NzL01l
ZGlhUXVlcnlFdmFsdWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGFyZUFzcGVjdFJh
dGlvVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6bnVtYmVyVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6b3JpZW50YXRpb25NZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OmV2
YWxSZXNvbHV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmRldmljZV9waXhlbF9yYXRpb01lZGlh
RmVhdHVyZUV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x1dGlvbk1lZGlhRmVhdHVyZUV2
YWwpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3Jl
Ojp2aWV3X21vZGVNZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OnBvaW50ZXJN
ZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKiBjc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cm9rZURhc2hBcnJheVRvQ1NTVmFsdWVM
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnN2Z1Byb3Bl
cnR5VmFsdWUpOgorICAgICAgICAqIGNzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkpOgorICAgICAgICAq
IGNzcy9Tb3VyY2VTaXplTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlTGVuZ3Ro
KToKKyAgICAgICAgKiBjc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUHJvcGVydGllczo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKToKKyAgICAgICAgKiBj
c3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0RGlyZWN0aW9u
QW5kV3JpdGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR3JpZFRyYWNrU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHcmlkVHJhY2tMaXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUdyaWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpwYXJzZVNuYXBDb29yZGluYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OnBhcnNlU25hcFBvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJv
bVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9w
ZXJhdGlvbnMpOgorICAgICAgICAqIGNzcy9UcmFuc2Zvcm1GdW5jdGlvbnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dHJhbnNmb3Jtc0ZvclZhbHVlKToKKyAgICAgICAgKiBjc3MvVmlld3BvcnRT
dHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZXdwb3J0U3R5bGVSZXNvbHZl
cjo6Z2V0Vmlld3BvcnRBcmd1bWVudFZhbHVlKToKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTRmls
dGVyVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTTWF0cml4LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYktpdENTU01hdHJpeDo6c2V0TWF0cml4VmFsdWUpOgorICAgICAgICAqIGNz
cy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZTo6dG9XZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxl
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6Y29tcHV0
ZWRGb250U2l6ZSk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6aWRlbnRpZmllckZvclN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEVsZW1lbnRFcXVpdmFsZW50Ojp2YWx1ZUlzUHJlc2VudEluU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudDo6dmFsdWVJc1ByZXNlbnRJ
blN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNzc1ZhbHVlVG9SR0JBKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRpbmdTdHlsZTo6ZXh0cmFjdEZvbnRTaXplRGVsdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdGluZ1N0eWxlOjp0ZXh0RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRpbmdTdHlsZTo6cHJlcGFyZVRvQXBwbHlBdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5n
U3R5bGU6Om1lcmdlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjptZXJn
ZVN0eWxlRnJvbVJ1bGVzRm9yU2VyaWFsaXphdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
aW5nU3R5bGU6OmxlZ2FjeUZvbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHls
ZTo6dGV4dERpcmVjdGlvbkZvclNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNo
YW5nZTo6ZXh0cmFjdFRleHRTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZGlmZlRleHREZWNv
cmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpmb250V2VpZ2h0SXNCb2xkKToKKyAgICAgICAg
KFdlYkNvcmU6OmlzVHJhbnNwYXJlbnRDb2xvclZhbHVlKToKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZVRvZ2dsZVN0eWxlSW5M
aXN0KToKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW06CisgICAgICAg
IChzdHJpbmdGcm9tQ1NTVmFsdWUpOgorICAgICAgICAoSFRNTENvbnZlcnRlckNhY2hlczo6Zmxv
YXRQcm9wZXJ0eVZhbHVlRm9yTm9kZSk6CisgICAgICAgIChIVE1MQ29udmVydGVyQ2FjaGVzOjpj
b2xvclByb3BlcnR5VmFsdWVGb3JOb2RlKToKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpwcm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKToKKyAgICAg
ICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJp
YWxpemVyOjpyZXRyaWV2ZVJlc291cmNlc0ZvclByb3BlcnRpZXMpOgorICAgICAgICAqIHBhZ2Uv
YW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJs
ZW5kRnVuYyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjphZGp1c3RJbm5lclRleHRTdHlsZSk6
CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlUGVuZGluZ0ltYWdlLmg6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVBlbmRpbmdJbWFnZTo6Y3NzSW1hZ2VWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVBlbmRpbmdJbWFnZTo6Y3NzQ3Vyc29ySW1hZ2VWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVBlbmRpbmdJbWFnZTo6Y3NzSW1hZ2VTZXRWYWx1ZSk6CisgICAgICAg
ICogc3ZnL1NWR0NvbG9yLmg6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFjZSk6
CisgICAgICAgICogc3ZnL1NWR1BhaW50Lmg6CisKIDIwMTQtMTAtMDIgIEFuZHJlYXMgS2xpbmcg
IDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIENTU09NIHJ1bGUgd3JhcHBlcnMgYWx3YXlz
IGhhdmUgYSBjb3JyZXNwb25kaW5nIGludGVybmFsIHN0eWxlIG9iamVjdC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBc3BlY3RSYXRpb1ZhbHVlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQXNwZWN0UmF0aW9WYWx1ZS5oCmluZGV4IDVkNDU1ZmVjZDhjZWIwMzVhYTVjYWRm
NWQxYzQ4NTE1NjM5YWQ4NWQuLjg3ZDU0NmI4NGY3YmNhNTU0Mzg5Zjg4Njk1YzIyYmQ5MWY5Nzg5
MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBc3BlY3RSYXRpb1ZhbHVlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FzcGVjdFJhdGlvVmFsdWUuaApAQCAtNjAsOCAr
NjAsOCBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fZGVub21pbmF0b3JWYWx1ZTsKIH07CiAKLUNT
U19WQUxVRV9UWVBFX0NBU1RTKENTU0FzcGVjdFJhdGlvVmFsdWUsIGlzQXNwZWN0UmF0aW9WYWx1
ZSgpKQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi19CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0NTU19WQUxVRShDU1NBc3BlY3RSYXRpb1ZhbHVlLCBpc0FzcGVjdFJhdGlvVmFsdWUoKSkKIAog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VTbGlj
ZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmgK
aW5kZXggZmJjMjA0YmM2NTYzZTMxNTFjNjUyMGZhYjYyNjhkMWVhODAzNDAxMy4uOGI5ZmU0YWNl
ODhmZThlYTRjYzg5M2U2YjFjYjc1ZjE0OTNlZWY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaApAQCAtNTYsOCArNTYsOCBAQCBwcml2YXRlOgog
ICAgIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZShQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBzbGljZXMsIGJvb2wgZmlsbCk7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NCb3Jk
ZXJJbWFnZVNsaWNlVmFsdWUsIGlzQm9yZGVySW1hZ2VTbGljZVZhbHVlKCkpCi0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTQm9y
ZGVySW1hZ2VTbGljZVZhbHVlLCBpc0JvcmRlckltYWdlU2xpY2VWYWx1ZSgpKQorCiAjZW5kaWYg
Ly8gQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxj
dWxhdGlvblZhbHVlLmNwcAppbmRleCAzN2E4MTcxNTAxNDFlZDJmODk5YzU2NDFhYjI5OGU3ODY5
NjVlZTEwLi41YTkwNDFkMWMyMWE1NWE0YTdiODdhNzRiOTIzMjc3ZWY0MTk4ZjNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3BwCkBAIC02MDIsMTEgKzYwMiwx
MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIFJlZlB0
cjxDU1NWYWx1ZT4gdmFsdWUgPSBwYXJzZXJWYWx1ZS0+Y3JlYXRlQ1NTVmFsdWUoKTsKLSAgICAg
ICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYg
KCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUuZ2V0KCkpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUodmFsdWUuZ2V0KCkpOwotICAgICAgICByZXN1bHQtPnZhbHVlID0g
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJpbWl0aXZlVmFsdWUsIHBhcnNlclZhbHVl
LT5pc0ludCk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgICAgICByZXN1bHQtPnZhbHVl
ID0gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoJnByaW1pdGl2ZVZhbHVlLCBwYXJzZXJW
YWx1ZS0+aXNJbnQpOwogCiAgICAgICAgICsrKmluZGV4OwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oCmluZGV4IGNlMGNiNWE2ZTBj
NjJiMGEyZDc5MWY2ZDJlZmQ1YTg4MWIxY2MyMWIuLmZjMDQ0M2ZjYjE5OTgxMWYwMjEzMzgxYWYz
MzUxNjk2YmY5MGYyYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxh
dGlvblZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUu
aApAQCAtMTIyLDggKzEyMiw4IEBAIGlubGluZSBQYXNzUmVmPENhbGN1bGF0aW9uVmFsdWU+IENT
U0NhbGNWYWx1ZTo6Y3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShjb25zdCBDU1NUCiAgICAgICAgIG1f
c2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlID8gQ2FsY3VsYXRpb25SYW5nZU5vbk5lZ2F0aXZlIDog
Q2FsY3VsYXRpb25SYW5nZUFsbCk7CiB9CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0NhbGNW
YWx1ZSwgaXNDYWxjVmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NDYWxjVmFsdWUsIGlzQ2FsY1ZhbHVlKCkpCisK
ICNlbmRpZiAvLyBDU1NDYWxjdWxhdGlvblZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1Zh
bHVlLmgKaW5kZXggYjY3ZDA0ZmViYTEwZTM0Yzc0ZDZjZDE4NzA0ZGFlMjFhZDBkZjE4OC4uMzJl
ZWM2ZDU4MzNmOTg3OTZjZTdmYTg0MDRmNWEyNGQ3NzU5OTA4ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0NhbnZhc1ZhbHVlLmgKQEAgLTEwMiw4ICsxMDIsOCBAQCBwcml2YXRlOgogICAgIEhUTUxDYW52
YXNFbGVtZW50KiBtX2VsZW1lbnQ7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NDYW52
YXNWYWx1ZSwgaXNDYW52YXNWYWx1ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0NhbnZhc1ZhbHVlLCBpc0NhbnZhc1Zh
bHVlKCkpCisKICNlbmRpZiAvLyBDU1NDYW52YXNWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCmluZGV4IDA3OTAxNjczODg1
NmY5MTBlODdlZjA3YzdlNTM1ZWRkNGIxZjM3MDIuLmNlNWVlNmU0ZWU3Y2NjYzJjYjQ4YmNkYzli
ZmEyZTFhOTA4YmMwODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC03NzMsNyArNzczLDcgQEAgc3RhdGljIFBhc3NSZWY8
Q1NTVmFsdWVMaXN0PiBnZXRCb3JkZXJSYWRpdXNTaG9ydGhhbmRWYWx1ZShjb25zdCBSZW5kZXJT
dHlsZSogc3QKICAgICBpZiAoc2hvd1ZlcnRpY2FsQm90dG9tTGVmdCkKICAgICAgICAgdmVydGlj
YWxSYWRpaUxpc3QtPmFwcGVuZCgqYm90dG9tTGVmdFJhZGl1cy0+aXRlbSgxKSk7CiAKLSAgICBp
ZiAoIXZlcnRpY2FsUmFkaWlMaXN0LT5lcXVhbHMoKnRvQ1NTVmFsdWVMaXN0KGxpc3QuZ2V0KCku
aXRlbSgwKSkpKQorICAgIGlmICghdmVydGljYWxSYWRpaUxpc3QtPmVxdWFscyhkb3duY2FzdDxD
U1NWYWx1ZUxpc3Q+KCpsaXN0LmdldCgpLml0ZW0oMCkpKSkKICAgICAgICAgbGlzdC5nZXQoKS5h
cHBlbmQodmVydGljYWxSYWRpaUxpc3QucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXR1cm4g
bGlzdDsKQEAgLTMxNDksMTMgKzMxNDksMTMgQEAgU3RyaW5nIENTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbjo6aXRlbSh1bnNpZ25lZCBpKSBjb25zdAogCiBib29sIENvbXB1dGVkU3R5bGVFeHRy
YWN0b3I6OnByb3BlcnR5TWF0Y2hlcyhDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IENT
U1ZhbHVlKiB2YWx1ZSkgY29uc3QKIHsKLSAgICBpZiAocHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0
eUZvbnRTaXplICYmIHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYgbV9ub2RlKSB7CisgICAg
aWYgKHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlGb250U2l6ZSAmJiBpczxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKSAmJiBtX25vZGUpIHsKICAgICAgICAgbV9ub2RlLT5kb2N1bWVudCgpLnVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgICAgICBSZW5kZXJTdHls
ZSogc3R5bGUgPSBtX25vZGUtPmNvbXB1dGVkU3R5bGUobV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVy
KTsKICAgICAgICAgaWYgKHN0eWxlICYmIHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5rZXl3b3Jk
U2l6ZSgpKSB7CiAgICAgICAgICAgICBDU1NWYWx1ZUlEIHNpemVWYWx1ZSA9IGNzc0lkZW50aWZp
ZXJGb3JGb250U2l6ZUtleXdvcmQoc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmtleXdvcmRTaXpl
KCkpOwotICAgICAgICAgICAgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmlzVmFsdWVJRCgpICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gc2l6
ZVZhbHVlKQorICAgICAgICAgICAgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZh
bHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgICAgICAgICBp
ZiAocHJpbWl0aXZlVmFsdWUuaXNWYWx1ZUlEKCkgJiYgcHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJ
RCgpID09IHNpemVWYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwCmluZGV4IGQ0
M2RiMWU2YTRhYWU2YzQ4OWZmZTI5ZmI0N2FkYjY2YzVjMmU0N2IuLjE5MDIzY2I5NjM5NjlhYTdl
M2EyMThiNTQyODQ0ZGFkY2U0MGM4OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NDcm9zc2ZhZGVWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFk
ZVZhbHVlLmNwcApAQCAtNDcsMTEgKzQ3LDExIEBAIHN0YXRpYyBpbmxpbmUgZG91YmxlIGJsZW5k
RnVuYyhkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiAKIHN0YXRpYyBi
b29sIHN1YmltYWdlS25vd25Ub0JlT3BhcXVlKENTU1ZhbHVlJiB2YWx1ZSwgY29uc3QgUmVuZGVy
RWxlbWVudCogcmVuZGVyZXIpCiB7Ci0gICAgaWYgKHZhbHVlLmlzSW1hZ2VWYWx1ZSgpKQotICAg
ICAgICByZXR1cm4gdG9DU1NJbWFnZVZhbHVlKHZhbHVlKS5rbm93blRvQmVPcGFxdWUocmVuZGVy
ZXIpOworICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPih2YWx1ZSkpCisgICAgICAgIHJldHVybiBk
b3duY2FzdDxDU1NJbWFnZVZhbHVlPih2YWx1ZSkua25vd25Ub0JlT3BhcXVlKHJlbmRlcmVyKTsK
IAotICAgIGlmICh2YWx1ZS5pc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSkKLSAgICAgICAgcmV0dXJu
IHRvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSh2YWx1ZSkua25vd25Ub0JlT3BhcXVlKHJlbmRlcmVy
KTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpKQorICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4odmFsdWUpLmtub3duVG9CZU9w
YXF1ZShyZW5kZXJlcik7CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuaAppbmRleCAxNGRhNTljNzk0ZGM3Y2JhMjE5OWQ0MjA5
ODhiZWUwNTQxZTc5OWY1Li4zMzA1NDBiOGEzNDU5MmMzOGUwZjU5ZTliMzQyODBjNTUwNTM3MTVk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuaApAQCAtMTEwLDggKzExMCw4
IEBAIHByaXZhdGU6CiAgICAgQ3Jvc3NmYWRlU3ViaW1hZ2VPYnNlcnZlclByb3h5IG1fY3Jvc3Nm
YWRlU3ViaW1hZ2VPYnNlcnZlcjsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0Nyb3Nz
ZmFkZVZhbHVlLCBpc0Nyb3NzZmFkZVZhbHVlKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTQ3Jvc3NmYWRlVmFsdWUsIGlz
Q3Jvc3NmYWRlVmFsdWUoKSkKKwogI2VuZGlmIC8vIENTU0Nyb3NzZmFkZVZhbHVlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmNwcAppbmRleCBmNThjOTIwNWFkZmI0
MWMyODc2NGVmYjhhNDNjNmQyZjNhNGQ4ZDI0Li45ZjQ2ZTc5MTlkNTVhMmMyZTMyZmRmOTM3ZTU5
MTZlYjdiM2ZhOGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1h
Z2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUu
Y3BwCkBAIC04MSw3ICs4MSw3IEBAIENTU0N1cnNvckltYWdlVmFsdWU6On5DU1NDdXJzb3JJbWFn
ZVZhbHVlKCkKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFNWR0VsZW1l
bnQqIHJlZmVyZW5jZWRFbGVtZW50ID0gKml0OwogICAgICAgICByZWZlcmVuY2VkRWxlbWVudC0+
Y3Vyc29ySW1hZ2VWYWx1ZVJlbW92ZWQoKTsKLSAgICAgICAgaWYgKFNWR0N1cnNvckVsZW1lbnQq
IGN1cnNvckVsZW1lbnQgPSByZXNvdXJjZVJlZmVyZW5jZWRCeUN1cnNvckVsZW1lbnQodG9DU1NJ
bWFnZVZhbHVlKG1faW1hZ2VWYWx1ZS5nZXQoKSkudXJsKCksIHJlZmVyZW5jZWRFbGVtZW50LT5k
b2N1bWVudCgpKSkKKyAgICAgICAgaWYgKFNWR0N1cnNvckVsZW1lbnQqIGN1cnNvckVsZW1lbnQg
PSByZXNvdXJjZVJlZmVyZW5jZWRCeUN1cnNvckVsZW1lbnQoZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1
ZT4obV9pbWFnZVZhbHVlLmdldCgpKS51cmwoKSwgcmVmZXJlbmNlZEVsZW1lbnQtPmRvY3VtZW50
KCkpKQogICAgICAgICAgICAgY3Vyc29yRWxlbWVudC0+cmVtb3ZlQ2xpZW50KHJlZmVyZW5jZWRF
bGVtZW50KTsKICAgICB9CiB9CkBAIC0xMDcsNyArMTA3LDcgQEAgYm9vbCBDU1NDdXJzb3JJbWFn
ZVZhbHVlOjp1cGRhdGVJZlNWR0N1cnNvcklzVXNlZChFbGVtZW50KiBlbGVtZW50KQogICAgIGlm
ICghaXNTVkdDdXJzb3IoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKFNWR0N1
cnNvckVsZW1lbnQqIGN1cnNvckVsZW1lbnQgPSByZXNvdXJjZVJlZmVyZW5jZWRCeUN1cnNvckVs
ZW1lbnQodG9DU1NJbWFnZVZhbHVlKG1faW1hZ2VWYWx1ZS5nZXQoKSkudXJsKCksIGVsZW1lbnQt
PmRvY3VtZW50KCkpKSB7CisgICAgaWYgKFNWR0N1cnNvckVsZW1lbnQqIGN1cnNvckVsZW1lbnQg
PSByZXNvdXJjZVJlZmVyZW5jZWRCeUN1cnNvckVsZW1lbnQoZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1
ZT4obV9pbWFnZVZhbHVlLmdldCgpKS51cmwoKSwgZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsKICAg
ICAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBvdmVycmlkZSBob3Qgc3BvdCBzcGVjaWZpZWQgaW4g
Q1NTLCB3aGljaCBpcyBwcm9iYWJseSBpbmNvcnJlY3QuCiAgICAgICAgIFNWR0xlbmd0aENvbnRl
eHQgbGVuZ3RoQ29udGV4dCgwKTsKICAgICAgICAgbV9oYXNIb3RTcG90ID0gdHJ1ZTsKQEAgLTEz
Myw4ICsxMzMsOCBAQCBib29sIENTU0N1cnNvckltYWdlVmFsdWU6OnVwZGF0ZUlmU1ZHQ3Vyc29y
SXNVc2VkKEVsZW1lbnQqIGVsZW1lbnQpCiBTdHlsZUltYWdlKiBDU1NDdXJzb3JJbWFnZVZhbHVl
OjpjYWNoZWRJbWFnZShDYWNoZWRSZXNvdXJjZUxvYWRlciogbG9hZGVyKQogewogI2lmIEVOQUJM
RShDU1NfSU1BR0VfU0VUKQotICAgIGlmIChtX2ltYWdlVmFsdWUuZ2V0KCkuaXNJbWFnZVNldFZh
bHVlKCkpCi0gICAgICAgIHJldHVybiB0b0NTU0ltYWdlU2V0VmFsdWUobV9pbWFnZVZhbHVlLmdl
dCgpKS5jYWNoZWRJbWFnZVNldChsb2FkZXIpOworICAgIGlmIChpczxDU1NJbWFnZVNldFZhbHVl
PihtX2ltYWdlVmFsdWUuZ2V0KCkpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VT
ZXRWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKS5jYWNoZWRJbWFnZVNldChsb2FkZXIpOwogI2Vu
ZGlmCiAKICAgICBpZiAoIW1fYWNjZXNzZWRJbWFnZSkgewpAQCAtMTQ1LDcgKzE0NSw3IEBAIFN0
eWxlSW1hZ2UqIENTU0N1cnNvckltYWdlVmFsdWU6OmNhY2hlZEltYWdlKENhY2hlZFJlc291cmNl
TG9hZGVyKiBsb2FkZXIpCiAgICAgICAgIC8vIHdlIGNyZWF0ZSBhbiBhbHRlcm5hdGUgQ1NTSW1h
Z2VWYWx1ZSB0byB1c2UuCiAgICAgICAgIGlmIChpc1NWR0N1cnNvcigpICYmIGxvYWRlciAmJiBs
b2FkZXItPmRvY3VtZW50KCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgZmFp
bCBpZiB0aGUgPGN1cnNvcj4gZWxlbWVudCBpcyBpbiBhIHNoYWRvdyBET00gKGJ1ZyA1OTgyNykK
LSAgICAgICAgICAgIGlmIChTVkdDdXJzb3JFbGVtZW50KiBjdXJzb3JFbGVtZW50ID0gcmVzb3Vy
Y2VSZWZlcmVuY2VkQnlDdXJzb3JFbGVtZW50KHRvQ1NTSW1hZ2VWYWx1ZShtX2ltYWdlVmFsdWUu
Z2V0KCkpLnVybCgpLCAqbG9hZGVyLT5kb2N1bWVudCgpKSkgeworICAgICAgICAgICAgaWYgKFNW
R0N1cnNvckVsZW1lbnQqIGN1cnNvckVsZW1lbnQgPSByZXNvdXJjZVJlZmVyZW5jZWRCeUN1cnNv
ckVsZW1lbnQoZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKS51cmwo
KSwgKmxvYWRlci0+ZG9jdW1lbnQoKSkpIHsKICAgICAgICAgICAgICAgICBkZXRhY2hQZW5kaW5n
SW1hZ2UoKTsKICAgICAgICAgICAgICAgICBSZWY8Q1NTSW1hZ2VWYWx1ZT4gc3ZnSW1hZ2VWYWx1
ZShDU1NJbWFnZVZhbHVlOjpjcmVhdGUoY3Vyc29yRWxlbWVudC0+aHJlZigpKSk7CiAgICAgICAg
ICAgICAgICAgU3R5bGVDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBzdmdJbWFnZVZhbHVlLT5j
YWNoZWRJbWFnZShsb2FkZXIpOwpAQCAtMTU0LDkgKzE1NCw5IEBAIFN0eWxlSW1hZ2UqIENTU0N1
cnNvckltYWdlVmFsdWU6OmNhY2hlZEltYWdlKENhY2hlZFJlc291cmNlTG9hZGVyKiBsb2FkZXIp
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobV9pbWFnZVZhbHVlLmdl
dCgpLmlzSW1hZ2VWYWx1ZSgpKSB7CisgICAgICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPihtX2lt
YWdlVmFsdWUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBkZXRhY2hQZW5kaW5nSW1hZ2UoKTsKLSAg
ICAgICAgICAgIG1faW1hZ2UgPSB0b0NTU0ltYWdlVmFsdWUobV9pbWFnZVZhbHVlLmdldCgpKS5j
YWNoZWRJbWFnZShsb2FkZXIpOworICAgICAgICAgICAgbV9pbWFnZSA9IGRvd25jYXN0PENTU0lt
YWdlVmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkuY2FjaGVkSW1hZ2UobG9hZGVyKTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtMTcwLDggKzE3MCw4IEBAIFN0eWxlSW1hZ2UqIENTU0N1cnNvcklt
YWdlVmFsdWU6OmNhY2hlZE9yUGVuZGluZ0ltYWdlKERvY3VtZW50JiBkb2N1bWVudCkKIHsKICNp
ZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKICAgICAvLyBOZWVkIHRvIGRlbGVnYXRlIGNvbXBsZXRl
bHkgc28gdGhhdCBjaGFuZ2VzIGluIGRldmljZSBzY2FsZSBmYWN0b3IgY2FuIGJlIGhhbmRsZWQg
YXBwcm9wcmlhdGVseS4KLSAgICBpZiAobV9pbWFnZVZhbHVlLmdldCgpLmlzSW1hZ2VTZXRWYWx1
ZSgpKQotICAgICAgICByZXR1cm4gdG9DU1NJbWFnZVNldFZhbHVlKG1faW1hZ2VWYWx1ZS5nZXQo
KSkuY2FjaGVkT3JQZW5kaW5nSW1hZ2VTZXQoZG9jdW1lbnQpOworICAgIGlmIChpczxDU1NJbWFn
ZVNldFZhbHVlPihtX2ltYWdlVmFsdWUuZ2V0KCkpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q1NTSW1hZ2VTZXRWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKS5jYWNoZWRPclBlbmRpbmdJbWFn
ZVNldChkb2N1bWVudCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7CiAjZW5k
aWYKQEAgLTE4NCw4ICsxODQsOCBAQCBTdHlsZUltYWdlKiBDU1NDdXJzb3JJbWFnZVZhbHVlOjpj
YWNoZWRPclBlbmRpbmdJbWFnZShEb2N1bWVudCYgZG9jdW1lbnQpCiAKIGJvb2wgQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZTo6aXNTVkdDdXJzb3IoKSBjb25zdAogewotICAgIGlmIChtX2ltYWdlVmFsdWUu
Z2V0KCkuaXNJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAgVVJMIGt1cmwoUGFyc2VkVVJMU3RyaW5n
LCB0b0NTU0ltYWdlVmFsdWUobV9pbWFnZVZhbHVlLmdldCgpKS51cmwoKSk7CisgICAgaWYgKGlz
PENTU0ltYWdlVmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkpIHsKKyAgICAgICAgVVJMIGt1cmwo
UGFyc2VkVVJMU3RyaW5nLCBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX2ltYWdlVmFsdWUuZ2V0
KCkpLnVybCgpKTsKICAgICAgICAgcmV0dXJuIGt1cmwuaGFzRnJhZ21lbnRJZGVudGlmaWVyKCk7
CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDdXJzb3JJbWFnZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1h
Z2VWYWx1ZS5oCmluZGV4IDY1MWNkNjMzMDBiNGNhMTA1NmEzMjgzNjg5ZDkxYTA0NGViYTkxODAu
Ljg2ZGY3YWRhNDI3ZDI1MzQwODhmMzA4OWI1OTQzODgxYjI0ZDIxODMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuaApAQCAtNzgsOCArNzgsOCBAQCBwcml2YXRlOgog
ICAgIEhhc2hTZXQ8U1ZHRWxlbWVudCo+IG1fcmVmZXJlbmNlZEVsZW1lbnRzOwogfTsKIAotQ1NT
X1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSwgaXNDdXJzb3JJbWFnZVZhbHVl
KCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19D
U1NfVkFMVUUoQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSwgaXNDdXJzb3JJbWFnZVZhbHVlKCkpCisKICNl
bmRpZiAvLyBDU1NDdXJzb3JJbWFnZVZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVy
SW1hZ2VWYWx1ZS5oCmluZGV4IDYwMDVmN2U3YzA0YzY4NGFkMDk5ODlhZTg5YjcwM2IyMDFmOGEw
NjMuLjNjMDY4ZDU4Y2NhMDNhZTJiNThiZmM0ZDhiM2I2ODBkNWM2Y2E3NmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuaApAQCAtMTE3LDggKzExNyw4IEBAIHByaXZh
dGU6CiAgICAgRmlsdGVyU3ViaW1hZ2VPYnNlcnZlclByb3h5IG1fZmlsdGVyU3ViaW1hZ2VPYnNl
cnZlcjsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0ZpbHRlckltYWdlVmFsdWUsIGlz
RmlsdGVySW1hZ2VWYWx1ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0ZpbHRlckltYWdlVmFsdWUsIGlzRmlsdGVySW1h
Z2VWYWx1ZSgpKQorCiAjZW5kaWYgLy8gQ1NTRmlsdGVySW1hZ2VWYWx1ZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaAppbmRleCA4OTIxMDcyMTRkMDlkMTBkMGMzNTk5
NTY5NTk1NGZlZDFlM2RlZGJmLi42MWJkOTA5MzNjNTAwMTQ0ZmNmN2Y1OWVmMjQ0YzU1MjczYTE3
MmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmgKQEAgLTk1LDgg
Kzk1LDggQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NT
Rm9udEZhY2VTcmNWYWx1ZSwgaXNGb250RmFjZVNyY1ZhbHVlKCkpCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKLX0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0ZvbnRGYWNl
U3JjVmFsdWUsIGlzRm9udEZhY2VTcmNWYWx1ZSgpKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmVhdHVyZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRm9udEZlYXR1cmVWYWx1ZS5oCmluZGV4IGRmMWNkMTc1OWNkYTNlYThkM2FhMzFkMzNj
NzY0MzQ5ZDNmNzNmNGEuLmNmNmMzODFmZWNhMTU1MWJhYzRkMjU2Mzk3MTM0YjA2OTUyZGYzNDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmVhdHVyZVZhbHVlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGZWF0dXJlVmFsdWUuaApAQCAtNTEsOCArNTEs
OCBAQCBwcml2YXRlOgogICAgIGNvbnN0IGludCBtX3ZhbHVlOwogfTsKIAotQ1NTX1ZBTFVFX1RZ
UEVfQ0FTVFMoQ1NTRm9udEZlYXR1cmVWYWx1ZSwgaXNGb250RmVhdHVyZVZhbHVlKCkpCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKLX0gLy8gbmFtZXNwYWNlCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0NTU19WQUxVRShDU1NGb250RmVhdHVyZVZhbHVlLCBpc0ZvbnRGZWF0dXJlVmFsdWUoKSkK
IAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCmluZGV4IDBhZDk4
MjM1M2ZhM2QwMGEyYTQ2ZGRmNjQyNjM2MmYxMjAwNTFkZTcuLjM5MjVhZWUyNGViYTFjM2Y3NWNj
NTAwZTA1NDAwMjRmNDZiYzFjYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250U2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3Iu
Y3BwCkBAIC05MSwyNiArOTEsMjYgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNl
UnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlKQogICAgIFJlZlB0cjxD
U1NWYWx1ZT4gZm9udEZhbWlseSA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVy
dHlGb250RmFtaWx5KTsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHNyYyA9IHN0eWxlLmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlTcmMpOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5pY29k
ZVJhbmdlID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVSYW5n
ZSk7Ci0gICAgaWYgKCFmb250RmFtaWx5IHx8ICFzcmMgfHwgIWZvbnRGYW1pbHktPmlzVmFsdWVM
aXN0KCkgfHwgIXNyYy0+aXNWYWx1ZUxpc3QoKSB8fCAodW5pY29kZVJhbmdlICYmICF1bmljb2Rl
UmFuZ2UtPmlzVmFsdWVMaXN0KCkpKQorICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0Pihmb250RmFt
aWx5LmdldCgpKSB8fCAhaXM8Q1NTVmFsdWVMaXN0PihzcmMuZ2V0KCkpIHx8ICh1bmljb2RlUmFu
Z2UgJiYgIWlzPENTU1ZhbHVlTGlzdD4oKnVuaWNvZGVSYW5nZSkpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBDU1NWYWx1ZUxpc3QqIGZhbWlseUxpc3QgPSB0b0NTU1ZhbHVlTGlzdChmb250RmFt
aWx5LmdldCgpKTsKLSAgICBpZiAoIWZhbWlseUxpc3QtPmxlbmd0aCgpKQorICAgIENTU1ZhbHVl
TGlzdCYgZmFtaWx5TGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKmZvbnRGYW1pbHkpOwor
ICAgIGlmICghZmFtaWx5TGlzdC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NT
VmFsdWVMaXN0KiBzcmNMaXN0ID0gdG9DU1NWYWx1ZUxpc3Qoc3JjLmdldCgpKTsKLSAgICBpZiAo
IXNyY0xpc3QtPmxlbmd0aCgpKQorICAgIENTU1ZhbHVlTGlzdCYgc3JjTGlzdCA9IGRvd25jYXN0
PENTU1ZhbHVlTGlzdD4oKnNyYyk7CisgICAgaWYgKCFzcmNMaXN0Lmxlbmd0aCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBDU1NWYWx1ZUxpc3QqIHJhbmdlTGlzdCA9IHRvQ1NTVmFsdWVMaXN0
KHVuaWNvZGVSYW5nZS5nZXQoKSk7CisgICAgQ1NTVmFsdWVMaXN0KiByYW5nZUxpc3QgPSBkb3du
Y2FzdDxDU1NWYWx1ZUxpc3Q+KHVuaWNvZGVSYW5nZS5nZXQoKSk7CiAKICAgICB1bnNpZ25lZCB0
cmFpdHNNYXNrID0gMDsKIAogICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IGZvbnRTdHlsZSA9IHN0
eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUpKSB7Ci0gICAgICAg
IGlmICghZm9udFN0eWxlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KCpmb250U3R5bGUpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIHN3aXRjaCAodG9DU1NQcmltaXRpdmVWYWx1ZShmb250U3R5bGUuZ2V0KCkpLT5nZXRWYWx1
ZUlEKCkpIHsKKyAgICAgICAgc3dpdGNoIChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmZv
bnRTdHlsZSkuZ2V0VmFsdWVJRCgpKSB7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6CiAg
ICAgICAgICAgICB0cmFpdHNNYXNrIHw9IEZvbnRTdHlsZU5vcm1hbE1hc2s7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTEyNSwxMCArMTI1LDEwIEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRG
b250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSkKICAgICAg
ICAgdHJhaXRzTWFzayB8PSBGb250U3R5bGVOb3JtYWxNYXNrOwogCiAgICAgaWYgKFJlZlB0cjxD
U1NWYWx1ZT4gZm9udFdlaWdodCA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVy
dHlGb250V2VpZ2h0KSkgewotICAgICAgICBpZiAoIWZvbnRXZWlnaHQtPmlzUHJpbWl0aXZlVmFs
dWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmZvbnRXZWlnaHQpKQog
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHN3aXRjaCAodG9DU1NQcmltaXRpdmVWYWx1
ZShmb250V2VpZ2h0LmdldCgpKS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgICAgIHN3aXRjaCAoZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpmb250V2VpZ2h0KS5nZXRWYWx1ZUlEKCkpIHsKICAg
ICAgICAgY2FzZSBDU1NWYWx1ZUJvbGQ6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWU3MDA6CiAgICAg
ICAgICAgICB0cmFpdHNNYXNrIHw9IEZvbnRXZWlnaHQ3MDBNYXNrOwpAQCAtMTcwLDE2ICsxNzAs
MTYgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1
bGVGb250RmFjZSogZm9udEZhY2VSdWxlKQogICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlz
dD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICAgICAg
ICAgIGxpc3QtPmFwcGVuZChmb250VmFyaWFudC5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAg
ICAgIGZvbnRWYXJpYW50ID0gbGlzdC5yZWxlYXNlTm9uTnVsbCgpOwotICAgICAgICB9IGVsc2Ug
aWYgKCFmb250VmFyaWFudC0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgfSBlbHNlIGlmICghaXM8
Q1NTVmFsdWVMaXN0PigqZm9udFZhcmlhbnQpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIENTU1ZhbHVlTGlzdCogdmFyaWFudExpc3QgPSB0b0NTU1ZhbHVlTGlzdChmb250VmFyaWFu
dC5nZXQoKSk7Ci0gICAgICAgIHVuc2lnbmVkIG51bVZhcmlhbnRzID0gdmFyaWFudExpc3QtPmxl
bmd0aCgpOworICAgICAgICBDU1NWYWx1ZUxpc3QmIHZhcmlhbnRMaXN0ID0gZG93bmNhc3Q8Q1NT
VmFsdWVMaXN0PigqZm9udFZhcmlhbnQpOworICAgICAgICB1bnNpZ25lZCBudW1WYXJpYW50cyA9
IHZhcmlhbnRMaXN0Lmxlbmd0aCgpOwogICAgICAgICBpZiAoIW51bVZhcmlhbnRzKQogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1WYXJp
YW50czsgKytpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFy
aWFudExpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpLT5nZXRWYWx1ZUlEKCkpIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhcmlhbnRMaXN0
Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpLT5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgICAg
ICAgICBjYXNlIENTU1ZhbHVlTm9ybWFsOgogICAgICAgICAgICAgICAgICAgICB0cmFpdHNNYXNr
IHw9IEZvbnRWYXJpYW50Tm9ybWFsTWFzazsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0xOTYsMjUgKzE5NiwyNSBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxl
KGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUpCiAgICAgLy8gRWFjaCBpdGVt
IGluIHRoZSBzcmMgcHJvcGVydHkncyBsaXN0IGlzIGEgc2luZ2xlIENTU0ZvbnRGYWNlU291cmNl
LiBQdXQgdGhlbSBhbGwgaW50byBhIENTU0ZvbnRGYWNlLgogICAgIFJlZlB0cjxDU1NGb250RmFj
ZT4gZm9udEZhY2U7CiAKLSAgICBpbnQgc3JjTGVuZ3RoID0gc3JjTGlzdC0+bGVuZ3RoKCk7Cisg
ICAgaW50IHNyY0xlbmd0aCA9IHNyY0xpc3QubGVuZ3RoKCk7CiAKICAgICBib29sIGZvdW5kU1ZH
Rm9udCA9IGZhbHNlOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzcmNMZW5ndGg7IGkrKykg
ewogICAgICAgICAvLyBBbiBpdGVtIGluIHRoZSBsaXN0IGVpdGhlciBzcGVjaWZpZXMgYSBzdHJp
bmcgKGxvY2FsIGZvbnQgbmFtZSkgb3IgYSBVUkwgKHJlbW90ZSBmb250IHRvIGRvd25sb2FkKS4K
LSAgICAgICAgQ1NTRm9udEZhY2VTcmNWYWx1ZSogaXRlbSA9IHRvQ1NTRm9udEZhY2VTcmNWYWx1
ZShzcmNMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKKyAgICAgICAgQ1NTRm9udEZh
Y2VTcmNWYWx1ZSYgaXRlbSA9IGRvd25jYXN0PENTU0ZvbnRGYWNlU3JjVmFsdWU+KCpzcmNMaXN0
Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NT
Rm9udEZhY2VTb3VyY2U+IHNvdXJjZTsKIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgICAg
IGZvdW5kU1ZHRm9udCA9IGl0ZW0tPmlzU1ZHRm9udEZhY2VTcmMoKSB8fCBpdGVtLT5zdmdGb250
RmFjZUVsZW1lbnQoKTsKKyAgICAgICAgZm91bmRTVkdGb250ID0gaXRlbS5pc1NWR0ZvbnRGYWNl
U3JjKCkgfHwgaXRlbS5zdmdGb250RmFjZUVsZW1lbnQoKTsKICNlbmRpZgotICAgICAgICBpZiAo
IWl0ZW0tPmlzTG9jYWwoKSkgeworICAgICAgICBpZiAoIWl0ZW0uaXNMb2NhbCgpKSB7CiAgICAg
ICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2RvY3VtZW50ID8gbV9kb2N1bWVudC0+ZnJh
bWUoKSA/ICZtX2RvY3VtZW50LT5mcmFtZSgpLT5zZXR0aW5ncygpIDogMCA6IDA7CiAgICAgICAg
ICAgICBib29sIGFsbG93RG93bmxvYWRpbmcgPSBmb3VuZFNWR0ZvbnQgfHwgKHNldHRpbmdzICYm
IHNldHRpbmdzLT5kb3dubG9hZGFibGVCaW5hcnlGb250c0VuYWJsZWQoKSk7Ci0gICAgICAgICAg
ICBpZiAoYWxsb3dEb3dubG9hZGluZyAmJiBpdGVtLT5pc1N1cHBvcnRlZEZvcm1hdCgpICYmIG1f
ZG9jdW1lbnQpIHsKLSAgICAgICAgICAgICAgICBDYWNoZWRGb250KiBjYWNoZWRGb250ID0gaXRl
bS0+Y2FjaGVkRm9udChtX2RvY3VtZW50KTsKKyAgICAgICAgICAgIGlmIChhbGxvd0Rvd25sb2Fk
aW5nICYmIGl0ZW0uaXNTdXBwb3J0ZWRGb3JtYXQoKSAmJiBtX2RvY3VtZW50KSB7CisgICAgICAg
ICAgICAgICAgQ2FjaGVkRm9udCogY2FjaGVkRm9udCA9IGl0ZW0uY2FjaGVkRm9udChtX2RvY3Vt
ZW50KTsKICAgICAgICAgICAgICAgICBpZiAoY2FjaGVkRm9udCkgewotICAgICAgICAgICAgICAg
ICAgICBzb3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihpdGVtLT5y
ZXNvdXJjZSgpLCBjYWNoZWRGb250KTsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlID0gc3Rk
OjptYWtlX3VuaXF1ZTxDU1NGb250RmFjZVNvdXJjZT4oaXRlbS5yZXNvdXJjZSgpLCBjYWNoZWRG
b250KTsKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgICAgICAgICAgICAgICAgICBpZiAoZm91
bmRTVkdGb250KQogICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLT5zZXRIYXNFeHRlcm5h
bFNWR0ZvbnQodHJ1ZSk7CkBAIC0yMjIsNyArMjIyLDcgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6
OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlKQog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHNvdXJjZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTRm9udEZhY2VTb3VyY2U+KGl0ZW0t
PnJlc291cmNlKCkpOworICAgICAgICAgICAgc291cmNlID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NG
b250RmFjZVNvdXJjZT4oaXRlbS5yZXNvdXJjZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
ICghZm9udEZhY2UpIHsKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6
YWRkRm9udEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUpCiAK
ICAgICAgICAgaWYgKHNvdXJjZSkgewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgICAgICAg
ICBzb3VyY2UtPnNldFNWR0ZvbnRGYWNlRWxlbWVudChpdGVtLT5zdmdGb250RmFjZUVsZW1lbnQo
KSk7CisgICAgICAgICAgICBzb3VyY2UtPnNldFNWR0ZvbnRGYWNlRWxlbWVudChpdGVtLnN2Z0Zv
bnRGYWNlRWxlbWVudCgpKTsKICNlbmRpZgogICAgICAgICAgICAgZm9udEZhY2UtPmFkZFNvdXJj
ZShXVEY6Om1vdmUoc291cmNlKSk7CiAgICAgICAgIH0KQEAgLTI1MSwxNSArMjUxLDE1IEBAIHZv
aWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZh
Y2UqIGZvbnRGYWNlUnVsZSkKICAgICBpZiAocmFuZ2VMaXN0KSB7CiAgICAgICAgIHVuc2lnbmVk
IG51bVJhbmdlcyA9IHJhbmdlTGlzdC0+bGVuZ3RoKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1SYW5nZXM7IGkrKykgewotICAgICAgICAgICAgQ1NTVW5pY29kZVJhbmdl
VmFsdWUqIHJhbmdlID0gdG9DU1NVbmljb2RlUmFuZ2VWYWx1ZShyYW5nZUxpc3QtPml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soaSkpOwotICAgICAgICAgICAgZm9udEZhY2UtPmFkZFJhbmdlKHJhbmdl
LT5mcm9tKCksIHJhbmdlLT50bygpKTsKKyAgICAgICAgICAgIENTU1VuaWNvZGVSYW5nZVZhbHVl
JiByYW5nZSA9IGRvd25jYXN0PENTU1VuaWNvZGVSYW5nZVZhbHVlPigqcmFuZ2VMaXN0LT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKKyAgICAgICAgICAgIGZvbnRGYWNlLT5hZGRSYW5nZShy
YW5nZS5mcm9tKCksIHJhbmdlLnRvKCkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gSGFz
aCB1bmRlciBldmVyeSBzaW5nbGUgZmFtaWx5IG5hbWUuCi0gICAgaW50IGZhbWlseUxlbmd0aCA9
IGZhbWlseUxpc3QtPmxlbmd0aCgpOworICAgIGludCBmYW1pbHlMZW5ndGggPSBmYW1pbHlMaXN0
Lmxlbmd0aCgpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmFtaWx5TGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGl0ZW0gPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGZh
bWlseUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOworICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogaXRlbSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihmYW1pbHlMaXN0Lml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOwogICAgICAgICBTdHJpbmcgZmFtaWx5TmFtZTsKICAg
ICAgICAgaWYgKGl0ZW0tPmlzU3RyaW5nKCkpIHsKICAgICAgICAgICAgIGZhbWlseU5hbWUgPSBp
dGVtLT5nZXRTdHJpbmdWYWx1ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRWYWx1ZS5oCmluZGV4IDgx
YWM0MWE3YWMwOTg0NTczYTVjZGM0MGM0OTU1ODI3NDIxMTU5OWMuLjAwZDcwMWY4YzMyNDhjYzky
NWMyNzdjNTYzYzc1MzE2N2Q1ODVhZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFZhbHVlLmgKQEAg
LTU1LDggKzU1LDggQEAgcHJpdmF0ZToKICAgICB9CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNU
UyhDU1NGb250VmFsdWUsIGlzRm9udFZhbHVlKCkpCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
LX0gLy8gbmFtZXNwYWNlCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NGb250
VmFsdWUsIGlzRm9udFZhbHVlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0Z1bmN0aW9uVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGdW5jdGlv
blZhbHVlLmgKaW5kZXggNTExMTIzYjg3MzNhZjNkN2ExYmQxMmM0YTcwYzlmMmU3ODVlYjUxZS4u
NTUxZjQ1ZTg4NzRkMDM0NmJkYmU2MDI3YTQ5NTA2MjQwYzdiODhjMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0Z1bmN0aW9uVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRnVuY3Rpb25WYWx1ZS5oCkBAIC01OSw4ICs1OSw5IEBAIHByaXZhdGU6CiAgICAgUmVm
UHRyPENTU1ZhbHVlTGlzdD4gbV9hcmdzOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NT
RnVuY3Rpb25WYWx1ZSwgaXNGdW5jdGlvblZhbHVlKCkpCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0Z1bmN0aW9uVmFsdWUsIGlz
RnVuY3Rpb25WYWx1ZSgpKQogCi19CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRp
ZW50VmFsdWUuY3BwCmluZGV4IDQzMzMyYzBiZmExMzMyY2QxYTFiM2MyZTM4NGE3YjkwNWFhOTE5
ZDEuLjMwMjY3NTllM2MzMWNkZTEzMWUyY2ZjODcwNzE1N2VhNzhmYWI4YTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKQEAgLTQ2LDEyICs0NiwxMiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBQYXNzUmVmUHRyPEltYWdlPiBDU1NHcmFkaWVudFZhbHVlOjppbWFnZShS
ZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29uc3QgRmxvYXRTaXplJiBzaXplKQogewogICAgIGlm
IChzaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgYm9vbCBjYWNoZWFibGUgPSBpc0NhY2hlYWJsZSgpOwogICAgIGlmIChjYWNo
ZWFibGUpIHsKICAgICAgICAgaWYgKCFjbGllbnRzKCkuY29udGFpbnMocmVuZGVyZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAg
ICBJbWFnZSogcmVzdWx0ID0gY2FjaGVkSW1hZ2VGb3JTaXplKHNpemUpOwogICAgICAgICBpZiAo
cmVzdWx0KQpAQCAtNjAsMTAgKzYwLDEwIEBAIFBhc3NSZWZQdHI8SW1hZ2U+IENTU0dyYWRpZW50
VmFsdWU6OmltYWdlKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpCiAKICAg
ICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50OwogCi0gICAgaWYgKGlzTGluZWFyR3JhZGllbnRW
YWx1ZSgpKQotICAgICAgICBncmFkaWVudCA9IHRvQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSh0aGlz
KS0+Y3JlYXRlR3JhZGllbnQoKnJlbmRlcmVyLCBzaXplKTsKKyAgICBpZiAoaXM8Q1NTTGluZWFy
R3JhZGllbnRWYWx1ZT4oKnRoaXMpKQorICAgICAgICBncmFkaWVudCA9IGRvd25jYXN0PENTU0xp
bmVhckdyYWRpZW50VmFsdWU+KCp0aGlzKS5jcmVhdGVHcmFkaWVudCgqcmVuZGVyZXIsIHNpemUp
OwogICAgIGVsc2UKLSAgICAgICAgZ3JhZGllbnQgPSB0b0NTU1JhZGlhbEdyYWRpZW50VmFsdWUo
dGhpcyktPmNyZWF0ZUdyYWRpZW50KCpyZW5kZXJlciwgc2l6ZSk7CisgICAgICAgIGdyYWRpZW50
ID0gZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnRoaXMpLmNyZWF0ZUdyYWRpZW50
KCpyZW5kZXJlciwgc2l6ZSk7CiAKICAgICBSZWZQdHI8R3JhZGllbnRJbWFnZT4gbmV3SW1hZ2Ug
PSBHcmFkaWVudEltYWdlOjpjcmVhdGUoZ3JhZGllbnQsIHNpemUpOwogICAgIGlmIChjYWNoZWFi
bGUpCkBAIC0xMTgsMTMgKzExOCwxMyBAQCBQYXNzUmVmUHRyPENTU0dyYWRpZW50VmFsdWU+IENT
U0dyYWRpZW50VmFsdWU6OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlUgogICAgIFJl
ZlB0cjxDU1NHcmFkaWVudFZhbHVlPiByZXN1bHQ7CiAgICAgaWYgKCFkZXJpdmVkKQogICAgICAg
ICByZXN1bHQgPSB0aGlzOwotICAgIGVsc2UgaWYgKGlzTGluZWFyR3JhZGllbnRWYWx1ZSgpKQot
ICAgICAgICByZXN1bHQgPSB0b0NTU0xpbmVhckdyYWRpZW50VmFsdWUodGhpcyktPmNsb25lKCk7
Ci0gICAgZWxzZSBpZiAoaXNSYWRpYWxHcmFkaWVudFZhbHVlKCkpCi0gICAgICAgIHJlc3VsdCA9
IHRvQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZSh0aGlzKS0+Y2xvbmUoKTsKKyAgICBlbHNlIGlmIChp
czxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPigqdGhpcykpCisgICAgICAgIHJlc3VsdCA9IGRvd25j
YXN0PENTU0xpbmVhckdyYWRpZW50VmFsdWU+KCp0aGlzKS5jbG9uZSgpOworICAgIGVsc2UgaWYg
KGlzPENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCp0aGlzKSkKKyAgICAgICAgcmVzdWx0ID0gZG93
bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnRoaXMpLmNsb25lKCk7CiAgICAgZWxzZSB7
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBzdG9wIDogcmVzdWx0
LT5tX3N0b3BzKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRW
YWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAppbmRleCBlNDUy
MTJmMzBlZWVlZTk5ZWRiZWY5NDAxODU2Mzc0MDVhMTdjM2U3Li42YWI3OGRiMDI5NWY0MzAwMTI4
Zjc0MTVlYTRiMWJkMzAyMGQ5ZTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
R3JhZGllbnRWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVl
LmgKQEAgLTEzMSw4ICsxMzEsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX3JlcGVhdGluZzsK
IH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0dyYWRpZW50VmFsdWUsIGlzR3JhZGllbnRW
YWx1ZSgpKQotCiBjbGFzcyBDU1NMaW5lYXJHcmFkaWVudFZhbHVlIDogcHVibGljIENTU0dyYWRp
ZW50VmFsdWUgewogcHVibGljOgogCkBAIC0xNzAsOCArMTY4LDYgQEAgcHJpdmF0ZToKICAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fYW5nbGU7IC8vIG1heSBiZSBudWxsLgogfTsKIAot
Q1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSwgaXNMaW5lYXJHcmFk
aWVudFZhbHVlKCkpCi0KIGNsYXNzIENTU1JhZGlhbEdyYWRpZW50VmFsdWUgOiBwdWJsaWMgQ1NT
R3JhZGllbnRWYWx1ZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWY8Q1NTUmFkaWFsR3Jh
ZGllbnRWYWx1ZT4gY3JlYXRlKENTU0dyYWRpZW50UmVwZWF0IHJlcGVhdCwgQ1NTR3JhZGllbnRU
eXBlIGdyYWRpZW50VHlwZSA9IENTU1JhZGlhbEdyYWRpZW50KQpAQCAtMjMzLDggKzIyOSwxMCBA
QCBwcml2YXRlOgogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9lbmRWZXJ0aWNhbFNp
emU7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NSYWRpYWxHcmFkaWVudFZhbHVlLCBp
c1JhZGlhbEdyYWRpZW50VmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NHcmFkaWVudFZhbHVlLCBpc0dyYWRpZW50
VmFsdWUoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0xpbmVhckdyYWRp
ZW50VmFsdWUsIGlzTGluZWFyR3JhZGllbnRWYWx1ZSgpKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19DU1NfVkFMVUUoQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZSwgaXNSYWRpYWxHcmFkaWVudFZhbHVl
KCkpCisKICNlbmRpZiAvLyBDU1NHcmFkaWVudFZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NHcmlkTGluZU5hbWVzVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NHcmlkTGluZU5hbWVzVmFsdWUuaAppbmRleCAxYjBkMWI4N2VlNmE0Yjc3NTA1NGQ0MDQ5Y2Nl
MDhlMjE3ZmJmYTJlLi43YWI4YjI1OGE5NjY0OTdmNjg3MjVhNjEyNDAzY2QwNTMwMDVlMGFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyaWRMaW5lTmFtZXNWYWx1ZS5oCkBAIC01Miw5ICs1
Miw5IEBAIHByaXZhdGU6CiAgICAgQ1NTR3JpZExpbmVOYW1lc1ZhbHVlKCk7CiB9OwogCi1DU1Nf
VkFMVUVfVFlQRV9DQVNUUyhDU1NHcmlkTGluZU5hbWVzVmFsdWUsIGlzR3JpZExpbmVOYW1lc1Zh
bHVlKCkpOworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi19CitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0NTU19WQUxVRShDU1NHcmlkTGluZU5hbWVzVmFsdWUsIGlzR3JpZExpbmVOYW1lc1ZhbHVl
KCkpOwogCi0jZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQp
CisjZW5kaWYgLy8gQ1NTR3JpZExpbmVOYW1lc1ZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5oCmluZGV4IDhkMjVmMmNkNzVkNWUzMjc0OTMy
YWE3NWVhNzlhYTRlZjkwMTY1MmUuLjQ5ODRlNzYwYmVkOWFiNDgxNDdmZjk5NGE2NzcyMGZlNTBj
ZDdlN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmlkVGVtcGxhdGVBcmVh
c1ZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyaWRUZW1wbGF0ZUFyZWFzVmFs
dWUuaApAQCAtNjIsMTAgKzYyLDEwIEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fY29sdW1uQ291
bnQ7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVl
LCBpc0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NHcmlkVGVtcGxhdGVBcmVhc1Zh
bHVlLCBpc0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUoKSkKKwogI2VuZGlmIC8qIEVOQUJMRShDU1Nf
R1JJRF9MQVlPVVQpICovCiAKICNlbmRpZiAvLyBDU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcAppbmRleCAw
ZWY3NzRmODRiMWJhNjUzOTY5Y2VhMThhNWVkNDQ2Mjk5NjBiNGYyLi5mYjg5OTU1NzE3NTU2M2I5
NTVkMzgxNzg3NGVkNGI3NzhjMDI0N2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0lt
YWdlR2VuZXJhdG9yVmFsdWUuY3BwCkBAIC0xMDksMTUgKzEwOSwxNSBAQCBQYXNzUmVmUHRyPElt
YWdlPiBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjppbWFnZShSZW5kZXJFbGVtZW50KiByZW5kZXJl
ciwgY29uc3QgRgogewogICAgIHN3aXRjaCAoY2xhc3NUeXBlKCkpIHsKICAgICBjYXNlIENhbnZh
c0NsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NDYW52YXNWYWx1ZSh0aGlzKS0+aW1hZ2UocmVu
ZGVyZXIsIHNpemUpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ2FudmFzVmFsdWU+KCp0
aGlzKS5pbWFnZShyZW5kZXJlciwgc2l6ZSk7CiAgICAgY2FzZSBDcm9zc2ZhZGVDbGFzczoKLSAg
ICAgICAgcmV0dXJuIHRvQ1NTQ3Jvc3NmYWRlVmFsdWUodGhpcyktPmltYWdlKHJlbmRlcmVyLCBz
aXplKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPigqdGhpcyku
aW1hZ2UocmVuZGVyZXIsIHNpemUpOwogICAgIGNhc2UgRmlsdGVySW1hZ2VDbGFzczoKLSAgICAg
ICAgcmV0dXJuIHRvQ1NTRmlsdGVySW1hZ2VWYWx1ZSh0aGlzKS0+aW1hZ2UocmVuZGVyZXIsIHNp
emUpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oKnRoaXMp
LmltYWdlKHJlbmRlcmVyLCBzaXplKTsKICAgICBjYXNlIExpbmVhckdyYWRpZW50Q2xhc3M6Ci0g
ICAgICAgIHJldHVybiB0b0NTU0xpbmVhckdyYWRpZW50VmFsdWUodGhpcyktPmltYWdlKHJlbmRl
cmVyLCBzaXplKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0xpbmVhckdyYWRpZW50VmFs
dWU+KCp0aGlzKS5pbWFnZShyZW5kZXJlciwgc2l6ZSk7CiAgICAgY2FzZSBSYWRpYWxHcmFkaWVu
dENsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NSYWRpYWxHcmFkaWVudFZhbHVlKHRoaXMpLT5p
bWFnZShyZW5kZXJlciwgc2l6ZSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NSYWRpYWxH
cmFkaWVudFZhbHVlPigqdGhpcykuaW1hZ2UocmVuZGVyZXIsIHNpemUpOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTEyOCwxNSArMTI4LDE1
IEBAIGJvb2wgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6aXNGaXhlZFNpemUoKSBjb25zdAogewog
ICAgIHN3aXRjaCAoY2xhc3NUeXBlKCkpIHsKICAgICBjYXNlIENhbnZhc0NsYXNzOgotICAgICAg
ICByZXR1cm4gdG9DU1NDYW52YXNWYWx1ZSh0aGlzKS0+aXNGaXhlZFNpemUoKTsKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PENTU0NhbnZhc1ZhbHVlPigqdGhpcykuaXNGaXhlZFNpemUoKTsKICAg
ICBjYXNlIENyb3NzZmFkZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NDcm9zc2ZhZGVWYWx1
ZSh0aGlzKS0+aXNGaXhlZFNpemUoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0Nyb3Nz
ZmFkZVZhbHVlPigqdGhpcykuaXNGaXhlZFNpemUoKTsKICAgICBjYXNlIEZpbHRlckltYWdlQ2xh
c3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0ZpbHRlckltYWdlVmFsdWUodGhpcyktPmlzRml4ZWRT
aXplKCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPigqdGhp
cykuaXNGaXhlZFNpemUoKTsKICAgICBjYXNlIExpbmVhckdyYWRpZW50Q2xhc3M6Ci0gICAgICAg
IHJldHVybiB0b0NTU0xpbmVhckdyYWRpZW50VmFsdWUodGhpcyktPmlzRml4ZWRTaXplKCk7Cisg
ICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPigqdGhpcykuaXNG
aXhlZFNpemUoKTsKICAgICBjYXNlIFJhZGlhbEdyYWRpZW50Q2xhc3M6Ci0gICAgICAgIHJldHVy
biB0b0NTU1JhZGlhbEdyYWRpZW50VmFsdWUodGhpcyktPmlzRml4ZWRTaXplKCk7CisgICAgICAg
IHJldHVybiBkb3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigqdGhpcykuaXNGaXhlZFNp
emUoKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9
CkBAIC0xNDcsMTUgKzE0NywxNSBAQCBGbG9hdFNpemUgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6
Zml4ZWRTaXplKGNvbnN0IFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyKQogewogICAgIHN3aXRjaCAo
Y2xhc3NUeXBlKCkpIHsKICAgICBjYXNlIENhbnZhc0NsYXNzOgotICAgICAgICByZXR1cm4gdG9D
U1NDYW52YXNWYWx1ZSh0aGlzKS0+Zml4ZWRTaXplKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJu
IGRvd25jYXN0PENTU0NhbnZhc1ZhbHVlPigqdGhpcykuZml4ZWRTaXplKHJlbmRlcmVyKTsKICAg
ICBjYXNlIENyb3NzZmFkZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NDcm9zc2ZhZGVWYWx1
ZSh0aGlzKS0+Zml4ZWRTaXplKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENT
U0Nyb3NzZmFkZVZhbHVlPigqdGhpcykuZml4ZWRTaXplKHJlbmRlcmVyKTsKICAgICBjYXNlIEZp
bHRlckltYWdlQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0ZpbHRlckltYWdlVmFsdWUodGhp
cyktPmZpeGVkU2l6ZShyZW5kZXJlcik7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NGaWx0
ZXJJbWFnZVZhbHVlPigqdGhpcykuZml4ZWRTaXplKHJlbmRlcmVyKTsKICAgICBjYXNlIExpbmVh
ckdyYWRpZW50Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0xpbmVhckdyYWRpZW50VmFsdWUo
dGhpcyktPmZpeGVkU2l6ZShyZW5kZXJlcik7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NM
aW5lYXJHcmFkaWVudFZhbHVlPigqdGhpcykuZml4ZWRTaXplKHJlbmRlcmVyKTsKICAgICBjYXNl
IFJhZGlhbEdyYWRpZW50Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU1JhZGlhbEdyYWRpZW50
VmFsdWUodGhpcyktPmZpeGVkU2l6ZShyZW5kZXJlcik7CisgICAgICAgIHJldHVybiBkb3duY2Fz
dDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigqdGhpcykuZml4ZWRTaXplKHJlbmRlcmVyKTsKICAg
ICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xNjYs
MTUgKzE2NiwxNSBAQCBib29sIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmlzUGVuZGluZygpIGNv
bnN0CiB7CiAgICAgc3dpdGNoIChjbGFzc1R5cGUoKSkgewogICAgIGNhc2UgQ3Jvc3NmYWRlQ2xh
c3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0Nyb3NzZmFkZVZhbHVlKHRoaXMpLT5pc1BlbmRpbmco
KTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPigqdGhpcykuaXNQ
ZW5kaW5nKCk7CiAgICAgY2FzZSBDYW52YXNDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTQ2Fu
dmFzVmFsdWUodGhpcyktPmlzUGVuZGluZygpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NT
Q2FudmFzVmFsdWU+KCp0aGlzKS5pc1BlbmRpbmcoKTsKICAgICBjYXNlIEZpbHRlckltYWdlQ2xh
c3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0ZpbHRlckltYWdlVmFsdWUodGhpcyktPmlzUGVuZGlu
ZygpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oKnRoaXMp
LmlzUGVuZGluZygpOwogICAgIGNhc2UgTGluZWFyR3JhZGllbnRDbGFzczoKLSAgICAgICAgcmV0
dXJuIHRvQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSh0aGlzKS0+aXNQZW5kaW5nKCk7CisgICAgICAg
IHJldHVybiBkb3duY2FzdDxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPigqdGhpcykuaXNQZW5kaW5n
KCk7CiAgICAgY2FzZSBSYWRpYWxHcmFkaWVudENsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NS
YWRpYWxHcmFkaWVudFZhbHVlKHRoaXMpLT5pc1BlbmRpbmcoKTsKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCp0aGlzKS5pc1BlbmRpbmcoKTsKICAgICBk
ZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0xODUsMTUg
KzE4NSwxNSBAQCBib29sIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6Omtub3duVG9CZU9wYXF1ZShj
b25zdCBSZW5kZXJFbGVtZW50KiByZW5kZXJlcikgY29ucwogewogICAgIHN3aXRjaCAoY2xhc3NU
eXBlKCkpIHsKICAgICBjYXNlIENyb3NzZmFkZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1ND
cm9zc2ZhZGVWYWx1ZSh0aGlzKS0+a25vd25Ub0JlT3BhcXVlKHJlbmRlcmVyKTsKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPigqdGhpcykua25vd25Ub0JlT3BhcXVl
KHJlbmRlcmVyKTsKICAgICBjYXNlIENhbnZhc0NsYXNzOgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgY2FzZSBGaWx0ZXJJbWFnZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NGaWx0ZXJJ
bWFnZVZhbHVlKHRoaXMpLT5rbm93blRvQmVPcGFxdWUocmVuZGVyZXIpOworICAgICAgICByZXR1
cm4gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oKnRoaXMpLmtub3duVG9CZU9wYXF1ZShy
ZW5kZXJlcik7CiAgICAgY2FzZSBMaW5lYXJHcmFkaWVudENsYXNzOgotICAgICAgICByZXR1cm4g
dG9DU1NMaW5lYXJHcmFkaWVudFZhbHVlKHRoaXMpLT5rbm93blRvQmVPcGFxdWUocmVuZGVyZXIp
OworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4oKnRoaXMp
Lmtub3duVG9CZU9wYXF1ZShyZW5kZXJlcik7CiAgICAgY2FzZSBSYWRpYWxHcmFkaWVudENsYXNz
OgotICAgICAgICByZXR1cm4gdG9DU1NSYWRpYWxHcmFkaWVudFZhbHVlKHRoaXMpLT5rbm93blRv
QmVPcGFxdWUocmVuZGVyZXIpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUmFkaWFsR3Jh
ZGllbnRWYWx1ZT4oKnRoaXMpLmtub3duVG9CZU9wYXF1ZShyZW5kZXJlcik7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMjA0LDE5ICsyMDQs
MTkgQEAgdm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpsb2FkU3ViaW1hZ2VzKENhY2hlZFJl
c291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUwKIHsKICAgICBzd2l0Y2ggKGNsYXNzVHlwZSgp
KSB7CiAgICAgY2FzZSBDcm9zc2ZhZGVDbGFzczoKLSAgICAgICAgdG9DU1NDcm9zc2ZhZGVWYWx1
ZSh0aGlzKS0+bG9hZFN1YmltYWdlcyhjYWNoZWRSZXNvdXJjZUxvYWRlcik7CisgICAgICAgIGRv
d25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPigqdGhpcykubG9hZFN1YmltYWdlcyhjYWNoZWRSZXNv
dXJjZUxvYWRlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2FudmFzQ2xhc3M6Ci0gICAg
ICAgIHRvQ1NTQ2FudmFzVmFsdWUodGhpcyktPmxvYWRTdWJpbWFnZXMoY2FjaGVkUmVzb3VyY2VM
b2FkZXIpOworICAgICAgICBkb3duY2FzdDxDU1NDYW52YXNWYWx1ZT4oKnRoaXMpLmxvYWRTdWJp
bWFnZXMoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZp
bHRlckltYWdlQ2xhc3M6Ci0gICAgICAgIHRvQ1NTRmlsdGVySW1hZ2VWYWx1ZSh0aGlzKS0+bG9h
ZFN1YmltYWdlcyhjYWNoZWRSZXNvdXJjZUxvYWRlcik7CisgICAgICAgIGRvd25jYXN0PENTU0Zp
bHRlckltYWdlVmFsdWU+KCp0aGlzKS5sb2FkU3ViaW1hZ2VzKGNhY2hlZFJlc291cmNlTG9hZGVy
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBMaW5lYXJHcmFkaWVudENsYXNzOgotICAgICAg
ICB0b0NTU0xpbmVhckdyYWRpZW50VmFsdWUodGhpcyktPmxvYWRTdWJpbWFnZXMoY2FjaGVkUmVz
b3VyY2VMb2FkZXIpOworICAgICAgICBkb3duY2FzdDxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPigq
dGhpcykubG9hZFN1YmltYWdlcyhjYWNoZWRSZXNvdXJjZUxvYWRlcik7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgUmFkaWFsR3JhZGllbnRDbGFzczoKLSAgICAgICAgdG9DU1NSYWRpYWxHcmFk
aWVudFZhbHVlKHRoaXMpLT5sb2FkU3ViaW1hZ2VzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKyAg
ICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnRoaXMpLmxvYWRTdWJpbWFn
ZXMoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0Ogog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIyNSwxMyArMjI1LDEzIEBAIHZvaWQg
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6bG9hZFN1YmltYWdlcyhDYWNoZWRSZXNvdXJjZUxvYWRl
ciogY2FjaGVkUmVzb3VyY2VMCiAKIGJvb2wgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6c3ViaW1h
Z2VJc1BlbmRpbmcoQ1NTVmFsdWUqIHZhbHVlKQogewotICAgIGlmICh2YWx1ZS0+aXNJbWFnZVZh
bHVlKCkpCi0gICAgICAgIHJldHVybiB0b0NTU0ltYWdlVmFsdWUodmFsdWUpLT5jYWNoZWRPclBl
bmRpbmdJbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpOworICAgIGlmIChpczxDU1NJbWFnZVZhbHVl
PigqdmFsdWUpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oKnZhbHVl
KS5jYWNoZWRPclBlbmRpbmdJbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpOwogICAgIAotICAgIGlm
ICh2YWx1ZS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpCi0gICAgICAgIHJldHVybiB0b0NTU0lt
YWdlR2VuZXJhdG9yVmFsdWUodmFsdWUpLT5pc1BlbmRpbmcoKTsKKyAgICBpZiAoaXM8Q1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZT4oKnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0lt
YWdlR2VuZXJhdG9yVmFsdWU+KCp2YWx1ZSkuaXNQZW5kaW5nKCk7CiAKLSAgICBpZiAodmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+Z2V0VmFs
dWVJRCgpID09IENTU1ZhbHVlTm9uZSkKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgp
ID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC0yNDQsMjEgKzI0NCwyMSBAQCBDYWNoZWRJbWFnZSogQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZTo6Y2FjaGVkSW1hZ2VGb3JDU1NWYWx1ZShDU1NWYWx1ZSogdmFsdWUsIENh
YwogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKHZh
bHVlLT5pc0ltYWdlVmFsdWUoKSkgewotICAgICAgICBTdHlsZUNhY2hlZEltYWdlKiBzdHlsZUNh
Y2hlZEltYWdlID0gdG9DU1NJbWFnZVZhbHVlKHZhbHVlKS0+Y2FjaGVkSW1hZ2UoY2FjaGVkUmVz
b3VyY2VMb2FkZXIpOworICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPigqdmFsdWUpKSB7CisgICAg
ICAgIFN0eWxlQ2FjaGVkSW1hZ2UqIHN0eWxlQ2FjaGVkSW1hZ2UgPSBkb3duY2FzdDxDU1NJbWFn
ZVZhbHVlPigqdmFsdWUpLmNhY2hlZEltYWdlKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKICAgICAg
ICAgaWYgKCFzdHlsZUNhY2hlZEltYWdlKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICAgICAgcmV0dXJuIHN0eWxlQ2FjaGVkSW1hZ2UtPmNhY2hlZEltYWdlKCk7CiAgICAgfQog
ICAgIAotICAgIGlmICh2YWx1ZS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKLSAgICAgICAg
dG9DU1NJbWFnZUdlbmVyYXRvclZhbHVlKHZhbHVlKS0+bG9hZFN1YmltYWdlcyhjYWNoZWRSZXNv
dXJjZUxvYWRlcik7CisgICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KCp2YWx1ZSkp
IHsKKyAgICAgICAgZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oKnZhbHVlKS5sb2Fk
U3ViaW1hZ2VzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKICAgICAgICAgLy8gRklYTUU6IEhhbmRs
ZSBDU1NJbWFnZUdlbmVyYXRvclZhbHVlIChhbmQgdGh1cyBjcm9zcy1mYWRlcyB3aXRoIGdyYWRp
ZW50cyBhbmQgY2FudmFzKS4KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAg
aWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYgdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1
ZSktPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCisgICAgaWYgKGlzPENTU1ByaW1pdGl2
ZVZhbHVlPigqdmFsdWUpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdl
dFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWUuaAppbmRleCA2M2M4MTM3ZTI5YjBmMDhlM2RhZWVkMDA4YzFjYjZmOTFkNWQ4
YjZiLi43ZDk5ZDQxZWE2YTc0MDgzY2M4MzQzODhiMzFlNTUyNDg4NzczYjk5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgKQEAgLTkyLDggKzkyLDggQEAg
cHJpdmF0ZToKICAgICBIYXNoTWFwPEZsb2F0U2l6ZSwgc3RkOjp1bmlxdWVfcHRyPENhY2hlZEdl
bmVyYXRlZEltYWdlPj4gbV9pbWFnZXM7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlLCBpc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSkKLQogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlLCBpc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSkKKwogI2VuZGlmIC8vIENT
U0ltYWdlR2VuZXJhdG9yVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ltYWdlU2V0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUu
Y3BwCmluZGV4IDRkYmIwZTY1YjFjZmM3NDY5OWMxYmMzNWU5NWQ5ODkzYWMyYTljM2EuLmJhMTg4
YTVjZjEyODk2NTM3M2ExZGZhYzZjZTRhZjVjNTIyOThlZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTSW1hZ2VTZXRWYWx1ZS5jcHAKQEAgLTcwLDEzICs3MCwxMyBAQCB2b2lkIENTU0ltYWdlU2V0
VmFsdWU6OmZpbGxJbWFnZVNldCgpCiAgICAgc2l6ZV90IGkgPSAwOwogICAgIHdoaWxlIChpIDwg
bGVuZ3RoKSB7CiAgICAgICAgIENTU1ZhbHVlKiBpbWFnZVZhbHVlID0gaXRlbShpKTsKLSAgICAg
ICAgU3RyaW5nIGltYWdlVVJMID0gdG9DU1NJbWFnZVZhbHVlKGltYWdlVmFsdWUpLT51cmwoKTsK
KyAgICAgICAgU3RyaW5nIGltYWdlVVJMID0gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oKmltYWdl
VmFsdWUpLnVybCgpOwogCiAgICAgICAgICsraTsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04oaSA8IGxlbmd0aCk7CiAgICAgICAgIENTU1ZhbHVlKiBzY2FsZUZhY3Rv
clZhbHVlID0gaXRlbShpKTsKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oc2NhbGVGYWN0b3JWYWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgZmxvYXQg
c2NhbGVGYWN0b3IgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHNjYWxlRmFjdG9yVmFsdWUpLT5nZXRG
bG9hdFZhbHVlKCk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlz
PENTU1ByaW1pdGl2ZVZhbHVlPigqc2NhbGVGYWN0b3JWYWx1ZSkpOworICAgICAgICBmbG9hdCBz
Y2FsZUZhY3RvciA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqc2NhbGVGYWN0b3JWYWx1
ZSkuZ2V0RmxvYXRWYWx1ZSgpOwogCiAgICAgICAgIEltYWdlV2l0aFNjYWxlIGltYWdlOwogICAg
ICAgICBpbWFnZS5pbWFnZVVSTCA9IGltYWdlVVJMOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVNl
dFZhbHVlLmgKaW5kZXggYzE4OTlmM2FiNzAxODc4MWQ4MzkxYmExY2VjZWRkYTkxOGRhNTAyZC4u
NDBhOTk2NTNjNzM3ZGFkYjdhYzBhODYxODA5MjRkMTQ5Y2I1ZDNkMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTSW1hZ2VTZXRWYWx1ZS5oCkBAIC04NywxMCArODcsMTAgQEAgcHJpdmF0ZToKICAgICBW
ZWN0b3I8SW1hZ2VXaXRoU2NhbGU+IG1faW1hZ2VzSW5TZXQ7CiB9OwogCi1DU1NfVkFMVUVfVFlQ
RV9DQVNUUyhDU1NJbWFnZVNldFZhbHVlLCBpc0ltYWdlU2V0VmFsdWUoKSkKLQogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NJbWFn
ZVNldFZhbHVlLCBpc0ltYWdlU2V0VmFsdWUoKSkKKwogI2VuZGlmIC8vIEVOQUJMRShDU1NfSU1B
R0VfU0VUKQogCiAjZW5kaWYgLy8gQ1NTSW1hZ2VTZXRWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0lt
YWdlVmFsdWUuaAppbmRleCA5Y2M4YmMzZTQ5NDJkNmMyNTY0MmVjZTQxZWVhYTBjNzYzMjEzYTk4
Li45YzQyMDhmOWYyYjAzMzBmY2JmNzgzNDY1YWM0YmVmNDE1NzgwN2JlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NJbWFnZVZhbHVlLmgKQEAgLTY5LDggKzY5LDggQEAgcHJpdmF0ZToKICAgICBBdG9taWNT
dHJpbmcgbV9pbml0aWF0b3JOYW1lOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTSW1h
Z2VWYWx1ZSwgaXNJbWFnZVZhbHVlKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTSW1hZ2VWYWx1ZSwgaXNJbWFnZVZhbHVl
KCkpCisKICNlbmRpZiAvLyBDU1NJbWFnZVZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NJbmhlcml0ZWRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0luaGVy
aXRlZFZhbHVlLmgKaW5kZXggZjZkMTY4ZWVhMDc2OGJmOGQwMTY2ZTVjNTM4ZmEwOGRiNjMwNmQ1
NC4uMzE2NzFiYTcyNTc3ZTdkOTYzM2U3MDRhZmExMzE1N2IwZjhhZjIyZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0luaGVyaXRlZFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0luaGVyaXRlZFZhbHVlLmgKQEAgLTQ0LDggKzQ0LDggQEAgcHJpdmF0ZToKICAg
ICB9CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NJbmhlcml0ZWRWYWx1ZSwgaXNJbmhl
cml0ZWRWYWx1ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0luaGVyaXRlZFZhbHVlLCBpc0luaGVyaXRlZFZhbHVlKCkp
CisKICNlbmRpZiAvLyBDU1NJbmhlcml0ZWRWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTSW5pdGlhbFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW5pdGlh
bFZhbHVlLmgKaW5kZXggYTBhNmU1NTQ4ODVmYTEwODE1NjBjYWI2ODQ0MmQ3Nzk3YWUyZmUxYi4u
OTExNmMxOGJkOWY5NTE3ZDRlZjFiZjAzM2NkM2JhY2UyNWUyNjBjZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0luaXRpYWxWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NJbml0aWFsVmFsdWUuaApAQCAtNTMsOCArNTMsOCBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9pc0ltcGxpY2l0OwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTSW5pdGlhbFZhbHVl
LCBpc0luaXRpYWxWYWx1ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0luaXRpYWxWYWx1ZSwgaXNJbml0aWFsVmFsdWUo
KSkKKwogI2VuZGlmIC8vIENTU0luaXRpYWxWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTTGluZUJveENvbnRhaW5WYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0xpbmVCb3hDb250YWluVmFsdWUuaAppbmRleCBiOTgwZThlZmE5ZTRiMWQxMDM3YjNkYjJiOGU5
M2FiMjY2ZTI3ZDI0Li5kNzY0M2ZhMzE0ZTAxZDNmOThhNDkwYjlmZDdhMWMxNDE0NDEwMmIzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTGluZUJveENvbnRhaW5WYWx1ZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NMaW5lQm94Q29udGFpblZhbHVlLmgKQEAgLTU2LDgg
KzU2LDggQEAgcHJpdmF0ZToKICAgICBMaW5lQm94Q29udGFpbiBtX3ZhbHVlOwogfTsKIAotQ1NT
X1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTTGluZUJveENvbnRhaW5WYWx1ZSwgaXNMaW5lQm94Q29udGFp
blZhbHVlKCkpCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLX0gLy8gbmFtZXNwYWNlCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NMaW5lQm94Q29udGFpblZhbHVlLCBpc0xp
bmVCb3hDb250YWluVmFsdWUoKSkKIAotI2VuZGlmCisjZW5kaWYgLy8gQ1NTTGluZUJveENvbnRh
aW5WYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IGMxOGE0YjNhNTE1MzU3OWE3
YTljYzU2ZjhmYjg0YjA5ZTJjZTgyYWEuLjBkMDdiNDdmNGY1MWFjNGM5MDdlOGJmMWJlNzA3NWE0
YTNkYzcyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC0xMzQ1LDE0ICsxMzQ1LDE0
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKFJHQkEzMiYgY29sb3IsIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBib29sIHN0cmljdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQ1NT
VmFsdWUqIHZhbHVlID0gcGFyc2VyLm1fcGFyc2VkUHJvcGVydGllcy5maXJzdCgpLnZhbHVlKCk7
Ci0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUp
OwotICAgIGlmICghcHJpbWl0aXZlVmFsdWUtPmlzUkdCQ29sb3IoKSkKKyAgICBDU1NQcmltaXRp
dmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKTsKKyAgICBpZiAoIXByaW1pdGl2ZVZhbHVlLmlzUkdCQ29sb3IoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgY29sb3IgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UkdCQTMyVmFsdWUo
KTsKKyAgICBjb2xvciA9IHByaW1pdGl2ZVZhbHVlLmdldFJHQkEzMlZhbHVlKCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTMxMTgsNyArMzExOCw3IEBAIHZvaWQgQ1NTUGFyc2VyOjphZGRG
aWxsVmFsdWUoUmVmUHRyPENTU1ZhbHVlPiYgbHZhbCwgUGFzc1JlZjxDU1NWYWx1ZT4gcnZhbCkK
ICAgICB9CiAKICAgICBpZiAobHZhbC0+aXNCYXNlVmFsdWVMaXN0KCkpIHsKLSAgICAgICAgdG9D
U1NWYWx1ZUxpc3QoKmx2YWwpLmFwcGVuZChXVEY6Om1vdmUocnZhbCkpOworICAgICAgICBkb3du
Y2FzdDxDU1NWYWx1ZUxpc3Q+KCpsdmFsKS5hcHBlbmQoV1RGOjptb3ZlKHJ2YWwpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzQyNSw4ICszNDI1LDggQEAgdm9pZCBDU1NQYXJzZXI6
OmFkZEFuaW1hdGlvblZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFBhc3NSZWY8Q1NTVmFs
dWU+IHJ2YWwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChsdmFsLT5pc1ZhbHVl
TGlzdCgpKSB7Ci0gICAgICAgIHRvQ1NTVmFsdWVMaXN0KCpsdmFsKS5hcHBlbmQoV1RGOjptb3Zl
KHJ2YWwpKTsKKyAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqbHZhbCkpIHsKKyAgICAgICAgZG93
bmNhc3Q8Q1NTVmFsdWVMaXN0PigqbHZhbCkuYXBwZW5kKFdURjo6bW92ZShydmFsKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQxNzAsMTAgKzQxNzAsMTAgQEAgdm9pZCBDU1NQYXJz
ZXI6OnBhcnNlM1ZhbHVlc0ZpbGxQb3NpdGlvbihDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlz
dCwgUmVmUHRyPEMKICAgICAgICAgdmFsdWUxLnN3YXAodmFsdWUyKTsKIAogI2lmbmRlZiBOREVC
VUcKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3QgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZh
bHVlMS5nZXQoKSk7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZCA9IHRvQ1NTUHJpbWl0
aXZlVmFsdWUodmFsdWUyLmdldCgpKTsKLSAgICBpZGVudDEgPSBmaXJzdC0+Z2V0UGFpclZhbHVl
KCktPmZpcnN0KCktPmdldFZhbHVlSUQoKTsKLSAgICBpZGVudDIgPSBzZWNvbmQtPmdldFBhaXJW
YWx1ZSgpLT5maXJzdCgpLT5nZXRWYWx1ZUlEKCk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGZp
cnN0ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZTEpOworICAgIENTU1ByaW1p
dGl2ZVZhbHVlJiBzZWNvbmQgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlMik7
CisgICAgaWRlbnQxID0gZmlyc3QuZ2V0UGFpclZhbHVlKCktPmZpcnN0KCktPmdldFZhbHVlSUQo
KTsKKyAgICBpZGVudDIgPSBzZWNvbmQuZ2V0UGFpclZhbHVlKCktPmZpcnN0KCktPmdldFZhbHVl
SUQoKTsKICAgICBBU1NFUlQoaWRlbnQxID09IENTU1ZhbHVlTGVmdCB8fCBpZGVudDEgPT0gQ1NT
VmFsdWVSaWdodCk7CiAgICAgQVNTRVJUKGlkZW50MiA9PSBDU1NWYWx1ZUJvdHRvbSB8fCBpZGVu
dDIgPT0gQ1NTVmFsdWVUb3ApOwogI2VuZGlmCkBAIC00MjMxLDggKzQyMzEsOCBAQCB2b2lkIENT
U1BhcnNlcjo6cGFyc2VGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3Qs
IFJlZlB0cjxDU1NWYWx1ZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZTEgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVl
MS5nZXQoKSk7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZTIgPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlMi5nZXQoKSk7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBwYXJzZWRWYWx1ZTEgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUx
LmdldCgpKTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMiA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZTIuZ2V0KCkpOwogCiAgICAgdmFsdWUxLmNs
ZWFyKCk7CiAgICAgdmFsdWUyLmNsZWFyKCk7CkBAIC00MzI5LDcgKzQzMjksNyBAQCB2b2lkIENT
U1BhcnNlcjo6cGFyc2VGaWxsUmVwZWF0KFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMSwgUmVmUHRy
PENTU1ZhbHVlPiYgdmFsdQogCiAgICAgLy8gSWYgb25seSBvbmUgdmFsdWUgd2FzIHNwZWNpZmll
ZCwgdmFsdWUyIGlzIHRoZSBzYW1lIGFzIHZhbHVlMS4KICAgICBtX2ltcGxpY2l0U2hvcnRoYW5k
ID0gdHJ1ZTsKLSAgICB2YWx1ZTIgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUodG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZTEuZ2V0KCkpLT5nZXRWYWx1ZUlEKCkpOworICAg
IHZhbHVlMiA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlMSkuZ2V0VmFsdWVJRCgpKTsKIH0KIAogUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxTaXplKENTU1Byb3BlcnR5SUQgcHJvcElk
LCBib29sJiBhbGxvd0NvbW1hKQpAQCAtNDk0Niw3ICs0OTQ2LDcgQEAgUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUdyaWRQb3NpdGlvbigpCiAKIHN0YXRpYyBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBncmlkTWlzc2luZ0dyaWRQb3NpdGlvblZhbHVlKENTU1ZhbHVlKiB2YWx1ZSkK
IHsKLSAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiB0b0NTU1ByaW1pdGl2ZVZh
bHVlKHZhbHVlKS0+aXNTdHJpbmcoKSkKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNTdHJpbmcoKSkK
ICAgICAgICAgcmV0dXJuIHZhbHVlOwogCiAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwpAQCAtNDk5OCw3ICs0OTk4LDcgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlR3JpZFRlbXBsYXRlUm93c0FuZEFyZWFzKFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IHRlbXBsYXRlQ29sdW0KICAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkt
PnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6OlZhbHVlTGlzdCkgewogICAgICAgICAgICAgaWYgKHRy
YWlsaW5nSWRlbnRXYXNBZGRlZCkgewogICAgICAgICAgICAgICAgIC8vIEEgcm93J3MgdHJhaWxp
bmcgaWRlbnQgbXVzdCBiZSBjb25jYXRlbmF0ZWQgd2l0aCB0aGUgbmV4dCByb3cncyBsZWFkaW5n
IG9uZS4KLSAgICAgICAgICAgICAgICBwYXJzZUdyaWRMaW5lTmFtZXMoKm1fdmFsdWVMaXN0LCAq
dGVtcGxhdGVSb3dzLCB0b0NTU0dyaWRMaW5lTmFtZXNWYWx1ZSh0ZW1wbGF0ZVJvd3MtPml0ZW0o
dGVtcGxhdGVSb3dzLT5sZW5ndGgoKSAtIDEpKSk7CisgICAgICAgICAgICAgICAgcGFyc2VHcmlk
TGluZU5hbWVzKCptX3ZhbHVlTGlzdCwgKnRlbXBsYXRlUm93cywgZG93bmNhc3Q8Q1NTR3JpZExp
bmVOYW1lc1ZhbHVlPih0ZW1wbGF0ZVJvd3MtPml0ZW0odGVtcGxhdGVSb3dzLT5sZW5ndGgoKSAt
IDEpKSk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBwYXJzZUdyaWRMaW5l
TmFtZXMoKm1fdmFsdWVMaXN0LCAqdGVtcGxhdGVSb3dzKTsKICAgICAgICAgfQpAQCAtNTkwMCw3
ICs1OTAwLDcgQEAgUGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFz
aWNTaGFwZUNpcmNsZShDU1NQYXJzZXJWYWx1ZUxpc3QqIGEKICAgICAgICAgLy8gYXJndW1lbnRz
IGV4Y2VwdCB0aGUgZmlyc3QgdHdvLiBUaHVzLCBhbmQgaW5kZXggZ3JlYXRlciB0aGFuIG9uZQog
ICAgICAgICAvLyBpbmRpY2F0ZXMgYW4gaW52YWxpZCBwcm9kdWN0aW9uLgogICAgICAgICBpZiAo
YXJncy0+Y3VycmVudEluZGV4KCkgPiAxKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBpZiAoIWFyZ3MtPmN1cnJlbnRJbmRleCgp
ICYmIGFyZ3VtZW50LT5pZCAhPSBDU1NWYWx1ZUF0KSB7CiAgICAgICAgICAgICBpZiAoUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiByYWRpdXMgPSBwYXJzZVNoYXBlUmFkaXVzKGFyZ3VtZW50KSkg
ewpAQCAtNTkwOCw3ICs1OTA4LDcgQEAgUGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJz
ZXI6OnBhcnNlQmFzaWNTaGFwZUNpcmNsZShDU1NQYXJzZXJWYWx1ZUxpc3QqIGEKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChh
cmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVBdCAmJiBhcmdzLT5uZXh0KCkpIHsKQEAgLTU5MTYsMTQg
KzU5MTYsMTQgQEAgUGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFz
aWNTaGFwZUNpcmNsZShDU1NQYXJzZXJWYWx1ZUxpc3QqIGEKICAgICAgICAgICAgIFJlZlB0cjxD
U1NWYWx1ZT4gY2VudGVyWTsKICAgICAgICAgICAgIHBhcnNlRmlsbFBvc2l0aW9uKGFyZ3MsIGNl
bnRlclgsIGNlbnRlclkpOwogICAgICAgICAgICAgaWYgKGNlbnRlclggJiYgY2VudGVyWSAmJiAh
YXJncy0+Y3VycmVudCgpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGNlbnRlclgtPmlzUHJp
bWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGNlbnRlclktPmlzUHJpbWl0
aXZlVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgc2hhcGUtPnNldENlbnRlclgodG9DU1NQcmlt
aXRpdmVWYWx1ZShjZW50ZXJYLmdldCgpKSk7Ci0gICAgICAgICAgICAgICAgc2hhcGUtPnNldENl
bnRlclkodG9DU1NQcmltaXRpdmVWYWx1ZShjZW50ZXJZLmdldCgpKSk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqY2VudGVyWCkpOworICAgICAgICAgICAg
ICAgIEFTU0VSVChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmNlbnRlclkpKTsKKyAgICAgICAgICAg
ICAgICBzaGFwZS0+c2V0Q2VudGVyWChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY2VudGVy
WC5nZXQoKSkpOworICAgICAgICAgICAgICAgIHNoYXBlLT5zZXRDZW50ZXJZKGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPihjZW50ZXJZLmdldCgpKSk7CiAgICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIAogICAgIHJldHVybiBzaGFwZTsKQEAgLTU5NDYsNyArNTk0Niw3
IEBAIFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gQ1NTUGFyc2VyOjpwYXJzZUJhc2ljU2hhcGVF
bGxpcHNlKENTU1BhcnNlclZhbHVlTGlzdCoKICAgICAgICAgLy8gYXJndW1lbnRzIGV4Y2VwdCB0
aGUgZmlyc3QgdGhyZWUuIFRodXMsIGFuIGluZGV4IGdyZWF0ZXIgdGhhbiB0d28KICAgICAgICAg
Ly8gaW5kaWNhdGVzIGFuIGludmFsaWQgcHJvZHVjdGlvbi4KICAgICAgICAgaWYgKGFyZ3MtPmN1
cnJlbnRJbmRleCgpID4gMikKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICAgICAgaWYgKGFyZ3MtPmN1cnJlbnRJbmRleCgpIDwgMiAmJiBh
cmd1bWVudC0+aWQgIT0gQ1NTVmFsdWVBdCkgewogICAgICAgICAgICAgaWYgKFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gcmFkaXVzID0gcGFyc2VTaGFwZVJhZGl1cyhhcmd1bWVudCkpIHsKQEAg
LTU5NTcsMjIgKzU5NTcsMjIgQEAgUGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6
OnBhcnNlQmFzaWNTaGFwZUVsbGlwc2UoQ1NTUGFyc2VyVmFsdWVMaXN0KgogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGFyZ3Vt
ZW50LT5pZCAhPSBDU1NWYWx1ZUF0IHx8ICFhcmdzLT5uZXh0KCkpIC8vIGV4cGVjdGluZyBlbGxp
cHNlKC4uIGF0IDxwb3NpdGlvbj4pCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY2VudGVyWDsKICAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjZW50ZXJZOwogICAgICAgICBwYXJzZUZpbGxQb3NpdGlv
bihhcmdzLCBjZW50ZXJYLCBjZW50ZXJZKTsKICAgICAgICAgaWYgKCFjZW50ZXJYIHx8ICFjZW50
ZXJZIHx8IGFyZ3MtPmN1cnJlbnQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgQVNTRVJUKGNlbnRlclgtPmlzUHJpbWl0aXZl
VmFsdWUoKSk7Ci0gICAgICAgIEFTU0VSVChjZW50ZXJZLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwot
ICAgICAgICBzaGFwZS0+c2V0Q2VudGVyWCh0b0NTU1ByaW1pdGl2ZVZhbHVlKGNlbnRlclguZ2V0
KCkpKTsKLSAgICAgICAgc2hhcGUtPnNldENlbnRlclkodG9DU1NQcmltaXRpdmVWYWx1ZShjZW50
ZXJZLmdldCgpKSk7CisgICAgICAgIEFTU0VSVChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmNlbnRl
clgpKTsKKyAgICAgICAgQVNTRVJUKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqY2VudGVyWSkpOwor
ICAgICAgICBzaGFwZS0+c2V0Q2VudGVyWChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY2Vu
dGVyWC5nZXQoKSkpOworICAgICAgICBzaGFwZS0+c2V0Q2VudGVyWShkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oY2VudGVyWS5nZXQoKSkpOwogICAgIH0KIAogICAgIHJldHVybiBzaGFwZTsK
QEAgLTgxMTUsNyArODExNSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRHcmFk
aWVudChDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRyPENTCiAgICAgICAgIGEg
PSBhcmdzLT5uZXh0KCk7CiAgICAgICAgIGlmICghYSB8fCBhLT51bml0ICE9IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB0
b0NTU1JhZGlhbEdyYWRpZW50VmFsdWUocmVzdWx0LmdldCgpKS0+c2V0Rmlyc3RSYWRpdXMoY3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGEpKTsKKyAgICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFs
R3JhZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0Rmlyc3RSYWRpdXMoY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKGEpKTsKIAogICAgICAgICAvLyBDb21tYSBhZnRlciB0aGUgZmlyc3QgcmFkaXVz
LgogICAgICAgICBhID0gYXJncy0+bmV4dCgpOwpAQCAtODE1Miw3ICs4MTUyLDcgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCogdmFs
dWVMaXN0LCBSZWZQdHI8Q1MKICAgICAgICAgYSA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgaWYg
KCFhIHx8IGEtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHRvQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZShyZXN1
bHQuZ2V0KCkpLT5zZXRTZWNvbmRSYWRpdXMoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGEp
KTsKKyAgICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0
U2Vjb25kUmFkaXVzKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhKSk7CiAgICAgfQogCiAg
ICAgLy8gV2Ugbm93IHdpbGwgYWNjZXB0IGFueSBudW1iZXIgb2Ygc3RvcHMgKDAgb3IgbW9yZSku
CkBAIC04MzEyLDE0ICs4MzEyLDE0IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRS
YWRpYWxHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgQVNTRVJUKCFjZW50ZXJYIHx8IGNlbnRl
clgtPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgQVNTRVJUKCFjZW50ZXJZIHx8IGNlbnRlclkt
PmlzUHJpbWl0aXZlVmFsdWUoKSk7CisgICAgQVNTRVJUKCFjZW50ZXJYIHx8IGlzPENTU1ByaW1p
dGl2ZVZhbHVlPigqY2VudGVyWCkpOworICAgIEFTU0VSVCghY2VudGVyWSB8fCBpczxDU1NQcmlt
aXRpdmVWYWx1ZT4oKmNlbnRlclkpKTsKIAotICAgIHJlc3VsdC0+c2V0Rmlyc3RYKHRvQ1NTUHJp
bWl0aXZlVmFsdWUoY2VudGVyWC5nZXQoKSkpOwotICAgIHJlc3VsdC0+c2V0U2Vjb25kWCh0b0NT
U1ByaW1pdGl2ZVZhbHVlKGNlbnRlclguZ2V0KCkpKTsKKyAgICByZXN1bHQtPnNldEZpcnN0WChk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY2VudGVyWC5nZXQoKSkpOworICAgIHJlc3VsdC0+
c2V0U2Vjb25kWChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY2VudGVyWC5nZXQoKSkpOwog
ICAgIC8vIENTUzMgcmFkaWFsIGdyYWRpZW50cyBhbHdheXMgc2hhcmUgdGhlIHNhbWUgc3RhcnQg
YW5kIGVuZCBwb2ludC4KLSAgICByZXN1bHQtPnNldEZpcnN0WSh0b0NTU1ByaW1pdGl2ZVZhbHVl
KGNlbnRlclkuZ2V0KCkpKTsKLSAgICByZXN1bHQtPnNldFNlY29uZFkodG9DU1NQcmltaXRpdmVW
YWx1ZShjZW50ZXJZLmdldCgpKSk7CisgICAgcmVzdWx0LT5zZXRGaXJzdFkoZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KGNlbnRlclkuZ2V0KCkpKTsKKyAgICByZXN1bHQtPnNldFNlY29uZFko
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGNlbnRlclkuZ2V0KCkpKTsKIAogICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2hhcGVWYWx1ZTsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IHNpemVWYWx1ZTsKQEAgLTg1NzgsMTMgKzg1NzgsMTMgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZlB0
cjxDU1NWYWwKICAgICAgICAgaWYgKCFhKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIEFTU0VSVChjZW50ZXJYLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICBBU1NF
UlQoY2VudGVyWS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRGaXJz
dFgodG9DU1NQcmltaXRpdmVWYWx1ZShjZW50ZXJYLmdldCgpKSk7Ci0gICAgICAgIHJlc3VsdC0+
c2V0Rmlyc3RZKHRvQ1NTUHJpbWl0aXZlVmFsdWUoY2VudGVyWS5nZXQoKSkpOworICAgICAgICBB
U1NFUlQoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCpjZW50ZXJYKSk7CisgICAgICAgIEFTU0VSVChp
czxDU1NQcmltaXRpdmVWYWx1ZT4oKmNlbnRlclkpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRGaXJz
dFgoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGNlbnRlclguZ2V0KCkpKTsKKyAgICAgICAg
cmVzdWx0LT5zZXRGaXJzdFkoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGNlbnRlclkuZ2V0
KCkpKTsKICAgICAgICAgLy8gUmlnaHQgbm93LCBDU1MgcmFkaWFsIGdyYWRpZW50cyBoYXZlIHRo
ZSBzYW1lIHN0YXJ0IGFuZCBlbmQgY2VudGVycy4KLSAgICAgICAgcmVzdWx0LT5zZXRTZWNvbmRY
KHRvQ1NTUHJpbWl0aXZlVmFsdWUoY2VudGVyWC5nZXQoKSkpOwotICAgICAgICByZXN1bHQtPnNl
dFNlY29uZFkodG9DU1NQcmltaXRpdmVWYWx1ZShjZW50ZXJZLmdldCgpKSk7CisgICAgICAgIHJl
c3VsdC0+c2V0U2Vjb25kWChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY2VudGVyWC5nZXQo
KSkpOworICAgICAgICByZXN1bHQtPnNldFNlY29uZFkoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KGNlbnRlclkuZ2V0KCkpKTsKICAgICB9CiAKICAgICBpZiAoc2hhcGVWYWx1ZSB8fCBzaXpl
VmFsdWUgfHwgaG9yaXpvbnRhbFNpemUgfHwgY2VudGVyWCB8fCBjZW50ZXJZKQpAQCAtMTE3Mjgs
NyArMTE3MjgsNyBAQCBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IENTU1BhcnNlcjo6Y3JlYXRl
Rm9udEZhY2VSdWxlKCkKICAgICAgICAgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gbV9wYXJzZWRQ
cm9wZXJ0aWVzW2ldOwogICAgICAgICBpZiAocHJvcGVydHkuaWQoKSA9PSBDU1NQcm9wZXJ0eUZv
bnRWYXJpYW50ICYmIHByb3BlcnR5LnZhbHVlKCktPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAg
ICAgICAgIHByb3BlcnR5LndyYXBWYWx1ZUluQ29tbWFTZXBhcmF0ZWRMaXN0KCk7Ci0gICAgICAg
IGVsc2UgaWYgKHByb3BlcnR5LmlkKCkgPT0gQ1NTUHJvcGVydHlGb250RmFtaWx5ICYmICghcHJv
cGVydHkudmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSB8fCB0b0NTU1ZhbHVlTGlzdChwcm9wZXJ0eS52
YWx1ZSgpKS0+bGVuZ3RoKCkgIT0gMSkpIHsKKyAgICAgICAgZWxzZSBpZiAocHJvcGVydHkuaWQo
KSA9PSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHkgJiYgKCFpczxDU1NWYWx1ZUxpc3Q+KCpwcm9wZXJ0
eS52YWx1ZSgpKSB8fCBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpwcm9wZXJ0eS52YWx1ZSgpKS5s
ZW5ndGgoKSAhPSAxKSkgewogICAgICAgICAgICAgLy8gVW5saWtlIGZvbnQtZmFtaWx5IHByb3Bl
cnR5LCBmb250LWZhbWlseSBkZXNjcmlwdG9yIGluIEBmb250LWZhY2UgcnVsZQogICAgICAgICAg
ICAgLy8gaGFzIHRvIGJlIGEgdmFsdWUgbGlzdCB3aXRoIGV4YWN0bHkgb25lIGZhbWlseSBuYW1l
LiBJdCBjYW5ub3QgaGF2ZSBhCiAgICAgICAgICAgICAvLyBoYXZlICdpbml0aWFsJyB2YWx1ZSBh
bmQgY2Fubm90ICdpbmhlcml0JyBmcm9tIHBhcmVudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1p
dGl2ZVZhbHVlLmgKaW5kZXggYTEzYzE1MzNhNDFmMzY0YWQ0ODk4ODZkM2I0N2ExNmJiY2FiMTRl
OS4uMjQ0NjA5M2IyOWZhMDIxYmFmZTFiZjJkMmY1ZGUyMzhjZmVkNmFiOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgKQEAgLTQyMSw4ICs0MjEsOCBAQCBwcml2YXRlOgog
ICAgIH0gbV92YWx1ZTsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU1ByaW1pdGl2ZVZh
bHVlLCBpc1ByaW1pdGl2ZVZhbHVlKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTUHJpbWl0aXZlVmFsdWUsIGlzUHJpbWl0
aXZlVmFsdWUoKSkKKwogI2VuZGlmIC8vIENTU1ByaW1pdGl2ZVZhbHVlX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NSZWZsZWN0VmFsdWUuaAppbmRleCA4ZDBmZTYwNTljOWIyMTE4OTRhMTI4YjlkYWQxZTg1
NDFjZjBlZjExLi43MmUzNjZkZjFlZGE5NTk1YmQ3ZjVmZTUzYzFiOWY2MGFmZmE1Yzg3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVmbGVjdFZhbHVlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1JlZmxlY3RWYWx1ZS5oCkBAIC02Nyw4ICs2Nyw4IEBAIHByaXZhdGU6
CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBtX21hc2s7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNU
UyhDU1NSZWZsZWN0VmFsdWUsIGlzUmVmbGVjdFZhbHVlKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTUmVmbGVjdFZhbHVl
LCBpc1JlZmxlY3RWYWx1ZSgpKQorCiAjZW5kaWYgLy8gQ1NTUmVmbGVjdFZhbHVlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTaGFkb3dWYWx1ZS5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1NoYWRvd1ZhbHVlLmgKaW5kZXggNjE3NWRmODI2ZmE5MTJiZDA4NjQxMmJjY2Zi
ZTEzYTVmNWIxZDI5MC4uMDA2YzYyOTJmMTZjNGIxMTQ0OTQzYzMxNGE4ODhmMmI3ZTg3OTZmZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NoYWRvd1ZhbHVlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1NoYWRvd1ZhbHVlLmgKQEAgLTYyLDggKzYyLDggQEAgcHJpdmF0
ZToKICAgICAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29sb3IpOwogfTsKIAot
Q1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTU2hhZG93VmFsdWUsIGlzU2hhZG93VmFsdWUoKSkKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAotfSAvLyBuYW1lc3BhY2UKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQ1NTX1ZBTFVFKENTU1NoYWRvd1ZhbHVlLCBpc1NoYWRvd1ZhbHVlKCkpCiAKLSNlbmRp
ZgorI2VuZGlmIC8vIENTU1NoYWRvd1ZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVGlt
aW5nRnVuY3Rpb25WYWx1ZS5oCmluZGV4IDY2YzJjM2IyNTZmMDhjMTcwODYzNTEzYWRiZWY4ZGIy
OGU5YmEwMDMuLmMzOWFiMGNmZjIwZGI1YWQ4OTk0Yjc2NDc2N2VkOGM1Y2RlNWRmMWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaApAQCAtNjMsOCArNjMs
NiBAQCBwcml2YXRlOgogICAgIGRvdWJsZSBtX3kyOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FT
VFMoQ1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlLCBpc0N1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb25WYWx1ZSgpKQotCiBjbGFzcyBDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWUgOiBw
dWJsaWMgQ1NTVmFsdWUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmPENTU1N0ZXBzVGlt
aW5nRnVuY3Rpb25WYWx1ZT4gY3JlYXRlKGludCBzdGVwcywgYm9vbCBzdGVwQXRTdGFydCkKQEAg
LTkxLDggKzg5LDkgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc3RlcEF0U3RhcnQ7CiB9OwogCi1D
U1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWUsIGlzU3RlcHNU
aW1pbmdGdW5jdGlvblZhbHVlKCkpCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLX0gLy8gbmFt
ZXNwYWNlCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NDdWJpY0JlemllclRp
bWluZ0Z1bmN0aW9uVmFsdWUsIGlzQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlKCkpCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFs
dWUsIGlzU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlKCkpCiAKLSNlbmRpZgorI2VuZGlmIC8vIENT
U1RpbWluZ0Z1bmN0aW9uVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1RvU3R5bGVNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCmlu
ZGV4IDUxM2M0ZDliNzM5YjU3NDhhOGYzODgwOTMxZGJlNzMwODAxZGE5MWQuLjBhMTg1ZjRkNmI2
M2E2NzBhNmVlZjJmYWNhZDQ4YTk2NDRmOGVkMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHls
ZU1hcC5jcHAKQEAgLTc0LDEwICs3NCwxMCBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxB
dHRhY2htZW50KENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKgogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIHN3aXRjaCAodG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSktPmdldFZhbHVlSUQo
KSkgeworICAgIHN3aXRjaCAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0
VmFsdWVJRCgpKSB7CiAgICAgY2FzZSBDU1NWYWx1ZUZpeGVkOgogICAgICAgICBsYXllci0+c2V0
QXR0YWNobWVudChGaXhlZEJhY2tncm91bmRBdHRhY2htZW50KTsKICAgICAgICAgYnJlYWs7CkBA
IC05OSwxMSArOTksMTEgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsQ2xpcChDU1NQcm9w
ZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAo
IWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBD
U1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZh
bHVlKTsKLSAgICBsYXllci0+c2V0Q2xpcCgqcHJpbWl0aXZlVmFsdWUpOworICAgIENTU1ByaW1p
dGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpOworICAgIGxheWVyLT5zZXRDbGlwKHByaW1pdGl2ZVZhbHVlKTsKIH0KIAogdm9pZCBD
U1NUb1N0eWxlTWFwOjptYXBGaWxsQ29tcG9zaXRlKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciog
bGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKQEAgLTExMywxMSArMTEzLDExIEBAIHZvaWQgQ1NTVG9T
dHlsZU1hcDo6bWFwRmlsbENvbXBvc2l0ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVy
LCBDU1NWYWx1ZSoKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFs
dWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICBsYXllci0+c2V0Q29tcG9zaXRl
KCpwcmltaXRpdmVWYWx1ZSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgbGF5ZXItPnNldENv
bXBvc2l0ZShwcmltaXRpdmVWYWx1ZSk7CiB9CiAKIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmls
bEJsZW5kTW9kZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFs
dWUpCkBAIC0xMjcsMTEgKzEyNywxMSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxCbGVu
ZE1vZGUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisg
ICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVW
YWx1ZSh2YWx1ZSk7Ci0gICAgbGF5ZXItPnNldEJsZW5kTW9kZSgqcHJpbWl0aXZlVmFsdWUpOwor
ICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGxheWVyLT5zZXRCbGVuZE1vZGUocHJpbWl0aXZlVmFs
dWUpOwogfQogCiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxPcmlnaW4oQ1NTUHJvcGVydHlJ
RCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQpAQCAtMTQxLDExICsxNDEsMTEg
QEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsT3JpZ2luKENTU1Byb3BlcnR5SUQsIEZpbGxM
YXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2
ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICBsYXll
ci0+c2V0T3JpZ2luKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHBy
aW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAg
bGF5ZXItPnNldE9yaWdpbihwcmltaXRpdmVWYWx1ZSk7CiB9CiAKIApAQCAtMTY2LDExICsxNjYs
MTEgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WChDU1NQcm9wZXJ0eUlELCBG
aWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmEKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1p
dGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICBs
YXllci0+c2V0UmVwZWF0WCgqcHJpbWl0aXZlVmFsdWUpOworICAgIENTU1ByaW1pdGl2ZVZhbHVl
JiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwor
ICAgIGxheWVyLT5zZXRSZXBlYXRYKHByaW1pdGl2ZVZhbHVlKTsKIH0KIAogdm9pZCBDU1NUb1N0
eWxlTWFwOjptYXBGaWxsUmVwZWF0WShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBD
U1NWYWx1ZSogdmFsdWUpCkBAIC0xODAsMzEgKzE4MCwzMSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6
Om1hcEZpbGxSZXBlYXRZKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVl
KiB2YQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIGxheWVyLT5zZXRSZXBlYXRZKCpwcmltaXRp
dmVWYWx1ZSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgbGF5ZXItPnNldFJlcGVhdFkocHJp
bWl0aXZlVmFsdWUpOwogfQogCiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxTaXplKENTU1By
b3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKLSAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZh
bHVlPigqdmFsdWUpKSB7CiAgICAgICAgIGxheWVyLT5zZXRTaXplVHlwZShTaXplTm9uZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICBpZiAocHJpbWl0aXZlVmFs
dWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUNvbnRhaW4pCisgICAgQ1NTUHJpbWl0aXZlVmFs
dWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7
CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUNvbnRhaW4p
CiAgICAgICAgIGxheWVyLT5zZXRTaXplVHlwZShDb250YWluKTsKLSAgICBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ292ZXIpCisgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ292ZXIpCiAgICAgICAgIGxh
eWVyLT5zZXRTaXplVHlwZShDb3Zlcik7CiAgICAgZWxzZQogICAgICAgICBsYXllci0+c2V0U2l6
ZVR5cGUoU2l6ZUxlbmd0aCk7CiAKICAgICBMZW5ndGhTaXplIGIgPSBGaWxsTGF5ZXI6OmluaXRp
YWxGaWxsU2l6ZUxlbmd0aChsYXllci0+dHlwZSgpKTsKIAotICAgIGlmICh2YWx1ZS0+aXNJbml0
aWFsVmFsdWUoKSB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ29u
dGFpbiB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ292ZXIpIHsK
KyAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgcHJpbWl0aXZlVmFsdWUuZ2V0VmFs
dWVJRCgpID09IENTU1ZhbHVlQ29udGFpbiB8fCBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkg
PT0gQ1NTVmFsdWVDb3ZlcikgewogICAgICAgICBsYXllci0+c2V0U2l6ZUxlbmd0aChiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIxMiwxMyArMjEyLDEzIEBAIHZvaWQgQ1NTVG9TdHls
ZU1hcDo6bWFwRmlsbFNpemUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFs
dWUqIHZhbHVlCiAgICAgTGVuZ3RoIGZpcnN0TGVuZ3RoOwogICAgIExlbmd0aCBzZWNvbmRMZW5n
dGg7CiAKLSAgICBpZiAoUGFpciogcGFpciA9IHByaW1pdGl2ZVZhbHVlLT5nZXRQYWlyVmFsdWUo
KSkgeworICAgIGlmIChQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUuZ2V0UGFpclZhbHVlKCkp
IHsKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0ID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPihwYWlyLT5maXJzdCgpKTsKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHNlY29uZCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4ocGFpci0+c2Vjb25kKCkp
OwogICAgICAgICBmaXJzdExlbmd0aCA9IGZpcnN0LT5jb252ZXJ0VG9MZW5ndGg8QW55Q29udmVy
c2lvbj4obV9yZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwog
ICAgICAgICBzZWNvbmRMZW5ndGggPSBzZWNvbmQtPmNvbnZlcnRUb0xlbmd0aDxBbnlDb252ZXJz
aW9uPihtX3Jlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgZmlyc3RMZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29udmVy
dFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KG1fcmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSgpKTsKKyAgICAgICAgZmlyc3RMZW5ndGggPSBwcmltaXRpdmVWYWx1ZS5j
b252ZXJ0VG9MZW5ndGg8QW55Q29udmVyc2lvbj4obV9yZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xl
bmd0aENvbnZlcnNpb25EYXRhKCkpOwogICAgICAgICBzZWNvbmRMZW5ndGggPSBMZW5ndGgoKTsK
ICAgICB9CiAKQEAgLTIzNywxMCArMjM3LDEwIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmls
bFhQb3NpdGlvbihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmlt
aXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBQYWlyKiBwYWlyID0g
cHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1ZSgpOwogICAgIGlmIChwYWlyKSB7CiAgICAgICAg
IEFTU0VSVF9VTlVTRUQocHJvcGVydHlJRCwgcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRQb3NpdGlvblggfHwgcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3Np
dGlvblgpOwpAQCAtMjY5LDEwICsyNjksMTAgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxs
WVBvc2l0aW9uKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1p
dGl2ZVZhbHVlKHZhbHVlKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIFBhaXIqIHBhaXIgPSBw
cmltaXRpdmVWYWx1ZS0+Z2V0UGFpclZhbHVlKCk7CiAgICAgaWYgKHBhaXIpIHsKICAgICAgICAg
QVNTRVJUX1VOVVNFRChwcm9wZXJ0eUlELCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dy
b3VuZFBvc2l0aW9uWSB8fCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0
aW9uWSk7CkBAIC0zMDIsMTEgKzMwMiwxMSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxN
YXNrU291cmNlVHlwZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0
aXZlVmFsdWUodmFsdWUpOwotICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQo
KSkgeworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUuZ2V0
VmFsdWVJRCgpKSB7CiAgICAgY2FzZSBDU1NWYWx1ZUFscGhhOgogICAgICAgICB0eXBlID0gRU1h
c2tTb3VyY2VUeXBlOjpNYXNrQWxwaGE7CiAgICAgICAgIGJyZWFrOwpAQCAtMzI5LDExICszMjks
MTEgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25EZWxheShBbmltYXRpb24qIGFu
aW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIGFuaW1h
dGlvbi0+c2V0RGVsYXkocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGRvdWJsZSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OlNlY29uZHM+KCkpOworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRp
dmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGFuaW1h
dGlvbi0+c2V0RGVsYXkocHJpbWl0aXZlVmFsdWUuY29tcHV0ZVRpbWU8ZG91YmxlLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6U2Vjb25kcz4oKSk7CiB9CiAKIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5p
bWF0aW9uRGlyZWN0aW9uKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKQEAgLTM0
MywxMSArMzQzLDExIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uRGlyZWN0aW9u
KEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsK
LSAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICBDU1NQcmlt
aXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
KnZhbHVlKTsKKyAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSkgewogICAg
IGNhc2UgQ1NTVmFsdWVOb3JtYWw6CiAgICAgICAgIGxheWVyLT5zZXREaXJlY3Rpb24oQW5pbWF0
aW9uOjpBbmltYXRpb25EaXJlY3Rpb25Ob3JtYWwpOwogICAgICAgICBicmVhazsKQEAgLTM3Miwx
MSArMzcyLDExIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uRHVyYXRpb24oQW5p
bWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsK
LSAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlVGltZTxk
b3VibGUsIENTU1ByaW1pdGl2ZVZhbHVlOjpTZWNvbmRzPigpKTsKKyAgICBDU1NQcmltaXRpdmVW
YWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KTsKKyAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVUaW1l
PGRvdWJsZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlNlY29uZHM+KCkpOwogfQogCiB2b2lkIENTU1Rv
U3R5bGVNYXA6Om1hcEFuaW1hdGlvbkZpbGxNb2RlKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVl
KiB2YWx1ZSkKQEAgLTM4NiwxMSArMzg2LDExIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5p
bWF0aW9uRmlsbE1vZGUoQW5pbWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQor
ICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZl
VmFsdWUodmFsdWUpOwotICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSkg
eworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUuZ2V0VmFs
dWVJRCgpKSB7CiAgICAgY2FzZSBDU1NWYWx1ZU5vbmU6CiAgICAgICAgIGxheWVyLT5zZXRGaWxs
TW9kZShBbmltYXRpb25GaWxsTW9kZU5vbmUpOwogICAgICAgICBicmVhazsKQEAgLTQxNSwxNCAr
NDE1LDE0IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQo
QW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0g
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVJbmZpbml0ZSkK
KyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgp
ID09IENTU1ZhbHVlSW5maW5pdGUpCiAgICAgICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291
bnQoQW5pbWF0aW9uOjpJdGVyYXRpb25Db3VudEluZmluaXRlKTsKICAgICBlbHNlCi0gICAgICAg
IGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFs
dWUoKSk7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQocHJpbWl0aXZlVmFs
dWUuZ2V0RmxvYXRWYWx1ZSgpKTsKIH0KIAogdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRp
b25OYW1lKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKQEAgLTQzMiwxNCArNDMy
LDE0IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uTmFtZShBbmltYXRpb24qIGxh
eWVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgaWYgKHByaW1p
dGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKQorICAgIENTU1ByaW1pdGl2
ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25l
KQogICAgICAgICBsYXllci0+c2V0SXNOb25lQW5pbWF0aW9uKHRydWUpOwogICAgIGVsc2UKLSAg
ICAgICAgbGF5ZXItPnNldE5hbWUocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwor
ICAgICAgICBsYXllci0+c2V0TmFtZShwcmltaXRpdmVWYWx1ZS5nZXRTdHJpbmdWYWx1ZSgpKTsK
IH0KIAogdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25QbGF5U3RhdGUoQW5pbWF0aW9u
KiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQpAQCAtNDQ5LDExICs0NDksMTEgQEAgdm9pZCBDU1NU
b1N0eWxlTWFwOjptYXBBbmltYXRpb25QbGF5U3RhdGUoQW5pbWF0aW9uKiBsYXllciwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIEVBbmltUGxheVN0YXRlIHBsYXlT
dGF0ZSA9IChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlUGF1c2VkKSA/
IEFuaW1QbGF5U3RhdGVQYXVzZWQgOiBBbmltUGxheVN0YXRlUGxheWluZzsKKyAgICBDU1NQcmlt
aXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
KnZhbHVlKTsKKyAgICBFQW5pbVBsYXlTdGF0ZSBwbGF5U3RhdGUgPSAocHJpbWl0aXZlVmFsdWUu
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlUGF1c2VkKSA/IEFuaW1QbGF5U3RhdGVQYXVzZWQgOiBB
bmltUGxheVN0YXRlUGxheWluZzsKICAgICBsYXllci0+c2V0UGxheVN0YXRlKHBsYXlTdGF0ZSk7
CiB9CiAKQEAgLTQ2NSwxOSArNDY1LDE5IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0
aW9uUHJvcGVydHkoQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkK
KyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2
ZVZhbHVlKHZhbHVlKTsKLSAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBD
U1NWYWx1ZUFsbCkgeworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGlmIChwcmltaXRpdmVWYWx1
ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVBbGwpIHsKICAgICAgICAgYW5pbWF0aW9uLT5zZXRB
bmltYXRpb25Nb2RlKEFuaW1hdGlvbjo6QW5pbWF0ZUFsbCk7CiAgICAgICAgIGFuaW1hdGlvbi0+
c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJbnZhbGlkKTsKLSAgICB9IGVsc2UgaWYgKHByaW1pdGl2
ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKSB7CisgICAgfSBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKSB7CiAgICAgICAgIGFu
aW1hdGlvbi0+c2V0QW5pbWF0aW9uTW9kZShBbmltYXRpb246OkFuaW1hdGVOb25lKTsKICAgICAg
ICAgYW5pbWF0aW9uLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUludmFsaWQpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uTW9kZShBbmltYXRpb246OkFuaW1h
dGVTaW5nbGVQcm9wZXJ0eSk7Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0UHJvcGVydHkocHJpbWl0
aXZlVmFsdWUtPmdldFByb3BlcnR5SUQoKSk7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0UHJvcGVy
dHkocHJpbWl0aXZlVmFsdWUuZ2V0UHJvcGVydHlJRCgpKTsKICAgICB9CiB9CiAKQEAgLTQ4OCw5
ICs0ODgsOSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9u
KEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdgogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7
Ci0gICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSkgeworICAgIGlm
IChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KTsKKyAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAgICAg
ICAgY2FzZSBDU1NWYWx1ZUxpbmVhcjoKICAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5n
RnVuY3Rpb24oTGluZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtNTE4LDIzICs1MTgsMjMgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRp
b25UaW1pbmdGdW5jdGlvbihBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHYKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICh2YWx1ZS0+aXNDdWJpY0JlemllclRpbWluZ0Z1
bmN0aW9uVmFsdWUoKSkgewotICAgICAgICBDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFs
dWUqIGN1YmljVGltaW5nRnVuY3Rpb24gPSB0b0NTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25W
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oQ3ViaWNC
ZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKGN1YmljVGltaW5nRnVuY3Rpb24tPngxKCksIGN1
YmljVGltaW5nRnVuY3Rpb24tPnkxKCksIGN1YmljVGltaW5nRnVuY3Rpb24tPngyKCksIGN1Ymlj
VGltaW5nRnVuY3Rpb24tPnkyKCkpKTsKLSAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc1N0ZXBzVGlt
aW5nRnVuY3Rpb25WYWx1ZSgpKSB7Ci0gICAgICAgIENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1
ZSogc3RlcHNUaW1pbmdGdW5jdGlvbiA9IHRvQ1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlKHZh
bHVlKTsKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihTdGVwc1RpbWluZ0Z1
bmN0aW9uOjpjcmVhdGUoc3RlcHNUaW1pbmdGdW5jdGlvbi0+bnVtYmVyT2ZTdGVwcygpLCBzdGVw
c1RpbWluZ0Z1bmN0aW9uLT5zdGVwQXRTdGFydCgpKSk7CisgICAgaWYgKGlzPENTU0N1YmljQmV6
aWVyVGltaW5nRnVuY3Rpb25WYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICBDU1NDdWJpY0Jlemll
clRpbWluZ0Z1bmN0aW9uVmFsdWUmIGN1YmljVGltaW5nRnVuY3Rpb24gPSBkb3duY2FzdDxDU1ND
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWU+KCp2YWx1ZSk7CisgICAgICAgIGFuaW1hdGlv
bi0+c2V0VGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKGN1
YmljVGltaW5nRnVuY3Rpb24ueDEoKSwgY3ViaWNUaW1pbmdGdW5jdGlvbi55MSgpLCBjdWJpY1Rp
bWluZ0Z1bmN0aW9uLngyKCksIGN1YmljVGltaW5nRnVuY3Rpb24ueTIoKSkpOworICAgIH0gZWxz
ZSBpZiAoaXM8Q1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlPigqdmFsdWUpKSB7CisgICAgICAg
IENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZSYgc3RlcHNUaW1pbmdGdW5jdGlvbiA9IGRvd25j
YXN0PENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgYW5pbWF0
aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihTdGVwc1RpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoc3RlcHNU
aW1pbmdGdW5jdGlvbi5udW1iZXJPZlN0ZXBzKCksIHN0ZXBzVGltaW5nRnVuY3Rpb24uc3RlcEF0
U3RhcnQoKSkpOwogICAgIH0KIH0KIAogdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJ
bWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUlt
YWdlJiBpbWFnZSkKIHsKICAgICAvLyBJZiB3ZSdyZSBub3QgYSB2YWx1ZSBsaXN0LCB0aGVuIHdl
IGFyZSAibm9uZSIgYW5kIGRvbid0IG5lZWQgdG8gYWx0ZXIgdGhlIGVtcHR5IGltYWdlIGF0IGFs
bC4KLSAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICBpZiAoIWlz
PENTU1ZhbHVlTGlzdD4odmFsdWUpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBSZXRyaWV2
ZSB0aGUgYm9yZGVyIGltYWdlIHZhbHVlLgotICAgIENTU1ZhbHVlTGlzdCogYm9yZGVySW1hZ2Ug
PSB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSk7CisgICAgQ1NTVmFsdWVMaXN0JiBib3JkZXJJbWFnZSA9
IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKIAogICAgIC8vIFNldCB0aGUgaW1hZ2Ug
KHRoaXMga2lja3Mgb2ZmIHRoZSBsb2FkKS4KICAgICBDU1NQcm9wZXJ0eUlEIGltYWdlUHJvcGVy
dHk7CkBAIC01NDUsOCArNTQ1LDggQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJ
bWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUsIE4KICAgICBlbHNl
CiAgICAgICAgIGltYWdlUHJvcGVydHkgPSBwcm9wZXJ0eTsKIAotICAgIGZvciAodW5zaWduZWQg
aSA9IDAgOyBpIDwgYm9yZGVySW1hZ2UtPmxlbmd0aCgpIDsgKytpKSB7Ci0gICAgICAgIENTU1Zh
bHVlKiBjdXJyZW50ID0gYm9yZGVySW1hZ2UtPml0ZW0oaSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMCA7IGkgPCBib3JkZXJJbWFnZS5sZW5ndGgoKSA7ICsraSkgeworICAgICAgICBDU1NWYWx1
ZSogY3VycmVudCA9IGJvcmRlckltYWdlLml0ZW0oaSk7CiAKICAgICAgICAgaWYgKGN1cnJlbnQt
PmlzSW1hZ2VWYWx1ZSgpIHx8IGN1cnJlbnQtPmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpCiAjaWYg
RU5BQkxFKENTU19JTUFHRV9TRVQpCkBAIC01NTYsMTkgKzU1NiwxOSBAQCB2b2lkIENTU1RvU3R5
bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVl
KiB2YWx1ZSwgTgogICAgICAgICAgICAgaW1hZ2Uuc2V0SW1hZ2Uoc3R5bGVJbWFnZShpbWFnZVBy
b3BlcnR5LCBjdXJyZW50KSk7CiAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnQtPmlzQm9yZGVySW1h
Z2VTbGljZVZhbHVlKCkpCiAgICAgICAgICAgICBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKGN1cnJl
bnQsIGltYWdlKTsKLSAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+aXNWYWx1ZUxpc3QoKSkgewot
ICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiBzbGFzaExpc3QgPSB0b0NTU1ZhbHVlTGlzdChjdXJy
ZW50KTsKKyAgICAgICAgZWxzZSBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqY3VycmVudCkpIHsKKyAg
ICAgICAgICAgIENTU1ZhbHVlTGlzdCYgc2xhc2hMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0
PigqY3VycmVudCk7CiAgICAgICAgICAgICAvLyBNYXAgaW4gdGhlIGltYWdlIHNsaWNlcy4KLSAg
ICAgICAgICAgIGlmIChzbGFzaExpc3QtPml0ZW0oMCkgJiYgc2xhc2hMaXN0LT5pdGVtKDApLT5p
c0JvcmRlckltYWdlU2xpY2VWYWx1ZSgpKQotICAgICAgICAgICAgICAgIG1hcE5pbmVQaWVjZUlt
YWdlU2xpY2Uoc2xhc2hMaXN0LT5pdGVtKDApLCBpbWFnZSk7CisgICAgICAgICAgICBpZiAoc2xh
c2hMaXN0Lml0ZW0oMCkgJiYgc2xhc2hMaXN0Lml0ZW0oMCktPmlzQm9yZGVySW1hZ2VTbGljZVZh
bHVlKCkpCisgICAgICAgICAgICAgICAgbWFwTmluZVBpZWNlSW1hZ2VTbGljZShzbGFzaExpc3Qu
aXRlbSgwKSwgaW1hZ2UpOwogCiAgICAgICAgICAgICAvLyBNYXAgaW4gdGhlIGJvcmRlciBzbGlj
ZXMuCi0gICAgICAgICAgICBpZiAoc2xhc2hMaXN0LT5pdGVtKDEpKQotICAgICAgICAgICAgICAg
IGltYWdlLnNldEJvcmRlclNsaWNlcyhtYXBOaW5lUGllY2VJbWFnZVF1YWQoc2xhc2hMaXN0LT5p
dGVtKDEpKSk7CisgICAgICAgICAgICBpZiAoc2xhc2hMaXN0Lml0ZW0oMSkpCisgICAgICAgICAg
ICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKG1hcE5pbmVQaWVjZUltYWdlUXVhZChzbGFzaExp
c3QuaXRlbSgxKSkpOwogCiAgICAgICAgICAgICAvLyBNYXAgaW4gdGhlIG91dHNldC4KLSAgICAg
ICAgICAgIGlmIChzbGFzaExpc3QtPml0ZW0oMikpCi0gICAgICAgICAgICAgICAgaW1hZ2Uuc2V0
T3V0c2V0KG1hcE5pbmVQaWVjZUltYWdlUXVhZChzbGFzaExpc3QtPml0ZW0oMikpKTsKKyAgICAg
ICAgICAgIGlmIChzbGFzaExpc3QuaXRlbSgyKSkKKyAgICAgICAgICAgICAgICBpbWFnZS5zZXRP
dXRzZXQobWFwTmluZVBpZWNlSW1hZ2VRdWFkKHNsYXNoTGlzdC5pdGVtKDIpKSk7CiAgICAgICAg
IH0gZWxzZSBpZiAoY3VycmVudC0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CiAgICAgICAgICAgICAv
LyBTZXQgdGhlIGFwcHJvcHJpYXRlIHJ1bGVzIGZvciBzdHJldGNoL3JvdW5kL3JlcGVhdCBvZiB0
aGUgc2xpY2VzLgogICAgICAgICAgICAgbWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQoY3VycmVudCwg
aW1hZ2UpOwpAQCAtNTkyLDE1ICs1OTIsMTUgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5l
UGllY2VJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUsIE4KIAog
dm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVNsaWNlKENTU1ZhbHVlKiB2YWx1
ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQogewotICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5p
c0JvcmRlckltYWdlU2xpY2VWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTQm9yZGVySW1hZ2VTbGlj
ZVZhbHVlPih2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFJldHJpZXZlIHRoZSBi
b3JkZXIgaW1hZ2UgdmFsdWUuCi0gICAgQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlKiBib3JkZXJJ
bWFnZVNsaWNlID0gdG9DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUodmFsdWUpOworICAgIENTU0Jv
cmRlckltYWdlU2xpY2VWYWx1ZSYgYm9yZGVySW1hZ2VTbGljZSA9IGRvd25jYXN0PENTU0JvcmRl
ckltYWdlU2xpY2VWYWx1ZT4oKnZhbHVlKTsKIAogICAgIC8vIFNldCB1cCBhIGxlbmd0aCBib3gg
dG8gcmVwcmVzZW50IG91ciBpbWFnZSBzbGljZXMuCiAgICAgTGVuZ3RoQm94IGJveDsKLSAgICBR
dWFkKiBzbGljZXMgPSBib3JkZXJJbWFnZVNsaWNlLT5zbGljZXMoKTsKKyAgICBRdWFkKiBzbGlj
ZXMgPSBib3JkZXJJbWFnZVNsaWNlLnNsaWNlcygpOwogICAgIGlmIChzbGljZXMtPnRvcCgpLT5p
c1BlcmNlbnRhZ2UoKSkKICAgICAgICAgYm94Lm1fdG9wID0gTGVuZ3RoKHNsaWNlcy0+dG9wKCkt
PmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwogICAgIGVsc2UKQEAgLTYyMCwyMyArNjIwLDIz
IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VTbGljZShDU1NWYWx1ZSog
dmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnCiAgICAgaW1hZ2Uuc2V0SW1hZ2VTbGljZXMoYm94
KTsKIAogICAgIC8vIFNldCBvdXIgZmlsbCBtb2RlLgotICAgIGltYWdlLnNldEZpbGwoYm9yZGVy
SW1hZ2VTbGljZS0+bV9maWxsKTsKKyAgICBpbWFnZS5zZXRGaWxsKGJvcmRlckltYWdlU2xpY2Uu
bV9maWxsKTsKIH0KIAogTGVuZ3RoQm94IENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdl
UXVhZChDU1NWYWx1ZSogdmFsdWUpCiB7Ci0gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCiAg
ICAgICAgIHJldHVybiBMZW5ndGhCb3goKTsKIAogICAgIC8vIEdldCBvdXIgem9vbSB2YWx1ZS4K
ICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhID0gdXNlU1ZHWm9v
bVJ1bGVzKCkgPyBtX3Jlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEo
KS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSA6IG1fcmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSgpOwogCiAgICAgLy8gUmV0cmlldmUgdGhlIHByaW1pdGl2ZSB2
YWx1ZS4KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogYm9yZGVyV2lkdGhzID0gdG9DU1NQcmltaXRp
dmVWYWx1ZSh2YWx1ZSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGJvcmRlcldpZHRocyA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogCiAgICAgLy8gU2V0IHVwIGEgbGVu
Z3RoIGJveCB0byByZXByZXNlbnQgb3VyIGltYWdlIHNsaWNlcy4KICAgICBMZW5ndGhCb3ggYm94
OyAvLyBEZWZhdWx0cyB0byAnYXV0bycgc28gd2UgZG9uJ3QgaGF2ZSB0byBoYW5kbGUgdGhhdCBl
eHBsaWNpdGx5IGJlbG93LgotICAgIFF1YWQqIHNsaWNlcyA9IGJvcmRlcldpZHRocy0+Z2V0UXVh
ZFZhbHVlKCk7CisgICAgUXVhZCogc2xpY2VzID0gYm9yZGVyV2lkdGhzLmdldFF1YWRWYWx1ZSgp
OwogICAgIGlmIChzbGljZXMtPnRvcCgpLT5pc051bWJlcigpKQogICAgICAgICBib3gubV90b3Ag
PSBMZW5ndGgoc2xpY2VzLT50b3AoKS0+Z2V0SW50VmFsdWUoKSwgUmVsYXRpdmUpOwogICAgIGVs
c2UgaWYgKHNsaWNlcy0+dG9wKCktPmlzUGVyY2VudGFnZSgpKQpAQCAtNjcwLDExICs2NzAsMTEg
QEAgTGVuZ3RoQm94IENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlUXVhZChDU1NWYWx1
ZSogdmFsdWUpCiAKIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQo
Q1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCiB7Ci0gICAgaWYgKCF2YWx1
ZSB8fCAhdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2
ZVZhbHVlPih2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIFBhaXIq
IHBhaXIgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UGFpclZhbHVlKCk7CisgICAgQ1NTUHJpbWl0aXZl
VmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSk7CisgICAgUGFpciogcGFpciA9IHByaW1pdGl2ZVZhbHVlLmdldFBhaXJWYWx1ZSgpOwogICAg
IGlmICghcGFpciB8fCAhcGFpci0+Zmlyc3QoKSB8fCAhcGFpci0+c2Vjb25kKCkpCiAgICAgICAg
IHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1VuaWNvZGVSYW5n
ZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVW5pY29kZVJhbmdlVmFsdWUuaAppbmRl
eCA1OWRhYzhlNWMwOTc3YjJjNjUxNGIxZGYyNzA2NDMxNjFkYTI5MjNjLi4wNmMxNzc0MDA4NzU1
YjYyNTZjYTQ0MzE4NDA2MjVhOWM4Nzk5NzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVW5pY29kZVJhbmdlVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVW5p
Y29kZVJhbmdlVmFsdWUuaApAQCAtNTcsOCArNTcsOCBAQCBwcml2YXRlOgogICAgIFVDaGFyMzIg
bV90bzsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU1VuaWNvZGVSYW5nZVZhbHVlLCBp
c1VuaWNvZGVSYW5nZVZhbHVlKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTVW5pY29kZVJhbmdlVmFsdWUsIGlzVW5pY29k
ZVJhbmdlVmFsdWUoKSkKKwogI2VuZGlmIC8vIENTU1VuaWNvZGVSYW5nZVZhbHVlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVmFsdWUuY3BwCmluZGV4IGFhY2Y2ODY4NTNkNWIyNWJhNTEwNzc4NTk2NjM5MzIwNGQy
MDU0ZTYuLmQwMjllYzE3ZWUyM2NiMjdmMmMwMGQyOTBkNzkzMTU4M2RkZTExYjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1ZhbHVlLmNwcApAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogCiBib29sIENTU1Zh
bHVlOjppc0ltcGxpY2l0SW5pdGlhbFZhbHVlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jbGFz
c1R5cGUgPT0gSW5pdGlhbENsYXNzICYmIHRvQ1NTSW5pdGlhbFZhbHVlKHRoaXMpLT5pc0ltcGxp
Y2l0KCk7CisgICAgcmV0dXJuIG1fY2xhc3NUeXBlID09IEluaXRpYWxDbGFzcyAmJiBkb3duY2Fz
dDxDU1NJbml0aWFsVmFsdWU+KCp0aGlzKS5pc0ltcGxpY2l0KCk7CiB9CiAKIENTU1ZhbHVlOjpU
eXBlIENTU1ZhbHVlOjpjc3NWYWx1ZVR5cGUoKSBjb25zdApAQCAtMTEyLDE0ICsxMTIsMTQgQEAg
dm9pZCBDU1NWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8VVJMPiYg
dXJscywgY29uc3QgU3R5bGVTaGVldEMKICAgICAvLyBUaGlzIHNob3VsZCBnZXQgY2FsbGVkIGZv
ciBpbnRlcm5hbCBpbnN0YW5jZXMgb25seS4KICAgICBBU1NFUlQoIWlzQ1NTT01TYWZlKCkpOwog
Ci0gICAgaWYgKGlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgdG9DU1NQcmltaXRpdmVWYWx1
ZSh0aGlzKS0+YWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJscywgc3R5bGVTaGVldCk7Ci0gICAg
ZWxzZSBpZiAoaXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgdG9DU1NWYWx1ZUxpc3QodGhpcyktPmFk
ZFN1YnJlc291cmNlU3R5bGVVUkxzKHVybHMsIHN0eWxlU2hlZXQpOwotICAgIGVsc2UgaWYgKGNs
YXNzVHlwZSgpID09IEZvbnRGYWNlU3JjQ2xhc3MpCi0gICAgICAgIHRvQ1NTRm9udEZhY2VTcmNW
YWx1ZSh0aGlzKS0+YWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJscywgc3R5bGVTaGVldCk7Ci0g
ICAgZWxzZSBpZiAoY2xhc3NUeXBlKCkgPT0gUmVmbGVjdENsYXNzKQotICAgICAgICB0b0NTU1Jl
ZmxlY3RWYWx1ZSh0aGlzKS0+YWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJscywgc3R5bGVTaGVl
dCk7CisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdGhpcykpCisgICAgICAgIGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdGhpcykuYWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJs
cywgc3R5bGVTaGVldCk7CisgICAgZWxzZSBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdGhpcykpCisg
ICAgICAgIGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnRoaXMpLmFkZFN1YnJlc291cmNlU3R5bGVV
UkxzKHVybHMsIHN0eWxlU2hlZXQpOworICAgIGVsc2UgaWYgKGlzPENTU0ZvbnRGYWNlU3JjVmFs
dWU+KCp0aGlzKSkKKyAgICAgICAgZG93bmNhc3Q8Q1NTRm9udEZhY2VTcmNWYWx1ZT4oKnRoaXMp
LmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKHVybHMsIHN0eWxlU2hlZXQpOworICAgIGVsc2UgaWYg
KGlzPENTU1JlZmxlY3RWYWx1ZT4oKnRoaXMpKQorICAgICAgICBkb3duY2FzdDxDU1NSZWZsZWN0
VmFsdWU+KCp0aGlzKS5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBzdHlsZVNoZWV0KTsK
IH0KIAogYm9vbCBDU1NWYWx1ZTo6aGFzRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcygpIGNv
bnN0CkBAIC0xMjcsMTkgKzEyNywxOSBAQCBib29sIENTU1ZhbHVlOjpoYXNGYWlsZWRPckNhbmNl
bGVkU3VicmVzb3VyY2VzKCkgY29uc3QKICAgICAvLyBUaGlzIHNob3VsZCBnZXQgY2FsbGVkIGZv
ciBpbnRlcm5hbCBpbnN0YW5jZXMgb25seS4KICAgICBBU1NFUlQoIWlzQ1NTT01TYWZlKCkpOwog
Ci0gICAgaWYgKGlzVmFsdWVMaXN0KCkpCi0gICAgICAgIHJldHVybiB0b0NTU1ZhbHVlTGlzdCh0
aGlzKS0+aGFzRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcygpOwotICAgIGlmIChjbGFzc1R5
cGUoKSA9PSBGb250RmFjZVNyY0NsYXNzKQotICAgICAgICByZXR1cm4gdG9DU1NGb250RmFjZVNy
Y1ZhbHVlKHRoaXMpLT5oYXNGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKCk7Ci0gICAgaWYg
KGNsYXNzVHlwZSgpID09IEltYWdlQ2xhc3MpCi0gICAgICAgIHJldHVybiB0b0NTU0ltYWdlVmFs
dWUodGhpcyktPmhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoKTsKLSAgICBpZiAoY2xh
c3NUeXBlKCkgPT0gQ3Jvc3NmYWRlQ2xhc3MpCi0gICAgICAgIHJldHVybiB0b0NTU0Nyb3NzZmFk
ZVZhbHVlKHRoaXMpLT5oYXNGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKCk7Ci0gICAgaWYg
KGNsYXNzVHlwZSgpID09IEZpbHRlckltYWdlQ2xhc3MpCi0gICAgICAgIHJldHVybiB0b0NTU0Zp
bHRlckltYWdlVmFsdWUodGhpcyktPmhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoKTsK
KyAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdGhpcykpCisgICAgICAgIHJldHVybiBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KCp0aGlzKS5oYXNGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKCk7
CisgICAgaWYgKGlzPENTU0ZvbnRGYWNlU3JjVmFsdWU+KCp0aGlzKSkKKyAgICAgICAgcmV0dXJu
IGRvd25jYXN0PENTU0ZvbnRGYWNlU3JjVmFsdWU+KCp0aGlzKS5oYXNGYWlsZWRPckNhbmNlbGVk
U3VicmVzb3VyY2VzKCk7CisgICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KCp0aGlzKSkKKyAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KCp0aGlzKS5oYXNGYWlsZWRPckNhbmNl
bGVkU3VicmVzb3VyY2VzKCk7CisgICAgaWYgKGlzPENTU0Nyb3NzZmFkZVZhbHVlPigqdGhpcykp
CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDcm9zc2ZhZGVWYWx1ZT4oKnRoaXMpLmhhc0Zh
aWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoKTsKKyAgICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VW
YWx1ZT4oKnRoaXMpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1
ZT4oKnRoaXMpLmhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoKTsKICNpZiBFTkFCTEUo
Q1NTX0lNQUdFX1NFVCkKLSAgICBpZiAoY2xhc3NUeXBlKCkgPT0gSW1hZ2VTZXRDbGFzcykKLSAg
ICAgICAgcmV0dXJuIHRvQ1NTSW1hZ2VTZXRWYWx1ZSh0aGlzKS0+aGFzRmFpbGVkT3JDYW5jZWxl
ZFN1YnJlc291cmNlcygpOworICAgIGlmIChpczxDU1NJbWFnZVNldFZhbHVlPigqdGhpcykpCisg
ICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPigqdGhpcykuaGFzRmFpbGVk
T3JDYW5jZWxlZFN1YnJlc291cmNlcygpOwogI2VuZGlmCiAgICAgcmV0dXJuIGZhbHNlOwogfQpA
QCAtMjI5LDkgKzIyOSw5IEBAIGJvb2wgQ1NTVmFsdWU6OmVxdWFscyhjb25zdCBDU1NWYWx1ZSYg
b3RoZXIpIGNvbnN0CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9jbGFzc1R5cGUg
PT0gVmFsdWVMaXN0Q2xhc3MgJiYgb3RoZXIubV9jbGFzc1R5cGUgIT0gVmFsdWVMaXN0Q2xhc3Mp
Ci0gICAgICAgIHJldHVybiB0b0NTU1ZhbHVlTGlzdCh0aGlzKS0+ZXF1YWxzKG90aGVyKTsKLSAg
ICBlbHNlIGlmIChtX2NsYXNzVHlwZSAhPSBWYWx1ZUxpc3RDbGFzcyAmJiBvdGhlci5tX2NsYXNz
VHlwZSA9PSBWYWx1ZUxpc3RDbGFzcykKKyAgICB9IGVsc2UgaWYgKGlzPENTU1ZhbHVlTGlzdD4o
KnRoaXMpICYmICFpczxDU1NWYWx1ZUxpc3Q+KG90aGVyKSkKKyAgICAgICAgcmV0dXJuIGRvd25j
YXN0PENTU1ZhbHVlTGlzdD4oKnRoaXMpLmVxdWFscyhvdGhlcik7CisgICAgZWxzZSBpZiAoIWlz
PENTU1ZhbHVlTGlzdD4oKnRoaXMpICYmIGlzPENTU1ZhbHVlTGlzdD4ob3RoZXIpKQogICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTVmFsdWVMaXN0Jj4ob3RoZXIpLmVxdWFscygq
dGhpcyk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjQ2LDcxICsyNDYsNzEgQEAgU3RyaW5n
IENTU1ZhbHVlOjpjc3NUZXh0KCkgY29uc3QKIAogICAgIHN3aXRjaCAoY2xhc3NUeXBlKCkpIHsK
ICAgICBjYXNlIEFzcGVjdFJhdGlvQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0FzcGVjdFJh
dGlvVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENTU0FzcGVjdFJhdGlvVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBC
b3JkZXJJbWFnZVNsaWNlQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0JvcmRlckltYWdlU2xp
Y2VWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNh
c2UgQ2FudmFzQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0NhbnZhc1ZhbHVlKHRoaXMpLT5j
dXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDYW52YXNWYWx1ZT4o
KnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIEN1cnNvckltYWdlQ2xhc3M6Ci0gICAg
ICAgIHJldHVybiB0b0NTU0N1cnNvckltYWdlVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0N1cnNvckltYWdlVmFsdWU+KCp0aGlzKS5jdXN0
b21DU1NUZXh0KCk7CiAgICAgY2FzZSBGaWx0ZXJJbWFnZUNsYXNzOgotICAgICAgICByZXR1cm4g
dG9DU1NGaWx0ZXJJbWFnZVZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgp
OwogICAgIGNhc2UgRm9udENsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NGb250VmFsdWUodGhp
cyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ZvbnRWYWx1
ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIEZvbnRGYWNlU3JjQ2xhc3M6Ci0g
ICAgICAgIHJldHVybiB0b0NTU0ZvbnRGYWNlU3JjVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQo
KTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ZvbnRGYWNlU3JjVmFsdWU+KCp0aGlzKS5j
dXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBGb250RmVhdHVyZUNsYXNzOgotICAgICAgICByZXR1
cm4gdG9DU1NGb250RmVhdHVyZVZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAg
IHJldHVybiBkb3duY2FzdDxDU1NGb250RmVhdHVyZVZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4
dCgpOwogICAgIGNhc2UgRnVuY3Rpb25DbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTRnVuY3Rp
b25WYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q1NTRnVuY3Rpb25WYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIExpbmVh
ckdyYWRpZW50Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0xpbmVhckdyYWRpZW50VmFsdWUo
dGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0xpbmVh
ckdyYWRpZW50VmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBSYWRpYWxH
cmFkaWVudENsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NSYWRpYWxHcmFkaWVudFZhbHVlKHRo
aXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NSYWRpYWxH
cmFkaWVudFZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgQ3Jvc3NmYWRl
Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0Nyb3NzZmFkZVZhbHVlKHRoaXMpLT5jdXN0b21D
U1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDcm9zc2ZhZGVWYWx1ZT4oKnRo
aXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIEltYWdlQ2xhc3M6Ci0gICAgICAgIHJldHVy
biB0b0NTU0ltYWdlVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJu
IGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2Fz
ZSBJbmhlcml0ZWRDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTSW5oZXJpdGVkVmFsdWUodGhp
cyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0luaGVyaXRl
ZFZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgSW5pdGlhbENsYXNzOgot
ICAgICAgICByZXR1cm4gdG9DU1NJbml0aWFsVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0luaXRpYWxWYWx1ZT4oKnRoaXMpLmN1c3RvbUNT
U1RleHQoKTsKICNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQogICAgIGNhc2UgR3JpZExpbmVO
YW1lc0NsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NHcmlkTGluZU5hbWVzVmFsdWUodGhpcykt
PmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0dyaWRMaW5lTmFt
ZXNWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIEdyaWRUZW1wbGF0ZUFy
ZWFzQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUodGhp
cyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0dyaWRUZW1w
bGF0ZUFyZWFzVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAjZW5kaWYKICAgICBjYXNl
IFByaW1pdGl2ZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NQcmltaXRpdmVWYWx1ZSh0aGlz
KS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBSZWZsZWN0Q2xhc3M6Ci0g
ICAgICAgIHJldHVybiB0b0NTU1JlZmxlY3RWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOwor
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUmVmbGVjdFZhbHVlPigqdGhpcykuY3VzdG9tQ1NT
VGV4dCgpOwogICAgIGNhc2UgU2hhZG93Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU1NoYWRv
d1ZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxD
U1NTaGFkb3dWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIEN1YmljQmV6
aWVyVGltaW5nRnVuY3Rpb25DbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTQ3ViaWNCZXppZXJU
aW1pbmdGdW5jdGlvblZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVy
biBkb3duY2FzdDxDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWU+KCp0aGlzKS5jdXN0
b21DU1NUZXh0KCk7CiAgICAgY2FzZSBTdGVwc1RpbWluZ0Z1bmN0aW9uQ2xhc3M6Ci0gICAgICAg
IHJldHVybiB0b0NTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4
dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVl
PigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgVW5pY29kZVJhbmdlQ2xhc3M6Ci0g
ICAgICAgIHJldHVybiB0b0NTU1VuaWNvZGVSYW5nZVZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0
KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NVbmljb2RlUmFuZ2VWYWx1ZT4oKnRoaXMp
LmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIFZhbHVlTGlzdENsYXNzOgotICAgICAgICByZXR1
cm4gdG9DU1NWYWx1ZUxpc3QodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJu
IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNl
IFdlYktpdENTU1RyYW5zZm9ybUNsYXNzOgotICAgICAgICByZXR1cm4gdG9XZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNh
c3Q8V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAg
Y2FzZSBMaW5lQm94Q29udGFpbkNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NMaW5lQm94Q29u
dGFpblZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2Fz
dDxDU1NMaW5lQm94Q29udGFpblZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNh
c2UgQ2FsY3VsYXRpb25DbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTQ2FsY1ZhbHVlKHRoaXMp
LT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDYWxjVmFsdWU+
KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCiAgICAg
Y2FzZSBJbWFnZVNldENsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NJbWFnZVNldFZhbHVlKHRo
aXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVNl
dFZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogI2VuZGlmCiAgICAgY2FzZSBXZWJLaXRD
U1NGaWx0ZXJDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvV2ViS2l0Q1NTRmlsdGVyVmFsdWUodGhp
cyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFdlYktpdENTU0Zp
bHRlclZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgU1ZHQ29sb3JDbGFz
czoKLSAgICAgICAgcmV0dXJuIHRvU1ZHQ29sb3IodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PFNWR0NvbG9yPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwog
ICAgIGNhc2UgU1ZHUGFpbnRDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvU1ZHUGFpbnQodGhpcykt
PmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFNWR1BhaW50PigqdGhp
cykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICByZXR1cm4gU3RyaW5nKCk7CkBAIC0zMjcsMTAxICszMjcsMTAxIEBAIHZvaWQgQ1NTVmFsdWU6
OmRlc3Ryb3koKQogCiAgICAgc3dpdGNoIChjbGFzc1R5cGUoKSkgewogICAgIGNhc2UgQXNwZWN0
UmF0aW9DbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTQXNwZWN0UmF0aW9WYWx1ZSh0aGlzKTsK
KyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENTU0FzcGVjdFJhdGlvVmFsdWU+KHRoaXMpOwogICAg
ICAgICByZXR1cm47CiAgICAgY2FzZSBCb3JkZXJJbWFnZVNsaWNlQ2xhc3M6Ci0gICAgICAgIGRl
bGV0ZSB0b0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRv
d25jYXN0PENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsK
ICAgICBjYXNlIENhbnZhc0NsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NDYW52YXNWYWx1ZSh0
aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENTU0NhbnZhc1ZhbHVlPih0aGlzKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ3Vyc29ySW1hZ2VDbGFzczoKLSAgICAgICAgZGVsZXRl
IHRvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENT
U0N1cnNvckltYWdlVmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBGb250
Q2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0ZvbnRWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVs
ZXRlIGRvd25jYXN0PENTU0ZvbnRWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBj
YXNlIEZvbnRGYWNlU3JjQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0ZvbnRGYWNlU3JjVmFs
dWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NGb250RmFjZVNyY1ZhbHVlPih0
aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgRm9udEZlYXR1cmVDbGFzczoKLSAgICAg
ICAgZGVsZXRlIHRvQ1NTRm9udEZlYXR1cmVWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRv
d25jYXN0PENTU0ZvbnRGZWF0dXJlVmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBGdW5jdGlvbkNsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NGdW5jdGlvblZhbHVlKHRo
aXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTRnVuY3Rpb25WYWx1ZT4odGhpcyk7CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIExpbmVhckdyYWRpZW50Q2xhc3M6Ci0gICAgICAgIGRl
bGV0ZSB0b0NTU0xpbmVhckdyYWRpZW50VmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3du
Y2FzdDxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgUmFkaWFsR3JhZGllbnRDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTUmFkaWFsR3Jh
ZGllbnRWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENTU1JhZGlhbEdyYWRp
ZW50VmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDcm9zc2ZhZGVDbGFz
czoKLSAgICAgICAgZGVsZXRlIHRvQ1NTQ3Jvc3NmYWRlVmFsdWUodGhpcyk7CisgICAgICAgIGRl
bGV0ZSBkb3duY2FzdDxDU1NDcm9zc2ZhZGVWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsK
ICAgICBjYXNlIEltYWdlQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0ltYWdlVmFsdWUodGhp
cyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPih0aGlzKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgSW5oZXJpdGVkQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NT
U0luaGVyaXRlZFZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTSW5oZXJp
dGVkVmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJbml0aWFsQ2xhc3M6
Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0luaXRpYWxWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRl
IGRvd25jYXN0PENTU0luaXRpYWxWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICNpZiBF
TkFCTEUoQ1NTX0dSSURfTEFZT1VUKQogICAgIGNhc2UgR3JpZExpbmVOYW1lc0NsYXNzOgotICAg
ICAgICBkZWxldGUgdG9DU1NHcmlkTGluZU5hbWVzVmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0
ZSBkb3duY2FzdDxDU1NHcmlkTGluZU5hbWVzVmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBHcmlkVGVtcGxhdGVBcmVhc0NsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NH
cmlkVGVtcGxhdGVBcmVhc1ZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NT
R3JpZFRlbXBsYXRlQXJlYXNWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICNlbmRpZgog
ICAgIGNhc2UgUHJpbWl0aXZlQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHRo
aXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBSZWZsZWN0Q2xhc3M6Ci0gICAgICAgIGRl
bGV0ZSB0b0NTU1JlZmxlY3RWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENT
U1JlZmxlY3RWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNoYWRvd0Ns
YXNzOgotICAgICAgICBkZWxldGUgdG9DU1NTaGFkb3dWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVs
ZXRlIGRvd25jYXN0PENTU1NoYWRvd1ZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbkNsYXNzOgotICAgICAgICBkZWxldGUgdG9D
U1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBk
b3duY2FzdDxDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWU+KHRoaXMpOwogICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBTdGVwc1RpbWluZ0Z1bmN0aW9uQ2xhc3M6Ci0gICAgICAgIGRl
bGV0ZSB0b0NTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRl
IGRvd25jYXN0PENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZT4odGhpcyk7CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIFVuaWNvZGVSYW5nZUNsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NV
bmljb2RlUmFuZ2VWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENTU1VuaWNv
ZGVSYW5nZVZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVmFsdWVMaXN0
Q2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU1ZhbHVlTGlzdCh0aGlzKTsKKyAgICAgICAgZGVs
ZXRlIGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBj
YXNlIFdlYktpdENTU1RyYW5zZm9ybUNsYXNzOgotICAgICAgICBkZWxldGUgdG9XZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgTGluZUJveENv
bnRhaW5DbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTTGluZUJveENvbnRhaW5WYWx1ZSh0aGlz
KTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENTU0xpbmVCb3hDb250YWluVmFsdWU+KHRoaXMp
OwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDYWxjdWxhdGlvbkNsYXNzOgotICAgICAgICBk
ZWxldGUgdG9DU1NDYWxjVmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1ND
YWxjVmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAjaWYgRU5BQkxFKENTU19JTUFHRV9T
RVQpCiAgICAgY2FzZSBJbWFnZVNldENsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NJbWFnZVNl
dFZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4o
dGhpcyk7CiAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgIGNhc2UgRmlsdGVySW1hZ2VDbGFz
czoKLSAgICAgICAgZGVsZXRlIHRvQ1NTRmlsdGVySW1hZ2VWYWx1ZSh0aGlzKTsKKyAgICAgICAg
ZGVsZXRlIGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvV2Vi
S2l0Q1NTRmlsdGVyVmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxXZWJLaXRD
U1NGaWx0ZXJWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNWR0NvbG9y
Q2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b1NWR0NvbG9yKHRoaXMpOworICAgICAgICBkZWxldGUg
ZG93bmNhc3Q8U1ZHQ29sb3I+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTVkdQ
YWludENsYXNzOgotICAgICAgICBkZWxldGUgdG9TVkdQYWludCh0aGlzKTsKKyAgICAgICAgZGVs
ZXRlIGRvd25jYXN0PFNWR1BhaW50Pih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQzMSwyNCArNDMxLDI0IEBAIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IENTU1ZhbHVlOjpjbG9uZUZvckNTU09NKCkgY29uc3QKIHsKICAgICBzd2l0Y2gg
KGNsYXNzVHlwZSgpKSB7CiAgICAgY2FzZSBQcmltaXRpdmVDbGFzczoKLSAgICAgICAgcmV0dXJu
IHRvQ1NTUHJpbWl0aXZlVmFsdWUodGhpcyktPmNsb25lRm9yQ1NTT00oKTsKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdGhpcykuY2xvbmVGb3JDU1NPTSgpOwog
ICAgIGNhc2UgVmFsdWVMaXN0Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU1ZhbHVlTGlzdCh0
aGlzKS0+Y2xvbmVGb3JDU1NPTSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTVmFsdWVM
aXN0PigqdGhpcykuY2xvbmVGb3JDU1NPTSgpOwogICAgIGNhc2UgSW1hZ2VDbGFzczoKICAgICBj
YXNlIEN1cnNvckltYWdlQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0ltYWdlVmFsdWUodGhp
cyktPmNsb25lRm9yQ1NTT00oKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ltYWdlVmFs
dWU+KCp0aGlzKS5jbG9uZUZvckNTU09NKCk7CiAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJDbGFz
czoKLSAgICAgICAgcmV0dXJuIHRvV2ViS2l0Q1NTRmlsdGVyVmFsdWUodGhpcyktPmNsb25lRm9y
Q1NTT00oKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFdlYktpdENTU0ZpbHRlclZhbHVlPigq
dGhpcykuY2xvbmVGb3JDU1NPTSgpOwogICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtQ2xhc3M6
Ci0gICAgICAgIHJldHVybiB0b1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKHRoaXMpLT5jbG9uZUZv
ckNTU09NKCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZT4oKnRoaXMpLmNsb25lRm9yQ1NTT00oKTsKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKICAg
ICBjYXNlIEltYWdlU2V0Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0ltYWdlU2V0VmFsdWUo
dGhpcyktPmNsb25lRm9yQ1NTT00oKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ltYWdl
U2V0VmFsdWU+KCp0aGlzKS5jbG9uZUZvckNTU09NKCk7CiAjZW5kaWYKICAgICBjYXNlIFNWR0Nv
bG9yQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b1NWR0NvbG9yKHRoaXMpLT5jbG9uZUZvckNTU09N
KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxTVkdDb2xvcj4oKnRoaXMpLmNsb25lRm9yQ1NT
T00oKTsKICAgICBjYXNlIFNWR1BhaW50Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b1NWR1BhaW50
KHRoaXMpLT5jbG9uZUZvckNTU09NKCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxTVkdQYWlu
dD4oKnRoaXMpLmNsb25lRm9yQ1NTT00oKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlQo
IWlzU3VidHlwZUV4cG9zZWRUb0NTU09NKCkpOwogICAgICAgICByZXR1cm4gVGV4dENsb25lQ1NT
VmFsdWU6OmNyZWF0ZShjbGFzc1R5cGUoKSwgY3NzVGV4dCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmgK
aW5kZXggODA0MTNmODgyMGE3Zjc2ZDJiYzRlZTIzYjI4YTFjYzI0NDRmYzM3MS4uMGU4MTZjMjJk
M2JhMmNiYWI1ZjA0YjdhZTI4NmUwZTNmOWQ1YmJlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1ZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmgKQEAg
LTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VHlwZUNhc3RzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMjQ5LDkgKzI1MCwxMSBA
QCBpbmxpbmUgYm9vbCBjb21wYXJlQ1NTVmFsdWUoY29uc3QgUmVmPENTU1ZhbHVlVHlwZT4mIGZp
cnN0LCBjb25zdCBSZWY8Q1NTVmFsdWVUeQogICAgIHJldHVybiBmaXJzdC5nZXQoKS5lcXVhbHMo
c2Vjb25kLmdldCgpKTsKIH0KIAotI2RlZmluZSBDU1NfVkFMVUVfVFlQRV9DQVNUUyhUb1ZhbHVl
VHlwZU5hbWUsIHByZWRpY2F0ZSkgXAotICAgIFRZUEVfQ0FTVFNfQkFTRShUb1ZhbHVlVHlwZU5h
bWUsIENTU1ZhbHVlLCB2YWx1ZSwgdmFsdWUtPnByZWRpY2F0ZSwgdmFsdWUucHJlZGljYXRlKQot
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19DU1NfVkFMVUUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJv
b2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkNTU1ZhbHVlJiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUu
cHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwogI2VuZGlmIC8v
IENTU1ZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaAppbmRleCAwMTI3OTI0YmU0ZjFk
YmVkNzIxY2U4NjBhYTIyNmY0NmVkZWMxZGZjLi5hOWNlYTI5NDE3NzZiN2IyOWUwZjFiMjIwZDNh
MDM1ZTYwZjhmNGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCkBAIC04MSw4ICs4MSw2
IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZjxDU1NWYWx1ZT4sIDQ+IG1fdmFsdWVzOwogfTsK
IAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTVmFsdWVMaXN0LCBpc1ZhbHVlTGlzdCgpKQotCiBp
bmxpbmUgdm9pZCBDU1NWYWx1ZUxpc3Q6OmFwcGVuZChQYXNzUmVmPENTU1ZhbHVlPiB2YWx1ZSkK
IHsKICAgICBtX3ZhbHVlcy5hcHBlbmQoV1RGOjptb3ZlKHZhbHVlKSk7CkBAIC05Nyw3ICs5NSwx
MCBAQCBpbmxpbmUgdm9pZCBDU1NWYWx1ZUxpc3Q6OnByZXBlbmQoUGFzc1JlZjxDU1NWYWx1ZT4g
dmFsdWUpCiAvLyBQbGVhc2UgdGFrZSBjYXJlIG5vdCB0byBwYXNzIHRoZXNlIGFyb3VuZCBhcyB0
aGV5IGRvIGhvbGQgb250byBhIHJhdyBwb2ludGVyLgogY2xhc3MgQ1NTVmFsdWVMaXN0SW5zcGVj
dG9yIHsKIHB1YmxpYzoKLSAgICBDU1NWYWx1ZUxpc3RJbnNwZWN0b3IoQ1NTVmFsdWUqIHZhbHVl
KSA6IG1fbGlzdCgodmFsdWUgJiYgdmFsdWUtPmlzVmFsdWVMaXN0KCkpID8gdG9DU1NWYWx1ZUxp
c3QodmFsdWUpIDogMCkgeyB9CisgICAgQ1NTVmFsdWVMaXN0SW5zcGVjdG9yKENTU1ZhbHVlKiB2
YWx1ZSkKKyAgICAgICAgOiBtX2xpc3QoaXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkgPyBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSA6IG51bGxwdHIpCisgICAgeyB9CisKICAgICBDU1NWYWx1
ZSogaXRlbShzaXplX3QgaW5kZXgpIGNvbnN0IHsgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oaW5kZXggPCBsZW5ndGgoKSk7IHJldHVybiBtX2xpc3QtPml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soaW5kZXgpOyB9CiAgICAgQ1NTVmFsdWUqIGZpcnN0KCkgY29uc3QgeyByZXR1cm4gaXRl
bSgwKTsgfQogICAgIENTU1ZhbHVlKiBzZWNvbmQoKSBjb25zdCB7IHJldHVybiBpdGVtKDEpOyB9
CkBAIC0xMjMsNCArMTI0LDYgQEAgcHJpdmF0ZToKIH07CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU1ZhbHVlTGlzdCwgaXNWYWx1
ZUxpc3QoKSkKKwogI2VuZGlmIC8vIENTU1ZhbHVlTGlzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAKaW5kZXggYjJmZjdiMWFmZTY4YjY3MzEwYWMz
MDUzMWRlZGQ2ZTg5MTEzY2JlNi4uNTE4NWUwMGJkNjZlMDIwOWFiNzZkMTFlNGE4ZTY3OWYzZTdm
YmVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNw
cApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNTU0FzcGVjdFJhdGlvVmFsdWUuaCIKICNp
bmNsdWRlICJDU1NDYWxjdWxhdGlvblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTQ3Vyc29ySW1hZ2VW
YWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltYWdlU2V0VmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmlt
aXRpdmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKICNp
bmNsdWRlICJDU1NUb1N0eWxlTWFwLmgiCkBAIC0xNDksOCArMTUwLDggQEAgcHVibGljOgogICAg
IHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgU2V0dGVyVHlwZSB2YWx1
ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9CiAgICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFs
dWUoKSkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksICp0b0NT
U1ByaW1pdGl2ZVZhbHVlKHZhbHVlKSk7CisgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKSkKKyAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCks
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKTsKICAgICB9CiAgICAgc3RhdGlj
IFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xNjUsMTQgKzE2Niwx
NCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxl
LCBOdW1iZXJUeXBlIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0K
ICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gaWRNYXBzVG9NaW51c09uZSkK
KyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRW
YWx1ZUlEKCkgPT0gaWRNYXBzVG9NaW51c09uZSkKICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCksIC0xKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlPE51bWJl
clR5cGU+KENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgICAgICBzZXRW
YWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZTxOdW1i
ZXJUeXBlPihDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwogICAgIH0KICAgICBzdGF0
aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTIxMywxNiArMjE0
LDE2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsK
LSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWlz
PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFs
dWUodmFsdWUpOwotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBh
dXRvSWRlbnRpdHkpCisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IGF1dG9JZGVudGl0eSkKICAgICAgICAgICAgIHNldEF1
dG8oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSk7CiAgICAgICAgIGVsc2UgaWYgKHZhbHVlVHlwZSA9
PSBOdW1iZXIpCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAq
cHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICBlbHNlIGlmICh2YWx1ZVR5cGUgPT0gQ29t
cHV0ZUxlbmd0aCkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCks
IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0eWxlUmVzb2x2ZXItPnN0YXRlKCku
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPFQ+KHN0eWxl
UmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKSk7CiAgICAgfQog
CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJv
cGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBw
bHlWYWx1ZSk7IH0KQEAgLTI1MiwxOSArMjUzLDE5IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQog
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOworICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKTsKIAotICAgICAgICBpZiAoUmVjdCogcmVjdCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRSZWN0
VmFsdWUoKSkgeworICAgICAgICBpZiAoUmVjdCogcmVjdCA9IHByaW1pdGl2ZVZhbHVlLmdldFJl
Y3RWYWx1ZSgpKSB7CiAgICAgICAgICAgICBMZW5ndGggdG9wID0gY29udmVydFRvTGVuZ3RoKHN0
eWxlUmVzb2x2ZXIsIHJlY3QtPnRvcCgpKTsKICAgICAgICAgICAgIExlbmd0aCByaWdodCA9IGNv
bnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0LT5yaWdodCgpKTsKICAgICAgICAgICAg
IExlbmd0aCBib3R0b20gPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+Ym90
dG9tKCkpOwogICAgICAgICAgICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVS
ZXNvbHZlciwgcmVjdC0+bGVmdCgpKTsKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldENsaXAodG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsKICAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0NsaXAodHJ1ZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pIHsKKyAgICAgICAg
fSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKSB7
CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDbGlwKExlbmd0aCgpLCBM
ZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpKTsKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldEhhc0NsaXAoZmFsc2UpOwogICAgICAgICB9CkBAIC0yOTgsMTcgKzI5OSwx
NyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAg
ICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJp
bWl0aXZlVmFsdWUodmFsdWUpOwotICAgICAgICBpZiAoaW5oZXJpdENvbG9yRnJvbVBhcmVudCAm
JiBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKQor
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgaWYgKGluaGVyaXRDb2xvckZyb21QYXJl
bnQgJiYgcHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ3VycmVudGNvbG9y
KQogICAgICAgICAgICAgYXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZl
cik7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXItPmFwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKQotICAgICAgICAgICAgICAgIChzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPmNvbG9yRnJvbVByaW1p
dGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlKSk7CisgICAgICAgICAgICAgICAgKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZlci0+Y29sb3JGcm9tUHJp
bWl0aXZlVmFsdWUoJnByaW1pdGl2ZVZhbHVlKSk7CiAgICAgICAgICAgICBpZiAoc3R5bGVSZXNv
bHZlci0+YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKQotICAgICAgICAgICAgICAg
IChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qdmlzaXRlZExpbmtTZXR0ZXJGdW5jdGlvbikoc3R5
bGVSZXNvbHZlci0+Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUsIC8qIGZv
clZpc2l0ZWRMaW5rICovIHRydWUpKTsKKyAgICAgICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+KnZpc2l0ZWRMaW5rU2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPmNvbG9y
RnJvbVByaW1pdGl2ZVZhbHVlKCZwcmltaXRpdmVWYWx1ZSwgLyogZm9yVmlzaXRlZExpbmsgKi8g
dHJ1ZSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNTksNDYgKzM2MCw0NiBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBMZW5ndGggdmFs
dWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKFdURjo6bW92ZSh2YWx1ZSkpOyB9CiAgICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGlm
IChub25lRW5hYmxlZCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVl
Tm9uZSkgeworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgaWYgKG5vbmVFbmFibGVk
ICYmIHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKICAgICAg
ICAgICAgIGlmIChub25lVW5kZWZpbmVkKQogICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChVbmRlZmluZWQpKTsKICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgo
KSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGxlZ2FjeUludHJpbnNpY0VuYWJsZWQpIHsKLSAg
ICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlSW50
cmluc2ljKQorICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBD
U1NWYWx1ZUludHJpbnNpYykKICAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCBMZW5ndGgoSW50cmluc2ljKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTWluSW50cmluc2ljKQorICAgICAg
ICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTWlu
SW50cmluc2ljKQogICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCksIExlbmd0aChNaW5JbnRyaW5zaWMpKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaW50cmlu
c2ljRW5hYmxlZCkgewotICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlE
KCkgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250ZW50KQorICAgICAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdlYmtpdE1pbkNvbnRlbnQpCiAgICAgICAg
ICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKE1pbkNvbnRl
bnQpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkg
PT0gQ1NTVmFsdWVXZWJraXRNYXhDb250ZW50KQorICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0
aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Via2l0TWF4Q29udGVudCkKICAgICAg
ICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoTWF4Q29u
dGVudCkpOwotICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQo
KSA9PSBDU1NWYWx1ZVdlYmtpdEZpbGxBdmFpbGFibGUpCisgICAgICAgICAgICBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRGaWxsQXZhaWxhYmxl
KQogICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0
aChGaWxsQXZhaWxhYmxlKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Via2l0Rml0Q29udGVudCkKKyAgICAgICAgICAgIGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdlYmtpdEZpdENv
bnRlbnQpCiAgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
TGVuZ3RoKEZpdENvbnRlbnQpKTsKICAgICAgICAgfQogCiAgICAgICAgIENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgPSBzdHlsZVJlc29sdmVyLT51c2VTVkdab29tUnVs
ZXNGb3JMZW5ndGgoKSA/CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKQogICAgICAg
ICAgICAgOiBzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEo
KTsKLSAgICAgICAgaWYgKGF1dG9FbmFibGVkICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlE
KCkgPT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICBpZiAoYXV0b0VuYWJsZWQgJiYgcHJpbWl0aXZl
VmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykKICAgICAgICAgICAgIHNldFZhbHVl
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aCgpKTsKLSAgICAgICAgZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIExlbmd0aCBsZW5ndGggPSBw
cmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKLSAg
ICAgICAgICAgIGxlbmd0aC5zZXRIYXNRdWlyayhwcmltaXRpdmVWYWx1ZS0+aXNRdWlya1ZhbHVl
KCkpOworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7CisgICAg
ICAgICAgICBMZW5ndGggbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5n
dGg+KGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAgICAgIGxlbmd0aC5zZXRIYXNRdWlyayhwcmlt
aXRpdmVWYWx1ZS5pc1F1aXJrVmFsdWUoKSk7CiAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBsZW5ndGgpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2Vu
dCkpOwotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNDYWxjdWxhdGVkUGVyY2Vu
dGFnZVdpdGhMZW5ndGgoKSkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPmNyZWF0ZUNhbGN1
bGF0aW9uVmFsdWUoY29udmVyc2lvbkRhdGEpKSk7CisgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0
aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkpCisgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZlVmFsdWUuZ2V0RG91YmxlVmFsdWUoKSwgUGVy
Y2VudCkpOworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc0NhbGN1bGF0ZWRQZXJj
ZW50YWdlV2l0aExlbmd0aCgpKQorICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLmNzc0NhbGNWYWx1ZSgpLT5jcmVhdGVDYWxj
dWxhdGlvblZhbHVlKGNvbnZlcnNpb25EYXRhKSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9w
ZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC00MTUsMTQgKzQxNiwxNCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KICAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4o
KnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGlm
ICgoaWRlbnRCZWhhdmlvciA9PSBNYXBOb25lVG9OdWxsICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRW
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgfHwgKGlkZW50QmVoYXZpb3Ig
PT0gTWFwQXV0b1RvTnVsbCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1Zh
bHVlQXV0bykpCisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgICAgICBpZiAoKGlkZW50QmVo
YXZpb3IgPT0gTWFwTm9uZVRvTnVsbCAmJiBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVOb25lKQorICAgICAgICAgICAgfHwgKGlkZW50QmVoYXZpb3IgPT0gTWFwQXV0b1Rv
TnVsbCAmJiBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKSkKICAg
ICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIG51bGxBdG9tKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
cHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAgICAgICAgc2V0VmFsdWUo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUuZ2V0U3RyaW5nVmFsdWUoKSk7
CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAg
ewpAQCAtNDM3LDExICs0MzgsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVl
KFJlbmRlclN0eWxlKiBzdHlsZSwgTGVuZ3RoU2l6ZSB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJG
dW5jdGlvbikoV1RGOjptb3ZlKHZhbHVlKSk7IH0KICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAg
ICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NT
U1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICAgICAgUGFpciogcGFpciA9IHByaW1pdGl2ZVZh
bHVlLT5nZXRQYWlyVmFsdWUoKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2
ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgICAgIFBh
aXIqIHBhaXIgPSBwcmltaXRpdmVWYWx1ZS5nZXRQYWlyVmFsdWUoKTsKICAgICAgICAgaWYgKCFw
YWlyIHx8ICFwYWlyLT5maXJzdCgpIHx8ICFwYWlyLT5zZWNvbmQoKSkKICAgICAgICAgICAgIHJl
dHVybjsKIApAQCAtNTUyLDEzICs1NTMsMTMgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgRmls
bExheWVyKiBjaGlsZCA9IChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVu
Y3Rpb24pKCk7CiAgICAgICAgIEZpbGxMYXllciogcHJldmlvdXNDaGlsZCA9IG51bGxwdHI7Ci0g
ICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKQorICAgICAgICBpZiAoaXM8Q1NTVmFsdWVM
aXN0PigqdmFsdWUpCiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAgICAgICYmICF2YWx1
ZS0+aXNJbWFnZVNldFZhbHVlKCkKKyAgICAgICAgJiYgIWlzPENTU0ltYWdlU2V0VmFsdWU+KCp2
YWx1ZSkKICNlbmRpZgogICAgICAgICApIHsKICAgICAgICAgICAgIC8vIFdhbGsgZWFjaCB2YWx1
ZSBhbmQgcHV0IGl0IGludG8gYSBsYXllciwgY3JlYXRpbmcgbmV3IGxheWVycyBhcyBuZWVkZWQu
Ci0gICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIHZhbHVlTGlzdCA9IHRvQ1NTVmFsdWVMaXN0KCp2
YWx1ZSk7CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIHZhbHVlTGlzdCA9IGRvd25jYXN0PENT
U1ZhbHVlTGlzdD4oKnZhbHVlKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB2YWx1ZUxpc3QubGVuZ3RoKCk7IGkrKykgewogICAgICAgICAgICAgICAgIGlmICghY2hpbGQp
IHsKICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNDaGlsZC0+c2V0TmV4dChzdGQ6Om1ha2Vf
dW5pcXVlPEZpbGxMYXllcj4oZmlsbExheWVyVHlwZSkpOwpAQCAtNTk1LDEyICs1OTYsMTIgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAg
Ly8gbm90ZTogQ1NTUHJvcGVydHlMZXR0ZXIvV29yZFNwYWNpbmcgcmlnaHQgbm93IHNldHMgdG8g
emVybyBpZiBpdCdzIG5vdCBhIHByaW1pdGl2ZSB2YWx1ZSBmb3Igc29tZSByZWFzb24uLi4KLSAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUo
dmFsdWUpOworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKIAotICAgICAgICBDU1NWYWx1ZUlEIGlk
ZW50ID0gcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKTsKKyAgICAgICAgQ1NTVmFsdWVJRCBp
ZGVudCA9IHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKTsKICAgICAgICAgVCBsZW5ndGg7CiAg
ICAgICAgIGlmIChub3JtYWxFbmFibGVkICYmIGlkZW50ID09IENTU1ZhbHVlTm9ybWFsKSB7CiAg
ICAgICAgICAgICBsZW5ndGggPSAwOwpAQCAtNjE1LDkgKzYxNiw5IEBAIHB1YmxpYzoKIAogICAg
ICAgICAgICAgLy8gQW55IG9yaWdpbmFsIHJlc3VsdCB0aGF0IHdhcyA+PSAxIHNob3VsZCBub3Qg
YmUgYWxsb3dlZCB0byBmYWxsIGJlbG93IDEuCiAgICAgICAgICAgICAvLyBUaGlzIGtlZXBzIGJv
cmRlciBsaW5lcyBmcm9tIHZhbmlzaGluZy4KLSAgICAgICAgICAgIGxlbmd0aCA9IHByaW1pdGl2
ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAgICAgIGxl
bmd0aCA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8VD4oY29udmVyc2lvbkRhdGEpOwog
ICAgICAgICAgICAgaWYgKGNvbnZlcnNpb25EYXRhLnpvb20oKSA8IDEuMGYgJiYgbGVuZ3RoIDwg
MS4wKSB7Ci0gICAgICAgICAgICAgICAgVCBvcmlnaW5hbExlbmd0aCA9IHByaW1pdGl2ZVZhbHVl
LT5jb21wdXRlTGVuZ3RoPFQ+KGNvbnZlcnNpb25EYXRhLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEu
MGYpKTsKKyAgICAgICAgICAgICAgICBUIG9yaWdpbmFsTGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUu
Y29tcHV0ZUxlbmd0aDxUPihjb252ZXJzaW9uRGF0YS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBm
KSk7CiAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsTGVuZ3RoID49IDEuMCkKICAgICAgICAg
ICAgICAgICAgICAgbGVuZ3RoID0gMS4wOwogICAgICAgICAgICAgfQpAQCAtNjU0LDExICs2NTUs
MTEgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewot
ICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUo
dmFsdWUpOworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKICAgICAgICAgRm9udERlc2NyaXB0aW9u
IGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOwotICAg
ICAgICAoZm9udERlc2NyaXB0aW9uLipzZXR0ZXJGdW5jdGlvbikoKnByaW1pdGl2ZVZhbHVlKTsK
KyAgICAgICAgKGZvbnREZXNjcmlwdGlvbi4qc2V0dGVyRnVuY3Rpb24pKHByaW1pdGl2ZVZhbHVl
KTsKICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlw
dGlvbik7CiAgICAgfQogCkBAIC02OTcsMTAgKzY5OCwxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzVmFs
dWVMaXN0KCkpCisgICAgICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIGF1dG8mIHZhbHVlTGlzdCA9IHRvQ1NTVmFsdWVMaXN0
KCp2YWx1ZSk7CisgICAgICAgIGF1dG8mIHZhbHVlTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlz
dD4oKnZhbHVlKTsKIAogICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0g
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIC8vIEJl
Zm9yZSBtYXBwaW5nIGluIGEgbmV3IGZvbnQtZmFtaWx5IHByb3BlcnR5LCB3ZSBzaG91bGQgcmVz
ZXQgdGhlIGdlbmVyaWMgZmFtaWx5LgpAQCAtNzEyLDE0ICs3MTMsMTQgQEAgcHVibGljOgogCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZUxpc3QubGVuZ3RoKCk7ICsraSkg
ewogICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSB2YWx1ZUxpc3QuaXRlbShpKTsKLSAgICAg
ICAgICAgIGlmICghaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgaWYgKCFp
czxDU1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNvbnRlbnRWYWx1ZSA9IHRvQ1NTUHJpbWl0
aXZlVmFsdWUoaXRlbSk7CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgY29udGVudFZh
bHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKTsKICAgICAgICAgICAgIEF0
b21pY1N0cmluZyBmYWNlOwotICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+aXNTdHJpbmco
KSkKLSAgICAgICAgICAgICAgICBmYWNlID0gY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgp
OworICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS5pc1N0cmluZygpKQorICAgICAgICAgICAg
ICAgIGZhY2UgPSBjb250ZW50VmFsdWUuZ2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAgIGVs
c2UgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCkuc2V0
dGluZ3MoKSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVlLT5nZXRWYWx1
ZUlEKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbnRlbnRWYWx1ZS5nZXRWYWx1ZUlE
KCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0Qm9keToKICAgICAgICAg
ICAgICAgICAgICAgZmFjZSA9IHNldHRpbmdzLT5zdGFuZGFyZEZvbnRGYW1pbHkoKTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC04NDAsMTAgKzg0MSwxMCBAQCBwdWJsaWM6CiAgICAg
CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPigqdmFsdWUpOwogCiAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3Jp
cHRpb24gPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKDApOwpAQCAtODU2LDcgKzg1Nyw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIHBhcmVudElzQWJzb2x1dGVTaXplID0gc3R5bGVSZXNvbHZl
ci0+cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuaXNBYnNvbHV0ZVNpemUoKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGlmIChDU1NWYWx1ZUlEIGlkZW50ID0gcHJpbWl0aXZlVmFsdWUt
PmdldFZhbHVlSUQoKSkgeworICAgICAgICBpZiAoQ1NTVmFsdWVJRCBpZGVudCA9IHByaW1pdGl2
ZVZhbHVlLmdldFZhbHVlSUQoKSkgewogICAgICAgICAgICAgLy8gS2V5d29yZHMgYXJlIGJlaW5n
IHVzZWQuCiAgICAgICAgICAgICBzd2l0Y2ggKGlkZW50KSB7CiAgICAgICAgICAgICBjYXNlIENT
U1ZhbHVlWHhTbWFsbDoKQEAgLTg4NiwxNSArODg3LDE0IEBAIHB1YmxpYzoKIAogICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHBhcmVudElzQWJzb2x1dGVTaXpl
ICYmIChpZGVudCA9PSBDU1NWYWx1ZUxhcmdlciB8fCBpZGVudCA9PSBDU1NWYWx1ZVNtYWxsZXIg
fHwgaWRlbnQgPT0gQ1NTVmFsdWVXZWJraXRSdWJ5VGV4dCkpOwogICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHBhcmVudElzQWJz
b2x1dGVTaXplCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fHwgIShwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkgfHwgcHJpbWl0aXZlVmFsdWUtPmlz
Rm9udFJlbGF0aXZlTGVuZ3RoKCkpKTsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+
aXNMZW5ndGgoKSkgewotICAgICAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS0+Y29t
cHV0ZUxlbmd0aDxmbG9hdD4oQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YShzdHlsZVJlc29sdmVy
LT5wYXJlbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxl
UmVzb2x2ZXItPmRvY3VtZW50KCkucmVuZGVyVmlldygpLCAxLjBmLCB0cnVlKSk7Ci0gICAgICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5zZXRGb250U2l6ZUhhc1ZpZXdwb3J0VW5p
dHMocHJpbWl0aXZlVmFsdWUtPmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpOwotICAgICAg
ICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAg
ICAgICAgICAgc2l6ZSA9IChwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpICogcGFyZW50
U2l6ZSkgLyAxMDAuMGY7Ci0gICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXND
YWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkgewotICAgICAgICAgICAgICAgIFJlZjxD
YWxjdWxhdGlvblZhbHVlPiBjYWxjdWxhdGlvblZhbHVlIHsgcHJpbWl0aXZlVmFsdWUtPmNzc0Nh
bGNWYWx1ZSgpLT5jcmVhdGVDYWxjdWxhdGlvblZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0YXRlKCku
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpKSB9
OworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHBhcmVudElz
QWJzb2x1dGVTaXplIHx8ICEocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkgfHwgcHJpbWl0
aXZlVmFsdWUuaXNGb250UmVsYXRpdmVMZW5ndGgoKSkpOworICAgICAgICAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBzaXplID0gcHJpbWl0aXZl
VmFsdWUuY29tcHV0ZUxlbmd0aDxmbG9hdD4oQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YShzdHls
ZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxl
KCksIHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCkucmVuZGVyVmlldygpLCAxLjBmLCB0cnVlKSk7
CisgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5zZXRGb250U2l6ZUhhc1Zp
ZXdwb3J0VW5pdHMocHJpbWl0aXZlVmFsdWUuaXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSk7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpKQor
ICAgICAgICAgICAgICAgIHNpemUgPSAocHJpbWl0aXZlVmFsdWUuZ2V0RmxvYXRWYWx1ZSgpICog
cGFyZW50U2l6ZSkgLyAxMDAuMGY7CisgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAg
UmVmPENhbGN1bGF0aW9uVmFsdWU+IGNhbGN1bGF0aW9uVmFsdWUgeyBwcmltaXRpdmVWYWx1ZS5j
c3NDYWxjVmFsdWUoKS0+Y3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShzdHlsZVJlc29sdmVyLT5zdGF0
ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBm
KSkgfTsKICAgICAgICAgICAgICAgICBzaXplID0gY2FsY3VsYXRpb25WYWx1ZS0+ZXZhbHVhdGUo
cGFyZW50U2l6ZSk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm47
CkBAIC05MTksMTEgKzkxOSwxMSBAQCBjbGFzcyBBcHBseVByb3BlcnR5Rm9udFdlaWdodCB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBp
ZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwor
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBzd2l0
Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICAgICAgc3dpdGNoIChwcmlt
aXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgY2FzZSBDU1NWYWx1ZUludmFsaWQ6
CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtOTM0LDcgKzkzNCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRXZWlnaHQoZm9udERlc2NyaXB0aW9uLmxpZ2h0ZXJXZWlnaHQoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRX
ZWlnaHQoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRX
ZWlnaHQocHJpbWl0aXZlVmFsdWUpOwogICAgICAgICB9CiAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KQEAgLTk3NiwxMyAr
OTc2LDEzIEBAIHB1YmxpYzoKICAgICAgICAgRm9udERlc2NyaXB0aW9uOjpMaWdhdHVyZXNTdGF0
ZSBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRpb246Ok5vcm1hbExp
Z2F0dXJlc1N0YXRlOwogICAgICAgICBGb250RGVzY3JpcHRpb246OkxpZ2F0dXJlc1N0YXRlIGhp
c3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVz
U3RhdGU7CiAKLSAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAgICAgICAg
ICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9IHRvQ1NTVmFsdWVMaXN0KHZhbHVlKTsKLSAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVMaXN0LT5sZW5ndGgoKTsgKytpKSB7
Ci0gICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSB2YWx1ZUxpc3QtPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soaSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGl0ZW0tPmlzUHJpbWl0aXZl
VmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkg
ewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRvQ1NTUHJpbWl0aXZlVmFsdWUoaXRlbSkt
PmdldFZhbHVlSUQoKSkgeworICAgICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7
CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIHZhbHVlTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVl
TGlzdD4oKnZhbHVlKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVM
aXN0Lmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IHZh
bHVlTGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAgICAgICAgIEFTU0VS
VChpczxDU1NQcmltaXRpdmVWYWx1ZT4oaXRlbSkpOworICAgICAgICAgICAgICAgIGlmIChpczxD
U1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pKSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKS5nZXRWYWx1ZUlEKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ29tbW9uTGlnYXR1cmVzOgogICAgICAgICAg
ICAgICAgICAgICAgICAgY29tbW9uTGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRpb246OkRp
c2FibGVkTGlnYXR1cmVzU3RhdGU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTEwMTAsOCArMTAxMCw4IEBAIHB1YmxpYzoKICAgICAgICAgfQogI2lmICFBU1NFUlRfRElTQUJM
RUQKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTih2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVCh0
b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFs
KTsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlzPENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpKTsKKyAgICAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpOwog
ICAgICAgICB9CiAjZW5kaWYKIApAQCAtMTE1OSw5ICsxMTU5LDkgQEAgcHVibGljOgogICAgIH0K
ICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGJvb2wgc2V0
Q291bnRlckluY3JlbWVudFRvTm9uZSA9IGNvdW50ZXJCZWhhdmlvciA9PSBJbmNyZW1lbnQgJiYg
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZTsKKyAgICAgICAgYm9vbCBzZXRDb3VudGVySW5j
cmVtZW50VG9Ob25lID0gY291bnRlckJlaGF2aW9yID09IEluY3JlbWVudCAmJiBpczxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lOwogCi0gICAgICAgIGlmICghdmFsdWUtPmlz
VmFsdWVMaXN0KCkgJiYgIXNldENvdW50ZXJJbmNyZW1lbnRUb05vbmUpCisgICAgICAgIGlmICgh
aXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpICYmICFzZXRDb3VudGVySW5jcmVtZW50VG9Ob25lKQog
ICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIENvdW50ZXJEaXJlY3RpdmVNYXAmIG1hcCA9
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7CkBAIC0x
MTc3LDE0ICsxMTc3LDE0IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHNldENvdW50ZXJJbmNyZW1l
bnRUb05vbmUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBDU1NWYWx1
ZUxpc3QqIGxpc3QgPSB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSk7Ci0gICAgICAgIGludCBsZW5ndGgg
PSBsaXN0ID8gbGlzdC0+bGVuZ3RoKCkgOiAwOworICAgICAgICBDU1NWYWx1ZUxpc3QmIGxpc3Qg
PSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CisgICAgICAgIGludCBsZW5ndGggPSBs
aXN0Lmxlbmd0aCgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
Ci0gICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gbGlzdC0+aXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjayhpKTsKLSAgICAgICAgICAgIGlmICghY3VyclZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpCisgICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gbGlzdC5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKGkpOworICAgICAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmN1
cnJWYWx1ZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIFBhaXIq
IHBhaXIgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGN1cnJWYWx1ZSktPmdldFBhaXJWYWx1ZSgpOwor
ICAgICAgICAgICAgUGFpciogcGFpciA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqY3Vy
clZhbHVlKS5nZXRQYWlyVmFsdWUoKTsKICAgICAgICAgICAgIGlmICghcGFpciB8fCAhcGFpci0+
Zmlyc3QoKSB8fCAhcGFpci0+c2Vjb25kKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAK
QEAgLTEyMTksMjcgKzEyMTksMjcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgIHsKICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y2xlYXJDdXJz
b3JMaXN0KCk7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewotICAgICAgICAg
ICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gdG9DU1NWYWx1ZUxpc3QodmFsdWUpOwotICAgICAgICAg
ICAgaW50IGxlbiA9IGxpc3QtPmxlbmd0aCgpOworICAgICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0
PigqdmFsdWUpKSB7CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIGxpc3QgPSBkb3duY2FzdDxD
U1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CisgICAgICAgICAgICBpbnQgbGVuID0gbGlzdC5sZW5ndGgo
KTsKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcihDdXJzb3JB
dXRvKTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAg
ICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
aSk7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzQ3Vyc29ySW1hZ2VWYWx1ZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIENTU0N1cnNvckltYWdlVmFsdWUqIGltYWdlID0gdG9DU1NDdXJz
b3JJbWFnZVZhbHVlKGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPnVwZGF0
ZUlmU1ZHQ3Vyc29ySXNVc2VkKHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKSkpIC8vIEVsZW1lbnRz
IHdpdGggU1ZHIGN1cnNvcnMgYXJlIG5vdCBhbGxvd2VkIHRvIHNoYXJlIHN0eWxlLgorICAgICAg
ICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gbGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkp
OworICAgICAgICAgICAgICAgIGlmIChpczxDU1NDdXJzb3JJbWFnZVZhbHVlPigqaXRlbSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSYgaW1hZ2UgPSBkb3duY2Fz
dDxDU1NDdXJzb3JJbWFnZVZhbHVlPigqaXRlbSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChp
bWFnZS51cGRhdGVJZlNWR0N1cnNvcklzVXNlZChzdHlsZVJlc29sdmVyLT5lbGVtZW50KCkpKSAv
LyBFbGVtZW50cyB3aXRoIFNWRyBjdXJzb3JzIGFyZSBub3QgYWxsb3dlZCB0byBzaGFyZSBzdHls
ZS4KICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFVu
aXF1ZSgpOwotICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5hZGRD
dXJzb3Ioc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUN1cnNvciwgaW1hZ2Up
LCBpbWFnZS0+aG90U3BvdCgpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlz
UHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGl0ZW0pOwotICAgICAgICAg
ICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVmFsdWVJRCgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKCpwcmltaXRpdmVW
YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmFkZEN1
cnNvcihzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKENTU1Byb3BlcnR5Q3Vyc29yLCAmaW1hZ2Up
LCBpbWFnZS5ob3RTcG90KCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KCppdGVtKSkgeworICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0p
OworICAgICAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNWYWx1ZUlEKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDdXJzb3Io
cHJpbWl0aXZlVmFsdWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZh
bHVlKTsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNWYWx1ZUlEKCkgJiYgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+Y3Vyc29yKCkgIT0gRUN1cnNvcigqcHJpbWl0aXZlVmFsdWUp
KQotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcigqcHJp
bWl0aXZlVmFsdWUpOworICAgICAgICB9IGVsc2UgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpKSB7CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZS5pc1ZhbHVlSUQoKSAmJiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5jdXJz
b3IoKSAhPSBFQ3Vyc29yKHByaW1pdGl2ZVZhbHVlKSkKKyAgICAgICAgICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRDdXJzb3IocHJpbWl0aXZlVmFsdWUpOwogICAgICAgICB9CiAg
ICAgfQogCkBAIC0xMjUwLDE0ICsxMjUwLDE0IEBAIGNsYXNzIEFwcGx5UHJvcGVydHlUZXh0QWxp
Z24gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUo
dmFsdWUpOwotICAgICAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUtPmlzVmFsdWVJRCgpKTsKKyAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgICAgIEFTU0VSVChwcmltaXRpdmVWYWx1ZS5pc1Zh
bHVlSUQoKSk7CiAKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgIT0g
Q1NTVmFsdWVXZWJraXRNYXRjaFBhcmVudCkKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldFRleHRBbGlnbigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUuZ2V0VmFsdWVJRCgpICE9IENTU1ZhbHVlV2Via2l0TWF0Y2hQYXJlbnQpCisgICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0QWxpZ24ocHJpbWl0aXZlVmFs
dWUpOwogICAgICAgICBlbHNlIGlmIChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0
QWxpZ24oKSA9PSBUQVNUQVJUKQogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0VGV4dEFsaWduKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSA/IExFRlQgOiBSSUdIVCk7CiAgICAgICAgIGVsc2UgaWYgKHN0eWxlUmVzb2x2
ZXItPnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigpID09IFRBRU5EKQpAQCAtMTI3OSw4ICsxMjc5
LDggQEAgcHVibGljOgogICAgICAgICBUZXh0RGVjb3JhdGlvbiB0ID0gUmVuZGVyU3R5bGU6Omlu
aXRpYWxUZXh0RGVjb3JhdGlvbigpOwogICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9y
IGkodmFsdWUpOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKICAgICAgICAgICAgIENTU1Zh
bHVlKiBpdGVtID0gaS52YWx1ZSgpOwotICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04oaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgICAgIHQgfD0g
KnRvQ1NTUHJpbWl0aXZlVmFsdWUoaXRlbSk7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihpczxDU1NQcmltaXRpdmVWYWx1ZT4oaXRlbSkpOworICAgICAgICAg
ICAgdCB8PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pOwogICAgICAgICB9CiAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHREZWNvcmF0aW9uKHQpOwogICAg
IH0KQEAgLTEzMjQsMTQgKzEzMjQsMTQgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHREZWNvcmF0
aW9uU2tpcCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ewotICAgICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dERlY29yYXRpb25Ta2lwKHZhbHVlVG9EZWNv
cmF0aW9uU2tpcCgqdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSkpKTsKKyAgICAgICAgaWYgKGlz
PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSB7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRUZXh0RGVjb3JhdGlvblNraXAodmFsdWVUb0RlY29yYXRpb25Ta2lwKGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIAogICAgICAgICBUZXh0RGVjb3JhdGlvblNraXAgc2tpcCA9IFJlbmRlclN0
eWxlOjppbml0aWFsVGV4dERlY29yYXRpb25Ta2lwKCk7CiAgICAgICAgIGZvciAoQ1NTVmFsdWVM
aXN0SXRlcmF0b3IgaSh2YWx1ZSk7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkKLSAgICAgICAg
ICAgIHNraXAgfD0gdmFsdWVUb0RlY29yYXRpb25Ta2lwKCp0b0NTU1ByaW1pdGl2ZVZhbHVlKGku
dmFsdWUoKSkpOworICAgICAgICAgICAgc2tpcCB8PSB2YWx1ZVRvRGVjb3JhdGlvblNraXAoZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppLnZhbHVlKCkpKTsKICAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0VGV4dERlY29yYXRpb25Ta2lwKHNraXApOwogICAgIH0KICAgICBz
dGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtMTM0NSwxMCArMTM0NSwx
MCBAQCBjbGFzcyBBcHBseVByb3BlcnR5TWFycXVlZUluY3JlbWVudCB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUm
IHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSgqdmFsdWUpOworICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKTsKICAgICAgICAgTGVuZ3RoIG1hcnF1ZWVMZW5ndGgoVW5kZWZpbmVkKTsK
ICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAg
Y2FzZSBDU1NWYWx1ZVNtYWxsOgpAQCAtMTM4MCwxNCArMTM4MCwxNCBAQCBjbGFzcyBBcHBseVBy
b3BlcnR5TWFycXVlZVJlcGV0aXRpb24gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAg
ICAgcmV0dXJuOwogCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9
IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUt
PmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUluZmluaXRlKQorICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUlu
ZmluaXRlKQogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFycXVlZUxv
b3BDb3VudCgtMSk7IC8vIC0xIG1lYW5zIHJlcGVhdCBmb3JldmVyLgotICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldE1hcnF1ZWVMb29wQ291bnQocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVl
KCkpOworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpKQorICAgICAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmltaXRp
dmVWYWx1ZS5nZXRJbnRWYWx1ZSgpKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxl
ciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xNDAwLDExICsxNDAwLDExIEBAIGNsYXNzIEFw
cGx5UHJvcGVydHlNYXJxdWVlU3BlZWQgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAg
ICAgcmV0dXJuOwogCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9
IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgICAgICBpZiAoQ1NTVmFsdWVJRCBpZGVu
dCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSk7CisgICAgICAgIGlmIChDU1NWYWx1ZUlEIGlkZW50ID0gcHJpbWl0aXZlVmFsdWUuZ2V0VmFs
dWVJRCgpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGlkZW50KSB7CiAgICAgICAgICAgICBjYXNl
IENTU1ZhbHVlU2xvdzoKICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5z
ZXRNYXJxdWVlU3BlZWQoNTAwKTsgLy8gNTAwIG1zZWMuCkBAIC0xNDE4LDEwICsxNDE4LDEwIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVGltZSgp
KQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKHBy
aW1pdGl2ZVZhbHVlLT5jb21wdXRlVGltZTxpbnQsIENTU1ByaW1pdGl2ZVZhbHVlOjpNaWxsaXNl
Y29uZHM+KCkpOwotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkg
Ly8gRm9yIHNjcm9sbGFtb3VudCBzdXBwb3J0LgotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgpKTsK
KyAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc1RpbWUoKSkKKyAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS5j
b21wdXRlVGltZTxpbnQsIENTU1ByaW1pdGl2ZVZhbHVlOjpNaWxsaXNlY29uZHM+KCkpOworICAg
ICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpKSAvLyBGb3Igc2Nyb2xsYW1v
dW50IHN1cHBvcnQuCisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRNYXJx
dWVlU3BlZWQocHJpbWl0aXZlVmFsdWUuZ2V0SW50VmFsdWUoKSk7CiAgICAgfQogICAgIHN0YXRp
YyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtMTQzNSw4ICsxNDM1
LDggQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAg
ICAgICAgLy8gVGhpcyBpcyB0cnVlIGlmIHZhbHVlIGlzICdhdXRvJyBvciAnYWxwaGFiZXRpYycu
Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBU
ZXh0VW5kZXJsaW5lUG9zaXRpb24gdCA9ICp0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAg
ICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSB7CisgICAgICAgICAgICBU
ZXh0VW5kZXJsaW5lUG9zaXRpb24gdCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dFVuZGVybGlu
ZVBvc2l0aW9uKHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xNDQ0LDgg
KzE0NDQsOCBAQCBwdWJsaWM6CiAgICAgICAgIHVuc2lnbmVkIHQgPSAwOwogICAgICAgICBmb3Ig
KENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkodmFsdWUpOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkp
IHsKICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gaS52YWx1ZSgpOwotICAgICAgICAgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgp
KTsKLSAgICAgICAgICAgIFRleHRVbmRlcmxpbmVQb3NpdGlvbiB0MiA9ICp0b0NTU1ByaW1pdGl2
ZVZhbHVlKGl0ZW0pOworICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0pKTsKKyAgICAgICAgICAgIFRleHRVbmRlcmxp
bmVQb3NpdGlvbiB0MiA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSk7CiAgICAg
ICAgICAgICB0IHw9IHQyOwogICAgICAgICB9CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldFRleHRVbmRlcmxpbmVQb3NpdGlvbihzdGF0aWNfY2FzdDxUZXh0VW5kZXJsaW5lUG9z
aXRpb24+KHQpKTsKQEAgLTE0NjEsMjIgKzE0NjEsMjIgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eUxp
bmVIZWlnaHQgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
IHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAo
IWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZl
VmFsdWUodmFsdWUpOworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKICAgICAgICAgTGVuZ3RoIGxp
bmVIZWlnaHQ7CiAKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVOb3JtYWwpCisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkg
PT0gQ1NTVmFsdWVOb3JtYWwpCiAgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gUmVuZGVyU3R5bGU6
OmluaXRpYWxMaW5lSGVpZ2h0KCk7Ci0gICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5p
c0xlbmd0aCgpKSB7Ci0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNv
bXB1dGVMZW5ndGg8TGVuZ3RoPihjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29t
RmFjdG9yKCpzdHlsZVJlc29sdmVyKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUtPmlzUGVyY2VudGFnZSgpKSB7CisgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlz
TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS5jb21w
dXRlTGVuZ3RoPExlbmd0aD4oY3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZh
Y3Rvcigqc3R5bGVSZXNvbHZlcikpOworICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LmlzUGVyY2VudGFnZSgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogcGVyY2VudGFnZSBzaG91
bGQgbm90IGJlIHJlc3RyaWN0ZWQgdG8gYW4gaW50ZWdlciBoZXJlLgotICAgICAgICAgICAgbGlu
ZUhlaWdodCA9IExlbmd0aCgoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y29tcHV0ZWRGb250U2l6
ZSgpICogcHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpIC8gMTAwLCBGaXhlZCk7Ci0gICAg
ICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAg
IGxpbmVIZWlnaHQgPSBMZW5ndGgoKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmNvbXB1dGVkRm9u
dFNpemUoKSAqIHByaW1pdGl2ZVZhbHVlLmdldEludFZhbHVlKCkpIC8gMTAwLCBGaXhlZCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNOdW1iZXIoKSkgewogICAgICAgICAg
ICAgLy8gRklYTUU6IG51bWJlciBhbmQgcGVyY2VudGFnZSB2YWx1ZXMgc2hvdWxkIHByb2R1Y2Ug
dGhlIHNhbWUgdHlwZSBvZiBMZW5ndGggKGllLiBGaXhlZCBvciBQZXJjZW50KS4KLSAgICAgICAg
ICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCkg
KiAxMDAuMCwgUGVyY2VudCk7CisgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKHByaW1p
dGl2ZVZhbHVlLmdldERvdWJsZVZhbHVlKCkgKiAxMDAuMCwgUGVyY2VudCk7CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRMaW5lSGVpZ2h0KGxpbmVIZWlnaHQpOwpAQCAtMTQ5NCwyNyArMTQ5NCwyNyBAQCBjbGFz
cyBBcHBseVByb3BlcnR5TGluZUhlaWdodEZvcklPU1RleHRBdXRvc2l6aW5nIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgIExlbmd0aCBsaW5lSGVpZ2h0OwogCi0gICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKQorICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKQog
ICAgICAgICAgICAgbGluZUhlaWdodCA9IFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgp
OwotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewotICAgICAg
ICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4o
Y3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3Rvcigqc3R5bGVSZXNvbHZl
cikpOworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7CisgICAg
ICAgICAgICBsaW5lSGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+
KGNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoKnN0eWxlUmVzb2x2
ZXIpKTsKICAgICAgICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT50ZXh0U2l6ZUFk
anVzdCgpLmlzUGVyY2VudGFnZSgpKQogICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5n
dGgobGluZUhlaWdodC52YWx1ZSgpICogc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+dGV4dFNpemVB
ZGp1c3QoKS5tdWx0aXBsaWVyKCksIEZpeGVkKTsKLSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRp
dmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS5pc1BlcmNlbnRhZ2UoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IHBlcmNlbnRhZ2Ug
c2hvdWxkIG5vdCBiZSByZXN0cmljdGVkIHRvIGFuIGludGVnZXIgaGVyZS4KLSAgICAgICAgICAg
IGxpbmVIZWlnaHQgPSBMZW5ndGgoKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnRTaXplKCkg
KiBwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSkgLyAxMDAsIEZpeGVkKTsKLSAgICAgICAg
fSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgeworICAgICAgICAgICAgbGlu
ZUhlaWdodCA9IExlbmd0aCgoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udFNpemUoKSAqIHBy
aW1pdGl2ZVZhbHVlLmdldEludFZhbHVlKCkpIC8gMTAwLCBGaXhlZCk7CisgICAgICAgIH0gZWxz
ZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6
IG51bWJlciBhbmQgcGVyY2VudGFnZSB2YWx1ZXMgc2hvdWxkIHByb2R1Y2UgdGhlIHNhbWUgdHlw
ZSBvZiBMZW5ndGggKGllLiBGaXhlZCBvciBQZXJjZW50KS4KICAgICAgICAgICAgIGlmIChzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT50ZXh0U2l6ZUFkanVzdCgpLmlzUGVyY2VudGFnZSgpKQotICAg
ICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJs
ZVZhbHVlKCkgKiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT50ZXh0U2l6ZUFkanVzdCgpLm11bHRp
cGxpZXIoKSAqIDEwMC4wLCBQZXJjZW50KTsKKyAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0ID0g
TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLmdldERvdWJsZVZhbHVlKCkgKiBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT50ZXh0U2l6ZUFkanVzdCgpLm11bHRpcGxpZXIoKSAqIDEwMC4wLCBQZXJjZW50KTsK
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKHBy
aW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpICogMTAwLjAsIFBlcmNlbnQpOworICAgICAg
ICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUuZ2V0RG91YmxlVmFs
dWUoKSAqIDEwMC4wLCBQZXJjZW50KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldExpbmVIZWlnaHQobGluZUhl
aWdodCk7CkBAIC0xNTQ0LDIwICsxNTQ0LDIwIEBAIGNsYXNzIEFwcGx5UHJvcGVydHlXb3JkU3Bh
Y2luZyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewot
ICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSh2YWx1ZSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogICAgICAgICBMZW5ndGggd29yZFNw
YWNpbmc7CiAKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NT
VmFsdWVOb3JtYWwpCisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVOb3JtYWwpCiAgICAgICAgICAgICB3b3JkU3BhY2luZyA9IFJlbmRlclN0eWxlOjpp
bml0aWFsV29yZFNwYWNpbmcoKTsKLSAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlz
TGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIHdvcmRTcGFjaW5nID0gcHJpbWl0aXZlVmFsdWUtPmNv
bXB1dGVMZW5ndGg8TGVuZ3RoPihjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29t
RmFjdG9yKCpzdHlsZVJlc29sdmVyKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUtPmlzUGVyY2VudGFnZSgpKQotICAgICAgICAgICAgd29yZFNwYWNpbmcgPSBMZW5ndGgocHJp
bWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwotICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHdvcmRTcGFjaW5nID0g
TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBGaXhlZCk7CisgICAgICAg
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHdvcmRT
cGFjaW5nID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNzc3RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoKnN0eWxlUmVzb2x2ZXIpKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSkKKyAgICAgICAgICAg
IHdvcmRTcGFjaW5nID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLmdldERvdWJsZVZhbHVlKCksIFBl
cmNlbnQpOworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpKQorICAg
ICAgICAgICAgd29yZFNwYWNpbmcgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUuZ2V0RG91YmxlVmFs
dWUoKSwgRml4ZWQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFdvcmRTcGFjaW5nKHdvcmRTcGFjaW5nKTsKQEAg
LTE2NjcsMjEgKzE2NjcsMjEgQEAgcHVibGljOgogICAgICAgICBzd2l0Y2ggKGluc3BlY3Rvci5s
ZW5ndGgoKSkgewogICAgICAgICBjYXNlIDI6IHsKICAgICAgICAgICAgIC8vIDxsZW5ndGg+ezJ9
IHwgPHBhZ2Utc2l6ZT4gPG9yaWVudGF0aW9uPgotICAgICAgICAgICAgaWYgKCFpbnNwZWN0b3Iu
Zmlyc3QoKS0+aXNQcmltaXRpdmVWYWx1ZSgpIHx8ICFpbnNwZWN0b3Iuc2Vjb25kKCktPmlzUHJp
bWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCpp
bnNwZWN0b3IuZmlyc3QoKSkgfHwgIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaW5zcGVjdG9yLnNl
Y29uZCgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogZmlyc3QgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGluc3BlY3Rvci5maXJzdCgpKTsK
LSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKGluc3BlY3Rvci5zZWNvbmQoKSk7Ci0gICAgICAgICAgICBpZiAoZmlyc3QtPmlzTGVuZ3Ro
KCkpIHsKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBmaXJzdCA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqaW5zcGVjdG9yLmZpcnN0KCkpOworICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUmIHNlY29uZCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaW5zcGVj
dG9yLnNlY29uZCgpKTsKKyAgICAgICAgICAgIGlmIChmaXJzdC5pc0xlbmd0aCgpKSB7CiAgICAg
ICAgICAgICAgICAgLy8gPGxlbmd0aD57Mn0KLSAgICAgICAgICAgICAgICBpZiAoIXNlY29uZC0+
aXNMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBpZiAoIXNlY29uZC5pc0xlbmd0aCgpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YSA9IHN0eWxlUmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpOwotICAgICAg
ICAgICAgICAgIHdpZHRoID0gZmlyc3QtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJzaW9u
RGF0YSk7Ci0gICAgICAgICAgICAgICAgaGVpZ2h0ID0gc2Vjb25kLT5jb21wdXRlTGVuZ3RoPExl
bmd0aD4oY29udmVyc2lvbkRhdGEpOworICAgICAgICAgICAgICAgIHdpZHRoID0gZmlyc3QuY29t
cHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAgICAgICAgICBoZWln
aHQgPSBzZWNvbmQuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gPHBhZ2Utc2l6ZT4gPG9yaWVudGF0
aW9uPgogICAgICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBvcmRlciBpcyBndWFyYW50ZWVkLiBT
ZWUgQ1NTUGFyc2VyOjpwYXJzZVNpemVQYXJhbWV0ZXIuCi0gICAgICAgICAgICAgICAgaWYgKCFn
ZXRQYWdlU2l6ZUZyb21OYW1lKGZpcnN0LCBzZWNvbmQsIHdpZHRoLCBoZWlnaHQpKQorICAgICAg
ICAgICAgICAgIGlmICghZ2V0UGFnZVNpemVGcm9tTmFtZSgmZmlyc3QsICZzZWNvbmQsIHdpZHRo
LCBoZWlnaHQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfUkVTT0xWRUQ7CkBAIC0xNjg5LDE1
ICsxNjg5LDE1IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICBjYXNlIDE6IHsKICAgICAg
ICAgICAgIC8vIDxsZW5ndGg+IHwgYXV0byB8IDxwYWdlLXNpemU+IHwgWyBwb3J0cmFpdCB8IGxh
bmRzY2FwZV0KLSAgICAgICAgICAgIGlmICghaW5zcGVjdG9yLmZpcnN0KCktPmlzUHJpbWl0aXZl
VmFsdWUoKSkKKyAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppbnNwZWN0
b3IuZmlyc3QoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZShpbnNwZWN0
b3IuZmlyc3QoKSk7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkp
IHsKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaW5zcGVjdG9yLmZpcnN0KCkpOworICAgICAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICAvLyA8bGVu
Z3RoPgogICAgICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsK
LSAgICAgICAgICAgICAgICB3aWR0aCA9IGhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRl
TGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNp
b25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpOworICAgICAgICAgICAgICAgIHdp
ZHRoID0gaGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxl
UmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRq
dXN0ZWRab29tKDEuMGYpKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
c3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgICAgICAgICAgICAg
c3dpdGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgICAgICAgICBj
YXNlIDA6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBjYXNl
IENTU1ZhbHVlQXV0bzoKQEAgLTE3MTIsNyArMTcxMiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAvLyA8cGFnZS1zaXplPgogICAgICAg
ICAgICAgICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfUkVTT0xWRUQ7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghZ2V0UGFnZVNpemVGcm9tTmFtZShwcmltaXRpdmVWYWx1ZSwgMCwg
d2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghZ2V0UGFnZVNpemVGcm9t
TmFtZSgmcHJpbWl0aXZlVmFsdWUsIG51bGxwdHIsIHdpZHRoLCBoZWlnaHQpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
QEAgLTE3NDUsNDUgKzE3NDUsNDUgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKLSAg
ICAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHRvQ1NTVmFsdWVMaXN0KHZhbHVlKTsKLSAg
ICAgICAgICAgIEFTU0VSVChsaXN0LT5sZW5ndGgoKSA9PSAyKTsKLSAgICAgICAgICAgIGlmIChs
aXN0LT5sZW5ndGgoKSAhPSAyKQorICAgICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUp
KSB7CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIGxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxp
c3Q+KCp2YWx1ZSk7CisgICAgICAgICAgICBBU1NFUlQobGlzdC5sZW5ndGgoKSA9PSAyKTsKKyAg
ICAgICAgICAgIGlmIChsaXN0Lmxlbmd0aCgpICE9IDIpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI7ICsraSkgewotICAgICAg
ICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhp
KTsKLSAgICAgICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAg
ICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhp
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSkpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZShpdGVtKTsKLSAgICAgICAgICAg
ICAgICBpZiAodmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUZpbGxlZCB8fCB2YWx1ZS0+
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlT3BlbikKLSAgICAgICAgICAgICAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbCgqdmFsdWUpOworICAgICAgICAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqaXRlbSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmdldFZhbHVlSUQoKSA9PSBD
U1NWYWx1ZUZpbGxlZCB8fCB2YWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVPcGVuKQorICAg
ICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNG
aWxsKHZhbHVlKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoKnZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFy
ayh2YWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
dG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBw
cmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogCi0g
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNTdHJpbmcoKSkgeworICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUuaXNTdHJpbmcoKSkgewogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChUZXh0RW1waGFzaXNGaWxsRmlsbGVkKTsKICAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVt
cGhhc2lzTWFya0N1c3RvbSk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5z
ZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgp
KTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1
c3RvbU1hcmsocHJpbWl0aXZlVmFsdWUuZ2V0U3RyaW5nVmFsdWUoKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRU
ZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKTsKIAotICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUZpbGxlZCB8fCBwcmltaXRpdmVWYWx1ZS0+
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlT3BlbikgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbCgqcHJpbWl0aXZlVmFsdWUpOworICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlRmlsbGVkIHx8IHBy
aW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU9wZW4pIHsKKyAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwocHJpbWl0aXZlVmFs
dWUpOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lz
TWFyayhUZXh0RW1waGFzaXNNYXJrQXV0byk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNp
c0ZpbGxGaWxsZWQpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4
dEVtcGhhc2lzTWFyaygqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTE4MTUsMTQgKzE4MTUsMTQgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eVRl
eHRFbXBoYXNpc1Bvc2l0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0g
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNQb3NpdGlv
bih2YWx1ZVRvRW1waGFzaXNQb3NpdGlvbigqdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSkpKTsK
KyAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSB7CisgICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNQb3NpdGlvbih2YWx1ZVRv
RW1waGFzaXNQb3NpdGlvbihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgVGV4dEVtcGhhc2lzUG9z
aXRpb24gcG9zaXRpb24gPSAwOwogICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGko
dmFsdWUpOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpCi0gICAgICAgICAgICBwb3NpdGlvbiB8
PSB2YWx1ZVRvRW1waGFzaXNQb3NpdGlvbigqdG9DU1NQcmltaXRpdmVWYWx1ZShpLnZhbHVlKCkp
KTsKKyAgICAgICAgICAgIHBvc2l0aW9uIHw9IHZhbHVlVG9FbXBoYXNpc1Bvc2l0aW9uKGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaS52YWx1ZSgpKSk7CiAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc1Bvc2l0aW9uKHBvc2l0aW9uKTsKICAgICB9CiAg
ICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTE5MzUsMTMgKzE5
MzUsMTMgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eVJlc2l6ZSB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpOwogCiAgICAgICAgIEVSZXNpemUgciA9IFJFU0laRV9OT05FOwotICAgICAgICBzd2l0
Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICAgICAgc3dpdGNoIChwcmlt
aXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBjYXNlIENTU1ZhbHVlQXV0bzoKQEAgLTE5NDksNyArMTk0OSw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICByID0gc2V0dGluZ3MtPnRleHRBcmVhc0FyZVJlc2l6
YWJsZSgpID8gUkVTSVpFX0JPVEggOiBSRVNJWkVfTk9ORTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgciA9ICpwcmltaXRpdmVWYWx1ZTsKKyAgICAg
ICAgICAgIHIgPSBwcmltaXRpdmVWYWx1ZTsKICAgICAgICAgfQogICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRSZXNpemUocik7CiAgICAgfQpAQCAtMTk2NSwxNSArMTk2NSwxNSBA
QCBjbGFzcyBBcHBseVByb3BlcnR5VmVydGljYWxBbGlnbiB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpOwogCi0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpKQotICAg
ICAgICAgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFZlcnRpY2FsQWxpZ24o
KnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQo
KSkKKyAgICAgICAgICAgIHJldHVybiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRWZXJ0aWNh
bEFsaWduKHByaW1pdGl2ZVZhbHVlKTsKIAotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRWZXJ0aWNhbEFsaWduTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8
Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENv
bnZlcnNpb24+KHN0eWxlUmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSgpKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFZlcnRpY2FsQWxpZ25M
ZW5ndGgocHJpbWl0aXZlVmFsdWUuY29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNp
b24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdHlsZVJlc29s
dmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSkpOwogICAgIH0KIAogICAg
IHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC0yMDAzLDI2ICsyMDAz
LDI2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsK
LSAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFs
dWUpOworICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogCi0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUt
PmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pCisgICAgICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykKICAgICAgICAgICAgICAgICByZXR1
cm4gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9UeXBlKEFzcGVjdFJhdGlv
QXV0byk7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBD
U1NWYWx1ZUZyb21EaW1lbnNpb25zKQorICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdl
dFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUZyb21EaW1lbnNpb25zKQogICAgICAgICAgICAgICAgIHJl
dHVybiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb1R5cGUoQXNwZWN0UmF0
aW9Gcm9tRGltZW5zaW9ucyk7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZh
bHVlSUQoKSA9PSBDU1NWYWx1ZUZyb21JbnRyaW5zaWMpCisgICAgICAgICAgICBpZiAocHJpbWl0
aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlRnJvbUludHJpbnNpYykKICAgICAgICAg
ICAgICAgICByZXR1cm4gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9UeXBl
KEFzcGVjdFJhdGlvRnJvbUludHJpbnNpYyk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIXZh
bHVlLT5pc0FzcGVjdFJhdGlvVmFsdWUoKSkgeworICAgICAgICBpZiAoIWlzPENTU0FzcGVjdFJh
dGlvVmFsdWU+KCp2YWx1ZSkpIHsKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldEFzcGVjdFJhdGlvVHlwZShBc3BlY3RSYXRpb0F1dG8pOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKLSAgICAgICAgQ1NTQXNwZWN0UmF0aW9WYWx1ZSogYXNwZWN0UmF0aW9W
YWx1ZSA9IHRvQ1NTQXNwZWN0UmF0aW9WYWx1ZSh2YWx1ZSk7CisgICAgICAgIENTU0FzcGVjdFJh
dGlvVmFsdWUmIGFzcGVjdFJhdGlvVmFsdWUgPSBkb3duY2FzdDxDU1NBc3BlY3RSYXRpb1ZhbHVl
PigqdmFsdWUpOwogICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRp
b1R5cGUoQXNwZWN0UmF0aW9TcGVjaWZpZWQpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKGFzcGVjdFJhdGlvVmFsdWUtPmRlbm9taW5h
dG9yVmFsdWUoKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJh
dGlvTnVtZXJhdG9yKGFzcGVjdFJhdGlvVmFsdWUtPm51bWVyYXRvclZhbHVlKCkpOworICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKGFzcGVj
dFJhdGlvVmFsdWUuZGVub21pbmF0b3JWYWx1ZSgpKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3IoYXNwZWN0UmF0aW9WYWx1ZS5udW1lcmF0
b3JWYWx1ZSgpKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhh
bmRsZXIoKQpAQCAtMjA1NCwyNiArMjA1NCwyNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAg
ICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlKSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogCi0gICAgICAgIGlmIChwcmlt
aXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKSB7CisgICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKICAgICAg
ICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKICAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwotICAgICAg
ICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVSZXNl
dCkgeworICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBD
U1NWYWx1ZVJlc2V0KSB7CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRFZmZlY3RpdmVa
b29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKICAgICAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwotICAgICAgICB9IGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVEb2N1bWVudCkgewor
ICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1
ZURvY3VtZW50KSB7CiAgICAgICAgICAgICBmbG9hdCBkb2Nab29tID0gc3R5bGVSZXNvbHZlci0+
cm9vdEVsZW1lbnRTdHlsZSgpID8gc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLT56
b29tKCkgOiBSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKTsKICAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXItPnNldEVmZmVjdGl2ZVpvb20oZG9jWm9vbSk7CiAgICAgICAgICAgICBzdHlsZVJlc29s
dmVyLT5zZXRab29tKGRvY1pvb20pOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LT5pc1BlcmNlbnRhZ2UoKSkgeworICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlz
UGVyY2VudGFnZSgpKSB7CiAgICAgICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNv
bHZlcik7Ci0gICAgICAgICAgICBpZiAoZmxvYXQgcGVyY2VudCA9IHByaW1pdGl2ZVZhbHVlLT5n
ZXRGbG9hdFZhbHVlKCkpCisgICAgICAgICAgICBpZiAoZmxvYXQgcGVyY2VudCA9IHByaW1pdGl2
ZVZhbHVlLmdldEZsb2F0VmFsdWUoKSkKICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5z
ZXRab29tKHBlcmNlbnQgLyAxMDAuMGYpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc051bWJlcigpKSB7CisgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNO
dW1iZXIoKSkgewogICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIp
OwotICAgICAgICAgICAgaWYgKGZsb2F0IG51bWJlciA9IHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9h
dFZhbHVlKCkpCisgICAgICAgICAgICBpZiAoZmxvYXQgbnVtYmVyID0gcHJpbWl0aXZlVmFsdWUu
Z2V0RmxvYXRWYWx1ZSgpKQogICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20o
bnVtYmVyKTsKICAgICAgICAgfQogICAgIH0KQEAgLTIxMDgsMTAgKzIxMDgsMTAgQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgRURpc3BsYXkg
ZGlzcGxheSA9ICp0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgRURpc3BsYXkg
ZGlzcGxheSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogCiAgICAgICAg
IGlmICghaXNWYWxpZERpc3BsYXlWYWx1ZShzdHlsZVJlc29sdmVyLCBkaXNwbGF5KSkKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTIxMzEsOCArMjEzMSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
dm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIFBhc3NSZWZQdHI8Q2xpcFBhdGhPcGVy
YXRpb24+IHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KICAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVlKTsKKyAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZh
bHVlPigqdmFsdWUpKSB7CisgICAgICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogICAgICAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICAgICAgc2V0
VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgMCk7CiAgICAgICAgICAgICBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19V
UkkpIHsKQEAgLTIxNDMsMTMgKzIxNDMsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVM
aXN0KCkpCisgICAgICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBDU1NCb3hUeXBlIHJlZmVyZW5jZUJveCA9IEJveE1pc3Npbmc7
CiAgICAgICAgIFJlZlB0cjxDbGlwUGF0aE9wZXJhdGlvbj4gb3BlcmF0aW9uOwotICAgICAgICBh
dXRvJiB2YWx1ZUxpc3QgPSB0b0NTU1ZhbHVlTGlzdCgqdmFsdWUpOworICAgICAgICBhdXRvJiB2
YWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZUxpc3QubGVuZ3RoKCk7ICsraSkgewotICAgICAgICAg
ICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZUxpc3Qu
aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7CisgICAgICAgICAgICBhdXRvJiBwcmltaXRpdmVW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWVMaXN0Lml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soaSkpOwogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzU2hhcGUo
KSAmJiAhb3BlcmF0aW9uKQogICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IFNoYXBlQ2xpcFBh
dGhPcGVyYXRpb246OmNyZWF0ZShiYXNpY1NoYXBlRm9yVmFsdWUoc3R5bGVSZXNvbHZlci0+c3Rh
dGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCksIHByaW1pdGl2ZVZhbHVlLmdldFNoYXBl
VmFsdWUoKSkpOwogICAgICAgICAgICAgZWxzZSBpZiAoKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVl
SUQoKSA9PSBDU1NWYWx1ZUNvbnRlbnRCb3gKQEAgLTIxODYsMjYgKzIxODYsMjYgQEAgcHVibGlj
OgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgUGFzc1JlZlB0
cjxTaGFwZVZhbHVlPiB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9
CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAg
ICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0g
ICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1
dG8pCisgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkgeworICAgICAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0
VmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykKICAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLCAwKTsKICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNJbWFn
ZVZhbHVlKCkgfHwgdmFsdWUtPmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpIHx8IHZhbHVlLT5pc0lt
YWdlU2V0VmFsdWUoKSkgewogICAgICAgICAgICAgUmVmUHRyPFNoYXBlVmFsdWU+IHNoYXBlID0g
U2hhcGVWYWx1ZTo6Y3JlYXRlSW1hZ2VWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKHBy
b3BlcnR5LCB2YWx1ZSkpOwogICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgc2hhcGUucmVsZWFzZSgpKTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNWYWx1
ZUxpc3QoKSkgeworICAgICAgICB9IGVsc2UgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkg
ewogICAgICAgICAgICAgUmVmUHRyPEJhc2ljU2hhcGU+IHNoYXBlOwogICAgICAgICAgICAgQ1NT
Qm94VHlwZSByZWZlcmVuY2VCb3ggPSBCb3hNaXNzaW5nOwotICAgICAgICAgICAgQ1NTVmFsdWVM
aXN0KiB2YWx1ZUxpc3QgPSB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSk7Ci0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVMaXN0LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRp
dmVWYWx1ZSh2YWx1ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOwotICAgICAgICAg
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNTaGFwZSgpKQotICAgICAgICAgICAgICAgICAg
ICBzaGFwZSA9IGJhc2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEoKSwgcHJpbWl0aXZlVmFsdWUtPmdldFNoYXBlVmFsdWUoKSk7
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9
PSBDU1NWYWx1ZUNvbnRlbnRCb3gKLSAgICAgICAgICAgICAgICAgICAgfHwgcHJpbWl0aXZlVmFs
dWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUJvcmRlckJveAotICAgICAgICAgICAgICAgICAg
ICB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlUGFkZGluZ0JveAot
ICAgICAgICAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENT
U1ZhbHVlTWFyZ2luQm94KQotICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VCb3ggPSBDU1NC
b3hUeXBlKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIHZhbHVl
TGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZUxpc3QubGVuZ3RoKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWVMaXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOworICAg
ICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1NoYXBlKCkpCisgICAgICAgICAgICAg
ICAgICAgIHNoYXBlID0gYmFzaWNTaGFwZUZvclZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0YXRlKCku
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLCBwcmltaXRpdmVWYWx1ZS5nZXRTaGFwZVZhbHVl
KCkpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQo
KSA9PSBDU1NWYWx1ZUNvbnRlbnRCb3gKKyAgICAgICAgICAgICAgICAgICAgfHwgcHJpbWl0aXZl
VmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQm9yZGVyQm94CisgICAgICAgICAgICAgICAg
ICAgIHx8IHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVBhZGRpbmdCb3gK
KyAgICAgICAgICAgICAgICAgICAgfHwgcHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENT
U1ZhbHVlTWFyZ2luQm94KQorICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VCb3ggPSBDU1NC
b3hUeXBlKHByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTIyNDUsMjMgKzIyNDUsMjMgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAg
ICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICBpZiAoIWlzPENTU1ZhbHVlTGlz
dD4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQ1NTVmFsdWVMaXN0KiB2
YWx1ZUxpc3QgPSB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSk7CisgICAgICAgIENTU1ZhbHVlTGlzdCYg
dmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpOwogICAgICAgICBJbWFn
ZVJlc29sdXRpb25Tb3VyY2Ugc291cmNlID0gUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29s
dXRpb25Tb3VyY2UoKTsKICAgICAgICAgSW1hZ2VSZXNvbHV0aW9uU25hcCBzbmFwID0gUmVuZGVy
U3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25TbmFwKCk7CiAgICAgICAgIGRvdWJsZSByZXNv
bHV0aW9uID0gUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb24oKTsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZUxpc3QtPmxlbmd0aCgpOyBpKyspIHsKLSAgICAg
ICAgICAgIENTU1ZhbHVlKiBpdGVtID0gdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KGkpOwotICAgICAgICAgICAgaWYgKCFpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVMaXN0Lmxlbmd0aCgpOyBpKyspIHsKKyAgICAg
ICAgICAgIENTU1ZhbHVlKiBpdGVtID0gdmFsdWVMaXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
aSk7CisgICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGl0ZW0pOwotICAgICAgICAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVGcm9tSW1hZ2UpCisgICAg
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oKml0ZW0pOworICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdl
dFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUZyb21JbWFnZSkKICAgICAgICAgICAgICAgICBzb3VyY2Ug
PSBJbWFnZVJlc29sdXRpb25Gcm9tSW1hZ2U7Ci0gICAgICAgICAgICBlbHNlIGlmIChwcmltaXRp
dmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlU25hcCkKKyAgICAgICAgICAgIGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVNuYXApCiAgICAgICAg
ICAgICAgICAgc25hcCA9IEltYWdlUmVzb2x1dGlvblNuYXBQaXhlbHM7CiAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgcmVzb2x1dGlvbiA9IHByaW1pdGl2ZVZhbHVlLT5nZXREb3Vi
bGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQUFgpOworICAgICAgICAgICAgICAgIHJl
c29sdXRpb24gPSBwcmltaXRpdmVWYWx1ZS5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX0RQUFgpOwogICAgICAgICB9CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldEltYWdlUmVzb2x1dGlvblNvdXJjZShzb3VyY2UpOwogICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25TbmFwKHNuYXApOwpAQCAtMjI5Nyw3ICsyMjk3
LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewot
ICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICBpZiAoIWlzPENTU1Zh
bHVlTGlzdD4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBMZW5ndGgg
bGVuZ3RoT3JQZXJjZW50YWdlVmFsdWU7CkBAIC0yMzA1LDE5ICsyMzA1LDE5IEBAIHB1YmxpYzoK
ICAgICAgICAgVGV4dEluZGVudExpbmUgdGV4dEluZGVudExpbmVWYWx1ZSA9IFJlbmRlclN0eWxl
Ojppbml0aWFsVGV4dEluZGVudExpbmUoKTsKICAgICAgICAgVGV4dEluZGVudFR5cGUgdGV4dElu
ZGVudFR5cGVWYWx1ZSA9IFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEluZGVudFR5cGUoKTsKICNl
bmRpZgotICAgICAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9IHRvQ1NTVmFsdWVMaXN0KHZh
bHVlKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZUxpc3QtPmxlbmd0aCgp
OyArK2kpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gdmFsdWVMaXN0LT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKGkpOwotICAgICAgICAgICAgaWYgKCFpdGVtLT5pc1ByaW1pdGl2ZVZh
bHVlKCkpCisgICAgICAgIENTU1ZhbHVlTGlzdCYgdmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFs
dWVMaXN0PigqdmFsdWUpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlTGlz
dC5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IHZhbHVlTGlz
dC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAgICAgaWYgKCFpczxDU1NQcmlt
aXRpdmVWYWx1ZT4oKml0ZW0pKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKGl0ZW0pOwotICAgICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgp
KQotICAgICAgICAgICAgICAgIGxlbmd0aE9yUGVyY2VudGFnZVZhbHVlID0gcHJpbWl0aXZlVmFs
dWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZl
cnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NU
b0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOworICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUm
IHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKTsKKyAg
ICAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpKQorICAgICAgICAgICAg
ICAgIGxlbmd0aE9yUGVyY2VudGFnZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUuY29udmVydFRvTGVu
Z3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0
ZWRDb252ZXJzaW9uPihzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEoKSk7CiAjaWYgRU5BQkxFKENTUzNfVEVYVCkKLSAgICAgICAgICAgIGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRFYWNoTGluZSkKKyAg
ICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1
ZVdlYmtpdEVhY2hMaW5lKQogICAgICAgICAgICAgICAgIHRleHRJbmRlbnRMaW5lVmFsdWUgPSBU
ZXh0SW5kZW50RWFjaExpbmU7Ci0gICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Via2l0SGFuZ2luZykKKyAgICAgICAgICAgIGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdlYmtpdEhhbmdpbmcp
CiAgICAgICAgICAgICAgICAgdGV4dEluZGVudFR5cGVWYWx1ZSA9IFRleHRJbmRlbnRIYW5naW5n
OwogI2VuZGlmCiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRp
YUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhTGlzdC5jcHAKaW5kZXggOTQ0NTA4
NjNmMWI5M2FjNmE3MzU4OTZiMmNhOTJiMWZmYmRlYTRhZi4uZWU2NjcxMjA0MjQyNjBlOGRiMzVm
NTIyOGEzZTQ1ZWFjMTMyMzIwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlh
TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhTGlzdC5jcHAKQEAgLTMzMiwx
MCArMzMyLDEwIEBAIHZvaWQgcmVwb3J0TWVkaWFRdWVyeVdhcm5pbmdJZk5lZWRlZChEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IE1lZGlhUXVlcnlTZXQqIG1lCiAgICAgICAgICAgICAgICAgY29u
c3QgTWVkaWFRdWVyeUV4cCogZXhwID0gZXhwcmVzc2lvbnMuYXQoaikuZ2V0KCk7CiAgICAgICAg
ICAgICAgICAgaWYgKGV4cC0+bWVkaWFGZWF0dXJlKCkgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OnJl
c29sdXRpb25NZWRpYUZlYXR1cmUgfHwgZXhwLT5tZWRpYUZlYXR1cmUoKSA9PSBNZWRpYUZlYXR1
cmVOYW1lczo6bWF4X3Jlc29sdXRpb25NZWRpYUZlYXR1cmUgfHwgZXhwLT5tZWRpYUZlYXR1cmUo
KSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluX3Jlc29sdXRpb25NZWRpYUZlYXR1cmUpIHsKICAg
ICAgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGNzc1ZhbHVlID0gIGV4cC0+dmFsdWUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGNzc1ZhbHVlICYmIGNzc1ZhbHVlLT5pc1ByaW1pdGl2ZVZh
bHVlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmlt
aXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoY3NzVmFsdWUpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0RvdHNQZXJJbmNoKCkgfHwgcHJpbWl0
aXZlVmFsdWUtPmlzRG90c1BlckNlbnRpbWV0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhZGRSZXNvbHV0aW9uV2FybmluZ01lc3NhZ2VUb0NvbnNvbGUoZG9jdW1lbnQsIG1lZGlh
UXVlcnlTZXQtPm1lZGlhVGV4dCgpLCBwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oY3NzVmFsdWUpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKmNzc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZS5pc0RvdHNQZXJJbmNoKCkgfHwgcHJpbWl0aXZlVmFsdWUuaXNEb3Rz
UGVyQ2VudGltZXRlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJlc29sdXRp
b25XYXJuaW5nTWVzc2FnZVRvQ29uc29sZShkb2N1bWVudCwgbWVkaWFRdWVyeVNldC0+bWVkaWFU
ZXh0KCksICZwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
TWVkaWFRdWVyeUV2YWx1YXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2
YWx1YXRvci5jcHAKaW5kZXggZTE4YjkxMTQwNWZhNjdkOGJmNjZlMTExNzliMTViZGJhNmJkNDQ1
Zi4uMTYyYzU4ZWViMGE3Mjg5YmIyODdkMWRmZjVmMDQwNGY0YjNmY2MwZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcApAQCAtMTg2LDkgKzE4Niw5IEBAIGJv
b2wgY29tcGFyZVZhbHVlKFQgYSwgVCBiLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiAKIHN0YXRp
YyBib29sIGNvbXBhcmVBc3BlY3RSYXRpb1ZhbHVlKENTU1ZhbHVlKiB2YWx1ZSwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0LCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0gICAgaWYgKHZhbHVlLT5p
c0FzcGVjdFJhdGlvVmFsdWUoKSkgewotICAgICAgICBDU1NBc3BlY3RSYXRpb1ZhbHVlKiBhc3Bl
Y3RSYXRpbyA9IHRvQ1NTQXNwZWN0UmF0aW9WYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBj
b21wYXJlVmFsdWUod2lkdGggKiBzdGF0aWNfY2FzdDxpbnQ+KGFzcGVjdFJhdGlvLT5kZW5vbWlu
YXRvclZhbHVlKCkpLCBoZWlnaHQgKiBzdGF0aWNfY2FzdDxpbnQ+KGFzcGVjdFJhdGlvLT5udW1l
cmF0b3JWYWx1ZSgpKSwgb3ApOworICAgIGlmIChpczxDU1NBc3BlY3RSYXRpb1ZhbHVlPigqdmFs
dWUpKSB7CisgICAgICAgIENTU0FzcGVjdFJhdGlvVmFsdWUmIGFzcGVjdFJhdGlvID0gZG93bmNh
c3Q8Q1NTQXNwZWN0UmF0aW9WYWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVW
YWx1ZSh3aWR0aCAqIHN0YXRpY19jYXN0PGludD4oYXNwZWN0UmF0aW8uZGVub21pbmF0b3JWYWx1
ZSgpKSwgaGVpZ2h0ICogc3RhdGljX2Nhc3Q8aW50Pihhc3BlY3RSYXRpby5udW1lcmF0b3JWYWx1
ZSgpKSwgb3ApOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTE5Niw5ICsxOTYsOSBA
QCBzdGF0aWMgYm9vbCBjb21wYXJlQXNwZWN0UmF0aW9WYWx1ZShDU1NWYWx1ZSogdmFsdWUsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgTWVkaQogCiBzdGF0aWMgYm9vbCBudW1iZXJWYWx1ZShDU1NW
YWx1ZSogdmFsdWUsIGZsb2F0JiByZXN1bHQpCiB7Ci0gICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkKLSAgICAgICAgJiYgdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSktPmlzTnVtYmVy
KCkpIHsKLSAgICAgICAgcmVzdWx0ID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSktPmdldEZs
b2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgIGlmIChpczxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnZhbHVlKQorICAgICAgICAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKS5pc051bWJlcigpKSB7CisgICAgICAgIHJlc3VsdCA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMjQ2LDggKzI0Niw4IEBAIHN0YXRpYyBib29sIG9yaWVudGF0aW9uTWVkaWFGZWF0
dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyCiAKICAgICBp
bnQgd2lkdGggPSB2aWV3LT5sYXlvdXRXaWR0aCgpOwogICAgIGludCBoZWlnaHQgPSB2aWV3LT5s
YXlvdXRIZWlnaHQoKTsKLSAgICBpZiAodmFsdWUgJiYgdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkgewotICAgICAgICBjb25zdCBDU1NWYWx1ZUlEIGlkID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2
YWx1ZSktPmdldFZhbHVlSUQoKTsKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KSkgeworICAgICAgICBjb25zdCBDU1NWYWx1ZUlEIGlkID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpOwogICAgICAgICBpZiAod2lkdGggPiBoZWlnaHQp
IC8vIFNxdWFyZSB2aWV3cG9ydCBpcyBwb3J0cmFpdC4KICAgICAgICAgICAgIHJldHVybiBDU1NW
YWx1ZUxhbmRzY2FwZSA9PSBpZDsKICAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9ydHJhaXQgPT0g
aWQ7CkBAIC0zMDgsMjIgKzMwOCwyMiBAQCBzdGF0aWMgYm9vbCBldmFsUmVzb2x1dGlvbihDU1NW
YWx1ZSogdmFsdWUsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogICAgIGlm
ICghdmFsdWUpCiAgICAgICAgIHJldHVybiAhIWRldmljZVNjYWxlRmFjdG9yOwogCi0gICAgaWYg
KCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiByZXNvbHV0aW9uID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgcmV0dXJu
IGNvbXBhcmVWYWx1ZShkZXZpY2VTY2FsZUZhY3RvciwgcmVzb2x1dGlvbi0+aXNOdW1iZXIoKSA/
IHJlc29sdXRpb24tPmdldEZsb2F0VmFsdWUoKSA6IHJlc29sdXRpb24tPmdldEZsb2F0VmFsdWUo
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUFBYKSwgb3ApOworICAgIENTU1ByaW1pdGl2ZVZhbHVl
JiByZXNvbHV0aW9uID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAg
cmV0dXJuIGNvbXBhcmVWYWx1ZShkZXZpY2VTY2FsZUZhY3RvciwgcmVzb2x1dGlvbi5pc051bWJl
cigpID8gcmVzb2x1dGlvbi5nZXRGbG9hdFZhbHVlKCkgOiByZXNvbHV0aW9uLmdldEZsb2F0VmFs
dWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUFBYKSwgb3ApOwogfQogCiBzdGF0aWMgYm9vbCBk
ZXZpY2VfcGl4ZWxfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlICp2YWx1ZSwgY29uc3Qg
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJl
Zml4IG9wKQogewotICAgIHJldHVybiAoIXZhbHVlIHx8IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFs
dWUpLT5pc051bWJlcigpKSAmJiBldmFsUmVzb2x1dGlvbih2YWx1ZSwgZnJhbWUsIG9wKTsKKyAg
ICByZXR1cm4gKCF2YWx1ZSB8fCBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5p
c051bWJlcigpKSAmJiBldmFsUmVzb2x1dGlvbih2YWx1ZSwgZnJhbWUsIG9wKTsKIH0KIAogc3Rh
dGljIGJvb2wgcmVzb2x1dGlvbk1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQ
cmVmaXggb3ApCiB7CiAjaWYgRU5BQkxFKFJFU09MVVRJT05fTUVESUFfUVVFUlkpCi0gICAgcmV0
dXJuICghdmFsdWUgfHwgdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSktPmlzUmVzb2x1dGlvbigp
KSAmJiBldmFsUmVzb2x1dGlvbih2YWx1ZSwgZnJhbWUsIG9wKTsKKyAgICByZXR1cm4gKCF2YWx1
ZSB8fCBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5pc1Jlc29sdXRpb24oKSkg
JiYgZXZhbFJlc29sdXRpb24odmFsdWUsIGZyYW1lLCBvcCk7CiAjZWxzZQogICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGZyYW1lKTsKQEAgLTM0NCwxOCArMzQ0LDE4
IEBAIHN0YXRpYyBib29sIGdyaWRNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29u
c3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0CiAKIHN0YXRpYyBib29sIGNvbXB1dGVMZW5ndGgo
Q1NTVmFsdWUqIHZhbHVlLCBib29sIHN0cmljdCwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSYgY29udmVyc2lvbkRhdGEsIGludCYgcmVzdWx0KQogewotICAgIGlmICghdmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICBDU1NQcmltaXRpdmVW
YWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KTsKIAotICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgewotICAgICAgICByZXN1
bHQgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKTsKKyAgICBpZiAocHJpbWl0aXZlVmFs
dWUuaXNOdW1iZXIoKSkgeworICAgICAgICByZXN1bHQgPSBwcmltaXRpdmVWYWx1ZS5nZXRJbnRW
YWx1ZSgpOwogICAgICAgICByZXR1cm4gIXN0cmljdCB8fCAhcmVzdWx0OwogICAgIH0KIAotICAg
IGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewotICAgICAgICByZXN1bHQgPSBwcmlt
aXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KGNvbnZlcnNpb25EYXRhKTsKKyAgICBpZiAo
cHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkgeworICAgICAgICByZXN1bHQgPSBwcmltaXRpdmVW
YWx1ZS5jb21wdXRlTGVuZ3RoPGludD4oY29udmVyc2lvbkRhdGEpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKQEAgLTU5Myw3ICs1OTMsNyBAQCBzdGF0aWMgYm9vbCB2aWV3X21vZGVN
ZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aQogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgY29uc3QgaW50
IHZpZXdNb2RlQ1NTS2V5d29yZElEID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSktPmdldFZh
bHVlSUQoKTsKKyAgICBjb25zdCBpbnQgdmlld01vZGVDU1NLZXl3b3JkSUQgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCk7CiAgICAgY29uc3QgUGFnZTo6
Vmlld01vZGUgdmlld01vZGUgPSBmcmFtZS0+cGFnZSgpLT52aWV3TW9kZSgpOwogICAgIGJvb2wg
cmVzdWx0ID0gZmFsc2U7CiAgICAgc3dpdGNoICh2aWV3TW9kZSkgewpAQCAtNjg4LDEwICs2ODgs
MTAgQEAgc3RhdGljIGJvb2wgcG9pbnRlck1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVl
LCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb24KICAgICBpZiAoIXZhbHVlKQogICAgICAgICBy
ZXR1cm4gcG9pbnRlciAhPSBOb1BvaW50ZXI7CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgQ1NTVmFsdWVJRCBpZCA9IHRvQ1NTUHJpbWl0
aXZlVmFsdWUodmFsdWUpLT5nZXRWYWx1ZUlEKCk7CisgICAgY29uc3QgQ1NTVmFsdWVJRCBpZCA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKTsKICAgICBy
ZXR1cm4gKHBvaW50ZXIgPT0gTm9Qb2ludGVyICYmIGlkID09IENTU1ZhbHVlTm9uZSkKICAgICAg
ICAgfHwgKHBvaW50ZXIgPT0gVG91Y2hQb2ludGVyICYmIGlkID09IENTU1ZhbHVlQ29hcnNlKQog
ICAgICAgICB8fCAocG9pbnRlciA9PSBNb3VzZVBvaW50ZXIgJiYgaWQgPT0gQ1NTVmFsdWVGaW5l
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCBmYTQz
MjFlOGI3YmI0NGI5YTdiNmUxNDdhZTIyMjFiMzQ5MGE3ZTIyLi42ODU0OTQ1OTE3YzZlNDkxNjhl
NGQyY2ZhY2RlMGZkZWM3NmRmMzI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZH
Q1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxl
U2VsZWN0b3IuY3BwCkBAIC0xMDMsOSArMTAzLDkgQEAgc3RhdGljIENvbG9yIGNvbG9yRnJvbVNW
R0NvbG9yQ1NTVmFsdWUoU1ZHQ29sb3IqIHN2Z0NvbG9yLCBjb25zdCBDb2xvciYgZmdDb2xvcikK
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgQVNTRVJUKHZhbHVlKTsKLSAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSAwOwotICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQotICAgICAgICBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUp
OworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IG51bGxwdHI7CisgICAg
aWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQorICAgICAgICBwcmltaXRpdmVWYWx1
ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAKICAgICBjb25zdCBTdGF0
ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0YXRl
LnN0eWxlKCktPmFjY2Vzc1NWR1N0eWxlKCk7CkBAIC0yMDgsMTMgKzIwOCwxMyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICAgICAgLy8gJ25vcm1hbCcgaXMgdGhlIG9ubHkgcHJpbWl0aXZlVmFs
dWUKICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgICAgICBzdmdT
dHlsZS5zZXRQYWludE9yZGVyKFBhaW50T3JkZXJOb3JtYWwpOwotICAgICAgICAgICAgaWYgKCF2
YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0Pigq
dmFsdWUpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgQ1NTVmFsdWVMaXN0
KiBvcmRlclR5cGVMaXN0ID0gdG9DU1NWYWx1ZUxpc3QodmFsdWUpOworICAgICAgICAgICAgQ1NT
VmFsdWVMaXN0JiBvcmRlclR5cGVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUp
OwogCiAgICAgICAgICAgICAvLyBTZXJpYWxpemF0aW9uIGhhcHBlbmVkIGR1cmluZyBwYXJzaW5n
LiBObyBhZGRpdGlvbmFsIGNoZWNraW5nIG5lZWRlZC4KLSAgICAgICAgICAgIHVuc2lnbmVkIGxl
bmd0aCA9IG9yZGVyVHlwZUxpc3QtPmxlbmd0aCgpOwotICAgICAgICAgICAgcHJpbWl0aXZlVmFs
dWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKG9yZGVyVHlwZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soMCkpOworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gb3JkZXJUeXBlTGlzdC5s
ZW5ndGgoKTsKKyAgICAgICAgICAgIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KG9yZGVyVHlwZUxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7CiAgICAg
ICAgICAgICBQYWludE9yZGVyIHBhaW50T3JkZXI7CiAgICAgICAgICAgICBzd2l0Y2ggKHByaW1p
dGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVGaWxs
OgpAQCAtMjY2LDkgKzI2Niw5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgc3Zn
U3R5bGUuc2V0RmlsbFBhaW50KFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50VHlwZSgp
LCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludENvbG9yKCksIFNWR1JlbmRlclN0eWxl
Ojppbml0aWFsRmlsbFBhaW50VXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBh
cHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdQYWludCgpKSB7
Ci0gICAgICAgICAgICAgICAgU1ZHUGFpbnQqIHN2Z1BhaW50ID0gdG9TVkdQYWludCh2YWx1ZSk7
Ci0gICAgICAgICAgICAgICAgc3ZnU3R5bGUuc2V0RmlsbFBhaW50KHN2Z1BhaW50LT5wYWludFR5
cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUoKS0+
Y29sb3IoKSksIHN2Z1BhaW50LT51cmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCks
IGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CisgICAgICAgICAgICBpZiAoaXM8
U1ZHUGFpbnQ+KCp2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBTVkdQYWludCYgc3ZnUGFpbnQg
PSBkb3duY2FzdDxTVkdQYWludD4oKnZhbHVlKTsKKyAgICAgICAgICAgICAgICBzdmdTdHlsZS5z
ZXRGaWxsUGFpbnQoc3ZnUGFpbnQucGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFs
dWUoJnN2Z1BhaW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFpbnQudXJpKCksIGFw
cGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTI4MywzMCArMjgzLDMwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAgc3ZnU3R5
bGUuc2V0U3Ryb2tlUGFpbnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFR5cGUo
KSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludENvbG9yKCksIFNWR1JlbmRlclN0
eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxl
KCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR1BhaW50
KCkpIHsKLSAgICAgICAgICAgICAgICBTVkdQYWludCogc3ZnUGFpbnQgPSB0b1NWR1BhaW50KHZh
bHVlKTsKLSAgICAgICAgICAgICAgICBzdmdTdHlsZS5zZXRTdHJva2VQYWludChzdmdQYWludC0+
cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0
eWxlKCktPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJT
dHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgICAgICAgICAg
aWYgKGlzPFNWR1BhaW50PigqdmFsdWUpKSB7CisgICAgICAgICAgICAgICAgU1ZHUGFpbnQmIHN2
Z1BhaW50ID0gZG93bmNhc3Q8U1ZHUGFpbnQ+KCp2YWx1ZSk7CisgICAgICAgICAgICAgICAgc3Zn
U3R5bGUuc2V0U3Ryb2tlUGFpbnQoc3ZnUGFpbnQucGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0Nv
bG9yQ1NTVmFsdWUoJnN2Z1BhaW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFpbnQu
dXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5VG9WaXNp
dGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZURhc2hhcnJheToKICAgICAgICAg
ewogICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoc3Ryb2tlRGFzaEFycmF5
LCBTdHJva2VEYXNoQXJyYXkpCi0gICAgICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgp
KSB7CisgICAgICAgICAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkgewogICAgICAg
ICAgICAgICAgIHN2Z1N0eWxlLnNldFN0cm9rZURhc2hBcnJheShTVkdSZW5kZXJTdHlsZTo6aW5p
dGlhbFN0cm9rZURhc2hBcnJheSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiBkYXNoZXMgPSB0b0NTU1ZhbHVlTGlz
dCh2YWx1ZSk7CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIGRhc2hlcyA9IGRvd25jYXN0PENT
U1ZhbHVlTGlzdD4oKnZhbHVlKTsKIAogICAgICAgICAgICAgVmVjdG9yPFNWR0xlbmd0aD4gYXJy
YXk7Ci0gICAgICAgICAgICBzaXplX3QgbGVuZ3RoID0gZGFzaGVzLT5sZW5ndGgoKTsKKyAgICAg
ICAgICAgIHNpemVfdCBsZW5ndGggPSBkYXNoZXMubGVuZ3RoKCk7CiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgQ1NTVmFs
dWUqIGN1cnJWYWx1ZSA9IGRhc2hlcy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIWN1cnJWYWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAg
ICAgICAgIENTU1ZhbHVlKiBjdXJyVmFsdWUgPSBkYXNoZXMuaXRlbVdpdGhvdXRCb3VuZHNDaGVj
ayhpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqY3VyclZh
bHVlKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSogZGFzaCA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoZGFzaGVzLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKKyAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogZGFzaCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihkYXNoZXMuaXRlbVdpdGhvdXRC
b3VuZHNDaGVjayhpKSk7CiAgICAgICAgICAgICAgICAgYXJyYXkuYXBwZW5kKFNWR0xlbmd0aDo6
ZnJvbUNTU1ByaW1pdGl2ZVZhbHVlKGRhc2gpKTsKICAgICAgICAgICAgIH0KIApAQCAtNDkxLDE1
ICs0OTEsMTUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVN0b3BD
b2xvcjoKICAgICAgICAgewogICAgICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwo
c3RvcENvbG9yLCBTdG9wQ29sb3IpOwotICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0NvbG9y
KCkpCi0gICAgICAgICAgICAgICAgc3ZnU3R5bGUuc2V0U3RvcENvbG9yKGNvbG9yRnJvbVNWR0Nv
bG9yQ1NTVmFsdWUodG9TVkdDb2xvcih2YWx1ZSksIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpKTsK
KyAgICAgICAgICAgIGlmIChpczxTVkdDb2xvcj4oKnZhbHVlKSkKKyAgICAgICAgICAgICAgICBz
dmdTdHlsZS5zZXRTdG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShkb3duY2FzdDxT
VkdDb2xvcj4odmFsdWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMaWdodGluZ0NvbG9yOgog
ICAgICAgICB7CiAgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChsaWdodGlu
Z0NvbG9yLCBMaWdodGluZ0NvbG9yKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNTVkdDb2xv
cigpKQotICAgICAgICAgICAgICAgIHN2Z1N0eWxlLnNldExpZ2h0aW5nQ29sb3IoY29sb3JGcm9t
U1ZHQ29sb3JDU1NWYWx1ZSh0b1NWR0NvbG9yKHZhbHVlKSwgc3RhdGUuc3R5bGUoKS0+Y29sb3Io
KSkpOworICAgICAgICAgICAgaWYgKGlzPFNWR0NvbG9yPigqdmFsdWUpKQorICAgICAgICAgICAg
ICAgIHN2Z1N0eWxlLnNldExpZ2h0aW5nQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShk
b3duY2FzdDxTVkdDb2xvcj4odmFsdWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rmxvb2RP
cGFjaXR5OgpAQCAtNTIzLDggKzUyMyw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlGbG9vZENvbG9yOgogICAgICAgICB7CiAgICAgICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChmbG9vZENvbG9yLCBGbG9vZENvbG9yKTsKLSAgICAgICAgICAgIGlm
ICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICAgICAgICAgIHN2Z1N0eWxlLnNldEZsb29k
Q29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZSh0b1NWR0NvbG9yKHZhbHVlKSwgc3RhdGUu
c3R5bGUoKS0+Y29sb3IoKSkpOworICAgICAgICAgICAgaWYgKGlzPFNWR0NvbG9yPigqdmFsdWUp
KQorICAgICAgICAgICAgICAgIHN2Z1N0eWxlLnNldEZsb29kQ29sb3IoY29sb3JGcm9tU1ZHQ29s
b3JDU1NWYWx1ZShkb3duY2FzdDxTVkdDb2xvcj4odmFsdWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xv
cigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1By
b3BlcnR5R2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6CkBAIC01NzEsMjcgKzU3MSwyNyBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgaWYgKGlzSW5pdGlhbCB8fCBwcmltaXRpdmVWYWx1
ZSkgLy8gaW5pdGlhbCB8IG5vbmUKICAgICAgICAgICAgICAgICByZXR1cm4gc3ZnU3R5bGUuc2V0
U2hhZG93KG51bGxwdHIpOwogCi0gICAgICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgp
KQorICAgICAgICAgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSB0b0NTU1Zh
bHVlTGlzdCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIWxpc3QtPmxlbmd0aCgpKQorICAgICAg
ICAgICAgQ1NTVmFsdWVMaXN0JiBsaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUp
OworICAgICAgICAgICAgaWYgKCFsaXN0Lmxlbmd0aCgpKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICAgICAgQ1NTVmFsdWUqIGZpcnN0VmFsdWUgPSBsaXN0LT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDApOwotICAgICAgICAgICAgaWYgKCFmaXJzdFZhbHVlLT5pc1NoYWRvd1Zh
bHVlKCkpCisgICAgICAgICAgICBDU1NWYWx1ZSogZmlyc3RWYWx1ZSA9IGxpc3QuaXRlbVdpdGhv
dXRCb3VuZHNDaGVjaygwKTsKKyAgICAgICAgICAgIGlmICghaXM8Q1NTU2hhZG93VmFsdWU+KCpm
aXJzdFZhbHVlKSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBDU1NTaGFk
b3dWYWx1ZSogaXRlbSA9IHRvQ1NTU2hhZG93VmFsdWUoZmlyc3RWYWx1ZSk7Ci0gICAgICAgICAg
ICBJbnRQb2ludCBsb2NhdGlvbihpdGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3Nz
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpKSwKLSAg
ICAgICAgICAgICAgICBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpKSk7Ci0gICAgICAg
ICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3RoPGlu
dD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29t
KDEuMGYpKSA6IDA7CisgICAgICAgICAgICBDU1NTaGFkb3dWYWx1ZSYgaXRlbSA9IGRvd25jYXN0
PENTU1NoYWRvd1ZhbHVlPigqZmlyc3RWYWx1ZSk7CisgICAgICAgICAgICBJbnRQb2ludCBsb2Nh
dGlvbihpdGVtLngtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNp
b25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpLAorICAgICAgICAgICAgICAgIGl0
ZW0ueS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEo
KS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSkpOworICAgICAgICAgICAgaW50IGJsdXIgPSBp
dGVtLmJsdXIgPyBpdGVtLmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0
aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpIDogMDsKICAgICAg
ICAgICAgIENvbG9yIGNvbG9yOwotICAgICAgICAgICAgaWYgKGl0ZW0tPmNvbG9yKQotICAgICAg
ICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0
KCkpOworICAgICAgICAgICAgaWYgKGl0ZW0uY29sb3IpCisgICAgICAgICAgICAgICAgY29sb3Ig
PSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLmNvbG9yLmdldCgpKTsKIAogICAgICAgICAg
ICAgLy8gLXdlYmtpdC1zdmctc2hhZG93IGRvZXMgc2hvdWxkIG5vdCBoYXZlIGEgc3ByZWFkIG9y
IHN0eWxlCi0gICAgICAgICAgICBBU1NFUlQoIWl0ZW0tPnNwcmVhZCk7Ci0gICAgICAgICAgICBB
U1NFUlQoIWl0ZW0tPnN0eWxlKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXRlbS5zcHJlYWQpOwor
ICAgICAgICAgICAgQVNTRVJUKCFpdGVtLnN0eWxlKTsKIAogICAgICAgICAgICAgYXV0byBzaGFk
b3dEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxTaGFkb3dEYXRhPihsb2NhdGlvbiwgYmx1ciwgMCwg
Tm9ybWFsLCBmYWxzZSwgY29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiBDb2xvcjo6dHJhbnNwYXJl
bnQpOwogICAgICAgICAgICAgc3ZnU3R5bGUuc2V0U2hhZG93KFdURjo6bW92ZShzaGFkb3dEYXRh
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU291cmNlU2l6ZUxpc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL1NvdXJjZVNpemVMaXN0LmNwcAppbmRleCA3ZDg2MmUxZDU4NDM4
ZDViMDhlNGVjMGVlNzhkMmFlNTRkZTUzMmU4Li44ODg3YmNlZDhkY2JmNGNiZjYyYjEwMGFkZjky
ZTgyNmFmNDdkZmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU291cmNlU2l6ZUxp
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAKQEAgLTYw
LDcgKzYwLDcgQEAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVMZW5ndGgoQ1NTUGFyc2VyVmFsdWUm
IHZhbHVlLCBSZW5kZXJTdHlsZSYgc3R5bGUsIFJlbmRlclYKICAgICAgICAgfQogICAgIH0KICAg
ICBSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0gdmFsdWUuY3JlYXRlQ1NTVmFsdWUoKTsKLSAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRp
dmVWYWx1ZShjc3NWYWx1ZS5nZXQoKSk7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBw
cmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihjc3NWYWx1ZS5nZXQo
KSk7CiAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPHVuc2lnbmVkPihj
b252ZXJzaW9uRGF0YSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVByb3BlcnRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAK
aW5kZXggNmQyZmRjZTIxZGYxNmVlYzFkNTBkMjY1NWViNDBjNDUwOTliZDJiMi4uZjhlYTQwZDQ5
YWQwZTU2NDk0YTgwYWQxY2FjZGYwZWYwZDUxNDgyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UHJvcGVydGllcy5jcHAKQEAgLTM2Myw3ICszNjMsNyBAQCBTdHJpbmcgU3R5bGVQcm9wZXJ0aWVz
OjpnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUoY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYg
cwogICAgICAgICB2YWx1ZXNbaV0gPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHNob3J0aGFuZC5wcm9w
ZXJ0aWVzKClbaV0pOwogICAgICAgICBpZiAodmFsdWVzW2ldKSB7CiAgICAgICAgICAgICBpZiAo
dmFsdWVzW2ldLT5pc0Jhc2VWYWx1ZUxpc3QoKSkKLSAgICAgICAgICAgICAgICBudW1MYXllcnMg
PSBzdGQ6Om1heCh0b0NTU1ZhbHVlTGlzdCh2YWx1ZXNbaV0uZ2V0KCkpLT5sZW5ndGgoKSwgbnVt
TGF5ZXJzKTsKKyAgICAgICAgICAgICAgICBudW1MYXllcnMgPSBzdGQ6Om1heChkb3duY2FzdDxD
U1NWYWx1ZUxpc3Q+KCp2YWx1ZXNbaV0pLmxlbmd0aCgpLCBudW1MYXllcnMpOwogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIG51bUxheWVycyA9IHN0ZDo6bWF4PHNpemVfdD4oMVUs
IG51bUxheWVycyk7CiAgICAgICAgIH0KQEAgLTM4NCw3ICszODQsNyBAQCBTdHJpbmcgU3R5bGVQ
cm9wZXJ0aWVzOjpnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUoY29uc3QgU3R5bGVQcm9wZXJ0eVNo
b3J0aGFuZCYgcwogICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZTsKICAgICAgICAg
ICAgIGlmICh2YWx1ZXNbal0pIHsKICAgICAgICAgICAgICAgICBpZiAodmFsdWVzW2pdLT5pc0Jh
c2VWYWx1ZUxpc3QoKSkKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0b0NTU1ZhbHVlTGlz
dCh2YWx1ZXNbal0uZ2V0KCkpLT5pdGVtKGkpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9
IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlc1tqXSkuaXRlbShpKTsKICAgICAgICAgICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZXNbal07CiAKQEAg
LTQwOCwxNiArNDA4LDE2IEBAIFN0cmluZyBTdHlsZVByb3BlcnRpZXM6OmdldExheWVyZWRTaG9y
dGhhbmRWYWx1ZShjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBzCiAgICAgICAgICAgICAg
ICAgICAgIHx8IChqIDwgc2l6ZSAtIDEgJiYgc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtqICsgMV0g
PT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0WSAmJiB2YWx1ZSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB5VmFsdWU7CiAgICAgICAgICAgICAgICAgICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gbmV4dFZhbHVlID0gdmFsdWVzW2ogKyAxXTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG5leHRWYWx1ZS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHlWYWx1ZSA9IHRvQ1NTVmFsdWVMaXN0KG5leHRWYWx1ZS5nZXQoKSktPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soaSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+
KCpuZXh0VmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgeVZhbHVlID0gZG93bmNhc3Q8
Q1NTVmFsdWVMaXN0PigqbmV4dFZhbHVlKS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwogICAg
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB5VmFsdWUgPSBu
ZXh0VmFsdWU7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpIHx8ICF5VmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSB8fCAhaXM8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp5VmFsdWUpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgICAgICAgICAgICAgQ1NTVmFsdWVJRCB4SWQgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZh
bHVlLmdldCgpKS0+Z2V0VmFsdWVJRCgpOwotICAgICAgICAgICAgICAgICAgICBDU1NWYWx1ZUlE
IHlJZCA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoeVZhbHVlLmdldCgpKS0+Z2V0VmFsdWVJRCgpOwor
ICAgICAgICAgICAgICAgICAgICBDU1NWYWx1ZUlEIHhJZCA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKTsKKyAgICAgICAgICAgICAgICAgICAgQ1NTVmFs
dWVJRCB5SWQgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnlWYWx1ZSkuZ2V0VmFsdWVJ
RCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoeElkICE9IHlJZCkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHhJZCA9PSBDU1NWYWx1ZVJlcGVhdCAmJiB5SWQgPT0gQ1NTVmFsdWVO
b1JlcGVhdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZVJlcGVhdFhTaG9ydGhh
bmQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDJmMmRmYzYx
N2JkMWM0MTVkMWY0MDcxYTRkZjE0OTcxN2M5OGEwMjguLjM2MTBhYjkwYTNiOTRmMzFlYTE1Mjk4
ZmI5ZDIzNTJkNmQzN2E0MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAg
LTE2NDMsMTMgKzE2NDMsMTMgQEAgdm9pZCBleHRyYWN0RGlyZWN0aW9uQW5kV3JpdGluZ01vZGUo
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBTdHlsZVJlc29sdmUKICAgICAgICAgICAg
IHN3aXRjaCAocHJvcGVydHkuaWQoKSkgewogICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFdyaXRpbmdNb2RlOgogICAgICAgICAgICAgICAgIGlmICghaGFkSW1wb3J0YW50V2Via2l0
V3JpdGluZ01vZGUgfHwgcHJvcGVydHkuaXNJbXBvcnRhbnQoKSkgewotICAgICAgICAgICAgICAg
ICAgICB3cml0aW5nTW9kZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnByb3BlcnR5LnZhbHVlKCkp
OworICAgICAgICAgICAgICAgICAgICB3cml0aW5nTW9kZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPigqcHJvcGVydHkudmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGhhZEltcG9y
dGFudFdlYmtpdFdyaXRpbmdNb2RlID0gcHJvcGVydHkuaXNJbXBvcnRhbnQoKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1By
b3BlcnR5RGlyZWN0aW9uOgogICAgICAgICAgICAgICAgIGlmICghaGFkSW1wb3J0YW50RGlyZWN0
aW9uIHx8IHByb3BlcnR5LmlzSW1wb3J0YW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZGly
ZWN0aW9uID0gdG9DU1NQcmltaXRpdmVWYWx1ZSgqcHJvcGVydHkudmFsdWUoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGRpcmVjdGlvbiA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqcHJv
cGVydHkudmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGhhZEltcG9ydGFudERpcmVjdGlv
biA9IHByb3BlcnR5LmlzSW1wb3J0YW50KCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTkzMSwyMiArMTkzMSwyMiBAQCBzdGF0aWMgYm9vbCBjcmVhdGVH
cmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgY29uc3Qg
U3R5bAogCiBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tTaXplKENTU1ZhbHVlKiB2YWx1ZSwg
R3JpZFRyYWNrU2l6ZSYgdHJhY2tTaXplLCBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3Rh
dGUpCiB7Ci0gICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1
ZSk7CisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSB7CisgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqdmFsdWUpOwogICAgICAgICBHcmlkTGVuZ3RoIHdvcmtpbmdMZW5ndGg7Ci0gICAgICAg
IGlmICghY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChwcmltaXRpdmVWYWx1ZSwgc3RhdGUsIHdvcmtp
bmdMZW5ndGgpKQorICAgICAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoJnByaW1pdGl2
ZVZhbHVlLCBzdGF0ZSwgd29ya2luZ0xlbmd0aCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAgICAgdHJhY2tTaXplLnNldExlbmd0aCh3b3JraW5nTGVuZ3RoKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgQ1NTRnVuY3Rpb25WYWx1ZSogbWlubWF4RnVuY3Rp
b24gPSB0b0NTU0Z1bmN0aW9uVmFsdWUodmFsdWUpOwotICAgIENTU1ZhbHVlTGlzdCogYXJndW1l
bnRzID0gbWlubWF4RnVuY3Rpb24tPmFyZ3VtZW50cygpOworICAgIENTU0Z1bmN0aW9uVmFsdWUm
IG1pbm1heEZ1bmN0aW9uID0gZG93bmNhc3Q8Q1NTRnVuY3Rpb25WYWx1ZT4oKnZhbHVlKTsKKyAg
ICBDU1NWYWx1ZUxpc3QqIGFyZ3VtZW50cyA9IG1pbm1heEZ1bmN0aW9uLmFyZ3VtZW50cygpOwog
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGFyZ3VtZW50cy0+bGVuZ3RoKCkg
PT0gMik7CiAgICAgR3JpZExlbmd0aCBtaW5UcmFja0JyZWFkdGg7CiAgICAgR3JpZExlbmd0aCBt
YXhUcmFja0JyZWFkdGg7Ci0gICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKHRvQ1NTUHJp
bWl0aXZlVmFsdWUoYXJndW1lbnRzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKSwgc3RhdGUs
IG1pblRyYWNrQnJlYWR0aCkgfHwgIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgodG9DU1NQcmltaXRp
dmVWYWx1ZShhcmd1bWVudHMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpLCBzdGF0ZSwgbWF4
VHJhY2tCcmVhZHRoKSkKKyAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KGFyZ3VtZW50cy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSks
IHN0YXRlLCBtaW5UcmFja0JyZWFkdGgpIHx8ICFjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPihhcmd1bWVudHMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MSkpLCBzdGF0ZSwgbWF4VHJhY2tCcmVhZHRoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgdHJhY2tTaXplLnNldE1pbk1heChtaW5UcmFja0JyZWFkdGgsIG1heFRyYWNrQnJlYWR0aCk7
CkBAIC0xOTU2LDkgKzE5NTYsOSBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tTaXplKENT
U1ZhbHVlKiB2YWx1ZSwgR3JpZFRyYWNrU2l6ZSYgdHJhY2tTaXplLCBjb25zdAogc3RhdGljIGJv
b2wgY3JlYXRlR3JpZFRyYWNrTGlzdChDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxHcmlkVHJhY2tT
aXplPiYgdHJhY2tTaXplcywgTmFtZWRHcmlkTGluZXNNYXAmIG5hbWVkR3JpZExpbmVzLCBPcmRl
cmVkTmFtZWRHcmlkTGluZXNNYXAmIG9yZGVyZWROYW1lZEdyaWRMaW5lcywgY29uc3QgU3R5bGVS
ZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQogewogICAgIC8vIEhhbmRsZSAnbm9uZScuCi0gICAgaWYg
KHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZTsKKyAgICBp
ZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsKKyAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSk7CisgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFs
dWVOb25lOwogICAgIH0KIAogICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCkBAIC0xOTY3
LDEwICsxOTY3LDEwIEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3QoQ1NTVmFsdWUq
IHZhbHVlLCBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4mIHRyYWNrU2l6CiAgICAgc2l6ZV90IGN1cnJl
bnROYW1lZEdyaWRMaW5lID0gMDsKICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2
YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7CiAgICAgICAgIENTU1ZhbHVlKiBjdXJy
VmFsdWUgPSBpLnZhbHVlKCk7Ci0gICAgICAgIGlmIChjdXJyVmFsdWUtPmlzR3JpZExpbmVOYW1l
c1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIENTU0dyaWRMaW5lTmFtZXNWYWx1ZSogbGluZU5hbWVz
VmFsdWUgPSB0b0NTU0dyaWRMaW5lTmFtZXNWYWx1ZShjdXJyVmFsdWUpOwotICAgICAgICAgICAg
Zm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBqID0gbGluZU5hbWVzVmFsdWU7IGouaGFzTW9yZSgp
OyBqLmFkdmFuY2UoKSkgewotICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lZEdyaWRMaW5lID0g
dG9DU1NQcmltaXRpdmVWYWx1ZShqLnZhbHVlKCkpLT5nZXRTdHJpbmdWYWx1ZSgpOworICAgICAg
ICBpZiAoaXM8Q1NTR3JpZExpbmVOYW1lc1ZhbHVlPigqY3VyclZhbHVlKSkgeworICAgICAgICAg
ICAgQ1NTR3JpZExpbmVOYW1lc1ZhbHVlJiBsaW5lTmFtZXNWYWx1ZSA9IGRvd25jYXN0PENTU0dy
aWRMaW5lTmFtZXNWYWx1ZT4oKmN1cnJWYWx1ZSk7CisgICAgICAgICAgICBmb3IgKENTU1ZhbHVl
TGlzdEl0ZXJhdG9yIGogPSAmbGluZU5hbWVzVmFsdWU7IGouaGFzTW9yZSgpOyBqLmFkdmFuY2Uo
KSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lZEdyaWRMaW5lID0gZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KGoudmFsdWUoKSktPmdldFN0cmluZ1ZhbHVlKCk7CiAgICAgICAgICAg
ICAgICAgTmFtZWRHcmlkTGluZXNNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBuYW1lZEdyaWRMaW5l
cy5hZGQobmFtZWRHcmlkTGluZSwgVmVjdG9yPHNpemVfdD4oKSk7CiAgICAgICAgICAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoY3VycmVudE5hbWVkR3JpZExpbmUpOwogICAg
ICAgICAgICAgICAgIE9yZGVyZWROYW1lZEdyaWRMaW5lc01hcDo6QWRkUmVzdWx0IG9yZGVyZWRS
ZXN1bHQgPSBvcmRlcmVkTmFtZWRHcmlkTGluZXMuYWRkKGN1cnJlbnROYW1lZEdyaWRMaW5lLCBW
ZWN0b3I8U3RyaW5nPigpKTsKQEAgLTE5OTgsMzcgKzE5OTgsMzcgQEAgc3RhdGljIGJvb2wgY3Jl
YXRlR3JpZFBvc2l0aW9uKENTU1ZhbHVlKiB2YWx1ZSwgR3JpZFBvc2l0aW9uJiBwb3NpdGlvbikK
IHsKICAgICAvLyBXZSBhY2NlcHQgdGhlIHNwZWNpZmljYXRpb24ncyBncmFtbWFyOgogICAgIC8v
IGF1dG8gfCA8Y3VzdG9tLWlkZW50PiB8IFsgPGludGVnZXI+ICYmIDxjdXN0b20taWRlbnQ+PyBd
IHwgWyBzcGFuICYmIFsgPGludGVnZXI+IHx8IDxjdXN0b20taWRlbnQ+IF0gXQotICAgIGlmICh2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOworICAgIGlmIChpczxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYg
cHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKICAg
ICAgICAgLy8gV2UgdHJhbnNsYXRlIDxpZGVudD4gdG8gPHN0cmluZz4gZHVyaW5nIHBhcnNpbmcg
YXMgaXQgbWFrZXMgaGFuZGxpbmcgaXQgc2ltcGxlci4KLSAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICBwb3NpdGlvbi5zZXROYW1lZEdyaWRBcmVh
KHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKKyAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgIHBvc2l0aW9uLnNldE5hbWVkR3JpZEFy
ZWEocHJpbWl0aXZlVmFsdWUuZ2V0U3RyaW5nVmFsdWUoKSk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIEFTU0VSVChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFs
dWVJRCgpID09IENTU1ZhbHVlQXV0byk7CisgICAgICAgIEFTU0VSVChwcmltaXRpdmVWYWx1ZS5n
ZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCi0gICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZXMgPSB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSk7Ci0g
ICAgQVNTRVJUKHZhbHVlcy0+bGVuZ3RoKCkpOworICAgIENTU1ZhbHVlTGlzdCYgdmFsdWVzID0g
ZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpOworICAgIEFTU0VSVCh2YWx1ZXMubGVuZ3Ro
KCkpOwogCiAgICAgYm9vbCBpc1NwYW5Qb3NpdGlvbiA9IGZhbHNlOwogICAgIGludCBncmlkTGlu
ZU51bWJlciA9IDA7CiAgICAgU3RyaW5nIGdyaWRMaW5lTmFtZTsKIAotICAgIENTU1ZhbHVlTGlz
dEl0ZXJhdG9yIGl0ID0gdmFsdWVzOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBjdXJyZW50VmFs
dWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGl0LnZhbHVlKCkpOworICAgIENTU1ZhbHVlTGlzdEl0
ZXJhdG9yIGl0ID0gJnZhbHVlczsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogY3VycmVudFZhbHVl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0LnZhbHVlKCkpOwogICAgIGlmIChjdXJy
ZW50VmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVNwYW4pIHsKICAgICAgICAgaXNTcGFu
UG9zaXRpb24gPSB0cnVlOwogICAgICAgICBpdC5hZHZhbmNlKCk7Ci0gICAgICAgIGN1cnJlbnRW
YWx1ZSA9IGl0Lmhhc01vcmUoKSA/IHRvQ1NTUHJpbWl0aXZlVmFsdWUoaXQudmFsdWUoKSkgOiAw
OworICAgICAgICBjdXJyZW50VmFsdWUgPSBpdC5oYXNNb3JlKCkgPyBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oaXQudmFsdWUoKSkgOiBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChjdXJy
ZW50VmFsdWUgJiYgY3VycmVudFZhbHVlLT5pc051bWJlcigpKSB7CiAgICAgICAgIGdyaWRMaW5l
TnVtYmVyID0gY3VycmVudFZhbHVlLT5nZXRJbnRWYWx1ZSgpOwogICAgICAgICBpdC5hZHZhbmNl
KCk7Ci0gICAgICAgIGN1cnJlbnRWYWx1ZSA9IGl0Lmhhc01vcmUoKSA/IHRvQ1NTUHJpbWl0aXZl
VmFsdWUoaXQudmFsdWUoKSkgOiAwOworICAgICAgICBjdXJyZW50VmFsdWUgPSBpdC5oYXNNb3Jl
KCkgPyBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXQudmFsdWUoKSkgOiBudWxscHRyOwog
ICAgIH0KIAogICAgIGlmIChjdXJyZW50VmFsdWUgJiYgY3VycmVudFZhbHVlLT5pc1N0cmluZygp
KSB7CkBAIC0yMDU1LDcgKzIwNTUsNyBAQCBMZW5ndGggU3R5bGVSZXNvbHZlcjo6cGFyc2VTbmFw
Q29vcmRpbmF0ZShDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUpCiAKIExlbmd0aCBTdHlsZVJlc29s
dmVyOjpwYXJzZVNuYXBDb29yZGluYXRlKENTU1ZhbHVlTGlzdCYgdmFsdWVMaXN0LCB1bnNpZ25l
ZCBvZmZzZXQpCiB7Ci0gICAgcmV0dXJuIHBhcnNlU25hcENvb3JkaW5hdGUodG9DU1NQcmltaXRp
dmVWYWx1ZSgqdmFsdWVMaXN0Lml0ZW0ob2Zmc2V0KSkpOworICAgIHJldHVybiBwYXJzZVNuYXBD
b29yZGluYXRlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWVMaXN0Lml0ZW0ob2Zm
c2V0KSkpOwogfQogCiBMZW5ndGhTaXplIFN0eWxlUmVzb2x2ZXI6OnBhcnNlU25hcENvb3JkaW5h
dGVQYWlyKENTU1ZhbHVlTGlzdCYgdmFsdWVMaXN0LCB1bnNpZ25lZCBvZmZzZXQpCkBAIC0yMDY3
LDE0ICsyMDY3LDE0IEBAIFNjcm9sbFNuYXBQb2ludHMgU3R5bGVSZXNvbHZlcjo6cGFyc2VTbmFw
UG9pbnRzKENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBTY3JvbGxTbmFwUG9pbnRzIHBvaW50czsK
IAotICAgIGlmICh2YWx1ZS5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYgdG9DU1NQcmltaXRpdmVWYWx1
ZSh2YWx1ZSkuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlRWxlbWVudHMpIHsKKyAgICBpZiAoaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
dmFsdWUpLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUVsZW1lbnRzKSB7CiAgICAgICAgIHBvaW50
cy51c2VzRWxlbWVudHMgPSB0cnVlOwogICAgICAgICByZXR1cm4gcG9pbnRzOwogICAgIH0KIAog
ICAgIHBvaW50cy5oYXNSZXBlYXQgPSBmYWxzZTsKICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJh
dG9yIGl0KCZ2YWx1ZSk7IGl0Lmhhc01vcmUoKTsgaXQuYWR2YW5jZSgpKSB7Ci0gICAgICAgIGF1
dG8mIGl0ZW1WYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoKml0LnZhbHVlKCkpOworICAgICAg
ICBhdXRvJiBpdGVtVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKml0LnZhbHVl
KCkpOwogICAgICAgICBpZiAoYXV0byogbGVuZ3RoUmVwZWF0ID0gaXRlbVZhbHVlLmdldExlbmd0
aFJlcGVhdFZhbHVlKCkpIHsKICAgICAgICAgICAgIGlmIChhdXRvKiBpbnRlcnZhbCA9IGxlbmd0
aFJlcGVhdC0+aW50ZXJ2YWwoKSkgewogICAgICAgICAgICAgICAgIHBvaW50cy5yZXBlYXRPZmZz
ZXQgPSBwYXJzZVNuYXBDb29yZGluYXRlKCppbnRlcnZhbCk7CkBAIC0yMTI3LDcgKzIxMjcsNyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSA/IHRvQ1NT
UHJpbWl0aXZlVmFsdWUodmFsdWUpIDogMDsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUgPSBpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSA/IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZSkgOiBudWxscHRyOwogCiAgICAgLy8gV2hhdCBmb2xsb3dzIGlz
IGEgbGlzdCB0aGF0IG1hcHMgdGhlIENTUyBwcm9wZXJ0aWVzIGludG8gdGhlaXIgY29ycmVzcG9u
ZGluZyBmcm9udC1lbmQKICAgICAvLyBSZW5kZXJTdHlsZSB2YWx1ZXMuCkBAIC0yMTUwLDQ4ICsy
MTUwLDQ4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBib29sIGRpZFNldCA9IGZhbHNlOwog
ICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9y
ZSgpOyBpLmFkdmFuY2UoKSkgewogICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gaS52
YWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc0ltYWdlR2VuZXJhdG9yVmFsdWUo
KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNHcmFkaWVudFZhbHVlKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2Vu
ZXJhdGVkSW1hZ2U6OmNyZWF0ZSgqdG9DU1NHcmFkaWVudFZhbHVlKGl0ZW0pLT5ncmFkaWVudFdp
dGhTdHlsZXNSZXNvbHZlZCh0aGlzKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgaWYgKGlz
PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KCppdGVtKSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoaXM8Q1NTR3JhZGllbnRWYWx1ZT4oKml0ZW0pKQorICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoKmRv
d25jYXN0PENTU0dyYWRpZW50VmFsdWU+KCppdGVtKS5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZl
ZCh0aGlzKSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFn
ZTo6Y3JlYXRlKCp0b0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUoaXRlbSkpLCBkaWRTZXQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVy
YXRlZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oKml0ZW0p
KSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICNpZiBFTkFC
TEUoQ1NTX0lNQUdFX1NFVCkKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzSW1h
Z2VTZXRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENv
bnRlbnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgdG9DU1NJbWFn
ZVNldFZhbHVlKGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlz
PENTU0ltYWdlU2V0VmFsdWU+KCppdGVtKSkgeworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRl
bnQsIGRvd25jYXN0PENTU0ltYWdlU2V0VmFsdWU+KGl0ZW0pKSwgZGlkU2V0KTsKICAgICAgICAg
ICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICNlbmRpZgogICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc0ltYWdlVmFsdWUoKSkgewotICAgICAgICAgICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1
ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHRvQ1NTSW1hZ2VWYWx1ZShpdGVtKSksIGRpZFNldCk7Cisg
ICAgICAgICAgICAgICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KCppdGVtKSkgeworICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KGNhY2hlZE9yUGVuZGluZ0Zyb21W
YWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KGl0ZW0pKSwg
ZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
aWYgKCFpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgaWYgKCFpczxD
U1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBjb250ZW50VmFsdWUgPSB0b0NT
U1ByaW1pdGl2ZVZhbHVlKGl0ZW0pOworICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
JiBjb250ZW50VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pOwogCi0g
ICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS0+aXNTdHJpbmcoKSkgewotICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KGNvbnRlbnRWYWx1ZS0+Z2V0U3Ry
aW5nVmFsdWUoKS5pbXBsKCksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRW
YWx1ZS5pc1N0cmluZygpKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dENvbnRlbnQoY29udGVudFZhbHVlLmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBkaWRTZXQpOwog
ICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY29udGVudFZhbHVlLT5pc0F0dHIoKSkgeworICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoY29udGVudFZhbHVlLmlzQXR0cigpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBDYW4gYSBuYW1lc3BhY2UgYmUgc3BlY2lmaWVkIGZvciBhbiBhdHRyKGZvbyk/CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETykK
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFVuaXF1ZSgpOwogICAg
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wYXJl
bnRTdHlsZSgpLT5zZXRVbmlxdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgUXVhbGlmaWVkTmFt
ZSBhdHRyKG51bGxBdG9tLCBjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBu
dWxsQXRvbSk7CisgICAgICAgICAgICAgICAgICAgIFF1YWxpZmllZE5hbWUgYXR0cihudWxsQXRv
bSwgY29udGVudFZhbHVlLmdldFN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBudWxsQXRvbSk7CiAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBzdGF0ZS5lbGVtZW50
KCktPmdldEF0dHJpYnV0ZShhdHRyKTsKICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IHZhbHVlLmltcGwoKSwg
ZGlkU2V0KTsKICAgICAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGZhY3QgdGhhdCB0aGUgYXR0cmlidXRlIHZhbHVlIGFm
ZmVjdHMgdGhlIHN0eWxlLgogICAgICAgICAgICAgICAgICAgICBtX3J1bGVTZXRzLmZlYXR1cmVz
KCkuYXR0cmlidXRlQ2Fub25pY2FsTG9jYWxOYW1lc0luUnVsZXMuYWRkKGF0dHIubG9jYWxOYW1l
KCkuaW1wbCgpKTsKICAgICAgICAgICAgICAgICAgICAgbV9ydWxlU2V0cy5mZWF0dXJlcygpLmF0
dHJpYnV0ZUxvY2FsTmFtZXNJblJ1bGVzLmFkZChhdHRyLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUtPmlzQ291bnRlcigpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIENvdW50ZXIqIGNvdW50ZXJWYWx1ZSA9IGNvbnRlbnRWYWx1ZS0+
Z2V0Q291bnRlclZhbHVlKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFs
dWUuaXNDb3VudGVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ291bnRlciogY291bnRlclZh
bHVlID0gY29udGVudFZhbHVlLmdldENvdW50ZXJWYWx1ZSgpOwogICAgICAgICAgICAgICAgICAg
ICBFTGlzdFN0eWxlVHlwZSBsaXN0U3R5bGVUeXBlID0gTm9uZUxpc3RTdHlsZTsKICAgICAgICAg
ICAgICAgICAgICAgQ1NTVmFsdWVJRCBsaXN0U3R5bGVJZGVudCA9IGNvdW50ZXJWYWx1ZS0+bGlz
dFN0eWxlSWRlbnQoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RTdHlsZUlkZW50ICE9
IENTU1ZhbHVlTm9uZSkKQEAgLTIyMDAsNyArMjIwMCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoV1RGOjptb3ZlKGNvdW50ZXIp
LCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVl
LT5nZXRWYWx1ZUlEKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb250ZW50VmFs
dWUuZ2V0VmFsdWVJRCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVPcGVu
UXVvdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50
KE9QRU5fUVVPVEUsIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0
cnVlOwpAQCAtMjI1OCwyMiArMjI1OCwyMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChpc0luaXRpYWwpIHsKLSAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldFF1b3RlcygwKTsKKyAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dFF1b3RlcyhudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlTGlzdCog
bGlzdCA9IHRvQ1NTVmFsdWVMaXN0KHZhbHVlKTsKKyAgICAgICAgaWYgKGlzPENTU1ZhbHVlTGlz
dD4oKnZhbHVlKSkgeworICAgICAgICAgICAgQ1NTVmFsdWVMaXN0JiBsaXN0ID0gZG93bmNhc3Q8
Q1NTVmFsdWVMaXN0PigqdmFsdWUpOwogICAgICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJp
bmcsIFN0cmluZz4+IHF1b3RlczsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGlzdC0+bGVuZ3RoKCk7IGkgKz0gMikgewotICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBmaXJz
dCA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CisgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoKCk7IGkgKz0gMikgeworICAgICAgICAgICAgICAg
IENTU1ZhbHVlKiBmaXJzdCA9IGxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKICAgICAg
ICAgICAgICAgICAvLyBpdGVtKCkgcmV0dXJucyBudWxsIGlmIG91dCBvZiBib3VuZHMgc28gdGhp
cyBpcyBzYWZlLgotICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBzZWNvbmQgPSBsaXN0LT5pdGVt
KGkgKyAxKTsKKyAgICAgICAgICAgICAgICBDU1NWYWx1ZSogc2Vjb25kID0gbGlzdC5pdGVtKGkg
KyAxKTsKICAgICAgICAgICAgICAgICBpZiAoIXNlY29uZCkKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oZmlyc3QtPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc2Vjb25kLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAg
ICAgICAgICAgICAgIFN0cmluZyBzdGFydFF1b3RlID0gdG9DU1NQcmltaXRpdmVWYWx1ZShmaXJz
dCktPmdldFN0cmluZ1ZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGVuZFF1b3RlID0g
dG9DU1NQcmltaXRpdmVWYWx1ZShzZWNvbmQpLT5nZXRTdHJpbmdWYWx1ZSgpOworICAgICAgICAg
ICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlzPENTU1ByaW1pdGl2ZVZh
bHVlPigqZmlyc3QpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnNlY29uZCkpOworICAgICAgICAgICAgICAg
IFN0cmluZyBzdGFydFF1b3RlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpmaXJzdCku
Z2V0U3RyaW5nVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZW5kUXVvdGUgPSBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnNlY29uZCkuZ2V0U3RyaW5nVmFsdWUoKTsKICAgICAg
ICAgICAgICAgICBxdW90ZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHN0YXJ0UXVvdGUsIGVuZFF1
b3RlKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRRdW90
ZXMoUXVvdGVzRGF0YTo6Y3JlYXRlKHF1b3RlcykpOwpAQCAtMjMxOCwyNCArMjMxOCwyNCBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNp
emUoU3R5bGU6OmNvbXB1dGVkRm9udFNpemVGcm9tU3BlY2lmaWVkU2l6ZShmb250RGVzY3JpcHRp
b24uc3BlY2lmaWVkU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgdXNl
U1ZHWm9vbVJ1bGVzKCksIHN0YXRlLnN0eWxlKCksIGRvY3VtZW50KCkpKTsKICAgICAgICAgICAg
ICAgICBzZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNGb250VmFsdWUoKSkgewotICAgICAgICAgICAg
Q1NTRm9udFZhbHVlKiBmb250ID0gdG9DU1NGb250VmFsdWUodmFsdWUpOwotICAgICAgICAgICAg
aWYgKCFmb250LT5zdHlsZSB8fCAhZm9udC0+dmFyaWFudCB8fCAhZm9udC0+d2VpZ2h0Ci0gICAg
ICAgICAgICAgICAgfHwgIWZvbnQtPnNpemUgfHwgIWZvbnQtPmxpbmVIZWlnaHQgfHwgIWZvbnQt
PmZhbWlseSkKKyAgICAgICAgfSBlbHNlIGlmIChpczxDU1NGb250VmFsdWU+KCp2YWx1ZSkpIHsK
KyAgICAgICAgICAgIENTU0ZvbnRWYWx1ZSYgZm9udCA9IGRvd25jYXN0PENTU0ZvbnRWYWx1ZT4o
KnZhbHVlKTsKKyAgICAgICAgICAgIGlmICghZm9udC5zdHlsZSB8fCAhZm9udC52YXJpYW50IHx8
ICFmb250LndlaWdodAorICAgICAgICAgICAgICAgIHx8ICFmb250LnNpemUgfHwgIWZvbnQubGlu
ZUhlaWdodCB8fCAhZm9udC5mYW1pbHkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgZm9udC0+c3R5bGUuZ2V0
KCkpOwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCBm
b250LT52YXJpYW50LmdldCgpKTsKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVy
dHlGb250V2VpZ2h0LCBmb250LT53ZWlnaHQuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgZm9udC5zdHlsZS5nZXQoKSk7CisgICAgICAgICAg
ICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIGZvbnQudmFyaWFudC5nZXQo
KSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCwgZm9u
dC53ZWlnaHQuZ2V0KCkpOwogICAgICAgICAgICAgLy8gVGhlIHByZXZpb3VzIHByb3BlcnRpZXMg
Y2FuIGRpcnR5IG91ciBmb250IGJ1dCB0aGV5IGRvbid0IHRyeSB0byByZWFkIHRoZSBmb250J3MK
ICAgICAgICAgICAgIC8vIHByb3BlcnRpZXMgYmFjaywgd2hpY2ggaXMgc2FmZS4gSG93ZXZlciBp
ZiBmb250LXNpemUgaXMgdXNpbmcgdGhlICdleCcgdW5pdCwgaXQgd2lsbAogICAgICAgICAgICAg
Ly8gbmVlZCBxdWVyeSB0aGUgZGlydGllZCBmb250J3MgeC1oZWlnaHQgdG8gZ2V0IHRoZSBjb21w
dXRlZCBzaXplLiBUbyBiZSBzYWZlIGluIHRoaXMKICAgICAgICAgICAgIC8vIGNhc2UsIGxldCdz
IGp1c3QgdXBkYXRlIHRoZSBmb250IG5vdy4KICAgICAgICAgICAgIHVwZGF0ZUZvbnQoKTsKLSAg
ICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgZm9udC0+c2l6ZS5n
ZXQoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUsIGZv
bnQuc2l6ZS5nZXQoKSk7CiAKLSAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZShm
b250LT5saW5lSGVpZ2h0LmdldCgpKTsKKyAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRW
YWx1ZShmb250LmxpbmVIZWlnaHQuZ2V0KCkpOwogCi0gICAgICAgICAgICBhcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5Rm9udEZhbWlseSwgZm9udC0+ZmFtaWx5LmdldCgpKTsKKyAgICAgICAgICAg
IGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBmb250LmZhbWlseS5nZXQoKSk7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogCkBAIC0yNDA1LDE3ICsyNDA1LDE3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdWUpCiAKICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7
IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewogICAgICAgICAgICAgQ1NTVmFsdWUqIGN1cnJW
YWx1ZSA9IGkudmFsdWUoKTsKLSAgICAgICAgICAgIGlmICghY3VyclZhbHVlLT5pc1NoYWRvd1Zh
bHVlKCkpCisgICAgICAgICAgICBpZiAoIWlzPENTU1NoYWRvd1ZhbHVlPigqY3VyclZhbHVlKSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIENTU1NoYWRvd1ZhbHVlKiBp
dGVtID0gdG9DU1NTaGFkb3dWYWx1ZShjdXJyVmFsdWUpOwotICAgICAgICAgICAgaW50IHggPSBp
dGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSgpKTsKLSAgICAgICAgICAgIGludCB5ID0gaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0
YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7Ci0gICAgICAgICAgICBpbnQgYmx1ciA9
IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSgpKSA6IDA7Ci0gICAgICAgICAgICBpbnQgc3ByZWFkID0gaXRl
bS0+c3ByZWFkID8gaXRlbS0+c3ByZWFkLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSgpKSA6IDA7Ci0gICAgICAgICAgICBTaGFkb3dTdHlsZSBzaGFk
b3dTdHlsZSA9IGl0ZW0tPnN0eWxlICYmIGl0ZW0tPnN0eWxlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NT
VmFsdWVJbnNldCA/IEluc2V0IDogTm9ybWFsOworICAgICAgICAgICAgQ1NTU2hhZG93VmFsdWUm
IGl0ZW0gPSBkb3duY2FzdDxDU1NTaGFkb3dWYWx1ZT4oKmN1cnJWYWx1ZSk7CisgICAgICAgICAg
ICBpbnQgeCA9IGl0ZW0ueC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEoKSk7CisgICAgICAgICAgICBpbnQgeSA9IGl0ZW0ueS0+Y29tcHV0ZUxlbmd0
aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CisgICAgICAgICAgICBp
bnQgYmx1ciA9IGl0ZW0uYmx1ciA/IGl0ZW0uYmx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRl
LmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSkgOiAwOworICAgICAgICAgICAgaW50IHNwcmVh
ZCA9IGl0ZW0uc3ByZWFkID8gaXRlbS5zcHJlYWQtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5j
c3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpIDogMDsKKyAgICAgICAgICAgIFNoYWRvd1N0eWxl
IHNoYWRvd1N0eWxlID0gaXRlbS5zdHlsZSAmJiBpdGVtLnN0eWxlLT5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVJbnNldCA/IEluc2V0IDogTm9ybWFsOwogICAgICAgICAgICAgQ29sb3IgY29sb3I7
Ci0gICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCi0gICAgICAgICAgICAgICAgY29sb3IgPSBj
b2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CisgICAgICAgICAgICBp
ZiAoaXRlbS5jb2xvcikKKyAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2
ZVZhbHVlKGl0ZW0uY29sb3IuZ2V0KCkpOwogICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUuc3R5
bGUoKSkKICAgICAgICAgICAgICAgICBjb2xvciA9IHN0YXRlLnN0eWxlKCktPmNvbG9yKCk7CiAK
QEAgLTI0MzQsMTcgKzI0MzQsMTcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmICghdmFsdWUtPmlzUmVmbGVjdFZhbHVlKCkpCisgICAg
ICAgIGlmICghaXM8Q1NTUmVmbGVjdFZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIENTU1JlZmxlY3RWYWx1ZSogcmVmbGVjdFZhbHVlID0gdG9DU1NSZWZsZWN0
VmFsdWUodmFsdWUpOworICAgICAgICBDU1NSZWZsZWN0VmFsdWUmIHJlZmxlY3RWYWx1ZSA9IGRv
d25jYXN0PENTU1JlZmxlY3RWYWx1ZT4oKnZhbHVlKTsKICAgICAgICAgUmVmUHRyPFN0eWxlUmVm
bGVjdGlvbj4gcmVmbGVjdGlvbiA9IFN0eWxlUmVmbGVjdGlvbjo6Y3JlYXRlKCk7Ci0gICAgICAg
IHJlZmxlY3Rpb24tPnNldERpcmVjdGlvbigqcmVmbGVjdFZhbHVlLT5kaXJlY3Rpb24oKSk7Ci0g
ICAgICAgIGlmIChyZWZsZWN0VmFsdWUtPm9mZnNldCgpKQotICAgICAgICAgICAgcmVmbGVjdGlv
bi0+c2V0T2Zmc2V0KHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCktPmNvbnZlcnRUb0xlbmd0aDxGaXhl
ZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVy
c2lvbj4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKSk7CisgICAgICAgIHJlZmxl
Y3Rpb24tPnNldERpcmVjdGlvbigqcmVmbGVjdFZhbHVlLmRpcmVjdGlvbigpKTsKKyAgICAgICAg
aWYgKHJlZmxlY3RWYWx1ZS5vZmZzZXQoKSkKKyAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE9m
ZnNldChyZWZsZWN0VmFsdWUub2Zmc2V0KCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJD
b252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3Rh
dGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKSk7CiAgICAgICAgIE5pbmVQaWVjZUltYWdl
IG1hc2s7CiAgICAgICAgIG1hc2suc2V0TWFza0RlZmF1bHRzKCk7Ci0gICAgICAgIG1fc3R5bGVN
YXAubWFwTmluZVBpZWNlSW1hZ2UoaWQsIHJlZmxlY3RWYWx1ZS0+bWFzaygpLCBtYXNrKTsKKyAg
ICAgICAgbV9zdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZShpZCwgcmVmbGVjdFZhbHVlLm1hc2so
KSwgbWFzayk7CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2sobWFzayk7CiAKICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0Qm94UmVmbGVjdChyZWZsZWN0aW9uLnJlbGVhc2UoKSk7CkBAIC0y
NjY1LDEwICsyNjY1LDEwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAotICAgICAgICBpZiAoIXZhbHVlLT5pc0xpbmVCb3hDb250YWluVmFsdWUoKSkKKyAg
ICAgICAgaWYgKCFpczxDU1NMaW5lQm94Q29udGFpblZhbHVlPigqdmFsdWUpKQogICAgICAgICAg
ICAgcmV0dXJuOwogCi0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVCb3hDb250YWluKHRv
Q1NTTGluZUJveENvbnRhaW5WYWx1ZSh2YWx1ZSktPnZhbHVlKCkpOworICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXRMaW5lQm94Q29udGFpbihkb3duY2FzdDxDU1NMaW5lQm94Q29udGFpblZhbHVl
PigqdmFsdWUpLnZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yNjc5LDE5
ICsyNjc5LDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICBpZiAoIWlzPENT
U1ZhbHVlTGlzdD4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBGb250
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0
aW9uKCk7Ci0gICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHRvQ1NTVmFsdWVMaXN0KHZhbHVl
KTsKKyAgICAgICAgQ1NTVmFsdWVMaXN0JiBsaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pigq
dmFsdWUpOwogICAgICAgICBSZWZQdHI8Rm9udEZlYXR1cmVTZXR0aW5ncz4gc2V0dGluZ3MgPSBG
b250RmVhdHVyZVNldHRpbmdzOjpjcmVhdGUoKTsKLSAgICAgICAgaW50IGxlbiA9IGxpc3QtPmxl
bmd0aCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAg
ICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7Ci0g
ICAgICAgICAgICBpZiAoIWl0ZW0tPmlzRm9udEZlYXR1cmVWYWx1ZSgpKQorICAgICAgICBpbnQg
bGVuZ3RoID0gbGlzdC5sZW5ndGgoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBsaXN0Lml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soaSk7CisgICAgICAgICAgICBpZiAoIWlzPENTU0ZvbnRGZWF0dXJlVmFsdWU+
KCppdGVtKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIENTU0ZvbnRG
ZWF0dXJlVmFsdWUqIGZlYXR1cmUgPSB0b0NTU0ZvbnRGZWF0dXJlVmFsdWUoaXRlbSk7Ci0gICAg
ICAgICAgICBzZXR0aW5ncy0+YXBwZW5kKEZvbnRGZWF0dXJlKGZlYXR1cmUtPnRhZygpLCBmZWF0
dXJlLT52YWx1ZSgpKSk7CisgICAgICAgICAgICBDU1NGb250RmVhdHVyZVZhbHVlJiBmZWF0dXJl
ID0gZG93bmNhc3Q8Q1NTRm9udEZlYXR1cmVWYWx1ZT4oKml0ZW0pOworICAgICAgICAgICAgc2V0
dGluZ3MtPmFwcGVuZChGb250RmVhdHVyZShmZWF0dXJlLnRhZygpLCBmZWF0dXJlLnZhbHVlKCkp
KTsKICAgICAgICAgfQogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmVhdHVyZVNldHRpbmdz
KHNldHRpbmdzLnJlbGVhc2UoKSk7CiAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVz
Y3JpcHRpb24pOwpAQCAtMjgzMCw4ICsyODMwLDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIENTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUq
IGdyaWRUZW1wbGF0ZUFyZWFzVmFsdWUgPSB0b0NTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUodmFs
dWUpOwotICAgICAgICBjb25zdCBOYW1lZEdyaWRBcmVhTWFwJiBuZXdOYW1lZEdyaWRBcmVhcyA9
IGdyaWRUZW1wbGF0ZUFyZWFzVmFsdWUtPmdyaWRBcmVhTWFwKCk7CisgICAgICAgIENTU0dyaWRU
ZW1wbGF0ZUFyZWFzVmFsdWUmIGdyaWRUZW1wbGF0ZUFyZWFzVmFsdWUgPSBkb3duY2FzdDxDU1NH
cmlkVGVtcGxhdGVBcmVhc1ZhbHVlPigqdmFsdWUpOworICAgICAgICBjb25zdCBOYW1lZEdyaWRB
cmVhTWFwJiBuZXdOYW1lZEdyaWRBcmVhcyA9IGdyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuZ3JpZEFy
ZWFNYXAoKTsKIAogICAgICAgICBOYW1lZEdyaWRMaW5lc01hcCBuYW1lZEdyaWRDb2x1bW5MaW5l
cyA9IHN0YXRlLnN0eWxlKCktPm5hbWVkR3JpZENvbHVtbkxpbmVzKCk7CiAgICAgICAgIE5hbWVk
R3JpZExpbmVzTWFwIG5hbWVkR3JpZFJvd0xpbmVzID0gc3RhdGUuc3R5bGUoKS0+bmFtZWRHcmlk
Um93TGluZXMoKTsKQEAgLTI4NDAsMjcgKzI4NDAsMjcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQ29sdW1uTGluZXMobmFtZWRHcmlkQ29sdW1uTGlu
ZXMpOwogICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXROYW1lZEdyaWRSb3dMaW5lcyhuYW1lZEdy
aWRSb3dMaW5lcyk7CiAKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQXJlYShn
cmlkVGVtcGxhdGVBcmVhc1ZhbHVlLT5ncmlkQXJlYU1hcCgpKTsKLSAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0TmFtZWRHcmlkQXJlYVJvd0NvdW50KGdyaWRUZW1wbGF0ZUFyZWFzVmFsdWUtPnJv
d0NvdW50KCkpOwotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhQ29sdW1u
Q291bnQoZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS0+Y29sdW1uQ291bnQoKSk7CisgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldE5hbWVkR3JpZEFyZWEoZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5ncmlk
QXJlYU1hcCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQXJlYVJvd0Nv
dW50KGdyaWRUZW1wbGF0ZUFyZWFzVmFsdWUucm93Q291bnQoKSk7CisgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldE5hbWVkR3JpZEFyZWFDb2x1bW5Db3VudChncmlkVGVtcGxhdGVBcmVhc1ZhbHVl
LmNvbHVtbkNvdW50KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRHcmlkQXV0b0Zsb3c6IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUwoZ3JpZEF1dG9GbG93LCBHcmlkQXV0b0Zsb3cpOwotICAgICAgICBpZiAoIXZhbHVlLT5p
c1ZhbHVlTGlzdCgpKQorICAgICAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gdG9DU1NWYWx1
ZUxpc3QodmFsdWUpOworICAgICAgICBDU1NWYWx1ZUxpc3QmIGxpc3QgPSBkb3duY2FzdDxDU1NW
YWx1ZUxpc3Q+KCp2YWx1ZSk7CiAKLSAgICAgICAgaWYgKCFsaXN0LT5sZW5ndGgoKSkgeworICAg
ICAgICBpZiAoIWxpc3QubGVuZ3RoKCkpIHsKICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dEdyaWRBdXRvRmxvdyhSZW5kZXJTdHlsZTo6aW5pdGlhbEdyaWRBdXRvRmxvdygpKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBm
aXJzdCA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUobGlzdC0+aXRlbSgwKSk7Ci0gICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBzZWNvbmQgPSBsaXN0LT5sZW5ndGgoKSA9PSAyID8gdG9DU1NQcmltaXRp
dmVWYWx1ZShsaXN0LT5pdGVtKDEpKSA6IG51bGxwdHI7CisgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlJiBmaXJzdCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqbGlzdC5pdGVtKDApKTsK
KyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZCA9IGxpc3QubGVuZ3RoKCkgPT0gMiA/
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihsaXN0Lml0ZW0oMSkpIDogbnVsbHB0cjsKIAog
ICAgICAgICBHcmlkQXV0b0Zsb3cgYXV0b0Zsb3cgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbEdyaWRB
dXRvRmxvdygpOwotICAgICAgICBzd2l0Y2ggKGZpcnN0LT5nZXRWYWx1ZUlEKCkpIHsKKyAgICAg
ICAgc3dpdGNoIChmaXJzdC5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgY2FzZSBDU1NWYWx1ZVJv
dzoKICAgICAgICAgICAgIGlmIChzZWNvbmQpCiAgICAgICAgICAgICAgICAgYXV0b0Zsb3cgPSBz
ZWNvbmQtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZURlbnNlID8gQXV0b0Zsb3dSb3dEZW5zZSA6
IEF1dG9GbG93U3RhY2tSb3c7CkBAIC0yOTA3LDEyICsyOTA3LDEyIEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTY3JvbGxTbmFwRGVzdGlu
YXRpb246IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoc2Nyb2xsU25hcERl
c3RpbmF0aW9uLCBTY3JvbGxTbmFwRGVzdGluYXRpb24pCi0gICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldFNjcm9sbFNuYXBEZXN0aW5hdGlvbihwYXJzZVNuYXBDb29yZGluYXRlUGFpcih0b0NTU1Zh
bHVlTGlzdCgqdmFsdWUpLCAwKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFNjcm9sbFNu
YXBEZXN0aW5hdGlvbihwYXJzZVNuYXBDb29yZGluYXRlUGFpcihkb3duY2FzdDxDU1NWYWx1ZUxp
c3Q+KCp2YWx1ZSksIDApKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0U2Nyb2xsU25hcENvb3JkaW5hdGU6IHsKICAgICAgICAgSEFORExFX0lOSEVS
SVRfQU5EX0lOSVRJQUwoc2Nyb2xsU25hcENvb3JkaW5hdGVzLCBTY3JvbGxTbmFwQ29vcmRpbmF0
ZXMpCi0gICAgICAgIENTU1ZhbHVlTGlzdCYgdmFsdWVMaXN0ID0gdG9DU1NWYWx1ZUxpc3QoKnZh
bHVlKTsKKyAgICAgICAgQ1NTVmFsdWVMaXN0JiB2YWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1
ZUxpc3Q+KCp2YWx1ZSk7CiAgICAgICAgIEFTU0VSVCghKHZhbHVlTGlzdC5sZW5ndGgoKSAlIDIp
KTsKICAgICAgICAgc2l6ZV90IHBvaW50Q291bnQgPSB2YWx1ZUxpc3QubGVuZ3RoKCkgLyAyOwog
ICAgICAgICBWZWN0b3I8TGVuZ3RoU2l6ZT4gY29vcmRpbmF0ZXM7CkBAIC0zMjIwLDI0ICszMjIw
LDI0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCiAKIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZl
cjo6c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUpCiB7
Ci0gICAgaWYgKHZhbHVlLT5pc0ltYWdlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIGNhY2hlZE9y
UGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgdG9DU1NJbWFnZVZhbHVlKHZhbHVlKSk7CisgICAg
aWYgKGlzPENTU0ltYWdlVmFsdWU+KCp2YWx1ZSkpCisgICAgICAgIHJldHVybiBjYWNoZWRPclBl
bmRpbmdGcm9tVmFsdWUocHJvcGVydHksIGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KHZhbHVlKSk7
CiAKLSAgICBpZiAodmFsdWUtPmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKSB7Ci0gICAgICAgIGlm
ICh2YWx1ZS0+aXNHcmFkaWVudFZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVk
T3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCAqdG9DU1NHcmFkaWVudFZhbHVlKHZhbHVlKS0+
Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhpcykpOwotICAgICAgICByZXR1cm4gZ2VuZXJh
dGVkT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCB0b0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUo
KnZhbHVlKSk7CisgICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KCp2YWx1ZSkpIHsK
KyAgICAgICAgaWYgKGlzPENTU0dyYWRpZW50VmFsdWU+KCp2YWx1ZSkpCisgICAgICAgICAgICBy
ZXR1cm4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCAqZG93bmNhc3Q8Q1NT
R3JhZGllbnRWYWx1ZT4oKnZhbHVlKS5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCh0aGlzKSk7
CisgICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIGRv
d25jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KCp2YWx1ZSkpOwogICAgIH0KIAogI2lmIEVO
QUJMRShDU1NfSU1BR0VfU0VUKQotICAgIGlmICh2YWx1ZS0+aXNJbWFnZVNldFZhbHVlKCkpCi0g
ICAgICAgIHJldHVybiBzZXRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHRvQ1NTSW1hZ2VT
ZXRWYWx1ZSh2YWx1ZSkpOworICAgIGlmIChpczxDU1NJbWFnZVNldFZhbHVlPigqdmFsdWUpKQor
ICAgICAgICByZXR1cm4gc2V0T3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBkb3duY2FzdDxD
U1NJbWFnZVNldFZhbHVlPih2YWx1ZSkpOwogI2VuZGlmCiAKLSAgICBpZiAodmFsdWUtPmlzQ3Vy
c29ySW1hZ2VWYWx1ZSgpKQotICAgICAgICByZXR1cm4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVl
KHByb3BlcnR5LCB0b0NTU0N1cnNvckltYWdlVmFsdWUodmFsdWUpKTsKKyAgICBpZiAoaXM8Q1NT
Q3Vyc29ySW1hZ2VWYWx1ZT4oKnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGN1cnNvck9yUGVuZGlu
Z0Zyb21WYWx1ZShwcm9wZXJ0eSwgZG93bmNhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4odmFsdWUp
KTsKIAotICAgIHJldHVybiAwOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBQYXNzUmVmUHRy
PFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVZhbHVlKiB2YWx1ZSkKQEAgLTMyNTAsOSArMzI1
MCw5IEBAIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5k
aW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvCiAKIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4g
U3R5bGVSZXNvbHZlcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHksIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIHZhbHVlKQogewotICAgIGlmICh2YWx1
ZS5pc0ZpbHRlckltYWdlVmFsdWUoKSkgeworICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVl
Pih2YWx1ZSkpIHsKICAgICAgICAgLy8gRmlsdGVySW1hZ2UgbmVlZHMgdG8gY2FsY3VsYXRlIEZp
bHRlck9wZXJhdGlvbnMuCi0gICAgICAgIHRvQ1NTRmlsdGVySW1hZ2VWYWx1ZSh2YWx1ZSkuY3Jl
YXRlRmlsdGVyT3BlcmF0aW9ucyh0aGlzKTsKKyAgICAgICAgZG93bmNhc3Q8Q1NTRmlsdGVySW1h
Z2VWYWx1ZT4odmFsdWUpLmNyZWF0ZUZpbHRlck9wZXJhdGlvbnModGhpcyk7CiAgICAgfQogCiAg
ICAgaWYgKHZhbHVlLmlzUGVuZGluZygpKSB7CkBAIC0zNTE3LDkgKzM1MTcsOSBAQCBib29sIFN0
eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIEZp
bHRlck9wZXJhdGlvbnMmCiAgICAgaWYgKCFpblZhbHVlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCi0gICAgaWYgKGluVmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGlu
VmFsdWUpOwotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NW
YWx1ZU5vbmUpCisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaW5WYWx1ZSkpIHsKKyAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCppblZhbHVlKTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZh
bHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgCkBAIC0zNTI5LDIxICszNTI5LDIxIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRl
RmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgRmlsdGVyT3BlcmF0aW9ucyYKICAg
ICBGaWx0ZXJPcGVyYXRpb25zIG9wZXJhdGlvbnM7CiAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVy
YXRvciBpID0gaW5WYWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7CiAgICAgICAgIENT
U1ZhbHVlKiBjdXJyVmFsdWUgPSBpLnZhbHVlKCk7Ci0gICAgICAgIGlmICghY3VyclZhbHVlLT5p
c1dlYktpdENTU0ZpbHRlclZhbHVlKCkpCisgICAgICAgIGlmICghaXM8V2ViS2l0Q1NTRmlsdGVy
VmFsdWU+KCpjdXJyVmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgV2Vi
S2l0Q1NTRmlsdGVyVmFsdWUqIGZpbHRlclZhbHVlID0gdG9XZWJLaXRDU1NGaWx0ZXJWYWx1ZShp
LnZhbHVlKCkpOwotICAgICAgICBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgb3BlcmF0
aW9uVHlwZSA9IGZpbHRlck9wZXJhdGlvbkZvclR5cGUoZmlsdGVyVmFsdWUtPm9wZXJhdGlvblR5
cGUoKSk7CisgICAgICAgIFdlYktpdENTU0ZpbHRlclZhbHVlJiBmaWx0ZXJWYWx1ZSA9IGRvd25j
YXN0PFdlYktpdENTU0ZpbHRlclZhbHVlPigqaS52YWx1ZSgpKTsKKyAgICAgICAgRmlsdGVyT3Bl
cmF0aW9uOjpPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUgPSBmaWx0ZXJPcGVyYXRpb25Gb3JU
eXBlKGZpbHRlclZhbHVlLm9wZXJhdGlvblR5cGUoKSk7CiAKICAgICAgICAgaWYgKG9wZXJhdGlv
blR5cGUgPT0gRmlsdGVyT3BlcmF0aW9uOjpSRUZFUkVOQ0UpIHsKLSAgICAgICAgICAgIGlmIChm
aWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgIT0gMSkKKyAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5s
ZW5ndGgoKSAhPSAxKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgQ1NT
VmFsdWUqIGFyZ3VtZW50ID0gZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCk7
CisgICAgICAgICAgICBDU1NWYWx1ZSogYXJndW1lbnQgPSBmaWx0ZXJWYWx1ZS5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDApOwogCi0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50LT5pc1ByaW1pdGl2
ZVZhbHVlKCkpCisgICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqYXJndW1l
bnQpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKCphcmd1bWVudCk7
CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oKmFyZ3VtZW50KTsKICAgICAgICAgICAgIFN0cmluZyBjc3NV
cmwgPSBwcmltaXRpdmVWYWx1ZS5nZXRTdHJpbmdWYWx1ZSgpOwogICAgICAgICAgICAgVVJMIHVy
bCA9IG1fc3RhdGUuZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChjc3NVcmwpOwogCkBAIC0zNTYwLDI0
ICszNTYwLDI0IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhD
U1NWYWx1ZSogaW5WYWx1ZSwgRmlsdGVyT3BlcmF0aW9ucyYKICAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIGZpcnN0VmFsdWUgPSBudWxscHRyOwogICAgICAgICBpZiAob3BlcmF0aW9uVHlwZSAh
PSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XKSB7CiAgICAgICAgICAgICBib29sIGhhdmVO
b25QcmltaXRpdmVWYWx1ZSA9IGZhbHNlOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
MDsgaiA8IGZpbHRlclZhbHVlLT5sZW5ndGgoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhqKS0+aXNQcmltaXRpdmVWYWx1
ZSgpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgZmlsdGVyVmFsdWUu
bGVuZ3RoKCk7ICsraikgeworICAgICAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCpmaWx0ZXJWYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGopKSkgewogICAgICAgICAg
ICAgICAgICAgICBoYXZlTm9uUHJpbWl0aXZlVmFsdWUgPSB0cnVlOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpZiAoaGF2ZU5vblByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBm
aXJzdFZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZShmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygwKSk7CisgICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUubGVuZ3RoKCkpCisg
ICAgICAgICAgICAgICAgZmlyc3RWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihm
aWx0ZXJWYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsKICAgICAgICAgfQogCi0gICAg
ICAgIHN3aXRjaCAoZmlsdGVyVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkgeworICAgICAgICBzd2l0
Y2ggKGZpbHRlclZhbHVlLm9wZXJhdGlvblR5cGUoKSkgewogICAgICAgICBjYXNlIFdlYktpdENT
U0ZpbHRlclZhbHVlOjpHcmF5c2NhbGVGaWx0ZXJPcGVyYXRpb246CiAgICAgICAgIGNhc2UgV2Vi
S2l0Q1NTRmlsdGVyVmFsdWU6OlNlcGlhRmlsdGVyT3BlcmF0aW9uOgogICAgICAgICBjYXNlIFdl
YktpdENTU0ZpbHRlclZhbHVlOjpTYXR1cmF0ZUZpbHRlck9wZXJhdGlvbjogewogICAgICAgICAg
ICAgZG91YmxlIGFtb3VudCA9IDE7Ci0gICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0
aCgpID09IDEpIHsKKyAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5sZW5ndGgoKSA9PSAxKSB7
CiAgICAgICAgICAgICAgICAgYW1vdW50ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsK
ICAgICAgICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCiAgICAgICAg
ICAgICAgICAgICAgIGFtb3VudCAvPSAxMDA7CkBAIC0zNTg4LDcgKzM1ODgsNyBAQCBib29sIFN0
eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIEZp
bHRlck9wZXJhdGlvbnMmCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJW
YWx1ZTo6SHVlUm90YXRlRmlsdGVyT3BlcmF0aW9uOiB7CiAgICAgICAgICAgICBkb3VibGUgYW5n
bGUgPSAwOwotICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA9PSAxKQorICAg
ICAgICAgICAgaWYgKGZpbHRlclZhbHVlLmxlbmd0aCgpID09IDEpCiAgICAgICAgICAgICAgICAg
YW5nbGUgPSBmaXJzdFZhbHVlLT5jb21wdXRlRGVncmVlcygpOwogCiAgICAgICAgICAgICBvcGVy
YXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
bjo6Y3JlYXRlKGFuZ2xlLCBvcGVyYXRpb25UeXBlKSk7CkBAIC0zNTk4LDggKzM1OTgsOCBAQCBi
b29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFs
dWUsIEZpbHRlck9wZXJhdGlvbnMmCiAgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6
OkJyaWdodG5lc3NGaWx0ZXJPcGVyYXRpb246CiAgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVy
VmFsdWU6OkNvbnRyYXN0RmlsdGVyT3BlcmF0aW9uOgogICAgICAgICBjYXNlIFdlYktpdENTU0Zp
bHRlclZhbHVlOjpPcGFjaXR5RmlsdGVyT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICBkb3VibGUg
YW1vdW50ID0gKGZpbHRlclZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTRmlsdGVy
VmFsdWU6OkJyaWdodG5lc3NGaWx0ZXJPcGVyYXRpb24pID8gMCA6IDE7Ci0gICAgICAgICAgICBp
ZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpID09IDEpIHsKKyAgICAgICAgICAgIGRvdWJsZSBhbW91
bnQgPSAoZmlsdGVyVmFsdWUub3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU0ZpbHRlclZhbHVl
OjpCcmlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uKSA/IDAgOiAxOworICAgICAgICAgICAgaWYgKGZp
bHRlclZhbHVlLmxlbmd0aCgpID09IDEpIHsKICAgICAgICAgICAgICAgICBhbW91bnQgPSBmaXJz
dFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwogICAgICAgICAgICAgICAgIGlmIChmaXJzdFZhbHVl
LT5pc1BlcmNlbnRhZ2UoKSkKICAgICAgICAgICAgICAgICAgICAgYW1vdW50IC89IDEwMDsKQEAg
LTM2MTAsNyArMzYxMCw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0
aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgRmlsdGVyT3BlcmF0aW9ucyYKICAgICAgICAgfQogICAg
ICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpCbHVyRmlsdGVyT3BlcmF0aW9uOiB7CiAg
ICAgICAgICAgICBMZW5ndGggc3RkRGV2aWF0aW9uID0gTGVuZ3RoKDAsIEZpeGVkKTsKLSAgICAg
ICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPj0gMSkKKyAgICAgICAgICAgIGlmIChm
aWx0ZXJWYWx1ZS5sZW5ndGgoKSA+PSAxKQogICAgICAgICAgICAgICAgIHN0ZERldmlhdGlvbiA9
IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEoKSk7CiAgICAgICAgICAgICBpZiAoc3RkRGV2aWF0aW9uLmlzVW5kZWZpbmVkKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzYxOSwyMSArMzYxOSwyMSBAQCBi
b29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFs
dWUsIEZpbHRlck9wZXJhdGlvbnMmCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9u
OiB7Ci0gICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpICE9IDEpCisgICAgICAg
ICAgICBpZiAoZmlsdGVyVmFsdWUubGVuZ3RoKCkgIT0gMSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIENTU1ZhbHVlKiBjc3NWYWx1ZSA9IGZpbHRlclZhbHVl
LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApOwotICAgICAgICAgICAgaWYgKCFjc3NWYWx1ZS0+
aXNTaGFkb3dWYWx1ZSgpKQorICAgICAgICAgICAgQ1NTVmFsdWUqIGNzc1ZhbHVlID0gZmlsdGVy
VmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKTsKKyAgICAgICAgICAgIGlmICghaXM8Q1NT
U2hhZG93VmFsdWU+KCpjc3NWYWx1ZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgICAgIENTU1NoYWRvd1ZhbHVlKiBpdGVtID0gdG9DU1NTaGFkb3dWYWx1ZShjc3NWYWx1
ZSk7Ci0gICAgICAgICAgICBpbnQgeCA9IGl0ZW0tPngtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0
ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwotICAgICAgICAgICAgaW50IHkgPSBpdGVt
LT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgp
KTsKKyAgICAgICAgICAgIENTU1NoYWRvd1ZhbHVlJiBpdGVtID0gZG93bmNhc3Q8Q1NTU2hhZG93
VmFsdWU+KCpjc3NWYWx1ZSk7CisgICAgICAgICAgICBpbnQgeCA9IGl0ZW0ueC0+Y29tcHV0ZUxl
bmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CisgICAgICAgICAg
ICBpbnQgeSA9IGl0ZW0ueS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEoKSk7CiAgICAgICAgICAgICBJbnRQb2ludCBsb2NhdGlvbih4LCB5KTsKLSAg
ICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5n
dGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpIDogMDsKKyAgICAgICAg
ICAgIGludCBibHVyID0gaXRlbS5ibHVyID8gaXRlbS5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4o
c3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKSA6IDA7CiAgICAgICAgICAgICBDb2xv
ciBjb2xvcjsKLSAgICAgICAgICAgIGlmIChpdGVtLT5jb2xvcikKLSAgICAgICAgICAgICAgICBj
b2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKKyAgICAg
ICAgICAgIGlmIChpdGVtLmNvbG9yKQorICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9t
UHJpbWl0aXZlVmFsdWUoaXRlbS5jb2xvci5nZXQoKSk7CiAKICAgICAgICAgICAgIG9wZXJhdGlv
bnMub3BlcmF0aW9ucygpLmFwcGVuZChEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUo
bG9jYXRpb24sIGJsdXIsIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFy
ZW50KSk7CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9UcmFuc2Zvcm1GdW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1RyYW5zZm9ybUZ1
bmN0aW9ucy5jcHAKaW5kZXggMDY2M2MzMTE5NTgxMjdlMjg4OGE3ZDkwNDI2NTNlOWIxYWFhZWFl
Yy4uOWZjZjA0YzlmY2U4ODA0YjQ2OWQ1ZGVjMWJmOTYxMDk2NzI5NjYwMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL1RyYW5zZm9ybUZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL1RyYW5zZm9ybUZ1bmN0aW9ucy5jcHAKQEAgLTkyLDE2ICs5MiwxNiBAQCBib29s
IHRyYW5zZm9ybXNGb3JWYWx1ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEmIGNvbnZlcgogICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZh
bHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKICAgICAgICAgQ1NTVmFsdWUqIGN1cnJW
YWx1ZSA9IGkudmFsdWUoKTsKIAotICAgICAgICBpZiAoIWN1cnJWYWx1ZS0+aXNXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
PigqY3VyclZhbHVlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlKiB0cmFuc2Zvcm1WYWx1ZSA9IHRvV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWUoaS52YWx1ZSgpKTsKLSAgICAgICAgaWYgKCF0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkpCisg
ICAgICAgIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlJiB0cmFuc2Zvcm1WYWx1ZSA9IGRvd25jYXN0
PFdlYktpdENTU1RyYW5zZm9ybVZhbHVlPigqaS52YWx1ZSgpKTsKKyAgICAgICAgaWYgKCF0cmFu
c2Zvcm1WYWx1ZS5sZW5ndGgoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGJv
b2wgaGF2ZU5vblByaW1pdGl2ZVZhbHVlID0gZmFsc2U7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aiA9IDA7IGogPCB0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCk7ICsraikgewotICAgICAgICAgICAg
aWYgKCF0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhqKS0+aXNQcmltaXRp
dmVWYWx1ZSgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCB0cmFuc2Zvcm1W
YWx1ZS5sZW5ndGgoKTsgKytqKSB7CisgICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZh
bHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhqKSkpIHsKICAgICAg
ICAgICAgICAgICBoYXZlTm9uUHJpbWl0aXZlVmFsdWUgPSB0cnVlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTA5LDI3ICsxMDksMjcgQEAgYm9vbCB0cmFuc2Zv
cm1zRm9yVmFsdWUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhJiBjb252ZXIKICAgICAgICAgaWYgKGhhdmVOb25QcmltaXRpdmVWYWx1ZSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdFZhbHVlID0g
dG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVj
aygwKSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBmaXJzdFZhbHVlID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDApKTsKIAotICAgICAgICBzd2l0Y2ggKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkp
IHsKKyAgICAgICAgc3dpdGNoICh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkpIHsKICAg
ICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVUcmFuc2Zvcm1PcGVyYXRp
b246CiAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9y
bU9wZXJhdGlvbjoKICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZ
VHJhbnNmb3JtT3BlcmF0aW9uOiB7CiAgICAgICAgICAgICBkb3VibGUgc3ggPSAxLjA7CiAgICAg
ICAgICAgICBkb3VibGUgc3kgPSAxLjA7Ci0gICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUt
Pm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNm
b3JtT3BlcmF0aW9uKQotICAgICAgICAgICAgICAgIHN5ID0gZmlyc3RWYWx1ZS0+Z2V0RG91Ymxl
VmFsdWUoKTsKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkg
PT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlvbikKKyAg
ICAgICAgICAgICAgICBzeSA9IGZpcnN0VmFsdWUuZ2V0RG91YmxlVmFsdWUoKTsKICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHN4ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFs
dWUoKTsKLSAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUo
KSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUg
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc2Vjb25kVmFsdWUtPmdldERv
dWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgc3ggPSBmaXJzdFZhbHVlLmdldERvdWJsZVZh
bHVlKCk7CisgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUo
KSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5sZW5ndGgoKSA+IDEpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBzZWNvbmRWYWx1ZSA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzeSA9IHNlY29uZFZhbHVl
LmdldERvdWJsZVZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgICAgICAgICAgICAgc3kgPSBzeDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2NhbGVUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZShzeCwgc3ksIDEuMCwgdHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0
cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgb3BlcmF0aW9u
cy5vcGVyYXRpb25zKCkuYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoc3gs
IHN5LCAxLjAsIHRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9u
VHlwZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVaVHJhbnNmb3JtT3BlcmF0aW9uOgpAQCAtMTM3
LDI1ICsxMzcsMjUgQEAgYm9vbCB0cmFuc2Zvcm1zRm9yVmFsdWUoQ1NTVmFsdWUqIHZhbHVlLCBj
b25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXIKICAgICAgICAgICAgIGRvdWJs
ZSBzeCA9IDEuMDsKICAgICAgICAgICAgIGRvdWJsZSBzeSA9IDEuMDsKICAgICAgICAgICAgIGRv
dWJsZSBzeiA9IDEuMDsKLSAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9u
VHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVpUcmFuc2Zvcm1PcGVyYXRp
b24pCi0gICAgICAgICAgICAgICAgc3ogPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwot
ICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uKQotICAgICAg
ICAgICAgICAgIHN5ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAg
IGlmICh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlNjYWxlWlRyYW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICBzeiA9IGZp
cnN0VmFsdWUuZ2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRyYW5zZm9y
bVZhbHVlLm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZ
VHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIHN5ID0gZmlyc3RWYWx1ZS5nZXRE
b3VibGVWYWx1ZSgpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3ggPSBm
aXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zv
cm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2Fs
ZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9y
bVZhbHVlLT5sZW5ndGgoKSA+IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiB0aGlyZFZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1
ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBz
eiA9IHRoaXJkVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgc3ggPSBm
aXJzdFZhbHVlLmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9y
bVZhbHVlLm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVY
VHJhbnNmb3JtT3BlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1W
YWx1ZS5sZW5ndGgoKSA+IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlJiB0aGlyZFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zv
cm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN6ID0gdGhpcmRWYWx1ZS5nZXREb3VibGVWYWx1ZSgpOwogICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAx
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFs
dWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc2Vjb25kVmFsdWUtPmdl
dERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5s
ZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
JiBzZWNvbmRWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFs
dWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBz
eSA9IHNlY29uZFZhbHVlLmdldERvdWJsZVZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBzeDsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBl
bmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShzeCwgc3ksIHN6LCB0cmFuc2Zvcm1P
cGVyYXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAg
ICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRp
b246OmNyZWF0ZShzeCwgc3ksIHN6LCB0cmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9ybVZh
bHVlLm9wZXJhdGlvblR5cGUoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbjoKQEAgLTE2MywxNCArMTYzLDE0IEBAIGJvb2wgdHJhbnNmb3Jtc0ZvclZhbHVlKENT
U1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyCiAg
ICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1P
cGVyYXRpb246IHsKICAgICAgICAgICAgIExlbmd0aCB0eCA9IExlbmd0aCgwLCBGaXhlZCk7CiAg
ICAgICAgICAgICBMZW5ndGggdHkgPSBMZW5ndGgoMCwgRml4ZWQpOwotICAgICAgICAgICAgaWYg
KHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb24pCi0gICAgICAgICAgICAgICAgdHkgPSBj
b252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBjb252ZXJzaW9uRGF0YSk7CisgICAgICAg
ICAgICBpZiAodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAg
IHR5ID0gY29udmVydFRvRmxvYXRMZW5ndGgoJmZpcnN0VmFsdWUsIGNvbnZlcnNpb25EYXRhKTsK
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHR4ID0gY29udmVydFRvRmxvYXRM
ZW5ndGgoZmlyc3RWYWx1ZSwgY29udmVyc2lvbkRhdGEpOwotICAgICAgICAgICAgICAgIGlmICh0
cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpUcmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRy
YW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRMZW5ndGgoc2Vjb25kVmFsdWUsIGNvbnZlcnNp
b25EYXRhKTsKKyAgICAgICAgICAgICAgICB0eCA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKCZmaXJz
dFZhbHVlLCBjb252ZXJzaW9uRGF0YSk7CisgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZh
bHVlLm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRl
WFRyYW5zZm9ybU9wZXJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3Jt
VmFsdWUubGVuZ3RoKCkgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSYgc2Vjb25kVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5z
Zm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgdHkgPSBjb252ZXJ0VG9GbG9hdExlbmd0aCgmc2Vjb25kVmFsdWUsIGNvbnZlcnNpb25E
YXRhKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KQEAgLTE3OCw3ICsxNzgsNyBAQCBib29sIHRyYW5zZm9ybXNGb3JWYWx1ZShDU1NWYWx1
ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcgogICAgICAg
ICAgICAgaWYgKHR4LmlzVW5kZWZpbmVkKCkgfHwgdHkuaXNVbmRlZmluZWQoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9u
cygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0eCwgdHksIExl
bmd0aCgwLCBGaXhlZCksIHRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUtPm9w
ZXJhdGlvblR5cGUoKSkpKTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFw
cGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0eCwgdHksIExlbmd0aCgw
LCBGaXhlZCksIHRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9u
VHlwZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5zZm9ybU9wZXJhdGlvbjoKQEAg
LTE4NiwyMCArMTg2LDIwIEBAIGJvb2wgdHJhbnNmb3Jtc0ZvclZhbHVlKENTU1ZhbHVlKiB2YWx1
ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyCiAgICAgICAgICAgICBM
ZW5ndGggdHggPSBMZW5ndGgoMCwgRml4ZWQpOwogICAgICAgICAgICAgTGVuZ3RoIHR5ID0gTGVu
Z3RoKDAsIEZpeGVkKTsKICAgICAgICAgICAgIExlbmd0aCB0eiA9IExlbmd0aCgwLCBGaXhlZCk7
Ci0gICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAg
ICAgICAgICAgICB0eiA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIGNvbnZlcnNp
b25EYXRhKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25U
eXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVy
YXRpb24pCi0gICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZh
bHVlLCBjb252ZXJzaW9uRGF0YSk7CisgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUub3Bl
cmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVaVHJhbnNm
b3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIHR6ID0gY29udmVydFRvRmxvYXRMZW5ndGgo
JmZpcnN0VmFsdWUsIGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRyYW5z
Zm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJh
bnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRU
b0Zsb2F0TGVuZ3RoKCZmaXJzdFZhbHVlLCBjb252ZXJzaW9uRGF0YSk7CiAgICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICB0eCA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFs
dWUsIGNvbnZlcnNpb25EYXRhKTsKLSAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUt
Pm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWFRy
YW5zZm9ybU9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFs
dWUtPmxlbmd0aCgpID4gMikgewotICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHRoaXJkVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR6ID0g
Y29udmVydFRvRmxvYXRMZW5ndGgodGhpcmRWYWx1ZSwgY29udmVyc2lvbkRhdGEpOworICAgICAg
ICAgICAgICAgIHR4ID0gY29udmVydFRvRmxvYXRMZW5ndGgoJmZpcnN0VmFsdWUsIGNvbnZlcnNp
b25EYXRhKTsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9uVHlw
ZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0
aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5sZW5ndGgoKSA+
IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiB0aGlyZFZh
bHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR6ID0gY29udmVy
dFRvRmxvYXRMZW5ndGgoJnRoaXJkVmFsdWUsIGNvbnZlcnNpb25EYXRhKTsKICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0
aCgpID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNl
Y29uZFZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjaygxKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRU
b0Zsb2F0TGVuZ3RoKHNlY29uZFZhbHVlLCBjb252ZXJzaW9uRGF0YSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5sZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBzZWNvbmRWYWx1ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKCZzZWNv
bmRWYWx1ZSwgY29udmVyc2lvbkRhdGEpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjA3LDEyICsyMDcsMTIgQEAgYm9vbCB0cmFu
c2Zvcm1zRm9yVmFsdWUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJiBjb252ZXIKICAgICAgICAgICAgIGlmICh0eC5pc1VuZGVmaW5lZCgpIHx8IHR5Lmlz
VW5kZWZpbmVkKCkgfHwgdHouaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0eCwgdHksIHR6LCB0cmFuc2Zvcm1PcGVy
YXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAg
ICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUodHgsIHR5LCB0eiwgdHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1W
YWx1ZS5vcGVyYXRpb25UeXBlKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVUcmFuc2Zvcm1PcGVy
YXRpb246IHsKLSAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGZpcnN0VmFsdWUtPmNvbXB1dGVE
ZWdyZWVzKCk7Ci0gICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoUm90
YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoMCwgMCwgMSwgYW5nbGUsIHRyYW5zZm9ybU9w
ZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAgICAgICAg
ICAgIGRvdWJsZSBhbmdsZSA9IGZpcnN0VmFsdWUuY29tcHV0ZURlZ3JlZXMoKTsKKyAgICAgICAg
ICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVyYXRp
b246OmNyZWF0ZSgwLCAwLCAxLCBhbmdsZSwgdHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zv
cm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVYVHJhbnNmb3Jt
T3BlcmF0aW9uOgpAQCAtMjIxLDI4ICsyMjEsMjggQEAgYm9vbCB0cmFuc2Zvcm1zRm9yVmFsdWUo
Q1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXIK
ICAgICAgICAgICAgIGRvdWJsZSB4ID0gMDsKICAgICAgICAgICAgIGRvdWJsZSB5ID0gMDsKICAg
ICAgICAgICAgIGRvdWJsZSB6ID0gMDsKLSAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGZpcnN0
VmFsdWUtPmNvbXB1dGVEZWdyZWVzKCk7CisgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmaXJz
dFZhbHVlLmNvbXB1dGVEZWdyZWVzKCk7CiAKLSAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1
ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVYVHJh
bnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlv
blR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWFRyYW5zZm9ybU9wZXJh
dGlvbikKICAgICAgICAgICAgICAgICB4ID0gMTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHRyYW5z
Zm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJv
dGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAgICAgICBlbHNlIGlmICh0cmFuc2Zvcm1W
YWx1ZS5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVlU
cmFuc2Zvcm1PcGVyYXRpb24pCiAgICAgICAgICAgICAgICAgeSA9IDE7CiAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgeiA9IDE7Ci0gICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJh
dGlvbnMoKS5hcHBlbmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoeCwgeSwgeiwg
YW5nbGUsIHRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5
cGUoKSkpKTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3Rh
dGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBhbmdsZSwgdHJhbnNmb3JtT3Bl
cmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkpKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpSb3RhdGUzRFRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAgICAgaWYgKHRyYW5zZm9y
bVZhbHVlLT5sZW5ndGgoKSA8IDQpCisgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUubGVu
Z3RoKCkgPCA0KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1
ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogdGhpcmRWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpOwotICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IGZvdXJ0aFZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjaygzKSk7Ci0gICAgICAgICAgICBkb3VibGUgeCA9IGZpcnN0VmFsdWUt
PmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICBkb3VibGUgeSA9IHNlY29uZFZhbHVlLT5n
ZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgZG91YmxlIHogPSB0aGlyZFZhbHVlLT5nZXRE
b3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZm91cnRoVmFsdWUtPmNv
bXB1dGVEZWdyZWVzKCk7Ci0gICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBl
bmQoUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoeCwgeSwgeiwgYW5nbGUsIHRyYW5z
Zm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAg
ICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBzZWNvbmRWYWx1ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7
CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgdGhpcmRWYWx1ZSA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygy
KSk7CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgZm91cnRoVmFsdWUgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soMykpOworICAgICAgICAgICAgZG91YmxlIHggPSBmaXJzdFZhbHVlLmdldERvdWJsZVZhbHVl
KCk7CisgICAgICAgICAgICBkb3VibGUgeSA9IHNlY29uZFZhbHVlLmdldERvdWJsZVZhbHVlKCk7
CisgICAgICAgICAgICBkb3VibGUgeiA9IHRoaXJkVmFsdWUuZ2V0RG91YmxlVmFsdWUoKTsKKyAg
ICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGZvdXJ0aFZhbHVlLmNvbXB1dGVEZWdyZWVzKCk7Cisg
ICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uOjpjcmVhdGUoeCwgeSwgeiwgYW5nbGUsIHRyYW5zZm9ybU9wZXJhdGlvblR5cGUo
dHJhbnNmb3JtVmFsdWUub3BlcmF0aW9uVHlwZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1RyYW5z
Zm9ybU9wZXJhdGlvbjoKQEAgLTI1MCw2MiArMjUwLDYyIEBAIGJvb2wgdHJhbnNmb3Jtc0ZvclZh
bHVlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29u
dmVyCiAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdZVHJhbnNmb3Jt
T3BlcmF0aW9uOiB7CiAgICAgICAgICAgICBkb3VibGUgYW5nbGVYID0gMDsKICAgICAgICAgICAg
IGRvdWJsZSBhbmdsZVkgPSAwOwotICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1
ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKLSAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3Bl
cmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3WVRyYW5zZm9ybU9w
ZXJhdGlvbikKKyAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGZpcnN0VmFsdWUuY29tcHV0ZURl
Z3JlZXMoKTsKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkg
PT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdZVHJhbnNmb3JtT3BlcmF0aW9uKQogICAg
ICAgICAgICAgICAgIGFuZ2xlWSA9IGFuZ2xlOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICAgICAgYW5nbGVYID0gYW5nbGU7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZh
bHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdUcmFu
c2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVl
LT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBzZWNvbmRWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVZ
ID0gc2Vjb25kVmFsdWUtPmNvbXB1dGVEZWdyZWVzKCk7CisgICAgICAgICAgICAgICAgaWYgKHRy
YW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
U2tld1RyYW5zZm9ybU9wZXJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNm
b3JtVmFsdWUubGVuZ3RoKCkgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSYgc2Vjb25kVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRy
YW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYW5nbGVZID0gc2Vjb25kVmFsdWUuY29tcHV0ZURlZ3JlZXMoKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTa2V3VHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUoYW5nbGVYLCBhbmdsZVksIHRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3Jt
VmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0
aW9ucygpLmFwcGVuZChTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoYW5nbGVYLCBhbmds
ZVksIHRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9uVHlwZSgp
KSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAg
ICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpIDwgNikKKyAgICAgICAgICAgIGlmICh0cmFu
c2Zvcm1WYWx1ZS5sZW5ndGgoKSA8IDYpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBkb3VibGUgYSA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAg
ICBkb3VibGUgYiA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soMSkpLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgZG91Ymxl
IGMgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDIpKS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgIGRvdWJsZSBkID0gdG9D
U1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygz
KSktPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICBkb3VibGUgZSA9IGNvbnZlcnNpb25E
YXRhLnpvb20oKSAqIHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soNCkpLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgZG91Ymxl
IGYgPSBjb252ZXJzaW9uRGF0YS56b29tKCkgKiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9y
bVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDUpKS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAg
ICAgICAgICAgIGRvdWJsZSBhID0gZmlyc3RWYWx1ZS5nZXREb3VibGVWYWx1ZSgpOworICAgICAg
ICAgICAgZG91YmxlIGIgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZh
bHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpLmdldERvdWJsZVZhbHVlKCk7CisgICAgICAg
ICAgICBkb3VibGUgYyA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFs
dWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSkuZ2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAg
ICAgIGRvdWJsZSBkID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1
ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAg
ICAgZG91YmxlIGUgPSBjb252ZXJzaW9uRGF0YS56b29tKCkgKiBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNCkpLmdldERv
dWJsZVZhbHVlKCk7CisgICAgICAgICAgICBkb3VibGUgZiA9IGNvbnZlcnNpb25EYXRhLnpvb20o
KSAqIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhv
dXRCb3VuZHNDaGVjayg1KSkuZ2V0RG91YmxlVmFsdWUoKTsKICAgICAgICAgICAgIG9wZXJhdGlv
bnMub3BlcmF0aW9ucygpLmFwcGVuZChNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShh
LCBiLCBjLCBkLCBlLCBmKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlv
bjogewotICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA8IDE2KQorICAg
ICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLmxlbmd0aCgpIDwgMTYpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgodG9DU1NQ
cmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSkt
PmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgdG9DU1NQcmltaXRpdmVWYWx1ZSh0
cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSktPmdldERvdWJsZVZhbHVl
KCksCi0gICAgICAgICAgICAgICAgdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+
aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAg
ICAgICAgdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjaygzKSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgdG9DU1NQcmlt
aXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg0KSktPmdl
dERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFu
c2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg1KSktPmdldERvdWJsZVZhbHVlKCks
Ci0gICAgICAgICAgICAgICAgdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRl
bVdpdGhvdXRCb3VuZHNDaGVjayg2KSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAg
ICAgdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjayg3KSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgdG9DU1NQcmltaXRp
dmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg4KSktPmdldERv
dWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zv
cm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg5KSktPmdldERvdWJsZVZhbHVlKCksCi0g
ICAgICAgICAgICAgICAgdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjaygxMCkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAg
IHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soMTEpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICBjb252ZXJzaW9uRGF0
YS56b29tKCkgKiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDEyKSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgY29u
dmVyc2lvbkRhdGEuem9vbSgpICogdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+
aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMykpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAg
ICAgICAgIHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMTQpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0b0NTU1By
aW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDE1KSkt
PmdldERvdWJsZVZhbHVlKCkpOworICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0
cml4KGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhv
dXRCb3VuZHNDaGVjaygwKSkuZ2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soMSkpLmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIp
KS5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgIGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygzKSkuZ2V0RG91
YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
KnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNCkpLmdldERvdWJsZVZhbHVl
KCksCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zv
cm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDUpKS5nZXREb3VibGVWYWx1ZSgpLAorICAg
ICAgICAgICAgICAgIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUu
aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg2KSkuZ2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAg
ICAgICBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soNykpLmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDgpKS5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgIGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayg5
KSkuZ2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTApKS5nZXRE
b3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMSkpLmdldERvdWJsZVZh
bHVlKCksCisgICAgICAgICAgICAgICAgY29udmVyc2lvbkRhdGEuem9vbSgpICogZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDEyKSkuZ2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICBjb252ZXJzaW9uRGF0YS56
b29tKCkgKiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soMTMpKS5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAg
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygxNCkpLmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKDE1KSkuZ2V0RG91YmxlVmFsdWUoKSk7CiAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJh
dGlvbnMoKS5hcHBlbmQoTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtYXRyaXgp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOiB7CiAgICAgICAg
ICAgICBMZW5ndGggcCA9IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICBpZiAoZmlyc3RW
YWx1ZS0+aXNMZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBwID0gY29udmVydFRvRmxvYXRMZW5n
dGgoZmlyc3RWYWx1ZSwgY29udmVyc2lvbkRhdGEpOworICAgICAgICAgICAgaWYgKGZpcnN0VmFs
dWUuaXNMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBwID0gY29udmVydFRvRmxvYXRMZW5ndGgo
JmZpcnN0VmFsdWUsIGNvbnZlcnNpb25EYXRhKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgICAgIC8vIFRoaXMgaXMgYSBxdWlyayB0aGF0IHNob3VsZCBnbyBhd2F5IHdoZW4gM2Qg
dHJhbnNmb3JtcyBhcmUgZmluYWxpemVkLgotICAgICAgICAgICAgICAgIGRvdWJsZSB2YWwgPSBm
aXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgIGRvdWJsZSB2YWwg
PSBmaXJzdFZhbHVlLmdldERvdWJsZVZhbHVlKCk7CiAgICAgICAgICAgICAgICAgcCA9IHZhbCA+
PSAwID8gTGVuZ3RoKGNsYW1wVG9Qb3NpdGl2ZUludGVnZXIodmFsKSwgRml4ZWQpIDogTGVuZ3Ro
KFVuZGVmaW5lZCk7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9WaWV3cG9ydFN0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1ZpZXdw
b3J0U3R5bGVSZXNvbHZlci5jcHAKaW5kZXggOGQ0MTI5YTBjZjlhZDk2YjliYTZlMjE3OTkwMDVl
MzVkM2MzODJiYi4uNmMxNDZkZTIyOTA5OWNhNzRjYmJlNWY2NjRhMjg2ODc3ZWIwZmU5OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1ZpZXdwb3J0U3R5bGVSZXNvbHZlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL1ZpZXdwb3J0U3R5bGVSZXNvbHZlci5jcHAKQEAgLTEwOCwx
OSArMTA4LDE5IEBAIGZsb2F0IFZpZXdwb3J0U3R5bGVSZXNvbHZlcjo6Z2V0Vmlld3BvcnRBcmd1
bWVudFZhbHVlKENTU1Byb3BlcnR5SUQgaWQpIGNvbnN0CiAgICAgICAgIGRlZmF1bHRWYWx1ZSA9
IDE7CiAKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gbV9wcm9wZXJ0eVNldC0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShpZCk7Ci0gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCiAgICAgICAg
IHJldHVybiBkZWZhdWx0VmFsdWU7CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLmdldCgpKTsKKyAgICBDU1NQcmltaXRp
dmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKTsKIAotICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSB8fCBwcmltaXRpdmVW
YWx1ZS0+aXNQeCgpKQotICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFs
dWUoKTsKKyAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNOdW1iZXIoKSB8fCBwcmltaXRpdmVWYWx1
ZS5pc1B4KCkpCisgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKCk7
CiAKLSAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzRm9udFJlbGF0aXZlTGVuZ3RoKCkpCi0gICAg
ICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpICogbV9kb2N1bWVudC0+
ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlclN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmNvbXB1
dGVkU2l6ZSgpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0ZvbnRSZWxhdGl2ZUxlbmd0aCgp
KQorICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWUuZ2V0RmxvYXRWYWx1ZSgpICogbV9kb2N1
bWVudC0+ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlclN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigp
LmNvbXB1dGVkU2l6ZSgpOwogCi0gICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2Uo
KSkgewotICAgICAgICBmbG9hdCBwZXJjZW50VmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0Rmxv
YXRWYWx1ZSgpIC8gMTAwLjBmOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2Uo
KSkgeworICAgICAgICBmbG9hdCBwZXJjZW50VmFsdWUgPSBwcmltaXRpdmVWYWx1ZS5nZXRGbG9h
dFZhbHVlKCkgLyAxMDAuMGY7CiAgICAgICAgIHN3aXRjaCAoaWQpIHsKICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eU1heEhlaWdodDoKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1pbkhlaWdodDoK
QEAgLTE0MCw3ICsxNDAsNyBAQCBmbG9hdCBWaWV3cG9ydFN0eWxlUmVzb2x2ZXI6OmdldFZpZXdw
b3J0QXJndW1lbnRWYWx1ZShDU1NQcm9wZXJ0eUlEIGlkKSBjb25zdAogICAgICAgICB9CiAgICAg
fQogCi0gICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgc3dp
dGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAgICBjYXNlIENTU1ZhbHVlQXV0
bzoKICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKICAgICBjYXNlIENTU1ZhbHVlRGV2aWNl
SGVpZ2h0OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0ZpbHRlclZh
bHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTRmlsdGVyVmFsdWUuaAppbmRleCA0
ZjlkOTE1ODY2OWY1MWEwYmMxZDJkMDY3ZmY2MmE4MzBmZmU0MTA0Li5kYWYzYWZiYmQxNGI0YmEy
MGNlM2Y5MzI4NDk2Yjc4ZTA2OWE2MmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
V2ViS2l0Q1NTRmlsdGVyVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NT
RmlsdGVyVmFsdWUuaApAQCAtNzAsOCArNzAsOCBAQCBwcml2YXRlOgogICAgIEZpbHRlck9wZXJh
dGlvblR5cGUgbV90eXBlOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoV2ViS2l0Q1NTRmls
dGVyVmFsdWUsIGlzV2ViS2l0Q1NTRmlsdGVyVmFsdWUoKSkKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAotfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoV2ViS2l0Q1NTRmlsdGVy
VmFsdWUsIGlzV2ViS2l0Q1NTRmlsdGVyVmFsdWUoKSkKIAotI2VuZGlmCisjZW5kaWYgLy8gV2Vi
S2l0Q1NTRmlsdGVyVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktp
dENTU01hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmNwcApp
bmRleCA0M2JiZDFjMzFjNmQ5ZjI0ZjE2OGJiMGMxOWM2MmYwYzc1ODliMzM2Li5jNmQ1OTk5NzIw
OGYyMTVhMTE0MjExNjdmZDM5MDFmODg4MzI4YjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0
Q1NTTWF0cml4LmNwcApAQCAtNjMsNyArNjMsNyBAQCB2b2lkIFdlYktpdENTU01hdHJpeDo6c2V0
TWF0cml4VmFsdWUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAg
ICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gc3R5bGVEZWNsYXJhdGlvbi0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSk7CiAKICAgICAgICAgLy8gQ2hl
Y2sgZm9yIGEgIm5vbmUiIG9yIGVtcHR5IHRyYW5zZm9ybS4gSW4gdGhlc2UgY2FzZXMgd2UgY2Fu
IHVzZSB0aGUgZGVmYXVsdCBpZGVudGl0eSBtYXRyaXguCi0gICAgICAgIGlmICghdmFsdWUgfHwg
KHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYgKHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUu
Z2V0KCkpKS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkpCisgICAgICAgIGlmICghdmFs
dWUgfHwgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpICYmIGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5o
IGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmgKaW5kZXggMTk1
Zjk2YTUxZDNhOTZkZGVjMmRhNjJkYmI2ODk4YmQ3NzY2Yzk3ZS4uOWRlYzk1NmNmMTFkMmM1YjBk
YWUwOTZlMzhkNjA0ODQwMWNlOTIxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1dl
YktpdENTU1RyYW5zZm9ybVZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENT
U1RyYW5zZm9ybVZhbHVlLmgKQEAgLTc5LDE4ICs3OSw4IEBAIHByaXZhdGU6CiAgICAgVHJhbnNm
b3JtT3BlcmF0aW9uVHlwZSBtX3R5cGU7CiB9OwogCi1pbmxpbmUgV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWUqIHRvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoQ1NTVmFsdWUqIHZhbHVlKQotewotICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCF2YWx1ZSB8fCB2YWx1ZS0+aXNXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZSgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWUqPih2YWx1ZSk7Ci19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLWlu
bGluZSBjb25zdCBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSogdG9XZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZShjb25zdCBDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04oIXZhbHVlIHx8IHZhbHVlLT5pc1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKCkp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSo+
KHZhbHVlKTsKLX0KLQotfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWUsIGlzV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoKSkKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCmluZGV4IDY2
YmVmZjQxNzVkMDdhMGNjNzFlMmE3ODg4N2RhNjA5ZGQ0Y2E0NzguLjJmMjVkYWM3OTFkYWQyZmJi
MjhhYzAwM2IwOTVhMmM1MjUwMDU2ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuY3BwCkBAIC0xNTEwLDggKzE1MTAsOCBAQCBmbG9hdCBBcHBseVN0eWxl
Q29tbWFuZDo6Y29tcHV0ZWRGb250U2l6ZShOb2RlKiBub2RlKQogICAgICAgICByZXR1cm4gMDsK
IAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBDb21wdXRlZFN0eWxlRXh0cmFjdG9yKG5v
ZGUpLnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSk7Ci0gICAgQVNTRVJUKHZhbHVl
ICYmIHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgIHJldHVybiB0b0NTU1ByaW1pdGl2
ZVZhbHVlKHZhbHVlLmdldCgpKS0+Z2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1BYKTsKKyAgICBBU1NFUlQoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlLmdldCgpKSk7Cisg
ICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldEZsb2F0VmFs
dWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CiB9CiAKIHZvaWQgQXBwbHlTdHlsZUNvbW1h
bmQ6OmpvaW5DaGlsZFRleHROb2RlcyhOb2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQs
IGNvbnN0IFBvc2l0aW9uJiBlbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmdTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAKaW5kZXggNzgwZDg0NzE4ODFiZjRmYTMwYWQxZDg2MWFhZjllNTllODdkYTI3MS4uNDgxMDEz
MTMwZTBkZjYxY2M1MDQzNjU2MDhjZTViYjYzYzAzODdhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZ1N0eWxlLmNwcApAQCAtMTQyLDkgKzE0Miw5IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CiBpbnQgaWRlbnRpZmllckZvclN0eWxlUHJvcGVydHkoVCogc3R5bGUsIENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCkKIHsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gZXh0cmFjdFBy
b3BlcnR5VmFsdWUoc3R5bGUsIHByb3BlcnR5SUQpOwotICAgIGlmICghdmFsdWUgfHwgIXZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0b0NT
U1ByaW1pdGl2ZVZhbHVlKHZhbHVlLmdldCgpKS0+Z2V0VmFsdWVJRCgpOworICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVl
SUQoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzPiBnZXRQcm9wZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZVdpdGhS
ZWR1bmRhbnRQcm9wZXJ0aWVzLCBUKiBiYXNlU3R5bGUpOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIEhU
TUxFbGVtZW50RXF1aXZhbGVudDo6SFRNTEVsZW1lbnRFcXVpdmFsZW50KENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlSUQgcHJpbWl0CiBib29sIEhUTUxFbGVtZW50RXF1aXZhbGVudDo6dmFsdWVJ
c1ByZXNlbnRJblN0eWxlKEVsZW1lbnQqIGVsZW1lbnQsIFN0eWxlUHJvcGVydGllcyogc3R5bGUp
IGNvbnN0CiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKG1fcHJvcGVydHlJRCk7Ci0gICAgcmV0dXJuIG1hdGNoZXMoZWxlbWVudCkgJiYg
dmFsdWUgJiYgdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVl
KHZhbHVlLmdldCgpKS0+Z2V0VmFsdWVJRCgpID09IG1fcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVl
SUQoKTsKKyAgICByZXR1cm4gbWF0Y2hlcyhlbGVtZW50KSAmJiBpczxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUuZ2V0KCkpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdl
dFZhbHVlSUQoKSA9PSBtX3ByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCk7CiB9CiAKIHZvaWQg
SFRNTEVsZW1lbnRFcXVpdmFsZW50OjphZGRUb1N0eWxlKEVsZW1lbnQqLCBFZGl0aW5nU3R5bGUq
IHN0eWxlKSBjb25zdApAQCAtMjI5LDcgKzIyOSw3IEBAIGJvb2wgSFRNTFRleHREZWNvcmF0aW9u
RXF1aXZhbGVudDo6dmFsdWVJc1ByZXNlbnRJblN0eWxlKEVsZW1lbnQqIGVsZW1lbnQsIFN0eWxl
CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBzdHlsZVZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCk7CiAgICAgaWYg
KCFzdHlsZVZhbHVlKQogICAgICAgICBzdHlsZVZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7Ci0gICAgcmV0dXJuIG1hdGNoZXMoZWxl
bWVudCkgJiYgc3R5bGVWYWx1ZSAmJiBzdHlsZVZhbHVlLT5pc1ZhbHVlTGlzdCgpICYmIHRvQ1NT
VmFsdWVMaXN0KHN0eWxlVmFsdWUuZ2V0KCkpLT5oYXNWYWx1ZShtX3ByaW1pdGl2ZVZhbHVlLmdl
dCgpKTsKKyAgICByZXR1cm4gbWF0Y2hlcyhlbGVtZW50KSAmJiBpczxDU1NWYWx1ZUxpc3Q+KHN0
eWxlVmFsdWUuZ2V0KCkpICYmIGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnN0eWxlVmFsdWUpLmhh
c1ZhbHVlKG1fcHJpbWl0aXZlVmFsdWUuZ2V0KCkpOwogfQogCiBjbGFzcyBIVE1MQXR0cmlidXRl
RXF1aXZhbGVudCA6IHB1YmxpYyBIVE1MRWxlbWVudEVxdWl2YWxlbnQgewpAQCAtMzU2LDEyICsz
NTYsMTIgQEAgRWRpdGluZ1N0eWxlOjp+RWRpdGluZ1N0eWxlKCkKIAogc3RhdGljIFJHQkEzMiBj
c3NWYWx1ZVRvUkdCQShDU1NWYWx1ZSogY29sb3JWYWx1ZSkKIHsKLSAgICBpZiAoIWNvbG9yVmFs
dWUgfHwgIWNvbG9yVmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1By
aW1pdGl2ZVZhbHVlPihjb2xvclZhbHVlKSkKICAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3Bh
cmVudDsKICAgICAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlQ29sb3IgPSB0b0NT
U1ByaW1pdGl2ZVZhbHVlKGNvbG9yVmFsdWUpOwotICAgIGlmIChwcmltaXRpdmVDb2xvci0+aXNS
R0JDb2xvcigpKQotICAgICAgICByZXR1cm4gcHJpbWl0aXZlQ29sb3ItPmdldFJHQkEzMlZhbHVl
KCk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZUNvbG9yID0gZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KCpjb2xvclZhbHVlKTsKKyAgICBpZiAocHJpbWl0aXZlQ29sb3IuaXNS
R0JDb2xvcigpKQorICAgICAgICByZXR1cm4gcHJpbWl0aXZlQ29sb3IuZ2V0UkdCQTMyVmFsdWUo
KTsKICAgICAKICAgICBSR0JBMzIgcmdiYSA9IDA7CiAgICAgQ1NTUGFyc2VyOjpwYXJzZUNvbG9y
KHJnYmEsIGNvbG9yVmFsdWUtPmNzc1RleHQoKSk7CkBAIC00NzYsMTcgKzQ3NiwxNyBAQCB2b2lk
IEVkaXRpbmdTdHlsZTo6ZXh0cmFjdEZvbnRTaXplRGVsdGEoKQogCiAgICAgLy8gR2V0IHRoZSBh
ZGp1c3RtZW50IGFtb3VudCBvdXQgb2YgdGhlIHN0eWxlLgogICAgIFJlZlB0cjxDU1NWYWx1ZT4g
dmFsdWUgPSBtX211dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVdl
YmtpdEZvbnRTaXplRGVsdGEpOwotICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUuZ2V0KCkpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLmdldCgpKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1
ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsK
IAogICAgIC8vIE9ubHkgUFggaGFuZGxlZCBub3cuIElmIHdlIGhhbmRsZSBtb3JlIHR5cGVzIGlu
IHRoZSBmdXR1cmUsIHBlcmhhcHMKICAgICAvLyBhIHN3aXRjaCBzdGF0ZW1lbnQgaGVyZSB3b3Vs
ZCBiZSBtb3JlIGFwcHJvcHJpYXRlLgotICAgIGlmICghcHJpbWl0aXZlVmFsdWUtPmlzUHgoKSkK
KyAgICBpZiAoIXByaW1pdGl2ZVZhbHVlLmlzUHgoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9mb250U2l6ZURlbHRhID0gcHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKTsKKyAgICBt
X2ZvbnRTaXplRGVsdGEgPSBwcmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKCk7CiAgICAgbV9t
dXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0Rm9udFNpemVEZWx0
YSk7CiB9CiAKQEAgLTUwMSwxNiArNTAxLDE2IEBAIGJvb2wgRWRpdGluZ1N0eWxlOjp0ZXh0RGly
ZWN0aW9uKFdyaXRpbmdEaXJlY3Rpb24mIHdyaXRpbmdEaXJlY3Rpb24pIGNvbnN0CiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5pY29kZUJpZGkgPSBtX211
dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpKTsK
LSAgICBpZiAoIXVuaWNvZGVCaWRpIHx8ICF1bmljb2RlQmlkaS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHVuaWNvZGVCaWRpLmdldCgpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ1NTVmFsdWVJRCB1bmljb2RlQmlkaVZhbHVlID0g
dG9DU1NQcmltaXRpdmVWYWx1ZSh1bmljb2RlQmlkaS5nZXQoKSktPmdldFZhbHVlSUQoKTsKKyAg
ICBDU1NWYWx1ZUlEIHVuaWNvZGVCaWRpVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oKnVuaWNvZGVCaWRpKS5nZXRWYWx1ZUlEKCk7CiAgICAgaWYgKHVuaWNvZGVCaWRpVmFsdWUg
PT0gQ1NTVmFsdWVFbWJlZCkgewogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGRpcmVjdGlvbiA9
IG1fbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5RGlyZWN0aW9u
KTsKLSAgICAgICAgaWYgKCFkaXJlY3Rpb24gfHwgIWRpcmVjdGlvbi0+aXNQcmltaXRpdmVWYWx1
ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPihkaXJlY3Rpb24uZ2V0KCkp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHdyaXRpbmdEaXJlY3Rpb24g
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGRpcmVjdGlvbi5nZXQoKSktPmdldFZhbHVlSUQoKSA9PSBD
U1NWYWx1ZUx0ciA/IExlZnRUb1JpZ2h0V3JpdGluZ0RpcmVjdGlvbiA6IFJpZ2h0VG9MZWZ0V3Jp
dGluZ0RpcmVjdGlvbjsKKyAgICAgICAgd3JpdGluZ0RpcmVjdGlvbiA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqZGlyZWN0aW9uKS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVMdHIgPyBM
ZWZ0VG9SaWdodFdyaXRpbmdEaXJlY3Rpb24gOiBSaWdodFRvTGVmdFdyaXRpbmdEaXJlY3Rpb247
CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtOTMwLDEwICs5MzAsMTAgQEAgdm9p
ZCBFZGl0aW5nU3R5bGU6OnByZXBhcmVUb0FwcGx5QXQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9u
LCBTaG91bGRQcmVzZXJ2ZVdyaXQKICAgICAgICAgfHwgY3NzVmFsdWVUb1JHQkEobV9tdXRhYmxl
U3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmdl
dCgpKSA9PSByZ2JhQmFja2dyb3VuZENvbG9ySW5FZmZlY3QocG9zaXRpb24uY29udGFpbmVyTm9k
ZSgpKSkKICAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5
QmFja2dyb3VuZENvbG9yKTsKIAotICAgIGlmICh1bmljb2RlQmlkaSAmJiB1bmljb2RlQmlkaS0+
aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgIG1fbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0
eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBzdGF0aWNfY2FzdDxDU1NWYWx1ZUlEPih0b0NTU1By
aW1pdGl2ZVZhbHVlKHVuaWNvZGVCaWRpLmdldCgpKS0+Z2V0VmFsdWVJRCgpKSk7Ci0gICAgICAg
IGlmIChkaXJlY3Rpb24gJiYgZGlyZWN0aW9uLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAg
ICAgICBtX211dGFibGVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIHN0
YXRpY19jYXN0PENTU1ZhbHVlSUQ+KHRvQ1NTUHJpbWl0aXZlVmFsdWUoZGlyZWN0aW9uLmdldCgp
KS0+Z2V0VmFsdWVJRCgpKSk7CisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih1bmljb2Rl
QmlkaS5nZXQoKSkpIHsKKyAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1By
b3BlcnR5VW5pY29kZUJpZGksIHN0YXRpY19jYXN0PENTU1ZhbHVlSUQ+KGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdW5pY29kZUJpZGkpLmdldFZhbHVlSUQoKSkpOworICAgICAgICBpZiAo
aXM8Q1NTUHJpbWl0aXZlVmFsdWU+KGRpcmVjdGlvbi5nZXQoKSkpCisgICAgICAgICAgICBtX211
dGFibGVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIHN0YXRpY19jYXN0
PENTU1ZhbHVlSUQ+KGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZGlyZWN0aW9uKS5nZXRW
YWx1ZUlEKCkpKTsKICAgICB9CiB9CiAKQEAgLTEwNzUsMTEgKzEwNzUsMTEgQEAgdm9pZCBFZGl0
aW5nU3R5bGU6Om1lcmdlU3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgQ1NTUHJv
cGVydHlPdmVycmlkZU0KIAogICAgICAgICAvLyB0ZXh0IGRlY29yYXRpb25zIG5ldmVyIG92ZXJy
aWRlIHZhbHVlcwogICAgICAgICBpZiAoKHByb3BlcnR5LmlkKCkgPT0gQ1NTUHJvcGVydHlUZXh0
RGVjb3JhdGlvbiB8fCBwcm9wZXJ0eS5pZCgpID09IENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29y
YXRpb25zSW5FZmZlY3QpICYmIHByb3BlcnR5LnZhbHVlKCktPmlzVmFsdWVMaXN0KCkgJiYgdmFs
dWUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewotICAgICAgICAg
ICAgICAgIG1lcmdlVGV4dERlY29yYXRpb25WYWx1ZXModG9DU1NWYWx1ZUxpc3QodmFsdWUuZ2V0
KCkpLCB0b0NTU1ZhbHVlTGlzdChwcm9wZXJ0eS52YWx1ZSgpKSk7CisgICAgICAgICAgICBpZiAo
aXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7CisgICAgICAgICAgICAgICAgbWVyZ2VUZXh0RGVj
b3JhdGlvblZhbHVlcyhkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlLmdldCgpKSwgZG93bmNh
c3Q8Q1NTVmFsdWVMaXN0Pihwcm9wZXJ0eS52YWx1ZSgpKSk7CiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YWx1ZSA9IDA7IC8vIHRleHQtZGVj
b3JhdGlvbjogbm9uZSBpcyBlcXVpdmFsZW50IHRvIG5vdCBoYXZpbmcgdGhlIHByb3BlcnR5Cisg
ICAgICAgICAgICB2YWx1ZSA9IG51bGxwdHI7IC8vIHRleHQtZGVjb3JhdGlvbjogbm9uZSBpcyBl
cXVpdmFsZW50IHRvIG5vdCBoYXZpbmcgdGhlIHByb3BlcnR5CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAobW9kZSA9PSBPdmVycmlkZVZhbHVlcyB8fCAobW9kZSA9PSBEb05vdE92ZXJyaWRlVmFs
dWVzICYmICF2YWx1ZSkpCkBAIC0xMTMxLDkgKzExMzEsOSBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6
bWVyZ2VTdHlsZUZyb21SdWxlc0ZvclNlcmlhbGl6YXRpb24oU3R5bGVkRWxlbWVudCogZWxlbWVu
dCkKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7ICsraSkg
ewogICAgICAgICAgICAgU3R5bGVQcm9wZXJ0aWVzOjpQcm9wZXJ0eVJlZmVyZW5jZSBwcm9wZXJ0
eSA9IG1fbXV0YWJsZVN0eWxlLT5wcm9wZXJ0eUF0KGkpOwogICAgICAgICAgICAgQ1NTVmFsdWUq
IHZhbHVlID0gcHJvcGVydHkudmFsdWUoKTsKLSAgICAgICAgICAgIGlmICghdmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAodG9DU1NQ
cmltaXRpdmVWYWx1ZSh2YWx1ZSktPmlzUGVyY2VudGFnZSgpKSB7CisgICAgICAgICAgICBpZiAo
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNQZXJjZW50YWdlKCkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiBjb21wdXRlZFByb3BlcnR5VmFsdWUg
PSBjb21wdXRlZFN0eWxlLnByb3BlcnR5VmFsdWUocHJvcGVydHkuaWQoKSkpCiAgICAgICAgICAg
ICAgICAgICAgIGZyb21Db21wdXRlZFN0eWxlLT5hZGRQYXJzZWRQcm9wZXJ0eShDU1NQcm9wZXJ0
eShwcm9wZXJ0eS5pZCgpLCBjb21wdXRlZFByb3BlcnR5VmFsdWUucmVsZWFzZSgpKSk7CiAgICAg
ICAgICAgICB9CkBAIC0xMjQ1LDkgKzEyNDUsOSBAQCBib29sIEVkaXRpbmdTdHlsZTo6aXNGbG9h
dGluZygpCiBpbnQgRWRpdGluZ1N0eWxlOjpsZWdhY3lGb250U2l6ZShEb2N1bWVudCogZG9jdW1l
bnQpIGNvbnN0CiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSA9IG1fbXV0YWJsZVN0
eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpOwotICAgIGlmICgh
Y3NzVmFsdWUgfHwgIWNzc1ZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxD
U1NQcmltaXRpdmVWYWx1ZT4oY3NzVmFsdWUuZ2V0KCkpKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICByZXR1cm4gbGVnYWN5Rm9udFNpemVGcm9tQ1NTVmFsdWUoZG9jdW1lbnQsIHRvQ1NTUHJpbWl0
aXZlVmFsdWUoY3NzVmFsdWUuZ2V0KCkpLAorICAgIHJldHVybiBsZWdhY3lGb250U2l6ZUZyb21D
U1NWYWx1ZShkb2N1bWVudCwgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGNzc1ZhbHVlLmdl
dCgpKSwKICAgICAgICAgbV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZSwgQWx3YXlzVXNl
TGVnYWN5Rm9udFNpemUpOwogfQogCkBAIC0xMzA4LDEwICsxMzA4LDEwIEBAIFdyaXRpbmdEaXJl
Y3Rpb24gRWRpdGluZ1N0eWxlOjp0ZXh0RGlyZWN0aW9uRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gdW5pY29kZUJpZGkgPSBDb21wdXRlZFN0eWxlRXh0cmFjdG9yKG4pLnBy
b3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSk7Ci0gICAgICAgICAgICBpZiAoIXVu
aWNvZGVCaWRpIHx8ICF1bmljb2RlQmlkaS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAg
ICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odW5pY29kZUJpZGkuZ2V0KCkpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBDU1NWYWx1ZUlEIHVuaWNvZGVCaWRp
VmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHVuaWNvZGVCaWRpLmdldCgpKS0+Z2V0VmFsdWVJ
RCgpOworICAgICAgICAgICAgQ1NTVmFsdWVJRCB1bmljb2RlQmlkaVZhbHVlID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp1bmljb2RlQmlkaSkuZ2V0VmFsdWVJRCgpOwogICAgICAgICAg
ICAgaWYgKHVuaWNvZGVCaWRpVmFsdWUgPT0gQ1NTVmFsdWVFbWJlZCB8fCB1bmljb2RlQmlkaVZh
bHVlID09IENTU1ZhbHVlQmlkaU92ZXJyaWRlKQogICAgICAgICAgICAgICAgIHJldHVybiBOYXR1
cmFsV3JpdGluZ0RpcmVjdGlvbjsKICAgICAgICAgfQpAQCAtMTMzNywxMCArMTMzNywxMCBAQCBX
cml0aW5nRGlyZWN0aW9uIEVkaXRpbmdTdHlsZTo6dGV4dERpcmVjdGlvbkZvclNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJgogCiAgICAgICAgIENvbXB1dGVkU3R5bGVFeHRyYWN0b3Ig
Y29tcHV0ZWRTdHlsZShub2RlKTsKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB1bmljb2RlQmlk
aSA9IGNvbXB1dGVkU3R5bGUucHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpKTsK
LSAgICAgICAgaWYgKCF1bmljb2RlQmlkaSB8fCAhdW5pY29kZUJpZGktPmlzUHJpbWl0aXZlVmFs
dWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odW5pY29kZUJpZGkuZ2V0
KCkpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgQ1NTVmFsdWVJRCB1bmljb2Rl
QmlkaVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh1bmljb2RlQmlkaS5nZXQoKSktPmdldFZh
bHVlSUQoKTsKKyAgICAgICAgQ1NTVmFsdWVJRCB1bmljb2RlQmlkaVZhbHVlID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp1bmljb2RlQmlkaSkuZ2V0VmFsdWVJRCgpOwogICAgICAgICBp
ZiAodW5pY29kZUJpZGlWYWx1ZSA9PSBDU1NWYWx1ZU5vcm1hbCkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCkBAIC0xMzQ5LDEwICsxMzQ5LDEwIEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdGluZ1N0
eWxlOjp0ZXh0RGlyZWN0aW9uRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mCiAK
ICAgICAgICAgQVNTRVJUKHVuaWNvZGVCaWRpVmFsdWUgPT0gQ1NTVmFsdWVFbWJlZCk7CiAgICAg
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gZGlyZWN0aW9uID0gY29tcHV0ZWRTdHlsZS5wcm9wZXJ0eVZh
bHVlKENTU1Byb3BlcnR5RGlyZWN0aW9uKTsKLSAgICAgICAgaWYgKCFkaXJlY3Rpb24gfHwgIWRp
cmVjdGlvbi0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2
ZVZhbHVlPihkaXJlY3Rpb24uZ2V0KCkpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgQ1NTVmFsdWVJRCBkaXJlY3Rpb25WYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoZGlyZWN0
aW9uLmdldCgpKS0+Z2V0VmFsdWVJRCgpOworICAgICAgICBDU1NWYWx1ZUlEIGRpcmVjdGlvblZh
bHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpkaXJlY3Rpb24pLmdldFZhbHVlSUQo
KTsKICAgICAgICAgaWYgKGRpcmVjdGlvblZhbHVlICE9IENTU1ZhbHVlTHRyICYmIGRpcmVjdGlv
blZhbHVlICE9IENTU1ZhbHVlUnRsKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTE0NTIs
MTEgKzE0NTIsMTEgQEAgdm9pZCBTdHlsZUNoYW5nZTo6ZXh0cmFjdFRleHRTdHlsZXMoRG9jdW1l
bnQqIGRvY3VtZW50LCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKgogICAgIC8vIEFzc3VtaW5nIHJl
Y29uY2lsZVRleHREZWNvcmF0aW9uUHJvcGVydGllcyBoYXMgYmVlbiBjYWxsZWQsIHRoZXJlIHNo
b3VsZCBub3QgYmUgLXdlYmtpdC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdAogICAgIC8vIEZ1
cnRoZXJtb3JlLCB0ZXh0LWRlY29yYXRpb246IG5vbmUgaGFzIGJlZW4gdHJpbW1lZCBzbyB0aGF0
IHRleHQtZGVjb3JhdGlvbiBwcm9wZXJ0eSBpcyBhbHdheXMgYSBDU1NWYWx1ZUxpc3QuCiAgICAg
UmVmUHRyPENTU1ZhbHVlPiB0ZXh0RGVjb3JhdGlvbiA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1Zh
bHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOwotICAgIGlmICh0ZXh0RGVjb3JhdGlvbiAm
JiB0ZXh0RGVjb3JhdGlvbi0+aXNWYWx1ZUxpc3QoKSkgeworICAgIGlmIChpczxDU1NWYWx1ZUxp
c3Q+KHRleHREZWNvcmF0aW9uLmdldCgpKSkgewogICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IHVuZGVybGluZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZVVuZGVybGluZSk7CiAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGlu
ZVRocm91Z2ggPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVM
aW5lVGhyb3VnaCk7CiAKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbmV3VGV4dERlY29y
YXRpb24gPSB0b0NTU1ZhbHVlTGlzdCh0ZXh0RGVjb3JhdGlvbi5nZXQoKSktPmNvcHkoKTsKKyAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbmV3VGV4dERlY29yYXRpb24gPSBkb3duY2FzdDxD
U1NWYWx1ZUxpc3Q+KCp0ZXh0RGVjb3JhdGlvbikuY29weSgpOwogICAgICAgICBpZiAobmV3VGV4
dERlY29yYXRpb24tPnJlbW92ZUFsbCh1bmRlcmxpbmUuZ2V0KCkpKQogICAgICAgICAgICAgbV9h
cHBseVVuZGVybGluZSA9IHRydWU7CiAgICAgICAgIGlmIChuZXdUZXh0RGVjb3JhdGlvbi0+cmVt
b3ZlQWxsKGxpbmVUaHJvdWdoLmdldCgpKSkKQEAgLTE0ODksOSArMTQ4OSw5IEBAIHZvaWQgU3R5
bGVDaGFuZ2U6OmV4dHJhY3RUZXh0U3R5bGVzKERvY3VtZW50KiBkb2N1bWVudCwgTXV0YWJsZVN0
eWxlUHJvcGVydGllcyoKICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250
RmFtaWx5KTsKIAogICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IGZvbnRTaXplID0gc3R5bGUtPmdl
dFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSkpIHsKLSAgICAgICAgaWYgKCFm
b250U2l6ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2
ZVZhbHVlPigqZm9udFNpemUpKQogICAgICAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENT
U1Byb3BlcnR5Rm9udFNpemUpOyAvLyBDYW4ndCBtYWtlIHNlbnNlIG9mIHRoZSBudW1iZXIuIFB1
dCBubyBmb250IHNpemUuCi0gICAgICAgIGVsc2UgaWYgKGludCBsZWdhY3lGb250U2l6ZSA9IGxl
Z2FjeUZvbnRTaXplRnJvbUNTU1ZhbHVlKGRvY3VtZW50LCB0b0NTU1ByaW1pdGl2ZVZhbHVlKGZv
bnRTaXplLmdldCgpKSwKKyAgICAgICAgZWxzZSBpZiAoaW50IGxlZ2FjeUZvbnRTaXplID0gbGVn
YWN5Rm9udFNpemVGcm9tQ1NTVmFsdWUoZG9jdW1lbnQsIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPihmb250U2l6ZS5nZXQoKSksCiAgICAgICAgICAgICAgICAgc2hvdWxkVXNlRml4ZWRGb250
RGVmYXVsdFNpemUsIFVzZUxlZ2FjeUZvbnRTaXplT25seUlmUGl4ZWxWYWx1ZXNNYXRjaCkpIHsK
ICAgICAgICAgICAgIG1fYXBwbHlGb250U2l6ZSA9IFN0cmluZzo6bnVtYmVyKGxlZ2FjeUZvbnRT
aXplKTsKICAgICAgICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRT
aXplKTsKQEAgLTE1MDIsMjggKzE1MDIsMjYgQEAgdm9pZCBTdHlsZUNoYW5nZTo6ZXh0cmFjdFRl
eHRTdHlsZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKgogc3Rh
dGljIHZvaWQgZGlmZlRleHREZWNvcmF0aW9ucyhNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBzdHls
ZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0SUQsIENTU1ZhbHVlKiByZWZUZXh0RGVjb3JhdGlvbikK
IHsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNvcmF0aW9uID0gc3R5bGUtPmdldFByb3Bl
cnR5Q1NTVmFsdWUocHJvcGVydElEKTsKLSAgICBpZiAoIXRleHREZWNvcmF0aW9uIHx8ICF0ZXh0
RGVjb3JhdGlvbi0+aXNWYWx1ZUxpc3QoKSB8fCAhcmVmVGV4dERlY29yYXRpb24gfHwgIXJlZlRl
eHREZWNvcmF0aW9uLT5pc1ZhbHVlTGlzdCgpKQorICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0Pih0
ZXh0RGVjb3JhdGlvbi5nZXQoKSkgfHwgIWlzPENTU1ZhbHVlTGlzdD4ocmVmVGV4dERlY29yYXRp
b24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBuZXdUZXh0
RGVjb3JhdGlvbiA9IHRvQ1NTVmFsdWVMaXN0KHRleHREZWNvcmF0aW9uLmdldCgpKS0+Y29weSgp
OwotICAgIENTU1ZhbHVlTGlzdCogdmFsdWVzSW5SZWZUZXh0RGVjb3JhdGlvbiA9IHRvQ1NTVmFs
dWVMaXN0KHJlZlRleHREZWNvcmF0aW9uKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBuZXdU
ZXh0RGVjb3JhdGlvbiA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnRleHREZWNvcmF0aW9uKS5j
b3B5KCk7CisgICAgQ1NTVmFsdWVMaXN0JiB2YWx1ZXNJblJlZlRleHREZWNvcmF0aW9uID0gZG93
bmNhc3Q8Q1NTVmFsdWVMaXN0PigqcmVmVGV4dERlY29yYXRpb24pOwogCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB2YWx1ZXNJblJlZlRleHREZWNvcmF0aW9uLT5sZW5ndGgoKTsgaSsrKQot
ICAgICAgICBuZXdUZXh0RGVjb3JhdGlvbi0+cmVtb3ZlQWxsKHZhbHVlc0luUmVmVGV4dERlY29y
YXRpb24tPml0ZW0oaSkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzSW5SZWZU
ZXh0RGVjb3JhdGlvbi5sZW5ndGgoKTsgaSsrKQorICAgICAgICBuZXdUZXh0RGVjb3JhdGlvbi0+
cmVtb3ZlQWxsKHZhbHVlc0luUmVmVGV4dERlY29yYXRpb24uaXRlbShpKSk7CiAKICAgICBzZXRU
ZXh0RGVjb3JhdGlvblByb3BlcnR5KHN0eWxlLCBuZXdUZXh0RGVjb3JhdGlvbi5nZXQoKSwgcHJv
cGVydElEKTsKIH0KIAogc3RhdGljIGJvb2wgZm9udFdlaWdodElzQm9sZChDU1NWYWx1ZSogZm9u
dFdlaWdodCkKIHsKLSAgICBpZiAoIWZvbnRXZWlnaHQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAoIWZvbnRXZWlnaHQtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENT
U1ByaW1pdGl2ZVZhbHVlPihmb250V2VpZ2h0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgLy8gQmVjYXVzZSBiIHRhZyBjYW4gb25seSBib2xkIHRleHQsIHRoZXJlIGFyZSBvbmx5IHR3
byBzdGF0ZXMgaW4gcGxhaW4gaHRtbDogYm9sZCBhbmQgbm90IGJvbGQuCiAgICAgLy8gQ29sbGFw
c2UgYWxsIG90aGVyIHZhbHVlcyB0byBlaXRoZXIgb25lIG9mIHRoZXNlIHR3byBzdGF0ZXMgZm9y
IGVkaXRpbmcgcHVycG9zZXMuCi0gICAgc3dpdGNoICh0b0NTU1ByaW1pdGl2ZVZhbHVlKGZvbnRX
ZWlnaHQpLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPigqZm9udFdlaWdodCkuZ2V0VmFsdWVJRCgpKSB7CiAgICAgICAgIGNhc2UgQ1NTVmFs
dWUxMDA6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWUyMDA6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWUz
MDA6CkBAIC0xNjE1LDEyICsxNjEzLDEyIEBAIGJvb2wgaXNUcmFuc3BhcmVudENvbG9yVmFsdWUo
Q1NTVmFsdWUqIGNzc1ZhbHVlKQogewogICAgIGlmICghY3NzVmFsdWUpCiAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIGlmICghY3NzVmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAo
IWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqY3NzVmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZShjc3NW
YWx1ZSk7ICAgIAotICAgIGlmICh2YWx1ZS0+aXNSR0JDb2xvcigpKQotICAgICAgICByZXR1cm4g
IWFscGhhQ2hhbm5lbCh2YWx1ZS0+Z2V0UkdCQTMyVmFsdWUoKSk7ICAgIAotICAgIHJldHVybiB2
YWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlVHJhbnNwYXJlbnQ7CisgICAgQ1NTUHJpbWl0
aXZlVmFsdWUmIHZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpjc3NWYWx1ZSk7
CisgICAgaWYgKHZhbHVlLmlzUkdCQ29sb3IoKSkKKyAgICAgICAgcmV0dXJuICFhbHBoYUNoYW5u
ZWwodmFsdWUuZ2V0UkdCQTMyVmFsdWUoKSk7CisgICAgcmV0dXJuIHZhbHVlLmdldFZhbHVlSUQo
KSA9PSBDU1NWYWx1ZVRyYW5zcGFyZW50OwogfQogCiBib29sIGhhc1RyYW5zcGFyZW50QmFja2dy
b3VuZENvbG9yKFN0eWxlUHJvcGVydGllcyogc3R5bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3JDb21tYW5kLmNwcAppbmRleCA3ZGI2MzY0ZGJhNGYzNTZlMjQxODlkNzE0ZWUyZGNkYzIw
NTQwNGFhLi5jMGMxMjg3ZWQyNzA3M2JkMmQzNzBlNTA3NjljZDgzNDRiOTk2YzdiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAgLTEzOSw4ICsxMzksOCBAQCBz
dGF0aWMgYm9vbCBleGVjdXRlVG9nZ2xlU3R5bGVJbkxpc3QoRnJhbWUmIGZyYW1lLCBFZGl0b3JD
b21tYW5kU291cmNlIHNvdXJjZSwgRQogCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBzZWxlY3RlZENT
U1ZhbHVlID0gc2VsZWN0aW9uU3R5bGUtPnN0eWxlKCktPmdldFByb3BlcnR5Q1NTVmFsdWUocHJv
cGVydHlJRCk7CiAgICAgU3RyaW5nIG5ld1N0eWxlID0gQVNDSUlMaXRlcmFsKCJub25lIik7Ci0g
ICAgaWYgKHNlbGVjdGVkQ1NTVmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKLSAgICAgICAgUmVmUHRy
PENTU1ZhbHVlTGlzdD4gc2VsZWN0ZWRDU1NWYWx1ZUxpc3QgPSB0b0NTU1ZhbHVlTGlzdChzZWxl
Y3RlZENTU1ZhbHVlLmdldCgpKTsKKyAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0Pigqc2VsZWN0ZWRD
U1NWYWx1ZSkpIHsKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gc2VsZWN0ZWRDU1NWYWx1
ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHNlbGVjdGVkQ1NTVmFsdWUuZ2V0KCkpOwog
ICAgICAgICBpZiAoIXNlbGVjdGVkQ1NTVmFsdWVMaXN0LT5yZW1vdmVBbGwodmFsdWUpKQogICAg
ICAgICAgICAgc2VsZWN0ZWRDU1NWYWx1ZUxpc3QtPmFwcGVuZCgqdmFsdWUpOwogICAgICAgICBp
ZiAoc2VsZWN0ZWRDU1NWYWx1ZUxpc3QtPmxlbmd0aCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCmluZGV4IDBkNWQzZmUwZjc5YTFiYjAxMTRjZDcx
ZjI3YzcxOWVjODRmYzAzOTguLjQyNjEyZTRlOWRjMGU2MWVhMDZmODExZmUyODg0OGY1NzZmYTYx
ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRl
ci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0K
QEAgLTcyMCw4ICs3MjAsOCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBIVE1MQ29udmVydGVyQ2Fj
aGVzOjppbmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChFbGVtZW50JgogCiBzdGF0aWMgYm9v
bCBzdHJpbmdGcm9tQ1NTVmFsdWUoQ1NTVmFsdWUmIHZhbHVlLCBTdHJpbmcmIHJlc3VsdCkKIHsK
LSAgICBpZiAodmFsdWUuaXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHNo
b3J0IHByaW1pdGl2ZVR5cGUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS5wcmltaXRpdmVU
eXBlKCk7CisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKKyAgICAgICAg
dW5zaWduZWQgc2hvcnQgcHJpbWl0aXZlVHlwZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Pih2YWx1ZSkucHJpbWl0aXZlVHlwZSgpOwogICAgICAgICBpZiAocHJpbWl0aXZlVHlwZSA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyB8fCBwcmltaXRpdmVUeXBlID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfVVJJIHx8CiAgICAgICAgICAgICBwcmltaXRpdmVUeXBlID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQgfHwgcHJpbWl0aXZlVHlwZSA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0FUVFIpIHsKICAgICAgICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVl
LmNzc1RleHQoKTsKQEAgLTg5MiwxMyArODkyLDEzIEBAIGJvb2wgSFRNTENvbnZlcnRlckNhY2hl
czo6ZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9kZShOb2RlJiBub2RlLCBDU1NQcm9wZXJ0eUlEIHBy
CiAKICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAg
aWYgKFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBjb21wdXRlZFN0eWxlUHJvcGVydHlGb3JFbGVt
ZW50KGVsZW1lbnQsIHByb3BlcnR5SWQpKSB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpICYmIGZsb2F0VmFsdWVGcm9tUHJpbWl0aXZlVmFsdWUodG9DU1NQcmltaXRpdmVW
YWx1ZSgqdmFsdWUpLCByZXN1bHQpKQorICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSkgJiYgZmxvYXRWYWx1ZUZyb21QcmltaXRpdmVWYWx1ZShkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnZhbHVlKSwgcmVzdWx0KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAogICAgIGJvb2wgaW5oZXJpdCA9IGZhbHNlOwogICAgIGlmIChSZWZQdHI8Q1NTVmFs
dWU+IHZhbHVlID0gaW5saW5lU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoZWxlbWVudCwgcHJvcGVy
dHlJZCkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYgZmxvYXRW
YWx1ZUZyb21QcmltaXRpdmVWYWx1ZSh0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSksIHJlc3Vs
dCkpCisgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBmbG9hdFZh
bHVlRnJvbVByaW1pdGl2ZVZhbHVlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUp
LCByZXN1bHQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmICh2YWx1ZS0+
aXNJbmhlcml0ZWRWYWx1ZSgpKQogICAgICAgICAgICAgaW5oZXJpdCA9IHRydWU7CkBAIC0xMDYx
LDE0ICsxMDYxLDE0IEBAIENvbG9yIEhUTUxDb252ZXJ0ZXJDYWNoZXM6OmNvbG9yUHJvcGVydHlW
YWx1ZUZvck5vZGUoTm9kZSYgbm9kZSwgQ1NTUHJvcGVydHlJRCBwCiAKICAgICBFbGVtZW50JiBl
bGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAgaWYgKFJlZlB0cjxDU1NWYWx1
ZT4gdmFsdWUgPSBjb21wdXRlZFN0eWxlUHJvcGVydHlGb3JFbGVtZW50KGVsZW1lbnQsIHByb3Bl
cnR5SWQpKSB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpICYmIHRvQ1NT
UHJpbWl0aXZlVmFsdWUoKnZhbHVlKS5pc1JHQkNvbG9yKCkpCi0gICAgICAgICAgICByZXR1cm4g
bm9ybWFsaXplZENvbG9yKENvbG9yKHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVlKS5nZXRSR0JB
MzJWYWx1ZSgpKSwgcHJvcGVydHlJZCA9PSBDU1NQcm9wZXJ0eUNvbG9yKTsKKyAgICAgICAgaWYg
KGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqdmFsdWUpLmlzUkdCQ29sb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVk
Q29sb3IoQ29sb3IoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0UkdCQTMy
VmFsdWUoKSksIHByb3BlcnR5SWQgPT0gQ1NTUHJvcGVydHlDb2xvcik7CiAgICAgfQogCiAgICAg
Ym9vbCBpbmhlcml0ID0gZmFsc2U7CiAgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBp
bmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChlbGVtZW50LCBwcm9wZXJ0eUlkKSkgewotICAg
ICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVl
KCp2YWx1ZSkuaXNSR0JDb2xvcigpKQotICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRDb2xv
cihDb2xvcih0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSkuZ2V0UkdCQTMyVmFsdWUoKSksIHBy
b3BlcnR5SWQgPT0gQ1NTUHJvcGVydHlDb2xvcik7CisgICAgICAgIGlmIChpczxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5p
c1JHQkNvbG9yKCkpCisgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZENvbG9yKENvbG9yKGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFJHQkEzMlZhbHVlKCkpLCBwcm9w
ZXJ0eUlkID09IENTU1Byb3BlcnR5Q29sb3IpOwogICAgICAgICBpZiAodmFsdWUtPmlzSW5oZXJp
dGVkVmFsdWUoKSkKICAgICAgICAgICAgIGluaGVyaXQgPSB0cnVlOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFya3VwLmNwcAppbmRleCA5MGY0NTViNmMxNjk4NmE3YWJlMTM4YzhjNTk4MjNlMDI2
MTkxZjA5Li4wZThmZjgzN2ZlZTQwYmZjMDIxZDlmYzJmOTllYjEyM2QzYjQyZGNhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYXJrdXAuY3BwCkBAIC00NzYsOSArNDc2LDkgQEAgc3RhdGljIGJvb2wgcHJv
cGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBDU1NQcm9w
ZXJ0eUlEIHAKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5
Q1NTVmFsdWUocHJvcGVydHlJRCk7CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS5nZXQoKSktPmdldFZhbHVlSUQoKSA9PSBDU1NW
YWx1ZU5vbmU7CisgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUp
LmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmU7CiB9CiAKIHN0YXRpYyBib29sIG5lZWRJbnRl
cmNoYW5nZU5ld2xpbmVBZnRlcihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHYpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4IGJhYzRmMjEzY2MyOTliZGRlZjc0MjE0ZWZk
NDM4YTNiMzNkMTQwZDMuLjE5NDZiOTM2YjNhNzMyZDNkMzFiMjkwYjAxZTRiYzUxMzE5ZDRmMzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0zMjgsMTAgKzMyOCwx
MCBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZVJlc291cmNlc0ZvclByb3BlcnRpZXMo
Y29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZQogICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQg
PSBzdHlsZURlY2xhcmF0aW9uLT5wcm9wZXJ0eUNvdW50KCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7ICsraSkgewogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+
IGNzc1ZhbHVlID0gc3R5bGVEZWNsYXJhdGlvbi0+cHJvcGVydHlBdChpKS52YWx1ZSgpOwotICAg
ICAgICBpZiAoIWNzc1ZhbHVlLT5pc0ltYWdlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NJ
bWFnZVZhbHVlPigqY3NzVmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAg
U3R5bGVJbWFnZSogc3R5bGVJbWFnZSA9IHRvQ1NTSW1hZ2VWYWx1ZShjc3NWYWx1ZS5nZXQoKSkt
PmNhY2hlZE9yUGVuZGluZ0ltYWdlKCk7CisgICAgICAgIFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2Ug
PSBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPigqY3NzVmFsdWUpLmNhY2hlZE9yUGVuZGluZ0ltYWdl
KCk7CiAgICAgICAgIC8vIE5vbiBjYWNoZWQtaW1hZ2VzIGFyZSBqdXN0IHBsYWNlLWhvbGRlcnMg
YW5kIGRvIG5vdCBjb250YWluIGRhdGEuCiAgICAgICAgIGlmICghc3R5bGVJbWFnZSB8fCAhc3R5
bGVJbWFnZS0+aXNDYWNoZWRJbWFnZSgpKQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5j
cHAKaW5kZXggN2YwNmNmZTA1ZWVlZGY0NDA0Nzk5OGE4OWUwNTFlY2YzMWFkZTMzZC4uYmVhODUz
ZWU5ZTk0MTdlODA5NjY0MDMxMjFjNTMxYTI5MDkwN2Y4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApAQCAtMjk3
LDE4ICsyOTcsMTggQEAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5k
RnVuYyhjb25zdCBBbmltYXRpb25CYXNlKiBhbmltLCBTdHlsZUkKICAgICAgICAgQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVyYXRlZCA9IHRvU3R5bGVHZW5lcmF0ZWRJbWFnZShmcm9t
KS0+aW1hZ2VWYWx1ZSgpOwogICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlJiB0b0dlbmVy
YXRlZCA9IHRvU3R5bGVHZW5lcmF0ZWRJbWFnZSh0byktPmltYWdlVmFsdWUoKTsKIAotICAgICAg
ICBpZiAoZnJvbUdlbmVyYXRlZC5pc0ZpbHRlckltYWdlVmFsdWUoKSAmJiB0b0dlbmVyYXRlZC5p
c0ZpbHRlckltYWdlVmFsdWUoKSkgeworICAgICAgICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1
ZT4oZnJvbUdlbmVyYXRlZCkgJiYgaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0ZWQp
KSB7CiAgICAgICAgICAgICAvLyBBbmltYXRpb24gb2YgZ2VuZXJhdGVkIGltYWdlcyBqdXN0IHBv
c3NpYmxlIGlmIGlucHV0IGltYWdlcyBhcmUgZXF1YWwuCiAgICAgICAgICAgICAvLyBPdGhlcndp
c2UgZmFsbCBiYWNrIHRvIGNyb3NzIGZhZGUgYW5pbWF0aW9uLgotICAgICAgICAgICAgQ1NTRmls
dGVySW1hZ2VWYWx1ZSYgZnJvbUZpbHRlciA9IHRvQ1NTRmlsdGVySW1hZ2VWYWx1ZShmcm9tR2Vu
ZXJhdGVkKTsKLSAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIHRvRmlsdGVyID0gdG9D
U1NGaWx0ZXJJbWFnZVZhbHVlKHRvR2VuZXJhdGVkKTsKKyAgICAgICAgICAgIENTU0ZpbHRlcklt
YWdlVmFsdWUmIGZyb21GaWx0ZXIgPSBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9t
R2VuZXJhdGVkKTsKKyAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIHRvRmlsdGVyID0g
ZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0ZWQpOwogICAgICAgICAgICAg
aWYgKGZyb21GaWx0ZXIuZXF1YWxJbnB1dEltYWdlcyh0b0ZpbHRlcikgJiYgZnJvbUZpbHRlci5j
YWNoZWRJbWFnZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBibGVuZEZpbHRlcihhbmltLCBm
cm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCB0
b0ZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIHByb2dyZXNzKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmIChmcm9tR2VuZXJhdGVkLmlzQ3Jvc3NmYWRlVmFsdWUoKSAmJiB0b0dlbmVyYXRlZC5p
c0Nyb3NzZmFkZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIENTU0Nyb3NzZmFkZVZhbHVlJiBmcm9t
Q3Jvc3NmYWRlID0gdG9DU1NDcm9zc2ZhZGVWYWx1ZShmcm9tR2VuZXJhdGVkKTsKLSAgICAgICAg
ICAgIENTU0Nyb3NzZmFkZVZhbHVlJiB0b0Nyb3NzZmFkZSA9IHRvQ1NTQ3Jvc3NmYWRlVmFsdWUo
dG9HZW5lcmF0ZWQpOworICAgICAgICBpZiAoaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KGZyb21HZW5l
cmF0ZWQpICYmIGlzPENTU0Nyb3NzZmFkZVZhbHVlPih0b0dlbmVyYXRlZCkpIHsKKyAgICAgICAg
ICAgIENTU0Nyb3NzZmFkZVZhbHVlJiBmcm9tQ3Jvc3NmYWRlID0gZG93bmNhc3Q8Q1NTQ3Jvc3Nm
YWRlVmFsdWU+KGZyb21HZW5lcmF0ZWQpOworICAgICAgICAgICAgQ1NTQ3Jvc3NmYWRlVmFsdWUm
IHRvQ3Jvc3NmYWRlID0gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KHRvR2VuZXJhdGVkKTsK
ICAgICAgICAgICAgIGlmIChmcm9tQ3Jvc3NmYWRlLmVxdWFsSW5wdXRJbWFnZXModG9Dcm9zc2Zh
ZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUo
KnRvQ3Jvc3NmYWRlLmJsZW5kKGZyb21Dcm9zc2ZhZGUsIHByb2dyZXNzKSk7CiAgICAgICAgIH0K
QEAgLTMxNywxNiArMzE3LDE2IEBAIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxTdHlsZUltYWdl
PiBibGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9uQmFzZSogYW5pbSwgU3R5bGVJCiAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTk5NTYKICAgICB9IGVs
c2UgaWYgKGZyb20tPmlzR2VuZXJhdGVkSW1hZ2UoKSAmJiB0by0+aXNDYWNoZWRJbWFnZSgpKSB7
CiAgICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIGZyb21HZW5lcmF0ZWQgPSB0b1N0eWxl
R2VuZXJhdGVkSW1hZ2UoZnJvbSktPmltYWdlVmFsdWUoKTsKLSAgICAgICAgaWYgKGZyb21HZW5l
cmF0ZWQuaXNGaWx0ZXJJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIENTU0ZpbHRlckltYWdl
VmFsdWUmIGZyb21GaWx0ZXIgPSB0b0NTU0ZpbHRlckltYWdlVmFsdWUoZnJvbUdlbmVyYXRlZCk7
CisgICAgICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKSkgewor
ICAgICAgICAgICAgQ1NTRmlsdGVySW1hZ2VWYWx1ZSYgZnJvbUZpbHRlciA9IGRvd25jYXN0PENT
U0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpOwogICAgICAgICAgICAgaWYgKGZyb21G
aWx0ZXIuY2FjaGVkSW1hZ2UoKSAmJiB0b1N0eWxlQ2FjaGVkSW1hZ2UodG8pLT5jYWNoZWRJbWFn
ZSgpID09IGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
YmxlbmRGaWx0ZXIoYW5pbSwgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpLCBmcm9tRmlsdGVyLmZp
bHRlck9wZXJhdGlvbnMoKSwgRmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7CiAgICAgICAg
IH0KICAgICAgICAgLy8gRklYTUU6IEFkZCBpbnRlcnBvbGF0aW9uIGJldHdlZW4gY3Jvc3MtZmFk
ZSBhbmQgaW1hZ2Ugc291cmNlLgogICAgIH0gZWxzZSBpZiAoZnJvbS0+aXNDYWNoZWRJbWFnZSgp
ICYmIHRvLT5pc0dlbmVyYXRlZEltYWdlKCkpIHsKICAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZSYgdG9HZW5lcmF0ZWQgPSB0b1N0eWxlR2VuZXJhdGVkSW1hZ2UodG8pLT5pbWFnZVZhbHVl
KCk7Ci0gICAgICAgIGlmICh0b0dlbmVyYXRlZC5pc0ZpbHRlckltYWdlVmFsdWUoKSkgewotICAg
ICAgICAgICAgQ1NTRmlsdGVySW1hZ2VWYWx1ZSYgdG9GaWx0ZXIgPSB0b0NTU0ZpbHRlckltYWdl
VmFsdWUodG9HZW5lcmF0ZWQpOworICAgICAgICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4o
dG9HZW5lcmF0ZWQpKSB7CisgICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiB0b0ZpbHRl
ciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKTsKICAgICAgICAg
ICAgIGlmICh0b0ZpbHRlci5jYWNoZWRJbWFnZSgpICYmIHRvU3R5bGVDYWNoZWRJbWFnZShmcm9t
KS0+Y2FjaGVkSW1hZ2UoKSA9PSB0b0ZpbHRlci5jYWNoZWRJbWFnZSgpKSAgICAgCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0sIHRvRmlsdGVyLmNhY2hlZEltYWdlKCks
IEZpbHRlck9wZXJhdGlvbnMoKSwgdG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVz
cyk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2wuY3BwCmluZGV4IDQwMzVmNjYwNDE5ZWFmNTA4M2FkYjNkM2ViODFjMmQ5YTE5ODc3OTMu
LmY0MmVjZTc2NjZjM2VkNzFmMGQ1ZDE1NjdkNmJlMTYwOTU1Y2Q3ZTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcApAQCAtODQsOCArODQsOCBA
QCB2b2lkIFJlbmRlclRleHRDb250cm9sOjphZGp1c3RJbm5lclRleHRTdHlsZShjb25zdCBSZW5k
ZXJTdHlsZSogc3RhcnRTdHlsZSwgUmVuZAogICAgIGlmIChIVE1MRWxlbWVudCogaW5uZXJUZXh0
ID0gY29udHJvbC5pbm5lclRleHRFbGVtZW50KCkpIHsKICAgICAgICAgaWYgKGNvbnN0IFN0eWxl
UHJvcGVydGllcyogcHJvcGVydGllcyA9IGlubmVyVGV4dC0+cHJlc2VudGF0aW9uQXR0cmlidXRl
U3R5bGUoKSkgewogICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IHByb3BlcnRp
ZXMtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRVc2VyTW9kaWZ5KTsKLSAg
ICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAg
ICAgICAgICAgIHRleHRCbG9ja1N0eWxlLT5zZXRVc2VyTW9kaWZ5KHRvQ1NTUHJpbWl0aXZlVmFs
dWUoKnZhbHVlKSk7CisgICAgICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
LmdldCgpKSkKKyAgICAgICAgICAgICAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0VXNlck1vZGlmeShk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSk7CiAgICAgICAgIH0KICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVBlbmRpbmdJ
bWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUGVuZGluZ0ltYWdl
LmgKaW5kZXggYjk1NDg2ODU0YWExYzlhY2I2YTFhYjkyMjAzZDc5NDE0MTYwNmIwNS4uNTk5ZGEw
NDdhYjYzZDY0ODJiYWE0NTZlYmNkYjAyOGQyOTNkZWVhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUGVuZGluZ0ltYWdlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUGVuZGluZ0ltYWdlLmgKQEAgLTQ1LDEyICs0NSwx
MiBAQCBjbGFzcyBTdHlsZVBlbmRpbmdJbWFnZSA6IHB1YmxpYyBTdHlsZUltYWdlIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVBlbmRpbmdJbWFnZT4gY3JlYXRlKENTU1Zh
bHVlKiB2YWx1ZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUGVuZGluZ0ltYWdlKHZhbHVl
KSk7IH0KIAotICAgIENTU0ltYWdlVmFsdWUqIGNzc0ltYWdlVmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlICYmIG1fdmFsdWUtPmlzSW1hZ2VWYWx1ZSgpID8gdG9DU1NJbWFnZVZhbHVlKG1f
dmFsdWUpIDogbnVsbHB0cjsgfQorICAgIENTU0ltYWdlVmFsdWUqIGNzc0ltYWdlVmFsdWUoKSBj
b25zdCB7IHJldHVybiBpczxDU1NJbWFnZVZhbHVlPihtX3ZhbHVlKSA/IGRvd25jYXN0PENTU0lt
YWdlVmFsdWU+KG1fdmFsdWUpIDogbnVsbHB0cjsgfQogICAgIENTU0ltYWdlR2VuZXJhdG9yVmFs
dWUqIGNzc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlICYmIG1f
dmFsdWUtPmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpID8gc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZSo+KG1fdmFsdWUpIDogbnVsbHB0cjsgfQotICAgIENTU0N1cnNvckltYWdlVmFs
dWUqIGNzc0N1cnNvckltYWdlVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlICYmIG1fdmFs
dWUtPmlzQ3Vyc29ySW1hZ2VWYWx1ZSgpID8gdG9DU1NDdXJzb3JJbWFnZVZhbHVlKG1fdmFsdWUp
IDogbnVsbHB0cjsgfQorICAgIENTU0N1cnNvckltYWdlVmFsdWUqIGNzc0N1cnNvckltYWdlVmFs
dWUoKSBjb25zdCB7IHJldHVybiBpczxDU1NDdXJzb3JJbWFnZVZhbHVlPihtX3ZhbHVlKSA/IGRv
d25jYXN0PENTU0N1cnNvckltYWdlVmFsdWU+KG1fdmFsdWUpIDogbnVsbHB0cjsgfQogCiAjaWYg
RU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAgQ1NTSW1hZ2VTZXRWYWx1ZSogY3NzSW1hZ2VTZXRW
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgJiYgbV92YWx1ZS0+aXNJbWFnZVNldFZhbHVl
KCkgPyB0b0NTU0ltYWdlU2V0VmFsdWUobV92YWx1ZSkgOiBudWxscHRyOyB9CisgICAgQ1NTSW1h
Z2VTZXRWYWx1ZSogY3NzSW1hZ2VTZXRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzPENTU0ltYWdl
U2V0VmFsdWU+KG1fdmFsdWUpID8gZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4obV92YWx1ZSkg
OiBudWxscHRyOyB9CiAjZW5kaWYKIAogICAgIHZvaWQgZGV0YWNoRnJvbUNTU1ZhbHVlKCkgeyBt
X3ZhbHVlID0gbnVsbHB0cjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Nv
bG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ29sb3IuaAppbmRleCA0NjBjZjAyOThjOGE0
ZjM2MDY5MTJhMTIzNTI1ZTIwN2I5NTgzNWVhLi4wMDc1ZWRlY2FkN2Y2NWViYjk0OWNkMzAwNTAw
MDM3YmFlMmM0NzI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ29sb3IuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ29sb3IuaApAQCAtOTIsOCArOTIsOCBAQCBwcml2
YXRlOgogICAgIFNWR0NvbG9yVHlwZSBtX2NvbG9yVHlwZTsKIH07CiAKLUNTU19WQUxVRV9UWVBF
X0NBU1RTKFNWR0NvbG9yLCBpc1NWR0NvbG9yKCkpOwotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKFNWR0NvbG9yLCBpc1NWR0NvbG9y
KCkpCisKICNlbmRpZiAvLyBTVkdDb2xvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFj
ZUVsZW1lbnQuY3BwCmluZGV4IDA2ZGQyNDgwNGIyNDdlNWQ5MzZmNTU0MWQ4MGJkY2I1NjY2MDUz
MGIuLmFlNjQ5ZGVhMzE5MmY1MzkxOTZhNjk5ZjE1OWI1Yjk3NjYwMGQ4OWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCkBAIC0yNTMsMTEgKzI1MywxMSBAQCB2
b2lkIFNWR0ZvbnRGYWNlRWxlbWVudDo6cmVidWlsZEZvbnRGYWNlKCkKICAgICBpZiAoZGVzY3Jp
YmVzUGFyZW50Rm9udCkgeyAgICAKICAgICAgICAgLy8gVHJhdmVyc2UgcGFyc2VkIENTUyB2YWx1
ZXMgYW5kIGFzc29jaWF0ZSBDU1NGb250RmFjZVNyY1ZhbHVlIGVsZW1lbnRzIHdpdGggb3Vyc2Vs
dmVzLgogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHNyYyA9IG1fZm9udEZhY2VSdWxlLT5wcm9w
ZXJ0aWVzKCkuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVNyYyk7Ci0gICAgICAgIENT
U1ZhbHVlTGlzdCogc3JjTGlzdCA9IHRvQ1NTVmFsdWVMaXN0KHNyYy5nZXQoKSk7CisgICAgICAg
IENTU1ZhbHVlTGlzdCogc3JjTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oc3JjLmdldCgp
KTsKIAogICAgICAgICB1bnNpZ25lZCBzcmNMZW5ndGggPSBzcmNMaXN0ID8gc3JjTGlzdC0+bGVu
Z3RoKCkgOiAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3JjTGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgICAgIGlmIChDU1NGb250RmFjZVNyY1ZhbHVlKiBpdGVtID0gdG9DU1NG
b250RmFjZVNyY1ZhbHVlKHNyY0xpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpKQorICAg
ICAgICAgICAgaWYgKENTU0ZvbnRGYWNlU3JjVmFsdWUqIGl0ZW0gPSBkb3duY2FzdDxDU1NGb250
RmFjZVNyY1ZhbHVlPihzcmNMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKSkKICAgICAg
ICAgICAgICAgICBpdGVtLT5zZXRTVkdGb250RmFjZUVsZW1lbnQodGhpcyk7CiAgICAgICAgIH0K
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFpbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYWludC5oCmluZGV4IGQzMDkzYWZiMmFlMzhmOWE3NzE1NThkYzhj
NzgyZGIyOTI3MzBkMDguLmFhMzljN2UwYjk5NzcxM2NiYzkxNjFlZGQ1NjQ0MGY1MDMwZDAzZGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYWludC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYWludC5oCkBAIC0xMTIsOCArMTEyLDggQEAgcHJpdmF0ZToKICAgICBT
dHJpbmcgbV91cmk7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhTVkdQYWludCwgaXNTVkdQ
YWludCgpKTsKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0NTU19WQUxVRShTVkdQYWludCwgaXNTVkdQYWludCgpKQorCiAjZW5kaWYgLy8gU1ZHUGFp
bnRfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239208</attachid>
            <date>2014-10-03 10:05:44 -0700</date>
            <delta_ts>2014-10-03 10:36:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137381-20141003100545.patch</filename>
            <type>text/plain</type>
            <size>277383</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWNhN2EzMGM0Njg2YmNl
YTE4OTM4Y2ZlNDc2Y2IwNzAwNWMxZTJlZS4uMGNlYmI1NWJjNjRmNTQwMTM2NGVkMzQ1ZDE5N2Yz
NGM3MGFlMjEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0MSBAQAorMjAxNC0xMC0wMiAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSBmb3IgQ1NTVmFsdWUgc3ViY2xhc3NlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzgxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBm
b3IgQ1NTVmFsdWUgc3ViY2xhc3Nlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2
aW9yIGNoYW5nZS4KKworICAgICAgICAqIGNzcy9DU1NBc3BlY3RSYXRpb1ZhbHVlLmg6CisgICAg
ICAgICogY3NzL0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1ND
YWxjdWxhdGlvblZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9u
Tm9kZVBhcnNlcjo6cGFyc2VWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU0NhbGN1bGF0aW9uVmFs
dWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTQ2FudmFzVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEJvcmRl
clJhZGl1c1Nob3J0aGFuZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVF
eHRyYWN0b3I6OnByb3BlcnR5TWF0Y2hlcyk6CisgICAgICAgICogY3NzL0NTU0Nyb3NzZmFkZVZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN1YmltYWdlS25vd25Ub0JlT3BhcXVlKToKKyAg
ICAgICAgKiBjc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDdXJzb3JJbWFnZVZhbHVlOjp+
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDdXJzb3JJbWFnZVZh
bHVlOjp1cGRhdGVJZlNWR0N1cnNvcklzVXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDdXJz
b3JJbWFnZVZhbHVlOjpjYWNoZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDdXJzb3JJ
bWFnZVZhbHVlOjpjYWNoZWRPclBlbmRpbmdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1ND
dXJzb3JJbWFnZVZhbHVlOjppc1NWR0N1cnNvcik6CisgICAgICAgICogY3NzL0NTU0N1cnNvcklt
YWdlVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5oOgorICAgICAg
ICAqIGNzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0ZvbnRGZWF0
dXJlVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKToKKyAgICAgICAgKiBj
c3MvQ1NTRm9udFZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0Z1bmN0aW9uVmFsdWUuaDoKKyAg
ICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NH
cmFkaWVudFZhbHVlOjppbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVl
OjpncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCk6CisgICAgICAgICogY3NzL0NTU0dyYWRpZW50
VmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLmg6CisgICAgICAg
ICogY3NzL0NTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRv
clZhbHVlOjppbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVl
Ojppc0ZpeGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVl
OjpmaXhlZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6
aXNQZW5kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6Omtu
b3duVG9CZU9wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVl
Ojpsb2FkU3ViaW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFs
dWU6OnN1YmltYWdlSXNQZW5kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJh
dG9yVmFsdWU6OmNhY2hlZEltYWdlRm9yQ1NTVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NJbWFn
ZUdlbmVyYXRvclZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0ltYWdlU2V0VmFsdWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VTZXRWYWx1ZTo6ZmlsbEltYWdlU2V0KToKKyAgICAg
ICAgKiBjc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NJbWFnZVZhbHVl
Lmg6CisgICAgICAgICogY3NzL0NTU0luaGVyaXRlZFZhbHVlLmg6CisgICAgICAgICogY3NzL0NT
U0luaXRpYWxWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NMaW5lQm94Q29udGFpblZhbHVlLmg6
CisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OnBhcnNlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjphZGRGaWxsVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjphZGRBbmltYXRpb25WYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlM1ZhbHVlc0ZpbGxQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRmlsbFBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGaWxsUmVwZWF0KToKKyAgICAgICAgKFdlYkNvcmU6
OmdyaWRNaXNzaW5nR3JpZFBvc2l0aW9uVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZUdyaWRUZW1wbGF0ZVJvd3NBbmRBcmVhcyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUNpcmNsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
YXJzZXI6OnBhcnNlQmFzaWNTaGFwZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZURlcHJlY2F0ZWRHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OnBhcnNlRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6cGFyc2VSYWRpYWxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OmNyZWF0ZUZvbnRGYWNlUnVsZSk6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVl
Lmg6CisgICAgICAgICogY3NzL0NTU1JlZmxlY3RWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NT
aGFkb3dWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmg6Cisg
ICAgICAgICogY3NzL0NTU1RvU3R5bGVNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9T
dHlsZU1hcDo6bWFwRmlsbEF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHls
ZU1hcDo6bWFwRmlsbENsaXApOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFw
RmlsbENvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBGaWxs
QmxlbmRNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxPcmln
aW4pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbFJlcGVhdFgpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbFJlcGVhdFkpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbFhQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NUb1N0eWxlTWFwOjptYXBGaWxsWVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Rv
U3R5bGVNYXA6Om1hcEZpbGxNYXNrU291cmNlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjptYXBBbmltYXRpb25EZWxheSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0
eWxlTWFwOjptYXBBbmltYXRpb25EaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9T
dHlsZU1hcDo6bWFwQW5pbWF0aW9uRHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9T
dHlsZU1hcDo6bWFwQW5pbWF0aW9uRmlsbE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9T
dHlsZU1hcDo6bWFwQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjptYXBBbmltYXRpb25QbGF5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VTbGljZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVF1YWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQpOgorICAgICAgICAqIGNz
cy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6aXNJbXBsaWNpdEluaXRpYWxWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTVmFsdWU6Omhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWU6OmVxdWFscyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NWYWx1ZTo6Y3NzVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6ZGVzdHJveSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6Y2xvbmVGb3JDU1NPTSk6CisgICAgICAgICog
Y3NzL0NTU1ZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5oOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTVmFsdWVMaXN0SW5zcGVjdG9yOjpDU1NWYWx1ZUxpc3RJbnNwZWN0b3IpOgor
ICAgICAgICAqIGNzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlEZWZhdWx0OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlOdW1iZXI6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eUF1dG86OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eUNsaXA6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNv
bG9yOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlMZW5ndGg6
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVN0cmluZzo6YXBw
bHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVyUmFkaXVzOjph
cHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGaWxsTGF5ZXI6OmFw
cGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGg6
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnQ6OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRGYW1pbHk6OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250V2VpZ2h0OjphcHBseVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250VmFyaWFudExpZ2F0dXJl
czo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291bnRlcjo6
YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q3Vyc29yOjphcHBs
eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0QWxpZ246OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHREZWNvcmF0aW9uOjph
cHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RGVjb3JhdGlv
blNraXA6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU1hcnF1
ZWVJbmNyZW1lbnQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eU1hcnF1ZWVSZXBldGl0aW9uOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlNYXJxdWVlU3BlZWQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eVRleHRVbmRlcmxpbmVQb3NpdGlvbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5TGluZUhlaWdodDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5TGluZUhlaWdodEZvcklPU1RleHRBdXRvc2l6aW5nOjphcHBs
eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlXb3JkU3BhY2luZzo6YXBw
bHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5UGFnZVNpemU6OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRFbXBoYXNpc1N0eWxl
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RW1waGFz
aXNQb3NpdGlvbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
UmVzaXplOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlWZXJ0
aWNhbEFsaWduOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlB
c3BlY3RSYXRpbzo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
Wm9vbTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGlzcGxh
eTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q2xpcFBhdGg6
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVNoYXBlOjphcHBs
eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlJbWFnZVJlc29sdXRpb246
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRJbmRlbnQ6
OmFwcGx5VmFsdWUpOgorICAgICAgICAqIGNzcy9NZWRpYUxpc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6cmVwb3J0TWVkaWFRdWVyeVdhcm5pbmdJZk5lZWRlZCk6CisgICAgICAgICogY3NzL01l
ZGlhUXVlcnlFdmFsdWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGFyZUFzcGVjdFJh
dGlvVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6bnVtYmVyVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6b3JpZW50YXRpb25NZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OmV2
YWxSZXNvbHV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmRldmljZV9waXhlbF9yYXRpb01lZGlh
RmVhdHVyZUV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x1dGlvbk1lZGlhRmVhdHVyZUV2
YWwpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3Jl
Ojp2aWV3X21vZGVNZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OnBvaW50ZXJN
ZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKiBjc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cm9rZURhc2hBcnJheVRvQ1NTVmFsdWVM
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnN2Z1Byb3Bl
cnR5VmFsdWUpOgorICAgICAgICAqIGNzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkpOgorICAgICAgICAq
IGNzcy9Tb3VyY2VTaXplTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlTGVuZ3Ro
KToKKyAgICAgICAgKiBjc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUHJvcGVydGllczo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKToKKyAgICAgICAgKiBj
c3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0RGlyZWN0aW9u
QW5kV3JpdGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR3JpZFRyYWNrU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHcmlkVHJhY2tMaXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUdyaWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpwYXJzZVNuYXBDb29yZGluYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OnBhcnNlU25hcFBvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJv
bVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9w
ZXJhdGlvbnMpOgorICAgICAgICAqIGNzcy9UcmFuc2Zvcm1GdW5jdGlvbnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dHJhbnNmb3Jtc0ZvclZhbHVlKToKKyAgICAgICAgKiBjc3MvVmlld3BvcnRT
dHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZXdwb3J0U3R5bGVSZXNvbHZl
cjo6Z2V0Vmlld3BvcnRBcmd1bWVudFZhbHVlKToKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTRmls
dGVyVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTTWF0cml4LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYktpdENTU01hdHJpeDo6c2V0TWF0cml4VmFsdWUpOgorICAgICAgICAqIGNz
cy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZTo6dG9XZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxl
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6Y29tcHV0
ZWRGb250U2l6ZSk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6aWRlbnRpZmllckZvclN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEVsZW1lbnRFcXVpdmFsZW50Ojp2YWx1ZUlzUHJlc2VudEluU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudDo6dmFsdWVJc1ByZXNlbnRJ
blN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNzc1ZhbHVlVG9SR0JBKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRpbmdTdHlsZTo6ZXh0cmFjdEZvbnRTaXplRGVsdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdGluZ1N0eWxlOjp0ZXh0RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRpbmdTdHlsZTo6cHJlcGFyZVRvQXBwbHlBdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5n
U3R5bGU6Om1lcmdlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjptZXJn
ZVN0eWxlRnJvbVJ1bGVzRm9yU2VyaWFsaXphdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
aW5nU3R5bGU6OmxlZ2FjeUZvbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHls
ZTo6dGV4dERpcmVjdGlvbkZvclNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNo
YW5nZTo6ZXh0cmFjdFRleHRTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZGlmZlRleHREZWNv
cmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpmb250V2VpZ2h0SXNCb2xkKToKKyAgICAgICAg
KFdlYkNvcmU6OmlzVHJhbnNwYXJlbnRDb2xvclZhbHVlKToKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZVRvZ2dsZVN0eWxlSW5M
aXN0KToKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW06CisgICAgICAg
IChzdHJpbmdGcm9tQ1NTVmFsdWUpOgorICAgICAgICAoSFRNTENvbnZlcnRlckNhY2hlczo6Zmxv
YXRQcm9wZXJ0eVZhbHVlRm9yTm9kZSk6CisgICAgICAgIChIVE1MQ29udmVydGVyQ2FjaGVzOjpj
b2xvclByb3BlcnR5VmFsdWVGb3JOb2RlKToKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpwcm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKToKKyAgICAg
ICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJp
YWxpemVyOjpyZXRyaWV2ZVJlc291cmNlc0ZvclByb3BlcnRpZXMpOgorICAgICAgICAqIHBhZ2Uv
YW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJs
ZW5kRnVuYyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjphZGp1c3RJbm5lclRleHRTdHlsZSk6
CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlUGVuZGluZ0ltYWdlLmg6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVBlbmRpbmdJbWFnZTo6Y3NzSW1hZ2VWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVBlbmRpbmdJbWFnZTo6Y3NzQ3Vyc29ySW1hZ2VWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVBlbmRpbmdJbWFnZTo6Y3NzSW1hZ2VTZXRWYWx1ZSk6CisgICAgICAg
ICogc3ZnL1NWR0NvbG9yLmg6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFjZSk6
CisgICAgICAgICogc3ZnL1NWR1BhaW50Lmg6CisKIDIwMTQtMTAtMDMgIEd5dXlvdW5nIEtpbSAg
PGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXSBGaXggYnVpbGQgYnJl
YWsgc2luY2UgcjE3NDIzMSBhbmQgcjE3NDI1NgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0FzcGVjdFJhdGlvVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBc3BlY3RS
YXRpb1ZhbHVlLmgKaW5kZXggNWQ0NTVmZWNkOGNlYjAzNWFhNWNhZGY1ZDFjNDg1MTU2MzlhZDg1
ZC4uODdkNTQ2Yjg0ZjdiY2E1NTQzODlmODg2OTVjMjJiZDkxZjk3ODkzOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0FzcGVjdFJhdGlvVmFsdWUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQXNwZWN0UmF0aW9WYWx1ZS5oCkBAIC02MCw4ICs2MCw4IEBAIHByaXZhdGU6
CiAgICAgZmxvYXQgbV9kZW5vbWluYXRvclZhbHVlOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FT
VFMoQ1NTQXNwZWN0UmF0aW9WYWx1ZSwgaXNBc3BlY3RSYXRpb1ZhbHVlKCkpCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKLX0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0Fz
cGVjdFJhdGlvVmFsdWUsIGlzQXNwZWN0UmF0aW9WYWx1ZSgpKQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaAppbmRleCBmYmMyMDRiYzY1
NjNlMzE1MWM2NTIwZmFiNjI2OGQxZWE4MDM0MDEzLi44YjlmZTRhY2U4OGZlOGVhNGNjODkzZTZi
MWNiNzVmMTQ5M2VlZjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVy
SW1hZ2VTbGljZVZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0JvcmRlckltYWdl
U2xpY2VWYWx1ZS5oCkBAIC01Niw4ICs1Niw4IEBAIHByaXZhdGU6CiAgICAgQ1NTQm9yZGVySW1h
Z2VTbGljZVZhbHVlKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNsaWNlcywgYm9vbCBm
aWxsKTsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0JvcmRlckltYWdlU2xpY2VWYWx1
ZSwgaXNCb3JkZXJJbWFnZVNsaWNlVmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NCb3JkZXJJbWFnZVNsaWNlVmFs
dWUsIGlzQm9yZGVySW1hZ2VTbGljZVZhbHVlKCkpCisKICNlbmRpZiAvLyBDU1NCb3JkZXJJbWFn
ZVNsaWNlVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0
aW9uVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3Bw
CmluZGV4IDM3YTgxNzE1MDE0MWVkMmY4OTljNTY0MWFiMjk4ZTc4Njk2NWVlMTAuLjVhOTA0MWQx
YzIxYTU1YTRhN2I4N2E3NGI5MjMyNzdlZjQxOThmM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAKQEAgLTYwMiwxMSArNjAyLDExIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1
ZSA9IHBhcnNlclZhbHVlLT5jcmVhdGVDU1NWYWx1ZSgpOwotICAgICAgICBpZiAoIXZhbHVlIHx8
ICF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2
ZVZhbHVlPih2YWx1ZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSh2YWx1ZS5nZXQoKSk7Ci0gICAgICAgIHJlc3VsdC0+dmFsdWUgPSBDU1NDYWxjUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZShwcmltaXRpdmVWYWx1ZSwgcGFyc2VyVmFsdWUtPmlzSW50KTsKKyAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgICAgIHJlc3VsdC0+dmFsdWUgPSBDU1NDYWxjUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZSgmcHJpbWl0aXZlVmFsdWUsIHBhcnNlclZhbHVlLT5pc0ludCk7CiAK
ICAgICAgICAgKysqaW5kZXg7CiAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDYWxjdWxhdGlvblZhbHVlLmgKaW5kZXggY2UwY2I1YTZlMGM2MmIwYTJkNzkxZjZkMmVm
ZDVhODgxYjFjYzIxYi4uZmMwNDQzZmNiMTk5ODExZjAyMTMzODFhZjMzNTE2OTZiZjkwZjJiNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oCkBAIC0xMjIsOCArMTIy
LDggQEAgaW5saW5lIFBhc3NSZWY8Q2FsY3VsYXRpb25WYWx1ZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVh
dGVDYWxjdWxhdGlvblZhbHVlKGNvbnN0IENTU1QKICAgICAgICAgbV9zaG91bGRDbGFtcFRvTm9u
TmVnYXRpdmUgPyBDYWxjdWxhdGlvblJhbmdlTm9uTmVnYXRpdmUgOiBDYWxjdWxhdGlvblJhbmdl
QWxsKTsKIH0KIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTQ2FsY1ZhbHVlLCBpc0NhbGNWYWx1
ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
Q1NTX1ZBTFVFKENTU0NhbGNWYWx1ZSwgaXNDYWxjVmFsdWUoKSkKKwogI2VuZGlmIC8vIENTU0Nh
bGN1bGF0aW9uVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZh
c1ZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaAppbmRleCBiNjdk
MDRmZWJhMTBlMzRjNzRkNmNkMTg3MDRkYWUyMWFkMGRmMTg4Li4zMmVlYzZkNTgzM2Y5ODc5NmNl
N2ZhODQwNGY1YTI0ZDc3NTk5MDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Q2FudmFzVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaApA
QCAtMTAyLDggKzEwMiw4IEBAIHByaXZhdGU6CiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIG1fZWxl
bWVudDsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0NhbnZhc1ZhbHVlLCBpc0NhbnZh
c1ZhbHVlKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19DU1NfVkFMVUUoQ1NTQ2FudmFzVmFsdWUsIGlzQ2FudmFzVmFsdWUoKSkKKwogI2VuZGlm
IC8vIENTU0NhbnZhc1ZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggMDc5MDE2NzM4ODU2ZjkxMGU4N2VmMDdjN2U1
MzVlZGQ0YjFmMzcwMi4uY2U1ZWU2ZTRlZTdjY2NjMmNiNDhiY2RjOWJmYTJlMWE5MDhiYzA4NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5jcHAKQEAgLTc3Myw3ICs3NzMsNyBAQCBzdGF0aWMgUGFzc1JlZjxDU1NWYWx1ZUxpc3Q+IGdl
dEJvcmRlclJhZGl1c1Nob3J0aGFuZFZhbHVlKGNvbnN0IFJlbmRlclN0eWxlKiBzdAogICAgIGlm
IChzaG93VmVydGljYWxCb3R0b21MZWZ0KQogICAgICAgICB2ZXJ0aWNhbFJhZGlpTGlzdC0+YXBw
ZW5kKCpib3R0b21MZWZ0UmFkaXVzLT5pdGVtKDEpKTsKIAotICAgIGlmICghdmVydGljYWxSYWRp
aUxpc3QtPmVxdWFscygqdG9DU1NWYWx1ZUxpc3QobGlzdC5nZXQoKS5pdGVtKDApKSkpCisgICAg
aWYgKCF2ZXJ0aWNhbFJhZGlpTGlzdC0+ZXF1YWxzKGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKmxp
c3QuZ2V0KCkuaXRlbSgwKSkpKQogICAgICAgICBsaXN0LmdldCgpLmFwcGVuZCh2ZXJ0aWNhbFJh
ZGlpTGlzdC5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIHJldHVybiBsaXN0OwpAQCAtMzE0OSwx
MyArMzE0OSwxMyBAQCBTdHJpbmcgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjppdGVtKHVu
c2lnbmVkIGkpIGNvbnN0CiAKIGJvb2wgQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVydHlN
YXRjaGVzKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgQ1NTVmFsdWUqIHZhbHVlKSBj
b25zdAogewotICAgIGlmIChwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5Rm9udFNpemUgJiYgdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiBtX25vZGUpIHsKKyAgICBpZiAocHJvcGVydHlJRCA9
PSBDU1NQcm9wZXJ0eUZvbnRTaXplICYmIGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpICYm
IG1fbm9kZSkgewogICAgICAgICBtX25vZGUtPmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fbm9k
ZS0+Y29tcHV0ZWRTdHlsZShtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIpOwogICAgICAgICBpZiAo
c3R5bGUgJiYgc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmtleXdvcmRTaXplKCkpIHsKICAgICAg
ICAgICAgIENTU1ZhbHVlSUQgc2l6ZVZhbHVlID0gY3NzSWRlbnRpZmllckZvckZvbnRTaXplS2V5
d29yZChzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkua2V5d29yZFNpemUoKSk7Ci0gICAgICAgICAg
ICBjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2
ZVZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNWYWx1ZUlE
KCkgJiYgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBzaXplVmFsdWUpCisgICAgICAg
ICAgICBjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS5pc1ZhbHVlSUQoKSAmJiBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gc2l6ZVZhbHVl
KQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAKaW5kZXggZDQzZGIxZTZhNGFhZTZjNDg5
ZmZlMjlmYjQ3YWRiNjZjNWMyZTQ3Yi4uMTkwMjNjYjk2Mzk2OWFhN2UzYTIxOGI1NDI4NDRkYWRj
ZTQwYzg5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwCkBAIC00
NywxMSArNDcsMTEgQEAgc3RhdGljIGlubGluZSBkb3VibGUgYmxlbmRGdW5jKGRvdWJsZSBmcm9t
LCBkb3VibGUgdG8sIGRvdWJsZSBwcm9ncmVzcykKIAogc3RhdGljIGJvb2wgc3ViaW1hZ2VLbm93
blRvQmVPcGFxdWUoQ1NTVmFsdWUmIHZhbHVlLCBjb25zdCBSZW5kZXJFbGVtZW50KiByZW5kZXJl
cikKIHsKLSAgICBpZiAodmFsdWUuaXNJbWFnZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiB0b0NT
U0ltYWdlVmFsdWUodmFsdWUpLmtub3duVG9CZU9wYXF1ZShyZW5kZXJlcik7CisgICAgaWYgKGlz
PENTU0ltYWdlVmFsdWU+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ltYWdl
VmFsdWU+KHZhbHVlKS5rbm93blRvQmVPcGFxdWUocmVuZGVyZXIpOwogCi0gICAgaWYgKHZhbHVl
LmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKQotICAgICAgICByZXR1cm4gdG9DU1NJbWFnZUdlbmVy
YXRvclZhbHVlKHZhbHVlKS5rbm93blRvQmVPcGFxdWUocmVuZGVyZXIpOworICAgIGlmIChpczxD
U1NJbWFnZUdlbmVyYXRvclZhbHVlPih2YWx1ZSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxD
U1NJbWFnZUdlbmVyYXRvclZhbHVlPih2YWx1ZSkua25vd25Ub0JlT3BhcXVlKHJlbmRlcmVyKTsK
IAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2Zh
ZGVWYWx1ZS5oCmluZGV4IDE0ZGE1OWM3OTRkYzdjYmEyMTk5ZDQyMDk4OGJlZTA1NDFlNzk5ZjUu
LjMzMDU0MGI4YTM0NTkyYzM4ZTBmNTllOWIzNDI4MGM1NTA1MzcxNWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5oCkBAIC0xMTAsOCArMTEwLDggQEAgcHJpdmF0ZToKICAg
ICBDcm9zc2ZhZGVTdWJpbWFnZU9ic2VydmVyUHJveHkgbV9jcm9zc2ZhZGVTdWJpbWFnZU9ic2Vy
dmVyOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTQ3Jvc3NmYWRlVmFsdWUsIGlzQ3Jv
c3NmYWRlVmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0NTU19WQUxVRShDU1NDcm9zc2ZhZGVWYWx1ZSwgaXNDcm9zc2ZhZGVWYWx1ZSgp
KQorCiAjZW5kaWYgLy8gQ1NTQ3Jvc3NmYWRlVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0N1cnNvckltYWdlVmFsdWUuY3BwCmluZGV4IGY1OGM5MjA1YWRmYjQxYzI4NzY0ZWZiOGE0M2M2
ZDJmM2E0ZDhkMjQuLjlmNDZlNzkxOWQ1NWEyYzJlMzJmZGY5MzdlNTkxNmViN2IzZmE4ZTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAKQEAgLTgxLDcgKzgx
LDcgQEAgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6fkNTU0N1cnNvckltYWdlVmFsdWUoKQogICAgIGZv
ciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVs
ZW1lbnQgPSAqaXQ7CiAgICAgICAgIHJlZmVyZW5jZWRFbGVtZW50LT5jdXJzb3JJbWFnZVZhbHVl
UmVtb3ZlZCgpOwotICAgICAgICBpZiAoU1ZHQ3Vyc29yRWxlbWVudCogY3Vyc29yRWxlbWVudCA9
IHJlc291cmNlUmVmZXJlbmNlZEJ5Q3Vyc29yRWxlbWVudCh0b0NTU0ltYWdlVmFsdWUobV9pbWFn
ZVZhbHVlLmdldCgpKS51cmwoKSwgcmVmZXJlbmNlZEVsZW1lbnQtPmRvY3VtZW50KCkpKQorICAg
ICAgICBpZiAoU1ZHQ3Vyc29yRWxlbWVudCogY3Vyc29yRWxlbWVudCA9IHJlc291cmNlUmVmZXJl
bmNlZEJ5Q3Vyc29yRWxlbWVudChkb3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX2ltYWdlVmFsdWUu
Z2V0KCkpLnVybCgpLCByZWZlcmVuY2VkRWxlbWVudC0+ZG9jdW1lbnQoKSkpCiAgICAgICAgICAg
ICBjdXJzb3JFbGVtZW50LT5yZW1vdmVDbGllbnQocmVmZXJlbmNlZEVsZW1lbnQpOwogICAgIH0K
IH0KQEAgLTEwNyw3ICsxMDcsNyBAQCBib29sIENTU0N1cnNvckltYWdlVmFsdWU6OnVwZGF0ZUlm
U1ZHQ3Vyc29ySXNVc2VkKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKCFpc1NWR0N1cnNvcigp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoU1ZHQ3Vyc29yRWxlbWVudCogY3Vy
c29yRWxlbWVudCA9IHJlc291cmNlUmVmZXJlbmNlZEJ5Q3Vyc29yRWxlbWVudCh0b0NTU0ltYWdl
VmFsdWUobV9pbWFnZVZhbHVlLmdldCgpKS51cmwoKSwgZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsK
KyAgICBpZiAoU1ZHQ3Vyc29yRWxlbWVudCogY3Vyc29yRWxlbWVudCA9IHJlc291cmNlUmVmZXJl
bmNlZEJ5Q3Vyc29yRWxlbWVudChkb3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX2ltYWdlVmFsdWUu
Z2V0KCkpLnVybCgpLCBlbGVtZW50LT5kb2N1bWVudCgpKSkgewogICAgICAgICAvLyBGSVhNRTog
VGhpcyB3aWxsIG92ZXJyaWRlIGhvdCBzcG90IHNwZWNpZmllZCBpbiBDU1MsIHdoaWNoIGlzIHBy
b2JhYmx5IGluY29ycmVjdC4KICAgICAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0
KDApOwogICAgICAgICBtX2hhc0hvdFNwb3QgPSB0cnVlOwpAQCAtMTMzLDggKzEzMyw4IEBAIGJv
b2wgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6dXBkYXRlSWZTVkdDdXJzb3JJc1VzZWQoRWxlbWVudCog
ZWxlbWVudCkKIFN0eWxlSW1hZ2UqIENTU0N1cnNvckltYWdlVmFsdWU6OmNhY2hlZEltYWdlKENh
Y2hlZFJlc291cmNlTG9hZGVyKiBsb2FkZXIpCiB7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQp
Ci0gICAgaWYgKG1faW1hZ2VWYWx1ZS5nZXQoKS5pc0ltYWdlU2V0VmFsdWUoKSkKLSAgICAgICAg
cmV0dXJuIHRvQ1NTSW1hZ2VTZXRWYWx1ZShtX2ltYWdlVmFsdWUuZ2V0KCkpLmNhY2hlZEltYWdl
U2V0KGxvYWRlcik7CisgICAgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KG1faW1hZ2VWYWx1ZS5n
ZXQoKSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPihtX2ltYWdl
VmFsdWUuZ2V0KCkpLmNhY2hlZEltYWdlU2V0KGxvYWRlcik7CiAjZW5kaWYKIAogICAgIGlmICgh
bV9hY2Nlc3NlZEltYWdlKSB7CkBAIC0xNDUsNyArMTQ1LDcgQEAgU3R5bGVJbWFnZSogQ1NTQ3Vy
c29ySW1hZ2VWYWx1ZTo6Y2FjaGVkSW1hZ2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGxvYWRlcikK
ICAgICAgICAgLy8gd2UgY3JlYXRlIGFuIGFsdGVybmF0ZSBDU1NJbWFnZVZhbHVlIHRvIHVzZS4K
ICAgICAgICAgaWYgKGlzU1ZHQ3Vyc29yKCkgJiYgbG9hZGVyICYmIGxvYWRlci0+ZG9jdW1lbnQo
KSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBmYWlsIGlmIHRoZSA8Y3Vyc29y
PiBlbGVtZW50IGlzIGluIGEgc2hhZG93IERPTSAoYnVnIDU5ODI3KQotICAgICAgICAgICAgaWYg
KFNWR0N1cnNvckVsZW1lbnQqIGN1cnNvckVsZW1lbnQgPSByZXNvdXJjZVJlZmVyZW5jZWRCeUN1
cnNvckVsZW1lbnQodG9DU1NJbWFnZVZhbHVlKG1faW1hZ2VWYWx1ZS5nZXQoKSkudXJsKCksICps
b2FkZXItPmRvY3VtZW50KCkpKSB7CisgICAgICAgICAgICBpZiAoU1ZHQ3Vyc29yRWxlbWVudCog
Y3Vyc29yRWxlbWVudCA9IHJlc291cmNlUmVmZXJlbmNlZEJ5Q3Vyc29yRWxlbWVudChkb3duY2Fz
dDxDU1NJbWFnZVZhbHVlPihtX2ltYWdlVmFsdWUuZ2V0KCkpLnVybCgpLCAqbG9hZGVyLT5kb2N1
bWVudCgpKSkgewogICAgICAgICAgICAgICAgIGRldGFjaFBlbmRpbmdJbWFnZSgpOwogICAgICAg
ICAgICAgICAgIFJlZjxDU1NJbWFnZVZhbHVlPiBzdmdJbWFnZVZhbHVlKENTU0ltYWdlVmFsdWU6
OmNyZWF0ZShjdXJzb3JFbGVtZW50LT5ocmVmKCkpKTsKICAgICAgICAgICAgICAgICBTdHlsZUNh
Y2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHN2Z0ltYWdlVmFsdWUtPmNhY2hlZEltYWdlKGxvYWRl
cik7CkBAIC0xNTQsOSArMTU0LDkgQEAgU3R5bGVJbWFnZSogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6
Y2FjaGVkSW1hZ2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGxvYWRlcikKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCi0gICAgICAgIGlmIChtX2ltYWdlVmFsdWUuZ2V0KCkuaXNJbWFnZVZhbHVl
KCkpIHsKKyAgICAgICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkp
IHsKICAgICAgICAgICAgIGRldGFjaFBlbmRpbmdJbWFnZSgpOwotICAgICAgICAgICAgbV9pbWFn
ZSA9IHRvQ1NTSW1hZ2VWYWx1ZShtX2ltYWdlVmFsdWUuZ2V0KCkpLmNhY2hlZEltYWdlKGxvYWRl
cik7CisgICAgICAgICAgICBtX2ltYWdlID0gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4obV9pbWFn
ZVZhbHVlLmdldCgpKS5jYWNoZWRJbWFnZShsb2FkZXIpOwogICAgICAgICB9CiAgICAgfQogCkBA
IC0xNzAsOCArMTcwLDggQEAgU3R5bGVJbWFnZSogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6Y2FjaGVk
T3JQZW5kaW5nSW1hZ2UoRG9jdW1lbnQmIGRvY3VtZW50KQogewogI2lmIEVOQUJMRShDU1NfSU1B
R0VfU0VUKQogICAgIC8vIE5lZWQgdG8gZGVsZWdhdGUgY29tcGxldGVseSBzbyB0aGF0IGNoYW5n
ZXMgaW4gZGV2aWNlIHNjYWxlIGZhY3RvciBjYW4gYmUgaGFuZGxlZCBhcHByb3ByaWF0ZWx5Lgot
ICAgIGlmIChtX2ltYWdlVmFsdWUuZ2V0KCkuaXNJbWFnZVNldFZhbHVlKCkpCi0gICAgICAgIHJl
dHVybiB0b0NTU0ltYWdlU2V0VmFsdWUobV9pbWFnZVZhbHVlLmdldCgpKS5jYWNoZWRPclBlbmRp
bmdJbWFnZVNldChkb2N1bWVudCk7CisgICAgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KG1faW1h
Z2VWYWx1ZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVl
PihtX2ltYWdlVmFsdWUuZ2V0KCkpLmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KGRvY3VtZW50KTsK
ICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKICNlbmRpZgpAQCAtMTg0LDggKzE4
NCw4IEBAIFN0eWxlSW1hZ2UqIENTU0N1cnNvckltYWdlVmFsdWU6OmNhY2hlZE9yUGVuZGluZ0lt
YWdlKERvY3VtZW50JiBkb2N1bWVudCkKIAogYm9vbCBDU1NDdXJzb3JJbWFnZVZhbHVlOjppc1NW
R0N1cnNvcigpIGNvbnN0CiB7Ci0gICAgaWYgKG1faW1hZ2VWYWx1ZS5nZXQoKS5pc0ltYWdlVmFs
dWUoKSkgewotICAgICAgICBVUkwga3VybChQYXJzZWRVUkxTdHJpbmcsIHRvQ1NTSW1hZ2VWYWx1
ZShtX2ltYWdlVmFsdWUuZ2V0KCkpLnVybCgpKTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4o
bV9pbWFnZVZhbHVlLmdldCgpKSkgeworICAgICAgICBVUkwga3VybChQYXJzZWRVUkxTdHJpbmcs
IGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkudXJsKCkpOwogICAg
ICAgICByZXR1cm4ga3VybC5oYXNGcmFnbWVudElkZW50aWZpZXIoKTsKICAgICB9CiAgICAgcmV0
dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdl
VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmgKaW5kZXgg
NjUxY2Q2MzMwMGI0Y2ExMDU2YTMyODM2ODlkOTFhMDQ0ZWJhOTE4MC4uODZkZjdhZGE0MjdkMjUz
NDA4OGYzMDg5YjU5NDM4ODFiMjRkMjE4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0N1cnNvckltYWdlVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZS5oCkBAIC03OCw4ICs3OCw4IEBAIHByaXZhdGU6CiAgICAgSGFzaFNldDxTVkdF
bGVtZW50Kj4gbV9yZWZlcmVuY2VkRWxlbWVudHM7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNU
UyhDU1NDdXJzb3JJbWFnZVZhbHVlLCBpc0N1cnNvckltYWdlVmFsdWUoKSkKLQogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NDdXJz
b3JJbWFnZVZhbHVlLCBpc0N1cnNvckltYWdlVmFsdWUoKSkKKwogI2VuZGlmIC8vIENTU0N1cnNv
ckltYWdlVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlcklt
YWdlVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmgKaW5k
ZXggNjAwNWY3ZTdjMDRjNjg0YWQwOTk4OWFlODliNzAzYjIwMWY4YTA2My4uM2MwNjhkNThjY2Ew
M2FlMmI1OGJmYzRkOGIzYjY4MGQ1YzZjYTc2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmls
dGVySW1hZ2VWYWx1ZS5oCkBAIC0xMTcsOCArMTE3LDggQEAgcHJpdmF0ZToKICAgICBGaWx0ZXJT
dWJpbWFnZU9ic2VydmVyUHJveHkgbV9maWx0ZXJTdWJpbWFnZU9ic2VydmVyOwogfTsKIAotQ1NT
X1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTRmlsdGVySW1hZ2VWYWx1ZSwgaXNGaWx0ZXJJbWFnZVZhbHVl
KCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19D
U1NfVkFMVUUoQ1NTRmlsdGVySW1hZ2VWYWx1ZSwgaXNGaWx0ZXJJbWFnZVZhbHVlKCkpCisKICNl
bmRpZiAvLyBDU1NGaWx0ZXJJbWFnZVZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTcmNWYWx1ZS5oCmluZGV4IDg5MjEwNzIxNGQwOWQxMGQwYzM1OTk1Njk1OTU0ZmVkMWUzZGVk
YmYuLjYxYmQ5MDkzM2M1MDAxNDRmY2Y3ZjU5ZWYyNDRjNTUyNzNhMTcyYjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaApAQCAtOTUsOCArOTUsOCBAQCBwcml2YXRl
OgogI2VuZGlmCiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NGb250RmFjZVNyY1ZhbHVl
LCBpc0ZvbnRGYWNlU3JjVmFsdWUoKSkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotfQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTRm9udEZhY2VTcmNWYWx1ZSwgaXNGb250
RmFjZVNyY1ZhbHVlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRGZWF0dXJlVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmVhdHVy
ZVZhbHVlLmgKaW5kZXggZGYxY2QxNzU5Y2RhM2VhOGQzYWEzMWQzM2M3NjQzNDlkM2Y3M2Y0YS4u
Y2Y2YzM4MWZlY2ExNTUxYmFjNGQyNTYzOTcxMzRiMDY5NTJkZjM0MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGZWF0dXJlVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udEZlYXR1cmVWYWx1ZS5oCkBAIC01MSw4ICs1MSw4IEBAIHByaXZhdGU6CiAg
ICAgY29uc3QgaW50IG1fdmFsdWU7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NGb250
RmVhdHVyZVZhbHVlLCBpc0ZvbnRGZWF0dXJlVmFsdWUoKSkKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAotfSAvLyBuYW1lc3BhY2UKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENT
U0ZvbnRGZWF0dXJlVmFsdWUsIGlzRm9udEZlYXR1cmVWYWx1ZSgpKQogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKaW5kZXggMGFkOTgyMzUzZmEzZDAwYTJhNDZk
ZGY2NDI2MzYyZjEyMDA1MWRlNy4uMzkyNWFlZTI0ZWJhMWMzZjc1Y2M1MDBlMDU0MDAyNGY0NmJj
MWNiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKQEAgLTkxLDI2ICs5
MSwyNiBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvbnN0IFN0eWxl
UnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUpCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBmb250RmFt
aWx5ID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpOwog
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3JjID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQ
cm9wZXJ0eVNyYyk7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiB1bmljb2RlUmFuZ2UgPSBzdHlsZS5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VW5pY29kZVJhbmdlKTsKLSAgICBpZiAoIWZv
bnRGYW1pbHkgfHwgIXNyYyB8fCAhZm9udEZhbWlseS0+aXNWYWx1ZUxpc3QoKSB8fCAhc3JjLT5p
c1ZhbHVlTGlzdCgpIHx8ICh1bmljb2RlUmFuZ2UgJiYgIXVuaWNvZGVSYW5nZS0+aXNWYWx1ZUxp
c3QoKSkpCisgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KGZvbnRGYW1pbHkuZ2V0KCkpIHx8ICFp
czxDU1NWYWx1ZUxpc3Q+KHNyYy5nZXQoKSkgfHwgKHVuaWNvZGVSYW5nZSAmJiAhaXM8Q1NTVmFs
dWVMaXN0PigqdW5pY29kZVJhbmdlKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ZhbHVl
TGlzdCogZmFtaWx5TGlzdCA9IHRvQ1NTVmFsdWVMaXN0KGZvbnRGYW1pbHkuZ2V0KCkpOwotICAg
IGlmICghZmFtaWx5TGlzdC0+bGVuZ3RoKCkpCisgICAgQ1NTVmFsdWVMaXN0JiBmYW1pbHlMaXN0
ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqZm9udEZhbWlseSk7CisgICAgaWYgKCFmYW1pbHlM
aXN0Lmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NWYWx1ZUxpc3QqIHNyY0xp
c3QgPSB0b0NTU1ZhbHVlTGlzdChzcmMuZ2V0KCkpOwotICAgIGlmICghc3JjTGlzdC0+bGVuZ3Ro
KCkpCisgICAgQ1NTVmFsdWVMaXN0JiBzcmNMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pigq
c3JjKTsKKyAgICBpZiAoIXNyY0xpc3QubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IENTU1ZhbHVlTGlzdCogcmFuZ2VMaXN0ID0gdG9DU1NWYWx1ZUxpc3QodW5pY29kZVJhbmdlLmdl
dCgpKTsKKyAgICBDU1NWYWx1ZUxpc3QqIHJhbmdlTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlz
dD4odW5pY29kZVJhbmdlLmdldCgpKTsKIAogICAgIHVuc2lnbmVkIHRyYWl0c01hc2sgPSAwOwog
CiAgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gZm9udFN0eWxlID0gc3R5bGUuZ2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSkpIHsKLSAgICAgICAgaWYgKCFmb250U3R5bGUt
PmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4o
KmZvbnRTdHlsZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgc3dpdGNoICh0b0NT
U1ByaW1pdGl2ZVZhbHVlKGZvbnRTdHlsZS5nZXQoKSktPmdldFZhbHVlSUQoKSkgeworICAgICAg
ICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZm9udFN0eWxlKS5nZXRWYWx1
ZUlEKCkpIHsKICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKICAgICAgICAgICAgIHRyYWl0
c01hc2sgfD0gRm9udFN0eWxlTm9ybWFsTWFzazsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTI1
LDEwICsxMjUsMTAgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjb25z
dCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlKQogICAgICAgICB0cmFpdHNNYXNrIHw9
IEZvbnRTdHlsZU5vcm1hbE1hc2s7CiAKICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiBmb250V2Vp
Z2h0ID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpKSB7
Ci0gICAgICAgIGlmICghZm9udFdlaWdodC0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBp
ZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqZm9udFdlaWdodCkpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgc3dpdGNoICh0b0NTU1ByaW1pdGl2ZVZhbHVlKGZvbnRXZWlnaHQuZ2V0
KCkpLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICAgICAgc3dpdGNoIChkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKmZvbnRXZWlnaHQpLmdldFZhbHVlSUQoKSkgewogICAgICAgICBjYXNlIENTU1Zh
bHVlQm9sZDoKICAgICAgICAgY2FzZSBDU1NWYWx1ZTcwMDoKICAgICAgICAgICAgIHRyYWl0c01h
c2sgfD0gRm9udFdlaWdodDcwME1hc2s7CkBAIC0xNzAsMTYgKzE3MCwxNiBAQCB2b2lkIENTU0Zv
bnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250
RmFjZVJ1bGUpCiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFs
dWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwogICAgICAgICAgICAgbGlzdC0+YXBwZW5k
KGZvbnRWYXJpYW50LnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgZm9udFZhcmlhbnQg
PSBsaXN0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIWZvbnRWYXJpYW50
LT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICB9IGVsc2UgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KCpm
b250VmFyaWFudCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTVmFsdWVMaXN0
KiB2YXJpYW50TGlzdCA9IHRvQ1NTVmFsdWVMaXN0KGZvbnRWYXJpYW50LmdldCgpKTsKLSAgICAg
ICAgdW5zaWduZWQgbnVtVmFyaWFudHMgPSB2YXJpYW50TGlzdC0+bGVuZ3RoKCk7CisgICAgICAg
IENTU1ZhbHVlTGlzdCYgdmFyaWFudExpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpmb250
VmFyaWFudCk7CisgICAgICAgIHVuc2lnbmVkIG51bVZhcmlhbnRzID0gdmFyaWFudExpc3QubGVu
Z3RoKCk7CiAgICAgICAgIGlmICghbnVtVmFyaWFudHMpCiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVZhcmlhbnRzOyArK2kpIHsKLSAg
ICAgICAgICAgIHN3aXRjaCAodG9DU1NQcmltaXRpdmVWYWx1ZSh2YXJpYW50TGlzdC0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjayhpKSktPmdldFZhbHVlSUQoKSkgeworICAgICAgICAgICAgc3dpdGNo
IChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFyaWFudExpc3QuaXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjayhpKSktPmdldFZhbHVlSUQoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVOb3JtYWw6CiAgICAgICAgICAgICAgICAgICAgIHRyYWl0c01hc2sgfD0gRm9udFZhcmlhbnRO
b3JtYWxNYXNrOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE5NiwyNSArMTk2LDI1
IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxl
Rm9udEZhY2UqIGZvbnRGYWNlUnVsZSkKICAgICAvLyBFYWNoIGl0ZW0gaW4gdGhlIHNyYyBwcm9w
ZXJ0eSdzIGxpc3QgaXMgYSBzaW5nbGUgQ1NTRm9udEZhY2VTb3VyY2UuIFB1dCB0aGVtIGFsbCBp
bnRvIGEgQ1NTRm9udEZhY2UuCiAgICAgUmVmUHRyPENTU0ZvbnRGYWNlPiBmb250RmFjZTsKIAot
ICAgIGludCBzcmNMZW5ndGggPSBzcmNMaXN0LT5sZW5ndGgoKTsKKyAgICBpbnQgc3JjTGVuZ3Ro
ID0gc3JjTGlzdC5sZW5ndGgoKTsKIAogICAgIGJvb2wgZm91bmRTVkdGb250ID0gZmFsc2U7CiAK
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNyY0xlbmd0aDsgaSsrKSB7CiAgICAgICAgIC8vIEFu
IGl0ZW0gaW4gdGhlIGxpc3QgZWl0aGVyIHNwZWNpZmllcyBhIHN0cmluZyAobG9jYWwgZm9udCBu
YW1lKSBvciBhIFVSTCAocmVtb3RlIGZvbnQgdG8gZG93bmxvYWQpLgotICAgICAgICBDU1NGb250
RmFjZVNyY1ZhbHVlKiBpdGVtID0gdG9DU1NGb250RmFjZVNyY1ZhbHVlKHNyY0xpc3QtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soaSkpOworICAgICAgICBDU1NGb250RmFjZVNyY1ZhbHVlJiBpdGVt
ID0gZG93bmNhc3Q8Q1NTRm9udEZhY2VTcmNWYWx1ZT4oKnNyY0xpc3QuaXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjayhpKSk7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NGb250RmFjZVNvdXJjZT4g
c291cmNlOwogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICAgICAgZm91bmRTVkdGb250ID0g
aXRlbS0+aXNTVkdGb250RmFjZVNyYygpIHx8IGl0ZW0tPnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwor
ICAgICAgICBmb3VuZFNWR0ZvbnQgPSBpdGVtLmlzU1ZHRm9udEZhY2VTcmMoKSB8fCBpdGVtLnN2
Z0ZvbnRGYWNlRWxlbWVudCgpOwogI2VuZGlmCi0gICAgICAgIGlmICghaXRlbS0+aXNMb2NhbCgp
KSB7CisgICAgICAgIGlmICghaXRlbS5pc0xvY2FsKCkpIHsKICAgICAgICAgICAgIFNldHRpbmdz
KiBzZXR0aW5ncyA9IG1fZG9jdW1lbnQgPyBtX2RvY3VtZW50LT5mcmFtZSgpID8gJm1fZG9jdW1l
bnQtPmZyYW1lKCktPnNldHRpbmdzKCkgOiAwIDogMDsKICAgICAgICAgICAgIGJvb2wgYWxsb3dE
b3dubG9hZGluZyA9IGZvdW5kU1ZHRm9udCB8fCAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmRvd25s
b2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCgpKTsKLSAgICAgICAgICAgIGlmIChhbGxvd0Rvd25s
b2FkaW5nICYmIGl0ZW0tPmlzU3VwcG9ydGVkRm9ybWF0KCkgJiYgbV9kb2N1bWVudCkgewotICAg
ICAgICAgICAgICAgIENhY2hlZEZvbnQqIGNhY2hlZEZvbnQgPSBpdGVtLT5jYWNoZWRGb250KG1f
ZG9jdW1lbnQpOworICAgICAgICAgICAgaWYgKGFsbG93RG93bmxvYWRpbmcgJiYgaXRlbS5pc1N1
cHBvcnRlZEZvcm1hdCgpICYmIG1fZG9jdW1lbnQpIHsKKyAgICAgICAgICAgICAgICBDYWNoZWRG
b250KiBjYWNoZWRGb250ID0gaXRlbS5jYWNoZWRGb250KG1fZG9jdW1lbnQpOwogICAgICAgICAg
ICAgICAgIGlmIChjYWNoZWRGb250KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IHN0
ZDo6bWFrZV91bmlxdWU8Q1NTRm9udEZhY2VTb3VyY2U+KGl0ZW0tPnJlc291cmNlKCksIGNhY2hl
ZEZvbnQpOworICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENT
U0ZvbnRGYWNlU291cmNlPihpdGVtLnJlc291cmNlKCksIGNhY2hlZEZvbnQpOwogI2lmIEVOQUJM
RShTVkdfRk9OVFMpCiAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZFNWR0ZvbnQpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBzb3VyY2UtPnNldEhhc0V4dGVybmFsU1ZHRm9udCh0cnVlKTsK
QEAgLTIyMiw3ICsyMjIsNyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxl
KGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUpCiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc291cmNlID0g
c3RkOjptYWtlX3VuaXF1ZTxDU1NGb250RmFjZVNvdXJjZT4oaXRlbS0+cmVzb3VyY2UoKSk7Cisg
ICAgICAgICAgICBzb3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihp
dGVtLnJlc291cmNlKCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFmb250RmFjZSkgewpA
QCAtMjM3LDcgKzIzNyw3IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUo
Y29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSkKIAogICAgICAgICBpZiAoc291
cmNlKSB7CiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICAgICAgICAgIHNvdXJjZS0+c2V0U1ZH
Rm9udEZhY2VFbGVtZW50KGl0ZW0tPnN2Z0ZvbnRGYWNlRWxlbWVudCgpKTsKKyAgICAgICAgICAg
IHNvdXJjZS0+c2V0U1ZHRm9udEZhY2VFbGVtZW50KGl0ZW0uc3ZnRm9udEZhY2VFbGVtZW50KCkp
OwogI2VuZGlmCiAgICAgICAgICAgICBmb250RmFjZS0+YWRkU291cmNlKFdURjo6bW92ZShzb3Vy
Y2UpKTsKICAgICAgICAgfQpAQCAtMjUxLDE1ICsyNTEsMTUgQEAgdm9pZCBDU1NGb250U2VsZWN0
b3I6OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxl
KQogICAgIGlmIChyYW5nZUxpc3QpIHsKICAgICAgICAgdW5zaWduZWQgbnVtUmFuZ2VzID0gcmFu
Z2VMaXN0LT5sZW5ndGgoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVJh
bmdlczsgaSsrKSB7Ci0gICAgICAgICAgICBDU1NVbmljb2RlUmFuZ2VWYWx1ZSogcmFuZ2UgPSB0
b0NTU1VuaWNvZGVSYW5nZVZhbHVlKHJhbmdlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhp
KSk7Ci0gICAgICAgICAgICBmb250RmFjZS0+YWRkUmFuZ2UocmFuZ2UtPmZyb20oKSwgcmFuZ2Ut
PnRvKCkpOworICAgICAgICAgICAgQ1NTVW5pY29kZVJhbmdlVmFsdWUmIHJhbmdlID0gZG93bmNh
c3Q8Q1NTVW5pY29kZVJhbmdlVmFsdWU+KCpyYW5nZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soaSkpOworICAgICAgICAgICAgZm9udEZhY2UtPmFkZFJhbmdlKHJhbmdlLmZyb20oKSwgcmFu
Z2UudG8oKSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBIYXNoIHVuZGVyIGV2ZXJ5IHNp
bmdsZSBmYW1pbHkgbmFtZS4KLSAgICBpbnQgZmFtaWx5TGVuZ3RoID0gZmFtaWx5TGlzdC0+bGVu
Z3RoKCk7CisgICAgaW50IGZhbWlseUxlbmd0aCA9IGZhbWlseUxpc3QubGVuZ3RoKCk7CiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBmYW1pbHlMZW5ndGg7IGkrKykgewotICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogaXRlbSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoZmFtaWx5TGlzdC0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjayhpKSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBpdGVtID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGZhbWlseUxpc3QuaXRlbVdpdGhvdXRCb3VuZHND
aGVjayhpKSk7CiAgICAgICAgIFN0cmluZyBmYW1pbHlOYW1lOwogICAgICAgICBpZiAoaXRlbS0+
aXNTdHJpbmcoKSkgewogICAgICAgICAgICAgZmFtaWx5TmFtZSA9IGl0ZW0tPmdldFN0cmluZ1Zh
bHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFZhbHVlLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFZhbHVlLmgKaW5kZXggODFhYzQxYTdhYzA5ODQ1NzNh
NWNkYzQwYzQ5NTU4Mjc0MjExNTk5Yy4uMDBkNzAxZjhjMzI0OGNjOTI1YzI3N2M1NjNjNzUzMTY3
ZDU4NWFmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRWYWx1ZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250VmFsdWUuaApAQCAtNTUsOCArNTUsOCBAQCBw
cml2YXRlOgogICAgIH0KIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0ZvbnRWYWx1ZSwg
aXNGb250VmFsdWUoKSkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotfSAvLyBuYW1lc3BhY2UK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0ZvbnRWYWx1ZSwgaXNGb250VmFs
dWUoKSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRnVuY3Rp
b25WYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Z1bmN0aW9uVmFsdWUuaAppbmRleCA1
MTExMjNiODczM2FmM2Q3YTFiZDEyYzRhNzBjOWYyZTc4NWViNTFlLi41NTFmNDVlODg3NGQwMzQ2
YmRiZTYwMjdhNDk1MDYyNDBjN2I4OGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTRnVuY3Rpb25WYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGdW5jdGlvblZh
bHVlLmgKQEAgLTU5LDggKzU5LDkgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0
PiBtX2FyZ3M7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NGdW5jdGlvblZhbHVlLCBp
c0Z1bmN0aW9uVmFsdWUoKSkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTRnVuY3Rpb25WYWx1ZSwgaXNGdW5jdGlvblZhbHVlKCkp
CiAKLX0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGll
bnRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKaW5k
ZXggNDMzMzJjMGJmYTEzMzJjZDFhMWIzYzJlMzg0YTdiOTA1YWE5MTlkMS4uMzAyNjc1OWUzYzMx
Y2RlMTMxZTJjZmM4NzA3MTU3ZWE3OGZhYjhhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFk
aWVudFZhbHVlLmNwcApAQCAtNDYsMTIgKzQ2LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFBh
c3NSZWZQdHI8SW1hZ2U+IENTU0dyYWRpZW50VmFsdWU6OmltYWdlKFJlbmRlckVsZW1lbnQqIHJl
bmRlcmVyLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7CiAgICAgaWYgKHNpemUuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBib29s
IGNhY2hlYWJsZSA9IGlzQ2FjaGVhYmxlKCk7CiAgICAgaWYgKGNhY2hlYWJsZSkgewogICAgICAg
ICBpZiAoIWNsaWVudHMoKS5jb250YWlucyhyZW5kZXJlcikpCi0gICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIEltYWdlKiByZXN1bHQg
PSBjYWNoZWRJbWFnZUZvclNpemUoc2l6ZSk7CiAgICAgICAgIGlmIChyZXN1bHQpCkBAIC02MCwx
MCArNjAsMTAgQEAgUGFzc1JlZlB0cjxJbWFnZT4gQ1NTR3JhZGllbnRWYWx1ZTo6aW1hZ2UoUmVu
ZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2kKIAogICAgIFJlZlB0cjxHcmFkaWVu
dD4gZ3JhZGllbnQ7CiAKLSAgICBpZiAoaXNMaW5lYXJHcmFkaWVudFZhbHVlKCkpCi0gICAgICAg
IGdyYWRpZW50ID0gdG9DU1NMaW5lYXJHcmFkaWVudFZhbHVlKHRoaXMpLT5jcmVhdGVHcmFkaWVu
dCgqcmVuZGVyZXIsIHNpemUpOworICAgIGlmIChpczxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPigq
dGhpcykpCisgICAgICAgIGdyYWRpZW50ID0gZG93bmNhc3Q8Q1NTTGluZWFyR3JhZGllbnRWYWx1
ZT4oKnRoaXMpLmNyZWF0ZUdyYWRpZW50KCpyZW5kZXJlciwgc2l6ZSk7CiAgICAgZWxzZQotICAg
ICAgICBncmFkaWVudCA9IHRvQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZSh0aGlzKS0+Y3JlYXRlR3Jh
ZGllbnQoKnJlbmRlcmVyLCBzaXplKTsKKyAgICAgICAgZ3JhZGllbnQgPSBkb3duY2FzdDxDU1NS
YWRpYWxHcmFkaWVudFZhbHVlPigqdGhpcykuY3JlYXRlR3JhZGllbnQoKnJlbmRlcmVyLCBzaXpl
KTsKIAogICAgIFJlZlB0cjxHcmFkaWVudEltYWdlPiBuZXdJbWFnZSA9IEdyYWRpZW50SW1hZ2U6
OmNyZWF0ZShncmFkaWVudCwgc2l6ZSk7CiAgICAgaWYgKGNhY2hlYWJsZSkKQEAgLTExOCwxMyAr
MTE4LDEzIEBAIFBhc3NSZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6
Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGVSCiAgICAgUmVmUHRyPENTU0dyYWRpZW50
VmFsdWU+IHJlc3VsdDsKICAgICBpZiAoIWRlcml2ZWQpCiAgICAgICAgIHJlc3VsdCA9IHRoaXM7
Ci0gICAgZWxzZSBpZiAoaXNMaW5lYXJHcmFkaWVudFZhbHVlKCkpCi0gICAgICAgIHJlc3VsdCA9
IHRvQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSh0aGlzKS0+Y2xvbmUoKTsKLSAgICBlbHNlIGlmIChp
c1JhZGlhbEdyYWRpZW50VmFsdWUoKSkKLSAgICAgICAgcmVzdWx0ID0gdG9DU1NSYWRpYWxHcmFk
aWVudFZhbHVlKHRoaXMpLT5jbG9uZSgpOworICAgIGVsc2UgaWYgKGlzPENTU0xpbmVhckdyYWRp
ZW50VmFsdWU+KCp0aGlzKSkKKyAgICAgICAgcmVzdWx0ID0gZG93bmNhc3Q8Q1NTTGluZWFyR3Jh
ZGllbnRWYWx1ZT4oKnRoaXMpLmNsb25lKCk7CisgICAgZWxzZSBpZiAoaXM8Q1NTUmFkaWFsR3Jh
ZGllbnRWYWx1ZT4oKnRoaXMpKQorICAgICAgICByZXN1bHQgPSBkb3duY2FzdDxDU1NSYWRpYWxH
cmFkaWVudFZhbHVlPigqdGhpcykuY2xvbmUoKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIHN0b3AgOiByZXN1bHQtPm1fc3RvcHMpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCmluZGV4IGU0NTIxMmYzMGVlZWVlOTllZGJl
Zjk0MDE4NTYzNzQwNWExN2MzZTcuLjZhYjc4ZGIwMjk1ZjQzMDAxMjhmNzQxNWVhNGIxYmQzMDIw
ZDllMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaApAQCAtMTMxLDggKzEz
MSw2IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1fcmVwZWF0aW5nOwogfTsKIAotQ1NTX1ZBTFVF
X1RZUEVfQ0FTVFMoQ1NTR3JhZGllbnRWYWx1ZSwgaXNHcmFkaWVudFZhbHVlKCkpCi0KIGNsYXNz
IENTU0xpbmVhckdyYWRpZW50VmFsdWUgOiBwdWJsaWMgQ1NTR3JhZGllbnRWYWx1ZSB7CiBwdWJs
aWM6CiAKQEAgLTE3MCw4ICsxNjgsNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gbV9hbmdsZTsgLy8gbWF5IGJlIG51bGwuCiB9OwogCi1DU1NfVkFMVUVfVFlQRV9D
QVNUUyhDU1NMaW5lYXJHcmFkaWVudFZhbHVlLCBpc0xpbmVhckdyYWRpZW50VmFsdWUoKSkKLQog
Y2xhc3MgQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZSA6IHB1YmxpYyBDU1NHcmFkaWVudFZhbHVlIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZjxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPiBjcmVh
dGUoQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0LCBDU1NHcmFkaWVudFR5cGUgZ3JhZGllbnRUeXBl
ID0gQ1NTUmFkaWFsR3JhZGllbnQpCkBAIC0yMzMsOCArMjI5LDEwIEBAIHByaXZhdGU6CiAgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2VuZFZlcnRpY2FsU2l6ZTsKIH07CiAKLUNTU19W
QUxVRV9UWVBFX0NBU1RTKENTU1JhZGlhbEdyYWRpZW50VmFsdWUsIGlzUmFkaWFsR3JhZGllbnRW
YWx1ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQ1NTX1ZBTFVFKENTU0dyYWRpZW50VmFsdWUsIGlzR3JhZGllbnRWYWx1ZSgpKQorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSwgaXNMaW5l
YXJHcmFkaWVudFZhbHVlKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NS
YWRpYWxHcmFkaWVudFZhbHVlLCBpc1JhZGlhbEdyYWRpZW50VmFsdWUoKSkKKwogI2VuZGlmIC8v
IENTU0dyYWRpZW50VmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
aWRMaW5lTmFtZXNWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyaWRMaW5lTmFtZXNW
YWx1ZS5oCmluZGV4IDFiMGQxYjg3ZWU2YTRiNzc1MDU0ZDQwNDljY2UwOGUyMTdmYmZhMmUuLjdh
YjhiMjU4YTk2NjQ5N2Y2ODcyNWE2MTI0MDNjZDA1MzAwNWUwYWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmlkTGluZU5hbWVzVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLmgKQEAgLTUyLDkgKzUyLDkgQEAgcHJpdmF0ZToK
ICAgICBDU1NHcmlkTGluZU5hbWVzVmFsdWUoKTsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RT
KENTU0dyaWRMaW5lTmFtZXNWYWx1ZSwgaXNHcmlkTGluZU5hbWVzVmFsdWUoKSk7Cit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKLX0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENT
U0dyaWRMaW5lTmFtZXNWYWx1ZSwgaXNHcmlkTGluZU5hbWVzVmFsdWUoKSk7CiAKLSNlbmRpZgot
I2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKENTU19HUklEX0xBWU9VVCkKKyNlbmRpZiAvLyBDU1NH
cmlkTGluZU5hbWVzVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
aWRUZW1wbGF0ZUFyZWFzVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmlkVGVtcGxh
dGVBcmVhc1ZhbHVlLmgKaW5kZXggOGQyNWYyY2Q3NWQ1ZTMyNzQ5MzJhYTc1ZWE3OWFhNGVmOTAx
NjUyZS4uNDk4NGU3NjBiZWQ5YWI0ODE0N2ZmOTk0YTY3NzIwZmU1MGNkN2U3YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5oCkBAIC02MiwxMCAr
NjIsMTAgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9jb2x1bW5Db3VudDsKIH07CiAKLUNTU19W
QUxVRV9UWVBFX0NBU1RTKENTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUsIGlzR3JpZFRlbXBsYXRl
QXJlYXNWYWx1ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUsIGlzR3JpZFRlbXBs
YXRlQXJlYXNWYWx1ZSgpKQorCiAjZW5kaWYgLyogRU5BQkxFKENTU19HUklEX0xBWU9VVCkgKi8K
IAogI2VuZGlmIC8vIENTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCmluZGV4IDBlZjc3NGY4NGIxYmE2NTM5
NjljZWExOGE1ZWQ0NDYyOTk2MGI0ZjIuLmZiODk5NTU3MTc1NTYzYjk1NWQzODE3ODc0ZWQ0Yjc3
OGMwMjQ3YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRv
clZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZS5jcHAKQEAgLTEwOSwxNSArMTA5LDE1IEBAIFBhc3NSZWZQdHI8SW1hZ2U+IENTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWU6OmltYWdlKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBGCiB7CiAg
ICAgc3dpdGNoIChjbGFzc1R5cGUoKSkgewogICAgIGNhc2UgQ2FudmFzQ2xhc3M6Ci0gICAgICAg
IHJldHVybiB0b0NTU0NhbnZhc1ZhbHVlKHRoaXMpLT5pbWFnZShyZW5kZXJlciwgc2l6ZSk7Cisg
ICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDYW52YXNWYWx1ZT4oKnRoaXMpLmltYWdlKHJlbmRl
cmVyLCBzaXplKTsKICAgICBjYXNlIENyb3NzZmFkZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9D
U1NDcm9zc2ZhZGVWYWx1ZSh0aGlzKS0+aW1hZ2UocmVuZGVyZXIsIHNpemUpOworICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KCp0aGlzKS5pbWFnZShyZW5kZXJlciwg
c2l6ZSk7CiAgICAgY2FzZSBGaWx0ZXJJbWFnZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NG
aWx0ZXJJbWFnZVZhbHVlKHRoaXMpLT5pbWFnZShyZW5kZXJlciwgc2l6ZSk7CisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPigqdGhpcykuaW1hZ2UocmVuZGVyZXIs
IHNpemUpOwogICAgIGNhc2UgTGluZWFyR3JhZGllbnRDbGFzczoKLSAgICAgICAgcmV0dXJuIHRv
Q1NTTGluZWFyR3JhZGllbnRWYWx1ZSh0aGlzKS0+aW1hZ2UocmVuZGVyZXIsIHNpemUpOworICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4oKnRoaXMpLmltYWdl
KHJlbmRlcmVyLCBzaXplKTsKICAgICBjYXNlIFJhZGlhbEdyYWRpZW50Q2xhc3M6Ci0gICAgICAg
IHJldHVybiB0b0NTU1JhZGlhbEdyYWRpZW50VmFsdWUodGhpcyktPmltYWdlKHJlbmRlcmVyLCBz
aXplKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCp0
aGlzKS5pbWFnZShyZW5kZXJlciwgc2l6ZSk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTI4LDE1ICsxMjgsMTUgQEAgYm9vbCBDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlOjppc0ZpeGVkU2l6ZSgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChjbGFz
c1R5cGUoKSkgewogICAgIGNhc2UgQ2FudmFzQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0Nh
bnZhc1ZhbHVlKHRoaXMpLT5pc0ZpeGVkU2l6ZSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q1NTQ2FudmFzVmFsdWU+KCp0aGlzKS5pc0ZpeGVkU2l6ZSgpOwogICAgIGNhc2UgQ3Jvc3NmYWRl
Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0Nyb3NzZmFkZVZhbHVlKHRoaXMpLT5pc0ZpeGVk
U2l6ZSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KCp0aGlz
KS5pc0ZpeGVkU2l6ZSgpOwogICAgIGNhc2UgRmlsdGVySW1hZ2VDbGFzczoKLSAgICAgICAgcmV0
dXJuIHRvQ1NTRmlsdGVySW1hZ2VWYWx1ZSh0aGlzKS0+aXNGaXhlZFNpemUoKTsKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KCp0aGlzKS5pc0ZpeGVkU2l6ZSgp
OwogICAgIGNhc2UgTGluZWFyR3JhZGllbnRDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTTGlu
ZWFyR3JhZGllbnRWYWx1ZSh0aGlzKS0+aXNGaXhlZFNpemUoKTsKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PENTU0xpbmVhckdyYWRpZW50VmFsdWU+KCp0aGlzKS5pc0ZpeGVkU2l6ZSgpOwogICAg
IGNhc2UgUmFkaWFsR3JhZGllbnRDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTUmFkaWFsR3Jh
ZGllbnRWYWx1ZSh0aGlzKS0+aXNGaXhlZFNpemUoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCp0aGlzKS5pc0ZpeGVkU2l6ZSgpOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTE0NywxNSArMTQ3
LDE1IEBAIEZsb2F0U2l6ZSBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpmaXhlZFNpemUoY29uc3Qg
UmVuZGVyRWxlbWVudCogcmVuZGVyZXIpCiB7CiAgICAgc3dpdGNoIChjbGFzc1R5cGUoKSkgewog
ICAgIGNhc2UgQ2FudmFzQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0NhbnZhc1ZhbHVlKHRo
aXMpLT5maXhlZFNpemUocmVuZGVyZXIpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ2Fu
dmFzVmFsdWU+KCp0aGlzKS5maXhlZFNpemUocmVuZGVyZXIpOwogICAgIGNhc2UgQ3Jvc3NmYWRl
Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0Nyb3NzZmFkZVZhbHVlKHRoaXMpLT5maXhlZFNp
emUocmVuZGVyZXIpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+
KCp0aGlzKS5maXhlZFNpemUocmVuZGVyZXIpOwogICAgIGNhc2UgRmlsdGVySW1hZ2VDbGFzczoK
LSAgICAgICAgcmV0dXJuIHRvQ1NTRmlsdGVySW1hZ2VWYWx1ZSh0aGlzKS0+Zml4ZWRTaXplKHJl
bmRlcmVyKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KCp0
aGlzKS5maXhlZFNpemUocmVuZGVyZXIpOwogICAgIGNhc2UgTGluZWFyR3JhZGllbnRDbGFzczoK
LSAgICAgICAgcmV0dXJuIHRvQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSh0aGlzKS0+Zml4ZWRTaXpl
KHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0xpbmVhckdyYWRpZW50VmFs
dWU+KCp0aGlzKS5maXhlZFNpemUocmVuZGVyZXIpOwogICAgIGNhc2UgUmFkaWFsR3JhZGllbnRD
bGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZSh0aGlzKS0+Zml4
ZWRTaXplKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1JhZGlhbEdyYWRp
ZW50VmFsdWU+KCp0aGlzKS5maXhlZFNpemUocmVuZGVyZXIpOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTE2NiwxNSArMTY2LDE1IEBAIGJv
b2wgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6aXNQZW5kaW5nKCkgY29uc3QKIHsKICAgICBzd2l0
Y2ggKGNsYXNzVHlwZSgpKSB7CiAgICAgY2FzZSBDcm9zc2ZhZGVDbGFzczoKLSAgICAgICAgcmV0
dXJuIHRvQ1NTQ3Jvc3NmYWRlVmFsdWUodGhpcyktPmlzUGVuZGluZygpOworICAgICAgICByZXR1
cm4gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KCp0aGlzKS5pc1BlbmRpbmcoKTsKICAgICBj
YXNlIENhbnZhc0NsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NDYW52YXNWYWx1ZSh0aGlzKS0+
aXNQZW5kaW5nKCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDYW52YXNWYWx1ZT4oKnRo
aXMpLmlzUGVuZGluZygpOwogICAgIGNhc2UgRmlsdGVySW1hZ2VDbGFzczoKLSAgICAgICAgcmV0
dXJuIHRvQ1NTRmlsdGVySW1hZ2VWYWx1ZSh0aGlzKS0+aXNQZW5kaW5nKCk7CisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPigqdGhpcykuaXNQZW5kaW5nKCk7CiAg
ICAgY2FzZSBMaW5lYXJHcmFkaWVudENsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NMaW5lYXJH
cmFkaWVudFZhbHVlKHRoaXMpLT5pc1BlbmRpbmcoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENTU0xpbmVhckdyYWRpZW50VmFsdWU+KCp0aGlzKS5pc1BlbmRpbmcoKTsKICAgICBjYXNlIFJh
ZGlhbEdyYWRpZW50Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU1JhZGlhbEdyYWRpZW50VmFs
dWUodGhpcyktPmlzUGVuZGluZygpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUmFkaWFs
R3JhZGllbnRWYWx1ZT4oKnRoaXMpLmlzUGVuZGluZygpOwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTE4NSwxNSArMTg1LDE1IEBAIGJvb2wg
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6a25vd25Ub0JlT3BhcXVlKGNvbnN0IFJlbmRlckVsZW1l
bnQqIHJlbmRlcmVyKSBjb25zCiB7CiAgICAgc3dpdGNoIChjbGFzc1R5cGUoKSkgewogICAgIGNh
c2UgQ3Jvc3NmYWRlQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0Nyb3NzZmFkZVZhbHVlKHRo
aXMpLT5rbm93blRvQmVPcGFxdWUocmVuZGVyZXIpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q1NTQ3Jvc3NmYWRlVmFsdWU+KCp0aGlzKS5rbm93blRvQmVPcGFxdWUocmVuZGVyZXIpOwogICAg
IGNhc2UgQ2FudmFzQ2xhc3M6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIEZpbHRl
ckltYWdlQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0ZpbHRlckltYWdlVmFsdWUodGhpcykt
Pmtub3duVG9CZU9wYXF1ZShyZW5kZXJlcik7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NG
aWx0ZXJJbWFnZVZhbHVlPigqdGhpcykua25vd25Ub0JlT3BhcXVlKHJlbmRlcmVyKTsKICAgICBj
YXNlIExpbmVhckdyYWRpZW50Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0xpbmVhckdyYWRp
ZW50VmFsdWUodGhpcyktPmtub3duVG9CZU9wYXF1ZShyZW5kZXJlcik7CisgICAgICAgIHJldHVy
biBkb3duY2FzdDxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPigqdGhpcykua25vd25Ub0JlT3BhcXVl
KHJlbmRlcmVyKTsKICAgICBjYXNlIFJhZGlhbEdyYWRpZW50Q2xhc3M6Ci0gICAgICAgIHJldHVy
biB0b0NTU1JhZGlhbEdyYWRpZW50VmFsdWUodGhpcyktPmtub3duVG9CZU9wYXF1ZShyZW5kZXJl
cik7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigqdGhp
cykua25vd25Ub0JlT3BhcXVlKHJlbmRlcmVyKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0yMDQsMTkgKzIwNCwxOSBAQCB2b2lkIENTU0lt
YWdlR2VuZXJhdG9yVmFsdWU6OmxvYWRTdWJpbWFnZXMoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNh
Y2hlZFJlc291cmNlTAogewogICAgIHN3aXRjaCAoY2xhc3NUeXBlKCkpIHsKICAgICBjYXNlIENy
b3NzZmFkZUNsYXNzOgotICAgICAgICB0b0NTU0Nyb3NzZmFkZVZhbHVlKHRoaXMpLT5sb2FkU3Vi
aW1hZ2VzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKyAgICAgICAgZG93bmNhc3Q8Q1NTQ3Jvc3Nm
YWRlVmFsdWU+KCp0aGlzKS5sb2FkU3ViaW1hZ2VzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBDYW52YXNDbGFzczoKLSAgICAgICAgdG9DU1NDYW52YXNW
YWx1ZSh0aGlzKS0+bG9hZFN1YmltYWdlcyhjYWNoZWRSZXNvdXJjZUxvYWRlcik7CisgICAgICAg
IGRvd25jYXN0PENTU0NhbnZhc1ZhbHVlPigqdGhpcykubG9hZFN1YmltYWdlcyhjYWNoZWRSZXNv
dXJjZUxvYWRlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVySW1hZ2VDbGFzczoK
LSAgICAgICAgdG9DU1NGaWx0ZXJJbWFnZVZhbHVlKHRoaXMpLT5sb2FkU3ViaW1hZ2VzKGNhY2hl
ZFJlc291cmNlTG9hZGVyKTsKKyAgICAgICAgZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4o
KnRoaXMpLmxvYWRTdWJpbWFnZXMoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIExpbmVhckdyYWRpZW50Q2xhc3M6Ci0gICAgICAgIHRvQ1NTTGluZWFyR3Jh
ZGllbnRWYWx1ZSh0aGlzKS0+bG9hZFN1YmltYWdlcyhjYWNoZWRSZXNvdXJjZUxvYWRlcik7Cisg
ICAgICAgIGRvd25jYXN0PENTU0xpbmVhckdyYWRpZW50VmFsdWU+KCp0aGlzKS5sb2FkU3ViaW1h
Z2VzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBSYWRp
YWxHcmFkaWVudENsYXNzOgotICAgICAgICB0b0NTU1JhZGlhbEdyYWRpZW50VmFsdWUodGhpcykt
PmxvYWRTdWJpbWFnZXMoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOworICAgICAgICBkb3duY2FzdDxD
U1NSYWRpYWxHcmFkaWVudFZhbHVlPigqdGhpcykubG9hZFN1YmltYWdlcyhjYWNoZWRSZXNvdXJj
ZUxvYWRlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtMjI1LDEzICsyMjUsMTMgQEAgdm9pZCBDU1NJbWFnZUdlbmVyYXRv
clZhbHVlOjpsb2FkU3ViaW1hZ2VzKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJj
ZUwKIAogYm9vbCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpzdWJpbWFnZUlzUGVuZGluZyhDU1NW
YWx1ZSogdmFsdWUpCiB7Ci0gICAgaWYgKHZhbHVlLT5pc0ltYWdlVmFsdWUoKSkKLSAgICAgICAg
cmV0dXJuIHRvQ1NTSW1hZ2VWYWx1ZSh2YWx1ZSktPmNhY2hlZE9yUGVuZGluZ0ltYWdlKCktPmlz
UGVuZGluZ0ltYWdlKCk7CisgICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KCp2YWx1ZSkpCisgICAg
ICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPigqdmFsdWUpLmNhY2hlZE9yUGVuZGlu
Z0ltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCk7CiAgICAgCi0gICAgaWYgKHZhbHVlLT5pc0ltYWdl
R2VuZXJhdG9yVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIHRvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZSh2YWx1ZSktPmlzUGVuZGluZygpOworICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVl
PigqdmFsdWUpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZT4oKnZhbHVlKS5pc1BlbmRpbmcoKTsKIAotICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpICYmIHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFs
dWVOb25lKQorICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25l
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTI0NCwyMSArMjQ0LDIxIEBAIENhY2hlZEltYWdlKiBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpj
YWNoZWRJbWFnZUZvckNTU1ZhbHVlKENTU1ZhbHVlKiB2YWx1ZSwgQ2FjCiAgICAgaWYgKCF2YWx1
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAodmFsdWUtPmlzSW1hZ2VWYWx1
ZSgpKSB7Ci0gICAgICAgIFN0eWxlQ2FjaGVkSW1hZ2UqIHN0eWxlQ2FjaGVkSW1hZ2UgPSB0b0NT
U0ltYWdlVmFsdWUodmFsdWUpLT5jYWNoZWRJbWFnZShjYWNoZWRSZXNvdXJjZUxvYWRlcik7Cisg
ICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KCp2YWx1ZSkpIHsKKyAgICAgICAgU3R5bGVDYWNoZWRJ
bWFnZSogc3R5bGVDYWNoZWRJbWFnZSA9IGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KCp2YWx1ZSku
Y2FjaGVkSW1hZ2UoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwogICAgICAgICBpZiAoIXN0eWxlQ2Fj
aGVkSW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICByZXR1cm4g
c3R5bGVDYWNoZWRJbWFnZS0+Y2FjaGVkSW1hZ2UoKTsKICAgICB9CiAgICAgCi0gICAgaWYgKHZh
bHVlLT5pc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSkgewotICAgICAgICB0b0NTU0ltYWdlR2VuZXJh
dG9yVmFsdWUodmFsdWUpLT5sb2FkU3ViaW1hZ2VzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKyAg
ICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICBkb3du
Y2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPigqdmFsdWUpLmxvYWRTdWJpbWFnZXMoY2FjaGVk
UmVzb3VyY2VMb2FkZXIpOwogICAgICAgICAvLyBGSVhNRTogSGFuZGxlIENTU0ltYWdlR2VuZXJh
dG9yVmFsdWUgKGFuZCB0aHVzIGNyb3NzLWZhZGVzIHdpdGggZ3JhZGllbnRzIGFuZCBjYW52YXMp
LgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAodmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+Z2V0VmFsdWVJRCgp
ID09IENTU1ZhbHVlTm9uZSkKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkg
JiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpID09IENT
U1ZhbHVlTm9uZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRv
clZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oCmlu
ZGV4IDYzYzgxMzdlMjliMGYwOGUzZGFlZWQwMDhjMWNiNmY5MWQ1ZDhiNmIuLjdkOTlkNDFlYTZh
NzQwODNjYzgzNDM4OGIzMWU1NTI0ODg3NzNiOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ltYWdlR2VuZXJhdG9yVmFsdWUuaApAQCAtOTIsOCArOTIsOCBAQCBwcml2YXRlOgogICAgIEhh
c2hNYXA8RmxvYXRTaXplLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkR2VuZXJhdGVkSW1hZ2U+PiBt
X2ltYWdlczsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0ltYWdlR2VuZXJhdG9yVmFs
dWUsIGlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0ltYWdlR2VuZXJhdG9yVmFsdWUs
IGlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKQorCiAjZW5kaWYgLy8gQ1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHAKaW5kZXggNGRiYjBl
NjViMWNmYzc0Njk5YzFiYzM1ZTk1ZDk4OTNhYzJhOWMzYS4uYmExODhhNWNmMTI4OTY1MzczYTFk
ZmFjNmNlNGFmNWM1MjI5OGVlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0lt
YWdlU2V0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZhbHVl
LmNwcApAQCAtNzAsMTMgKzcwLDEzIEBAIHZvaWQgQ1NTSW1hZ2VTZXRWYWx1ZTo6ZmlsbEltYWdl
U2V0KCkKICAgICBzaXplX3QgaSA9IDA7CiAgICAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKICAgICAg
ICAgQ1NTVmFsdWUqIGltYWdlVmFsdWUgPSBpdGVtKGkpOwotICAgICAgICBTdHJpbmcgaW1hZ2VV
UkwgPSB0b0NTU0ltYWdlVmFsdWUoaW1hZ2VWYWx1ZSktPnVybCgpOworICAgICAgICBTdHJpbmcg
aW1hZ2VVUkwgPSBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPigqaW1hZ2VWYWx1ZSkudXJsKCk7CiAK
ICAgICAgICAgKytpOwogICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihp
IDwgbGVuZ3RoKTsKICAgICAgICAgQ1NTVmFsdWUqIHNjYWxlRmFjdG9yVmFsdWUgPSBpdGVtKGkp
OwotICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzY2FsZUZhY3RvclZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUoc2NhbGVGYWN0b3JWYWx1ZSktPmdldEZsb2F0VmFsdWUoKTsKKyAg
ICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCpzY2FsZUZhY3RvclZhbHVlKSk7CisgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpzY2FsZUZhY3RvclZhbHVlKS5nZXRGbG9hdFZhbHVl
KCk7CiAKICAgICAgICAgSW1hZ2VXaXRoU2NhbGUgaW1hZ2U7CiAgICAgICAgIGltYWdlLmltYWdl
VVJMID0gaW1hZ2VVUkw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VT
ZXRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUuaAppbmRleCBj
MTg5OWYzYWI3MDE4NzgxZDgzOTFiYTFjZWNlZGRhOTE4ZGE1MDJkLi40MGE5OTY1M2M3MzdkYWRi
N2FjMGE4NjE4MDkyNGQxNDljYjVkM2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTSW1hZ2VTZXRWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZh
bHVlLmgKQEAgLTg3LDEwICs4NywxMCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxJbWFnZVdpdGhT
Y2FsZT4gbV9pbWFnZXNJblNldDsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0ltYWdl
U2V0VmFsdWUsIGlzSW1hZ2VTZXRWYWx1ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0ltYWdlU2V0VmFsdWUsIGlzSW1h
Z2VTZXRWYWx1ZSgpKQorCiAjZW5kaWYgLy8gRU5BQkxFKENTU19JTUFHRV9TRVQpCiAKICNlbmRp
ZiAvLyBDU1NJbWFnZVNldFZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NJbWFnZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5oCmluZGV4
IDljYzhiYzNlNDk0MmQ2YzI1NjQyZWNlNDFlZWFhMGM3NjMyMTNhOTguLjljNDIwOGY5ZjJiMDMz
MGZjYmY3ODM0NjVhYzRiZWY0MTU3ODA3YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NJbWFnZVZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlVmFsdWUu
aApAQCAtNjksOCArNjksOCBAQCBwcml2YXRlOgogICAgIEF0b21pY1N0cmluZyBtX2luaXRpYXRv
ck5hbWU7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NJbWFnZVZhbHVlLCBpc0ltYWdl
VmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0NTU19WQUxVRShDU1NJbWFnZVZhbHVlLCBpc0ltYWdlVmFsdWUoKSkKKwogI2VuZGlmIC8v
IENTU0ltYWdlVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0luaGVy
aXRlZFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW5oZXJpdGVkVmFsdWUuaAppbmRl
eCBmNmQxNjhlZWEwNzY4YmY4ZDAxNjZlNWM1MzhmYTA4ZGI2MzA2ZDU0Li4zMTY3MWJhNzI1Nzdl
N2Q5NjMzZTcwNGFmYTEzMTU3YjBmOGFmMjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTSW5oZXJpdGVkVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW5oZXJp
dGVkVmFsdWUuaApAQCAtNDQsOCArNDQsOCBAQCBwcml2YXRlOgogICAgIH0KIH07CiAKLUNTU19W
QUxVRV9UWVBFX0NBU1RTKENTU0luaGVyaXRlZFZhbHVlLCBpc0luaGVyaXRlZFZhbHVlKCkpCi0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFM
VUUoQ1NTSW5oZXJpdGVkVmFsdWUsIGlzSW5oZXJpdGVkVmFsdWUoKSkKKwogI2VuZGlmIC8vIENT
U0luaGVyaXRlZFZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbml0
aWFsVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbml0aWFsVmFsdWUuaAppbmRleCBh
MGE2ZTU1NDg4NWZhMTA4MTU2MGNhYjY4NDQyZDc3OTdhZTJmZTFiLi45MTE2YzE4YmQ5Zjk1MTdk
NGVmMWJmMDMzY2QzYmFjZTI1ZTI2MGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTSW5pdGlhbFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0luaXRpYWxWYWx1
ZS5oCkBAIC01Myw4ICs1Myw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzSW1wbGljaXQ7CiB9
OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NJbml0aWFsVmFsdWUsIGlzSW5pdGlhbFZhbHVl
KCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19D
U1NfVkFMVUUoQ1NTSW5pdGlhbFZhbHVlLCBpc0luaXRpYWxWYWx1ZSgpKQorCiAjZW5kaWYgLy8g
Q1NTSW5pdGlhbFZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NMaW5l
Qm94Q29udGFpblZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTGluZUJveENvbnRhaW5W
YWx1ZS5oCmluZGV4IGI5ODBlOGVmYTllNGIxZDEwMzdiM2RiMmI4ZTkzYWIyNjZlMjdkMjQuLmQ3
NjQzZmEzMTRlMDFkM2Y5OGE0OTBiOWZkN2ExYzE0MTQ0MTAyYjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NMaW5lQm94Q29udGFpblZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0xpbmVCb3hDb250YWluVmFsdWUuaApAQCAtNTYsOCArNTYsOCBAQCBwcml2YXRl
OgogICAgIExpbmVCb3hDb250YWluIG1fdmFsdWU7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNU
UyhDU1NMaW5lQm94Q29udGFpblZhbHVlLCBpc0xpbmVCb3hDb250YWluVmFsdWUoKSkKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAotfSAvLyBuYW1lc3BhY2UKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQ1NTX1ZBTFVFKENTU0xpbmVCb3hDb250YWluVmFsdWUsIGlzTGluZUJveENvbnRhaW5WYWx1
ZSgpKQogCi0jZW5kaWYKKyNlbmRpZiAvLyBDU1NMaW5lQm94Q29udGFpblZhbHVlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5jcHAKaW5kZXggYzNkZTZkYzhmY2Q3MTcwNmNjOGUzY2Y0NGMxN2I2Mjlm
YTk4NTRjMi4uZDU5Njk5ZDc4ZDdiMjI3MDUwNjk0MDFjOGY1MTBmMWQxMzk5ZGZkMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTEzNDUsMTQgKzEzNDUsMTQgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlQ29sb3IoUkdCQTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wg
c3RyaWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBDU1NWYWx1ZSogdmFsdWUgPSBw
YXJzZXIubV9wYXJzZWRQcm9wZXJ0aWVzLmZpcnN0KCkudmFsdWUoKTsKLSAgICBpZiAoIXZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgaWYgKCFwcmlt
aXRpdmVWYWx1ZS0+aXNSR0JDb2xvcigpKQorICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRp
dmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGlmICgh
cHJpbWl0aXZlVmFsdWUuaXNSR0JDb2xvcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBjb2xvciA9IHByaW1pdGl2ZVZhbHVlLT5nZXRSR0JBMzJWYWx1ZSgpOworICAgIGNvbG9yID0g
cHJpbWl0aXZlVmFsdWUuZ2V0UkdCQTMyVmFsdWUoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApA
QCAtMzExOCw3ICszMTE4LDcgQEAgdm9pZCBDU1NQYXJzZXI6OmFkZEZpbGxWYWx1ZShSZWZQdHI8
Q1NTVmFsdWU+JiBsdmFsLCBQYXNzUmVmPENTU1ZhbHVlPiBydmFsKQogICAgIH0KIAogICAgIGlm
IChsdmFsLT5pc0Jhc2VWYWx1ZUxpc3QoKSkgewotICAgICAgICB0b0NTU1ZhbHVlTGlzdCgqbHZh
bCkuYXBwZW5kKFdURjo6bW92ZShydmFsKSk7CisgICAgICAgIGRvd25jYXN0PENTU1ZhbHVlTGlz
dD4oKmx2YWwpLmFwcGVuZChXVEY6Om1vdmUocnZhbCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0zNDI1LDggKzM0MjUsOCBAQCB2b2lkIENTU1BhcnNlcjo6YWRkQW5pbWF0aW9uVmFs
dWUoUmVmUHRyPENTU1ZhbHVlPiYgbHZhbCwgUGFzc1JlZjxDU1NWYWx1ZT4gcnZhbAogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGx2YWwtPmlzVmFsdWVMaXN0KCkpIHsKLSAgICAg
ICAgdG9DU1NWYWx1ZUxpc3QoKmx2YWwpLmFwcGVuZChXVEY6Om1vdmUocnZhbCkpOworICAgIGlm
IChpczxDU1NWYWx1ZUxpc3Q+KCpsdmFsKSkgeworICAgICAgICBkb3duY2FzdDxDU1NWYWx1ZUxp
c3Q+KCpsdmFsKS5hcHBlbmQoV1RGOjptb3ZlKHJ2YWwpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtNDE3MCwxMCArNDE3MCwxMCBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2UzVmFsdWVz
RmlsbFBvc2l0aW9uKENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0LCBSZWZQdHI8QwogICAg
ICAgICB2YWx1ZTEuc3dhcCh2YWx1ZTIpOwogCiAjaWZuZGVmIE5ERUJVRwotICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBmaXJzdCA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUxLmdldCgpKTsKLSAg
ICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZTIu
Z2V0KCkpOwotICAgIGlkZW50MSA9IGZpcnN0LT5nZXRQYWlyVmFsdWUoKS0+Zmlyc3QoKS0+Z2V0
VmFsdWVJRCgpOwotICAgIGlkZW50MiA9IHNlY29uZC0+Z2V0UGFpclZhbHVlKCktPmZpcnN0KCkt
PmdldFZhbHVlSUQoKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgZmlyc3QgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlMSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHNlY29u
ZCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUyKTsKKyAgICBpZGVudDEgPSBm
aXJzdC5nZXRQYWlyVmFsdWUoKS0+Zmlyc3QoKS0+Z2V0VmFsdWVJRCgpOworICAgIGlkZW50MiA9
IHNlY29uZC5nZXRQYWlyVmFsdWUoKS0+Zmlyc3QoKS0+Z2V0VmFsdWVJRCgpOwogICAgIEFTU0VS
VChpZGVudDEgPT0gQ1NTVmFsdWVMZWZ0IHx8IGlkZW50MSA9PSBDU1NWYWx1ZVJpZ2h0KTsKICAg
ICBBU1NFUlQoaWRlbnQyID09IENTU1ZhbHVlQm90dG9tIHx8IGlkZW50MiA9PSBDU1NWYWx1ZVRv
cCk7CiAjZW5kaWYKQEAgLTQyMzEsOCArNDIzMSw4IEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZUZp
bGxQb3NpdGlvbihDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVl
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHBhcnNlZFZhbHVlMSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUxLmdldCgpKTsKLSAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMiA9IHRvQ1NTUHJpbWl0aXZlVmFs
dWUodmFsdWUyLmdldCgpKTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZh
bHVlMSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZTEuZ2V0KCkpOworICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUyID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KHZhbHVlMi5nZXQoKSk7CiAKICAgICB2YWx1ZTEuY2xlYXIoKTsKICAgICB2YWx1
ZTIuY2xlYXIoKTsKQEAgLTQzMjksNyArNDMyOSw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZUZp
bGxSZXBlYXQoUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUxLCBSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1
CiAKICAgICAvLyBJZiBvbmx5IG9uZSB2YWx1ZSB3YXMgc3BlY2lmaWVkLCB2YWx1ZTIgaXMgdGhl
IHNhbWUgYXMgdmFsdWUxLgogICAgIG1faW1wbGljaXRTaG9ydGhhbmQgPSB0cnVlOwotICAgIHZh
bHVlMiA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh0b0NTU1ByaW1pdGl2
ZVZhbHVlKHZhbHVlMS5nZXQoKSktPmdldFZhbHVlSUQoKSk7CisgICAgdmFsdWUyID0gY3NzVmFs
dWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqdmFsdWUxKS5nZXRWYWx1ZUlEKCkpOwogfQogCiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlRmlsbFNpemUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wmIGFsbG93Q29t
bWEpCkBAIC00OTQ2LDcgKzQ5NDYsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6
OnBhcnNlR3JpZFBvc2l0aW9uKCkKIAogc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdyaWRN
aXNzaW5nR3JpZFBvc2l0aW9uVmFsdWUoQ1NTVmFsdWUqIHZhbHVlKQogewotICAgIGlmICh2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpICYmIHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpLT5pc1N0
cmluZygpKQorICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5pc1N0cmluZygpKQogICAgICAgICByZXR1cm4g
dmFsdWU7CiAKICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlQXV0byk7CkBAIC00OTk4LDcgKzQ5OTgsNyBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VHcmlkVGVtcGxhdGVSb3dzQW5kQXJlYXMoUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdGVtcGxhdGVD
b2x1bQogICAgICAgICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+dW5pdCA9PSBDU1NQYXJz
ZXJWYWx1ZTo6VmFsdWVMaXN0KSB7CiAgICAgICAgICAgICBpZiAodHJhaWxpbmdJZGVudFdhc0Fk
ZGVkKSB7CiAgICAgICAgICAgICAgICAgLy8gQSByb3cncyB0cmFpbGluZyBpZGVudCBtdXN0IGJl
IGNvbmNhdGVuYXRlZCB3aXRoIHRoZSBuZXh0IHJvdydzIGxlYWRpbmcgb25lLgotICAgICAgICAg
ICAgICAgIHBhcnNlR3JpZExpbmVOYW1lcygqbV92YWx1ZUxpc3QsICp0ZW1wbGF0ZVJvd3MsIHRv
Q1NTR3JpZExpbmVOYW1lc1ZhbHVlKHRlbXBsYXRlUm93cy0+aXRlbSh0ZW1wbGF0ZVJvd3MtPmxl
bmd0aCgpIC0gMSkpKTsKKyAgICAgICAgICAgICAgICBwYXJzZUdyaWRMaW5lTmFtZXMoKm1fdmFs
dWVMaXN0LCAqdGVtcGxhdGVSb3dzLCBkb3duY2FzdDxDU1NHcmlkTGluZU5hbWVzVmFsdWU+KHRl
bXBsYXRlUm93cy0+aXRlbSh0ZW1wbGF0ZVJvd3MtPmxlbmd0aCgpIC0gMSkpKTsKICAgICAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHBhcnNlR3JpZExpbmVOYW1lcygqbV92YWx1ZUxp
c3QsICp0ZW1wbGF0ZVJvd3MpOwogICAgICAgICB9CkBAIC01OTAwLDcgKzU5MDAsNyBAQCBQYXNz
UmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlQ2lyY2xlKENT
U1BhcnNlclZhbHVlTGlzdCogYQogICAgICAgICAvLyBhcmd1bWVudHMgZXhjZXB0IHRoZSBmaXJz
dCB0d28uIFRodXMsIGFuZCBpbmRleCBncmVhdGVyIHRoYW4gb25lCiAgICAgICAgIC8vIGluZGlj
YXRlcyBhbiBpbnZhbGlkIHByb2R1Y3Rpb24uCiAgICAgICAgIGlmIChhcmdzLT5jdXJyZW50SW5k
ZXgoKSA+IDEpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgICAgIGlmICghYXJncy0+Y3VycmVudEluZGV4KCkgJiYgYXJndW1lbnQtPmlk
ICE9IENTU1ZhbHVlQXQpIHsKICAgICAgICAgICAgIGlmIChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IHJhZGl1cyA9IHBhcnNlU2hhcGVSYWRpdXMoYXJndW1lbnQpKSB7CkBAIC01OTA4LDcgKzU5
MDgsNyBAQCBQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1No
YXBlQ2lyY2xlKENTU1BhcnNlclZhbHVlTGlzdCogYQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGFyZ3VtZW50LT5pZCA9PSBD
U1NWYWx1ZUF0ICYmIGFyZ3MtPm5leHQoKSkgewpAQCAtNTkxNiwxNCArNTkxNiwxNCBAQCBQYXNz
UmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlQ2lyY2xlKENT
U1BhcnNlclZhbHVlTGlzdCogYQogICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjZW50ZXJZ
OwogICAgICAgICAgICAgcGFyc2VGaWxsUG9zaXRpb24oYXJncywgY2VudGVyWCwgY2VudGVyWSk7
CiAgICAgICAgICAgICBpZiAoY2VudGVyWCAmJiBjZW50ZXJZICYmICFhcmdzLT5jdXJyZW50KCkp
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoY2VudGVyWC0+aXNQcmltaXRpdmVWYWx1ZSgpKTsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoY2VudGVyWS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAg
ICAgICAgICAgICAgICBzaGFwZS0+c2V0Q2VudGVyWCh0b0NTU1ByaW1pdGl2ZVZhbHVlKGNlbnRl
clguZ2V0KCkpKTsKLSAgICAgICAgICAgICAgICBzaGFwZS0+c2V0Q2VudGVyWSh0b0NTU1ByaW1p
dGl2ZVZhbHVlKGNlbnRlclkuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KCpjZW50ZXJYKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzPENT
U1ByaW1pdGl2ZVZhbHVlPigqY2VudGVyWSkpOworICAgICAgICAgICAgICAgIHNoYXBlLT5zZXRD
ZW50ZXJYKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihjZW50ZXJYLmdldCgpKSk7CisgICAg
ICAgICAgICAgICAgc2hhcGUtPnNldENlbnRlclkoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KGNlbnRlclkuZ2V0KCkpKTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCiAgICAgcmV0dXJuIHNoYXBlOwpAQCAtNTk0Niw3ICs1OTQ2LDcgQEAgUGFzc1JlZlB0cjxD
U1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUVsbGlwc2UoQ1NTUGFyc2Vy
VmFsdWVMaXN0KgogICAgICAgICAvLyBhcmd1bWVudHMgZXhjZXB0IHRoZSBmaXJzdCB0aHJlZS4g
VGh1cywgYW4gaW5kZXggZ3JlYXRlciB0aGFuIHR3bwogICAgICAgICAvLyBpbmRpY2F0ZXMgYW4g
aW52YWxpZCBwcm9kdWN0aW9uLgogICAgICAgICBpZiAoYXJncy0+Y3VycmVudEluZGV4KCkgPiAy
KQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgICAgICBpZiAoYXJncy0+Y3VycmVudEluZGV4KCkgPCAyICYmIGFyZ3VtZW50LT5pZCAhPSBD
U1NWYWx1ZUF0KSB7CiAgICAgICAgICAgICBpZiAoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBy
YWRpdXMgPSBwYXJzZVNoYXBlUmFkaXVzKGFyZ3VtZW50KSkgewpAQCAtNTk1NywyMiArNTk1Nywy
MiBAQCBQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBl
RWxsaXBzZShDU1NQYXJzZXJWYWx1ZUxpc3QqCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYXJndW1lbnQtPmlkICE9IENTU1Zh
bHVlQXQgfHwgIWFyZ3MtPm5leHQoKSkgLy8gZXhwZWN0aW5nIGVsbGlwc2UoLi4gYXQgPHBvc2l0
aW9uPikKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjZW50ZXJYOwogICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IGNlbnRlclk7CiAgICAgICAgIHBhcnNlRmlsbFBvc2l0aW9uKGFyZ3MsIGNlbnRlclgs
IGNlbnRlclkpOwogICAgICAgICBpZiAoIWNlbnRlclggfHwgIWNlbnRlclkgfHwgYXJncy0+Y3Vy
cmVudCgpKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgICAgICBBU1NFUlQoY2VudGVyWC0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAg
ICAgQVNTRVJUKGNlbnRlclktPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgIHNoYXBlLT5z
ZXRDZW50ZXJYKHRvQ1NTUHJpbWl0aXZlVmFsdWUoY2VudGVyWC5nZXQoKSkpOwotICAgICAgICBz
aGFwZS0+c2V0Q2VudGVyWSh0b0NTU1ByaW1pdGl2ZVZhbHVlKGNlbnRlclkuZ2V0KCkpKTsKKyAg
ICAgICAgQVNTRVJUKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqY2VudGVyWCkpOworICAgICAgICBB
U1NFUlQoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCpjZW50ZXJZKSk7CisgICAgICAgIHNoYXBlLT5z
ZXRDZW50ZXJYKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihjZW50ZXJYLmdldCgpKSk7Cisg
ICAgICAgIHNoYXBlLT5zZXRDZW50ZXJZKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihjZW50
ZXJZLmdldCgpKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHNoYXBlOwpAQCAtODExNSw3ICs4MTE1
LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclZh
bHVlTGlzdCogdmFsdWVMaXN0LCBSZWZQdHI8Q1MKICAgICAgICAgYSA9IGFyZ3MtPm5leHQoKTsK
ICAgICAgICAgaWYgKCFhIHx8IGEtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1C
RVIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHRvQ1NTUmFkaWFsR3JhZGll
bnRWYWx1ZShyZXN1bHQuZ2V0KCkpLT5zZXRGaXJzdFJhZGl1cyhjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUoYSkpOworICAgICAgICBkb3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigq
cmVzdWx0KS5zZXRGaXJzdFJhZGl1cyhjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYSkpOwog
CiAgICAgICAgIC8vIENvbW1hIGFmdGVyIHRoZSBmaXJzdCByYWRpdXMuCiAgICAgICAgIGEgPSBh
cmdzLT5uZXh0KCk7CkBAIC04MTUyLDcgKzgxNTIsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VE
ZXByZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZlB0cjxD
UwogICAgICAgICBhID0gYXJncy0+bmV4dCgpOwogICAgICAgICBpZiAoIWEgfHwgYS0+dW5pdCAh
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgdG9DU1NSYWRpYWxHcmFkaWVudFZhbHVlKHJlc3VsdC5nZXQoKSktPnNldFNl
Y29uZFJhZGl1cyhjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYSkpOworICAgICAgICBkb3du
Y2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigqcmVzdWx0KS5zZXRTZWNvbmRSYWRpdXMoY3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGEpKTsKICAgICB9CiAKICAgICAvLyBXZSBub3cgd2ls
bCBhY2NlcHQgYW55IG51bWJlciBvZiBzdG9wcyAoMCBvciBtb3JlKS4KQEAgLTgzMTIsMTQgKzgz
MTIsMTQgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KENT
U1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0LCBSZWYKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICBBU1NFUlQoIWNlbnRlclggfHwgY2VudGVyWC0+aXNQcmltaXRpdmVW
YWx1ZSgpKTsKLSAgICBBU1NFUlQoIWNlbnRlclkgfHwgY2VudGVyWS0+aXNQcmltaXRpdmVWYWx1
ZSgpKTsKKyAgICBBU1NFUlQoIWNlbnRlclggfHwgaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCpjZW50
ZXJYKSk7CisgICAgQVNTRVJUKCFjZW50ZXJZIHx8IGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqY2Vu
dGVyWSkpOwogCi0gICAgcmVzdWx0LT5zZXRGaXJzdFgodG9DU1NQcmltaXRpdmVWYWx1ZShjZW50
ZXJYLmdldCgpKSk7Ci0gICAgcmVzdWx0LT5zZXRTZWNvbmRYKHRvQ1NTUHJpbWl0aXZlVmFsdWUo
Y2VudGVyWC5nZXQoKSkpOworICAgIHJlc3VsdC0+c2V0Rmlyc3RYKGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPihjZW50ZXJYLmdldCgpKSk7CisgICAgcmVzdWx0LT5zZXRTZWNvbmRYKGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPihjZW50ZXJYLmdldCgpKSk7CiAgICAgLy8gQ1NTMyByYWRp
YWwgZ3JhZGllbnRzIGFsd2F5cyBzaGFyZSB0aGUgc2FtZSBzdGFydCBhbmQgZW5kIHBvaW50Lgot
ICAgIHJlc3VsdC0+c2V0Rmlyc3RZKHRvQ1NTUHJpbWl0aXZlVmFsdWUoY2VudGVyWS5nZXQoKSkp
OwotICAgIHJlc3VsdC0+c2V0U2Vjb25kWSh0b0NTU1ByaW1pdGl2ZVZhbHVlKGNlbnRlclkuZ2V0
KCkpKTsKKyAgICByZXN1bHQtPnNldEZpcnN0WShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
Y2VudGVyWS5nZXQoKSkpOworICAgIHJlc3VsdC0+c2V0U2Vjb25kWShkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oY2VudGVyWS5nZXQoKSkpOwogCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBzaGFwZVZhbHVlOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2l6ZVZhbHVl
OwpAQCAtODU3OCwxMyArODU3OCwxMyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VSYWRpYWxHcmFk
aWVudChDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbAogICAgICAg
ICBpZiAoIWEpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgQVNTRVJUKGNl
bnRlclgtPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgIEFTU0VSVChjZW50ZXJZLT5pc1By
aW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICByZXN1bHQtPnNldEZpcnN0WCh0b0NTU1ByaW1pdGl2
ZVZhbHVlKGNlbnRlclguZ2V0KCkpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFkodG9DU1NQ
cmltaXRpdmVWYWx1ZShjZW50ZXJZLmdldCgpKSk7CisgICAgICAgIEFTU0VSVChpczxDU1NQcmlt
aXRpdmVWYWx1ZT4oKmNlbnRlclgpKTsKKyAgICAgICAgQVNTRVJUKGlzPENTU1ByaW1pdGl2ZVZh
bHVlPigqY2VudGVyWSkpOworICAgICAgICByZXN1bHQtPnNldEZpcnN0WChkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oY2VudGVyWC5nZXQoKSkpOworICAgICAgICByZXN1bHQtPnNldEZpcnN0
WShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY2VudGVyWS5nZXQoKSkpOwogICAgICAgICAv
LyBSaWdodCBub3csIENTUyByYWRpYWwgZ3JhZGllbnRzIGhhdmUgdGhlIHNhbWUgc3RhcnQgYW5k
IGVuZCBjZW50ZXJzLgotICAgICAgICByZXN1bHQtPnNldFNlY29uZFgodG9DU1NQcmltaXRpdmVW
YWx1ZShjZW50ZXJYLmdldCgpKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U2Vjb25kWSh0b0NTU1By
aW1pdGl2ZVZhbHVlKGNlbnRlclkuZ2V0KCkpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTZWNvbmRY
KGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihjZW50ZXJYLmdldCgpKSk7CisgICAgICAgIHJl
c3VsdC0+c2V0U2Vjb25kWShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY2VudGVyWS5nZXQo
KSkpOwogICAgIH0KIAogICAgIGlmIChzaGFwZVZhbHVlIHx8IHNpemVWYWx1ZSB8fCBob3Jpem9u
dGFsU2l6ZSB8fCBjZW50ZXJYIHx8IGNlbnRlclkpCkBAIC0xMTczNyw3ICsxMTczNyw3IEBAIFBh
c3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gQ1NTUGFyc2VyOjpjcmVhdGVGb250RmFjZVJ1bGUoKQog
ICAgICAgICBDU1NQcm9wZXJ0eSYgcHJvcGVydHkgPSBtX3BhcnNlZFByb3BlcnRpZXNbaV07CiAg
ICAgICAgIGlmIChwcm9wZXJ0eS5pZCgpID09IENTU1Byb3BlcnR5Rm9udFZhcmlhbnQgJiYgcHJv
cGVydHkudmFsdWUoKS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcHJvcGVydHku
d3JhcFZhbHVlSW5Db21tYVNlcGFyYXRlZExpc3QoKTsKLSAgICAgICAgZWxzZSBpZiAocHJvcGVy
dHkuaWQoKSA9PSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHkgJiYgKCFwcm9wZXJ0eS52YWx1ZSgpLT5p
c1ZhbHVlTGlzdCgpIHx8IHRvQ1NTVmFsdWVMaXN0KHByb3BlcnR5LnZhbHVlKCkpLT5sZW5ndGgo
KSAhPSAxKSkgeworICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eS5pZCgpID09IENTU1Byb3BlcnR5
Rm9udEZhbWlseSAmJiAoIWlzPENTU1ZhbHVlTGlzdD4oKnByb3BlcnR5LnZhbHVlKCkpIHx8IGRv
d25jYXN0PENTU1ZhbHVlTGlzdD4oKnByb3BlcnR5LnZhbHVlKCkpLmxlbmd0aCgpICE9IDEpKSB7
CiAgICAgICAgICAgICAvLyBVbmxpa2UgZm9udC1mYW1pbHkgcHJvcGVydHksIGZvbnQtZmFtaWx5
IGRlc2NyaXB0b3IgaW4gQGZvbnQtZmFjZSBydWxlCiAgICAgICAgICAgICAvLyBoYXMgdG8gYmUg
YSB2YWx1ZSBsaXN0IHdpdGggZXhhY3RseSBvbmUgZmFtaWx5IG5hbWUuIEl0IGNhbm5vdCBoYXZl
IGEKICAgICAgICAgICAgIC8vIGhhdmUgJ2luaXRpYWwnIHZhbHVlIGFuZCBjYW5ub3QgJ2luaGVy
aXQnIGZyb20gcGFyZW50LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1p
dGl2ZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAppbmRl
eCBhMTNjMTUzM2E0MWYzNjRhZDQ4OTg4NmQzYjQ3YTE2YmJjYWIxNGU5Li4yNDQ2MDkzYjI5ZmEw
MjFiYWZlMWJmMmQyZjVkZTIzOGNmZWQ2YWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0
aXZlVmFsdWUuaApAQCAtNDIxLDggKzQyMSw4IEBAIHByaXZhdGU6CiAgICAgfSBtX3ZhbHVlOwog
fTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTUHJpbWl0aXZlVmFsdWUsIGlzUHJpbWl0aXZl
VmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0NTU19WQUxVRShDU1NQcmltaXRpdmVWYWx1ZSwgaXNQcmltaXRpdmVWYWx1ZSgpKQorCiAj
ZW5kaWYgLy8gQ1NTUHJpbWl0aXZlVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1JlZmxlY3RWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1JlZmxlY3RWYWx1
ZS5oCmluZGV4IDhkMGZlNjA1OWM5YjIxMTg5NGExMjhiOWRhZDFlODU0MWNmMGVmMTEuLjcyZTM2
NmRmMWVkYTk1OTViZDdmNWZlNTNjMWI5ZjYwYWZmYTVjODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UmVmbGVjdFZhbHVlLmgKQEAgLTY3LDggKzY3LDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Q1NT
VmFsdWU+IG1fbWFzazsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU1JlZmxlY3RWYWx1
ZSwgaXNSZWZsZWN0VmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NSZWZsZWN0VmFsdWUsIGlzUmVmbGVjdFZhbHVl
KCkpCisKICNlbmRpZiAvLyBDU1NSZWZsZWN0VmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1NoYWRvd1ZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2hhZG93
VmFsdWUuaAppbmRleCA2MTc1ZGY4MjZmYTkxMmJkMDg2NDEyYmNjZmJlMTNhNWY1YjFkMjkwLi4w
MDZjNjI5MmYxNmM0YjExNDQ5NDNjMzE0YTg4OGYyYjdlODc5NmZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU2hhZG93VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU2hhZG93VmFsdWUuaApAQCAtNjIsOCArNjIsOCBAQCBwcml2YXRlOgogICAgICAgICBQYXNz
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb2xvcik7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9D
QVNUUyhDU1NTaGFkb3dWYWx1ZSwgaXNTaGFkb3dWYWx1ZSgpKQorfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCi19IC8vIG5hbWVzcGFjZQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUo
Q1NTU2hhZG93VmFsdWUsIGlzU2hhZG93VmFsdWUoKSkKIAotI2VuZGlmCisjZW5kaWYgLy8gQ1NT
U2hhZG93VmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RpbWluZ0Z1
bmN0aW9uVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVl
LmgKaW5kZXggNjZjMmMzYjI1NmYwOGMxNzA4NjM1MTNhZGJlZjhkYjI4ZTliYTAwMy4uYzM5YWIw
Y2ZmMjBkYjVhZDg5OTRiNzY0NzY3ZWQ4YzVjZGU1ZGYxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oCkBAIC02Myw4ICs2Myw2IEBAIHByaXZhdGU6CiAg
ICAgZG91YmxlIG1feTI7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NDdWJpY0Jlemll
clRpbWluZ0Z1bmN0aW9uVmFsdWUsIGlzQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlKCkp
Ci0KIGNsYXNzIENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZSB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWY8Q1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVl
PiBjcmVhdGUoaW50IHN0ZXBzLCBib29sIHN0ZXBBdFN0YXJ0KQpAQCAtOTEsOCArODksOSBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9zdGVwQXRTdGFydDsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NB
U1RTKENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZSwgaXNTdGVwc1RpbWluZ0Z1bmN0aW9uVmFs
dWUoKSkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotfSAvLyBuYW1lc3BhY2UKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1
ZSwgaXNDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUoKSkKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQ1NTX1ZBTFVFKENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZSwgaXNTdGVwc1RpbWlu
Z0Z1bmN0aW9uVmFsdWUoKSkKIAotI2VuZGlmCisjZW5kaWYgLy8gQ1NTVGltaW5nRnVuY3Rpb25W
YWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKaW5kZXggNTEzYzRkOWI3Mzli
NTc0OGE4ZjM4ODA5MzFkYmU3MzA4MDFkYTkxZC4uMGExODVmNGQ2YjYzYTY3MGE2ZWVmMmZhY2Fk
NDhhOTY0NGY4ZWQyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVN
YXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcApAQCAtNzQs
MTAgKzc0LDEwIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbEF0dGFjaG1lbnQoQ1NTUHJv
cGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3dpdGNo
ICh0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgc3dpdGNo
IChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCkpIHsKICAg
ICBjYXNlIENTU1ZhbHVlRml4ZWQ6CiAgICAgICAgIGxheWVyLT5zZXRBdHRhY2htZW50KEZpeGVk
QmFja2dyb3VuZEF0dGFjaG1lbnQpOwogICAgICAgICBicmVhazsKQEAgLTk5LDExICs5OSwxMSBA
QCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxDbGlwKENTU1Byb3BlcnR5SUQsIEZpbGxMYXll
ciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIGxheWVy
LT5zZXRDbGlwKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1p
dGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgbGF5
ZXItPnNldENsaXAocHJpbWl0aXZlVmFsdWUpOwogfQogCiB2b2lkIENTU1RvU3R5bGVNYXA6Om1h
cEZpbGxDb21wb3NpdGUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUq
IHZhbHVlKQpAQCAtMTEzLDExICsxMTMsMTEgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxs
Q29tcG9zaXRlKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKgogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0
aXZlVmFsdWUodmFsdWUpOwotICAgIGxheWVyLT5zZXRDb21wb3NpdGUoKnByaW1pdGl2ZVZhbHVl
KTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBsYXllci0+c2V0Q29tcG9zaXRlKHByaW1pdGl2
ZVZhbHVlKTsKIH0KIAogdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsQmxlbmRNb2RlKENTU1By
b3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKQEAgLTEyNywxMSAr
MTI3LDExIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbEJsZW5kTW9kZShDU1NQcm9wZXJ0
eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSoKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAg
ICBsYXllci0+c2V0QmxlbmRNb2RlKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgQ1NTUHJpbWl0aXZl
VmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSk7CisgICAgbGF5ZXItPnNldEJsZW5kTW9kZShwcmltaXRpdmVWYWx1ZSk7CiB9CiAKIHZvaWQg
Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbE9yaWdpbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxh
eWVyLCBDU1NWYWx1ZSogdmFsdWUpCkBAIC0xNDEsMTEgKzE0MSwxMSBAQCB2b2lkIENTU1RvU3R5
bGVNYXA6Om1hcEZpbGxPcmlnaW4oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NT
VmFsdWUqIHZhbAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIGxheWVyLT5zZXRPcmlnaW4oKnBy
aW1pdGl2ZVZhbHVlKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBsYXllci0+c2V0T3JpZ2lu
KHByaW1pdGl2ZVZhbHVlKTsKIH0KIAogCkBAIC0xNjYsMTEgKzE2NiwxMSBAQCB2b2lkIENTU1Rv
U3R5bGVNYXA6Om1hcEZpbGxSZXBlYXRYKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIs
IENTU1ZhbHVlKiB2YQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+
aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIGxheWVyLT5zZXRSZXBlYXRY
KCpwcmltaXRpdmVWYWx1ZSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgbGF5ZXItPnNldFJl
cGVhdFgocHJpbWl0aXZlVmFsdWUpOwogfQogCiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxS
ZXBlYXRZKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
QEAgLTE4MCwzMSArMTgwLDMxIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFJlcGVhdFko
Q1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAg
aWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSh2YWx1ZSk7Ci0gICAgbGF5ZXItPnNldFJlcGVhdFkoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICBD
U1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKTsKKyAgICBsYXllci0+c2V0UmVwZWF0WShwcmltaXRpdmVWYWx1ZSk7CiB9
CiAKIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFNpemUoQ1NTUHJvcGVydHlJRCwgRmlsbExh
eWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogewotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSkgeworICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsK
ICAgICAgICAgbGF5ZXItPnNldFNpemVUeXBlKFNpemVOb25lKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJp
bWl0aXZlVmFsdWUodmFsdWUpOwotICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgp
ID09IENTU1ZhbHVlQ29udGFpbikKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFs
dWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBpZiAocHJpbWl0
aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ29udGFpbikKICAgICAgICAgbGF5ZXIt
PnNldFNpemVUeXBlKENvbnRhaW4pOwotICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRW
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVDb3ZlcikKKyAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5n
ZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVDb3ZlcikKICAgICAgICAgbGF5ZXItPnNldFNpemVUeXBl
KENvdmVyKTsKICAgICBlbHNlCiAgICAgICAgIGxheWVyLT5zZXRTaXplVHlwZShTaXplTGVuZ3Ro
KTsKIAogICAgIExlbmd0aFNpemUgYiA9IEZpbGxMYXllcjo6aW5pdGlhbEZpbGxTaXplTGVuZ3Ro
KGxheWVyLT50eXBlKCkpOwogCi0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8IHBy
aW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVDb250YWluIHx8IHByaW1pdGl2
ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVDb3ZlcikgeworICAgIGlmICh2YWx1ZS0+
aXNJbml0aWFsVmFsdWUoKSB8fCBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFs
dWVDb250YWluIHx8IHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUNvdmVy
KSB7CiAgICAgICAgIGxheWVyLT5zZXRTaXplTGVuZ3RoKGIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMjEyLDEzICsyMTIsMTMgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsU2l6
ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUKICAgICBM
ZW5ndGggZmlyc3RMZW5ndGg7CiAgICAgTGVuZ3RoIHNlY29uZExlbmd0aDsKIAotICAgIGlmIChQ
YWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1ZSgpKSB7CisgICAgaWYgKFBh
aXIqIHBhaXIgPSBwcmltaXRpdmVWYWx1ZS5nZXRQYWlyVmFsdWUoKSkgewogICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogZmlyc3QgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHBh
aXItPmZpcnN0KCkpOwogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihwYWlyLT5zZWNvbmQoKSk7CiAgICAgICAgIGZpcnN0
TGVuZ3RoID0gZmlyc3QtPmNvbnZlcnRUb0xlbmd0aDxBbnlDb252ZXJzaW9uPihtX3Jlc29sdmVy
LT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CiAgICAgICAgIHNlY29uZExl
bmd0aCA9IHNlY29uZC0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KG1fcmVzb2x2ZXIt
PnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKICAgICB9IGVsc2UgewotICAg
ICAgICBmaXJzdExlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8QW55Q29u
dmVyc2lvbj4obV9yZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkp
OworICAgICAgICBmaXJzdExlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLmNvbnZlcnRUb0xlbmd0aDxB
bnlDb252ZXJzaW9uPihtX3Jlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoKSk7CiAgICAgICAgIHNlY29uZExlbmd0aCA9IExlbmd0aCgpOwogICAgIH0KIApAQCAtMjM3
LDEwICsyMzcsMTAgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsWFBvc2l0aW9uKENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlz
PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVl
KTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIFBhaXIqIHBhaXIgPSBwcmltaXRpdmVWYWx1ZS0+
Z2V0UGFpclZhbHVlKCk7CiAgICAgaWYgKHBhaXIpIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChw
cm9wZXJ0eUlELCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWCB8
fCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCk7CkBAIC0yNjks
MTAgKzI2OSwxMCBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxZUG9zaXRpb24oQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLAogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUp
OworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgUGFpciogcGFpciA9IHByaW1pdGl2ZVZhbHVlLT5n
ZXRQYWlyVmFsdWUoKTsKICAgICBpZiAocGFpcikgewogICAgICAgICBBU1NFUlRfVU5VU0VEKHBy
b3BlcnR5SUQsIHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZIHx8
IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25ZKTsKQEAgLTMwMiwx
MSArMzAyLDExIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbE1hc2tTb3VyY2VUeXBlKENT
U1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7
Ci0gICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgQ1NTUHJp
bWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSk7CisgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAg
ICBjYXNlIENTU1ZhbHVlQWxwaGE6CiAgICAgICAgIHR5cGUgPSBFTWFza1NvdXJjZVR5cGU6Ok1h
c2tBbHBoYTsKICAgICAgICAgYnJlYWs7CkBAIC0zMjksMTEgKzMyOSwxMSBAQCB2b2lkIENTU1Rv
U3R5bGVNYXA6Om1hcEFuaW1hdGlvbkRlbGF5KEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgYW5pbWF0aW9uLT5zZXREZWxheShw
cmltaXRpdmVWYWx1ZS0+Y29tcHV0ZVRpbWU8ZG91YmxlLCBDU1NQcmltaXRpdmVWYWx1ZTo6U2Vj
b25kcz4oKSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgYW5pbWF0aW9uLT5zZXREZWxheShw
cmltaXRpdmVWYWx1ZS5jb21wdXRlVGltZTxkb3VibGUsIENTU1ByaW1pdGl2ZVZhbHVlOjpTZWNv
bmRzPigpKTsKIH0KIAogdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25EaXJlY3Rpb24o
QW5pbWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQpAQCAtMzQzLDExICszNDMsMTEgQEAg
dm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25EaXJlY3Rpb24oQW5pbWF0aW9uKiBsYXll
ciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmlt
aXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIHN3aXRjaCAocHJp
bWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSkgeworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmlt
aXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIHN3
aXRjaCAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpKSB7CiAgICAgY2FzZSBDU1NWYWx1ZU5v
cm1hbDoKICAgICAgICAgbGF5ZXItPnNldERpcmVjdGlvbihBbmltYXRpb246OkFuaW1hdGlvbkRp
cmVjdGlvbk5vcm1hbCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzcyLDExICszNzIsMTEgQEAgdm9p
ZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25EdXJhdGlvbihBbmltYXRpb24qIGFuaW1hdGlv
biwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmlt
aXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIGFuaW1hdGlvbi0+
c2V0RHVyYXRpb24ocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGRvdWJsZSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OlNlY29uZHM+KCkpOworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGFuaW1hdGlv
bi0+c2V0RHVyYXRpb24ocHJpbWl0aXZlVmFsdWUuY29tcHV0ZVRpbWU8ZG91YmxlLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6U2Vjb25kcz4oKSk7CiB9CiAKIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5p
bWF0aW9uRmlsbE1vZGUoQW5pbWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQpAQCAtMzg2
LDExICszODYsMTEgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25GaWxsTW9kZShB
bmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0g
ICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgQ1NTUHJpbWl0
aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSk7CisgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAgICBj
YXNlIENTU1ZhbHVlTm9uZToKICAgICAgICAgbGF5ZXItPnNldEZpbGxNb2RlKEFuaW1hdGlvbkZp
bGxNb2RlTm9uZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDE1LDE0ICs0MTUsMTQgQEAgdm9pZCBD
U1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25JdGVyYXRpb25Db3VudChBbmltYXRpb24qIGFuaW1h
dGlvbiwgQ1NTVmFsdWUqIHYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUluZmluaXRlKQorICAgIENTU1ByaW1pdGl2
ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVJbmZp
bml0ZSkKICAgICAgICAgYW5pbWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudChBbmltYXRpb246Okl0
ZXJhdGlvbkNvdW50SW5maW5pdGUpOwogICAgIGVsc2UKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRJ
dGVyYXRpb25Db3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKTsKKyAgICAgICAg
YW5pbWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudChwcmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVl
KCkpOwogfQogCiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbk5hbWUoQW5pbWF0aW9u
KiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQpAQCAtNDMyLDE0ICs0MzIsMTQgQEAgdm9pZCBDU1NU
b1N0eWxlTWFwOjptYXBBbmltYXRpb25OYW1lKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZh
bHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2
ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgIGxheWVy
LT5zZXRJc05vbmVBbmltYXRpb24odHJ1ZSk7CiAgICAgZWxzZQotICAgICAgICBsYXllci0+c2V0
TmFtZShwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7CisgICAgICAgIGxheWVyLT5z
ZXROYW1lKHByaW1pdGl2ZVZhbHVlLmdldFN0cmluZ1ZhbHVlKCkpOwogfQogCiB2b2lkIENTU1Rv
U3R5bGVNYXA6Om1hcEFuaW1hdGlvblBsYXlTdGF0ZShBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1
ZSogdmFsdWUpCkBAIC00NDksMTEgKzQ0OSwxMSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFu
aW1hdGlvblBsYXlTdGF0ZShBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
CisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRp
dmVWYWx1ZSh2YWx1ZSk7Ci0gICAgRUFuaW1QbGF5U3RhdGUgcGxheVN0YXRlID0gKHByaW1pdGl2
ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVQYXVzZWQpID8gQW5pbVBsYXlTdGF0ZVBh
dXNlZCA6IEFuaW1QbGF5U3RhdGVQbGF5aW5nOworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmlt
aXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIEVB
bmltUGxheVN0YXRlIHBsYXlTdGF0ZSA9IChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVQYXVzZWQpID8gQW5pbVBsYXlTdGF0ZVBhdXNlZCA6IEFuaW1QbGF5U3RhdGVQbGF5
aW5nOwogICAgIGxheWVyLT5zZXRQbGF5U3RhdGUocGxheVN0YXRlKTsKIH0KIApAQCAtNDY1LDE5
ICs0NjUsMTkgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25Qcm9wZXJ0eShBbmlt
YXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwot
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQWxsKSB7Cisg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9
PSBDU1NWYWx1ZUFsbCkgewogICAgICAgICBhbmltYXRpb24tPnNldEFuaW1hdGlvbk1vZGUoQW5p
bWF0aW9uOjpBbmltYXRlQWxsKTsKICAgICAgICAgYW5pbWF0aW9uLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUludmFsaWQpOwotICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVl
SUQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKKyAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmdl
dFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKICAgICAgICAgYW5pbWF0aW9uLT5zZXRBbmlt
YXRpb25Nb2RlKEFuaW1hdGlvbjo6QW5pbWF0ZU5vbmUpOwogICAgICAgICBhbmltYXRpb24tPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5SW52YWxpZCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYW5p
bWF0aW9uLT5zZXRBbmltYXRpb25Nb2RlKEFuaW1hdGlvbjo6QW5pbWF0ZVNpbmdsZVByb3BlcnR5
KTsKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRQcm9wZXJ0eShwcmltaXRpdmVWYWx1ZS0+Z2V0UHJv
cGVydHlJRCgpKTsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRQcm9wZXJ0eShwcmltaXRpdmVWYWx1
ZS5nZXRQcm9wZXJ0eUlEKCkpOwogICAgIH0KIH0KIApAQCAtNDg4LDkgKzQ4OCw5IEBAIHZvaWQg
Q1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uKiBhbmlt
YXRpb24sIENTU1ZhbHVlKiB2CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAodmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICAgICAgc3dpdGNo
IChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgaWYgKGlzPENTU1ByaW1pdGl2
ZVZhbHVlPigqdmFsdWUpKSB7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgICAgICBzd2l0
Y2ggKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSkgewogICAgICAgICBjYXNlIENTU1ZhbHVl
TGluZWFyOgogICAgICAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihMaW5lYXJU
aW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC01MTgsMjMg
KzUxOCwyMyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9u
KEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdgogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKHZhbHVlLT5pc0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSgpKSB7
Ci0gICAgICAgIENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSogY3ViaWNUaW1pbmdG
dW5jdGlvbiA9IHRvQ1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlKHZhbHVlKTsKLSAg
ICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0
aW9uOjpjcmVhdGUoY3ViaWNUaW1pbmdGdW5jdGlvbi0+eDEoKSwgY3ViaWNUaW1pbmdGdW5jdGlv
bi0+eTEoKSwgY3ViaWNUaW1pbmdGdW5jdGlvbi0+eDIoKSwgY3ViaWNUaW1pbmdGdW5jdGlvbi0+
eTIoKSkpOwotICAgIH0gZWxzZSBpZiAodmFsdWUtPmlzU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVl
KCkpIHsKLSAgICAgICAgQ1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlKiBzdGVwc1RpbWluZ0Z1
bmN0aW9uID0gdG9DU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWUodmFsdWUpOwotICAgICAgICBh
bmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFN0ZXBzVGltaW5nRnVuY3Rpb246OmNyZWF0ZShz
dGVwc1RpbWluZ0Z1bmN0aW9uLT5udW1iZXJPZlN0ZXBzKCksIHN0ZXBzVGltaW5nRnVuY3Rpb24t
PnN0ZXBBdFN0YXJ0KCkpKTsKKyAgICBpZiAoaXM8Q1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
blZhbHVlPigqdmFsdWUpKSB7CisgICAgICAgIENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25W
YWx1ZSYgY3ViaWNUaW1pbmdGdW5jdGlvbiA9IGRvd25jYXN0PENTU0N1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb25WYWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5j
dGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoY3ViaWNUaW1pbmdGdW5jdGlv
bi54MSgpLCBjdWJpY1RpbWluZ0Z1bmN0aW9uLnkxKCksIGN1YmljVGltaW5nRnVuY3Rpb24ueDIo
KSwgY3ViaWNUaW1pbmdGdW5jdGlvbi55MigpKSk7CisgICAgfSBlbHNlIGlmIChpczxDU1NTdGVw
c1RpbWluZ0Z1bmN0aW9uVmFsdWU+KCp2YWx1ZSkpIHsKKyAgICAgICAgQ1NTU3RlcHNUaW1pbmdG
dW5jdGlvblZhbHVlJiBzdGVwc1RpbWluZ0Z1bmN0aW9uID0gZG93bmNhc3Q8Q1NTU3RlcHNUaW1p
bmdGdW5jdGlvblZhbHVlPigqdmFsdWUpOworICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1
bmN0aW9uKFN0ZXBzVGltaW5nRnVuY3Rpb246OmNyZWF0ZShzdGVwc1RpbWluZ0Z1bmN0aW9uLm51
bWJlck9mU3RlcHMoKSwgc3RlcHNUaW1pbmdGdW5jdGlvbi5zdGVwQXRTdGFydCgpKSk7CiAgICAg
fQogfQogCiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQogewog
ICAgIC8vIElmIHdlJ3JlIG5vdCBhIHZhbHVlIGxpc3QsIHRoZW4gd2UgYXJlICJub25lIiBhbmQg
ZG9uJ3QgbmVlZCB0byBhbHRlciB0aGUgZW1wdHkgaW1hZ2UgYXQgYWxsLgotICAgIGlmICghdmFs
dWUgfHwgIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQorICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0Pih2
YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFJldHJpZXZlIHRoZSBib3JkZXIgaW1h
Z2UgdmFsdWUuCi0gICAgQ1NTVmFsdWVMaXN0KiBib3JkZXJJbWFnZSA9IHRvQ1NTVmFsdWVMaXN0
KHZhbHVlKTsKKyAgICBDU1NWYWx1ZUxpc3QmIGJvcmRlckltYWdlID0gZG93bmNhc3Q8Q1NTVmFs
dWVMaXN0PigqdmFsdWUpOwogCiAgICAgLy8gU2V0IHRoZSBpbWFnZSAodGhpcyBraWNrcyBvZmYg
dGhlIGxvYWQpLgogICAgIENTU1Byb3BlcnR5SUQgaW1hZ2VQcm9wZXJ0eTsKQEAgLTU0NSw4ICs1
NDUsOCBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSwgTgogICAgIGVsc2UKICAgICAgICAgaW1hZ2VQ
cm9wZXJ0eSA9IHByb3BlcnR5OwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBib3Jk
ZXJJbWFnZS0+bGVuZ3RoKCkgOyArK2kpIHsKLSAgICAgICAgQ1NTVmFsdWUqIGN1cnJlbnQgPSBi
b3JkZXJJbWFnZS0+aXRlbShpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IGJvcmRl
ckltYWdlLmxlbmd0aCgpIDsgKytpKSB7CisgICAgICAgIENTU1ZhbHVlKiBjdXJyZW50ID0gYm9y
ZGVySW1hZ2UuaXRlbShpKTsKIAogICAgICAgICBpZiAoY3VycmVudC0+aXNJbWFnZVZhbHVlKCkg
fHwgY3VycmVudC0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkKICNpZiBFTkFCTEUoQ1NTX0lNQUdF
X1NFVCkKQEAgLTU1NiwxOSArNTU2LDE5IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBp
ZWNlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlLCBOCiAgICAg
ICAgICAgICBpbWFnZS5zZXRJbWFnZShzdHlsZUltYWdlKGltYWdlUHJvcGVydHksIGN1cnJlbnQp
KTsKICAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+aXNCb3JkZXJJbWFnZVNsaWNlVmFsdWUoKSkK
ICAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlU2xpY2UoY3VycmVudCwgaW1hZ2UpOwotICAg
ICAgICBlbHNlIGlmIChjdXJyZW50LT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAgICAgICAgICBDU1NW
YWx1ZUxpc3QqIHNsYXNoTGlzdCA9IHRvQ1NTVmFsdWVMaXN0KGN1cnJlbnQpOworICAgICAgICBl
bHNlIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCpjdXJyZW50KSkgeworICAgICAgICAgICAgQ1NTVmFs
dWVMaXN0JiBzbGFzaExpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpjdXJyZW50KTsKICAg
ICAgICAgICAgIC8vIE1hcCBpbiB0aGUgaW1hZ2Ugc2xpY2VzLgotICAgICAgICAgICAgaWYgKHNs
YXNoTGlzdC0+aXRlbSgwKSAmJiBzbGFzaExpc3QtPml0ZW0oMCktPmlzQm9yZGVySW1hZ2VTbGlj
ZVZhbHVlKCkpCi0gICAgICAgICAgICAgICAgbWFwTmluZVBpZWNlSW1hZ2VTbGljZShzbGFzaExp
c3QtPml0ZW0oMCksIGltYWdlKTsKKyAgICAgICAgICAgIGlmIChzbGFzaExpc3QuaXRlbSgwKSAm
JiBzbGFzaExpc3QuaXRlbSgwKS0+aXNCb3JkZXJJbWFnZVNsaWNlVmFsdWUoKSkKKyAgICAgICAg
ICAgICAgICBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKHNsYXNoTGlzdC5pdGVtKDApLCBpbWFnZSk7
CiAKICAgICAgICAgICAgIC8vIE1hcCBpbiB0aGUgYm9yZGVyIHNsaWNlcy4KLSAgICAgICAgICAg
IGlmIChzbGFzaExpc3QtPml0ZW0oMSkpCi0gICAgICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVy
U2xpY2VzKG1hcE5pbmVQaWVjZUltYWdlUXVhZChzbGFzaExpc3QtPml0ZW0oMSkpKTsKKyAgICAg
ICAgICAgIGlmIChzbGFzaExpc3QuaXRlbSgxKSkKKyAgICAgICAgICAgICAgICBpbWFnZS5zZXRC
b3JkZXJTbGljZXMobWFwTmluZVBpZWNlSW1hZ2VRdWFkKHNsYXNoTGlzdC5pdGVtKDEpKSk7CiAK
ICAgICAgICAgICAgIC8vIE1hcCBpbiB0aGUgb3V0c2V0LgotICAgICAgICAgICAgaWYgKHNsYXNo
TGlzdC0+aXRlbSgyKSkKLSAgICAgICAgICAgICAgICBpbWFnZS5zZXRPdXRzZXQobWFwTmluZVBp
ZWNlSW1hZ2VRdWFkKHNsYXNoTGlzdC0+aXRlbSgyKSkpOworICAgICAgICAgICAgaWYgKHNsYXNo
TGlzdC5pdGVtKDIpKQorICAgICAgICAgICAgICAgIGltYWdlLnNldE91dHNldChtYXBOaW5lUGll
Y2VJbWFnZVF1YWQoc2xhc2hMaXN0Lml0ZW0oMikpKTsKICAgICAgICAgfSBlbHNlIGlmIChjdXJy
ZW50LT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAgICAgIC8vIFNldCB0aGUgYXBwcm9w
cmlhdGUgcnVsZXMgZm9yIHN0cmV0Y2gvcm91bmQvcmVwZWF0IG9mIHRoZSBzbGljZXMuCiAgICAg
ICAgICAgICBtYXBOaW5lUGllY2VJbWFnZVJlcGVhdChjdXJyZW50LCBpbWFnZSk7CkBAIC01OTIs
MTUgKzU5MiwxNSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlKENTU1By
b3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSwgTgogCiB2b2lkIENTU1RvU3R5bGVN
YXA6Om1hcE5pbmVQaWVjZUltYWdlU2xpY2UoQ1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFn
ZSYgaW1hZ2UpCiB7Ci0gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUtPmlzQm9yZGVySW1hZ2VTbGlj
ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+KHZhbHVlKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gUmV0cmlldmUgdGhlIGJvcmRlciBpbWFnZSB2YWx1
ZS4KLSAgICBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUqIGJvcmRlckltYWdlU2xpY2UgPSB0b0NT
U0JvcmRlckltYWdlU2xpY2VWYWx1ZSh2YWx1ZSk7CisgICAgQ1NTQm9yZGVySW1hZ2VTbGljZVZh
bHVlJiBib3JkZXJJbWFnZVNsaWNlID0gZG93bmNhc3Q8Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVl
PigqdmFsdWUpOwogCiAgICAgLy8gU2V0IHVwIGEgbGVuZ3RoIGJveCB0byByZXByZXNlbnQgb3Vy
IGltYWdlIHNsaWNlcy4KICAgICBMZW5ndGhCb3ggYm94OwotICAgIFF1YWQqIHNsaWNlcyA9IGJv
cmRlckltYWdlU2xpY2UtPnNsaWNlcygpOworICAgIFF1YWQqIHNsaWNlcyA9IGJvcmRlckltYWdl
U2xpY2Uuc2xpY2VzKCk7CiAgICAgaWYgKHNsaWNlcy0+dG9wKCktPmlzUGVyY2VudGFnZSgpKQog
ICAgICAgICBib3gubV90b3AgPSBMZW5ndGgoc2xpY2VzLT50b3AoKS0+Z2V0RG91YmxlVmFsdWUo
KSwgUGVyY2VudCk7CiAgICAgZWxzZQpAQCAtNjIwLDIzICs2MjAsMjMgQEAgdm9pZCBDU1NUb1N0
eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVNsaWNlKENTU1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNl
SW1hZ2UmIGltYWcKICAgICBpbWFnZS5zZXRJbWFnZVNsaWNlcyhib3gpOwogCiAgICAgLy8gU2V0
IG91ciBmaWxsIG1vZGUuCi0gICAgaW1hZ2Uuc2V0RmlsbChib3JkZXJJbWFnZVNsaWNlLT5tX2Zp
bGwpOworICAgIGltYWdlLnNldEZpbGwoYm9yZGVySW1hZ2VTbGljZS5tX2ZpbGwpOwogfQogCiBM
ZW5ndGhCb3ggQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlKiB2
YWx1ZSkKIHsKLSAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQor
ICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuIExl
bmd0aEJveCgpOwogCiAgICAgLy8gR2V0IG91ciB6b29tIHZhbHVlLgogICAgIENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgPSB1c2VTVkdab29tUnVsZXMoKSA/IG1fcmVz
b2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0
ZWRab29tKDEuMGYpIDogbV9yZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25E
YXRhKCk7CiAKICAgICAvLyBSZXRyaWV2ZSB0aGUgcHJpbWl0aXZlIHZhbHVlLgotICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBib3JkZXJXaWR0aHMgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsK
KyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgYm9yZGVyV2lkdGhzID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSk7CiAKICAgICAvLyBTZXQgdXAgYSBsZW5ndGggYm94IHRvIHJlcHJl
c2VudCBvdXIgaW1hZ2Ugc2xpY2VzLgogICAgIExlbmd0aEJveCBib3g7IC8vIERlZmF1bHRzIHRv
ICdhdXRvJyBzbyB3ZSBkb24ndCBoYXZlIHRvIGhhbmRsZSB0aGF0IGV4cGxpY2l0bHkgYmVsb3cu
Ci0gICAgUXVhZCogc2xpY2VzID0gYm9yZGVyV2lkdGhzLT5nZXRRdWFkVmFsdWUoKTsKKyAgICBR
dWFkKiBzbGljZXMgPSBib3JkZXJXaWR0aHMuZ2V0UXVhZFZhbHVlKCk7CiAgICAgaWYgKHNsaWNl
cy0+dG9wKCktPmlzTnVtYmVyKCkpCiAgICAgICAgIGJveC5tX3RvcCA9IExlbmd0aChzbGljZXMt
PnRvcCgpLT5nZXRJbnRWYWx1ZSgpLCBSZWxhdGl2ZSk7CiAgICAgZWxzZSBpZiAoc2xpY2VzLT50
b3AoKS0+aXNQZXJjZW50YWdlKCkpCkBAIC02NzAsMTEgKzY3MCwxMSBAQCBMZW5ndGhCb3ggQ1NT
VG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlKiB2YWx1ZSkKIAogdm9p
ZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVJlcGVhdChDU1NWYWx1ZSogdmFsdWUs
IE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKIHsKLSAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgUGFpciogcGFpciA9IHByaW1pdGl2
ZVZhbHVlLT5nZXRQYWlyVmFsdWUoKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZl
VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBQYWlyKiBw
YWlyID0gcHJpbWl0aXZlVmFsdWUuZ2V0UGFpclZhbHVlKCk7CiAgICAgaWYgKCFwYWlyIHx8ICFw
YWlyLT5maXJzdCgpIHx8ICFwYWlyLT5zZWNvbmQoKSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVW5pY29kZVJhbmdlVmFsdWUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oCmluZGV4IDU5ZGFjOGU1YzA5Nzdi
MmM2NTE0YjFkZjI3MDY0MzE2MWRhMjkyM2MuLjA2YzE3NzQwMDg3NTViNjI1NmNhNDQzMTg0MDYy
NWE5Yzg3OTk3MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFu
Z2VWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5o
CkBAIC01Nyw4ICs1Nyw4IEBAIHByaXZhdGU6CiAgICAgVUNoYXIzMiBtX3RvOwogfTsKIAotQ1NT
X1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTVW5pY29kZVJhbmdlVmFsdWUsIGlzVW5pY29kZVJhbmdlVmFs
dWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0NTU19WQUxVRShDU1NVbmljb2RlUmFuZ2VWYWx1ZSwgaXNVbmljb2RlUmFuZ2VWYWx1ZSgpKQor
CiAjZW5kaWYgLy8gQ1NTVW5pY29kZVJhbmdlVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1ZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5jcHAK
aW5kZXggYWFjZjY4Njg1M2Q1YjI1YmE1MTA3Nzg1OTY2MzkzMjA0ZDIwNTRlNi4uZDAyOWVjMTdl
ZTIzY2IyN2YyYzAwZDI5MGQ3OTMxNTgzZGRlMTFiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuY3Bw
CkBAIC05MSw3ICs5MSw3IEBAIHByaXZhdGU6CiAKIGJvb2wgQ1NTVmFsdWU6OmlzSW1wbGljaXRJ
bml0aWFsVmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiBtX2NsYXNzVHlwZSA9PSBJbml0aWFs
Q2xhc3MgJiYgdG9DU1NJbml0aWFsVmFsdWUodGhpcyktPmlzSW1wbGljaXQoKTsKKyAgICByZXR1
cm4gbV9jbGFzc1R5cGUgPT0gSW5pdGlhbENsYXNzICYmIGRvd25jYXN0PENTU0luaXRpYWxWYWx1
ZT4oKnRoaXMpLmlzSW1wbGljaXQoKTsKIH0KIAogQ1NTVmFsdWU6OlR5cGUgQ1NTVmFsdWU6OmNz
c1ZhbHVlVHlwZSgpIGNvbnN0CkBAIC0xMTIsMTQgKzExMiwxNCBAQCB2b2lkIENTU1ZhbHVlOjph
ZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxVUkw+JiB1cmxzLCBjb25zdCBTdHls
ZVNoZWV0QwogICAgIC8vIFRoaXMgc2hvdWxkIGdldCBjYWxsZWQgZm9yIGludGVybmFsIGluc3Rh
bmNlcyBvbmx5LgogICAgIEFTU0VSVCghaXNDU1NPTVNhZmUoKSk7CiAKLSAgICBpZiAoaXNQcmlt
aXRpdmVWYWx1ZSgpKQotICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRoaXMpLT5hZGRTdWJy
ZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBzdHlsZVNoZWV0KTsKLSAgICBlbHNlIGlmIChpc1ZhbHVl
TGlzdCgpKQotICAgICAgICB0b0NTU1ZhbHVlTGlzdCh0aGlzKS0+YWRkU3VicmVzb3VyY2VTdHls
ZVVSTHModXJscywgc3R5bGVTaGVldCk7Ci0gICAgZWxzZSBpZiAoY2xhc3NUeXBlKCkgPT0gRm9u
dEZhY2VTcmNDbGFzcykKLSAgICAgICAgdG9DU1NGb250RmFjZVNyY1ZhbHVlKHRoaXMpLT5hZGRT
dWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBzdHlsZVNoZWV0KTsKLSAgICBlbHNlIGlmIChjbGFz
c1R5cGUoKSA9PSBSZWZsZWN0Q2xhc3MpCi0gICAgICAgIHRvQ1NTUmVmbGVjdFZhbHVlKHRoaXMp
LT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBzdHlsZVNoZWV0KTsKKyAgICBpZiAoaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp0aGlzKSkKKyAgICAgICAgZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp0aGlzKS5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBzdHlsZVNoZWV0KTsK
KyAgICBlbHNlIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp0aGlzKSkKKyAgICAgICAgZG93bmNhc3Q8
Q1NTVmFsdWVMaXN0PigqdGhpcykuYWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJscywgc3R5bGVT
aGVldCk7CisgICAgZWxzZSBpZiAoaXM8Q1NTRm9udEZhY2VTcmNWYWx1ZT4oKnRoaXMpKQorICAg
ICAgICBkb3duY2FzdDxDU1NGb250RmFjZVNyY1ZhbHVlPigqdGhpcykuYWRkU3VicmVzb3VyY2VT
dHlsZVVSTHModXJscywgc3R5bGVTaGVldCk7CisgICAgZWxzZSBpZiAoaXM8Q1NTUmVmbGVjdFZh
bHVlPigqdGhpcykpCisgICAgICAgIGRvd25jYXN0PENTU1JlZmxlY3RWYWx1ZT4oKnRoaXMpLmFk
ZFN1YnJlc291cmNlU3R5bGVVUkxzKHVybHMsIHN0eWxlU2hlZXQpOwogfQogCiBib29sIENTU1Zh
bHVlOjpoYXNGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKCkgY29uc3QKQEAgLTEyNywxOSAr
MTI3LDE5IEBAIGJvb2wgQ1NTVmFsdWU6Omhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMo
KSBjb25zdAogICAgIC8vIFRoaXMgc2hvdWxkIGdldCBjYWxsZWQgZm9yIGludGVybmFsIGluc3Rh
bmNlcyBvbmx5LgogICAgIEFTU0VSVCghaXNDU1NPTVNhZmUoKSk7CiAKLSAgICBpZiAoaXNWYWx1
ZUxpc3QoKSkKLSAgICAgICAgcmV0dXJuIHRvQ1NTVmFsdWVMaXN0KHRoaXMpLT5oYXNGYWlsZWRP
ckNhbmNlbGVkU3VicmVzb3VyY2VzKCk7Ci0gICAgaWYgKGNsYXNzVHlwZSgpID09IEZvbnRGYWNl
U3JjQ2xhc3MpCi0gICAgICAgIHJldHVybiB0b0NTU0ZvbnRGYWNlU3JjVmFsdWUodGhpcyktPmhh
c0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoKTsKLSAgICBpZiAoY2xhc3NUeXBlKCkgPT0g
SW1hZ2VDbGFzcykKLSAgICAgICAgcmV0dXJuIHRvQ1NTSW1hZ2VWYWx1ZSh0aGlzKS0+aGFzRmFp
bGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcygpOwotICAgIGlmIChjbGFzc1R5cGUoKSA9PSBDcm9z
c2ZhZGVDbGFzcykKLSAgICAgICAgcmV0dXJuIHRvQ1NTQ3Jvc3NmYWRlVmFsdWUodGhpcyktPmhh
c0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoKTsKLSAgICBpZiAoY2xhc3NUeXBlKCkgPT0g
RmlsdGVySW1hZ2VDbGFzcykKLSAgICAgICAgcmV0dXJuIHRvQ1NTRmlsdGVySW1hZ2VWYWx1ZSh0
aGlzKS0+aGFzRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcygpOworICAgIGlmIChpczxDU1NW
YWx1ZUxpc3Q+KCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ZhbHVlTGlzdD4o
KnRoaXMpLmhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoKTsKKyAgICBpZiAoaXM8Q1NT
Rm9udEZhY2VTcmNWYWx1ZT4oKnRoaXMpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTRm9u
dEZhY2VTcmNWYWx1ZT4oKnRoaXMpLmhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoKTsK
KyAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oKnRoaXMpKQorICAgICAgICByZXR1cm4gZG93bmNh
c3Q8Q1NTSW1hZ2VWYWx1ZT4oKnRoaXMpLmhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMo
KTsKKyAgICBpZiAoaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KCp0aGlzKSkKKyAgICAgICAgcmV0dXJu
IGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPigqdGhpcykuaGFzRmFpbGVkT3JDYW5jZWxlZFN1
YnJlc291cmNlcygpOworICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPigqdGhpcykpCisg
ICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPigqdGhpcykuaGFzRmFp
bGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcygpOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQot
ICAgIGlmIChjbGFzc1R5cGUoKSA9PSBJbWFnZVNldENsYXNzKQotICAgICAgICByZXR1cm4gdG9D
U1NJbWFnZVNldFZhbHVlKHRoaXMpLT5oYXNGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKCk7
CisgICAgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PENTU0ltYWdlU2V0VmFsdWU+KCp0aGlzKS5oYXNGYWlsZWRPckNhbmNlbGVkU3VicmVz
b3VyY2VzKCk7CiAjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yMjksOSArMjI5LDkg
QEAgYm9vbCBDU1NWYWx1ZTo6ZXF1YWxzKGNvbnN0IENTU1ZhbHVlJiBvdGhlcikgY29uc3QKICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX2NsYXNzVHlwZSA9PSBWYWx1ZUxpc3RDbGFz
cyAmJiBvdGhlci5tX2NsYXNzVHlwZSAhPSBWYWx1ZUxpc3RDbGFzcykKLSAgICAgICAgcmV0dXJu
IHRvQ1NTVmFsdWVMaXN0KHRoaXMpLT5lcXVhbHMob3RoZXIpOwotICAgIGVsc2UgaWYgKG1fY2xh
c3NUeXBlICE9IFZhbHVlTGlzdENsYXNzICYmIG90aGVyLm1fY2xhc3NUeXBlID09IFZhbHVlTGlz
dENsYXNzKQorICAgIH0gZWxzZSBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdGhpcykgJiYgIWlzPENT
U1ZhbHVlTGlzdD4ob3RoZXIpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0
PigqdGhpcykuZXF1YWxzKG90aGVyKTsKKyAgICBlbHNlIGlmICghaXM8Q1NTVmFsdWVMaXN0Pigq
dGhpcykgJiYgaXM8Q1NTVmFsdWVMaXN0PihvdGhlcikpCiAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCBDU1NWYWx1ZUxpc3QmPihvdGhlcikuZXF1YWxzKCp0aGlzKTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CkBAIC0yNDYsNzEgKzI0Niw3MSBAQCBTdHJpbmcgQ1NTVmFsdWU6OmNzc1Rl
eHQoKSBjb25zdAogCiAgICAgc3dpdGNoIChjbGFzc1R5cGUoKSkgewogICAgIGNhc2UgQXNwZWN0
UmF0aW9DbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTQXNwZWN0UmF0aW9WYWx1ZSh0aGlzKS0+
Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQXNwZWN0UmF0aW9W
YWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIEJvcmRlckltYWdlU2xpY2VD
bGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlKHRoaXMpLT5j
dXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NCb3JkZXJJbWFnZVNs
aWNlVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBDYW52YXNDbGFzczoK
LSAgICAgICAgcmV0dXJuIHRvQ1NTQ2FudmFzVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0NhbnZhc1ZhbHVlPigqdGhpcykuY3VzdG9tQ1NT
VGV4dCgpOwogICAgIGNhc2UgQ3Vyc29ySW1hZ2VDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NT
Q3Vyc29ySW1hZ2VWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAg
ICBjYXNlIEZpbHRlckltYWdlQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0ZpbHRlckltYWdl
VmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENT
U0ZpbHRlckltYWdlVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBGb250
Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0ZvbnRWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4
dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTRm9udFZhbHVlPigqdGhpcykuY3VzdG9t
Q1NTVGV4dCgpOwogICAgIGNhc2UgRm9udEZhY2VTcmNDbGFzczoKLSAgICAgICAgcmV0dXJuIHRv
Q1NTRm9udEZhY2VTcmNWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1
cm4gZG93bmNhc3Q8Q1NTRm9udEZhY2VTcmNWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsK
ICAgICBjYXNlIEZvbnRGZWF0dXJlQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0ZvbnRGZWF0
dXJlVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENTU0ZvbnRGZWF0dXJlVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBG
dW5jdGlvbkNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NGdW5jdGlvblZhbHVlKHRoaXMpLT5j
dXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NGdW5jdGlvblZhbHVl
PigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgTGluZWFyR3JhZGllbnRDbGFzczoK
LSAgICAgICAgcmV0dXJuIHRvQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NT
VGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4o
KnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIFJhZGlhbEdyYWRpZW50Q2xhc3M6Ci0g
ICAgICAgIHJldHVybiB0b0NTU1JhZGlhbEdyYWRpZW50VmFsdWUodGhpcyktPmN1c3RvbUNTU1Rl
eHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCp0
aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBDcm9zc2ZhZGVDbGFzczoKLSAgICAgICAg
cmV0dXJuIHRvQ1NTQ3Jvc3NmYWRlVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4
dCgpOwogICAgIGNhc2UgSW1hZ2VDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTSW1hZ2VWYWx1
ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1h
Z2VWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIEluaGVyaXRlZENsYXNz
OgotICAgICAgICByZXR1cm4gdG9DU1NJbmhlcml0ZWRWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4
dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW5oZXJpdGVkVmFsdWU+KCp0aGlzKS5j
dXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBJbml0aWFsQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0
b0NTU0luaXRpYWxWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8Q1NTSW5pdGlhbFZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogI2lmIEVO
QUJMRShDU1NfR1JJRF9MQVlPVVQpCiAgICAgY2FzZSBHcmlkTGluZU5hbWVzQ2xhc3M6Ci0gICAg
ICAgIHJldHVybiB0b0NTU0dyaWRMaW5lTmFtZXNWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgp
OworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTR3JpZExpbmVOYW1lc1ZhbHVlPigqdGhpcyku
Y3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgR3JpZFRlbXBsYXRlQXJlYXNDbGFzczoKLSAgICAg
ICAgcmV0dXJuIHRvQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4
dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZT4o
KnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICNlbmRpZgogICAgIGNhc2UgUHJpbWl0aXZlQ2xhc3M6
Ci0gICAgICAgIHJldHVybiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0
KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRoaXMpLmN1
c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIFJlZmxlY3RDbGFzczoKLSAgICAgICAgcmV0dXJuIHRv
Q1NTUmVmbGVjdFZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBk
b3duY2FzdDxDU1NSZWZsZWN0VmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2Fz
ZSBTaGFkb3dDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTU2hhZG93VmFsdWUodGhpcyktPmN1
c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1NoYWRvd1ZhbHVlPigq
dGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
bkNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFs
dWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0N1
YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAg
ICBjYXNlIFN0ZXBzVGltaW5nRnVuY3Rpb25DbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTU3Rl
cHNUaW1pbmdGdW5jdGlvblZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWU+KCp0aGlzKS5jdXN0b21D
U1NUZXh0KCk7CiAgICAgY2FzZSBVbmljb2RlUmFuZ2VDbGFzczoKLSAgICAgICAgcmV0dXJuIHRv
Q1NTVW5pY29kZVJhbmdlVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PENTU1VuaWNvZGVSYW5nZVZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgp
OwogICAgIGNhc2UgVmFsdWVMaXN0Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU1ZhbHVlTGlz
dCh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTVmFs
dWVMaXN0PigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNm
b3JtQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKHRoaXMp
LT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIExpbmVCb3hDb250
YWluQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0xpbmVCb3hDb250YWluVmFsdWUodGhpcykt
PmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0xpbmVCb3hDb250
YWluVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBDYWxjdWxhdGlvbkNs
YXNzOgotICAgICAgICByZXR1cm4gdG9DU1NDYWxjVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQo
KTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0NhbGNWYWx1ZT4oKnRoaXMpLmN1c3RvbUNT
U1RleHQoKTsKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKICAgICBjYXNlIEltYWdlU2V0Q2xh
c3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0ltYWdlU2V0VmFsdWUodGhpcyktPmN1c3RvbUNTU1Rl
eHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ltYWdlU2V0VmFsdWU+KCp0aGlzKS5j
dXN0b21DU1NUZXh0KCk7CiAjZW5kaWYKICAgICBjYXNlIFdlYktpdENTU0ZpbHRlckNsYXNzOgot
ICAgICAgICByZXR1cm4gdG9XZWJLaXRDU1NGaWx0ZXJWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4
dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+KCp0aGlz
KS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBTVkdDb2xvckNsYXNzOgotICAgICAgICByZXR1
cm4gdG9TVkdDb2xvcih0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93
bmNhc3Q8U1ZHQ29sb3I+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBTVkdQYWlu
dENsYXNzOgotICAgICAgICByZXR1cm4gdG9TVkdQYWludCh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgp
OworICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHUGFpbnQ+KCp0aGlzKS5jdXN0b21DU1NUZXh0
KCk7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBTdHJpbmco
KTsKQEAgLTMyNywxMDEgKzMyNywxMDEgQEAgdm9pZCBDU1NWYWx1ZTo6ZGVzdHJveSgpCiAKICAg
ICBzd2l0Y2ggKGNsYXNzVHlwZSgpKSB7CiAgICAgY2FzZSBBc3BlY3RSYXRpb0NsYXNzOgotICAg
ICAgICBkZWxldGUgdG9DU1NBc3BlY3RSYXRpb1ZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUg
ZG93bmNhc3Q8Q1NTQXNwZWN0UmF0aW9WYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIEJvcmRlckltYWdlU2xpY2VDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTQm9yZGVy
SW1hZ2VTbGljZVZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTQm9yZGVy
SW1hZ2VTbGljZVZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ2FudmFz
Q2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0NhbnZhc1ZhbHVlKHRoaXMpOworICAgICAgICBk
ZWxldGUgZG93bmNhc3Q8Q1NTQ2FudmFzVmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBDdXJzb3JJbWFnZUNsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NDdXJzb3JJbWFn
ZVZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1
ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEZvbnRDbGFzczoKLSAgICAgICAg
ZGVsZXRlIHRvQ1NTRm9udFZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NT
Rm9udFZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgRm9udEZhY2VTcmND
bGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTRm9udEZhY2VTcmNWYWx1ZSh0aGlzKTsKKyAgICAg
ICAgZGVsZXRlIGRvd25jYXN0PENTU0ZvbnRGYWNlU3JjVmFsdWU+KHRoaXMpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBGb250RmVhdHVyZUNsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NG
b250RmVhdHVyZVZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTRm9udEZl
YXR1cmVWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEZ1bmN0aW9uQ2xh
c3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0Z1bmN0aW9uVmFsdWUodGhpcyk7CisgICAgICAgIGRl
bGV0ZSBkb3duY2FzdDxDU1NGdW5jdGlvblZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIGNhc2UgTGluZWFyR3JhZGllbnRDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTTGluZWFy
R3JhZGllbnRWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENTU0xpbmVhckdy
YWRpZW50VmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBSYWRpYWxHcmFk
aWVudENsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NSYWRpYWxHcmFkaWVudFZhbHVlKHRoaXMp
OworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4odGhpcyk7
CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENyb3NzZmFkZUNsYXNzOgotICAgICAgICBkZWxl
dGUgdG9DU1NDcm9zc2ZhZGVWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENT
U0Nyb3NzZmFkZVZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSW1hZ2VD
bGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTSW1hZ2VWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVs
ZXRlIGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBJbmhlcml0ZWRDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTSW5oZXJpdGVkVmFsdWUo
dGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NJbmhlcml0ZWRWYWx1ZT4odGhpcyk7
CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEluaXRpYWxDbGFzczoKLSAgICAgICAgZGVsZXRl
IHRvQ1NTSW5pdGlhbFZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTSW5p
dGlhbFZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogI2lmIEVOQUJMRShDU1NfR1JJRF9M
QVlPVVQpCiAgICAgY2FzZSBHcmlkTGluZU5hbWVzQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NT
U0dyaWRMaW5lTmFtZXNWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENTU0dy
aWRMaW5lTmFtZXNWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEdyaWRU
ZW1wbGF0ZUFyZWFzQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0dyaWRUZW1wbGF0ZUFyZWFz
VmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NHcmlkVGVtcGxhdGVBcmVh
c1ZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgY2FzZSBQcmltaXRp
dmVDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTUHJpbWl0aXZlVmFsdWUodGhpcyk7CisgICAg
ICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIFJlZmxlY3RDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTUmVmbGVj
dFZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTUmVmbGVjdFZhbHVlPih0
aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2hhZG93Q2xhc3M6Ci0gICAgICAgIGRl
bGV0ZSB0b0NTU1NoYWRvd1ZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NT
U2hhZG93VmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDdWJpY0Jlemll
clRpbWluZ0Z1bmN0aW9uQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0N1YmljQmV6aWVyVGlt
aW5nRnVuY3Rpb25WYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENTU0N1Ymlj
QmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBj
YXNlIFN0ZXBzVGltaW5nRnVuY3Rpb25DbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTU3RlcHNU
aW1pbmdGdW5jdGlvblZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTU3Rl
cHNUaW1pbmdGdW5jdGlvblZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
VW5pY29kZVJhbmdlQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU1VuaWNvZGVSYW5nZVZhbHVl
KHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTVW5pY29kZVJhbmdlVmFsdWU+KHRo
aXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBWYWx1ZUxpc3RDbGFzczoKLSAgICAgICAg
ZGVsZXRlIHRvQ1NTVmFsdWVMaXN0KHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NT
VmFsdWVMaXN0Pih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgV2ViS2l0Q1NTVHJh
bnNmb3JtQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKHRo
aXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU+KHRo
aXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBMaW5lQm94Q29udGFpbkNsYXNzOgotICAg
ICAgICBkZWxldGUgdG9DU1NMaW5lQm94Q29udGFpblZhbHVlKHRoaXMpOworICAgICAgICBkZWxl
dGUgZG93bmNhc3Q8Q1NTTGluZUJveENvbnRhaW5WYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIENhbGN1bGF0aW9uQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0NhbGNW
YWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENTU0NhbGNWYWx1ZT4odGhpcyk7
CiAgICAgICAgIHJldHVybjsKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKICAgICBjYXNlIElt
YWdlU2V0Q2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0ltYWdlU2V0VmFsdWUodGhpcyk7Cisg
ICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPih0aGlzKTsKICAgICAgICAg
cmV0dXJuOwogI2VuZGlmCiAgICAgY2FzZSBGaWx0ZXJJbWFnZUNsYXNzOgotICAgICAgICBkZWxl
dGUgdG9DU1NGaWx0ZXJJbWFnZVZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8
Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFdl
YktpdENTU0ZpbHRlckNsYXNzOgotICAgICAgICBkZWxldGUgdG9XZWJLaXRDU1NGaWx0ZXJWYWx1
ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PFdlYktpdENTU0ZpbHRlclZhbHVlPih0
aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU1ZHQ29sb3JDbGFzczoKLSAgICAgICAg
ZGVsZXRlIHRvU1ZHQ29sb3IodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxTVkdDb2xv
cj4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNWR1BhaW50Q2xhc3M6Ci0gICAg
ICAgIGRlbGV0ZSB0b1NWR1BhaW50KHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8U1ZH
UGFpbnQ+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtNDMxLDI0ICs0MzEsMjQgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTVmFs
dWU6OmNsb25lRm9yQ1NTT00oKSBjb25zdAogewogICAgIHN3aXRjaCAoY2xhc3NUeXBlKCkpIHsK
ICAgICBjYXNlIFByaW1pdGl2ZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NQcmltaXRpdmVW
YWx1ZSh0aGlzKS0+Y2xvbmVGb3JDU1NPTSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KCp0aGlzKS5jbG9uZUZvckNTU09NKCk7CiAgICAgY2FzZSBWYWx1ZUxp
c3RDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTVmFsdWVMaXN0KHRoaXMpLT5jbG9uZUZvckNT
U09NKCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp0aGlzKS5jbG9u
ZUZvckNTU09NKCk7CiAgICAgY2FzZSBJbWFnZUNsYXNzOgogICAgIGNhc2UgQ3Vyc29ySW1hZ2VD
bGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTSW1hZ2VWYWx1ZSh0aGlzKS0+Y2xvbmVGb3JDU1NP
TSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oKnRoaXMpLmNsb25l
Rm9yQ1NTT00oKTsKICAgICBjYXNlIFdlYktpdENTU0ZpbHRlckNsYXNzOgotICAgICAgICByZXR1
cm4gdG9XZWJLaXRDU1NGaWx0ZXJWYWx1ZSh0aGlzKS0+Y2xvbmVGb3JDU1NPTSgpOworICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+KCp0aGlzKS5jbG9uZUZvckNT
U09NKCk7CiAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1DbGFzczoKLSAgICAgICAgcmV0dXJu
IHRvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUodGhpcyktPmNsb25lRm9yQ1NTT00oKTsKKyAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PFdlYktpdENTU1RyYW5zZm9ybVZhbHVlPigqdGhpcykuY2xvbmVG
b3JDU1NPTSgpOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQogICAgIGNhc2UgSW1hZ2VTZXRD
bGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTSW1hZ2VTZXRWYWx1ZSh0aGlzKS0+Y2xvbmVGb3JD
U1NPTSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4oKnRoaXMp
LmNsb25lRm9yQ1NTT00oKTsKICNlbmRpZgogICAgIGNhc2UgU1ZHQ29sb3JDbGFzczoKLSAgICAg
ICAgcmV0dXJuIHRvU1ZHQ29sb3IodGhpcyktPmNsb25lRm9yQ1NTT00oKTsKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PFNWR0NvbG9yPigqdGhpcykuY2xvbmVGb3JDU1NPTSgpOwogICAgIGNhc2Ug
U1ZHUGFpbnRDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvU1ZHUGFpbnQodGhpcyktPmNsb25lRm9y
Q1NTT00oKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFNWR1BhaW50PigqdGhpcykuY2xvbmVG
b3JDU1NPTSgpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVCghaXNTdWJ0eXBlRXhwb3Nl
ZFRvQ1NTT00oKSk7CiAgICAgICAgIHJldHVybiBUZXh0Q2xvbmVDU1NWYWx1ZTo6Y3JlYXRlKGNs
YXNzVHlwZSgpLCBjc3NUZXh0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuaAppbmRleCA4MDQxM2Y4ODIw
YTdmNzZkMmJjNGVlMjNiMjhhMWNjMjQ0NGZjMzcxLi4wZTgxNmMyMmQzYmEyY2JhYjVmMDRiN2Fl
Mjg2ZTBlM2Y5ZDViYmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuaApAQCAtMjYsNiArMjYsNyBAQAog
I2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yNDksOSArMjUwLDExIEBAIGlubGluZSBib29sIGNv
bXBhcmVDU1NWYWx1ZShjb25zdCBSZWY8Q1NTVmFsdWVUeXBlPiYgZmlyc3QsIGNvbnN0IFJlZjxD
U1NWYWx1ZVR5CiAgICAgcmV0dXJuIGZpcnN0LmdldCgpLmVxdWFscyhzZWNvbmQuZ2V0KCkpOwog
fQogCi0jZGVmaW5lIENTU19WQUxVRV9UWVBFX0NBU1RTKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGlj
YXRlKSBcCi0gICAgVFlQRV9DQVNUU19CQVNFKFRvVmFsdWVUeXBlTmFtZSwgQ1NTVmFsdWUsIHZh
bHVlLCB2YWx1ZS0+cHJlZGljYXRlLCB2YWx1ZS5wcmVkaWNhdGUpCi0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAorI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShUb1Zh
bHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihX
ZWJDb3JlOjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3Qg
V2ViQ29yZTo6Q1NTVmFsdWUmIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5wcmVkaWNhdGU7IH0gXAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCiAjZW5kaWYgLy8gQ1NTVmFsdWVfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1ZhbHVlTGlzdC5oCmluZGV4IDAxMjc5MjRiZTRmMWRiZWQ3MjFjZTg2MGFhMjI2
ZjQ2ZWRlYzFkZmMuLmE5Y2VhMjk0MTc3NmI3YjI5ZTBmMWIyMjBkM2EwMzVlNjBmOGY0ZmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKQEAgLTgxLDggKzgxLDYgQEAgcHJpdmF0ZToKICAg
ICBWZWN0b3I8UmVmPENTU1ZhbHVlPiwgND4gbV92YWx1ZXM7CiB9OwogCi1DU1NfVkFMVUVfVFlQ
RV9DQVNUUyhDU1NWYWx1ZUxpc3QsIGlzVmFsdWVMaXN0KCkpCi0KIGlubGluZSB2b2lkIENTU1Zh
bHVlTGlzdDo6YXBwZW5kKFBhc3NSZWY8Q1NTVmFsdWU+IHZhbHVlKQogewogICAgIG1fdmFsdWVz
LmFwcGVuZChXVEY6Om1vdmUodmFsdWUpKTsKQEAgLTk3LDcgKzk1LDEwIEBAIGlubGluZSB2b2lk
IENTU1ZhbHVlTGlzdDo6cHJlcGVuZChQYXNzUmVmPENTU1ZhbHVlPiB2YWx1ZSkKIC8vIFBsZWFz
ZSB0YWtlIGNhcmUgbm90IHRvIHBhc3MgdGhlc2UgYXJvdW5kIGFzIHRoZXkgZG8gaG9sZCBvbnRv
IGEgcmF3IHBvaW50ZXIuCiBjbGFzcyBDU1NWYWx1ZUxpc3RJbnNwZWN0b3IgewogcHVibGljOgot
ICAgIENTU1ZhbHVlTGlzdEluc3BlY3RvcihDU1NWYWx1ZSogdmFsdWUpIDogbV9saXN0KCh2YWx1
ZSAmJiB2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgPyB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSkgOiAwKSB7
IH0KKyAgICBDU1NWYWx1ZUxpc3RJbnNwZWN0b3IoQ1NTVmFsdWUqIHZhbHVlKQorICAgICAgICA6
IG1fbGlzdChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSA/IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4o
dmFsdWUpIDogbnVsbHB0cikKKyAgICB7IH0KKwogICAgIENTU1ZhbHVlKiBpdGVtKHNpemVfdCBp
bmRleCkgY29uc3QgeyBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IGxl
bmd0aCgpKTsgcmV0dXJuIG1fbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpbmRleCk7IH0K
ICAgICBDU1NWYWx1ZSogZmlyc3QoKSBjb25zdCB7IHJldHVybiBpdGVtKDApOyB9CiAgICAgQ1NT
VmFsdWUqIHNlY29uZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZW0oMSk7IH0KQEAgLTEyMyw0ICsxMjQs
NiBAQCBwcml2YXRlOgogfTsKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTVmFsdWVMaXN0LCBpc1ZhbHVlTGlzdCgpKQorCiAjZW5k
aWYgLy8gQ1NTVmFsdWVMaXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXBy
ZWNhdGVkU3R5bGVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5
bGVCdWlsZGVyLmNwcAppbmRleCBiMmZmN2IxYWZlNjhiNjczMTBhYzMwNTMxZGVkZDZlODkxMTNj
YmU2Li41MTg1ZTAwYmQ2NmUwMjA5YWI3NmQxMWU0YThlNjc5ZjNlN2ZiZWEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiQ1NTQXNwZWN0UmF0aW9WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0NhbGN1
bGF0aW9uVmFsdWUuaCIKICNpbmNsdWRlICJDU1NDdXJzb3JJbWFnZVZhbHVlLmgiCisjaW5jbHVk
ZSAiQ1NTSW1hZ2VTZXRWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAj
aW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgogI2luY2x1ZGUgIkNTU1RvU3R5
bGVNYXAuaCIKQEAgLTE0OSw4ICsxNTAsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0
VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBTZXR0ZXJUeXBlIHZhbHVlKSB7IChzdHlsZS0+KnNl
dHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAg
ICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgKnRvQ1NTUHJpbWl0aXZlVmFsdWUo
dmFsdWUpKTsKKyAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQorICAg
ICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVy
IGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTE2NSwxNCArMTY2LDE0IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIE51bWJlclR5cGUgdmFs
dWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQogICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldFZhbHVlSUQoKSA9PSBpZE1hcHNUb01pbnVzT25lKQorICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
KnZhbHVlKTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBpZE1h
cHNUb01pbnVzT25lKQogICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgLTEpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWU8TnVtYmVyVHlwZT4oQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlPE51bWJlclR5cGU+KENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRs
ZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtMjEzLDE2ICsyMTQsMTYgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IGF1dG9JZGVudGl0eSkKKyAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1
ZUlEKCkgPT0gYXV0b0lkZW50aXR5KQogICAgICAgICAgICAgc2V0QXV0byhzdHlsZVJlc29sdmVy
LT5zdHlsZSgpKTsKICAgICAgICAgZWxzZSBpZiAodmFsdWVUeXBlID09IE51bWJlcikKLSAgICAg
ICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksICpwcmltaXRpdmVWYWx1ZSk7
CisgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVW
YWx1ZSk7CiAgICAgICAgIGVsc2UgaWYgKHZhbHVlVHlwZSA9PSBDb21wdXRlTGVuZ3RoKQotICAg
ICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUt
PmNvbXB1dGVMZW5ndGg8VD4oc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCkpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCksIHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8VD4oc3R5bGVSZXNvbHZlci0+c3RhdGUo
KS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJv
cGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFw
cGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQpAQCAt
MjUyLDE5ICsyNTMsMTkgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAg
ICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQ
cmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRp
dmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogCi0gICAgICAg
IGlmIChSZWN0KiByZWN0ID0gcHJpbWl0aXZlVmFsdWUtPmdldFJlY3RWYWx1ZSgpKSB7CisgICAg
ICAgIGlmIChSZWN0KiByZWN0ID0gcHJpbWl0aXZlVmFsdWUuZ2V0UmVjdFZhbHVlKCkpIHsKICAg
ICAgICAgICAgIExlbmd0aCB0b3AgPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVj
dC0+dG9wKCkpOwogICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0ID0gY29udmVydFRvTGVuZ3RoKHN0
eWxlUmVzb2x2ZXIsIHJlY3QtPnJpZ2h0KCkpOwogICAgICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9
IGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0LT5ib3R0b20oKSk7CiAgICAgICAg
ICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0LT5s
ZWZ0KCkpOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q2xpcCh0b3As
IHJpZ2h0LCBib3R0b20sIGxlZnQpOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0SGFzQ2xpcCh0cnVlKTsKLSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykgeworICAgICAgICB9IGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pIHsKICAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldENsaXAoTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgo
KSwgTGVuZ3RoKCkpOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SGFz
Q2xpcChmYWxzZSk7CiAgICAgICAgIH0KQEAgLTI5OCwxNyArMjk5LDE3IEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAg
ICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1
ZSk7Ci0gICAgICAgIGlmIChpbmhlcml0Q29sb3JGcm9tUGFyZW50ICYmIHByaW1pdGl2ZVZhbHVl
LT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCisgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpOworICAgICAgICBpZiAoaW5oZXJpdENvbG9yRnJvbVBhcmVudCAmJiBwcmltaXRpdmVW
YWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCiAgICAgICAgICAgICBh
cHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvUmVndWxh
clN0eWxlKCkpCi0gICAgICAgICAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPipzZXR0
ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZlci0+Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0
aXZlVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNl
dHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZSgmcHJp
bWl0aXZlVmFsdWUpKTsKICAgICAgICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5hcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpCi0gICAgICAgICAgICAgICAgKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPip2aXNpdGVkTGlua1NldHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5jb2xv
ckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1ZSwgLyogZm9yVmlzaXRlZExpbmsgKi8g
dHJ1ZSkpOworICAgICAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qdmlzaXRl
ZExpbmtTZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZlci0+Y29sb3JGcm9tUHJpbWl0aXZlVmFs
dWUoJnByaW1pdGl2ZVZhbHVlLCAvKiBmb3JWaXNpdGVkTGluayAqLyB0cnVlKSk7CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTM1OSw0NiArMzYwLDQ2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIExlbmd0aCB2YWx1ZSkgeyAoc3R5bGUtPipz
ZXR0ZXJGdW5jdGlvbikoV1RGOjptb3ZlKHZhbHVlKSk7IH0KICAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICAgICAgaWYgKG5vbmVFbmFibGVkICYm
IHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKSB7CisgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPigqdmFsdWUpOworICAgICAgICBpZiAobm9uZUVuYWJsZWQgJiYgcHJpbWl0aXZlVmFs
dWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkgewogICAgICAgICAgICAgaWYgKG5vbmVV
bmRlZmluZWQpCiAgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgTGVuZ3RoKFVuZGVmaW5lZCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aCgpKTsKICAgICAgICAgfQog
ICAgICAgICBpZiAobGVnYWN5SW50cmluc2ljRW5hYmxlZCkgewotICAgICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVJbnRyaW5zaWMpCisgICAgICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlSW50cmluc2lj
KQogICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0
aChJbnRyaW5zaWMpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRW
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVNaW5JbnRyaW5zaWMpCisgICAgICAgICAgICBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVNaW5JbnRyaW5zaWMpCiAgICAg
ICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKE1pbklu
dHJpbnNpYykpOwogICAgICAgICB9CiAgICAgICAgIGlmIChpbnRyaW5zaWNFbmFibGVkKSB7Ci0g
ICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdl
YmtpdE1pbkNvbnRlbnQpCisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJ
RCgpID09IENTU1ZhbHVlV2Via2l0TWluQ29udGVudCkKICAgICAgICAgICAgICAgICBzZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoTWluQ29udGVudCkpOwotICAgICAgICAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdlYmtp
dE1heENvbnRlbnQpCisgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1
ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRNYXhDb250ZW50KQogICAgICAgICAgICAgICAgIHNldFZh
bHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChNYXhDb250ZW50KSk7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Vi
a2l0RmlsbEF2YWlsYWJsZSkKKyAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmdl
dFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdlYmtpdEZpbGxBdmFpbGFibGUpCiAgICAgICAgICAgICAg
ICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKEZpbGxBdmFpbGFibGUp
KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVXZWJraXRGaXRDb250ZW50KQorICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZl
VmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Via2l0Rml0Q29udGVudCkKICAgICAgICAg
ICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoRml0Q29udGVu
dCkpOwogICAgICAgICB9CiAKICAgICAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjb252
ZXJzaW9uRGF0YSA9IHN0eWxlUmVzb2x2ZXItPnVzZVNWR1pvb21SdWxlc0Zvckxlbmd0aCgpID8K
ICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpCiAgICAgICAgICAgICA6IHN0eWxlUmVz
b2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOwotICAgICAgICBpZiAo
YXV0b0VuYWJsZWQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1
dG8pCisgICAgICAgIGlmIChhdXRvRW5hYmxlZCAmJiBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlE
KCkgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgTGVuZ3RoKCkpOwotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNM
ZW5ndGgoKSkgewotICAgICAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5j
b21wdXRlTGVuZ3RoPExlbmd0aD4oY29udmVyc2lvbkRhdGEpOwotICAgICAgICAgICAgbGVuZ3Ro
LnNldEhhc1F1aXJrKHByaW1pdGl2ZVZhbHVlLT5pc1F1aXJrVmFsdWUoKSk7CisgICAgICAgIGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIExlbmd0aCBs
ZW5ndGggPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY29udmVyc2lvbkRh
dGEpOworICAgICAgICAgICAgbGVuZ3RoLnNldEhhc1F1aXJrKHByaW1pdGl2ZVZhbHVlLmlzUXVp
cmtWYWx1ZSgpKTsKICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCks
IGxlbmd0aCk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFn
ZSgpKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3Ro
KHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KSk7Ci0gICAgICAgIGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgp
KQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKHBy
aW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+Y3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShjb252
ZXJzaW9uRGF0YSkpKTsKKyAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc1BlcmNl
bnRhZ2UoKSkKKyAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExl
bmd0aChwcmltaXRpdmVWYWx1ZS5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KSk7CisgICAgICAg
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3Ro
KCkpCisgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgo
cHJpbWl0aXZlVmFsdWUuY3NzQ2FsY1ZhbHVlKCktPmNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUoY29u
dmVyc2lvbkRhdGEpKSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVh
dGVIYW5kbGVyKCkKQEAgLTQxNSwxNCArNDE2LDE0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUp
IHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQogICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICAgICAgaWYgKChpZGVudEJlaGF2aW9y
ID09IE1hcE5vbmVUb051bGwgJiYgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NW
YWx1ZU5vbmUpCi0gICAgICAgICAgICB8fCAoaWRlbnRCZWhhdmlvciA9PSBNYXBBdXRvVG9OdWxs
ICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKSkKKyAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgICAgIGlmICgoaWRlbnRCZWhhdmlvciA9PSBNYXBOb25l
VG9OdWxsICYmIHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCisg
ICAgICAgICAgICB8fCAoaWRlbnRCZWhhdmlvciA9PSBNYXBBdXRvVG9OdWxsICYmIHByaW1pdGl2
ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pKQogICAgICAgICAgICAgc2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgbnVsbEF0b20pOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+
Z2V0U3RyaW5nVmFsdWUoKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLCBwcmltaXRpdmVWYWx1ZS5nZXRTdHJpbmdWYWx1ZSgpKTsKICAgICB9CiAgICAgc3Rh
dGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC00MzcsMTEgKzQz
OCwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0
eWxlLCBMZW5ndGhTaXplIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKShXVEY6Om1v
dmUodmFsdWUpKTsgfQogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUo
dmFsdWUpOwotICAgICAgICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1
ZSgpOworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgUGFpciogcGFpciA9IHByaW1p
dGl2ZVZhbHVlLmdldFBhaXJWYWx1ZSgpOwogICAgICAgICBpZiAoIXBhaXIgfHwgIXBhaXItPmZp
cnN0KCkgfHwgIXBhaXItPnNlY29uZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC01NTIs
MTMgKzU1MywxMyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBGaWxsTGF5ZXIqIGNoaWxkID0g
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5jdGlvbikoKTsKICAgICAg
ICAgRmlsbExheWVyKiBwcmV2aW91c0NoaWxkID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKHZhbHVl
LT5pc1ZhbHVlTGlzdCgpCisgICAgICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkKICNp
ZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKLSAgICAgICAgJiYgIXZhbHVlLT5pc0ltYWdlU2V0VmFs
dWUoKQorICAgICAgICAmJiAhaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4oKnZhbHVlKQogI2VuZGlmCiAg
ICAgICAgICkgewogICAgICAgICAgICAgLy8gV2FsayBlYWNoIHZhbHVlIGFuZCBwdXQgaXQgaW50
byBhIGxheWVyLCBjcmVhdGluZyBuZXcgbGF5ZXJzIGFzIG5lZWRlZC4KLSAgICAgICAgICAgIENT
U1ZhbHVlTGlzdCYgdmFsdWVMaXN0ID0gdG9DU1NWYWx1ZUxpc3QoKnZhbHVlKTsKKyAgICAgICAg
ICAgIENTU1ZhbHVlTGlzdCYgdmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFs
dWUpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlTGlzdC5sZW5n
dGgoKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZCkgewogICAgICAgICAgICAg
ICAgICAgICBwcmV2aW91c0NoaWxkLT5zZXROZXh0KHN0ZDo6bWFrZV91bmlxdWU8RmlsbExheWVy
PihmaWxsTGF5ZXJUeXBlKSk7CkBAIC01OTUsMTIgKzU5NiwxMiBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICAvLyBub3RlOiBDU1NQcm9w
ZXJ0eUxldHRlci9Xb3JkU3BhY2luZyByaWdodCBub3cgc2V0cyB0byB6ZXJvIGlmIGl0J3Mgbm90
IGEgcHJpbWl0aXZlIHZhbHVlIGZvciBzb21lIHJlYXNvbi4uLgotICAgICAgICBpZiAoIXZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPigqdmFsdWUpOwogCi0gICAgICAgIENTU1ZhbHVlSUQgaWRlbnQgPSBwcmltaXRpdmVW
YWx1ZS0+Z2V0VmFsdWVJRCgpOworICAgICAgICBDU1NWYWx1ZUlEIGlkZW50ID0gcHJpbWl0aXZl
VmFsdWUuZ2V0VmFsdWVJRCgpOwogICAgICAgICBUIGxlbmd0aDsKICAgICAgICAgaWYgKG5vcm1h
bEVuYWJsZWQgJiYgaWRlbnQgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKICAgICAgICAgICAgIGxlbmd0
aCA9IDA7CkBAIC02MTUsOSArNjE2LDkgQEAgcHVibGljOgogCiAgICAgICAgICAgICAvLyBBbnkg
b3JpZ2luYWwgcmVzdWx0IHRoYXQgd2FzID49IDEgc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvIGZh
bGwgYmVsb3cgMS4KICAgICAgICAgICAgIC8vIFRoaXMga2VlcHMgYm9yZGVyIGxpbmVzIGZyb20g
dmFuaXNoaW5nLgotICAgICAgICAgICAgbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVM
ZW5ndGg8VD4oY29udmVyc2lvbkRhdGEpOworICAgICAgICAgICAgbGVuZ3RoID0gcHJpbWl0aXZl
VmFsdWUuY29tcHV0ZUxlbmd0aDxUPihjb252ZXJzaW9uRGF0YSk7CiAgICAgICAgICAgICBpZiAo
Y29udmVyc2lvbkRhdGEuem9vbSgpIDwgMS4wZiAmJiBsZW5ndGggPCAxLjApIHsKLSAgICAgICAg
ICAgICAgICBUIG9yaWdpbmFsTGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8
VD4oY29udmVyc2lvbkRhdGEuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpOworICAgICAgICAg
ICAgICAgIFQgb3JpZ2luYWxMZW5ndGggPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPFQ+
KGNvbnZlcnNpb25EYXRhLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpKTsKICAgICAgICAgICAg
ICAgICBpZiAob3JpZ2luYWxMZW5ndGggPj0gMS4wKQogICAgICAgICAgICAgICAgICAgICBsZW5n
dGggPSAxLjA7CiAgICAgICAgICAgICB9CkBAIC02NTQsMTEgKzY1NSwxMSBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPigqdmFsdWUpOwogICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIChmb250RGVzY3Jp
cHRpb24uKnNldHRlckZ1bmN0aW9uKSgqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAoZm9udERl
c2NyaXB0aW9uLipzZXR0ZXJGdW5jdGlvbikocHJpbWl0aXZlVmFsdWUpOwogICAgICAgICBzdHls
ZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAK
QEAgLTY5NywxMCArNjk4LDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAg
ICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgYXV0byYgdmFsdWVMaXN0ID0gdG9DU1NWYWx1ZUxpc3QoKnZhbHVlKTsKKyAgICAg
ICAgYXV0byYgdmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpOwogCiAg
ICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgLy8gQmVmb3JlIG1hcHBpbmcgaW4g
YSBuZXcgZm9udC1mYW1pbHkgcHJvcGVydHksIHdlIHNob3VsZCByZXNldCB0aGUgZ2VuZXJpYyBm
YW1pbHkuCkBAIC03MTIsMTQgKzcxMywxNCBAQCBwdWJsaWM6CiAKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHZhbHVlTGlzdC5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgICAgICBD
U1NWYWx1ZSogaXRlbSA9IHZhbHVlTGlzdC5pdGVtKGkpOwotICAgICAgICAgICAgaWYgKCFpdGVt
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZh
bHVlPigqaXRlbSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogY29udGVudFZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZShpdGVtKTsK
KyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBjb250ZW50VmFsdWUgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pOwogICAgICAgICAgICAgQXRvbWljU3RyaW5nIGZhY2U7
Ci0gICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLT5pc1N0cmluZygpKQotICAgICAgICAgICAg
ICAgIGZhY2UgPSBjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CisgICAgICAgICAgICBp
ZiAoY29udGVudFZhbHVlLmlzU3RyaW5nKCkpCisgICAgICAgICAgICAgICAgZmFjZSA9IGNvbnRl
bnRWYWx1ZS5nZXRTdHJpbmdWYWx1ZSgpOwogICAgICAgICAgICAgZWxzZSBpZiAoU2V0dGluZ3Mq
IHNldHRpbmdzID0gc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKS5zZXR0aW5ncygpKSB7Ci0gICAg
ICAgICAgICAgICAgc3dpdGNoIChjb250ZW50VmFsdWUtPmdldFZhbHVlSUQoKSkgeworICAgICAg
ICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVlLmdldFZhbHVlSUQoKSkgewogICAgICAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRCb2R5OgogICAgICAgICAgICAgICAgICAgICBmYWNl
ID0gc2V0dGluZ3MtPnN0YW5kYXJkRm9udEZhbWlseSgpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTg0MCwxMCArODQxLDEwIEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSk7CiAKICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0S2V5d29yZFNpemUoMCk7CkBAIC04NTYsNyArODU3LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgcGFyZW50SXNBYnNvbHV0ZVNpemUgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgp
LT5mb250RGVzY3JpcHRpb24oKS5pc0Fic29sdXRlU2l6ZSgpOwogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKENTU1ZhbHVlSUQgaWRlbnQgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpKSB7
CisgICAgICAgIGlmIChDU1NWYWx1ZUlEIGlkZW50ID0gcHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJ
RCgpKSB7CiAgICAgICAgICAgICAvLyBLZXl3b3JkcyBhcmUgYmVpbmcgdXNlZC4KICAgICAgICAg
ICAgIHN3aXRjaCAoaWRlbnQpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVYeFNtYWxsOgpA
QCAtODg2LDE1ICs4ODcsMTQgQEAgcHVibGljOgogCiAgICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0SXNBYnNvbHV0ZVNpemUocGFyZW50SXNBYnNvbHV0ZVNpemUgJiYgKGlkZW50ID09IENT
U1ZhbHVlTGFyZ2VyIHx8IGlkZW50ID09IENTU1ZhbHVlU21hbGxlciB8fCBpZGVudCA9PSBDU1NW
YWx1ZVdlYmtpdFJ1YnlUZXh0KSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUocGFyZW50SXNBYnNvbHV0ZVNpemUKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhKHByaW1pdGl2ZVZh
bHVlLT5pc1BlcmNlbnRhZ2UoKSB8fCBwcmltaXRpdmVWYWx1ZS0+aXNGb250UmVsYXRpdmVMZW5n
dGgoKSkpOwotICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7Ci0g
ICAgICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0
PihDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCks
IHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+ZG9jdW1l
bnQoKS5yZW5kZXJWaWV3KCksIDEuMGYsIHRydWUpKTsKLSAgICAgICAgICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdGF0ZSgpLnNldEZvbnRTaXplSGFzVmlld3BvcnRVbml0cyhwcmltaXRpdmVWYWx1
ZS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgICAgICAgICBzaXplID0g
KHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkgKiBwYXJlbnRTaXplKSAvIDEwMC4wZjsK
LSAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50
YWdlV2l0aExlbmd0aCgpKSB7Ci0gICAgICAgICAgICAgICAgUmVmPENhbGN1bGF0aW9uVmFsdWU+
IGNhbGN1bGF0aW9uVmFsdWUgeyBwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPmNyZWF0
ZUNhbGN1bGF0aW9uVmFsdWUoc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpIH07CisgICAgICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUocGFyZW50SXNBYnNvbHV0ZVNpemUgfHwg
IShwcmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSB8fCBwcmltaXRpdmVWYWx1ZS5pc0ZvbnRS
ZWxhdGl2ZUxlbmd0aCgpKSk7CisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNMZW5n
dGgoKSkgeworICAgICAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVu
Z3RoPGZsb2F0PihDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKHN0eWxlUmVzb2x2ZXItPnBhcmVu
dFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZl
ci0+ZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCksIDEuMGYsIHRydWUpKTsKKyAgICAgICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLnNldEZvbnRTaXplSGFzVmlld3BvcnRVbml0cyhwcmlt
aXRpdmVWYWx1ZS5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkpCisgICAgICAgICAgICAgICAg
c2l6ZSA9IChwcmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKCkgKiBwYXJlbnRTaXplKSAvIDEw
MC4wZjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzQ2FsY3VsYXRlZFBl
cmNlbnRhZ2VXaXRoTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBSZWY8Q2FsY3VsYXRpb25W
YWx1ZT4gY2FsY3VsYXRpb25WYWx1ZSB7IHByaW1pdGl2ZVZhbHVlLmNzc0NhbGNWYWx1ZSgpLT5j
cmVhdGVDYWxjdWxhdGlvblZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpKSB9OwogICAgICAgICAg
ICAgICAgIHNpemUgPSBjYWxjdWxhdGlvblZhbHVlLT5ldmFsdWF0ZShwYXJlbnRTaXplKTsKICAg
ICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTkxOSwxMSArOTE5
LDExIEBAIGNsYXNzIEFwcGx5UHJvcGVydHlGb250V2VpZ2h0IHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpOwogICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVS
ZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFs
dWUtPmdldFZhbHVlSUQoKSkgeworICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLmdldFZh
bHVlSUQoKSkgewogICAgICAgICBjYXNlIENTU1ZhbHVlSW52YWxpZDoKICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC05MzQsNyArOTM0LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChmb250RGVz
Y3JpcHRpb24ubGlnaHRlcldlaWdodCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodCgqcHJpbWl0aXZl
VmFsdWUpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChwcmltaXRpdmVW
YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0
aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgfQpAQCAtOTc2LDEzICs5NzYsMTMgQEAgcHVibGlj
OgogICAgICAgICBGb250RGVzY3JpcHRpb246OkxpZ2F0dXJlc1N0YXRlIGRpc2NyZXRpb25hcnlM
aWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU7CiAg
ICAgICAgIEZvbnREZXNjcmlwdGlvbjo6TGlnYXR1cmVzU3RhdGUgaGlzdG9yaWNhbExpZ2F0dXJl
c1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZTsKIAotICAgICAg
ICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlTGlzdCog
dmFsdWVMaXN0ID0gdG9DU1NWYWx1ZUxpc3QodmFsdWUpOwotICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB2YWx1ZUxpc3QtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBDU1NWYWx1ZSogaXRlbSA9IHZhbHVlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAg
ICAgICAgICAgICBpZiAoaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAodG9DU1NQcmltaXRpdmVWYWx1ZShpdGVtKS0+Z2V0VmFsdWVJRCgpKSB7
CisgICAgICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpIHsKKyAgICAgICAgICAgIENT
U1ZhbHVlTGlzdCYgdmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpOwor
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZUxpc3QubGVuZ3RoKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gdmFsdWVMaXN0Lml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soaSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzPENTU1ByaW1pdGl2
ZVZhbHVlPihpdGVtKSk7CisgICAgICAgICAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVl
PigqaXRlbSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKml0ZW0pLmdldFZhbHVlSUQoKSkgewogICAgICAgICAgICAgICAgICAgICBj
YXNlIENTU1ZhbHVlTm9Db21tb25MaWdhdHVyZXM6CiAgICAgICAgICAgICAgICAgICAgICAgICBj
b21tb25MaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNT
dGF0ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTAxMCw4ICsxMDEwLDgg
QEAgcHVibGljOgogICAgICAgICB9CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICAgICAgQVNTRVJUKHRvQ1NTUHJpbWl0aXZlVmFs
dWUodmFsdWUpLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpOworICAgICAgICAgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSkpOworICAgICAgICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCk7CiAgICAgICAgIH0KICNlbmRp
ZgogCkBAIC0xMTU5LDkgKzExNTksOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgYm9vbCBzZXRDb3VudGVySW5jcmVtZW50
VG9Ob25lID0gY291bnRlckJlaGF2aW9yID09IEluY3JlbWVudCAmJiB2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpICYmIHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpLT5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVOb25lOworICAgICAgICBib29sIHNldENvdW50ZXJJbmNyZW1lbnRUb05vbmUgPSBj
b3VudGVyQmVoYXZpb3IgPT0gSW5jcmVtZW50ICYmIGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKSA9
PSBDU1NWYWx1ZU5vbmU7CiAKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSAmJiAh
c2V0Q291bnRlckluY3JlbWVudFRvTm9uZSkKKyAgICAgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+
KCp2YWx1ZSkgJiYgIXNldENvdW50ZXJJbmNyZW1lbnRUb05vbmUpCiAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKQEAgLTExNzcsMTQgKzExNzcsMTQg
QEAgcHVibGljOgogICAgICAgICBpZiAoc2V0Q291bnRlckluY3JlbWVudFRvTm9uZSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHRv
Q1NTVmFsdWVMaXN0KHZhbHVlKTsKLSAgICAgICAgaW50IGxlbmd0aCA9IGxpc3QgPyBsaXN0LT5s
ZW5ndGgoKSA6IDA7CisgICAgICAgIENTU1ZhbHVlTGlzdCYgbGlzdCA9IGRvd25jYXN0PENTU1Zh
bHVlTGlzdD4oKnZhbHVlKTsKKyAgICAgICAgaW50IGxlbmd0aCA9IGxpc3QubGVuZ3RoKCk7CiAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIENT
U1ZhbHVlKiBjdXJyVmFsdWUgPSBsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwotICAg
ICAgICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAg
IENTU1ZhbHVlKiBjdXJyVmFsdWUgPSBsaXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7Cisg
ICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqY3VyclZhbHVlKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgUGFpciogcGFpciA9IHRvQ1NTUHJp
bWl0aXZlVmFsdWUoY3VyclZhbHVlKS0+Z2V0UGFpclZhbHVlKCk7CisgICAgICAgICAgICBQYWly
KiBwYWlyID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpjdXJyVmFsdWUpLmdldFBhaXJW
YWx1ZSgpOwogICAgICAgICAgICAgaWYgKCFwYWlyIHx8ICFwYWlyLT5maXJzdCgpIHx8ICFwYWly
LT5zZWNvbmQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMTIxOSwyNyArMTIx
OSwyNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewog
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5jbGVhckN1cnNvckxpc3QoKTsKLSAgICAg
ICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZUxpc3Qq
IGxpc3QgPSB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSk7Ci0gICAgICAgICAgICBpbnQgbGVuID0gbGlz
dC0+bGVuZ3RoKCk7CisgICAgICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpIHsKKyAg
ICAgICAgICAgIENTU1ZhbHVlTGlzdCYgbGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZh
bHVlKTsKKyAgICAgICAgICAgIGludCBsZW4gPSBsaXN0Lmxlbmd0aCgpOwogICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKEN1cnNvckF1dG8pOwogICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgICAgIENTU1Zh
bHVlKiBpdGVtID0gbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKLSAgICAgICAgICAg
ICAgICBpZiAoaXRlbS0+aXNDdXJzb3JJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSogaW1hZ2UgPSB0b0NTU0N1cnNvckltYWdlVmFsdWUoaXRl
bSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+dXBkYXRlSWZTVkdDdXJzb3JJc1Vz
ZWQoc3R5bGVSZXNvbHZlci0+ZWxlbWVudCgpKSkgLy8gRWxlbWVudHMgd2l0aCBTVkcgY3Vyc29y
cyBhcmUgbm90IGFsbG93ZWQgdG8gc2hhcmUgc3R5bGUuCisgICAgICAgICAgICAgICAgQ1NTVmFs
dWUqIGl0ZW0gPSBsaXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CisgICAgICAgICAgICAg
ICAgaWYgKGlzPENTU0N1cnNvckltYWdlVmFsdWU+KCppdGVtKSkgeworICAgICAgICAgICAgICAg
ICAgICBDU1NDdXJzb3JJbWFnZVZhbHVlJiBpbWFnZSA9IGRvd25jYXN0PENTU0N1cnNvckltYWdl
VmFsdWU+KCppdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlLnVwZGF0ZUlmU1ZH
Q3Vyc29ySXNVc2VkKHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKSkpIC8vIEVsZW1lbnRzIHdpdGgg
U1ZHIGN1cnNvcnMgYXJlIG5vdCBhbGxvd2VkIHRvIHNoYXJlIHN0eWxlLgogICAgICAgICAgICAg
ICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VW5pcXVlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmFkZEN1cnNvcihzdHlsZVJlc29s
dmVyLT5zdHlsZUltYWdlKENTU1Byb3BlcnR5Q3Vyc29yLCBpbWFnZSksIGltYWdlLT5ob3RTcG90
KCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoaXRlbSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+aXNWYWx1ZUlEKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+YWRkQ3Vyc29yKHN0eWxlUmVzb2x2
ZXItPnN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlDdXJzb3IsICZpbWFnZSksIGltYWdlLmhvdFNwb3Qo
KSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKml0
ZW0pKSB7CisgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1ZhbHVlSUQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcihwcmltaXRpdmVWYWx1ZSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgICAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1ZhbHVlSUQoKSAmJiBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5jdXJzb3IoKSAhPSBFQ3Vyc29yKCpwcmltaXRpdmVWYWx1ZSkpCi0gICAgICAgICAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKCpwcmltaXRpdmVWYWx1ZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlz
VmFsdWVJRCgpICYmIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmN1cnNvcigpICE9IEVDdXJzb3Io
cHJpbWl0aXZlVmFsdWUpKQorICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldEN1cnNvcihwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEyNTAs
MTQgKzEyNTAsMTQgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHRBbGlnbiB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgICAg
IEFTU0VSVChwcmltaXRpdmVWYWx1ZS0+aXNWYWx1ZUlEKCkpOworICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKTsKKyAgICAgICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVlLmlzVmFsdWVJRCgpKTsKIAotICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSAhPSBDU1NWYWx1ZVdlYmtpdE1h
dGNoUGFyZW50KQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEFs
aWduKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1
ZUlEKCkgIT0gQ1NTVmFsdWVXZWJraXRNYXRjaFBhcmVudCkKKyAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbihwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIGVs
c2UgaWYgKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigpID09IFRBU1RB
UlQpCiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oc3R5
bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gTEVG
VCA6IFJJR0hUKTsKICAgICAgICAgZWxzZSBpZiAoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUo
KS0+dGV4dEFsaWduKCkgPT0gVEFFTkQpCkBAIC0xMjc5LDggKzEyNzksOCBAQCBwdWJsaWM6CiAg
ICAgICAgIFRleHREZWNvcmF0aW9uIHQgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHREZWNvcmF0
aW9uKCk7CiAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSh2YWx1ZSk7IGkuaGFz
TW9yZSgpOyBpLmFkdmFuY2UoKSkgewogICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZh
bHVlKCk7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpdGVt
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICAgICAgdCB8PSAqdG9DU1NQcmltaXRpdmVW
YWx1ZShpdGVtKTsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KGlzPENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtKSk7CisgICAgICAgICAgICB0IHw9IGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSk7CiAgICAgICAgIH0KICAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0VGV4dERlY29yYXRpb24odCk7CiAgICAgfQpAQCAtMTMyNCwxNCAr
MTMyNCwxNCBAQCBjbGFzcyBBcHBseVByb3BlcnR5VGV4dERlY29yYXRpb25Ta2lwIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICh2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRUZXh0RGVjb3JhdGlvblNraXAodmFsdWVUb0RlY29yYXRpb25Ta2lwKCp0b0NT
U1ByaW1pdGl2ZVZhbHVlKHZhbHVlKSkpOworICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSkpIHsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRl
eHREZWNvcmF0aW9uU2tpcCh2YWx1ZVRvRGVjb3JhdGlvblNraXAoZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAg
ICAgICAgIFRleHREZWNvcmF0aW9uU2tpcCBza2lwID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0
RGVjb3JhdGlvblNraXAoKTsKICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpKHZh
bHVlKTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKQotICAgICAgICAgICAgc2tpcCB8PSB2YWx1
ZVRvRGVjb3JhdGlvblNraXAoKnRvQ1NTUHJpbWl0aXZlVmFsdWUoaS52YWx1ZSgpKSk7CisgICAg
ICAgICAgICBza2lwIHw9IHZhbHVlVG9EZWNvcmF0aW9uU2tpcChkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKmkudmFsdWUoKSkpOwogICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5z
ZXRUZXh0RGVjb3JhdGlvblNraXAoc2tpcCk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhh
bmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC0xMzQ1LDEwICsxMzQ1LDEwIEBAIGNsYXNzIEFwcGx5
UHJvcGVydHlNYXJxdWVlSW5jcmVtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUg
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
JiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwog
ICAgICAgICBMZW5ndGggbWFycXVlZUxlbmd0aChVbmRlZmluZWQpOwogICAgICAgICBzd2l0Y2gg
KHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSkgewogICAgICAgICBjYXNlIENTU1ZhbHVlU21h
bGw6CkBAIC0xMzgwLDE0ICsxMzgwLDE0IEBAIGNsYXNzIEFwcGx5UHJvcGVydHlNYXJxdWVlUmVw
ZXRpdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICgh
aXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09
IENTU1ZhbHVlSW5maW5pdGUpCisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlSW5maW5pdGUpCiAgICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsgLy8g
LTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCi0gICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LT5pc051bWJlcigpKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFy
cXVlZUxvb3BDb3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAgICAgIGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRNYXJxdWVlTG9vcENvdW50KHByaW1pdGl2ZVZhbHVlLmdldEludFZh
bHVlKCkpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIo
KQogICAgIHsKQEAgLTE0MDAsMTEgKzE0MDAsMTEgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eU1hcnF1
ZWVTcGVlZCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICgh
aXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGlmIChDU1NWYWx1ZUlEIGlkZW50ID0gcHJpbWl0aXZlVmFs
dWUtPmdldFZhbHVlSUQoKSkgeworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZl
VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgaWYg
KENTU1ZhbHVlSUQgaWRlbnQgPSBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAgICAg
ICAgICAgIHN3aXRjaCAoaWRlbnQpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbG93Ogog
ICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZCg1
MDApOyAvLyA1MDAgbXNlYy4KQEAgLTE0MTgsMTAgKzE0MTgsMTAgQEAgcHVibGljOgogICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNUaW1lKCkpCi0gICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmNv
bXB1dGVUaW1lPGludCwgQ1NTUHJpbWl0aXZlVmFsdWU6Ok1pbGxpc2Vjb25kcz4oKSk7Ci0gICAg
ICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSAvLyBGb3Igc2Nyb2xsYW1v
dW50IHN1cHBvcnQuCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRNYXJx
dWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOworICAgICAgICB9IGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLmlzVGltZSgpKQorICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVUaW1lPGludCwg
Q1NTUHJpbWl0aXZlVmFsdWU6Ok1pbGxpc2Vjb25kcz4oKSk7CisgICAgICAgIGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlLmlzTnVtYmVyKCkpIC8vIEZvciBzY3JvbGxhbW91bnQgc3VwcG9ydC4KKyAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZChwcmltaXRp
dmVWYWx1ZS5nZXRJbnRWYWx1ZSgpKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxl
ciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xNDM1LDggKzE0MzUsOCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICAvLyBUaGlzIGlz
IHRydWUgaWYgdmFsdWUgaXMgJ2F1dG8nIG9yICdhbHBoYWJldGljJy4KLSAgICAgICAgaWYgKHZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIFRleHRVbmRlcmxpbmVQb3Np
dGlvbiB0ID0gKnRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOworICAgICAgICBpZiAoaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsKKyAgICAgICAgICAgIFRleHRVbmRlcmxpbmVQb3Np
dGlvbiB0ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0VW5kZXJsaW5lUG9zaXRpb24odCk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTE0NDQsOCArMTQ0NCw4IEBAIHB1Ymxp
YzoKICAgICAgICAgdW5zaWduZWQgdCA9IDA7CiAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRl
cmF0b3IgaSh2YWx1ZSk7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewogICAgICAgICAgICAg
Q1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICAgICAg
VGV4dFVuZGVybGluZVBvc2l0aW9uIHQyID0gKnRvQ1NTUHJpbWl0aXZlVmFsdWUoaXRlbSk7Cisg
ICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpczxDU1NQcmltaXRp
dmVWYWx1ZT4oaXRlbSkpOworICAgICAgICAgICAgVGV4dFVuZGVybGluZVBvc2l0aW9uIHQyID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKTsKICAgICAgICAgICAgIHQgfD0gdDI7
CiAgICAgICAgIH0KICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dFVuZGVy
bGluZVBvc2l0aW9uKHN0YXRpY19jYXN0PFRleHRVbmRlcmxpbmVQb3NpdGlvbj4odCkpOwpAQCAt
MTQ2MSwyMiArMTQ2MSwyMiBAQCBjbGFzcyBBcHBseVByb3BlcnR5TGluZUhlaWdodCB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Cisg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogICAgICAgICBMZW5ndGggbGluZUhlaWdodDsKIAotICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkK
KyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1h
bCkKICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWln
aHQoKTsKLSAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpIHsKLSAg
ICAgICAgICAgIGxpbmVIZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5n
dGg+KGNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoKnN0eWxlUmVz
b2x2ZXIpKTsKLSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdl
KCkpIHsKKyAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkgeworICAg
ICAgICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8TGVuZ3Ro
Pihjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29tRmFjdG9yKCpzdHlsZVJlc29s
dmVyKSk7CisgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkp
IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBwZXJjZW50YWdlIHNob3VsZCBub3QgYmUgcmVzdHJp
Y3RlZCB0byBhbiBpbnRlZ2VyIGhlcmUuCi0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3Ro
KChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5jb21wdXRlZEZvbnRTaXplKCkgKiBwcmltaXRpdmVW
YWx1ZS0+Z2V0SW50VmFsdWUoKSkgLyAxMDAsIEZpeGVkKTsKLSAgICAgICAgfSBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgeworICAgICAgICAgICAgbGluZUhlaWdodCA9IExl
bmd0aCgoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y29tcHV0ZWRGb250U2l6ZSgpICogcHJpbWl0
aXZlVmFsdWUuZ2V0SW50VmFsdWUoKSkgLyAxMDAsIEZpeGVkKTsKKyAgICAgICAgfSBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogbnVt
YmVyIGFuZCBwZXJjZW50YWdlIHZhbHVlcyBzaG91bGQgcHJvZHVjZSB0aGUgc2FtZSB0eXBlIG9m
IExlbmd0aCAoaWUuIEZpeGVkIG9yIFBlcmNlbnQpLgotICAgICAgICAgICAgbGluZUhlaWdodCA9
IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSAqIDEwMC4wLCBQZXJjZW50
KTsKKyAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUuZ2V0RG91
YmxlVmFsdWUoKSAqIDEwMC4wLCBQZXJjZW50KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldExpbmVIZWlnaHQo
bGluZUhlaWdodCk7CkBAIC0xNDk0LDI3ICsxNDk0LDI3IEBAIGNsYXNzIEFwcGx5UHJvcGVydHlM
aW5lSGVpZ2h0Rm9ySU9TVGV4dEF1dG9zaXppbmcgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOworICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KTsKICAgICAgICAgTGVuZ3RoIGxpbmVIZWlnaHQ7CiAKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpCisgICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpCiAgICAgICAgICAgICBsaW5l
SGVpZ2h0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCk7Ci0gICAgICAgIGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7Ci0gICAgICAgICAgICBsaW5lSGVpZ2h0
ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjc3N0b0xlbmd0aENvbnZl
cnNpb25EYXRhV2l0aFRleHRab29tRmFjdG9yKCpzdHlsZVJlc29sdmVyKSk7CisgICAgICAgIGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGxpbmVIZWln
aHQgPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY3NzdG9MZW5ndGhDb252
ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3Rvcigqc3R5bGVSZXNvbHZlcikpOwogICAgICAgICAg
ICAgaWYgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnRleHRTaXplQWRqdXN0KCkuaXNQZXJjZW50
YWdlKCkpCiAgICAgICAgICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0aChsaW5lSGVpZ2h0LnZh
bHVlKCkgKiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT50ZXh0U2l6ZUFkanVzdCgpLm11bHRpcGxp
ZXIoKSwgRml4ZWQpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNl
bnRhZ2UoKSkgeworICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFn
ZSgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogcGVyY2VudGFnZSBzaG91bGQgbm90IGJlIHJl
c3RyaWN0ZWQgdG8gYW4gaW50ZWdlciBoZXJlLgotICAgICAgICAgICAgbGluZUhlaWdodCA9IExl
bmd0aCgoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udFNpemUoKSAqIHByaW1pdGl2ZVZhbHVl
LT5nZXRJbnRWYWx1ZSgpKSAvIDEwMCwgRml4ZWQpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLT5pc051bWJlcigpKSB7CisgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3Ro
KChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250U2l6ZSgpICogcHJpbWl0aXZlVmFsdWUuZ2V0
SW50VmFsdWUoKSkgLyAxMDAsIEZpeGVkKTsKKyAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogbnVtYmVyIGFuZCBwZXJj
ZW50YWdlIHZhbHVlcyBzaG91bGQgcHJvZHVjZSB0aGUgc2FtZSB0eXBlIG9mIExlbmd0aCAoaWUu
IEZpeGVkIG9yIFBlcmNlbnQpLgogICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnRleHRTaXplQWRqdXN0KCkuaXNQZXJjZW50YWdlKCkpCi0gICAgICAgICAgICAgICAgbGlu
ZUhlaWdodCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSAqIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnRleHRTaXplQWRqdXN0KCkubXVsdGlwbGllcigpICogMTAwLjAs
IFBlcmNlbnQpOworICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZl
VmFsdWUuZ2V0RG91YmxlVmFsdWUoKSAqIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnRleHRTaXpl
QWRqdXN0KCkubXVsdGlwbGllcigpICogMTAwLjAsIFBlcmNlbnQpOwogICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdl
dERvdWJsZVZhbHVlKCkgKiAxMDAuMCwgUGVyY2VudCk7CisgICAgICAgICAgICAgICAgbGluZUhl
aWdodCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS5nZXREb3VibGVWYWx1ZSgpICogMTAwLjAsIFBl
cmNlbnQpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TGluZUhlaWdodChsaW5lSGVpZ2h0KTsKQEAgLTE1NDQs
MjAgKzE1NDQsMjAgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eVdvcmRTcGFjaW5nIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgIExlbmd0aCB3b3JkU3BhY2luZzsKIAotICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkKKyAg
ICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkK
ICAgICAgICAgICAgIHdvcmRTcGFjaW5nID0gUmVuZGVyU3R5bGU6OmluaXRpYWxXb3JkU3BhY2lu
ZygpOwotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewotICAg
ICAgICAgICAgd29yZFNwYWNpbmcgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5n
dGg+KGNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoKnN0eWxlUmVz
b2x2ZXIpKTsKLSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdl
KCkpCi0gICAgICAgICAgICB3b3JkU3BhY2luZyA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0
RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7Ci0gICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LT5pc051bWJlcigpKQotICAgICAgICAgICAgd29yZFNwYWNpbmcgPSBMZW5ndGgocHJpbWl0aXZl
VmFsdWUtPmdldERvdWJsZVZhbHVlKCksIEZpeGVkKTsKKyAgICAgICAgZWxzZSBpZiAocHJpbWl0
aXZlVmFsdWUuaXNMZW5ndGgoKSkgeworICAgICAgICAgICAgd29yZFNwYWNpbmcgPSBwcmltaXRp
dmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdp
dGhUZXh0Wm9vbUZhY3Rvcigqc3R5bGVSZXNvbHZlcikpOworICAgICAgICB9IGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpKQorICAgICAgICAgICAgd29yZFNwYWNpbmcgPSBM
ZW5ndGgocHJpbWl0aXZlVmFsdWUuZ2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CisgICAgICAg
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgICAgICB3b3JkU3Bh
Y2luZyA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS5nZXREb3VibGVWYWx1ZSgpLCBGaXhlZCk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0V29yZFNwYWNpbmcod29yZFNwYWNpbmcpOwpAQCAtMTY2NywyMSArMTY2Nywy
MSBAQCBwdWJsaWM6CiAgICAgICAgIHN3aXRjaCAoaW5zcGVjdG9yLmxlbmd0aCgpKSB7CiAgICAg
ICAgIGNhc2UgMjogewogICAgICAgICAgICAgLy8gPGxlbmd0aD57Mn0gfCA8cGFnZS1zaXplPiA8
b3JpZW50YXRpb24+Ci0gICAgICAgICAgICBpZiAoIWluc3BlY3Rvci5maXJzdCgpLT5pc1ByaW1p
dGl2ZVZhbHVlKCkgfHwgIWluc3BlY3Rvci5zZWNvbmQoKS0+aXNQcmltaXRpdmVWYWx1ZSgpKQor
ICAgICAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmluc3BlY3Rvci5maXJzdCgp
KSB8fCAhaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppbnNwZWN0b3Iuc2Vjb25kKCkpKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdCA9
IHRvQ1NTUHJpbWl0aXZlVmFsdWUoaW5zcGVjdG9yLmZpcnN0KCkpOwotICAgICAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHNlY29uZCA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoaW5zcGVjdG9yLnNl
Y29uZCgpKTsKLSAgICAgICAgICAgIGlmIChmaXJzdC0+aXNMZW5ndGgoKSkgeworICAgICAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGZpcnN0ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCppbnNwZWN0b3IuZmlyc3QoKSk7CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgc2Vj
b25kID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppbnNwZWN0b3Iuc2Vjb25kKCkpOwor
ICAgICAgICAgICAgaWYgKGZpcnN0LmlzTGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICAvLyA8
bGVuZ3RoPnsyfQotICAgICAgICAgICAgICAgIGlmICghc2Vjb25kLT5pc0xlbmd0aCgpKQorICAg
ICAgICAgICAgICAgIGlmICghc2Vjb25kLmlzTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZl
cnNpb25EYXRhID0gc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25E
YXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZik7Ci0gICAgICAgICAgICAgICAgd2lkdGgg
PSBmaXJzdC0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKLSAgICAgICAg
ICAgICAgICBoZWlnaHQgPSBzZWNvbmQtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJzaW9u
RGF0YSk7CisgICAgICAgICAgICAgICAgd2lkdGggPSBmaXJzdC5jb21wdXRlTGVuZ3RoPExlbmd0
aD4oY29udmVyc2lvbkRhdGEpOworICAgICAgICAgICAgICAgIGhlaWdodCA9IHNlY29uZC5jb21w
dXRlTGVuZ3RoPExlbmd0aD4oY29udmVyc2lvbkRhdGEpOwogICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAvLyA8cGFnZS1zaXplPiA8b3JpZW50YXRpb24+CiAgICAgICAgICAg
ICAgICAgLy8gVGhlIHZhbHVlIG9yZGVyIGlzIGd1YXJhbnRlZWQuIFNlZSBDU1NQYXJzZXI6OnBh
cnNlU2l6ZVBhcmFtZXRlci4KLSAgICAgICAgICAgICAgICBpZiAoIWdldFBhZ2VTaXplRnJvbU5h
bWUoZmlyc3QsIHNlY29uZCwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICAgICAgaWYgKCFn
ZXRQYWdlU2l6ZUZyb21OYW1lKCZmaXJzdCwgJnNlY29uZCwgd2lkdGgsIGhlaWdodCkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHBhZ2VT
aXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsKQEAgLTE2ODksMTUgKzE2ODksMTUgQEAgcHVi
bGljOgogICAgICAgICB9CiAgICAgICAgIGNhc2UgMTogewogICAgICAgICAgICAgLy8gPGxlbmd0
aD4gfCBhdXRvIHwgPHBhZ2Utc2l6ZT4gfCBbIHBvcnRyYWl0IHwgbGFuZHNjYXBlXQotICAgICAg
ICAgICAgaWYgKCFpbnNwZWN0b3IuZmlyc3QoKS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAg
ICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmluc3BlY3Rvci5maXJzdCgpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGluc3BlY3Rvci5maXJzdCgpKTsKLSAg
ICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgeworICAgICAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCppbnNwZWN0b3IuZmlyc3QoKSk7CisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUuaXNMZW5ndGgoKSkgewogICAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+CiAgICAgICAgICAg
ICAgICAgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX1JFU09MVkVEOwotICAgICAgICAgICAgICAg
IHdpZHRoID0gaGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihz
dHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0
aEFkanVzdGVkWm9vbSgxLjBmKSk7CisgICAgICAgICAgICAgICAgd2lkdGggPSBoZWlnaHQgPSBw
cmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3RhdGUo
KS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikp
OwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2
ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2
ZVZhbHVlLmdldFZhbHVlSUQoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVBdXRvOgpA
QCAtMTcxMiw3ICsxNzEyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgICAgIC8vIDxwYWdlLXNpemU+CiAgICAgICAgICAgICAgICAgICAgIHBh
Z2VTaXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFnZXRQYWdlU2l6ZUZyb21OYW1lKHByaW1pdGl2ZVZhbHVlLCAwLCB3aWR0aCwgaGVpZ2h0KSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFnZXRQYWdlU2l6ZUZyb21OYW1lKCZwcmltaXRpdmVW
YWx1ZSwgbnVsbHB0ciwgd2lkdGgsIGhlaWdodCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTc0NSw0NSArMTc0
NSw0NSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7
Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewotICAgICAgICAgICAgQ1NTVmFs
dWVMaXN0KiBsaXN0ID0gdG9DU1NWYWx1ZUxpc3QodmFsdWUpOwotICAgICAgICAgICAgQVNTRVJU
KGxpc3QtPmxlbmd0aCgpID09IDIpOwotICAgICAgICAgICAgaWYgKGxpc3QtPmxlbmd0aCgpICE9
IDIpCisgICAgICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpIHsKKyAgICAgICAgICAg
IENTU1ZhbHVlTGlzdCYgbGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKKyAg
ICAgICAgICAgIEFTU0VSVChsaXN0Lmxlbmd0aCgpID09IDIpOworICAgICAgICAgICAgaWYgKGxp
c3QubGVuZ3RoKCkgIT0gMikKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgQ1NTVmFs
dWUqIGl0ZW0gPSBsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwotICAgICAgICAgICAg
ICAgIGlmICghaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgICAgIENTU1Zh
bHVlKiBpdGVtID0gbGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAgICAg
ICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKSkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUg
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGl0ZW0pOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlRmlsbGVkIHx8IHZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVPcGVuKQotICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRUZXh0RW1waGFzaXNGaWxsKCp2YWx1ZSk7CisgICAgICAgICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUmIHZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKTsKKyAg
ICAgICAgICAgICAgICBpZiAodmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlRmlsbGVkIHx8
IHZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU9wZW4pCisgICAgICAgICAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwodmFsdWUpOwogICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyaygqdmFsdWUpOworICAgICAgICAgICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKHZhbHVlKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBo
YXNpc0N1c3RvbU1hcmsobnVsbEF0b20pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAo
IWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKHZhbHVlKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAKLSAgICAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlLT5pc1N0cmluZygpKSB7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1N0
cmluZygpKSB7CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1w
aGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQpOwogICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJrQ3VzdG9t
KTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1
c3RvbU1hcmsocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhwcmltaXRp
dmVWYWx1ZS5nZXRTdHJpbmdWYWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3Rv
bU1hcmsobnVsbEF0b20pOwogCi0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJ
RCgpID09IENTU1ZhbHVlRmlsbGVkIHx8IHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVPcGVuKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRU
ZXh0RW1waGFzaXNGaWxsKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgIGlmIChwcmltaXRpdmVW
YWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVGaWxsZWQgfHwgcHJpbWl0aXZlVmFsdWUuZ2V0
VmFsdWVJRCgpID09IENTU1ZhbHVlT3BlbikgeworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFRleHRFbXBoYXNp
c01hcmtBdXRvKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoVGV4dEVtcGhhc2lzRmlsbEZpbGxlZCk7Ci0g
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKCpw
cmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRU
ZXh0RW1waGFzaXNNYXJrKHByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
MTgxNSwxNCArMTgxNSwxNCBAQCBjbGFzcyBBcHBseVByb3BlcnR5VGV4dEVtcGhhc2lzUG9zaXRp
b24gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAg
ICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc1Bvc2l0aW9uKHZhbHVlVG9FbXBoYXNp
c1Bvc2l0aW9uKCp0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKSkpOworICAgICAgICBpZiAoaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldFRleHRFbXBoYXNpc1Bvc2l0aW9uKHZhbHVlVG9FbXBoYXNpc1Bvc2l0aW9u
KGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAogICAgICAgICBUZXh0RW1waGFzaXNQb3NpdGlvbiBwb3NpdGlvbiA9
IDA7CiAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSh2YWx1ZSk7IGkuaGFzTW9y
ZSgpOyBpLmFkdmFuY2UoKSkKLSAgICAgICAgICAgIHBvc2l0aW9uIHw9IHZhbHVlVG9FbXBoYXNp
c1Bvc2l0aW9uKCp0b0NTU1ByaW1pdGl2ZVZhbHVlKGkudmFsdWUoKSkpOworICAgICAgICAgICAg
cG9zaXRpb24gfD0gdmFsdWVUb0VtcGhhc2lzUG9zaXRpb24oZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCppLnZhbHVlKCkpKTsKICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0
VGV4dEVtcGhhc2lzUG9zaXRpb24ocG9zaXRpb24pOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVy
dHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtMTkzNSwxMyArMTkzNSwxMyBAQCBjbGFzcyBB
cHBseVByb3BlcnR5UmVzaXplIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAg
ICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NT
U1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1p
dGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAKICAgICAg
ICAgRVJlc2l6ZSByID0gUkVTSVpFX05PTkU7Ci0gICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFs
dWUtPmdldFZhbHVlSUQoKSkgeworICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLmdldFZh
bHVlSUQoKSkgewogICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IGNhc2UgQ1NTVmFsdWVBdXRvOgpAQCAtMTk0OSw3ICsxOTQ5LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIHIgPSBzZXR0aW5ncy0+dGV4dEFyZWFzQXJlUmVzaXphYmxlKCkgPyBSRVNJWkVf
Qk9USCA6IFJFU0laRV9OT05FOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByID0gKnByaW1pdGl2ZVZhbHVlOworICAgICAgICAgICAgciA9IHByaW1p
dGl2ZVZhbHVlOwogICAgICAgICB9CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dFJlc2l6ZShyKTsKICAgICB9CkBAIC0xOTY1LDE1ICsxOTY1LDE1IEBAIGNsYXNzIEFwcGx5UHJv
cGVydHlWZXJ0aWNhbEFsaWduIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAg
ICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NT
U1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1p
dGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAKLSAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpCi0gICAgICAgICAgICByZXR1cm4g
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbigqcHJpbWl0aXZlVmFsdWUp
OworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpKQorICAgICAgICAgICAg
cmV0dXJuIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFZlcnRpY2FsQWxpZ24ocHJpbWl0aXZl
VmFsdWUpOwogCi0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFZlcnRpY2FsQWxp
Z25MZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252
ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3R5bGVS
ZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpKTsKKyAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbkxlbmd0aChwcmltaXRpdmVW
YWx1ZS5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252
ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0eWxlUmVzb2x2ZXItPnN0YXRlKCkuY3Nz
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5
SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTIwMDMsMjYgKzIwMDMsMjYgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAodmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAgIGlm
IChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSk7CiAKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09
IENTU1ZhbHVlQXV0bykKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlE
KCkgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICAgICAgICAgIHJldHVybiBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb1R5cGUoQXNwZWN0UmF0aW9BdXRvKTsKLSAgICAgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlRnJvbURpbWVu
c2lvbnMpCisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENT
U1ZhbHVlRnJvbURpbWVuc2lvbnMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvVHlwZShBc3BlY3RSYXRpb0Zyb21EaW1lbnNpb25z
KTsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1Zh
bHVlRnJvbUludHJpbnNpYykKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1
ZUlEKCkgPT0gQ1NTVmFsdWVGcm9tSW50cmluc2ljKQogICAgICAgICAgICAgICAgIHJldHVybiBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb1R5cGUoQXNwZWN0UmF0aW9Gcm9t
SW50cmluc2ljKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghdmFsdWUtPmlzQXNwZWN0UmF0
aW9WYWx1ZSgpKSB7CisgICAgICAgIGlmICghaXM8Q1NTQXNwZWN0UmF0aW9WYWx1ZT4oKnZhbHVl
KSkgewogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9U
eXBlKEFzcGVjdFJhdGlvQXV0byk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBDU1NBc3BlY3RSYXRpb1ZhbHVlKiBhc3BlY3RSYXRpb1ZhbHVlID0gdG9DU1NBc3Bl
Y3RSYXRpb1ZhbHVlKHZhbHVlKTsKKyAgICAgICAgQ1NTQXNwZWN0UmF0aW9WYWx1ZSYgYXNwZWN0
UmF0aW9WYWx1ZSA9IGRvd25jYXN0PENTU0FzcGVjdFJhdGlvVmFsdWU+KCp2YWx1ZSk7CiAgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvVHlwZShBc3BlY3RSYXRp
b1NwZWNpZmllZCk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJh
dGlvRGVub21pbmF0b3IoYXNwZWN0UmF0aW9WYWx1ZS0+ZGVub21pbmF0b3JWYWx1ZSgpKTsKLSAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3IoYXNw
ZWN0UmF0aW9WYWx1ZS0+bnVtZXJhdG9yVmFsdWUoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldEFzcGVjdFJhdGlvRGVub21pbmF0b3IoYXNwZWN0UmF0aW9WYWx1ZS5kZW5v
bWluYXRvclZhbHVlKCkpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3Bl
Y3RSYXRpb051bWVyYXRvcihhc3BlY3RSYXRpb1ZhbHVlLm51bWVyYXRvclZhbHVlKCkpOwogICAg
IH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC0yMDU0
LDI2ICsyMDU0LDI2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04odmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOworICAgICAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTihpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKKyAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRW
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkgewogICAgICAgICAgICAgcmVzZXRFZmZl
Y3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0
Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVJlc2V0KSB7CisgICAgICAgIH0g
ZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlUmVzZXQpIHsK
ICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEVmZmVjdGl2ZVpvb20oUmVuZGVyU3R5bGU6
OmluaXRpYWxab29tKCkpOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9vbShSZW5k
ZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZURvY3VtZW50KSB7CisgICAgICAgIH0gZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlRG9jdW1lbnQpIHsKICAg
ICAgICAgICAgIGZsb2F0IGRvY1pvb20gPSBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxl
KCkgPyBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCktPnpvb20oKSA6IFJlbmRlclN0
eWxlOjppbml0aWFsWm9vbSgpOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0RWZmZWN0
aXZlWm9vbShkb2Nab29tKTsKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oZG9j
Wm9vbSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgp
KSB7CisgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkpIHsK
ICAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKLSAgICAgICAg
ICAgIGlmIChmbG9hdCBwZXJjZW50ID0gcHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSkK
KyAgICAgICAgICAgIGlmIChmbG9hdCBwZXJjZW50ID0gcHJpbWl0aXZlVmFsdWUuZ2V0RmxvYXRW
YWx1ZSgpKQogICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20ocGVyY2VudCAv
IDEwMC4wZik7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkp
IHsKKyAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpKSB7CiAgICAg
ICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgICAgICBp
ZiAoZmxvYXQgbnVtYmVyID0gcHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSkKKyAgICAg
ICAgICAgIGlmIChmbG9hdCBudW1iZXIgPSBwcmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKCkp
CiAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9vbShudW1iZXIpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMjEwOCwxMCArMjEwOCwxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkK
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBFRGlzcGxheSBkaXNwbGF5ID0gKnRvQ1NT
UHJpbWl0aXZlVmFsdWUodmFsdWUpOworICAgICAgICBFRGlzcGxheSBkaXNwbGF5ID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAKICAgICAgICAgaWYgKCFpc1ZhbGlkRGlz
cGxheVZhbHVlKHN0eWxlUmVzb2x2ZXIsIGRpc3BsYXkpKQogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMjEzMSw4ICsyMTMxLDggQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJl
bmRlclN0eWxlKiBzdHlsZSwgUGFzc1JlZlB0cjxDbGlwUGF0aE9wZXJhdGlvbj4gdmFsdWUpIHsg
KHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQogICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
IHsKLSAgICAgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSgqdmFsdWUpOworICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsK
KyAgICAgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJ
RCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLCAwKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLnBy
aW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewpAQCAtMjE0Mywx
MyArMjE0MywxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAg
aWYgKCFpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIENTU0JveFR5cGUgcmVmZXJlbmNlQm94ID0gQm94TWlzc2luZzsKICAgICAgICAgUmVmUHRy
PENsaXBQYXRoT3BlcmF0aW9uPiBvcGVyYXRpb247Ci0gICAgICAgIGF1dG8mIHZhbHVlTGlzdCA9
IHRvQ1NTVmFsdWVMaXN0KCp2YWx1ZSk7CisgICAgICAgIGF1dG8mIHZhbHVlTGlzdCA9IGRvd25j
YXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHZhbHVlTGlzdC5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvJiBwcmltaXRp
dmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVlTGlzdC5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKGkpKTsKKyAgICAgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZUxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7
CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNTaGFwZSgpICYmICFvcGVyYXRpb24p
CiAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gU2hhcGVDbGlwUGF0aE9wZXJhdGlvbjo6Y3Jl
YXRlKGJhc2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEoKSwgcHJpbWl0aXZlVmFsdWUuZ2V0U2hhcGVWYWx1ZSgpKSk7CiAgICAg
ICAgICAgICBlbHNlIGlmICgocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVl
Q29udGVudEJveApAQCAtMjE4NiwyNiArMjE4NiwyNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZv
aWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBQYXNzUmVmUHRyPFNoYXBlVmFsdWU+IHZh
bHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KICAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykKKyAgICAgICAgaWYg
KGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSB7CisgICAgICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKTsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NT
VmFsdWVBdXRvKQogICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCksIDApOwogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ltYWdlVmFsdWUoKSB8fCB2YWx1
ZS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkgfHwgdmFsdWUtPmlzSW1hZ2VTZXRWYWx1ZSgpKSB7
CiAgICAgICAgICAgICBSZWZQdHI8U2hhcGVWYWx1ZT4gc2hhcGUgPSBTaGFwZVZhbHVlOjpjcmVh
dGVJbWFnZVZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1hZ2UocHJvcGVydHksIHZhbHVlKSk7
CiAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzaGFwZS5yZWxl
YXNlKCkpOwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CisgICAg
ICAgIH0gZWxzZSBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7CiAgICAgICAgICAgICBS
ZWZQdHI8QmFzaWNTaGFwZT4gc2hhcGU7CiAgICAgICAgICAgICBDU1NCb3hUeXBlIHJlZmVyZW5j
ZUJveCA9IEJveE1pc3Npbmc7Ci0gICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9
IHRvQ1NTVmFsdWVMaXN0KHZhbHVlKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB2YWx1ZUxpc3QtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlTGlz
dC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlLT5pc1NoYXBlKCkpCi0gICAgICAgICAgICAgICAgICAgIHNoYXBlID0gYmFzaWNT
aGFwZUZvclZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVWYWx1ZSgpKTsKLSAgICAgICAgICAgICAg
ICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ29udGVu
dEJveAotICAgICAgICAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgp
ID09IENTU1ZhbHVlQm9yZGVyQm94Ci0gICAgICAgICAgICAgICAgICAgIHx8IHByaW1pdGl2ZVZh
bHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVQYWRkaW5nQm94Ci0gICAgICAgICAgICAgICAg
ICAgIHx8IHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVNYXJnaW5Cb3gp
Ci0gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUJveCA9IENTU0JveFR5cGUoKnByaW1pdGl2
ZVZhbHVlKTsKKyAgICAgICAgICAgIENTU1ZhbHVlTGlzdCYgdmFsdWVMaXN0ID0gZG93bmNhc3Q8
Q1NTVmFsdWVMaXN0PigqdmFsdWUpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHZhbHVlTGlzdC5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZUxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7CisgICAgICAgICAgICAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlLmlzU2hhcGUoKSkKKyAgICAgICAgICAgICAgICAgICAgc2hhcGUgPSBi
YXNpY1NoYXBlRm9yVmFsdWUoc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCksIHByaW1pdGl2ZVZhbHVlLmdldFNoYXBlVmFsdWUoKSk7CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ29u
dGVudEJveAorICAgICAgICAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlE
KCkgPT0gQ1NTVmFsdWVCb3JkZXJCb3gKKyAgICAgICAgICAgICAgICAgICAgfHwgcHJpbWl0aXZl
VmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlUGFkZGluZ0JveAorICAgICAgICAgICAgICAg
ICAgICB8fCBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVNYXJnaW5Cb3gp
CisgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUJveCA9IENTU0JveFR5cGUocHJpbWl0aXZl
VmFsdWUpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQpAQCAtMjI0NSwyMyArMjI0NSwyMyBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlz
VmFsdWVMaXN0KCkpCisgICAgICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9IHRvQ1NT
VmFsdWVMaXN0KHZhbHVlKTsKKyAgICAgICAgQ1NTVmFsdWVMaXN0JiB2YWx1ZUxpc3QgPSBkb3du
Y2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CiAgICAgICAgIEltYWdlUmVzb2x1dGlvblNvdXJj
ZSBzb3VyY2UgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNvdXJjZSgpOwog
ICAgICAgICBJbWFnZVJlc29sdXRpb25TbmFwIHNuYXAgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbElt
YWdlUmVzb2x1dGlvblNuYXAoKTsKICAgICAgICAgZG91YmxlIHJlc29sdXRpb24gPSBSZW5kZXJT
dHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvbigpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHZhbHVlTGlzdC0+bGVuZ3RoKCk7IGkrKykgewotICAgICAgICAgICAgQ1NTVmFsdWUq
IGl0ZW0gPSB2YWx1ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7Ci0gICAgICAgICAg
ICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB2YWx1ZUxpc3QubGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgQ1NTVmFsdWUq
IGl0ZW0gPSB2YWx1ZUxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAgICAgICAg
IGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUoaXRlbSk7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUt
PmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUZyb21JbWFnZSkKKyAgICAgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
aXRlbSk7CisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENT
U1ZhbHVlRnJvbUltYWdlKQogICAgICAgICAgICAgICAgIHNvdXJjZSA9IEltYWdlUmVzb2x1dGlv
bkZyb21JbWFnZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1
ZUlEKCkgPT0gQ1NTVmFsdWVTbmFwKQorICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlU25hcCkKICAgICAgICAgICAgICAgICBzbmFwID0g
SW1hZ2VSZXNvbHV0aW9uU25hcFBpeGVsczsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICByZXNvbHV0aW9uID0gcHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfRFBQWCk7CisgICAgICAgICAgICAgICAgcmVzb2x1dGlvbiA9IHByaW1p
dGl2ZVZhbHVlLmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQWCk7CiAg
ICAgICAgIH0KICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0
aW9uU291cmNlKHNvdXJjZSk7CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldElt
YWdlUmVzb2x1dGlvblNuYXAoc25hcCk7CkBAIC0yMjk3LDcgKzIyOTcsNyBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFs
dWUtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUp
KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIExlbmd0aCBsZW5ndGhPclBlcmNlbnRh
Z2VWYWx1ZTsKQEAgLTIzMDUsMTkgKzIzMDUsMTkgQEAgcHVibGljOgogICAgICAgICBUZXh0SW5k
ZW50TGluZSB0ZXh0SW5kZW50TGluZVZhbHVlID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5k
ZW50TGluZSgpOwogICAgICAgICBUZXh0SW5kZW50VHlwZSB0ZXh0SW5kZW50VHlwZVZhbHVlID0g
UmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5kZW50VHlwZSgpOwogI2VuZGlmCi0gICAgICAgIENT
U1ZhbHVlTGlzdCogdmFsdWVMaXN0ID0gdG9DU1NWYWx1ZUxpc3QodmFsdWUpOwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlTGlzdC0+bGVuZ3RoKCk7ICsraSkgewotICAgICAg
ICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSB2YWx1ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
aSk7Ci0gICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAg
Q1NTVmFsdWVMaXN0JiB2YWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVMaXN0Lmxlbmd0aCgpOyArK2kp
IHsKKyAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gdmFsdWVMaXN0Lml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soaSk7CisgICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaXRl
bSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoaXRlbSk7Ci0gICAg
ICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpCi0gICAgICAgICAgICAg
ICAgbGVuZ3RoT3JQZXJjZW50YWdlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVu
Z3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0
ZWRDb252ZXJzaW9uPihzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEoKSk7CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pOworICAgICAgICAgICAgaWYgKCFw
cmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpCisgICAgICAgICAgICAgICAgbGVuZ3RoT3JQZXJj
ZW50YWdlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2Vy
Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0
eWxlUmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKICNpZiBF
TkFCTEUoQ1NTM19URVhUKQotICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdl
dFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdlYmtpdEVhY2hMaW5lKQorICAgICAgICAgICAgZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Via2l0RWFjaExpbmUp
CiAgICAgICAgICAgICAgICAgdGV4dEluZGVudExpbmVWYWx1ZSA9IFRleHRJbmRlbnRFYWNoTGlu
ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVXZWJraXRIYW5naW5nKQorICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Via2l0SGFuZ2luZykKICAgICAgICAgICAgICAg
ICB0ZXh0SW5kZW50VHlwZVZhbHVlID0gVGV4dEluZGVudEhhbmdpbmc7CiAjZW5kaWYKICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhTGlzdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAppbmRleCA5NDQ1MDg2M2YxYjkzYWM2YTczNTg5
NmIyY2E5MmIxZmZiZGVhNGFmLi5lZTY2NzEyMDQyNDI2MGU4ZGIzNWY1MjI4YTNlNDVlYWMxMzIz
MjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcApAQCAtMzMyLDEwICszMzIsMTAgQEAgdm9p
ZCByZXBvcnRNZWRpYVF1ZXJ5V2FybmluZ0lmTmVlZGVkKERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgTWVkaWFRdWVyeVNldCogbWUKICAgICAgICAgICAgICAgICBjb25zdCBNZWRpYVF1ZXJ5RXhw
KiBleHAgPSBleHByZXNzaW9ucy5hdChqKS5nZXQoKTsKICAgICAgICAgICAgICAgICBpZiAoZXhw
LT5tZWRpYUZlYXR1cmUoKSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6cmVzb2x1dGlvbk1lZGlhRmVh
dHVyZSB8fCBleHAtPm1lZGlhRmVhdHVyZSgpID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhfcmVz
b2x1dGlvbk1lZGlhRmVhdHVyZSB8fCBleHAtPm1lZGlhRmVhdHVyZSgpID09IE1lZGlhRmVhdHVy
ZU5hbWVzOjptaW5fcmVzb2x1dGlvbk1lZGlhRmVhdHVyZSkgewogICAgICAgICAgICAgICAgICAg
ICBDU1NWYWx1ZSogY3NzVmFsdWUgPSAgZXhwLT52YWx1ZSgpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoY3NzVmFsdWUgJiYgY3NzVmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9D
U1NQcmltaXRpdmVWYWx1ZShjc3NWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzRG90c1BlckluY2goKSB8fCBwcmltaXRpdmVWYWx1ZS0+aXNEb3Rz
UGVyQ2VudGltZXRlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJlc29sdXRp
b25XYXJuaW5nTWVzc2FnZVRvQ29uc29sZShkb2N1bWVudCwgbWVkaWFRdWVyeVNldC0+bWVkaWFU
ZXh0KCksIHByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPENTU1By
aW1pdGl2ZVZhbHVlPihjc3NWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqY3NzVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LmlzRG90c1BlckluY2goKSB8fCBwcmltaXRpdmVWYWx1ZS5pc0RvdHNQZXJDZW50aW1ldGVyKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUmVzb2x1dGlvbldhcm5pbmdNZXNzYWdl
VG9Db25zb2xlKGRvY3VtZW50LCBtZWRpYVF1ZXJ5U2V0LT5tZWRpYVRleHQoKSwgJnByaW1pdGl2
ZVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVh
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAppbmRl
eCBlMThiOTExNDA1ZmE2N2Q4YmY2NmUxMTE3OWIxNWJkYmE2YmQ0NDVmLi4xNjJjNThlZWIwYTcy
ODliYjI4N2QxZGZmNWYwNDA0ZjRiM2ZjYzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlh
UXVlcnlFdmFsdWF0b3IuY3BwCkBAIC0xODYsOSArMTg2LDkgQEAgYm9vbCBjb21wYXJlVmFsdWUo
VCBhLCBUIGIsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIAogc3RhdGljIGJvb2wgY29tcGFyZUFz
cGVjdFJhdGlvVmFsdWUoQ1NTVmFsdWUqIHZhbHVlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIE1l
ZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKLSAgICBpZiAodmFsdWUtPmlzQXNwZWN0UmF0aW9WYWx1
ZSgpKSB7Ci0gICAgICAgIENTU0FzcGVjdFJhdGlvVmFsdWUqIGFzcGVjdFJhdGlvID0gdG9DU1NB
c3BlY3RSYXRpb1ZhbHVlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVWYWx1ZSh3aWR0
aCAqIHN0YXRpY19jYXN0PGludD4oYXNwZWN0UmF0aW8tPmRlbm9taW5hdG9yVmFsdWUoKSksIGhl
aWdodCAqIHN0YXRpY19jYXN0PGludD4oYXNwZWN0UmF0aW8tPm51bWVyYXRvclZhbHVlKCkpLCBv
cCk7CisgICAgaWYgKGlzPENTU0FzcGVjdFJhdGlvVmFsdWU+KCp2YWx1ZSkpIHsKKyAgICAgICAg
Q1NTQXNwZWN0UmF0aW9WYWx1ZSYgYXNwZWN0UmF0aW8gPSBkb3duY2FzdDxDU1NBc3BlY3RSYXRp
b1ZhbHVlPigqdmFsdWUpOworICAgICAgICByZXR1cm4gY29tcGFyZVZhbHVlKHdpZHRoICogc3Rh
dGljX2Nhc3Q8aW50Pihhc3BlY3RSYXRpby5kZW5vbWluYXRvclZhbHVlKCkpLCBoZWlnaHQgKiBz
dGF0aWNfY2FzdDxpbnQ+KGFzcGVjdFJhdGlvLm51bWVyYXRvclZhbHVlKCkpLCBvcCk7CiAgICAg
fQogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTk2LDkgKzE5Niw5IEBAIHN0YXRpYyBib29sIGNv
bXBhcmVBc3BlY3RSYXRpb1ZhbHVlKENTU1ZhbHVlKiB2YWx1ZSwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCBNZWRpCiAKIHN0YXRpYyBib29sIG51bWJlclZhbHVlKENTU1ZhbHVlKiB2YWx1ZSwgZmxv
YXQmIHJlc3VsdCkKIHsKLSAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKQotICAgICAg
ICAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+aXNOdW1iZXIoKSkgewotICAgICAgICBy
ZXN1bHQgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+Z2V0RmxvYXRWYWx1ZShDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpCisgICAgICAgICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlz
TnVtYmVyKCkpIHsKKyAgICAgICAgcmVzdWx0ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSkuZ2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNDYsOCAr
MjQ2LDggQEAgc3RhdGljIGJvb2wgb3JpZW50YXRpb25NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVl
KiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXIKIAogICAgIGludCB3aWR0aCA9IHZpZXct
PmxheW91dFdpZHRoKCk7CiAgICAgaW50IGhlaWdodCA9IHZpZXctPmxheW91dEhlaWdodCgpOwot
ICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgIGNv
bnN0IENTU1ZhbHVlSUQgaWQgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+Z2V0VmFsdWVJ
RCgpOworICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CisgICAgICAgIGNv
bnN0IENTU1ZhbHVlSUQgaWQgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5n
ZXRWYWx1ZUlEKCk7CiAgICAgICAgIGlmICh3aWR0aCA+IGhlaWdodCkgLy8gU3F1YXJlIHZpZXdw
b3J0IGlzIHBvcnRyYWl0LgogICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlTGFuZHNjYXBlID09
IGlkOwogICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb3J0cmFpdCA9PSBpZDsKQEAgLTMwOCwyMiAr
MzA4LDIyIEBAIHN0YXRpYyBib29sIGV2YWxSZXNvbHV0aW9uKENTU1ZhbHVlKiB2YWx1ZSwgRnJh
bWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiAgICAgaWYgKCF2YWx1ZSkKICAgICAg
ICAgcmV0dXJuICEhZGV2aWNlU2NhbGVGYWN0b3I7CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHJlc29sdXRpb24g
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICByZXR1cm4gY29tcGFyZVZhbHVlKGRl
dmljZVNjYWxlRmFjdG9yLCByZXNvbHV0aW9uLT5pc051bWJlcigpID8gcmVzb2x1dGlvbi0+Z2V0
RmxvYXRWYWx1ZSgpIDogcmVzb2x1dGlvbi0+Z2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX0RQUFgpLCBvcCk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHJlc29sdXRpb24gPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICByZXR1cm4gY29tcGFyZVZh
bHVlKGRldmljZVNjYWxlRmFjdG9yLCByZXNvbHV0aW9uLmlzTnVtYmVyKCkgPyByZXNvbHV0aW9u
LmdldEZsb2F0VmFsdWUoKSA6IHJlc29sdXRpb24uZ2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0RQUFgpLCBvcCk7CiB9CiAKIHN0YXRpYyBib29sIGRldmljZV9waXhlbF9yYXRp
b01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUgKnZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZl
cnNpb25EYXRhJiwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0gICAg
cmV0dXJuICghdmFsdWUgfHwgdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSktPmlzTnVtYmVyKCkp
ICYmIGV2YWxSZXNvbHV0aW9uKHZhbHVlLCBmcmFtZSwgb3ApOworICAgIHJldHVybiAoIXZhbHVl
IHx8IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzTnVtYmVyKCkpICYmIGV2
YWxSZXNvbHV0aW9uKHZhbHVlLCBmcmFtZSwgb3ApOwogfQogCiBzdGF0aWMgYm9vbCByZXNvbHV0
aW9uTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEmLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKICNp
ZiBFTkFCTEUoUkVTT0xVVElPTl9NRURJQV9RVUVSWSkKLSAgICByZXR1cm4gKCF2YWx1ZSB8fCB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+aXNSZXNvbHV0aW9uKCkpICYmIGV2YWxSZXNvbHV0
aW9uKHZhbHVlLCBmcmFtZSwgb3ApOworICAgIHJldHVybiAoIXZhbHVlIHx8IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzUmVzb2x1dGlvbigpKSAmJiBldmFsUmVzb2x1dGlv
bih2YWx1ZSwgZnJhbWUsIG9wKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0oZnJhbWUpOwpAQCAtMzQ0LDE4ICszNDQsMTggQEAgc3RhdGljIGJvb2wg
Z3JpZE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXQKIAogc3RhdGljIGJvb2wgY29tcHV0ZUxlbmd0aChDU1NWYWx1ZSogdmFsdWUs
IGJvb2wgc3RyaWN0LCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9u
RGF0YSwgaW50JiByZXN1bHQpCiB7Ci0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NT
UHJpbWl0aXZlVmFsdWUodmFsdWUpOworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogCi0gICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7Ci0gICAgICAgIHJlc3VsdCA9IHByaW1pdGl2ZVZh
bHVlLT5nZXRJbnRWYWx1ZSgpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpKSB7
CisgICAgICAgIHJlc3VsdCA9IHByaW1pdGl2ZVZhbHVlLmdldEludFZhbHVlKCk7CiAgICAgICAg
IHJldHVybiAhc3RyaWN0IHx8ICFyZXN1bHQ7CiAgICAgfQogCi0gICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc0xlbmd0aCgpKSB7Ci0gICAgICAgIHJlc3VsdCA9IHByaW1pdGl2ZVZhbHVlLT5jb21w
dXRlTGVuZ3RoPGludD4oY29udmVyc2lvbkRhdGEpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS5p
c0xlbmd0aCgpKSB7CisgICAgICAgIHJlc3VsdCA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5n
dGg8aW50Pihjb252ZXJzaW9uRGF0YSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApA
QCAtNTkzLDcgKzU5Myw3IEBAIHN0YXRpYyBib29sIHZpZXdfbW9kZU1lZGlhRmVhdHVyZUV2YWwo
Q1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpCiAgICAgaWYgKCF2YWx1
ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBjb25zdCBpbnQgdmlld01vZGVDU1NLZXl3
b3JkSUQgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+Z2V0VmFsdWVJRCgpOworICAgIGNv
bnN0IGludCB2aWV3TW9kZUNTU0tleXdvcmRJRCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqdmFsdWUpLmdldFZhbHVlSUQoKTsKICAgICBjb25zdCBQYWdlOjpWaWV3TW9kZSB2aWV3TW9k
ZSA9IGZyYW1lLT5wYWdlKCktPnZpZXdNb2RlKCk7CiAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsK
ICAgICBzd2l0Y2ggKHZpZXdNb2RlKSB7CkBAIC02ODgsMTAgKzY4OCwxMCBAQCBzdGF0aWMgYm9v
bCBwb2ludGVyTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVu
Z3RoQ29udmVyc2lvbgogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBwb2ludGVyICE9
IE5vUG9pbnRlcjsKIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBp
ZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBjb25zdCBDU1NWYWx1ZUlEIGlkID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSkt
PmdldFZhbHVlSUQoKTsKKyAgICBjb25zdCBDU1NWYWx1ZUlEIGlkID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpOwogICAgIHJldHVybiAocG9pbnRlciA9
PSBOb1BvaW50ZXIgJiYgaWQgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICB8fCAocG9pbnRlciA9
PSBUb3VjaFBvaW50ZXIgJiYgaWQgPT0gQ1NTVmFsdWVDb2Fyc2UpCiAgICAgICAgIHx8IChwb2lu
dGVyID09IE1vdXNlUG9pbnRlciAmJiBpZCA9PSBDU1NWYWx1ZUZpbmUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IGZhNDMyMWU4YjdiYjQ0YjlhN2I2
ZTE0N2FlMjIyMWIzNDkwYTdlMjIuLjY4NTQ5NDU5MTdjNmU0OTE2OGU0ZDJjZmFjZGUwZmRlYzc2
ZGYzMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAg
LTEwMyw5ICsxMDMsOSBAQCBzdGF0aWMgQ29sb3IgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShT
VkdDb2xvciogc3ZnQ29sb3IsIGNvbnN0IENvbG9yJiBmZ0NvbG9yKQogdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkK
IHsKICAgICBBU1NFUlQodmFsdWUpOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IDA7Ci0gICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHBy
aW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gbnVsbHB0cjsKKyAgICBpZiAoaXM8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSkpCisgICAgICAgIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKIAogICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3Rh
dGU7CiAgICAgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gc3RhdGUuc3R5bGUoKS0+YWNjZXNz
U1ZHU3R5bGUoKTsKQEAgLTIwOCwxMyArMjA4LDEzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAg
ICAgICAvLyAnbm9ybWFsJyBpcyB0aGUgb25seSBwcmltaXRpdmVWYWx1ZQogICAgICAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgICAgIHN2Z1N0eWxlLnNldFBhaW50T3Jk
ZXIoUGFpbnRPcmRlck5vcm1hbCk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlz
dCgpKQorICAgICAgICAgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIG9yZGVyVHlwZUxpc3Qg
PSB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSk7CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIG9yZGVy
VHlwZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CiAKICAgICAgICAgICAg
IC8vIFNlcmlhbGl6YXRpb24gaGFwcGVuZWQgZHVyaW5nIHBhcnNpbmcuIE5vIGFkZGl0aW9uYWwg
Y2hlY2tpbmcgbmVlZGVkLgotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gb3JkZXJUeXBl
TGlzdC0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0
aXZlVmFsdWUob3JkZXJUeXBlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7CisgICAg
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBvcmRlclR5cGVMaXN0Lmxlbmd0aCgpOworICAgICAg
ICAgICAgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4ob3JkZXJU
eXBlTGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsKICAgICAgICAgICAgIFBhaW50T3Jk
ZXIgcGFpbnRPcmRlcjsKICAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldFZh
bHVlSUQoKSkgewogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZpbGw6CkBAIC0yNjYsOSArMjY2
LDkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBzdmdTdHlsZS5zZXRGaWxsUGFp
bnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRUeXBlKCksIFNWR1JlbmRlclN0eWxl
Ojppbml0aWFsRmlsbFBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFp
bnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR1BhaW50KCkpIHsKLSAgICAgICAgICAgICAg
ICBTVkdQYWludCogc3ZnUGFpbnQgPSB0b1NWR1BhaW50KHZhbHVlKTsKLSAgICAgICAgICAgICAg
ICBzdmdTdHlsZS5zZXRGaWxsUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21T
VkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFp
bnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRv
VmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgIGlmIChpczxTVkdQYWludD4oKnZhbHVl
KSkgeworICAgICAgICAgICAgICAgIFNWR1BhaW50JiBzdmdQYWludCA9IGRvd25jYXN0PFNWR1Bh
aW50PigqdmFsdWUpOworICAgICAgICAgICAgICAgIHN2Z1N0eWxlLnNldEZpbGxQYWludChzdmdQ
YWludC5wYWludFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZSgmc3ZnUGFpbnQsIHN0
YXRlLnN0eWxlKCktPmNvbG9yKCkpLCBzdmdQYWludC51cmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVn
dWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjgzLDMwICsyODMsMzAg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBzdmdTdHlsZS5zZXRTdHJva2VQYWlu
dChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50VHlwZSgpLCBTVkdSZW5kZXJTdHls
ZTo6aW5pdGlhbFN0cm9rZVBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJv
a2VQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0
eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkgewotICAgICAgICAg
ICAgICAgIFNWR1BhaW50KiBzdmdQYWludCA9IHRvU1ZHUGFpbnQodmFsdWUpOwotICAgICAgICAg
ICAgICAgIHN2Z1N0eWxlLnNldFN0cm9rZVBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29s
b3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSks
IHN2Z1BhaW50LT51cmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJv
cGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CisgICAgICAgICAgICBpZiAoaXM8U1ZHUGFpbnQ+
KCp2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBTVkdQYWludCYgc3ZnUGFpbnQgPSBkb3duY2Fz
dDxTVkdQYWludD4oKnZhbHVlKTsKKyAgICAgICAgICAgICAgICBzdmdTdHlsZS5zZXRTdHJva2VQ
YWludChzdmdQYWludC5wYWludFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZSgmc3Zn
UGFpbnQsIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpLCBzdmdQYWludC51cmkoKSwgYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5U3Ryb2tlRGFzaGFycmF5OgogICAgICAgICB7CiAgICAgICAgICAgICBI
QU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChzdHJva2VEYXNoQXJyYXksIFN0cm9rZURhc2hBcnJh
eSkKLSAgICAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKKyAgICAgICAgICAg
IGlmICghaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgc3ZnU3R5
bGUuc2V0U3Ryb2tlRGFzaEFycmF5KFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlRGFzaEFy
cmF5KCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBDU1NWYWx1ZUxpc3QqIGRhc2hlcyA9IHRvQ1NTVmFsdWVMaXN0KHZhbHVlKTsKKyAgICAg
ICAgICAgIENTU1ZhbHVlTGlzdCYgZGFzaGVzID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFs
dWUpOwogCiAgICAgICAgICAgICBWZWN0b3I8U1ZHTGVuZ3RoPiBhcnJheTsKLSAgICAgICAgICAg
IHNpemVfdCBsZW5ndGggPSBkYXNoZXMtPmxlbmd0aCgpOworICAgICAgICAgICAgc2l6ZV90IGxl
bmd0aCA9IGRhc2hlcy5sZW5ndGgoKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0g
ZGFzaGVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwotICAgICAgICAgICAgICAgIGlmICgh
Y3VyclZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgQ1NTVmFsdWUq
IGN1cnJWYWx1ZSA9IGRhc2hlcy5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAg
ICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCpjdXJyVmFsdWUpKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBkYXNoID0gdG9DU1NQcmltaXRpdmVWYWx1ZShkYXNoZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soaSkpOworICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBkYXNoID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGRhc2hlcy5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsK
ICAgICAgICAgICAgICAgICBhcnJheS5hcHBlbmQoU1ZHTGVuZ3RoOjpmcm9tQ1NTUHJpbWl0aXZl
VmFsdWUoZGFzaCkpOwogICAgICAgICAgICAgfQogCkBAIC00OTEsMTUgKzQ5MSwxNSBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3RvcENvbG9yOgogICAgICAgICB7
CiAgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChzdG9wQ29sb3IsIFN0b3BD
b2xvcik7Ci0gICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZHQ29sb3IoKSkKLSAgICAgICAgICAg
ICAgICBzdmdTdHlsZS5zZXRTdG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZSh0b1NW
R0NvbG9yKHZhbHVlKSwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSkpOworICAgICAgICAgICAgaWYg
KGlzPFNWR0NvbG9yPigqdmFsdWUpKQorICAgICAgICAgICAgICAgIHN2Z1N0eWxlLnNldFN0b3BD
b2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKGRvd25jYXN0PFNWR0NvbG9yPih2YWx1ZSks
IHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpZ2h0aW5nQ29sb3I6CiAgICAgICAgIHsKICAgICAg
ICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGxpZ2h0aW5nQ29sb3IsIExpZ2h0aW5n
Q29sb3IpOwotICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAgICAgICAg
ICAgICAgc3ZnU3R5bGUuc2V0TGlnaHRpbmdDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVl
KHRvU1ZHQ29sb3IodmFsdWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSk7CisgICAgICAgICAg
ICBpZiAoaXM8U1ZHQ29sb3I+KCp2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3ZnU3R5bGUuc2V0
TGlnaHRpbmdDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKGRvd25jYXN0PFNWR0NvbG9y
Pih2YWx1ZSksIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGbG9vZE9wYWNpdHk6CkBAIC01MjMs
OCArNTIzLDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZsb29k
Q29sb3I6CiAgICAgICAgIHsKICAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFM
KGZsb29kQ29sb3IsIEZsb29kQ29sb3IpOwotICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0Nv
bG9yKCkpCi0gICAgICAgICAgICAgICAgc3ZnU3R5bGUuc2V0Rmxvb2RDb2xvcihjb2xvckZyb21T
VkdDb2xvckNTU1ZhbHVlKHRvU1ZHQ29sb3IodmFsdWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigp
KSk7CisgICAgICAgICAgICBpZiAoaXM8U1ZHQ29sb3I+KCp2YWx1ZSkpCisgICAgICAgICAgICAg
ICAgc3ZnU3R5bGUuc2V0Rmxvb2RDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKGRvd25j
YXN0PFNWR0NvbG9yPih2YWx1ZSksIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlwaE9yaWVu
dGF0aW9uSG9yaXpvbnRhbDoKQEAgLTU3MSwyNyArNTcxLDI3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgICAgICBpZiAoaXNJbml0aWFsIHx8IHByaW1pdGl2ZVZhbHVlKSAvLyBpbml0aWFsIHwg
bm9uZQogICAgICAgICAgICAgICAgIHJldHVybiBzdmdTdHlsZS5zZXRTaGFkb3cobnVsbHB0cik7
CiAKLSAgICAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgICAgICBp
ZiAoIWlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHRvQ1NTVmFsdWVMaXN0KHZhbHVlKTsK
LSAgICAgICAgICAgIGlmICghbGlzdC0+bGVuZ3RoKCkpCisgICAgICAgICAgICBDU1NWYWx1ZUxp
c3QmIGxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CisgICAgICAgICAgICBp
ZiAoIWxpc3QubGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAg
ICBDU1NWYWx1ZSogZmlyc3RWYWx1ZSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCk7
Ci0gICAgICAgICAgICBpZiAoIWZpcnN0VmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKKyAgICAgICAg
ICAgIENTU1ZhbHVlKiBmaXJzdFZhbHVlID0gbGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDAp
OworICAgICAgICAgICAgaWYgKCFpczxDU1NTaGFkb3dWYWx1ZT4oKmZpcnN0VmFsdWUpKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIENTU1NoYWRvd1ZhbHVlKiBpdGVtID0g
dG9DU1NTaGFkb3dWYWx1ZShmaXJzdFZhbHVlKTsKLSAgICAgICAgICAgIEludFBvaW50IGxvY2F0
aW9uKGl0ZW0tPngtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNp
b25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpLAotICAgICAgICAgICAgICAgIGl0
ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRh
KCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpKTsKLSAgICAgICAgICAgIGludCBibHVyID0g
aXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xl
bmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpIDogMDsKKyAg
ICAgICAgICAgIENTU1NoYWRvd1ZhbHVlJiBpdGVtID0gZG93bmNhc3Q8Q1NTU2hhZG93VmFsdWU+
KCpmaXJzdFZhbHVlKTsKKyAgICAgICAgICAgIEludFBvaW50IGxvY2F0aW9uKGl0ZW0ueC0+Y29t
cHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0
aEFkanVzdGVkWm9vbSgxLjBmKSksCisgICAgICAgICAgICAgICAgaXRlbS55LT5jb21wdXRlTGVu
Z3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0
ZWRab29tKDEuMGYpKSk7CisgICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0uYmx1ciA/IGl0ZW0u
Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEo
KS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSkgOiAwOwogICAgICAgICAgICAgQ29sb3IgY29s
b3I7Ci0gICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCi0gICAgICAgICAgICAgICAgY29sb3Ig
PSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CisgICAgICAgICAg
ICBpZiAoaXRlbS5jb2xvcikKKyAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1p
dGl2ZVZhbHVlKGl0ZW0uY29sb3IuZ2V0KCkpOwogCiAgICAgICAgICAgICAvLyAtd2Via2l0LXN2
Zy1zaGFkb3cgZG9lcyBzaG91bGQgbm90IGhhdmUgYSBzcHJlYWQgb3Igc3R5bGUKLSAgICAgICAg
ICAgIEFTU0VSVCghaXRlbS0+c3ByZWFkKTsKLSAgICAgICAgICAgIEFTU0VSVCghaXRlbS0+c3R5
bGUpOworICAgICAgICAgICAgQVNTRVJUKCFpdGVtLnNwcmVhZCk7CisgICAgICAgICAgICBBU1NF
UlQoIWl0ZW0uc3R5bGUpOwogCiAgICAgICAgICAgICBhdXRvIHNoYWRvd0RhdGEgPSBzdGQ6Om1h
a2VfdW5pcXVlPFNoYWRvd0RhdGE+KGxvY2F0aW9uLCBibHVyLCAwLCBOb3JtYWwsIGZhbHNlLCBj
b2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCk7CiAgICAgICAgICAg
ICBzdmdTdHlsZS5zZXRTaGFkb3coV1RGOjptb3ZlKHNoYWRvd0RhdGEpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU291cmNlU2l6ZUxpc3QuY3BwCmluZGV4IDdkODYyZTFkNTg0MzhkNWIwOGU0ZWMwZWU3OGQy
YWU1NGRlNTMyZTguLjg4ODdiY2VkOGRjYmY0Y2JmNjJiMTAwYWRmOTJlODI2YWY0N2RmYzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1NvdXJjZVNpemVMaXN0LmNwcApAQCAtNjAsNyArNjAsNyBAQCBzdGF0
aWMgdW5zaWduZWQgY29tcHV0ZUxlbmd0aChDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFJlbmRlclN0
eWxlJiBzdHlsZSwgUmVuZGVyVgogICAgICAgICB9CiAgICAgfQogICAgIFJlZlB0cjxDU1NWYWx1
ZT4gY3NzVmFsdWUgPSB2YWx1ZS5jcmVhdGVDU1NWYWx1ZSgpOwotICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGNzc1ZhbHVl
LmdldCgpKTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHByaW1pdGl2ZVZhbHVlID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGNzc1ZhbHVlLmdldCgpKTsKICAgICByZXR1cm4g
cHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8dW5zaWduZWQ+KGNvbnZlcnNpb25EYXRhKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcAppbmRleCA2ZDJmZGNlMjFk
ZjE2ZWVjMWQ1MGQyNjU1ZWI0MGM0NTA5OWJkMmIyLi5mOGVhNDBkNDlhZDBlNTY0OTRhODBhZDFj
YWNkZjBlZjBkNTE0ODI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9w
ZXJ0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcApA
QCAtMzYzLDcgKzM2Myw3IEBAIFN0cmluZyBTdHlsZVByb3BlcnRpZXM6OmdldExheWVyZWRTaG9y
dGhhbmRWYWx1ZShjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBzCiAgICAgICAgIHZhbHVl
c1tpXSA9IGdldFByb3BlcnR5Q1NTVmFsdWUoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtpXSk7CiAg
ICAgICAgIGlmICh2YWx1ZXNbaV0pIHsKICAgICAgICAgICAgIGlmICh2YWx1ZXNbaV0tPmlzQmFz
ZVZhbHVlTGlzdCgpKQotICAgICAgICAgICAgICAgIG51bUxheWVycyA9IHN0ZDo6bWF4KHRvQ1NT
VmFsdWVMaXN0KHZhbHVlc1tpXS5nZXQoKSktPmxlbmd0aCgpLCBudW1MYXllcnMpOworICAgICAg
ICAgICAgICAgIG51bUxheWVycyA9IHN0ZDo6bWF4KGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZh
bHVlc1tpXSkubGVuZ3RoKCksIG51bUxheWVycyk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgbnVtTGF5ZXJzID0gc3RkOjptYXg8c2l6ZV90PigxVSwgbnVtTGF5ZXJzKTsKICAg
ICAgICAgfQpAQCAtMzg0LDcgKzM4NCw3IEBAIFN0cmluZyBTdHlsZVByb3BlcnRpZXM6OmdldExh
eWVyZWRTaG9ydGhhbmRWYWx1ZShjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBzCiAgICAg
ICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOwogICAgICAgICAgICAgaWYgKHZhbHVlc1tq
XSkgewogICAgICAgICAgICAgICAgIGlmICh2YWx1ZXNbal0tPmlzQmFzZVZhbHVlTGlzdCgpKQot
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvQ1NTVmFsdWVMaXN0KHZhbHVlc1tqXS5nZXQo
KSktPml0ZW0oaSk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZG93bmNhc3Q8Q1NTVmFs
dWVMaXN0PigqdmFsdWVzW2pdKS5pdGVtKGkpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlc1tqXTsKIApAQCAtNDA4LDE2ICs0MDgsMTYg
QEAgU3RyaW5nIFN0eWxlUHJvcGVydGllczo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGNvbnN0
IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmIHMKICAgICAgICAgICAgICAgICAgICAgfHwgKGogPCBz
aXplIC0gMSAmJiBzaG9ydGhhbmQucHJvcGVydGllcygpW2ogKyAxXSA9PSBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tSZXBlYXRZICYmIHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8
Q1NTVmFsdWU+IHlWYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBu
ZXh0VmFsdWUgPSB2YWx1ZXNbaiArIDFdOwotICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFZh
bHVlLT5pc1ZhbHVlTGlzdCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgeVZhbHVlID0gdG9D
U1NWYWx1ZUxpc3QobmV4dFZhbHVlLmdldCgpKS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKm5leHRWYWx1ZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICB5VmFsdWUgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpu
ZXh0VmFsdWUpLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CiAgICAgICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHlWYWx1ZSA9IG5leHRWYWx1ZTsKIAotICAg
ICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgfHwgIXlWYWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWlzPENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpIHx8ICFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnlWYWx1ZSkp
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAgICAg
ICBDU1NWYWx1ZUlEIHhJZCA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUuZ2V0KCkpLT5nZXRW
YWx1ZUlEKCk7Ci0gICAgICAgICAgICAgICAgICAgIENTU1ZhbHVlSUQgeUlkID0gdG9DU1NQcmlt
aXRpdmVWYWx1ZSh5VmFsdWUuZ2V0KCkpLT5nZXRWYWx1ZUlEKCk7CisgICAgICAgICAgICAgICAg
ICAgIENTU1ZhbHVlSUQgeElkID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSku
Z2V0VmFsdWVJRCgpOworICAgICAgICAgICAgICAgICAgICBDU1NWYWx1ZUlEIHlJZCA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqeVZhbHVlKS5nZXRWYWx1ZUlEKCk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICh4SWQgIT0geUlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
eElkID09IENTU1ZhbHVlUmVwZWF0ICYmIHlJZCA9PSBDU1NWYWx1ZU5vUmVwZWF0KSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXNlUmVwZWF0WFNob3J0aGFuZCA9IHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggMmYyZGZjNjE3YmQxYzQxNWQxZjQwNzFh
NGRmMTQ5NzE3Yzk4YTAyOC4uMzYxMGFiOTBhM2I5NGYzMWVhMTUyOThmYjlkMjM1MmQ2ZDM3YTQz
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMTY0MywxMyArMTY0Mywx
MyBAQCB2b2lkIGV4dHJhY3REaXJlY3Rpb25BbmRXcml0aW5nTW9kZShjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IFN0eWxlUmVzb2x2ZQogICAgICAgICAgICAgc3dpdGNoIChwcm9wZXJ0
eS5pZCgpKSB7CiAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3JpdGluZ01vZGU6
CiAgICAgICAgICAgICAgICAgaWYgKCFoYWRJbXBvcnRhbnRXZWJraXRXcml0aW5nTW9kZSB8fCBw
cm9wZXJ0eS5pc0ltcG9ydGFudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRpbmdNb2Rl
ID0gdG9DU1NQcmltaXRpdmVWYWx1ZSgqcHJvcGVydHkudmFsdWUoKSk7CisgICAgICAgICAgICAg
ICAgICAgIHdyaXRpbmdNb2RlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpwcm9wZXJ0
eS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaGFkSW1wb3J0YW50V2Via2l0V3JpdGlu
Z01vZGUgPSBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246
CiAgICAgICAgICAgICAgICAgaWYgKCFoYWRJbXBvcnRhbnREaXJlY3Rpb24gfHwgcHJvcGVydHku
aXNJbXBvcnRhbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSB0b0NTU1By
aW1pdGl2ZVZhbHVlKCpwcm9wZXJ0eS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZGly
ZWN0aW9uID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpwcm9wZXJ0eS52YWx1ZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgaGFkSW1wb3J0YW50RGlyZWN0aW9uID0gcHJvcGVydHkuaXNJ
bXBvcnRhbnQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0xOTMxLDIyICsxOTMxLDIyIEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgo
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBjb25zdCBTdHlsCiAKIHN0YXRpYyBi
b29sIGNyZWF0ZUdyaWRUcmFja1NpemUoQ1NTVmFsdWUqIHZhbHVlLCBHcmlkVHJhY2tTaXplJiB0
cmFja1NpemUsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAo
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICBpZiAoaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUm
IHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAg
ICAgICAgIEdyaWRMZW5ndGggd29ya2luZ0xlbmd0aDsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlk
VHJhY2tCcmVhZHRoKHByaW1pdGl2ZVZhbHVlLCBzdGF0ZSwgd29ya2luZ0xlbmd0aCkpCisgICAg
ICAgIGlmICghY3JlYXRlR3JpZFRyYWNrQnJlYWR0aCgmcHJpbWl0aXZlVmFsdWUsIHN0YXRlLCB3
b3JraW5nTGVuZ3RoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICB0cmFj
a1NpemUuc2V0TGVuZ3RoKHdvcmtpbmdMZW5ndGgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKLSAgICBDU1NGdW5jdGlvblZhbHVlKiBtaW5tYXhGdW5jdGlvbiA9IHRvQ1NTRnVuY3Rp
b25WYWx1ZSh2YWx1ZSk7Ci0gICAgQ1NTVmFsdWVMaXN0KiBhcmd1bWVudHMgPSBtaW5tYXhGdW5j
dGlvbi0+YXJndW1lbnRzKCk7CisgICAgQ1NTRnVuY3Rpb25WYWx1ZSYgbWlubWF4RnVuY3Rpb24g
PSBkb3duY2FzdDxDU1NGdW5jdGlvblZhbHVlPigqdmFsdWUpOworICAgIENTU1ZhbHVlTGlzdCog
YXJndW1lbnRzID0gbWlubWF4RnVuY3Rpb24uYXJndW1lbnRzKCk7CiAgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oYXJndW1lbnRzLT5sZW5ndGgoKSA9PSAyKTsKICAgICBHcmlk
TGVuZ3RoIG1pblRyYWNrQnJlYWR0aDsKICAgICBHcmlkTGVuZ3RoIG1heFRyYWNrQnJlYWR0aDsK
LSAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgodG9DU1NQcmltaXRpdmVWYWx1ZShhcmd1
bWVudHMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpLCBzdGF0ZSwgbWluVHJhY2tCcmVhZHRo
KSB8fCAhY3JlYXRlR3JpZFRyYWNrQnJlYWR0aCh0b0NTU1ByaW1pdGl2ZVZhbHVlKGFyZ3VtZW50
cy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSksIHN0YXRlLCBtYXhUcmFja0JyZWFkdGgpKQor
ICAgIGlmICghY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oYXJndW1lbnRzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKSwgc3RhdGUsIG1pblRyYWNr
QnJlYWR0aCkgfHwgIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KGFyZ3VtZW50cy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSksIHN0YXRlLCBtYXhU
cmFja0JyZWFkdGgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB0cmFja1NpemUuc2V0
TWluTWF4KG1pblRyYWNrQnJlYWR0aCwgbWF4VHJhY2tCcmVhZHRoKTsKQEAgLTE5NTYsOSArMTk1
Niw5IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja1NpemUoQ1NTVmFsdWUqIHZhbHVlLCBH
cmlkVHJhY2tTaXplJiB0cmFja1NpemUsIGNvbnN0CiBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJh
Y2tMaXN0KENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPEdyaWRUcmFja1NpemU+JiB0cmFja1NpemVz
LCBOYW1lZEdyaWRMaW5lc01hcCYgbmFtZWRHcmlkTGluZXMsIE9yZGVyZWROYW1lZEdyaWRMaW5l
c01hcCYgb3JkZXJlZE5hbWVkR3JpZExpbmVzLCBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYg
c3RhdGUpCiB7CiAgICAgLy8gSGFuZGxlICdub25lJy4KLSAgICBpZiAodmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSkgewotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZh
bHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lOworICAgIGlmIChpczxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZl
VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgcmV0
dXJuIHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmU7CiAgICAgfQog
CiAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKQEAgLTE5NjcsMTAgKzE5NjcsMTAgQEAg
c3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrTGlzdChDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxH
cmlkVHJhY2tTaXplPiYgdHJhY2tTaXoKICAgICBzaXplX3QgY3VycmVudE5hbWVkR3JpZExpbmUg
PSAwOwogICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUo
KTsgaS5hZHZhbmNlKCkpIHsKICAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUo
KTsKLSAgICAgICAgaWYgKGN1cnJWYWx1ZS0+aXNHcmlkTGluZU5hbWVzVmFsdWUoKSkgewotICAg
ICAgICAgICAgQ1NTR3JpZExpbmVOYW1lc1ZhbHVlKiBsaW5lTmFtZXNWYWx1ZSA9IHRvQ1NTR3Jp
ZExpbmVOYW1lc1ZhbHVlKGN1cnJWYWx1ZSk7Ci0gICAgICAgICAgICBmb3IgKENTU1ZhbHVlTGlz
dEl0ZXJhdG9yIGogPSBsaW5lTmFtZXNWYWx1ZTsgai5oYXNNb3JlKCk7IGouYWR2YW5jZSgpKSB7
Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5hbWVkR3JpZExpbmUgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKGoudmFsdWUoKSktPmdldFN0cmluZ1ZhbHVlKCk7CisgICAgICAgIGlmIChpczxDU1NHcmlk
TGluZU5hbWVzVmFsdWU+KCpjdXJyVmFsdWUpKSB7CisgICAgICAgICAgICBDU1NHcmlkTGluZU5h
bWVzVmFsdWUmIGxpbmVOYW1lc1ZhbHVlID0gZG93bmNhc3Q8Q1NTR3JpZExpbmVOYW1lc1ZhbHVl
PigqY3VyclZhbHVlKTsKKyAgICAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaiA9
ICZsaW5lTmFtZXNWYWx1ZTsgai5oYXNNb3JlKCk7IGouYWR2YW5jZSgpKSB7CisgICAgICAgICAg
ICAgICAgU3RyaW5nIG5hbWVkR3JpZExpbmUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
ai52YWx1ZSgpKS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAgICAgICBOYW1lZEdyaWRM
aW5lc01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG5hbWVkR3JpZExpbmVzLmFkZChuYW1lZEdyaWRM
aW5lLCBWZWN0b3I8c2l6ZV90PigpKTsKICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlLmFwcGVuZChjdXJyZW50TmFtZWRHcmlkTGluZSk7CiAgICAgICAgICAgICAgICAgT3Jk
ZXJlZE5hbWVkR3JpZExpbmVzTWFwOjpBZGRSZXN1bHQgb3JkZXJlZFJlc3VsdCA9IG9yZGVyZWRO
YW1lZEdyaWRMaW5lcy5hZGQoY3VycmVudE5hbWVkR3JpZExpbmUsIFZlY3RvcjxTdHJpbmc+KCkp
OwpAQCAtMTk5OCwzNyArMTk5OCwzNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkUG9zaXRpb24o
Q1NTVmFsdWUqIHZhbHVlLCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uKQogewogICAgIC8vIFdlIGFj
Y2VwdCB0aGUgc3BlY2lmaWNhdGlvbidzIGdyYW1tYXI6CiAgICAgLy8gYXV0byB8IDxjdXN0b20t
aWRlbnQ+IHwgWyA8aW50ZWdlcj4gJiYgPGN1c3RvbS1pZGVudD4/IF0gfCBbIHNwYW4gJiYgWyA8
aW50ZWdlcj4gfHwgPGN1c3RvbS1pZGVudD4gXSBdCi0gICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpIHsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
dG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVl
PigqdmFsdWUpKSB7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogICAgICAgICAvLyBXZSB0cmFu
c2xhdGUgPGlkZW50PiB0byA8c3RyaW5nPiBkdXJpbmcgcGFyc2luZyBhcyBpdCBtYWtlcyBoYW5k
bGluZyBpdCBzaW1wbGVyLgotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzU3RyaW5nKCkp
IHsKLSAgICAgICAgICAgIHBvc2l0aW9uLnNldE5hbWVkR3JpZEFyZWEocHJpbWl0aXZlVmFsdWUt
PmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNTdHJpbmco
KSkgeworICAgICAgICAgICAgcG9zaXRpb24uc2V0TmFtZWRHcmlkQXJlYShwcmltaXRpdmVWYWx1
ZS5nZXRTdHJpbmdWYWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAKLSAgICAgICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFs
dWVBdXRvKTsKKyAgICAgICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBD
U1NWYWx1ZUF1dG8pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBDU1NWYWx1
ZUxpc3QqIHZhbHVlcyA9IHRvQ1NTVmFsdWVMaXN0KHZhbHVlKTsKLSAgICBBU1NFUlQodmFsdWVz
LT5sZW5ndGgoKSk7CisgICAgQ1NTVmFsdWVMaXN0JiB2YWx1ZXMgPSBkb3duY2FzdDxDU1NWYWx1
ZUxpc3Q+KCp2YWx1ZSk7CisgICAgQVNTRVJUKHZhbHVlcy5sZW5ndGgoKSk7CiAKICAgICBib29s
IGlzU3BhblBvc2l0aW9uID0gZmFsc2U7CiAgICAgaW50IGdyaWRMaW5lTnVtYmVyID0gMDsKICAg
ICBTdHJpbmcgZ3JpZExpbmVOYW1lOwogCi0gICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXQgPSB2
YWx1ZXM7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGN1cnJlbnRWYWx1ZSA9IHRvQ1NTUHJpbWl0
aXZlVmFsdWUoaXQudmFsdWUoKSk7CisgICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXQgPSAmdmFs
dWVzOworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBjdXJyZW50VmFsdWUgPSBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oaXQudmFsdWUoKSk7CiAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+Z2V0VmFs
dWVJRCgpID09IENTU1ZhbHVlU3BhbikgewogICAgICAgICBpc1NwYW5Qb3NpdGlvbiA9IHRydWU7
CiAgICAgICAgIGl0LmFkdmFuY2UoKTsKLSAgICAgICAgY3VycmVudFZhbHVlID0gaXQuaGFzTW9y
ZSgpID8gdG9DU1NQcmltaXRpdmVWYWx1ZShpdC52YWx1ZSgpKSA6IDA7CisgICAgICAgIGN1cnJl
bnRWYWx1ZSA9IGl0Lmhhc01vcmUoKSA/IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdC52
YWx1ZSgpKSA6IG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKGN1cnJlbnRWYWx1ZSAmJiBjdXJy
ZW50VmFsdWUtPmlzTnVtYmVyKCkpIHsKICAgICAgICAgZ3JpZExpbmVOdW1iZXIgPSBjdXJyZW50
VmFsdWUtPmdldEludFZhbHVlKCk7CiAgICAgICAgIGl0LmFkdmFuY2UoKTsKLSAgICAgICAgY3Vy
cmVudFZhbHVlID0gaXQuaGFzTW9yZSgpID8gdG9DU1NQcmltaXRpdmVWYWx1ZShpdC52YWx1ZSgp
KSA6IDA7CisgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGl0Lmhhc01vcmUoKSA/IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPihpdC52YWx1ZSgpKSA6IG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYg
KGN1cnJlbnRWYWx1ZSAmJiBjdXJyZW50VmFsdWUtPmlzU3RyaW5nKCkpIHsKQEAgLTIwNTUsNyAr
MjA1NSw3IEBAIExlbmd0aCBTdHlsZVJlc29sdmVyOjpwYXJzZVNuYXBDb29yZGluYXRlKENTU1By
aW1pdGl2ZVZhbHVlJiB2YWx1ZSkKIAogTGVuZ3RoIFN0eWxlUmVzb2x2ZXI6OnBhcnNlU25hcENv
b3JkaW5hdGUoQ1NTVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIHVuc2lnbmVkIG9mZnNldCkKIHsKLSAg
ICByZXR1cm4gcGFyc2VTbmFwQ29vcmRpbmF0ZSh0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZUxp
c3QuaXRlbShvZmZzZXQpKSk7CisgICAgcmV0dXJuIHBhcnNlU25hcENvb3JkaW5hdGUoZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZUxpc3QuaXRlbShvZmZzZXQpKSk7CiB9CiAKIExl
bmd0aFNpemUgU3R5bGVSZXNvbHZlcjo6cGFyc2VTbmFwQ29vcmRpbmF0ZVBhaXIoQ1NTVmFsdWVM
aXN0JiB2YWx1ZUxpc3QsIHVuc2lnbmVkIG9mZnNldCkKQEAgLTIwNjcsMTQgKzIwNjcsMTQgQEAg
U2Nyb2xsU25hcFBvaW50cyBTdHlsZVJlc29sdmVyOjpwYXJzZVNuYXBQb2ludHMoQ1NTVmFsdWUm
IHZhbHVlKQogewogICAgIFNjcm9sbFNuYXBQb2ludHMgcG9pbnRzOwogCi0gICAgaWYgKHZhbHVl
LmlzUHJpbWl0aXZlVmFsdWUoKSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS5nZXRWYWx1
ZUlEKCkgPT0gQ1NTVmFsdWVFbGVtZW50cykgeworICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkuZ2V0VmFsdWVJ
RCgpID09IENTU1ZhbHVlRWxlbWVudHMpIHsKICAgICAgICAgcG9pbnRzLnVzZXNFbGVtZW50cyA9
IHRydWU7CiAgICAgICAgIHJldHVybiBwb2ludHM7CiAgICAgfQogCiAgICAgcG9pbnRzLmhhc1Jl
cGVhdCA9IGZhbHNlOwogICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXQoJnZhbHVlKTsg
aXQuaGFzTW9yZSgpOyBpdC5hZHZhbmNlKCkpIHsKLSAgICAgICAgYXV0byYgaXRlbVZhbHVlID0g
dG9DU1NQcmltaXRpdmVWYWx1ZSgqaXQudmFsdWUoKSk7CisgICAgICAgIGF1dG8mIGl0ZW1WYWx1
ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaXQudmFsdWUoKSk7CiAgICAgICAgIGlm
IChhdXRvKiBsZW5ndGhSZXBlYXQgPSBpdGVtVmFsdWUuZ2V0TGVuZ3RoUmVwZWF0VmFsdWUoKSkg
ewogICAgICAgICAgICAgaWYgKGF1dG8qIGludGVydmFsID0gbGVuZ3RoUmVwZWF0LT5pbnRlcnZh
bCgpKSB7CiAgICAgICAgICAgICAgICAgcG9pbnRzLnJlcGVhdE9mZnNldCA9IHBhcnNlU25hcENv
b3JkaW5hdGUoKmludGVydmFsKTsKQEAgLTIxMjcsNyArMjEyNyw3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpID8gdG9DU1NQcmltaXRpdmVWYWx1ZSh2
YWx1ZSkgOiAwOworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IGlzPENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpID8gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKSA6IG51bGxwdHI7CiAKICAgICAvLyBXaGF0IGZvbGxvd3MgaXMgYSBsaXN0IHRoYXQgbWFw
cyB0aGUgQ1NTIHByb3BlcnRpZXMgaW50byB0aGVpciBjb3JyZXNwb25kaW5nIGZyb250LWVuZAog
ICAgIC8vIFJlbmRlclN0eWxlIHZhbHVlcy4KQEAgLTIxNTAsNDggKzIxNTAsNDggQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICAgICAgICAgIGJvb2wgZGlkU2V0ID0gZmFsc2U7CiAgICAgICAgICAgICBmb3Ig
KENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgp
KSB7CiAgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChpdGVtLT5pc0dyYWRpZW50VmFsdWUoKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3Jl
YXRlKCp0b0NTU0dyYWRpZW50VmFsdWUoaXRlbSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVk
KHRoaXMpKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZT4oKml0ZW0pKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpczxDU1NHcmFkaWVu
dFZhbHVlPigqaXRlbSkpCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSgqZG93bmNhc3Q8Q1NTR3JhZGll
bnRWYWx1ZT4oKml0ZW0pLmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpKSwgZGlkU2V0
KTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoKnRvQ1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZShpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0
ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPigqaXRlbSkpLCBkaWRTZXQpOwogICAg
ICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VU
KQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNJbWFnZVNldFZhbHVlKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChzZXRPclBlbmRp
bmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCB0b0NTU0ltYWdlU2V0VmFsdWUoaXRlbSkp
LCBkaWRTZXQpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXM8Q1NTSW1hZ2VTZXRWYWx1
ZT4oKml0ZW0pKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRl
bnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgZG93bmNhc3Q8Q1NT
SW1hZ2VTZXRWYWx1ZT4oaXRlbSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRT
ZXQgPSB0cnVlOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
aWYgKGl0ZW0tPmlzSW1hZ2VWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldENvbnRlbnQoY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29u
dGVudCwgdG9DU1NJbWFnZVZhbHVlKGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICBp
ZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oKml0ZW0pKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldENvbnRlbnQoY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5
Q29udGVudCwgZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oaXRlbSkpLCBkaWRTZXQpOwogICAgICAg
ICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJp
bWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVl
PigqaXRlbSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNvbnRlbnRWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUo
aXRlbSk7CisgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGNvbnRlbnRWYWx1ZSA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSk7CiAKLSAgICAgICAgICAgICAgICBp
ZiAoY29udGVudFZhbHVlLT5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldENvbnRlbnQoY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwo
KSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLmlzU3RyaW5nKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChjb250ZW50
VmFsdWUuZ2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAg
ICAgIGRpZFNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFs
dWUtPmlzQXR0cigpKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUu
aXNBdHRyKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENhbiBhIG5hbWVzcGFj
ZSBiZSBzcGVjaWZpZWQgZm9yIGFuIGF0dHIoZm9vKT8KICAgICAgICAgICAgICAgICAgICAgaWYg
KHN0YXRlLnN0eWxlKCktPnN0eWxlVHlwZSgpID09IE5PUFNFVURPKQogICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VW5pcXVlKCk7CiAgICAgICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnBhcmVudFN0eWxlKCktPnNldFVu
aXF1ZSgpOwotICAgICAgICAgICAgICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0b20s
IGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsKKyAgICAg
ICAgICAgICAgICAgICAgUXVhbGlmaWVkTmFtZSBhdHRyKG51bGxBdG9tLCBjb250ZW50VmFsdWUu
Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsKICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IHN0YXRlLmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRl
KGF0dHIpOwogICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KHZh
bHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUuaW1wbCgpLCBkaWRTZXQpOwogICAgICAg
ICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAvLyBSZWdp
c3RlciB0aGUgZmFjdCB0aGF0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgYWZmZWN0cyB0aGUgc3R5bGUu
CiAgICAgICAgICAgICAgICAgICAgIG1fcnVsZVNldHMuZmVhdHVyZXMoKS5hdHRyaWJ1dGVDYW5v
bmljYWxMb2NhbE5hbWVzSW5SdWxlcy5hZGQoYXR0ci5sb2NhbE5hbWUoKS5pbXBsKCkpOwogICAg
ICAgICAgICAgICAgICAgICBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuYXR0cmlidXRlTG9jYWxOYW1l
c0luUnVsZXMuYWRkKGF0dHIubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNDb3VudGVyKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgQ291bnRlciogY291bnRlclZhbHVlID0gY29udGVudFZhbHVlLT5nZXRDb3VudGVyVmFsdWUo
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS5pc0NvdW50ZXIoKSkg
eworICAgICAgICAgICAgICAgICAgICBDb3VudGVyKiBjb3VudGVyVmFsdWUgPSBjb250ZW50VmFs
dWUuZ2V0Q291bnRlclZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgIEVMaXN0U3R5bGVUeXBl
IGxpc3RTdHlsZVR5cGUgPSBOb25lTGlzdFN0eWxlOwogICAgICAgICAgICAgICAgICAgICBDU1NW
YWx1ZUlEIGxpc3RTdHlsZUlkZW50ID0gY291bnRlclZhbHVlLT5saXN0U3R5bGVJZGVudCgpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAobGlzdFN0eWxlSWRlbnQgIT0gQ1NTVmFsdWVOb25lKQpA
QCAtMjIwMCw3ICsyMjAwLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0Q29udGVudChXVEY6Om1vdmUoY291bnRlciksIGRpZFNldCk7CiAgICAg
ICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb250ZW50VmFsdWUtPmdldFZhbHVlSUQoKSkg
eworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbnRlbnRWYWx1ZS5nZXRWYWx1ZUlEKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU9wZW5RdW90ZToKICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoT1BFTl9RVU9URSwgZGlk
U2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CkBAIC0yMjU4LDIy
ICsyMjU4LDIyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
UXVvdGVzKDApOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UXVvdGVzKG51bGxwdHIp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNW
YWx1ZUxpc3QoKSkgewotICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gdG9DU1NWYWx1
ZUxpc3QodmFsdWUpOworICAgICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7Cisg
ICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIGxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2
YWx1ZSk7CiAgICAgICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gcXVv
dGVzOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5sZW5ndGgoKTsg
aSArPSAyKSB7Ci0gICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGZpcnN0ID0gbGlzdC0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGlzdC5sZW5ndGgoKTsgaSArPSAyKSB7CisgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGZpcnN0
ID0gbGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwogICAgICAgICAgICAgICAgIC8vIGl0
ZW0oKSByZXR1cm5zIG51bGwgaWYgb3V0IG9mIGJvdW5kcyBzbyB0aGlzIGlzIHNhZmUuCi0gICAg
ICAgICAgICAgICAgQ1NTVmFsdWUqIHNlY29uZCA9IGxpc3QtPml0ZW0oaSArIDEpOworICAgICAg
ICAgICAgICAgIENTU1ZhbHVlKiBzZWNvbmQgPSBsaXN0Lml0ZW0oaSArIDEpOwogICAgICAgICAg
ICAgICAgIGlmICghc2Vjb25kKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihmaXJzdC0+aXNQcmlt
aXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihzZWNvbmQtPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgU3Ry
aW5nIHN0YXJ0UXVvdGUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGZpcnN0KS0+Z2V0U3RyaW5nVmFs
dWUoKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZW5kUXVvdGUgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKHNlY29uZCktPmdldFN0cmluZ1ZhbHVlKCk7CisgICAgICAgICAgICAgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCpmaXJzdCkpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlzPENTU1By
aW1pdGl2ZVZhbHVlPigqc2Vjb25kKSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHN0YXJ0UXVv
dGUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmZpcnN0KS5nZXRTdHJpbmdWYWx1ZSgp
OworICAgICAgICAgICAgICAgIFN0cmluZyBlbmRRdW90ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPigqc2Vjb25kKS5nZXRTdHJpbmdWYWx1ZSgpOwogICAgICAgICAgICAgICAgIHF1b3Rl
cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoc3RhcnRRdW90ZSwgZW5kUXVvdGUpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFF1b3RlcyhRdW90ZXNEYXRhOjpj
cmVhdGUocXVvdGVzKSk7CkBAIC0yMzE4LDI0ICsyMzE4LDI0IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZTo6Y29tcHV0
ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXplKGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXpl
KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSwg
c3RhdGUuc3R5bGUoKSwgZG9jdW1lbnQoKSkpOwogICAgICAgICAgICAgICAgIHNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
aWYgKHZhbHVlLT5pc0ZvbnRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBDU1NGb250VmFsdWUqIGZv
bnQgPSB0b0NTU0ZvbnRWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIWZvbnQtPnN0eWxl
IHx8ICFmb250LT52YXJpYW50IHx8ICFmb250LT53ZWlnaHQKLSAgICAgICAgICAgICAgICB8fCAh
Zm9udC0+c2l6ZSB8fCAhZm9udC0+bGluZUhlaWdodCB8fCAhZm9udC0+ZmFtaWx5KQorICAgICAg
ICB9IGVsc2UgaWYgKGlzPENTU0ZvbnRWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICAgICAgQ1NT
Rm9udFZhbHVlJiBmb250ID0gZG93bmNhc3Q8Q1NTRm9udFZhbHVlPigqdmFsdWUpOworICAgICAg
ICAgICAgaWYgKCFmb250LnN0eWxlIHx8ICFmb250LnZhcmlhbnQgfHwgIWZvbnQud2VpZ2h0Cisg
ICAgICAgICAgICAgICAgfHwgIWZvbnQuc2l6ZSB8fCAhZm9udC5saW5lSGVpZ2h0IHx8ICFmb250
LmZhbWlseSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBhcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlLCBmb250LT5zdHlsZS5nZXQoKSk7Ci0gICAgICAgICAg
ICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIGZvbnQtPnZhcmlhbnQuZ2V0
KCkpOwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGZv
bnQtPndlaWdodC5nZXQoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
Rm9udFN0eWxlLCBmb250LnN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlGb250VmFyaWFudCwgZm9udC52YXJpYW50LmdldCgpKTsKKyAgICAgICAgICAg
IGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBmb250LndlaWdodC5nZXQoKSk7
CiAgICAgICAgICAgICAvLyBUaGUgcHJldmlvdXMgcHJvcGVydGllcyBjYW4gZGlydHkgb3VyIGZv
bnQgYnV0IHRoZXkgZG9uJ3QgdHJ5IHRvIHJlYWQgdGhlIGZvbnQncwogICAgICAgICAgICAgLy8g
cHJvcGVydGllcyBiYWNrLCB3aGljaCBpcyBzYWZlLiBIb3dldmVyIGlmIGZvbnQtc2l6ZSBpcyB1
c2luZyB0aGUgJ2V4JyB1bml0LCBpdCB3aWxsCiAgICAgICAgICAgICAvLyBuZWVkIHF1ZXJ5IHRo
ZSBkaXJ0aWVkIGZvbnQncyB4LWhlaWdodCB0byBnZXQgdGhlIGNvbXB1dGVkIHNpemUuIFRvIGJl
IHNhZmUgaW4gdGhpcwogICAgICAgICAgICAgLy8gY2FzZSwgbGV0J3MganVzdCB1cGRhdGUgdGhl
IGZvbnQgbm93LgogICAgICAgICAgICAgdXBkYXRlRm9udCgpOwotICAgICAgICAgICAgYXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBmb250LT5zaXplLmdldCgpKTsKKyAgICAgICAg
ICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgZm9udC5zaXplLmdldCgpKTsK
IAotICAgICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKGZvbnQtPmxpbmVIZWlnaHQu
Z2V0KCkpOworICAgICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKGZvbnQubGluZUhl
aWdodC5nZXQoKSk7CiAKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250
RmFtaWx5LCBmb250LT5mYW1pbHkuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUZvbnRGYW1pbHksIGZvbnQuZmFtaWx5LmdldCgpKTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm47CiAKQEAgLTI0MDUsMTcgKzI0MDUsMTcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIAogICAg
ICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGku
YWR2YW5jZSgpKSB7CiAgICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1ZSgp
OwotICAgICAgICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKKyAgICAgICAg
ICAgIGlmICghaXM8Q1NTU2hhZG93VmFsdWU+KCpjdXJyVmFsdWUpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgQ1NTU2hhZG93VmFsdWUqIGl0ZW0gPSB0b0NTU1NoYWRv
d1ZhbHVlKGN1cnJWYWx1ZSk7Ci0gICAgICAgICAgICBpbnQgeCA9IGl0ZW0tPngtPmNvbXB1dGVM
ZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwotICAgICAgICAg
ICAgaW50IHkgPSBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSgpKTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0
ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25E
YXRhKCkpIDogMDsKLSAgICAgICAgICAgIGludCBzcHJlYWQgPSBpdGVtLT5zcHJlYWQgPyBpdGVt
LT5zcHJlYWQtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25E
YXRhKCkpIDogMDsKLSAgICAgICAgICAgIFNoYWRvd1N0eWxlIHNoYWRvd1N0eWxlID0gaXRlbS0+
c3R5bGUgJiYgaXRlbS0+c3R5bGUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUluc2V0ID8gSW5z
ZXQgOiBOb3JtYWw7CisgICAgICAgICAgICBDU1NTaGFkb3dWYWx1ZSYgaXRlbSA9IGRvd25jYXN0
PENTU1NoYWRvd1ZhbHVlPigqY3VyclZhbHVlKTsKKyAgICAgICAgICAgIGludCB4ID0gaXRlbS54
LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsK
KyAgICAgICAgICAgIGludCB5ID0gaXRlbS55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3Nz
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKKyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS5i
bHVyID8gaXRlbS5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSgpKSA6IDA7CisgICAgICAgICAgICBpbnQgc3ByZWFkID0gaXRlbS5zcHJlYWQg
PyBpdGVtLnNwcmVhZC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEoKSkgOiAwOworICAgICAgICAgICAgU2hhZG93U3R5bGUgc2hhZG93U3R5bGUgPSBp
dGVtLnN0eWxlICYmIGl0ZW0uc3R5bGUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUluc2V0ID8g
SW5zZXQgOiBOb3JtYWw7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKLSAgICAgICAgICAgIGlm
IChpdGVtLT5jb2xvcikKLSAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2
ZVZhbHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChpdGVtLmNvbG9yKQor
ICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS5jb2xv
ci5nZXQoKSk7CiAgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS5zdHlsZSgpKQogICAgICAgICAg
ICAgICAgIGNvbG9yID0gc3RhdGUuc3R5bGUoKS0+Y29sb3IoKTsKIApAQCAtMjQzNCwxNyArMjQz
NCwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNSZWZsZWN0VmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NS
ZWZsZWN0VmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NT
UmVmbGVjdFZhbHVlKiByZWZsZWN0VmFsdWUgPSB0b0NTU1JlZmxlY3RWYWx1ZSh2YWx1ZSk7Cisg
ICAgICAgIENTU1JlZmxlY3RWYWx1ZSYgcmVmbGVjdFZhbHVlID0gZG93bmNhc3Q8Q1NTUmVmbGVj
dFZhbHVlPigqdmFsdWUpOwogICAgICAgICBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiByZWZsZWN0
aW9uID0gU3R5bGVSZWZsZWN0aW9uOjpjcmVhdGUoKTsKLSAgICAgICAgcmVmbGVjdGlvbi0+c2V0
RGlyZWN0aW9uKCpyZWZsZWN0VmFsdWUtPmRpcmVjdGlvbigpKTsKLSAgICAgICAgaWYgKHJlZmxl
Y3RWYWx1ZS0+b2Zmc2V0KCkpCi0gICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVm
bGVjdFZhbHVlLT5vZmZzZXQoKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNp
b24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdGF0ZS5jc3NU
b0xlbmd0aENvbnZlcnNpb25EYXRhKCkpKTsKKyAgICAgICAgcmVmbGVjdGlvbi0+c2V0RGlyZWN0
aW9uKCpyZWZsZWN0VmFsdWUuZGlyZWN0aW9uKCkpOworICAgICAgICBpZiAocmVmbGVjdFZhbHVl
Lm9mZnNldCgpKQorICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RWYWx1
ZS5vZmZzZXQoKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJj
ZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdGF0ZS5jc3NUb0xlbmd0aENv
bnZlcnNpb25EYXRhKCkpKTsKICAgICAgICAgTmluZVBpZWNlSW1hZ2UgbWFzazsKICAgICAgICAg
bWFzay5zZXRNYXNrRGVmYXVsdHMoKTsKLSAgICAgICAgbV9zdHlsZU1hcC5tYXBOaW5lUGllY2VJ
bWFnZShpZCwgcmVmbGVjdFZhbHVlLT5tYXNrKCksIG1hc2spOworICAgICAgICBtX3N0eWxlTWFw
Lm1hcE5pbmVQaWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUubWFzaygpLCBtYXNrKTsKICAgICAg
ICAgcmVmbGVjdGlvbi0+c2V0TWFzayhtYXNrKTsKIAogICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRCb3hSZWZsZWN0KHJlZmxlY3Rpb24ucmVsZWFzZSgpKTsKQEAgLTI2NjUsMTAgKzI2NjUsMTAg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAg
IGlmICghdmFsdWUtPmlzTGluZUJveENvbnRhaW5WYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENT
U0xpbmVCb3hDb250YWluVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUJveENvbnRhaW4odG9DU1NMaW5lQm94Q29udGFp
blZhbHVlKHZhbHVlKS0+dmFsdWUoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVC
b3hDb250YWluKGRvd25jYXN0PENTU0xpbmVCb3hDb250YWluVmFsdWU+KCp2YWx1ZSkudmFsdWUo
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI2NzksMTkgKzI2NzksMTkgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICgh
dmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqdmFs
dWUpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAg
Q1NTVmFsdWVMaXN0KiBsaXN0ID0gdG9DU1NWYWx1ZUxpc3QodmFsdWUpOworICAgICAgICBDU1NW
YWx1ZUxpc3QmIGxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CiAgICAgICAg
IFJlZlB0cjxGb250RmVhdHVyZVNldHRpbmdzPiBzZXR0aW5ncyA9IEZvbnRGZWF0dXJlU2V0dGlu
Z3M6OmNyZWF0ZSgpOwotICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7Ci0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlKiBp
dGVtID0gbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKLSAgICAgICAgICAgIGlmICgh
aXRlbS0+aXNGb250RmVhdHVyZVZhbHVlKCkpCisgICAgICAgIGludCBsZW5ndGggPSBsaXN0Lmxl
bmd0aCgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsK
KyAgICAgICAgICAgIGlmICghaXM8Q1NTRm9udEZlYXR1cmVWYWx1ZT4oKml0ZW0pKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgQ1NTRm9udEZlYXR1cmVWYWx1ZSogZmVh
dHVyZSA9IHRvQ1NTRm9udEZlYXR1cmVWYWx1ZShpdGVtKTsKLSAgICAgICAgICAgIHNldHRpbmdz
LT5hcHBlbmQoRm9udEZlYXR1cmUoZmVhdHVyZS0+dGFnKCksIGZlYXR1cmUtPnZhbHVlKCkpKTsK
KyAgICAgICAgICAgIENTU0ZvbnRGZWF0dXJlVmFsdWUmIGZlYXR1cmUgPSBkb3duY2FzdDxDU1NG
b250RmVhdHVyZVZhbHVlPigqaXRlbSk7CisgICAgICAgICAgICBzZXR0aW5ncy0+YXBwZW5kKEZv
bnRGZWF0dXJlKGZlYXR1cmUudGFnKCksIGZlYXR1cmUudmFsdWUoKSkpOwogICAgICAgICB9CiAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGZWF0dXJlU2V0dGluZ3Moc2V0dGluZ3MucmVsZWFz
ZSgpKTsKICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CkBAIC0y
ODMwLDggKzI4MzAsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKLSAgICAgICAgQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSogZ3JpZFRlbXBsYXRlQXJl
YXNWYWx1ZSA9IHRvQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGNv
bnN0IE5hbWVkR3JpZEFyZWFNYXAmIG5ld05hbWVkR3JpZEFyZWFzID0gZ3JpZFRlbXBsYXRlQXJl
YXNWYWx1ZS0+Z3JpZEFyZWFNYXAoKTsKKyAgICAgICAgQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1
ZSYgZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSA9IGRvd25jYXN0PENTU0dyaWRUZW1wbGF0ZUFyZWFz
VmFsdWU+KCp2YWx1ZSk7CisgICAgICAgIGNvbnN0IE5hbWVkR3JpZEFyZWFNYXAmIG5ld05hbWVk
R3JpZEFyZWFzID0gZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5ncmlkQXJlYU1hcCgpOwogCiAgICAg
ICAgIE5hbWVkR3JpZExpbmVzTWFwIG5hbWVkR3JpZENvbHVtbkxpbmVzID0gc3RhdGUuc3R5bGUo
KS0+bmFtZWRHcmlkQ29sdW1uTGluZXMoKTsKICAgICAgICAgTmFtZWRHcmlkTGluZXNNYXAgbmFt
ZWRHcmlkUm93TGluZXMgPSBzdGF0ZS5zdHlsZSgpLT5uYW1lZEdyaWRSb3dMaW5lcygpOwpAQCAt
Mjg0MCwyNyArMjg0MCwyNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXROYW1lZEdyaWRDb2x1bW5MaW5lcyhuYW1lZEdyaWRDb2x1bW5MaW5lcyk7CiAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldE5hbWVkR3JpZFJvd0xpbmVzKG5hbWVkR3JpZFJvd0xpbmVzKTsKIAot
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhKGdyaWRUZW1wbGF0ZUFyZWFz
VmFsdWUtPmdyaWRBcmVhTWFwKCkpOwotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXROYW1lZEdy
aWRBcmVhUm93Q291bnQoZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS0+cm93Q291bnQoKSk7Ci0gICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldE5hbWVkR3JpZEFyZWFDb2x1bW5Db3VudChncmlkVGVtcGxh
dGVBcmVhc1ZhbHVlLT5jb2x1bW5Db3VudCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
TmFtZWRHcmlkQXJlYShncmlkVGVtcGxhdGVBcmVhc1ZhbHVlLmdyaWRBcmVhTWFwKCkpOworICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhUm93Q291bnQoZ3JpZFRlbXBsYXRl
QXJlYXNWYWx1ZS5yb3dDb3VudCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TmFtZWRH
cmlkQXJlYUNvbHVtbkNvdW50KGdyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuY29sdW1uQ291bnQoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRB
dXRvRmxvdzogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChncmlkQXV0b0Zs
b3csIEdyaWRBdXRvRmxvdyk7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCisg
ICAgICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSk7Cisg
ICAgICAgIENTU1ZhbHVlTGlzdCYgbGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVl
KTsKIAotICAgICAgICBpZiAoIWxpc3QtPmxlbmd0aCgpKSB7CisgICAgICAgIGlmICghbGlzdC5s
ZW5ndGgoKSkgewogICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0R3JpZEF1dG9GbG93KFJl
bmRlclN0eWxlOjppbml0aWFsR3JpZEF1dG9GbG93KCkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0ID0gdG9DU1NQcmlt
aXRpdmVWYWx1ZShsaXN0LT5pdGVtKDApKTsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNl
Y29uZCA9IGxpc3QtPmxlbmd0aCgpID09IDIgPyB0b0NTU1ByaW1pdGl2ZVZhbHVlKGxpc3QtPml0
ZW0oMSkpIDogbnVsbHB0cjsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGZpcnN0ID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpsaXN0Lml0ZW0oMCkpOworICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogc2Vjb25kID0gbGlzdC5sZW5ndGgoKSA9PSAyID8gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KGxpc3QuaXRlbSgxKSkgOiBudWxscHRyOwogCiAgICAgICAgIEdyaWRBdXRv
RmxvdyBhdXRvRmxvdyA9IFJlbmRlclN0eWxlOjppbml0aWFsR3JpZEF1dG9GbG93KCk7Ci0gICAg
ICAgIHN3aXRjaCAoZmlyc3QtPmdldFZhbHVlSUQoKSkgeworICAgICAgICBzd2l0Y2ggKGZpcnN0
LmdldFZhbHVlSUQoKSkgewogICAgICAgICBjYXNlIENTU1ZhbHVlUm93OgogICAgICAgICAgICAg
aWYgKHNlY29uZCkKICAgICAgICAgICAgICAgICBhdXRvRmxvdyA9IHNlY29uZC0+Z2V0VmFsdWVJ
RCgpID09IENTU1ZhbHVlRGVuc2UgPyBBdXRvRmxvd1Jvd0RlbnNlIDogQXV0b0Zsb3dTdGFja1Jv
dzsKQEAgLTI5MDcsMTIgKzI5MDcsMTIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNjcm9sbFNuYXBEZXN0aW5hdGlvbjogewogICAgICAg
ICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChzY3JvbGxTbmFwRGVzdGluYXRpb24sIFNjcm9s
bFNuYXBEZXN0aW5hdGlvbikKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0U2Nyb2xsU25hcERl
c3RpbmF0aW9uKHBhcnNlU25hcENvb3JkaW5hdGVQYWlyKHRvQ1NTVmFsdWVMaXN0KCp2YWx1ZSks
IDApKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0U2Nyb2xsU25hcERlc3RpbmF0aW9uKHBh
cnNlU25hcENvb3JkaW5hdGVQYWlyKGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKSwgMCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTY3Jv
bGxTbmFwQ29vcmRpbmF0ZTogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChz
Y3JvbGxTbmFwQ29vcmRpbmF0ZXMsIFNjcm9sbFNuYXBDb29yZGluYXRlcykKLSAgICAgICAgQ1NT
VmFsdWVMaXN0JiB2YWx1ZUxpc3QgPSB0b0NTU1ZhbHVlTGlzdCgqdmFsdWUpOworICAgICAgICBD
U1NWYWx1ZUxpc3QmIHZhbHVlTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsK
ICAgICAgICAgQVNTRVJUKCEodmFsdWVMaXN0Lmxlbmd0aCgpICUgMikpOwogICAgICAgICBzaXpl
X3QgcG9pbnRDb3VudCA9IHZhbHVlTGlzdC5sZW5ndGgoKSAvIDI7CiAgICAgICAgIFZlY3RvcjxM
ZW5ndGhTaXplPiBjb29yZGluYXRlczsKQEAgLTMyMjAsMjQgKzMyMjAsMjQgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKIAogUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKENT
U1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSkKIHsKLSAgICBpZiAodmFsdWUt
PmlzSW1hZ2VWYWx1ZSgpKQotICAgICAgICByZXR1cm4gY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVl
KHByb3BlcnR5LCB0b0NTU0ltYWdlVmFsdWUodmFsdWUpKTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VW
YWx1ZT4oKnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShw
cm9wZXJ0eSwgZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4odmFsdWUpKTsKIAotICAgIGlmICh2YWx1
ZS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT5pc0dyYWRp
ZW50VmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFs
dWUocHJvcGVydHksICp0b0NTU0dyYWRpZW50VmFsdWUodmFsdWUpLT5ncmFkaWVudFdpdGhTdHls
ZXNSZXNvbHZlZCh0aGlzKSk7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9t
VmFsdWUocHJvcGVydHksIHRvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSgqdmFsdWUpKTsKKyAgICBp
ZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICBpZiAoaXM8
Q1NTR3JhZGllbnRWYWx1ZT4oKnZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRP
clBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksICpkb3duY2FzdDxDU1NHcmFkaWVudFZhbHVlPigq
dmFsdWUpLmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpKTsKKyAgICAgICAgcmV0dXJu
IGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgZG93bmNhc3Q8Q1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZT4oKnZhbHVlKSk7CiAgICAgfQogCiAjaWYgRU5BQkxFKENTU19JTUFHRV9T
RVQpCi0gICAgaWYgKHZhbHVlLT5pc0ltYWdlU2V0VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIHNl
dE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgdG9DU1NJbWFnZVNldFZhbHVlKHZhbHVlKSk7
CisgICAgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KCp2YWx1ZSkpCisgICAgICAgIHJldHVybiBz
ZXRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIGRvd25jYXN0PENTU0ltYWdlU2V0VmFsdWU+
KHZhbHVlKSk7CiAjZW5kaWYKIAotICAgIGlmICh2YWx1ZS0+aXNDdXJzb3JJbWFnZVZhbHVlKCkp
Ci0gICAgICAgIHJldHVybiBjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHRvQ1NT
Q3Vyc29ySW1hZ2VWYWx1ZSh2YWx1ZSkpOworICAgIGlmIChpczxDU1NDdXJzb3JJbWFnZVZhbHVl
PigqdmFsdWUpKQorICAgICAgICByZXR1cm4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKHByb3Bl
cnR5LCBkb3duY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlPih2YWx1ZSkpOwogCi0gICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5
bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHksIENTU0ltYWdlVmFsdWUqIHZhbHVlKQpAQCAtMzI1MCw5ICszMjUwLDkgQEAgUGFzc1JlZlB0
cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm8KIAogUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpn
ZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKHZhbHVlLmlzRmlsdGVySW1hZ2VW
YWx1ZSgpKSB7CisgICAgaWYgKGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KHZhbHVlKSkgewogICAg
ICAgICAvLyBGaWx0ZXJJbWFnZSBuZWVkcyB0byBjYWxjdWxhdGUgRmlsdGVyT3BlcmF0aW9ucy4K
LSAgICAgICAgdG9DU1NGaWx0ZXJJbWFnZVZhbHVlKHZhbHVlKS5jcmVhdGVGaWx0ZXJPcGVyYXRp
b25zKHRoaXMpOworICAgICAgICBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPih2YWx1ZSku
Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyh0aGlzKTsKICAgICB9CiAKICAgICBpZiAodmFsdWUuaXNQ
ZW5kaW5nKCkpIHsKQEAgLTM1MTcsOSArMzUxNyw5IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3Jl
YXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgRmlsdGVyT3BlcmF0aW9ucyYK
ICAgICBpZiAoIWluVmFsdWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAo
aW5WYWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoaW5WYWx1ZSk7Ci0gICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKKyAgICBp
ZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppblZhbHVlKSkgeworICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmlu
VmFsdWUpOworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1Zh
bHVlTm9uZSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTM1Mjks
MjEgKzM1MjksMjEgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25z
KENTU1ZhbHVlKiBpblZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJgogICAgIEZpbHRlck9wZXJhdGlv
bnMgb3BlcmF0aW9uczsKICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSBpblZhbHVl
OyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKICAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1
ZSA9IGkudmFsdWUoKTsKLSAgICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzV2ViS2l0Q1NTRmlsdGVy
VmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4oKmN1cnJWYWx1
ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZSogZmlsdGVyVmFsdWUgPSB0b1dlYktpdENTU0ZpbHRlclZhbHVlKGkudmFsdWUoKSk7Ci0gICAg
ICAgIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBlID0gZmlsdGVy
T3BlcmF0aW9uRm9yVHlwZShmaWx0ZXJWYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKTsKKyAgICAgICAg
V2ViS2l0Q1NTRmlsdGVyVmFsdWUmIGZpbHRlclZhbHVlID0gZG93bmNhc3Q8V2ViS2l0Q1NTRmls
dGVyVmFsdWU+KCppLnZhbHVlKCkpOworICAgICAgICBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlv
blR5cGUgb3BlcmF0aW9uVHlwZSA9IGZpbHRlck9wZXJhdGlvbkZvclR5cGUoZmlsdGVyVmFsdWUu
b3BlcmF0aW9uVHlwZSgpKTsKIAogICAgICAgICBpZiAob3BlcmF0aW9uVHlwZSA9PSBGaWx0ZXJP
cGVyYXRpb246OlJFRkVSRU5DRSkgewotICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5n
dGgoKSAhPSAxKQorICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLmxlbmd0aCgpICE9IDEpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogYXJndW1lbnQg
PSBmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKTsKKyAgICAgICAgICAgIENT
U1ZhbHVlKiBhcmd1bWVudCA9IGZpbHRlclZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCk7
CiAKLSAgICAgICAgICAgIGlmICghYXJndW1lbnQtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAg
ICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCphcmd1bWVudCkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRp
dmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoKmFyZ3VtZW50KTsKKyAgICAgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqYXJndW1lbnQpOwogICAgICAgICAgICAgU3RyaW5nIGNzc1VybCA9IHByaW1pdGl2ZVZh
bHVlLmdldFN0cmluZ1ZhbHVlKCk7CiAgICAgICAgICAgICBVUkwgdXJsID0gbV9zdGF0ZS5kb2N1
bWVudCgpLmNvbXBsZXRlVVJMKGNzc1VybCk7CiAKQEAgLTM1NjAsMjQgKzM1NjAsMjQgQEAgYm9v
bCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVl
LCBGaWx0ZXJPcGVyYXRpb25zJgogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3RWYWx1
ZSA9IG51bGxwdHI7CiAgICAgICAgIGlmIChvcGVyYXRpb25UeXBlICE9IEZpbHRlck9wZXJhdGlv
bjo6RFJPUF9TSEFET1cpIHsKICAgICAgICAgICAgIGJvb2wgaGF2ZU5vblByaW1pdGl2ZVZhbHVl
ID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgZmlsdGVyVmFs
dWUtPmxlbmd0aCgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAoIWZpbHRlclZhbHVlLT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKGopLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBmaWx0ZXJWYWx1ZS5sZW5ndGgoKTsgKytqKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmZpbHRlclZhbHVl
Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaikpKSB7CiAgICAgICAgICAgICAgICAgICAgIGhhdmVO
b25QcmltaXRpdmVWYWx1ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChoYXZlTm9uUHJp
bWl0aXZlVmFsdWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAo
ZmlsdGVyVmFsdWUtPmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIGZpcnN0VmFsdWUgPSB0b0NT
U1ByaW1pdGl2ZVZhbHVlKGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsK
KyAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBm
aXJzdFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGZpbHRlclZhbHVlLml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soMCkpOwogICAgICAgICB9CiAKLSAgICAgICAgc3dpdGNoIChmaWx0
ZXJWYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSB7CisgICAgICAgIHN3aXRjaCAoZmlsdGVyVmFsdWUu
b3BlcmF0aW9uVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Okdy
YXlzY2FsZUZpbHRlck9wZXJhdGlvbjoKICAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZTo6U2VwaWFGaWx0ZXJPcGVyYXRpb246CiAgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFs
dWU6OlNhdHVyYXRlRmlsdGVyT3BlcmF0aW9uOiB7CiAgICAgICAgICAgICBkb3VibGUgYW1vdW50
ID0gMTsKLSAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPT0gMSkgeworICAg
ICAgICAgICAgaWYgKGZpbHRlclZhbHVlLmxlbmd0aCgpID09IDEpIHsKICAgICAgICAgICAgICAg
ICBhbW91bnQgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwogICAgICAgICAgICAgICAg
IGlmIChmaXJzdFZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKICAgICAgICAgICAgICAgICAgICAgYW1v
dW50IC89IDEwMDsKQEAgLTM1ODgsNyArMzU4OCw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3Jl
YXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgRmlsdGVyT3BlcmF0aW9ucyYK
ICAgICAgICAgfQogICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpIdWVSb3RhdGVG
aWx0ZXJPcGVyYXRpb246IHsKICAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IDA7Ci0gICAgICAg
ICAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpID09IDEpCisgICAgICAgICAgICBpZiAoZmls
dGVyVmFsdWUubGVuZ3RoKCkgPT0gMSkKICAgICAgICAgICAgICAgICBhbmdsZSA9IGZpcnN0VmFs
dWUtPmNvbXB1dGVEZWdyZWVzKCk7CiAKICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9u
cygpLmFwcGVuZChCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoYW5nbGUs
IG9wZXJhdGlvblR5cGUpKTsKQEAgLTM1OTgsOCArMzU5OCw4IEBAIGJvb2wgU3R5bGVSZXNvbHZl
cjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgRmlsdGVyT3BlcmF0
aW9ucyYKICAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6QnJpZ2h0bmVzc0ZpbHRl
ck9wZXJhdGlvbjoKICAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Q29udHJhc3RG
aWx0ZXJPcGVyYXRpb246CiAgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Ok9wYWNp
dHlGaWx0ZXJPcGVyYXRpb246IHsKLSAgICAgICAgICAgIGRvdWJsZSBhbW91bnQgPSAoZmlsdGVy
VmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6QnJpZ2h0bmVz
c0ZpbHRlck9wZXJhdGlvbikgPyAwIDogMTsKLSAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+
bGVuZ3RoKCkgPT0gMSkgeworICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IChmaWx0ZXJWYWx1
ZS5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJyaWdodG5lc3NGaWx0
ZXJPcGVyYXRpb24pID8gMCA6IDE7CisgICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUubGVuZ3Ro
KCkgPT0gMSkgewogICAgICAgICAgICAgICAgIGFtb3VudCA9IGZpcnN0VmFsdWUtPmdldERvdWJs
ZVZhbHVlKCk7CiAgICAgICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUtPmlzUGVyY2VudGFnZSgp
KQogICAgICAgICAgICAgICAgICAgICBhbW91bnQgLz0gMTAwOwpAQCAtMzYxMCw3ICszNjEwLDcg
QEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBp
blZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJgogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2ViS2l0
Q1NTRmlsdGVyVmFsdWU6OkJsdXJGaWx0ZXJPcGVyYXRpb246IHsKICAgICAgICAgICAgIExlbmd0
aCBzdGREZXZpYXRpb24gPSBMZW5ndGgoMCwgRml4ZWQpOwotICAgICAgICAgICAgaWYgKGZpbHRl
clZhbHVlLT5sZW5ndGgoKSA+PSAxKQorICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLmxlbmd0
aCgpID49IDEpCiAgICAgICAgICAgICAgICAgc3RkRGV2aWF0aW9uID0gY29udmVydFRvRmxvYXRM
ZW5ndGgoZmlyc3RWYWx1ZSwgc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKICAg
ICAgICAgICAgIGlmIChzdGREZXZpYXRpb24uaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0zNjE5LDIxICszNjE5LDIxIEBAIGJvb2wgU3R5bGVSZXNvbHZl
cjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgRmlsdGVyT3BlcmF0
aW9ucyYKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2ViS2l0
Q1NTRmlsdGVyVmFsdWU6OkRyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246IHsKLSAgICAgICAgICAg
IGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgIT0gMSkKKyAgICAgICAgICAgIGlmIChmaWx0ZXJW
YWx1ZS5sZW5ndGgoKSAhPSAxKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICAgICAgQ1NTVmFsdWUqIGNzc1ZhbHVlID0gZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMCk7Ci0gICAgICAgICAgICBpZiAoIWNzc1ZhbHVlLT5pc1NoYWRvd1ZhbHVlKCkp
CisgICAgICAgICAgICBDU1NWYWx1ZSogY3NzVmFsdWUgPSBmaWx0ZXJWYWx1ZS5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDApOworICAgICAgICAgICAgaWYgKCFpczxDU1NTaGFkb3dWYWx1ZT4oKmNz
c1ZhbHVlKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgQ1NTU2hh
ZG93VmFsdWUqIGl0ZW0gPSB0b0NTU1NoYWRvd1ZhbHVlKGNzc1ZhbHVlKTsKLSAgICAgICAgICAg
IGludCB4ID0gaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEoKSk7Ci0gICAgICAgICAgICBpbnQgeSA9IGl0ZW0tPnktPmNvbXB1dGVMZW5n
dGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOworICAgICAgICAgICAg
Q1NTU2hhZG93VmFsdWUmIGl0ZW0gPSBkb3duY2FzdDxDU1NTaGFkb3dWYWx1ZT4oKmNzc1ZhbHVl
KTsKKyAgICAgICAgICAgIGludCB4ID0gaXRlbS54LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUu
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKKyAgICAgICAgICAgIGludCB5ID0gaXRlbS55
LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsK
ICAgICAgICAgICAgIEludFBvaW50IGxvY2F0aW9uKHgsIHkpOwotICAgICAgICAgICAgaW50IGJs
dXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNz
c1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSkgOiAwOworICAgICAgICAgICAgaW50IGJsdXIgPSBp
dGVtLmJsdXIgPyBpdGVtLmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0
aENvbnZlcnNpb25EYXRhKCkpIDogMDsKICAgICAgICAgICAgIENvbG9yIGNvbG9yOwotICAgICAg
ICAgICAgaWYgKGl0ZW0tPmNvbG9yKQotICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9t
UHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0KCkpOworICAgICAgICAgICAgaWYgKGl0ZW0u
Y29sb3IpCisgICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShp
dGVtLmNvbG9yLmdldCgpKTsKIAogICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCku
YXBwZW5kKERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShsb2NhdGlvbiwgYmx1ciwg
Y29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiBDb2xvcjo6dHJhbnNwYXJlbnQpKTsKICAgICAgICAg
ICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1RyYW5zZm9ybUZ1bmN0
aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvVHJhbnNmb3JtRnVuY3Rpb25zLmNwcAppbmRl
eCAwNjYzYzMxMTk1ODEyN2UyODg4YTdkOTA0MjY1M2U5YjFhYWFlYWVjLi45ZmNmMDRjOWZjZTg4
MDRiNDY5ZDVkZWMxYmY5NjEwOTY3Mjk2NjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvVHJhbnNmb3JtRnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvVHJhbnNm
b3JtRnVuY3Rpb25zLmNwcApAQCAtOTIsMTYgKzkyLDE2IEBAIGJvb2wgdHJhbnNmb3Jtc0ZvclZh
bHVlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29u
dmVyCiAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9yZSgp
OyBpLmFkdmFuY2UoKSkgewogICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1ZSgp
OwogCi0gICAgICAgIGlmICghY3VyclZhbHVlLT5pc1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKCkp
CisgICAgICAgIGlmICghaXM8V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU+KCpjdXJyVmFsdWUpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUq
IHRyYW5zZm9ybVZhbHVlID0gdG9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZShpLnZhbHVlKCkpOwot
ICAgICAgICBpZiAoIXRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSkKKyAgICAgICAgV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWUmIHRyYW5zZm9ybVZhbHVlID0gZG93bmNhc3Q8V2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU+KCppLnZhbHVlKCkpOworICAgICAgICBpZiAoIXRyYW5zZm9ybVZhbHVlLmxlbmd0
aCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgYm9vbCBoYXZlTm9uUHJpbWl0
aXZlVmFsdWUgPSBmYWxzZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHRyYW5z
Zm9ybVZhbHVlLT5sZW5ndGgoKTsgKytqKSB7Ci0gICAgICAgICAgICBpZiAoIXRyYW5zZm9ybVZh
bHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGopLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHRyYW5zZm9ybVZhbHVlLmxlbmd0aCgpOyAr
K2opIHsKKyAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1W
YWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGopKSkgewogICAgICAgICAgICAgICAgIGhhdmVO
b25QcmltaXRpdmVWYWx1ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CkBAIC0xMDksMjcgKzEwOSwyNyBAQCBib29sIHRyYW5zZm9ybXNGb3JWYWx1ZShDU1NW
YWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcgogICAg
ICAgICBpZiAoaGF2ZU5vblByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0VmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsKKyAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUmIGZpcnN0VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOwogCi0gICAgICAg
IHN3aXRjaCAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkgeworICAgICAgICBzd2l0
Y2ggKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSkgewogICAgICAgICBjYXNlIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjoKICAgICAgICAgY2Fz
ZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uOgogICAg
ICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRp
b246IHsKICAgICAgICAgICAgIGRvdWJsZSBzeCA9IDEuMDsKICAgICAgICAgICAgIGRvdWJsZSBz
eSA9IDEuMDsKLSAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgp
ID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRpb24pCi0g
ICAgICAgICAgICAgICAgc3kgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAg
ICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIHN5
ID0gZmlyc3RWYWx1ZS5nZXREb3VibGVWYWx1ZSgpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgc3ggPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAg
ICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpICE9IFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZl
VmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgc3kgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAg
ICAgICAgICAgICAgICBzeCA9IGZpcnN0VmFsdWUuZ2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAg
ICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9uVHlwZSgpICE9IFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLmxlbmd0aCgpID4gMSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHNlY29uZFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc2Vjb25kVmFsdWUuZ2V0RG91YmxlVmFsdWUo
KTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBz
eSA9IHN4OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG9w
ZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3Jl
YXRlKHN4LCBzeSwgMS4wLCB0cmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLT5v
cGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5h
cHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShzeCwgc3ksIDEuMCwgdHJhbnNm
b3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkpKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpTY2FsZVpUcmFuc2Zvcm1PcGVyYXRpb246CkBAIC0xMzcsMjUgKzEzNywyNSBAQCBi
b29sIHRyYW5zZm9ybXNGb3JWYWx1ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEmIGNvbnZlcgogICAgICAgICAgICAgZG91YmxlIHN4ID0gMS4wOwogICAg
ICAgICAgICAgZG91YmxlIHN5ID0gMS4wOwogICAgICAgICAgICAgZG91YmxlIHN6ID0gMS4wOwot
ICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWlRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAg
ICAgICBzeiA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICBlbHNl
IGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRpb24pCi0gICAgICAgICAgICAgICAgc3kgPSBm
aXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZh
bHVlLm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVaVHJh
bnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIHN6ID0gZmlyc3RWYWx1ZS5nZXREb3Vi
bGVWYWx1ZSgpOworICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9u
VHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRp
b24pCisgICAgICAgICAgICAgICAgc3kgPSBmaXJzdFZhbHVlLmdldERvdWJsZVZhbHVlKCk7CiAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzeCA9IGZpcnN0VmFsdWUtPmdldERv
dWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRp
b25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJh
dGlvbikgewotICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgp
ID4gMikgewotICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRoaXJk
VmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN6ID0gdGhpcmRWYWx1ZS0+
Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBzeCA9IGZpcnN0VmFsdWUuZ2V0RG91
YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9u
VHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRp
b24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLmxlbmd0aCgpID4g
MikgeworICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHRoaXJkVmFs
dWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soMikpOworICAgICAgICAgICAgICAgICAgICAgICAgc3ogPSB0aGlyZFZh
bHVlLmdldERvdWJsZVZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHRvQ1NTUHJpbWl0
aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgc3kgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLmxlbmd0aCgpID4gMSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHNlY29uZFZhbHVlID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc2Vjb25kVmFsdWUu
Z2V0RG91YmxlVmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgICAgICBzeSA9IHN4OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTY2FsZVRyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKHN4LCBzeSwgc3osIHRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJh
bnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMu
b3BlcmF0aW9ucygpLmFwcGVuZChTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHN4LCBz
eSwgc3osIHRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9uVHlw
ZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOgpAQCAtMTYz
LDE0ICsxNjMsMTQgQEAgYm9vbCB0cmFuc2Zvcm1zRm9yVmFsdWUoQ1NTVmFsdWUqIHZhbHVlLCBj
b25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXIKICAgICAgICAgY2FzZSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbjogewogICAg
ICAgICAgICAgTGVuZ3RoIHR4ID0gTGVuZ3RoKDAsIEZpeGVkKTsKICAgICAgICAgICAgIExlbmd0
aCB0eSA9IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUt
Pm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRy
YW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRUb0Zsb2F0TGVu
Z3RoKGZpcnN0VmFsdWUsIGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAgICAgIGlmICh0cmFuc2Zv
cm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5z
bGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0VG9G
bG9hdExlbmd0aCgmZmlyc3RWYWx1ZSwgY29udmVyc2lvbkRhdGEpOwogICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgdHggPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVl
LCBjb252ZXJzaW9uRGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5v
cGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFu
c2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVl
LT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBzZWNvbmRWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHkgPSBj
b252ZXJ0VG9GbG9hdExlbmd0aChzZWNvbmRWYWx1ZSwgY29udmVyc2lvbkRhdGEpOworICAgICAg
ICAgICAgICAgIHR4ID0gY29udmVydFRvRmxvYXRMZW5ndGgoJmZpcnN0VmFsdWUsIGNvbnZlcnNp
b25EYXRhKTsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9uVHlw
ZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0
aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5sZW5ndGgoKSA+
IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBzZWNvbmRW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdp
dGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0eSA9IGNvbnZl
cnRUb0Zsb2F0TGVuZ3RoKCZzZWNvbmRWYWx1ZSwgY29udmVyc2lvbkRhdGEpOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTc4LDcg
KzE3OCw3IEBAIGJvb2wgdHJhbnNmb3Jtc0ZvclZhbHVlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3Qg
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyCiAgICAgICAgICAgICBpZiAodHguaXNV
bmRlZmluZWQoKSB8fCB0eS5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgTGVuZ3RoKDAsIEZpeGVkKSwg
dHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkp
OworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgTGVuZ3RoKDAsIEZpeGVkKSwgdHJhbnNm
b3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkpKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpUcmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9uOgpAQCAtMTg2LDIwICsxODYsMjAg
QEAgYm9vbCB0cmFuc2Zvcm1zRm9yVmFsdWUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXIKICAgICAgICAgICAgIExlbmd0aCB0eCA9IExlbmd0
aCgwLCBGaXhlZCk7CiAgICAgICAgICAgICBMZW5ndGggdHkgPSBMZW5ndGgoMCwgRml4ZWQpOwog
ICAgICAgICAgICAgTGVuZ3RoIHR6ID0gTGVuZ3RoKDAsIEZpeGVkKTsKLSAgICAgICAgICAgIGlm
ICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlOjpUcmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9uKQotICAgICAgICAgICAgICAgIHR6ID0g
Y29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgY29udmVyc2lvbkRhdGEpOwotICAgICAg
ICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAg
ICAgICAgICB0eSA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIGNvbnZlcnNpb25E
YXRhKTsKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkgPT0g
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb24pCisg
ICAgICAgICAgICAgICAgdHogPSBjb252ZXJ0VG9GbG9hdExlbmd0aCgmZmlyc3RWYWx1ZSwgY29u
dmVyc2lvbkRhdGEpOworICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUub3BlcmF0
aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3Jt
T3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRMZW5ndGgoJmZp
cnN0VmFsdWUsIGNvbnZlcnNpb25EYXRhKTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIHR4ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgY29udmVyc2lvbkRh
dGEpOwotICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgp
ICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0aW9u
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAy
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdGhpcmRWYWx1
ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soMikpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHogPSBjb252ZXJ0VG9GbG9hdExl
bmd0aCh0aGlyZFZhbHVlLCBjb252ZXJzaW9uRGF0YSk7CisgICAgICAgICAgICAgICAgdHggPSBj
b252ZXJ0VG9GbG9hdExlbmd0aCgmZmlyc3RWYWx1ZSwgY29udmVyc2lvbkRhdGEpOworICAgICAg
ICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLmxlbmd0aCgpID4gMikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHRoaXJkVmFsdWUgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MikpOworICAgICAgICAgICAgICAgICAgICAgICAgdHogPSBjb252ZXJ0VG9GbG9hdExlbmd0aCgm
dGhpcmRWYWx1ZSwgY29udmVyc2lvbkRhdGEpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSB0b0NT
U1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRMZW5ndGgoc2Vj
b25kVmFsdWUsIGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5z
Zm9ybVZhbHVlLmxlbmd0aCgpID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUmIHNlY29uZFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0
cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRMZW5ndGgoJnNlY29uZFZhbHVlLCBjb252ZXJz
aW9uRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CkBAIC0yMDcsMTIgKzIwNywxMiBAQCBib29sIHRyYW5zZm9ybXNGb3JWYWx1ZShD
U1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcgog
ICAgICAgICAgICAgaWYgKHR4LmlzVW5kZWZpbmVkKCkgfHwgdHkuaXNVbmRlZmluZWQoKSB8fCB0
ei5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgdHosIHRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNm
b3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3Bl
cmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0eCwg
dHksIHR6LCB0cmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5
cGUoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAg
ICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKLSAgICAg
ICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZSgwLCAwLCAxLCBhbmdsZSwgdHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFu
c2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgZG91YmxlIGFuZ2xl
ID0gZmlyc3RWYWx1ZS5jb21wdXRlRGVncmVlcygpOworICAgICAgICAgICAgb3BlcmF0aW9ucy5v
cGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKDAsIDAs
IDEsIGFuZ2xlLCB0cmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlv
blR5cGUoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb246CkBAIC0y
MjEsMjggKzIyMSwyOCBAQCBib29sIHRyYW5zZm9ybXNGb3JWYWx1ZShDU1NWYWx1ZSogdmFsdWUs
IGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcgogICAgICAgICAgICAgZG91
YmxlIHggPSAwOwogICAgICAgICAgICAgZG91YmxlIHkgPSAwOwogICAgICAgICAgICAgZG91Ymxl
IHogPSAwOwotICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS0+Y29tcHV0ZURl
Z3JlZXMoKTsKKyAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGZpcnN0VmFsdWUuY29tcHV0ZURl
Z3JlZXMoKTsKIAotICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBl
KCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24p
CisgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9uVHlwZSgpID09IFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVYVHJhbnNmb3JtT3BlcmF0aW9uKQogICAgICAgICAg
ICAgICAgIHggPSAxOwotICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJh
dGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9ybU9w
ZXJhdGlvbikKKyAgICAgICAgICAgIGVsc2UgaWYgKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5
cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9ybU9wZXJhdGlv
bikKICAgICAgICAgICAgICAgICB5ID0gMTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICB6ID0gMTsKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChS
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBhbmdsZSwgdHJhbnNmb3Jt
T3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAg
ICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbjo6Y3JlYXRlKHgsIHksIHosIGFuZ2xlLCB0cmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5z
Zm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZTNEVHJhbnNm
b3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgp
IDwgNCkKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5sZW5ndGgoKSA8IDQpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25k
VmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDEpKTsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0aGlyZFZhbHVl
ID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjaygyKSk7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZm91cnRoVmFsdWUgPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDMpKTsKLSAgICAgICAgICAgIGRvdWJsZSB4ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUo
KTsKLSAgICAgICAgICAgIGRvdWJsZSB5ID0gc2Vjb25kVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7
Ci0gICAgICAgICAgICBkb3VibGUgeiA9IHRoaXJkVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0g
ICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmb3VydGhWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsK
LSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3RhdGVUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBhbmdsZSwgdHJhbnNmb3JtT3BlcmF0aW9uVHlw
ZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUmIHNlY29uZFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0
cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKKyAgICAgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlJiB0aGlyZFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKTsKKyAgICAgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlJiBmb3VydGhWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygzKSk7CisgICAgICAg
ICAgICBkb3VibGUgeCA9IGZpcnN0VmFsdWUuZ2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAg
IGRvdWJsZSB5ID0gc2Vjb25kVmFsdWUuZ2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIGRv
dWJsZSB6ID0gdGhpcmRWYWx1ZS5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgZG91Ymxl
IGFuZ2xlID0gZm91cnRoVmFsdWUuY29tcHV0ZURlZ3JlZXMoKTsKKyAgICAgICAgICAgIG9wZXJh
dGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0
ZSh4LCB5LCB6LCBhbmdsZSwgdHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS5v
cGVyYXRpb25UeXBlKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOgpA
QCAtMjUwLDYyICsyNTAsNjIgQEAgYm9vbCB0cmFuc2Zvcm1zRm9yVmFsdWUoQ1NTVmFsdWUqIHZh
bHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXIKICAgICAgICAgY2Fz
ZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb246IHsKICAg
ICAgICAgICAgIGRvdWJsZSBhbmdsZVggPSAwOwogICAgICAgICAgICAgZG91YmxlIGFuZ2xlWSA9
IDA7Ci0gICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmaXJzdFZhbHVlLT5jb21wdXRlRGVncmVl
cygpOwotICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0g
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAg
ICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS5jb21wdXRlRGVncmVlcygpOworICAgICAg
ICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb24pCiAgICAgICAgICAgICAgICAgYW5n
bGVZID0gYW5nbGU7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBhbmdsZVgg
PSBhbmdsZTsKLSAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5
cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbikg
ewotICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpID4gMSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVl
ID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjaygxKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVkgPSBzZWNvbmRWYWx1ZS0+
Y29tcHV0ZURlZ3JlZXMoKTsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUub3Bl
cmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJhbnNmb3JtT3Bl
cmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5sZW5ndGgo
KSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBzZWNv
bmRWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRl
bVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVkg
PSBzZWNvbmRWYWx1ZS5jb21wdXRlRGVncmVlcygpOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgb3BlcmF0aW9ucy5v
cGVyYXRpb25zKCkuYXBwZW5kKFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShhbmdsZVgs
IGFuZ2xlWSwgdHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9u
VHlwZSgpKSkpOworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFNr
ZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShhbmdsZVgsIGFuZ2xlWSwgdHJhbnNmb3JtT3Bl
cmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkpKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1W
YWx1ZS0+bGVuZ3RoKCkgPCA2KQorICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLmxlbmd0
aCgpIDwgNikKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRvdWJsZSBhID0g
Zmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgIGRvdWJsZSBiID0gdG9D
U1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygx
KSktPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICBkb3VibGUgYyA9IHRvQ1NTUHJpbWl0
aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpLT5nZXRE
b3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgZG91YmxlIGQgPSB0b0NTU1ByaW1pdGl2ZVZhbHVl
KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+Z2V0RG91YmxlVmFs
dWUoKTsKLSAgICAgICAgICAgIGRvdWJsZSBlID0gY29udmVyc2lvbkRhdGEuem9vbSgpICogdG9D
U1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg0
KSktPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICBkb3VibGUgZiA9IGNvbnZlcnNpb25E
YXRhLnpvb20oKSAqIHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soNSkpLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgZG91Ymxl
IGEgPSBmaXJzdFZhbHVlLmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBkb3VibGUgYiA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygxKSkuZ2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIGRvdWJsZSBjID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDIpKS5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgZG91YmxlIGQgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMykpLmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBkb3VibGUgZSA9IGNv
bnZlcnNpb25EYXRhLnpvb20oKSAqIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNm
b3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayg0KSkuZ2V0RG91YmxlVmFsdWUoKTsKKyAg
ICAgICAgICAgIGRvdWJsZSBmID0gY29udmVyc2lvbkRhdGEuem9vbSgpICogZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDUp
KS5nZXREb3VibGVWYWx1ZSgpOwogICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCku
YXBwZW5kKE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGEsIGIsIGMsIGQsIGUsIGYp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6Ok1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAg
ICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpIDwgMTYpCisgICAgICAgICAgICBpZiAodHJh
bnNmb3JtVmFsdWUubGVuZ3RoKCkgPCAxNikKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCh0b0NTU1ByaW1pdGl2ZVZhbHVlKHRy
YW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKS0+Z2V0RG91YmxlVmFsdWUo
KSwKLSAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAg
ICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDIpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0b0NTU1ByaW1p
dGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+Z2V0
RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5z
Zm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDQpKS0+Z2V0RG91YmxlVmFsdWUoKSwK
LSAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDUpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAg
ICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKDYpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2
ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDcpKS0+Z2V0RG91
YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9y
bVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDgpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAg
ICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDkpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDEwKSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgdG9DU1NQcmltaXRpdmVW
YWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMSkpLT5nZXREb3Vi
bGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgIGNvbnZlcnNpb25EYXRhLnpvb20oKSAqIHRvQ1NT
UHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTIp
KS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICBjb252ZXJzaW9uRGF0YS56b29t
KCkgKiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDEzKSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgdG9DU1NQcmlt
aXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxNCkpLT5n
ZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgIHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJh
bnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTUpKS0+Z2V0RG91YmxlVmFsdWUo
KSk7CisgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgoZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDAp
KS5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgIGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSkuZ2V0RG91
YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
KnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpLmdldERvdWJsZVZhbHVl
KCksCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zv
cm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS5nZXREb3VibGVWYWx1ZSgpLAorICAg
ICAgICAgICAgICAgIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUu
aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg0KSkuZ2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAg
ICAgICBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soNSkpLmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDYpKS5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgIGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayg3
KSkuZ2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soOCkpLmdldERv
dWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDkpKS5nZXREb3VibGVWYWx1
ZSgpLAorICAgICAgICAgICAgICAgIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNm
b3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMCkpLmdldERvdWJsZVZhbHVlKCksCisg
ICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1
ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDExKSkuZ2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAg
ICAgICAgICBjb252ZXJzaW9uRGF0YS56b29tKCkgKiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTIpKS5nZXREb3VibGVW
YWx1ZSgpLAorICAgICAgICAgICAgICAgIGNvbnZlcnNpb25EYXRhLnpvb20oKSAqIGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVj
aygxMykpLmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDE0KSku
Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTUpKS5nZXREb3Vi
bGVWYWx1ZSgpKTsKICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChN
YXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1hdHJpeCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246IHsKICAgICAgICAgICAgIExlbmd0aCBwID0g
TGVuZ3RoKDAsIEZpeGVkKTsKLSAgICAgICAgICAgIGlmIChmaXJzdFZhbHVlLT5pc0xlbmd0aCgp
KQotICAgICAgICAgICAgICAgIHAgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBj
b252ZXJzaW9uRGF0YSk7CisgICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZS5pc0xlbmd0aCgpKQor
ICAgICAgICAgICAgICAgIHAgPSBjb252ZXJ0VG9GbG9hdExlbmd0aCgmZmlyc3RWYWx1ZSwgY29u
dmVyc2lvbkRhdGEpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVGhp
cyBpcyBhIHF1aXJrIHRoYXQgc2hvdWxkIGdvIGF3YXkgd2hlbiAzZCB0cmFuc2Zvcm1zIGFyZSBm
aW5hbGl6ZWQuCi0gICAgICAgICAgICAgICAgZG91YmxlIHZhbCA9IGZpcnN0VmFsdWUtPmdldERv
dWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgZG91YmxlIHZhbCA9IGZpcnN0VmFsdWUuZ2V0
RG91YmxlVmFsdWUoKTsKICAgICAgICAgICAgICAgICBwID0gdmFsID49IDAgPyBMZW5ndGgoY2xh
bXBUb1Bvc2l0aXZlSW50ZWdlcih2YWwpLCBGaXhlZCkgOiBMZW5ndGgoVW5kZWZpbmVkKTsKICAg
ICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1ZpZXdwb3J0U3R5
bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvVmlld3BvcnRTdHlsZVJlc29sdmVy
LmNwcAppbmRleCA4ZDQxMjlhMGNmOWFkOTZiOWJhNmUyMTc5OTAwNWUzNWQzYzM4MmJiLi42YzE0
NmRlMjI5MDk5Y2E3NGNiYmU1ZjY2NGEyODY4NzdlYjBmZTk5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvVmlld3BvcnRTdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvVmlld3BvcnRTdHlsZVJlc29sdmVyLmNwcApAQCAtMTA4LDE5ICsxMDgsMTkgQEAgZmxv
YXQgVmlld3BvcnRTdHlsZVJlc29sdmVyOjpnZXRWaWV3cG9ydEFyZ3VtZW50VmFsdWUoQ1NTUHJv
cGVydHlJRCBpZCkgY29uc3QKICAgICAgICAgZGVmYXVsdFZhbHVlID0gMTsKIAogICAgIFJlZlB0
cjxDU1NWYWx1ZT4gdmFsdWUgPSBtX3Byb3BlcnR5U2V0LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKGlk
KTsKLSAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlm
ICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuIGRlZmF1bHRW
YWx1ZTsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJp
bWl0aXZlVmFsdWUodmFsdWUuZ2V0KCkpOworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRp
dmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogCi0gICAgaWYg
KHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpIHx8IHByaW1pdGl2ZVZhbHVlLT5pc1B4KCkpCi0g
ICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpOworICAgIGlmIChw
cmltaXRpdmVWYWx1ZS5pc051bWJlcigpIHx8IHByaW1pdGl2ZVZhbHVlLmlzUHgoKSkKKyAgICAg
ICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlLmdldEZsb2F0VmFsdWUoKTsKIAotICAgIGlmIChwcmlt
aXRpdmVWYWx1ZS0+aXNGb250UmVsYXRpdmVMZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIHByaW1p
dGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkgKiBtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQo
KS0+cmVuZGVyU3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCk7CisgICAg
aWYgKHByaW1pdGl2ZVZhbHVlLmlzRm9udFJlbGF0aXZlTGVuZ3RoKCkpCisgICAgICAgIHJldHVy
biBwcmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKCkgKiBtX2RvY3VtZW50LT5kb2N1bWVudEVs
ZW1lbnQoKS0+cmVuZGVyU3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCk7
CiAKLSAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKSB7Ci0gICAgICAgIGZs
b2F0IHBlcmNlbnRWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkgLyAxMDAu
MGY7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpKSB7CisgICAgICAgIGZs
b2F0IHBlcmNlbnRWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLmdldEZsb2F0VmFsdWUoKSAvIDEwMC4w
ZjsKICAgICAgICAgc3dpdGNoIChpZCkgewogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWF4SGVp
Z2h0OgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWluSGVpZ2h0OgpAQCAtMTQwLDcgKzE0MCw3
IEBAIGZsb2F0IFZpZXdwb3J0U3R5bGVSZXNvbHZlcjo6Z2V0Vmlld3BvcnRBcmd1bWVudFZhbHVl
KENTU1Byb3BlcnR5SUQgaWQpIGNvbnN0CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzd2l0Y2gg
KHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICBzd2l0Y2ggKHByaW1pdGl2ZVZh
bHVlLmdldFZhbHVlSUQoKSkgewogICAgIGNhc2UgQ1NTVmFsdWVBdXRvOgogICAgICAgICByZXR1
cm4gZGVmYXVsdFZhbHVlOwogICAgIGNhc2UgQ1NTVmFsdWVEZXZpY2VIZWlnaHQ6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTRmlsdGVyVmFsdWUuaCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9XZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oCmluZGV4IDRmOWQ5MTU4NjY5ZjUxYTBi
YzFkMmQwNjdmZjYyYTgzMGZmZTQxMDQuLmRhZjNhZmJiZDE0YjRiYTIwY2UzZjkzMjg0OTZiNzhl
MDY5YTYyYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NGaWx0ZXJW
YWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oCkBA
IC03MCw4ICs3MCw4IEBAIHByaXZhdGU6CiAgICAgRmlsdGVyT3BlcmF0aW9uVHlwZSBtX3R5cGU7
CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhXZWJLaXRDU1NGaWx0ZXJWYWx1ZSwgaXNXZWJL
aXRDU1NGaWx0ZXJWYWx1ZSgpKQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi19CitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShXZWJLaXRDU1NGaWx0ZXJWYWx1ZSwgaXNXZWJLaXRD
U1NGaWx0ZXJWYWx1ZSgpKQogCi0jZW5kaWYKKyNlbmRpZiAvLyBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCmluZGV4IDQzYmJkMWMzMWM2
ZDlmMjRmMTY4YmIwYzE5YzYyZjBjNzU4OWIzMzYuLmM2ZDU5OTk3MjA4ZjIxNWExMTQyMTE2N2Zk
MzkwMWY4ODgzMjhiNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NN
YXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCkBA
IC02Myw3ICs2Myw3IEBAIHZvaWQgV2ViS2l0Q1NTTWF0cml4OjpzZXRNYXRyaXhWYWx1ZShjb25z
dCBTdHJpbmcmIHN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIFJlZlB0cjxDU1NW
YWx1ZT4gdmFsdWUgPSBzdHlsZURlY2xhcmF0aW9uLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1By
b3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKIAogICAgICAgICAvLyBDaGVjayBmb3IgYSAibm9uZSIg
b3IgZW1wdHkgdHJhbnNmb3JtLiBJbiB0aGVzZSBjYXNlcyB3ZSBjYW4gdXNlIHRoZSBkZWZhdWx0
IGlkZW50aXR5IG1hdHJpeC4KLSAgICAgICAgaWYgKCF2YWx1ZSB8fCAodmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSAmJiAodG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS5nZXQoKSkpLT5nZXRWYWx1
ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKSkKKyAgICAgICAgaWYgKCF2YWx1ZSB8fCAoaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSkuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkpCiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaAppbmRleCAxOTVmOTZhNTFkM2E5NmRkZWMy
ZGE2MmRiYjY4OThiZDc3NjZjOTdlLi45ZGVjOTU2Y2YxMWQyYzViMGRhZTA5NmUzOGQ2MDQ4NDAx
Y2U5MjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUu
aApAQCAtNzksMTggKzc5LDggQEAgcHJpdmF0ZToKICAgICBUcmFuc2Zvcm1PcGVyYXRpb25UeXBl
IG1fdHlwZTsKIH07CiAKLWlubGluZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSogdG9XZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZShDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oIXZhbHVlIHx8IHZhbHVlLT5pc1dlYktpdENTU1RyYW5zZm9ybVZh
bHVlKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSo+
KHZhbHVlKTsKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotaW5saW5lIGNvbnN0IFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlKiB0b1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKGNvbnN0IENTU1Zh
bHVlKiB2YWx1ZSkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighdmFs
dWUgfHwgdmFsdWUtPmlzV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoKSk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PGNvbnN0IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKj4odmFsdWUpOwotfQotCi19
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZSwgaXNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSgpKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKaW5kZXggNjZiZWZmNDE3NWQwN2EwY2M3
MWUyYTc4ODg3ZGE2MDlkZDRjYTQ3OC4uMmYyNWRhYzc5MWRhZDJmYmIyOGFjMDAzYjA5NWEyYzUy
NTAwNTZmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5j
cHAKQEAgLTE1MTAsOCArMTUxMCw4IEBAIGZsb2F0IEFwcGx5U3R5bGVDb21tYW5kOjpjb21wdXRl
ZEZvbnRTaXplKE5vZGUqIG5vZGUpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVmUHRyPENT
U1ZhbHVlPiB2YWx1ZSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3Iobm9kZSkucHJvcGVydHlWYWx1
ZShDU1NQcm9wZXJ0eUZvbnRTaXplKTsKLSAgICBBU1NFUlQodmFsdWUgJiYgdmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSk7Ci0gICAgcmV0dXJuIHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUuZ2V0
KCkpLT5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworICAgIEFTU0VS
VChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUuZ2V0KCkpKTsKKyAgICByZXR1cm4gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BYKTsKIH0KIAogdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6am9pbkNoaWxkVGV4
dE5vZGVzKE5vZGUqIG5vZGUsIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24m
IGVuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCA3ODBkODQ3
MTg4MWJmNGZhMzBhZDFkODYxYWFmOWU1OWU4N2RhMjcxLi5jNjI1Zjc3Y2Q0ZTdhNDczN2NkZTRl
ODJjMWZiNmIxYzU0ZDYwNDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUu
Y3BwCkBAIC0xNDIsOSArMTQyLDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGludCBpZGVudGlm
aWVyRm9yU3R5bGVQcm9wZXJ0eShUKiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQog
ewogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBleHRyYWN0UHJvcGVydHlWYWx1ZShzdHls
ZSwgcHJvcGVydHlJRCk7Ci0gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUtPmlzUHJpbWl0aXZlVmFs
dWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZS5nZXQoKSkpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIHJldHVybiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLmdldCgp
KS0+Z2V0VmFsdWVJRCgpOworICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
KnZhbHVlKS5nZXRWYWx1ZUlEKCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFBhc3NSZWZQ
dHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gZ2V0UHJvcGVydGllc05vdEluKFN0eWxlUHJvcGVy
dGllcyogc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcywgVCogYmFzZVN0eWxlKTsKQEAgLTE5
Nyw3ICsxOTcsNyBAQCBIVE1MRWxlbWVudEVxdWl2YWxlbnQ6OkhUTUxFbGVtZW50RXF1aXZhbGVu
dChDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZUlEIHByaW1pdAogYm9vbCBIVE1MRWxlbWVudEVx
dWl2YWxlbnQ6OnZhbHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50KiBlbGVtZW50LCBTdHlsZVBy
b3BlcnRpZXMqIHN0eWxlKSBjb25zdAogewogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBz
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShtX3Byb3BlcnR5SUQpOwotICAgIHJldHVybiBtYXRj
aGVzKGVsZW1lbnQpICYmIHZhbHVlICYmIHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYgdG9D
U1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS5nZXQoKSktPmdldFZhbHVlSUQoKSA9PSBtX3ByaW1pdGl2
ZVZhbHVlLT5nZXRWYWx1ZUlEKCk7CisgICAgcmV0dXJuIG1hdGNoZXMoZWxlbWVudCkgJiYgaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlLmdldCgpKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCkgPT0gbV9wcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJ
RCgpOwogfQogCiB2b2lkIEhUTUxFbGVtZW50RXF1aXZhbGVudDo6YWRkVG9TdHlsZShFbGVtZW50
KiwgRWRpdGluZ1N0eWxlKiBzdHlsZSkgY29uc3QKQEAgLTIyOSw3ICsyMjksNyBAQCBib29sIEhU
TUxUZXh0RGVjb3JhdGlvbkVxdWl2YWxlbnQ6OnZhbHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50
KiBlbGVtZW50LCBTdHlsZQogICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3R5bGVWYWx1ZSA9IHN0eWxl
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5F
ZmZlY3QpOwogICAgIGlmICghc3R5bGVWYWx1ZSkKICAgICAgICAgc3R5bGVWYWx1ZSA9IHN0eWxl
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOwotICAgIHJl
dHVybiBtYXRjaGVzKGVsZW1lbnQpICYmIHN0eWxlVmFsdWUgJiYgc3R5bGVWYWx1ZS0+aXNWYWx1
ZUxpc3QoKSAmJiB0b0NTU1ZhbHVlTGlzdChzdHlsZVZhbHVlLmdldCgpKS0+aGFzVmFsdWUobV9w
cmltaXRpdmVWYWx1ZS5nZXQoKSk7CisgICAgcmV0dXJuIG1hdGNoZXMoZWxlbWVudCkgJiYgaXM8
Q1NTVmFsdWVMaXN0PihzdHlsZVZhbHVlLmdldCgpKSAmJiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+
KCpzdHlsZVZhbHVlKS5oYXNWYWx1ZShtX3ByaW1pdGl2ZVZhbHVlLmdldCgpKTsKIH0KIAogY2xh
c3MgSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnRFcXVpdmFsZW50
IHsKQEAgLTM1NiwxMiArMzU2LDEyIEBAIEVkaXRpbmdTdHlsZTo6fkVkaXRpbmdTdHlsZSgpCiAK
IHN0YXRpYyBSR0JBMzIgY3NzVmFsdWVUb1JHQkEoQ1NTVmFsdWUqIGNvbG9yVmFsdWUpCiB7Ci0g
ICAgaWYgKCFjb2xvclZhbHVlIHx8ICFjb2xvclZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisg
ICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oY29sb3JWYWx1ZSkpCiAgICAgICAgIHJldHVy
biBDb2xvcjo6dHJhbnNwYXJlbnQ7CiAgICAgCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZUNvbG9yID0gdG9DU1NQcmltaXRpdmVWYWx1ZShjb2xvclZhbHVlKTsKLSAgICBpZiAocHJp
bWl0aXZlQ29sb3ItPmlzUkdCQ29sb3IoKSkKLSAgICAgICAgcmV0dXJuIHByaW1pdGl2ZUNvbG9y
LT5nZXRSR0JBMzJWYWx1ZSgpOworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVDb2xv
ciA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqY29sb3JWYWx1ZSk7CisgICAgaWYgKHBy
aW1pdGl2ZUNvbG9yLmlzUkdCQ29sb3IoKSkKKyAgICAgICAgcmV0dXJuIHByaW1pdGl2ZUNvbG9y
LmdldFJHQkEzMlZhbHVlKCk7CiAgICAgCiAgICAgUkdCQTMyIHJnYmEgPSAwOwogICAgIENTU1Bh
cnNlcjo6cGFyc2VDb2xvcihyZ2JhLCBjb2xvclZhbHVlLT5jc3NUZXh0KCkpOwpAQCAtNDc2LDE3
ICs0NzYsMTcgQEAgdm9pZCBFZGl0aW5nU3R5bGU6OmV4dHJhY3RGb250U2l6ZURlbHRhKCkKIAog
ICAgIC8vIEdldCB0aGUgYWRqdXN0bWVudCBhbW91bnQgb3V0IG9mIHRoZSBzdHlsZS4KICAgICBS
ZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gbV9tdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFs
dWUoQ1NTUHJvcGVydHlXZWJraXRGb250U2l6ZURlbHRhKTsKLSAgICBpZiAoIXZhbHVlIHx8ICF2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhbHVlLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS5nZXQoKSk7CisgICAg
Q1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp2YWx1ZSk7CiAKICAgICAvLyBPbmx5IFBYIGhhbmRsZWQgbm93LiBJZiB3ZSBoYW5k
bGUgbW9yZSB0eXBlcyBpbiB0aGUgZnV0dXJlLCBwZXJoYXBzCiAgICAgLy8gYSBzd2l0Y2ggc3Rh
dGVtZW50IGhlcmUgd291bGQgYmUgbW9yZSBhcHByb3ByaWF0ZS4KLSAgICBpZiAoIXByaW1pdGl2
ZVZhbHVlLT5pc1B4KCkpCisgICAgaWYgKCFwcmltaXRpdmVWYWx1ZS5pc1B4KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fZm9udFNpemVEZWx0YSA9IHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9h
dFZhbHVlKCk7CisgICAgbV9mb250U2l6ZURlbHRhID0gcHJpbWl0aXZlVmFsdWUuZ2V0RmxvYXRW
YWx1ZSgpOwogICAgIG1fbXV0YWJsZVN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdl
YmtpdEZvbnRTaXplRGVsdGEpOwogfQogCkBAIC01MDEsMTYgKzUwMSwxNiBAQCBib29sIEVkaXRp
bmdTdHlsZTo6dGV4dERpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uJiB3cml0aW5nRGlyZWN0aW9u
KSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHVu
aWNvZGVCaWRpID0gbV9tdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVy
dHlVbmljb2RlQmlkaSk7Ci0gICAgaWYgKCF1bmljb2RlQmlkaSB8fCAhdW5pY29kZUJpZGktPmlz
UHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih1bmljb2Rl
QmlkaS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIENTU1ZhbHVlSUQgdW5p
Y29kZUJpZGlWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodW5pY29kZUJpZGkuZ2V0KCkpLT5n
ZXRWYWx1ZUlEKCk7CisgICAgQ1NTVmFsdWVJRCB1bmljb2RlQmlkaVZhbHVlID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp1bmljb2RlQmlkaSkuZ2V0VmFsdWVJRCgpOwogICAgIGlmICh1
bmljb2RlQmlkaVZhbHVlID09IENTU1ZhbHVlRW1iZWQpIHsKICAgICAgICAgUmVmUHRyPENTU1Zh
bHVlPiBkaXJlY3Rpb24gPSBtX211dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQ
cm9wZXJ0eURpcmVjdGlvbik7Ci0gICAgICAgIGlmICghZGlyZWN0aW9uIHx8ICFkaXJlY3Rpb24t
PmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4o
ZGlyZWN0aW9uLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICB3
cml0aW5nRGlyZWN0aW9uID0gdG9DU1NQcmltaXRpdmVWYWx1ZShkaXJlY3Rpb24uZ2V0KCkpLT5n
ZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVMdHIgPyBMZWZ0VG9SaWdodFdyaXRpbmdEaXJlY3Rpb24g
OiBSaWdodFRvTGVmdFdyaXRpbmdEaXJlY3Rpb247CisgICAgICAgIHdyaXRpbmdEaXJlY3Rpb24g
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmRpcmVjdGlvbikuZ2V0VmFsdWVJRCgpID09
IENTU1ZhbHVlTHRyID8gTGVmdFRvUmlnaHRXcml0aW5nRGlyZWN0aW9uIDogUmlnaHRUb0xlZnRX
cml0aW5nRGlyZWN0aW9uOwogCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTkzMCwx
MCArOTMwLDEwIEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpwcmVwYXJlVG9BcHBseUF0KGNvbnN0IFBv
c2l0aW9uJiBwb3NpdGlvbiwgU2hvdWxkUHJlc2VydmVXcml0CiAgICAgICAgIHx8IGNzc1ZhbHVl
VG9SR0JBKG1fbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yKS5nZXQoKSkgPT0gcmdiYUJhY2tncm91bmRDb2xvckluRWZmZWN0KHBvc2l0
aW9uLmNvbnRhaW5lck5vZGUoKSkpCiAgICAgICAgIG1fbXV0YWJsZVN0eWxlLT5yZW1vdmVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAKLSAgICBpZiAodW5pY29kZUJpZGkg
JiYgdW5pY29kZUJpZGktPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICBtX211dGFibGVT
dHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSwgc3RhdGljX2Nhc3Q8Q1NT
VmFsdWVJRD4odG9DU1NQcmltaXRpdmVWYWx1ZSh1bmljb2RlQmlkaS5nZXQoKSktPmdldFZhbHVl
SUQoKSkpOwotICAgICAgICBpZiAoZGlyZWN0aW9uICYmIGRpcmVjdGlvbi0+aXNQcmltaXRpdmVW
YWx1ZSgpKQotICAgICAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3Bl
cnR5RGlyZWN0aW9uLCBzdGF0aWNfY2FzdDxDU1NWYWx1ZUlEPih0b0NTU1ByaW1pdGl2ZVZhbHVl
KGRpcmVjdGlvbi5nZXQoKSktPmdldFZhbHVlSUQoKSkpOworICAgIGlmIChpczxDU1NQcmltaXRp
dmVWYWx1ZT4odW5pY29kZUJpZGkuZ2V0KCkpKSB7CisgICAgICAgIG1fbXV0YWJsZVN0eWxlLT5z
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBzdGF0aWNfY2FzdDxDU1NWYWx1ZUlE
Pihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnVuaWNvZGVCaWRpKS5nZXRWYWx1ZUlEKCkp
KTsKKyAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPihkaXJlY3Rpb24uZ2V0KCkpKQor
ICAgICAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0
aW9uLCBzdGF0aWNfY2FzdDxDU1NWYWx1ZUlEPihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
KmRpcmVjdGlvbikuZ2V0VmFsdWVJRCgpKSk7CiAgICAgfQogfQogCkBAIC0xMDc1LDExICsxMDc1
LDExIEBAIHZvaWQgRWRpdGluZ1N0eWxlOjptZXJnZVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGll
cyogc3R5bGUsIENTU1Byb3BlcnR5T3ZlcnJpZGVNCiAKICAgICAgICAgLy8gdGV4dCBkZWNvcmF0
aW9ucyBuZXZlciBvdmVycmlkZSB2YWx1ZXMKICAgICAgICAgaWYgKChwcm9wZXJ0eS5pZCgpID09
IENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24gfHwgcHJvcGVydHkuaWQoKSA9PSBDU1NQcm9wZXJ0
eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KSAmJiBwcm9wZXJ0eS52YWx1ZSgpLT5pc1Zh
bHVlTGlzdCgpICYmIHZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0
KCkpIHsKLSAgICAgICAgICAgICAgICBtZXJnZVRleHREZWNvcmF0aW9uVmFsdWVzKHRvQ1NTVmFs
dWVMaXN0KHZhbHVlLmdldCgpKSwgdG9DU1NWYWx1ZUxpc3QocHJvcGVydHkudmFsdWUoKSkpOwor
ICAgICAgICAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkgeworICAgICAgICAgICAg
ICAgIG1lcmdlVGV4dERlY29yYXRpb25WYWx1ZXMoZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1
ZS5nZXQoKSksIGRvd25jYXN0PENTU1ZhbHVlTGlzdD4ocHJvcGVydHkudmFsdWUoKSkpOwogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFsdWUg
PSAwOyAvLyB0ZXh0LWRlY29yYXRpb246IG5vbmUgaXMgZXF1aXZhbGVudCB0byBub3QgaGF2aW5n
IHRoZSBwcm9wZXJ0eQorICAgICAgICAgICAgdmFsdWUgPSBudWxscHRyOyAvLyB0ZXh0LWRlY29y
YXRpb246IG5vbmUgaXMgZXF1aXZhbGVudCB0byBub3QgaGF2aW5nIHRoZSBwcm9wZXJ0eQogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKG1vZGUgPT0gT3ZlcnJpZGVWYWx1ZXMgfHwgKG1vZGUgPT0g
RG9Ob3RPdmVycmlkZVZhbHVlcyAmJiAhdmFsdWUpKQpAQCAtMTEzMSw5ICsxMTMxLDkgQEAgdm9p
ZCBFZGl0aW5nU3R5bGU6Om1lcmdlU3R5bGVGcm9tUnVsZXNGb3JTZXJpYWxpemF0aW9uKFN0eWxl
ZEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9w
ZXJ0eUNvdW50OyArK2kpIHsKICAgICAgICAgICAgIFN0eWxlUHJvcGVydGllczo6UHJvcGVydHlS
ZWZlcmVuY2UgcHJvcGVydHkgPSBtX211dGFibGVTdHlsZS0+cHJvcGVydHlBdChpKTsKICAgICAg
ICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IHByb3BlcnR5LnZhbHVlKCk7Ci0gICAgICAgICAgICBp
ZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICBpZiAoIWlzPENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgaWYgKHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpLT5pc1BlcmNlbnRhZ2UoKSkgewor
ICAgICAgICAgICAgaWYgKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzUGVy
Y2VudGFnZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gY29tcHV0
ZWRQcm9wZXJ0eVZhbHVlID0gY29tcHV0ZWRTdHlsZS5wcm9wZXJ0eVZhbHVlKHByb3BlcnR5Lmlk
KCkpKQogICAgICAgICAgICAgICAgICAgICBmcm9tQ29tcHV0ZWRTdHlsZS0+YWRkUGFyc2VkUHJv
cGVydHkoQ1NTUHJvcGVydHkocHJvcGVydHkuaWQoKSwgY29tcHV0ZWRQcm9wZXJ0eVZhbHVlLnJl
bGVhc2UoKSkpOwogICAgICAgICAgICAgfQpAQCAtMTI0NSw5ICsxMjQ1LDkgQEAgYm9vbCBFZGl0
aW5nU3R5bGU6OmlzRmxvYXRpbmcoKQogaW50IEVkaXRpbmdTdHlsZTo6bGVnYWN5Rm9udFNpemUo
RG9jdW1lbnQqIGRvY3VtZW50KSBjb25zdAogewogICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFs
dWUgPSBtX211dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRT
aXplKTsKLSAgICBpZiAoIWNzc1ZhbHVlIHx8ICFjc3NWYWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KGNzc1ZhbHVlLmdldCgpKSkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGxlZ2FjeUZvbnRTaXplRnJvbUNTU1ZhbHVlKGRvY3Vt
ZW50LCB0b0NTU1ByaW1pdGl2ZVZhbHVlKGNzc1ZhbHVlLmdldCgpKSwKKyAgICByZXR1cm4gbGVn
YWN5Rm9udFNpemVGcm9tQ1NTVmFsdWUoZG9jdW1lbnQsIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPihjc3NWYWx1ZS5nZXQoKSksCiAgICAgICAgIG1fc2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9u
dFNpemUsIEFsd2F5c1VzZUxlZ2FjeUZvbnRTaXplKTsKIH0KIApAQCAtMTMwOCwxMCArMTMwOCwx
MCBAQCBXcml0aW5nRGlyZWN0aW9uIEVkaXRpbmdTdHlsZTo6dGV4dERpcmVjdGlvbkZvclNlbGVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHVuaWNvZGVCaWRpID0gQ29tcHV0ZWRTdHls
ZUV4dHJhY3RvcihuKS5wcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5VW5pY29kZUJpZGkpOwotICAg
ICAgICAgICAgaWYgKCF1bmljb2RlQmlkaSB8fCAhdW5pY29kZUJpZGktPmlzUHJpbWl0aXZlVmFs
dWUoKSkKKyAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHVuaWNvZGVCaWRp
LmdldCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgQ1NTVmFs
dWVJRCB1bmljb2RlQmlkaVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh1bmljb2RlQmlkaS5n
ZXQoKSktPmdldFZhbHVlSUQoKTsKKyAgICAgICAgICAgIENTU1ZhbHVlSUQgdW5pY29kZUJpZGlW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdW5pY29kZUJpZGkpLmdldFZhbHVl
SUQoKTsKICAgICAgICAgICAgIGlmICh1bmljb2RlQmlkaVZhbHVlID09IENTU1ZhbHVlRW1iZWQg
fHwgdW5pY29kZUJpZGlWYWx1ZSA9PSBDU1NWYWx1ZUJpZGlPdmVycmlkZSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb247CiAgICAgICAgIH0KQEAgLTEzMzcs
MTAgKzEzMzcsMTAgQEAgV3JpdGluZ0RpcmVjdGlvbiBFZGl0aW5nU3R5bGU6OnRleHREaXJlY3Rp
b25Gb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYKIAogICAgICAgICBDb21wdXRl
ZFN0eWxlRXh0cmFjdG9yIGNvbXB1dGVkU3R5bGUobm9kZSk7CiAgICAgICAgIFJlZlB0cjxDU1NW
YWx1ZT4gdW5pY29kZUJpZGkgPSBjb21wdXRlZFN0eWxlLnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVy
dHlVbmljb2RlQmlkaSk7Ci0gICAgICAgIGlmICghdW5pY29kZUJpZGkgfHwgIXVuaWNvZGVCaWRp
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KHVuaWNvZGVCaWRpLmdldCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIENT
U1ZhbHVlSUQgdW5pY29kZUJpZGlWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodW5pY29kZUJp
ZGkuZ2V0KCkpLT5nZXRWYWx1ZUlEKCk7CisgICAgICAgIENTU1ZhbHVlSUQgdW5pY29kZUJpZGlW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdW5pY29kZUJpZGkpLmdldFZhbHVl
SUQoKTsKICAgICAgICAgaWYgKHVuaWNvZGVCaWRpVmFsdWUgPT0gQ1NTVmFsdWVOb3JtYWwpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMTM0OSwxMCArMTM0OSwxMCBAQCBXcml0aW5nRGly
ZWN0aW9uIEVkaXRpbmdTdHlsZTo6dGV4dERpcmVjdGlvbkZvclNlbGVjdGlvbihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJgogCiAgICAgICAgIEFTU0VSVCh1bmljb2RlQmlkaVZhbHVlID09IENTU1Zh
bHVlRW1iZWQpOwogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGRpcmVjdGlvbiA9IGNvbXB1dGVk
U3R5bGUucHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eURpcmVjdGlvbik7Ci0gICAgICAgIGlmICgh
ZGlyZWN0aW9uIHx8ICFkaXJlY3Rpb24tPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYg
KCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oZGlyZWN0aW9uLmdldCgpKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgIENTU1ZhbHVlSUQgZGlyZWN0aW9uVmFsdWUgPSB0b0NTU1ByaW1p
dGl2ZVZhbHVlKGRpcmVjdGlvbi5nZXQoKSktPmdldFZhbHVlSUQoKTsKKyAgICAgICAgQ1NTVmFs
dWVJRCBkaXJlY3Rpb25WYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZGlyZWN0
aW9uKS5nZXRWYWx1ZUlEKCk7CiAgICAgICAgIGlmIChkaXJlY3Rpb25WYWx1ZSAhPSBDU1NWYWx1
ZUx0ciAmJiBkaXJlY3Rpb25WYWx1ZSAhPSBDU1NWYWx1ZVJ0bCkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCkBAIC0xNDUyLDExICsxNDUyLDExIEBAIHZvaWQgU3R5bGVDaGFuZ2U6OmV4dHJhY3RU
ZXh0U3R5bGVzKERvY3VtZW50KiBkb2N1bWVudCwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyoKICAg
ICAvLyBBc3N1bWluZyByZWNvbmNpbGVUZXh0RGVjb3JhdGlvblByb3BlcnRpZXMgaGFzIGJlZW4g
Y2FsbGVkLCB0aGVyZSBzaG91bGQgbm90IGJlIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9ucy1pbi1l
ZmZlY3QKICAgICAvLyBGdXJ0aGVybW9yZSwgdGV4dC1kZWNvcmF0aW9uOiBub25lIGhhcyBiZWVu
IHRyaW1tZWQgc28gdGhhdCB0ZXh0LWRlY29yYXRpb24gcHJvcGVydHkgaXMgYWx3YXlzIGEgQ1NT
VmFsdWVMaXN0LgogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4dERlY29yYXRpb24gPSBzdHlsZS0+
Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKLSAgICBpZiAo
dGV4dERlY29yYXRpb24gJiYgdGV4dERlY29yYXRpb24tPmlzVmFsdWVMaXN0KCkpIHsKKyAgICBp
ZiAoaXM8Q1NTVmFsdWVMaXN0Pih0ZXh0RGVjb3JhdGlvbi5nZXQoKSkpIHsKICAgICAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB1bmRlcmxpbmUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVVbmRlcmxpbmUpOwogICAgICAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGxpbmVUaHJvdWdoID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlTGluZVRocm91Z2gpOwogCi0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxp
c3Q+IG5ld1RleHREZWNvcmF0aW9uID0gdG9DU1NWYWx1ZUxpc3QodGV4dERlY29yYXRpb24uZ2V0
KCkpLT5jb3B5KCk7CisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IG5ld1RleHREZWNvcmF0
aW9uID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdGV4dERlY29yYXRpb24pLmNvcHkoKTsKICAg
ICAgICAgaWYgKG5ld1RleHREZWNvcmF0aW9uLT5yZW1vdmVBbGwodW5kZXJsaW5lLmdldCgpKSkK
ICAgICAgICAgICAgIG1fYXBwbHlVbmRlcmxpbmUgPSB0cnVlOwogICAgICAgICBpZiAobmV3VGV4
dERlY29yYXRpb24tPnJlbW92ZUFsbChsaW5lVGhyb3VnaC5nZXQoKSkpCkBAIC0xNDg5LDkgKzE0
ODksOSBAQCB2b2lkIFN0eWxlQ2hhbmdlOjpleHRyYWN0VGV4dFN0eWxlcyhEb2N1bWVudCogZG9j
dW1lbnQsIE11dGFibGVTdHlsZVByb3BlcnRpZXMqCiAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5
KENTU1Byb3BlcnR5Rm9udEZhbWlseSk7CiAKICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiBmb250
U2l6ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpKSB7
Ci0gICAgICAgIGlmICghZm9udFNpemUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYg
KCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmZvbnRTaXplKSkKICAgICAgICAgICAgIHN0eWxlLT5y
ZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplKTsgLy8gQ2FuJ3QgbWFrZSBzZW5zZSBv
ZiB0aGUgbnVtYmVyLiBQdXQgbm8gZm9udCBzaXplLgotICAgICAgICBlbHNlIGlmIChpbnQgbGVn
YWN5Rm9udFNpemUgPSBsZWdhY3lGb250U2l6ZUZyb21DU1NWYWx1ZShkb2N1bWVudCwgdG9DU1NQ
cmltaXRpdmVWYWx1ZShmb250U2l6ZS5nZXQoKSksCisgICAgICAgIGVsc2UgaWYgKGludCBsZWdh
Y3lGb250U2l6ZSA9IGxlZ2FjeUZvbnRTaXplRnJvbUNTU1ZhbHVlKGRvY3VtZW50LCBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oZm9udFNpemUuZ2V0KCkpLAogICAgICAgICAgICAgICAgIHNo
b3VsZFVzZUZpeGVkRm9udERlZmF1bHRTaXplLCBVc2VMZWdhY3lGb250U2l6ZU9ubHlJZlBpeGVs
VmFsdWVzTWF0Y2gpKSB7CiAgICAgICAgICAgICBtX2FwcGx5Rm9udFNpemUgPSBTdHJpbmc6Om51
bWJlcihsZWdhY3lGb250U2l6ZSk7CiAgICAgICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHko
Q1NTUHJvcGVydHlGb250U2l6ZSk7CkBAIC0xNTAyLDI4ICsxNTAyLDI2IEBAIHZvaWQgU3R5bGVD
aGFuZ2U6OmV4dHJhY3RUZXh0U3R5bGVzKERvY3VtZW50KiBkb2N1bWVudCwgTXV0YWJsZVN0eWxl
UHJvcGVydGllcyoKIHN0YXRpYyB2b2lkIGRpZmZUZXh0RGVjb3JhdGlvbnMoTXV0YWJsZVN0eWxl
UHJvcGVydGllcyogc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydElELCBDU1NWYWx1ZSogcmVm
VGV4dERlY29yYXRpb24pCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiB0ZXh0RGVjb3JhdGlvbiA9
IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRJRCk7Ci0gICAgaWYgKCF0ZXh0RGVj
b3JhdGlvbiB8fCAhdGV4dERlY29yYXRpb24tPmlzVmFsdWVMaXN0KCkgfHwgIXJlZlRleHREZWNv
cmF0aW9uIHx8ICFyZWZUZXh0RGVjb3JhdGlvbi0+aXNWYWx1ZUxpc3QoKSkKKyAgICBpZiAoIWlz
PENTU1ZhbHVlTGlzdD4odGV4dERlY29yYXRpb24uZ2V0KCkpIHx8ICFpczxDU1NWYWx1ZUxpc3Q+
KHJlZlRleHREZWNvcmF0aW9uKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPENTU1Zh
bHVlTGlzdD4gbmV3VGV4dERlY29yYXRpb24gPSB0b0NTU1ZhbHVlTGlzdCh0ZXh0RGVjb3JhdGlv
bi5nZXQoKSktPmNvcHkoKTsKLSAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlc0luUmVmVGV4dERlY29y
YXRpb24gPSB0b0NTU1ZhbHVlTGlzdChyZWZUZXh0RGVjb3JhdGlvbik7CisgICAgUmVmUHRyPENT
U1ZhbHVlTGlzdD4gbmV3VGV4dERlY29yYXRpb24gPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp0
ZXh0RGVjb3JhdGlvbikuY29weSgpOworICAgIENTU1ZhbHVlTGlzdCYgdmFsdWVzSW5SZWZUZXh0
RGVjb3JhdGlvbiA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnJlZlRleHREZWNvcmF0aW9uKTsK
IAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzSW5SZWZUZXh0RGVjb3JhdGlvbi0+
bGVuZ3RoKCk7IGkrKykKLSAgICAgICAgbmV3VGV4dERlY29yYXRpb24tPnJlbW92ZUFsbCh2YWx1
ZXNJblJlZlRleHREZWNvcmF0aW9uLT5pdGVtKGkpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHZhbHVlc0luUmVmVGV4dERlY29yYXRpb24ubGVuZ3RoKCk7IGkrKykKKyAgICAgICAgbmV3
VGV4dERlY29yYXRpb24tPnJlbW92ZUFsbCh2YWx1ZXNJblJlZlRleHREZWNvcmF0aW9uLml0ZW0o
aSkpOwogCiAgICAgc2V0VGV4dERlY29yYXRpb25Qcm9wZXJ0eShzdHlsZSwgbmV3VGV4dERlY29y
YXRpb24uZ2V0KCksIHByb3BlcnRJRCk7CiB9CiAKIHN0YXRpYyBib29sIGZvbnRXZWlnaHRJc0Jv
bGQoQ1NTVmFsdWUqIGZvbnRXZWlnaHQpCiB7Ci0gICAgaWYgKCFmb250V2VpZ2h0KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFmb250V2VpZ2h0LT5pc1ByaW1pdGl2ZVZhbHVlKCkp
CisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oZm9udFdlaWdodCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIC8vIEJlY2F1c2UgYiB0YWcgY2FuIG9ubHkgYm9sZCB0ZXh0LCB0
aGVyZSBhcmUgb25seSB0d28gc3RhdGVzIGluIHBsYWluIGh0bWw6IGJvbGQgYW5kIG5vdCBib2xk
LgogICAgIC8vIENvbGxhcHNlIGFsbCBvdGhlciB2YWx1ZXMgdG8gZWl0aGVyIG9uZSBvZiB0aGVz
ZSB0d28gc3RhdGVzIGZvciBlZGl0aW5nIHB1cnBvc2VzLgotICAgIHN3aXRjaCAodG9DU1NQcmlt
aXRpdmVWYWx1ZShmb250V2VpZ2h0KS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgc3dpdGNoIChkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmZvbnRXZWlnaHQpLmdldFZhbHVlSUQoKSkgewogICAg
ICAgICBjYXNlIENTU1ZhbHVlMTAwOgogICAgICAgICBjYXNlIENTU1ZhbHVlMjAwOgogICAgICAg
ICBjYXNlIENTU1ZhbHVlMzAwOgpAQCAtMTYxNSwxMiArMTYxMywxMiBAQCBib29sIGlzVHJhbnNw
YXJlbnRDb2xvclZhbHVlKENTU1ZhbHVlKiBjc3NWYWx1ZSkKIHsKICAgICBpZiAoIWNzc1ZhbHVl
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoIWNzc1ZhbHVlLT5pc1ByaW1pdGl2ZVZh
bHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmNzc1ZhbHVlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSA9IHRvQ1NTUHJp
bWl0aXZlVmFsdWUoY3NzVmFsdWUpOyAgICAKLSAgICBpZiAodmFsdWUtPmlzUkdCQ29sb3IoKSkK
LSAgICAgICAgcmV0dXJuICFhbHBoYUNoYW5uZWwodmFsdWUtPmdldFJHQkEzMlZhbHVlKCkpOyAg
ICAKLSAgICByZXR1cm4gdmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVRyYW5zcGFyZW50
OworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqY3NzVmFsdWUpOworICAgIGlmICh2YWx1ZS5pc1JHQkNvbG9yKCkpCisgICAgICAgIHJl
dHVybiAhYWxwaGFDaGFubmVsKHZhbHVlLmdldFJHQkEzMlZhbHVlKCkpOworICAgIHJldHVybiB2
YWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVUcmFuc3BhcmVudDsKIH0KIAogYm9vbCBoYXNU
cmFuc3BhcmVudEJhY2tncm91bmRDb2xvcihTdHlsZVByb3BlcnRpZXMqIHN0eWxlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggN2RiNjM2NGRiYTRmMzU2ZTI0
MTg5ZDcxNGVlMmRjZGMyMDU0MDRhYS4uYzBjMTI4N2VkMjcwNzNiZDJkMzcwZTUwNzY5Y2Q4MzQ0
Yjk5NmM3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCkBAIC0x
MzksOCArMTM5LDggQEAgc3RhdGljIGJvb2wgZXhlY3V0ZVRvZ2dsZVN0eWxlSW5MaXN0KEZyYW1l
JiBmcmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEUKIAogICAgIFJlZlB0cjxDU1NW
YWx1ZT4gc2VsZWN0ZWRDU1NWYWx1ZSA9IHNlbGVjdGlvblN0eWxlLT5zdHlsZSgpLT5nZXRQcm9w
ZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOwogICAgIFN0cmluZyBuZXdTdHlsZSA9IEFTQ0lJTGl0
ZXJhbCgibm9uZSIpOwotICAgIGlmIChzZWxlY3RlZENTU1ZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7
Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHNlbGVjdGVkQ1NTVmFsdWVMaXN0ID0gdG9D
U1NWYWx1ZUxpc3Qoc2VsZWN0ZWRDU1NWYWx1ZS5nZXQoKSk7CisgICAgaWYgKGlzPENTU1ZhbHVl
TGlzdD4oKnNlbGVjdGVkQ1NTVmFsdWUpKSB7CisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+
IHNlbGVjdGVkQ1NTVmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PihzZWxlY3RlZENT
U1ZhbHVlLmdldCgpKTsKICAgICAgICAgaWYgKCFzZWxlY3RlZENTU1ZhbHVlTGlzdC0+cmVtb3Zl
QWxsKHZhbHVlKSkKICAgICAgICAgICAgIHNlbGVjdGVkQ1NTVmFsdWVMaXN0LT5hcHBlbmQoKnZh
bHVlKTsKICAgICAgICAgaWYgKHNlbGVjdGVkQ1NTVmFsdWVMaXN0LT5sZW5ndGgoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQppbmRleCAwZDVkM2Zl
MGY3OWExYmIwMTE0Y2Q3MWYyN2M3MTllYzg0ZmMwMzk4Li40MjYxMmU0ZTlkYzBlNjFlYTA2Zjgx
MWZlMjg4NDhmNTc2ZmE2MWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0hUTUxDb252ZXJ0ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9I
VE1MQ29udmVydGVyLm1tCkBAIC03MjAsOCArNzIwLDggQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
SFRNTENvbnZlcnRlckNhY2hlczo6aW5saW5lU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoRWxlbWVu
dCYKIAogc3RhdGljIGJvb2wgc3RyaW5nRnJvbUNTU1ZhbHVlKENTU1ZhbHVlJiB2YWx1ZSwgU3Ry
aW5nJiByZXN1bHQpCiB7Ci0gICAgaWYgKHZhbHVlLmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAg
ICAgICB1bnNpZ25lZCBzaG9ydCBwcmltaXRpdmVUeXBlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2
YWx1ZSkucHJpbWl0aXZlVHlwZSgpOworICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFs
dWUpKSB7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IHByaW1pdGl2ZVR5cGUgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnByaW1pdGl2ZVR5cGUoKTsKICAgICAgICAgaWYgKHBy
aW1pdGl2ZVR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcgfHwgcHJpbWl0aXZl
VHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSB8fAogICAgICAgICAgICAgcHJpbWl0
aXZlVHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UIHx8IHByaW1pdGl2ZVR5cGUg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19BVFRSKSB7CiAgICAgICAgICAgICBTdHJpbmcgc3Ry
aW5nVmFsdWUgPSB2YWx1ZS5jc3NUZXh0KCk7CkBAIC04OTIsMTMgKzg5MiwxMyBAQCBib29sIEhU
TUxDb252ZXJ0ZXJDYWNoZXM6OmZsb2F0UHJvcGVydHlWYWx1ZUZvck5vZGUoTm9kZSYgbm9kZSwg
Q1NTUHJvcGVydHlJRCBwcgogCiAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1l
bnQ+KG5vZGUpOwogICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gY29tcHV0ZWRTdHls
ZVByb3BlcnR5Rm9yRWxlbWVudChlbGVtZW50LCBwcm9wZXJ0eUlkKSkgewotICAgICAgICBpZiAo
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiBmbG9hdFZhbHVlRnJvbVByaW1pdGl2ZVZhbHVl
KHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVlKSwgcmVzdWx0KSkKKyAgICAgICAgaWYgKGlzPENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpICYmIGZsb2F0VmFsdWVGcm9tUHJpbWl0aXZlVmFsdWUo
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSksIHJlc3VsdCkpCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBib29sIGluaGVyaXQgPSBmYWxzZTsKICAgICBp
ZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGlubGluZVN0eWxlUHJvcGVydHlGb3JFbGVtZW50
KGVsZW1lbnQsIHByb3BlcnR5SWQpKSB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpICYmIGZsb2F0VmFsdWVGcm9tUHJpbWl0aXZlVmFsdWUodG9DU1NQcmltaXRpdmVWYWx1
ZSgqdmFsdWUpLCByZXN1bHQpKQorICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSkgJiYgZmxvYXRWYWx1ZUZyb21QcmltaXRpdmVWYWx1ZShkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKSwgcmVzdWx0KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICBpZiAodmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSkKICAgICAgICAgICAgIGluaGVyaXQg
PSB0cnVlOwpAQCAtMTA2MSwxNCArMTA2MSwxNCBAQCBDb2xvciBIVE1MQ29udmVydGVyQ2FjaGVz
Ojpjb2xvclByb3BlcnR5VmFsdWVGb3JOb2RlKE5vZGUmIG5vZGUsIENTU1Byb3BlcnR5SUQgcAog
CiAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgIGlm
IChSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gY29tcHV0ZWRTdHlsZVByb3BlcnR5Rm9yRWxlbWVu
dChlbGVtZW50LCBwcm9wZXJ0eUlkKSkgewotICAgICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSkuaXNSR0JDb2xvcigpKQotICAg
ICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRDb2xvcihDb2xvcih0b0NTU1ByaW1pdGl2ZVZhbHVl
KCp2YWx1ZSkuZ2V0UkdCQTMyVmFsdWUoKSksIHByb3BlcnR5SWQgPT0gQ1NTUHJvcGVydHlDb2xv
cik7CisgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5pc1JHQkNvbG9yKCkpCisgICAgICAgICAgICBy
ZXR1cm4gbm9ybWFsaXplZENvbG9yKENvbG9yKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpLmdldFJHQkEzMlZhbHVlKCkpLCBwcm9wZXJ0eUlkID09IENTU1Byb3BlcnR5Q29sb3Ip
OwogICAgIH0KIAogICAgIGJvb2wgaW5oZXJpdCA9IGZhbHNlOwogICAgIGlmIChSZWZQdHI8Q1NT
VmFsdWU+IHZhbHVlID0gaW5saW5lU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoZWxlbWVudCwgcHJv
cGVydHlJZCkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYgdG9D
U1NQcmltaXRpdmVWYWx1ZSgqdmFsdWUpLmlzUkdCQ29sb3IoKSkKLSAgICAgICAgICAgIHJldHVy
biBub3JtYWxpemVkQ29sb3IoQ29sb3IodG9DU1NQcmltaXRpdmVWYWx1ZSgqdmFsdWUpLmdldFJH
QkEzMlZhbHVlKCkpLCBwcm9wZXJ0eUlkID09IENTU1Byb3BlcnR5Q29sb3IpOworICAgICAgICBp
ZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp2YWx1ZSkuaXNSR0JDb2xvcigpKQorICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6
ZWRDb2xvcihDb2xvcihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRSR0JB
MzJWYWx1ZSgpKSwgcHJvcGVydHlJZCA9PSBDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICAgICAgaWYg
KHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpCiAgICAgICAgICAgICBpbmhlcml0ID0gdHJ1ZTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggOTBmNDU1YjZjMTY5ODZhN2Fi
ZTEzOGM4YzU5ODIzZTAyNjE5MWYwOS4uMGU4ZmY4MzdmZWU0MGJmYzAyMWQ5ZmMyZjk5ZWIxMjNk
M2I0MmRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtNDc2LDkgKzQ3Niw5IEBA
IHN0YXRpYyBib29sIHByb3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUoU3R5bGVQcm9wZXJ0aWVz
KiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwCiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IHN0
eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOwogICAgIGlmICghdmFsdWUpCiAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkK
KyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgcmV0dXJuIHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUuZ2V0KCkpLT5nZXRW
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lOworICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lOwogfQogCiBzdGF0
aWMgYm9vbCBuZWVkSW50ZXJjaGFuZ2VOZXdsaW5lQWZ0ZXIoY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiB2KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAppbmRleCBiYWM0ZjIxM2Nj
Mjk5YmRkZWY3NDIxNGVmZDQzOGEzYjMzZDE0MGQzLi4xOTQ2YjkzNmIzYTczMmQzZDMxYjI5MGIw
MWU0YmM1MTMxOWQ0ZjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJp
YWxpemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcApA
QCAtMzI4LDEwICszMjgsMTAgQEAgdm9pZCBQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVSZXNvdXJj
ZXNGb3JQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydGllcyogc3R5bGUKICAgICB1bnNpZ25l
ZCBwcm9wZXJ0eUNvdW50ID0gc3R5bGVEZWNsYXJhdGlvbi0+cHJvcGVydHlDb3VudCgpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0eUNvdW50OyArK2kpIHsKICAgICAgICAg
UmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSA9IHN0eWxlRGVjbGFyYXRpb24tPnByb3BlcnR5QXQo
aSkudmFsdWUoKTsKLSAgICAgICAgaWYgKCFjc3NWYWx1ZS0+aXNJbWFnZVZhbHVlKCkpCisgICAg
ICAgIGlmICghaXM8Q1NTSW1hZ2VWYWx1ZT4oKmNzc1ZhbHVlKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2UgPSB0b0NTU0ltYWdlVmFsdWUo
Y3NzVmFsdWUuZ2V0KCkpLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOworICAgICAgICBTdHlsZUlt
YWdlKiBzdHlsZUltYWdlID0gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oKmNzc1ZhbHVlKS5jYWNo
ZWRPclBlbmRpbmdJbWFnZSgpOwogICAgICAgICAvLyBOb24gY2FjaGVkLWltYWdlcyBhcmUganVz
dCBwbGFjZS1ob2xkZXJzIGFuZCBkbyBub3QgY29udGFpbiBkYXRhLgogICAgICAgICBpZiAoIXN0
eWxlSW1hZ2UgfHwgIXN0eWxlSW1hZ2UtPmlzQ2FjaGVkSW1hZ2UoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJv
cGVydHlBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJv
cGVydHlBbmltYXRpb24uY3BwCmluZGV4IDdmMDZjZmUwNWVlZWRmNDQwNDc5OThhODllMDUxZWNm
MzFhZGUzM2QuLmJlYTg1M2VlOWU5NDE3ZTgwOTY2NDAzMTIxYzUzMWEyOTA5MDdmODcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1h
dGlvbi5jcHAKQEAgLTI5NywxOCArMjk3LDE4IEBAIHN0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxT
dHlsZUltYWdlPiBibGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9uQmFzZSogYW5pbSwgU3R5bGVJCiAg
ICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIGZyb21HZW5lcmF0ZWQgPSB0b1N0eWxlR2Vu
ZXJhdGVkSW1hZ2UoZnJvbSktPmltYWdlVmFsdWUoKTsKICAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZSYgdG9HZW5lcmF0ZWQgPSB0b1N0eWxlR2VuZXJhdGVkSW1hZ2UodG8pLT5pbWFnZVZh
bHVlKCk7CiAKLSAgICAgICAgaWYgKGZyb21HZW5lcmF0ZWQuaXNGaWx0ZXJJbWFnZVZhbHVlKCkg
JiYgdG9HZW5lcmF0ZWQuaXNGaWx0ZXJJbWFnZVZhbHVlKCkpIHsKKyAgICAgICAgaWYgKGlzPENT
U0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpICYmIGlzPENTU0ZpbHRlckltYWdlVmFs
dWU+KHRvR2VuZXJhdGVkKSkgewogICAgICAgICAgICAgLy8gQW5pbWF0aW9uIG9mIGdlbmVyYXRl
ZCBpbWFnZXMganVzdCBwb3NzaWJsZSBpZiBpbnB1dCBpbWFnZXMgYXJlIGVxdWFsLgogICAgICAg
ICAgICAgLy8gT3RoZXJ3aXNlIGZhbGwgYmFjayB0byBjcm9zcyBmYWRlIGFuaW1hdGlvbi4KLSAg
ICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSB0b0NTU0ZpbHRlcklt
YWdlVmFsdWUoZnJvbUdlbmVyYXRlZCk7Ci0gICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVl
JiB0b0ZpbHRlciA9IHRvQ1NTRmlsdGVySW1hZ2VWYWx1ZSh0b0dlbmVyYXRlZCk7CisgICAgICAg
ICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiBmcm9tRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVy
SW1hZ2VWYWx1ZT4oZnJvbUdlbmVyYXRlZCk7CisgICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZh
bHVlJiB0b0ZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVk
KTsKICAgICAgICAgICAgIGlmIChmcm9tRmlsdGVyLmVxdWFsSW5wdXRJbWFnZXModG9GaWx0ZXIp
ICYmIGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gYmxl
bmRGaWx0ZXIoYW5pbSwgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpLCBmcm9tRmlsdGVyLmZpbHRl
ck9wZXJhdGlvbnMoKSwgdG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAoZnJvbUdlbmVyYXRlZC5pc0Nyb3NzZmFkZVZhbHVlKCkg
JiYgdG9HZW5lcmF0ZWQuaXNDcm9zc2ZhZGVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBDU1NDcm9z
c2ZhZGVWYWx1ZSYgZnJvbUNyb3NzZmFkZSA9IHRvQ1NTQ3Jvc3NmYWRlVmFsdWUoZnJvbUdlbmVy
YXRlZCk7Ci0gICAgICAgICAgICBDU1NDcm9zc2ZhZGVWYWx1ZSYgdG9Dcm9zc2ZhZGUgPSB0b0NT
U0Nyb3NzZmFkZVZhbHVlKHRvR2VuZXJhdGVkKTsKKyAgICAgICAgaWYgKGlzPENTU0Nyb3NzZmFk
ZVZhbHVlPihmcm9tR2VuZXJhdGVkKSAmJiBpczxDU1NDcm9zc2ZhZGVWYWx1ZT4odG9HZW5lcmF0
ZWQpKSB7CisgICAgICAgICAgICBDU1NDcm9zc2ZhZGVWYWx1ZSYgZnJvbUNyb3NzZmFkZSA9IGRv
d25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPihmcm9tR2VuZXJhdGVkKTsKKyAgICAgICAgICAgIENT
U0Nyb3NzZmFkZVZhbHVlJiB0b0Nyb3NzZmFkZSA9IGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVl
Pih0b0dlbmVyYXRlZCk7CiAgICAgICAgICAgICBpZiAoZnJvbUNyb3NzZmFkZS5lcXVhbElucHV0
SW1hZ2VzKHRvQ3Jvc3NmYWRlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gU3R5bGVHZW5lcmF0
ZWRJbWFnZTo6Y3JlYXRlKCp0b0Nyb3NzZmFkZS5ibGVuZChmcm9tQ3Jvc3NmYWRlLCBwcm9ncmVz
cykpOwogICAgICAgICB9CkBAIC0zMTcsMTYgKzMxNywxNiBAQCBzdGF0aWMgaW5saW5lIFBhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRGdW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW0sIFN0
eWxlSQogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTE5OTU2CiAgICAgfSBlbHNlIGlmIChmcm9tLT5pc0dlbmVyYXRlZEltYWdlKCkgJiYgdG8tPmlz
Q2FjaGVkSW1hZ2UoKSkgewogICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlJiBmcm9tR2Vu
ZXJhdGVkID0gdG9TdHlsZUdlbmVyYXRlZEltYWdlKGZyb20pLT5pbWFnZVZhbHVlKCk7Ci0gICAg
ICAgIGlmIChmcm9tR2VuZXJhdGVkLmlzRmlsdGVySW1hZ2VWYWx1ZSgpKSB7Ci0gICAgICAgICAg
ICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiBmcm9tRmlsdGVyID0gdG9DU1NGaWx0ZXJJbWFnZVZhbHVl
KGZyb21HZW5lcmF0ZWQpOworICAgICAgICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oZnJv
bUdlbmVyYXRlZCkpIHsKKyAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIGZyb21GaWx0
ZXIgPSBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKTsKICAgICAg
ICAgICAgIGlmIChmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCkgJiYgdG9TdHlsZUNhY2hlZEltYWdl
KHRvKS0+Y2FjaGVkSW1hZ2UoKSA9PSBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0sIGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2Uo
KSwgZnJvbUZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgcHJv
Z3Jlc3MpOwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiBBZGQgaW50ZXJwb2xhdGlvbiBi
ZXR3ZWVuIGNyb3NzLWZhZGUgYW5kIGltYWdlIHNvdXJjZS4KICAgICB9IGVsc2UgaWYgKGZyb20t
PmlzQ2FjaGVkSW1hZ2UoKSAmJiB0by0+aXNHZW5lcmF0ZWRJbWFnZSgpKSB7CiAgICAgICAgIENT
U0ltYWdlR2VuZXJhdG9yVmFsdWUmIHRvR2VuZXJhdGVkID0gdG9TdHlsZUdlbmVyYXRlZEltYWdl
KHRvKS0+aW1hZ2VWYWx1ZSgpOwotICAgICAgICBpZiAodG9HZW5lcmF0ZWQuaXNGaWx0ZXJJbWFn
ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIHRvRmlsdGVyID0g
dG9DU1NGaWx0ZXJJbWFnZVZhbHVlKHRvR2VuZXJhdGVkKTsKKyAgICAgICAgaWYgKGlzPENTU0Zp
bHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKSkgeworICAgICAgICAgICAgQ1NTRmlsdGVySW1h
Z2VWYWx1ZSYgdG9GaWx0ZXIgPSBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPih0b0dlbmVy
YXRlZCk7CiAgICAgICAgICAgICBpZiAodG9GaWx0ZXIuY2FjaGVkSW1hZ2UoKSAmJiB0b1N0eWxl
Q2FjaGVkSW1hZ2UoZnJvbSktPmNhY2hlZEltYWdlKCkgPT0gdG9GaWx0ZXIuY2FjaGVkSW1hZ2Uo
KSkgICAgIAogICAgICAgICAgICAgICAgIHJldHVybiBibGVuZEZpbHRlcihhbmltLCB0b0ZpbHRl
ci5jYWNoZWRJbWFnZSgpLCBGaWx0ZXJPcGVyYXRpb25zKCksIHRvRmlsdGVyLmZpbHRlck9wZXJh
dGlvbnMoKSwgcHJvZ3Jlc3MpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sLmNwcAppbmRleCA0MDM1ZjY2MDQxOWVhZjUwODNhZGIzZDNl
YjgxYzJkOWExOTg3NzkzLi5mNDJlY2U3NjY2YzNlZDcxZjBkNWQxNTY3ZDZiZTE2MDk1NWNkN2Uw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAK
QEAgLTg0LDggKzg0LDggQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6YWRqdXN0SW5uZXJUZXh0
U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUsIFJlbmQKICAgICBpZiAoSFRNTEVs
ZW1lbnQqIGlubmVyVGV4dCA9IGNvbnRyb2wuaW5uZXJUZXh0RWxlbWVudCgpKSB7CiAgICAgICAg
IGlmIChjb25zdCBTdHlsZVByb3BlcnRpZXMqIHByb3BlcnRpZXMgPSBpbm5lclRleHQtPnByZXNl
bnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4g
dmFsdWUgPSBwcm9wZXJ0aWVzLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0
VXNlck1vZGlmeSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKLSAgICAgICAgICAgICAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0VXNlck1vZGlmeSh0
b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSkpOworICAgICAgICAgICAgaWYgKGlzPENTU1ByaW1p
dGl2ZVZhbHVlPih2YWx1ZS5nZXQoKSkpCisgICAgICAgICAgICAgICAgdGV4dEJsb2NrU3R5bGUt
PnNldFVzZXJNb2RpZnkoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpOwogICAg
ICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvU3R5bGVQZW5kaW5nSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9T
dHlsZVBlbmRpbmdJbWFnZS5oCmluZGV4IGI5NTQ4Njg1NGFhMWM5YWNiNmExYWI5MjIwM2Q3OTQx
NDE2MDZiMDUuLjU5OWRhMDQ3YWI2M2Q2NDgyYmFhNDU2ZWJjZGIwMjhkMjkzZGVlYTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVBlbmRpbmdJbWFnZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVBlbmRpbmdJbWFnZS5o
CkBAIC00NSwxMiArNDUsMTIgQEAgY2xhc3MgU3R5bGVQZW5kaW5nSW1hZ2UgOiBwdWJsaWMgU3R5
bGVJbWFnZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVQZW5kaW5nSW1h
Z2U+IGNyZWF0ZShDU1NWYWx1ZSogdmFsdWUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVBl
bmRpbmdJbWFnZSh2YWx1ZSkpOyB9CiAKLSAgICBDU1NJbWFnZVZhbHVlKiBjc3NJbWFnZVZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSAmJiBtX3ZhbHVlLT5pc0ltYWdlVmFsdWUoKSA/IHRv
Q1NTSW1hZ2VWYWx1ZShtX3ZhbHVlKSA6IG51bGxwdHI7IH0KKyAgICBDU1NJbWFnZVZhbHVlKiBj
c3NJbWFnZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gaXM8Q1NTSW1hZ2VWYWx1ZT4obV92YWx1ZSkg
PyBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX3ZhbHVlKSA6IG51bGxwdHI7IH0KICAgICBDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlKiBjc3NJbWFnZUdlbmVyYXRvclZhbHVlKCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZSAmJiBtX3ZhbHVlLT5pc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSA/IHN0YXRpY19j
YXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPihtX3ZhbHVlKSA6IG51bGxwdHI7IH0KLSAgICBD
U1NDdXJzb3JJbWFnZVZhbHVlKiBjc3NDdXJzb3JJbWFnZVZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZSAmJiBtX3ZhbHVlLT5pc0N1cnNvckltYWdlVmFsdWUoKSA/IHRvQ1NTQ3Vyc29ySW1h
Z2VWYWx1ZShtX3ZhbHVlKSA6IG51bGxwdHI7IH0KKyAgICBDU1NDdXJzb3JJbWFnZVZhbHVlKiBj
c3NDdXJzb3JJbWFnZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gaXM8Q1NTQ3Vyc29ySW1hZ2VWYWx1
ZT4obV92YWx1ZSkgPyBkb3duY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlPihtX3ZhbHVlKSA6IG51
bGxwdHI7IH0KIAogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQotICAgIENTU0ltYWdlU2V0VmFs
dWUqIGNzc0ltYWdlU2V0VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlICYmIG1fdmFsdWUt
PmlzSW1hZ2VTZXRWYWx1ZSgpID8gdG9DU1NJbWFnZVNldFZhbHVlKG1fdmFsdWUpIDogbnVsbHB0
cjsgfQorICAgIENTU0ltYWdlU2V0VmFsdWUqIGNzc0ltYWdlU2V0VmFsdWUoKSBjb25zdCB7IHJl
dHVybiBpczxDU1NJbWFnZVNldFZhbHVlPihtX3ZhbHVlKSA/IGRvd25jYXN0PENTU0ltYWdlU2V0
VmFsdWU+KG1fdmFsdWUpIDogbnVsbHB0cjsgfQogI2VuZGlmCiAKICAgICB2b2lkIGRldGFjaEZy
b21DU1NWYWx1ZSgpIHsgbV92YWx1ZSA9IG51bGxwdHI7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdDb2xvci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NvbG9yLmgKaW5k
ZXggNDYwY2YwMjk4YzhhNGYzNjA2OTEyYTEyMzUyNWUyMDdiOTU4MzVlYS4uMDA3NWVkZWNhZDdm
NjVlYmI5NDljZDMwMDUwMDAzN2JhZTJjNDcyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0NvbG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NvbG9yLmgKQEAgLTky
LDggKzkyLDggQEAgcHJpdmF0ZToKICAgICBTVkdDb2xvclR5cGUgbV9jb2xvclR5cGU7CiB9Owog
Ci1DU1NfVkFMVUVfVFlQRV9DQVNUUyhTVkdDb2xvciwgaXNTVkdDb2xvcigpKTsKLQogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShTVkdD
b2xvciwgaXNTVkdDb2xvcigpKQorCiAjZW5kaWYgLy8gU1ZHQ29sb3JfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAppbmRleCAwNmRkMjQ4MDRiMjQ3ZTVkOTM2ZjU1
NDFkODBiZGNiNTY2NjA1MzBiLi5hZTY0OWRlYTMxOTJmNTM5MTk2YTY5OWYxNTliNWI5NzY2MDBk
ODlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcApAQCAtMjUz
LDExICsyNTMsMTEgQEAgdm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFjZSgp
CiAgICAgaWYgKGRlc2NyaWJlc1BhcmVudEZvbnQpIHsgICAgCiAgICAgICAgIC8vIFRyYXZlcnNl
IHBhcnNlZCBDU1MgdmFsdWVzIGFuZCBhc3NvY2lhdGUgQ1NTRm9udEZhY2VTcmNWYWx1ZSBlbGVt
ZW50cyB3aXRoIG91cnNlbHZlcy4KICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBzcmMgPSBtX2Zv
bnRGYWNlUnVsZS0+cHJvcGVydGllcygpLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlT
cmMpOwotICAgICAgICBDU1NWYWx1ZUxpc3QqIHNyY0xpc3QgPSB0b0NTU1ZhbHVlTGlzdChzcmMu
Z2V0KCkpOworICAgICAgICBDU1NWYWx1ZUxpc3QqIHNyY0xpc3QgPSBkb3duY2FzdDxDU1NWYWx1
ZUxpc3Q+KHNyYy5nZXQoKSk7CiAKICAgICAgICAgdW5zaWduZWQgc3JjTGVuZ3RoID0gc3JjTGlz
dCA/IHNyY0xpc3QtPmxlbmd0aCgpIDogMDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNyY0xlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoQ1NTRm9udEZhY2VTcmNWYWx1
ZSogaXRlbSA9IHRvQ1NTRm9udEZhY2VTcmNWYWx1ZShzcmNMaXN0LT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKGkpKSkKKyAgICAgICAgICAgIGlmIChDU1NGb250RmFjZVNyY1ZhbHVlKiBpdGVtID0g
ZG93bmNhc3Q8Q1NTRm9udEZhY2VTcmNWYWx1ZT4oc3JjTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjayhpKSkpCiAgICAgICAgICAgICAgICAgaXRlbS0+c2V0U1ZHRm9udEZhY2VFbGVtZW50KHRo
aXMpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFpbnQuaAppbmRleCBkMzA5M2FmYjJh
ZTM4ZjlhNzcxNTU4ZGM4Yzc4MmRiMjkyNzMwZDA4Li5hYTM5YzdlMGI5OTc3MTNjYmM5MTYxZWRk
NTY0NDBmNTAzMGQwM2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFpbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFpbnQuaApAQCAtMTEyLDggKzExMiw4IEBA
IHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdXJpOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMo
U1ZHUGFpbnQsIGlzU1ZHUGFpbnQoKSk7Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoU1ZHUGFpbnQsIGlzU1ZHUGFpbnQoKSkKKwog
I2VuZGlmIC8vIFNWR1BhaW50X2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239209</attachid>
            <date>2014-10-03 10:36:26 -0700</date>
            <delta_ts>2014-10-03 15:24:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137381-20141003103627.patch</filename>
            <type>text/plain</type>
            <size>277389</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWNhN2EzMGM0Njg2YmNl
YTE4OTM4Y2ZlNDc2Y2IwNzAwNWMxZTJlZS4uMGNlYmI1NWJjNjRmNTQwMTM2NGVkMzQ1ZDE5N2Yz
NGM3MGFlMjEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0MSBAQAorMjAxNC0xMC0wMiAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSBmb3IgQ1NTVmFsdWUgc3ViY2xhc3NlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzgxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBm
b3IgQ1NTVmFsdWUgc3ViY2xhc3Nlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2
aW9yIGNoYW5nZS4KKworICAgICAgICAqIGNzcy9DU1NBc3BlY3RSYXRpb1ZhbHVlLmg6CisgICAg
ICAgICogY3NzL0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1ND
YWxjdWxhdGlvblZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9u
Tm9kZVBhcnNlcjo6cGFyc2VWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU0NhbGN1bGF0aW9uVmFs
dWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTQ2FudmFzVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEJvcmRl
clJhZGl1c1Nob3J0aGFuZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVF
eHRyYWN0b3I6OnByb3BlcnR5TWF0Y2hlcyk6CisgICAgICAgICogY3NzL0NTU0Nyb3NzZmFkZVZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN1YmltYWdlS25vd25Ub0JlT3BhcXVlKToKKyAg
ICAgICAgKiBjc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDdXJzb3JJbWFnZVZhbHVlOjp+
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDdXJzb3JJbWFnZVZh
bHVlOjp1cGRhdGVJZlNWR0N1cnNvcklzVXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDdXJz
b3JJbWFnZVZhbHVlOjpjYWNoZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDdXJzb3JJ
bWFnZVZhbHVlOjpjYWNoZWRPclBlbmRpbmdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1ND
dXJzb3JJbWFnZVZhbHVlOjppc1NWR0N1cnNvcik6CisgICAgICAgICogY3NzL0NTU0N1cnNvcklt
YWdlVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5oOgorICAgICAg
ICAqIGNzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0ZvbnRGZWF0
dXJlVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKToKKyAgICAgICAgKiBj
c3MvQ1NTRm9udFZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0Z1bmN0aW9uVmFsdWUuaDoKKyAg
ICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NH
cmFkaWVudFZhbHVlOjppbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVl
OjpncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCk6CisgICAgICAgICogY3NzL0NTU0dyYWRpZW50
VmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLmg6CisgICAgICAg
ICogY3NzL0NTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRv
clZhbHVlOjppbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVl
Ojppc0ZpeGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVl
OjpmaXhlZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6
aXNQZW5kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6Omtu
b3duVG9CZU9wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVl
Ojpsb2FkU3ViaW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFs
dWU6OnN1YmltYWdlSXNQZW5kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJh
dG9yVmFsdWU6OmNhY2hlZEltYWdlRm9yQ1NTVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NJbWFn
ZUdlbmVyYXRvclZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0ltYWdlU2V0VmFsdWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VTZXRWYWx1ZTo6ZmlsbEltYWdlU2V0KToKKyAgICAg
ICAgKiBjc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NJbWFnZVZhbHVl
Lmg6CisgICAgICAgICogY3NzL0NTU0luaGVyaXRlZFZhbHVlLmg6CisgICAgICAgICogY3NzL0NT
U0luaXRpYWxWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NMaW5lQm94Q29udGFpblZhbHVlLmg6
CisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OnBhcnNlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjphZGRGaWxsVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjphZGRBbmltYXRpb25WYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlM1ZhbHVlc0ZpbGxQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRmlsbFBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGaWxsUmVwZWF0KToKKyAgICAgICAgKFdlYkNvcmU6
OmdyaWRNaXNzaW5nR3JpZFBvc2l0aW9uVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZUdyaWRUZW1wbGF0ZVJvd3NBbmRBcmVhcyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUNpcmNsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
YXJzZXI6OnBhcnNlQmFzaWNTaGFwZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZURlcHJlY2F0ZWRHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OnBhcnNlRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6cGFyc2VSYWRpYWxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OmNyZWF0ZUZvbnRGYWNlUnVsZSk6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVl
Lmg6CisgICAgICAgICogY3NzL0NTU1JlZmxlY3RWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NT
aGFkb3dWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmg6Cisg
ICAgICAgICogY3NzL0NTU1RvU3R5bGVNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9T
dHlsZU1hcDo6bWFwRmlsbEF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHls
ZU1hcDo6bWFwRmlsbENsaXApOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFw
RmlsbENvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBGaWxs
QmxlbmRNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxPcmln
aW4pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbFJlcGVhdFgpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbFJlcGVhdFkpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbFhQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NUb1N0eWxlTWFwOjptYXBGaWxsWVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Rv
U3R5bGVNYXA6Om1hcEZpbGxNYXNrU291cmNlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjptYXBBbmltYXRpb25EZWxheSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0
eWxlTWFwOjptYXBBbmltYXRpb25EaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9T
dHlsZU1hcDo6bWFwQW5pbWF0aW9uRHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9T
dHlsZU1hcDo6bWFwQW5pbWF0aW9uRmlsbE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9T
dHlsZU1hcDo6bWFwQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjptYXBBbmltYXRpb25QbGF5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VTbGljZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVF1YWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQpOgorICAgICAgICAqIGNz
cy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6aXNJbXBsaWNpdEluaXRpYWxWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTVmFsdWU6Omhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWU6OmVxdWFscyk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NWYWx1ZTo6Y3NzVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6ZGVzdHJveSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6Y2xvbmVGb3JDU1NPTSk6CisgICAgICAgICog
Y3NzL0NTU1ZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU1ZhbHVlTGlzdC5oOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTVmFsdWVMaXN0SW5zcGVjdG9yOjpDU1NWYWx1ZUxpc3RJbnNwZWN0b3IpOgor
ICAgICAgICAqIGNzcy9EZXByZWNhdGVkU3R5bGVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlEZWZhdWx0OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlOdW1iZXI6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eUF1dG86OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eUNsaXA6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNv
bG9yOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlMZW5ndGg6
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVN0cmluZzo6YXBw
bHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVyUmFkaXVzOjph
cHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGaWxsTGF5ZXI6OmFw
cGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvbXB1dGVMZW5ndGg6
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnQ6OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRGYW1pbHk6OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250V2VpZ2h0OjphcHBseVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250VmFyaWFudExpZ2F0dXJl
czo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291bnRlcjo6
YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q3Vyc29yOjphcHBs
eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0QWxpZ246OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHREZWNvcmF0aW9uOjph
cHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RGVjb3JhdGlv
blNraXA6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU1hcnF1
ZWVJbmNyZW1lbnQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eU1hcnF1ZWVSZXBldGl0aW9uOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlNYXJxdWVlU3BlZWQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eVRleHRVbmRlcmxpbmVQb3NpdGlvbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5TGluZUhlaWdodDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5TGluZUhlaWdodEZvcklPU1RleHRBdXRvc2l6aW5nOjphcHBs
eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlXb3JkU3BhY2luZzo6YXBw
bHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5UGFnZVNpemU6OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRFbXBoYXNpc1N0eWxl
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RW1waGFz
aXNQb3NpdGlvbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
UmVzaXplOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlWZXJ0
aWNhbEFsaWduOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlB
c3BlY3RSYXRpbzo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
Wm9vbTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGlzcGxh
eTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q2xpcFBhdGg6
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVNoYXBlOjphcHBs
eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlJbWFnZVJlc29sdXRpb246
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRJbmRlbnQ6
OmFwcGx5VmFsdWUpOgorICAgICAgICAqIGNzcy9NZWRpYUxpc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6cmVwb3J0TWVkaWFRdWVyeVdhcm5pbmdJZk5lZWRlZCk6CisgICAgICAgICogY3NzL01l
ZGlhUXVlcnlFdmFsdWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGFyZUFzcGVjdFJh
dGlvVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6bnVtYmVyVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6b3JpZW50YXRpb25NZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OmV2
YWxSZXNvbHV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmRldmljZV9waXhlbF9yYXRpb01lZGlh
RmVhdHVyZUV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x1dGlvbk1lZGlhRmVhdHVyZUV2
YWwpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3Jl
Ojp2aWV3X21vZGVNZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OnBvaW50ZXJN
ZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKiBjc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cm9rZURhc2hBcnJheVRvQ1NTVmFsdWVM
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXB1dGVkU3R5bGVFeHRyYWN0b3I6OnN2Z1Byb3Bl
cnR5VmFsdWUpOgorICAgICAgICAqIGNzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkpOgorICAgICAgICAq
IGNzcy9Tb3VyY2VTaXplTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlTGVuZ3Ro
KToKKyAgICAgICAgKiBjc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUHJvcGVydGllczo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKToKKyAgICAgICAgKiBj
c3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0RGlyZWN0aW9u
QW5kV3JpdGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR3JpZFRyYWNrU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHcmlkVHJhY2tMaXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUdyaWRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpwYXJzZVNuYXBDb29yZGluYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OnBhcnNlU25hcFBvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJv
bVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9w
ZXJhdGlvbnMpOgorICAgICAgICAqIGNzcy9UcmFuc2Zvcm1GdW5jdGlvbnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dHJhbnNmb3Jtc0ZvclZhbHVlKToKKyAgICAgICAgKiBjc3MvVmlld3BvcnRT
dHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZXdwb3J0U3R5bGVSZXNvbHZl
cjo6Z2V0Vmlld3BvcnRBcmd1bWVudFZhbHVlKToKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTRmls
dGVyVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTTWF0cml4LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYktpdENTU01hdHJpeDo6c2V0TWF0cml4VmFsdWUpOgorICAgICAgICAqIGNz
cy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZTo6dG9XZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxl
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6Y29tcHV0
ZWRGb250U2l6ZSk6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6aWRlbnRpZmllckZvclN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEVsZW1lbnRFcXVpdmFsZW50Ojp2YWx1ZUlzUHJlc2VudEluU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudDo6dmFsdWVJc1ByZXNlbnRJ
blN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNzc1ZhbHVlVG9SR0JBKToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRpbmdTdHlsZTo6ZXh0cmFjdEZvbnRTaXplRGVsdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdGluZ1N0eWxlOjp0ZXh0RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRpbmdTdHlsZTo6cHJlcGFyZVRvQXBwbHlBdCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5n
U3R5bGU6Om1lcmdlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjptZXJn
ZVN0eWxlRnJvbVJ1bGVzRm9yU2VyaWFsaXphdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
aW5nU3R5bGU6OmxlZ2FjeUZvbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHls
ZTo6dGV4dERpcmVjdGlvbkZvclNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNo
YW5nZTo6ZXh0cmFjdFRleHRTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZGlmZlRleHREZWNv
cmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpmb250V2VpZ2h0SXNCb2xkKToKKyAgICAgICAg
KFdlYkNvcmU6OmlzVHJhbnNwYXJlbnRDb2xvclZhbHVlKToKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZVRvZ2dsZVN0eWxlSW5M
aXN0KToKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW06CisgICAgICAg
IChzdHJpbmdGcm9tQ1NTVmFsdWUpOgorICAgICAgICAoSFRNTENvbnZlcnRlckNhY2hlczo6Zmxv
YXRQcm9wZXJ0eVZhbHVlRm9yTm9kZSk6CisgICAgICAgIChIVE1MQ29udmVydGVyQ2FjaGVzOjpj
b2xvclByb3BlcnR5VmFsdWVGb3JOb2RlKToKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpwcm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKToKKyAgICAg
ICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJp
YWxpemVyOjpyZXRyaWV2ZVJlc291cmNlc0ZvclByb3BlcnRpZXMpOgorICAgICAgICAqIHBhZ2Uv
YW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJs
ZW5kRnVuYyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjphZGp1c3RJbm5lclRleHRTdHlsZSk6
CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlUGVuZGluZ0ltYWdlLmg6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVBlbmRpbmdJbWFnZTo6Y3NzSW1hZ2VWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVBlbmRpbmdJbWFnZTo6Y3NzQ3Vyc29ySW1hZ2VWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVBlbmRpbmdJbWFnZTo6Y3NzSW1hZ2VTZXRWYWx1ZSk6CisgICAgICAg
ICogc3ZnL1NWR0NvbG9yLmg6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFjZSk6
CisgICAgICAgICogc3ZnL1NWR1BhaW50Lmg6CisKIDIwMTQtMTAtMDMgIEd5dXlvdW5nIEtpbSAg
PGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXSBGaXggYnVpbGQgYnJl
YWsgc2luY2UgcjE3NDIzMSBhbmQgcjE3NDI1NgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0FzcGVjdFJhdGlvVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBc3BlY3RS
YXRpb1ZhbHVlLmgKaW5kZXggNWQ0NTVmZWNkOGNlYjAzNWFhNWNhZGY1ZDFjNDg1MTU2MzlhZDg1
ZC4uODdkNTQ2Yjg0ZjdiY2E1NTQzODlmODg2OTVjMjJiZDkxZjk3ODkzOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0FzcGVjdFJhdGlvVmFsdWUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQXNwZWN0UmF0aW9WYWx1ZS5oCkBAIC02MCw4ICs2MCw4IEBAIHByaXZhdGU6
CiAgICAgZmxvYXQgbV9kZW5vbWluYXRvclZhbHVlOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FT
VFMoQ1NTQXNwZWN0UmF0aW9WYWx1ZSwgaXNBc3BlY3RSYXRpb1ZhbHVlKCkpCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKLX0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0Fz
cGVjdFJhdGlvVmFsdWUsIGlzQXNwZWN0UmF0aW9WYWx1ZSgpKQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaAppbmRleCBmYmMyMDRiYzY1
NjNlMzE1MWM2NTIwZmFiNjI2OGQxZWE4MDM0MDEzLi44YjlmZTRhY2U4OGZlOGVhNGNjODkzZTZi
MWNiNzVmMTQ5M2VlZjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVy
SW1hZ2VTbGljZVZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0JvcmRlckltYWdl
U2xpY2VWYWx1ZS5oCkBAIC01Niw4ICs1Niw4IEBAIHByaXZhdGU6CiAgICAgQ1NTQm9yZGVySW1h
Z2VTbGljZVZhbHVlKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNsaWNlcywgYm9vbCBm
aWxsKTsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0JvcmRlckltYWdlU2xpY2VWYWx1
ZSwgaXNCb3JkZXJJbWFnZVNsaWNlVmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NCb3JkZXJJbWFnZVNsaWNlVmFs
dWUsIGlzQm9yZGVySW1hZ2VTbGljZVZhbHVlKCkpCisKICNlbmRpZiAvLyBDU1NCb3JkZXJJbWFn
ZVNsaWNlVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0
aW9uVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3Bw
CmluZGV4IDM3YTgxNzE1MDE0MWVkMmY4OTljNTY0MWFiMjk4ZTc4Njk2NWVlMTAuLjVhOTA0MWQx
YzIxYTU1YTRhN2I4N2E3NGI5MjMyNzdlZjQxOThmM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAKQEAgLTYwMiwxMSArNjAyLDExIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1
ZSA9IHBhcnNlclZhbHVlLT5jcmVhdGVDU1NWYWx1ZSgpOwotICAgICAgICBpZiAoIXZhbHVlIHx8
ICF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2
ZVZhbHVlPih2YWx1ZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSh2YWx1ZS5nZXQoKSk7Ci0gICAgICAgIHJlc3VsdC0+dmFsdWUgPSBDU1NDYWxjUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZShwcmltaXRpdmVWYWx1ZSwgcGFyc2VyVmFsdWUtPmlzSW50KTsKKyAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgICAgIHJlc3VsdC0+dmFsdWUgPSBDU1NDYWxjUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZSgmcHJpbWl0aXZlVmFsdWUsIHBhcnNlclZhbHVlLT5pc0ludCk7CiAK
ICAgICAgICAgKysqaW5kZXg7CiAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDYWxjdWxhdGlvblZhbHVlLmgKaW5kZXggY2UwY2I1YTZlMGM2MmIwYTJkNzkxZjZkMmVm
ZDVhODgxYjFjYzIxYi4uZmMwNDQzZmNiMTk5ODExZjAyMTMzODFhZjMzNTE2OTZiZjkwZjJiNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oCkBAIC0xMjIsOCArMTIy
LDggQEAgaW5saW5lIFBhc3NSZWY8Q2FsY3VsYXRpb25WYWx1ZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVh
dGVDYWxjdWxhdGlvblZhbHVlKGNvbnN0IENTU1QKICAgICAgICAgbV9zaG91bGRDbGFtcFRvTm9u
TmVnYXRpdmUgPyBDYWxjdWxhdGlvblJhbmdlTm9uTmVnYXRpdmUgOiBDYWxjdWxhdGlvblJhbmdl
QWxsKTsKIH0KIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTQ2FsY1ZhbHVlLCBpc0NhbGNWYWx1
ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
Q1NTX1ZBTFVFKENTU0NhbGNWYWx1ZSwgaXNDYWxjVmFsdWUoKSkKKwogI2VuZGlmIC8vIENTU0Nh
bGN1bGF0aW9uVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZh
c1ZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaAppbmRleCBiNjdk
MDRmZWJhMTBlMzRjNzRkNmNkMTg3MDRkYWUyMWFkMGRmMTg4Li4zMmVlYzZkNTgzM2Y5ODc5NmNl
N2ZhODQwNGY1YTI0ZDc3NTk5MDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Q2FudmFzVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaApA
QCAtMTAyLDggKzEwMiw4IEBAIHByaXZhdGU6CiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIG1fZWxl
bWVudDsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0NhbnZhc1ZhbHVlLCBpc0NhbnZh
c1ZhbHVlKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19DU1NfVkFMVUUoQ1NTQ2FudmFzVmFsdWUsIGlzQ2FudmFzVmFsdWUoKSkKKwogI2VuZGlm
IC8vIENTU0NhbnZhc1ZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggMDc5MDE2NzM4ODU2ZjkxMGU4N2VmMDdjN2U1
MzVlZGQ0YjFmMzcwMi4uY2U1ZWU2ZTRlZTdjY2NjMmNiNDhiY2RjOWJmYTJlMWE5MDhiYzA4NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5jcHAKQEAgLTc3Myw3ICs3NzMsNyBAQCBzdGF0aWMgUGFzc1JlZjxDU1NWYWx1ZUxpc3Q+IGdl
dEJvcmRlclJhZGl1c1Nob3J0aGFuZFZhbHVlKGNvbnN0IFJlbmRlclN0eWxlKiBzdAogICAgIGlm
IChzaG93VmVydGljYWxCb3R0b21MZWZ0KQogICAgICAgICB2ZXJ0aWNhbFJhZGlpTGlzdC0+YXBw
ZW5kKCpib3R0b21MZWZ0UmFkaXVzLT5pdGVtKDEpKTsKIAotICAgIGlmICghdmVydGljYWxSYWRp
aUxpc3QtPmVxdWFscygqdG9DU1NWYWx1ZUxpc3QobGlzdC5nZXQoKS5pdGVtKDApKSkpCisgICAg
aWYgKCF2ZXJ0aWNhbFJhZGlpTGlzdC0+ZXF1YWxzKGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKmxp
c3QuZ2V0KCkuaXRlbSgwKSkpKQogICAgICAgICBsaXN0LmdldCgpLmFwcGVuZCh2ZXJ0aWNhbFJh
ZGlpTGlzdC5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIHJldHVybiBsaXN0OwpAQCAtMzE0OSwx
MyArMzE0OSwxMyBAQCBTdHJpbmcgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjppdGVtKHVu
c2lnbmVkIGkpIGNvbnN0CiAKIGJvb2wgQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6cHJvcGVydHlN
YXRjaGVzKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgQ1NTVmFsdWUqIHZhbHVlKSBj
b25zdAogewotICAgIGlmIChwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5Rm9udFNpemUgJiYgdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiBtX25vZGUpIHsKKyAgICBpZiAocHJvcGVydHlJRCA9
PSBDU1NQcm9wZXJ0eUZvbnRTaXplICYmIGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpICYm
IG1fbm9kZSkgewogICAgICAgICBtX25vZGUtPmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fbm9k
ZS0+Y29tcHV0ZWRTdHlsZShtX3BzZXVkb0VsZW1lbnRTcGVjaWZpZXIpOwogICAgICAgICBpZiAo
c3R5bGUgJiYgc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmtleXdvcmRTaXplKCkpIHsKICAgICAg
ICAgICAgIENTU1ZhbHVlSUQgc2l6ZVZhbHVlID0gY3NzSWRlbnRpZmllckZvckZvbnRTaXplS2V5
d29yZChzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkua2V5d29yZFNpemUoKSk7Ci0gICAgICAgICAg
ICBjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2
ZVZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNWYWx1ZUlE
KCkgJiYgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBzaXplVmFsdWUpCisgICAgICAg
ICAgICBjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS5pc1ZhbHVlSUQoKSAmJiBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gc2l6ZVZhbHVl
KQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAKaW5kZXggZDQzZGIxZTZhNGFhZTZjNDg5
ZmZlMjlmYjQ3YWRiNjZjNWMyZTQ3Yi4uMTkwMjNjYjk2Mzk2OWFhN2UzYTIxOGI1NDI4NDRkYWRj
ZTQwYzg5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwCkBAIC00
NywxMSArNDcsMTEgQEAgc3RhdGljIGlubGluZSBkb3VibGUgYmxlbmRGdW5jKGRvdWJsZSBmcm9t
LCBkb3VibGUgdG8sIGRvdWJsZSBwcm9ncmVzcykKIAogc3RhdGljIGJvb2wgc3ViaW1hZ2VLbm93
blRvQmVPcGFxdWUoQ1NTVmFsdWUmIHZhbHVlLCBjb25zdCBSZW5kZXJFbGVtZW50KiByZW5kZXJl
cikKIHsKLSAgICBpZiAodmFsdWUuaXNJbWFnZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiB0b0NT
U0ltYWdlVmFsdWUodmFsdWUpLmtub3duVG9CZU9wYXF1ZShyZW5kZXJlcik7CisgICAgaWYgKGlz
PENTU0ltYWdlVmFsdWU+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ltYWdl
VmFsdWU+KHZhbHVlKS5rbm93blRvQmVPcGFxdWUocmVuZGVyZXIpOwogCi0gICAgaWYgKHZhbHVl
LmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKQotICAgICAgICByZXR1cm4gdG9DU1NJbWFnZUdlbmVy
YXRvclZhbHVlKHZhbHVlKS5rbm93blRvQmVPcGFxdWUocmVuZGVyZXIpOworICAgIGlmIChpczxD
U1NJbWFnZUdlbmVyYXRvclZhbHVlPih2YWx1ZSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxD
U1NJbWFnZUdlbmVyYXRvclZhbHVlPih2YWx1ZSkua25vd25Ub0JlT3BhcXVlKHJlbmRlcmVyKTsK
IAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2Zh
ZGVWYWx1ZS5oCmluZGV4IDE0ZGE1OWM3OTRkYzdjYmEyMTk5ZDQyMDk4OGJlZTA1NDFlNzk5ZjUu
LjMzMDU0MGI4YTM0NTkyYzM4ZTBmNTllOWIzNDI4MGM1NTA1MzcxNWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5oCkBAIC0xMTAsOCArMTEwLDggQEAgcHJpdmF0ZToKICAg
ICBDcm9zc2ZhZGVTdWJpbWFnZU9ic2VydmVyUHJveHkgbV9jcm9zc2ZhZGVTdWJpbWFnZU9ic2Vy
dmVyOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTQ3Jvc3NmYWRlVmFsdWUsIGlzQ3Jv
c3NmYWRlVmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0NTU19WQUxVRShDU1NDcm9zc2ZhZGVWYWx1ZSwgaXNDcm9zc2ZhZGVWYWx1ZSgp
KQorCiAjZW5kaWYgLy8gQ1NTQ3Jvc3NmYWRlVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0N1cnNvckltYWdlVmFsdWUuY3BwCmluZGV4IGY1OGM5MjA1YWRmYjQxYzI4NzY0ZWZiOGE0M2M2
ZDJmM2E0ZDhkMjQuLjlmNDZlNzkxOWQ1NWEyYzJlMzJmZGY5MzdlNTkxNmViN2IzZmE4ZTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAKQEAgLTgxLDcgKzgx
LDcgQEAgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6fkNTU0N1cnNvckltYWdlVmFsdWUoKQogICAgIGZv
ciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVs
ZW1lbnQgPSAqaXQ7CiAgICAgICAgIHJlZmVyZW5jZWRFbGVtZW50LT5jdXJzb3JJbWFnZVZhbHVl
UmVtb3ZlZCgpOwotICAgICAgICBpZiAoU1ZHQ3Vyc29yRWxlbWVudCogY3Vyc29yRWxlbWVudCA9
IHJlc291cmNlUmVmZXJlbmNlZEJ5Q3Vyc29yRWxlbWVudCh0b0NTU0ltYWdlVmFsdWUobV9pbWFn
ZVZhbHVlLmdldCgpKS51cmwoKSwgcmVmZXJlbmNlZEVsZW1lbnQtPmRvY3VtZW50KCkpKQorICAg
ICAgICBpZiAoU1ZHQ3Vyc29yRWxlbWVudCogY3Vyc29yRWxlbWVudCA9IHJlc291cmNlUmVmZXJl
bmNlZEJ5Q3Vyc29yRWxlbWVudChkb3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX2ltYWdlVmFsdWUu
Z2V0KCkpLnVybCgpLCByZWZlcmVuY2VkRWxlbWVudC0+ZG9jdW1lbnQoKSkpCiAgICAgICAgICAg
ICBjdXJzb3JFbGVtZW50LT5yZW1vdmVDbGllbnQocmVmZXJlbmNlZEVsZW1lbnQpOwogICAgIH0K
IH0KQEAgLTEwNyw3ICsxMDcsNyBAQCBib29sIENTU0N1cnNvckltYWdlVmFsdWU6OnVwZGF0ZUlm
U1ZHQ3Vyc29ySXNVc2VkKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKCFpc1NWR0N1cnNvcigp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoU1ZHQ3Vyc29yRWxlbWVudCogY3Vy
c29yRWxlbWVudCA9IHJlc291cmNlUmVmZXJlbmNlZEJ5Q3Vyc29yRWxlbWVudCh0b0NTU0ltYWdl
VmFsdWUobV9pbWFnZVZhbHVlLmdldCgpKS51cmwoKSwgZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsK
KyAgICBpZiAoU1ZHQ3Vyc29yRWxlbWVudCogY3Vyc29yRWxlbWVudCA9IHJlc291cmNlUmVmZXJl
bmNlZEJ5Q3Vyc29yRWxlbWVudChkb3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX2ltYWdlVmFsdWUu
Z2V0KCkpLnVybCgpLCBlbGVtZW50LT5kb2N1bWVudCgpKSkgewogICAgICAgICAvLyBGSVhNRTog
VGhpcyB3aWxsIG92ZXJyaWRlIGhvdCBzcG90IHNwZWNpZmllZCBpbiBDU1MsIHdoaWNoIGlzIHBy
b2JhYmx5IGluY29ycmVjdC4KICAgICAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0
KDApOwogICAgICAgICBtX2hhc0hvdFNwb3QgPSB0cnVlOwpAQCAtMTMzLDggKzEzMyw4IEBAIGJv
b2wgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6dXBkYXRlSWZTVkdDdXJzb3JJc1VzZWQoRWxlbWVudCog
ZWxlbWVudCkKIFN0eWxlSW1hZ2UqIENTU0N1cnNvckltYWdlVmFsdWU6OmNhY2hlZEltYWdlKENh
Y2hlZFJlc291cmNlTG9hZGVyKiBsb2FkZXIpCiB7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQp
Ci0gICAgaWYgKG1faW1hZ2VWYWx1ZS5nZXQoKS5pc0ltYWdlU2V0VmFsdWUoKSkKLSAgICAgICAg
cmV0dXJuIHRvQ1NTSW1hZ2VTZXRWYWx1ZShtX2ltYWdlVmFsdWUuZ2V0KCkpLmNhY2hlZEltYWdl
U2V0KGxvYWRlcik7CisgICAgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KG1faW1hZ2VWYWx1ZS5n
ZXQoKSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPihtX2ltYWdl
VmFsdWUuZ2V0KCkpLmNhY2hlZEltYWdlU2V0KGxvYWRlcik7CiAjZW5kaWYKIAogICAgIGlmICgh
bV9hY2Nlc3NlZEltYWdlKSB7CkBAIC0xNDUsNyArMTQ1LDcgQEAgU3R5bGVJbWFnZSogQ1NTQ3Vy
c29ySW1hZ2VWYWx1ZTo6Y2FjaGVkSW1hZ2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGxvYWRlcikK
ICAgICAgICAgLy8gd2UgY3JlYXRlIGFuIGFsdGVybmF0ZSBDU1NJbWFnZVZhbHVlIHRvIHVzZS4K
ICAgICAgICAgaWYgKGlzU1ZHQ3Vyc29yKCkgJiYgbG9hZGVyICYmIGxvYWRlci0+ZG9jdW1lbnQo
KSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBmYWlsIGlmIHRoZSA8Y3Vyc29y
PiBlbGVtZW50IGlzIGluIGEgc2hhZG93IERPTSAoYnVnIDU5ODI3KQotICAgICAgICAgICAgaWYg
KFNWR0N1cnNvckVsZW1lbnQqIGN1cnNvckVsZW1lbnQgPSByZXNvdXJjZVJlZmVyZW5jZWRCeUN1
cnNvckVsZW1lbnQodG9DU1NJbWFnZVZhbHVlKG1faW1hZ2VWYWx1ZS5nZXQoKSkudXJsKCksICps
b2FkZXItPmRvY3VtZW50KCkpKSB7CisgICAgICAgICAgICBpZiAoU1ZHQ3Vyc29yRWxlbWVudCog
Y3Vyc29yRWxlbWVudCA9IHJlc291cmNlUmVmZXJlbmNlZEJ5Q3Vyc29yRWxlbWVudChkb3duY2Fz
dDxDU1NJbWFnZVZhbHVlPihtX2ltYWdlVmFsdWUuZ2V0KCkpLnVybCgpLCAqbG9hZGVyLT5kb2N1
bWVudCgpKSkgewogICAgICAgICAgICAgICAgIGRldGFjaFBlbmRpbmdJbWFnZSgpOwogICAgICAg
ICAgICAgICAgIFJlZjxDU1NJbWFnZVZhbHVlPiBzdmdJbWFnZVZhbHVlKENTU0ltYWdlVmFsdWU6
OmNyZWF0ZShjdXJzb3JFbGVtZW50LT5ocmVmKCkpKTsKICAgICAgICAgICAgICAgICBTdHlsZUNh
Y2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHN2Z0ltYWdlVmFsdWUtPmNhY2hlZEltYWdlKGxvYWRl
cik7CkBAIC0xNTQsOSArMTU0LDkgQEAgU3R5bGVJbWFnZSogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6
Y2FjaGVkSW1hZ2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGxvYWRlcikKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCi0gICAgICAgIGlmIChtX2ltYWdlVmFsdWUuZ2V0KCkuaXNJbWFnZVZhbHVl
KCkpIHsKKyAgICAgICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkp
IHsKICAgICAgICAgICAgIGRldGFjaFBlbmRpbmdJbWFnZSgpOwotICAgICAgICAgICAgbV9pbWFn
ZSA9IHRvQ1NTSW1hZ2VWYWx1ZShtX2ltYWdlVmFsdWUuZ2V0KCkpLmNhY2hlZEltYWdlKGxvYWRl
cik7CisgICAgICAgICAgICBtX2ltYWdlID0gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4obV9pbWFn
ZVZhbHVlLmdldCgpKS5jYWNoZWRJbWFnZShsb2FkZXIpOwogICAgICAgICB9CiAgICAgfQogCkBA
IC0xNzAsOCArMTcwLDggQEAgU3R5bGVJbWFnZSogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6Y2FjaGVk
T3JQZW5kaW5nSW1hZ2UoRG9jdW1lbnQmIGRvY3VtZW50KQogewogI2lmIEVOQUJMRShDU1NfSU1B
R0VfU0VUKQogICAgIC8vIE5lZWQgdG8gZGVsZWdhdGUgY29tcGxldGVseSBzbyB0aGF0IGNoYW5n
ZXMgaW4gZGV2aWNlIHNjYWxlIGZhY3RvciBjYW4gYmUgaGFuZGxlZCBhcHByb3ByaWF0ZWx5Lgot
ICAgIGlmIChtX2ltYWdlVmFsdWUuZ2V0KCkuaXNJbWFnZVNldFZhbHVlKCkpCi0gICAgICAgIHJl
dHVybiB0b0NTU0ltYWdlU2V0VmFsdWUobV9pbWFnZVZhbHVlLmdldCgpKS5jYWNoZWRPclBlbmRp
bmdJbWFnZVNldChkb2N1bWVudCk7CisgICAgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KG1faW1h
Z2VWYWx1ZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVl
PihtX2ltYWdlVmFsdWUuZ2V0KCkpLmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KGRvY3VtZW50KTsK
ICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKICNlbmRpZgpAQCAtMTg0LDggKzE4
NCw4IEBAIFN0eWxlSW1hZ2UqIENTU0N1cnNvckltYWdlVmFsdWU6OmNhY2hlZE9yUGVuZGluZ0lt
YWdlKERvY3VtZW50JiBkb2N1bWVudCkKIAogYm9vbCBDU1NDdXJzb3JJbWFnZVZhbHVlOjppc1NW
R0N1cnNvcigpIGNvbnN0CiB7Ci0gICAgaWYgKG1faW1hZ2VWYWx1ZS5nZXQoKS5pc0ltYWdlVmFs
dWUoKSkgewotICAgICAgICBVUkwga3VybChQYXJzZWRVUkxTdHJpbmcsIHRvQ1NTSW1hZ2VWYWx1
ZShtX2ltYWdlVmFsdWUuZ2V0KCkpLnVybCgpKTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4o
bV9pbWFnZVZhbHVlLmdldCgpKSkgeworICAgICAgICBVUkwga3VybChQYXJzZWRVUkxTdHJpbmcs
IGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkudXJsKCkpOwogICAg
ICAgICByZXR1cm4ga3VybC5oYXNGcmFnbWVudElkZW50aWZpZXIoKTsKICAgICB9CiAgICAgcmV0
dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdl
VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmgKaW5kZXgg
NjUxY2Q2MzMwMGI0Y2ExMDU2YTMyODM2ODlkOTFhMDQ0ZWJhOTE4MC4uODZkZjdhZGE0MjdkMjUz
NDA4OGYzMDg5YjU5NDM4ODFiMjRkMjE4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0N1cnNvckltYWdlVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZS5oCkBAIC03OCw4ICs3OCw4IEBAIHByaXZhdGU6CiAgICAgSGFzaFNldDxTVkdF
bGVtZW50Kj4gbV9yZWZlcmVuY2VkRWxlbWVudHM7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNU
UyhDU1NDdXJzb3JJbWFnZVZhbHVlLCBpc0N1cnNvckltYWdlVmFsdWUoKSkKLQogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NDdXJz
b3JJbWFnZVZhbHVlLCBpc0N1cnNvckltYWdlVmFsdWUoKSkKKwogI2VuZGlmIC8vIENTU0N1cnNv
ckltYWdlVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlcklt
YWdlVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmgKaW5k
ZXggNjAwNWY3ZTdjMDRjNjg0YWQwOTk4OWFlODliNzAzYjIwMWY4YTA2My4uM2MwNjhkNThjY2Ew
M2FlMmI1OGJmYzRkOGIzYjY4MGQ1YzZjYTc2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmls
dGVySW1hZ2VWYWx1ZS5oCkBAIC0xMTcsOCArMTE3LDggQEAgcHJpdmF0ZToKICAgICBGaWx0ZXJT
dWJpbWFnZU9ic2VydmVyUHJveHkgbV9maWx0ZXJTdWJpbWFnZU9ic2VydmVyOwogfTsKIAotQ1NT
X1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTRmlsdGVySW1hZ2VWYWx1ZSwgaXNGaWx0ZXJJbWFnZVZhbHVl
KCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19D
U1NfVkFMVUUoQ1NTRmlsdGVySW1hZ2VWYWx1ZSwgaXNGaWx0ZXJJbWFnZVZhbHVlKCkpCisKICNl
bmRpZiAvLyBDU1NGaWx0ZXJJbWFnZVZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTcmNWYWx1ZS5oCmluZGV4IDg5MjEwNzIxNGQwOWQxMGQwYzM1OTk1Njk1OTU0ZmVkMWUzZGVk
YmYuLjYxYmQ5MDkzM2M1MDAxNDRmY2Y3ZjU5ZWYyNDRjNTUyNzNhMTcyYjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaApAQCAtOTUsOCArOTUsOCBAQCBwcml2YXRl
OgogI2VuZGlmCiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NGb250RmFjZVNyY1ZhbHVl
LCBpc0ZvbnRGYWNlU3JjVmFsdWUoKSkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotfQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTRm9udEZhY2VTcmNWYWx1ZSwgaXNGb250
RmFjZVNyY1ZhbHVlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRGZWF0dXJlVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmVhdHVy
ZVZhbHVlLmgKaW5kZXggZGYxY2QxNzU5Y2RhM2VhOGQzYWEzMWQzM2M3NjQzNDlkM2Y3M2Y0YS4u
Y2Y2YzM4MWZlY2ExNTUxYmFjNGQyNTYzOTcxMzRiMDY5NTJkZjM0MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGZWF0dXJlVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udEZlYXR1cmVWYWx1ZS5oCkBAIC01MSw4ICs1MSw4IEBAIHByaXZhdGU6CiAg
ICAgY29uc3QgaW50IG1fdmFsdWU7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NGb250
RmVhdHVyZVZhbHVlLCBpc0ZvbnRGZWF0dXJlVmFsdWUoKSkKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAotfSAvLyBuYW1lc3BhY2UKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENT
U0ZvbnRGZWF0dXJlVmFsdWUsIGlzRm9udEZlYXR1cmVWYWx1ZSgpKQogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKaW5kZXggMGFkOTgyMzUzZmEzZDAwYTJhNDZk
ZGY2NDI2MzYyZjEyMDA1MWRlNy4uMzkyNWFlZTI0ZWJhMWMzZjc1Y2M1MDBlMDU0MDAyNGY0NmJj
MWNiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKQEAgLTkxLDI2ICs5
MSwyNiBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvbnN0IFN0eWxl
UnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUpCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBmb250RmFt
aWx5ID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpOwog
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3JjID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQ
cm9wZXJ0eVNyYyk7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiB1bmljb2RlUmFuZ2UgPSBzdHlsZS5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VW5pY29kZVJhbmdlKTsKLSAgICBpZiAoIWZv
bnRGYW1pbHkgfHwgIXNyYyB8fCAhZm9udEZhbWlseS0+aXNWYWx1ZUxpc3QoKSB8fCAhc3JjLT5p
c1ZhbHVlTGlzdCgpIHx8ICh1bmljb2RlUmFuZ2UgJiYgIXVuaWNvZGVSYW5nZS0+aXNWYWx1ZUxp
c3QoKSkpCisgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KGZvbnRGYW1pbHkuZ2V0KCkpIHx8ICFp
czxDU1NWYWx1ZUxpc3Q+KHNyYy5nZXQoKSkgfHwgKHVuaWNvZGVSYW5nZSAmJiAhaXM8Q1NTVmFs
dWVMaXN0PigqdW5pY29kZVJhbmdlKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ZhbHVl
TGlzdCogZmFtaWx5TGlzdCA9IHRvQ1NTVmFsdWVMaXN0KGZvbnRGYW1pbHkuZ2V0KCkpOwotICAg
IGlmICghZmFtaWx5TGlzdC0+bGVuZ3RoKCkpCisgICAgQ1NTVmFsdWVMaXN0JiBmYW1pbHlMaXN0
ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqZm9udEZhbWlseSk7CisgICAgaWYgKCFmYW1pbHlM
aXN0Lmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NWYWx1ZUxpc3QqIHNyY0xp
c3QgPSB0b0NTU1ZhbHVlTGlzdChzcmMuZ2V0KCkpOwotICAgIGlmICghc3JjTGlzdC0+bGVuZ3Ro
KCkpCisgICAgQ1NTVmFsdWVMaXN0JiBzcmNMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pigq
c3JjKTsKKyAgICBpZiAoIXNyY0xpc3QubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IENTU1ZhbHVlTGlzdCogcmFuZ2VMaXN0ID0gdG9DU1NWYWx1ZUxpc3QodW5pY29kZVJhbmdlLmdl
dCgpKTsKKyAgICBDU1NWYWx1ZUxpc3QqIHJhbmdlTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlz
dD4odW5pY29kZVJhbmdlLmdldCgpKTsKIAogICAgIHVuc2lnbmVkIHRyYWl0c01hc2sgPSAwOwog
CiAgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gZm9udFN0eWxlID0gc3R5bGUuZ2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSkpIHsKLSAgICAgICAgaWYgKCFmb250U3R5bGUt
PmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4o
KmZvbnRTdHlsZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgc3dpdGNoICh0b0NT
U1ByaW1pdGl2ZVZhbHVlKGZvbnRTdHlsZS5nZXQoKSktPmdldFZhbHVlSUQoKSkgeworICAgICAg
ICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZm9udFN0eWxlKS5nZXRWYWx1
ZUlEKCkpIHsKICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKICAgICAgICAgICAgIHRyYWl0
c01hc2sgfD0gRm9udFN0eWxlTm9ybWFsTWFzazsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTI1
LDEwICsxMjUsMTAgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjb25z
dCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlKQogICAgICAgICB0cmFpdHNNYXNrIHw9
IEZvbnRTdHlsZU5vcm1hbE1hc2s7CiAKICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiBmb250V2Vp
Z2h0ID0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpKSB7
Ci0gICAgICAgIGlmICghZm9udFdlaWdodC0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBp
ZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqZm9udFdlaWdodCkpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgc3dpdGNoICh0b0NTU1ByaW1pdGl2ZVZhbHVlKGZvbnRXZWlnaHQuZ2V0
KCkpLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICAgICAgc3dpdGNoIChkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKmZvbnRXZWlnaHQpLmdldFZhbHVlSUQoKSkgewogICAgICAgICBjYXNlIENTU1Zh
bHVlQm9sZDoKICAgICAgICAgY2FzZSBDU1NWYWx1ZTcwMDoKICAgICAgICAgICAgIHRyYWl0c01h
c2sgfD0gRm9udFdlaWdodDcwME1hc2s7CkBAIC0xNzAsMTYgKzE3MCwxNiBAQCB2b2lkIENTU0Zv
bnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250
RmFjZVJ1bGUpCiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFs
dWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwogICAgICAgICAgICAgbGlzdC0+YXBwZW5k
KGZvbnRWYXJpYW50LnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgZm9udFZhcmlhbnQg
PSBsaXN0LnJlbGVhc2VOb25OdWxsKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIWZvbnRWYXJpYW50
LT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICB9IGVsc2UgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KCpm
b250VmFyaWFudCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTVmFsdWVMaXN0
KiB2YXJpYW50TGlzdCA9IHRvQ1NTVmFsdWVMaXN0KGZvbnRWYXJpYW50LmdldCgpKTsKLSAgICAg
ICAgdW5zaWduZWQgbnVtVmFyaWFudHMgPSB2YXJpYW50TGlzdC0+bGVuZ3RoKCk7CisgICAgICAg
IENTU1ZhbHVlTGlzdCYgdmFyaWFudExpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpmb250
VmFyaWFudCk7CisgICAgICAgIHVuc2lnbmVkIG51bVZhcmlhbnRzID0gdmFyaWFudExpc3QubGVu
Z3RoKCk7CiAgICAgICAgIGlmICghbnVtVmFyaWFudHMpCiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVZhcmlhbnRzOyArK2kpIHsKLSAg
ICAgICAgICAgIHN3aXRjaCAodG9DU1NQcmltaXRpdmVWYWx1ZSh2YXJpYW50TGlzdC0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjayhpKSktPmdldFZhbHVlSUQoKSkgeworICAgICAgICAgICAgc3dpdGNo
IChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFyaWFudExpc3QuaXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjayhpKSktPmdldFZhbHVlSUQoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVOb3JtYWw6CiAgICAgICAgICAgICAgICAgICAgIHRyYWl0c01hc2sgfD0gRm9udFZhcmlhbnRO
b3JtYWxNYXNrOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE5NiwyNSArMTk2LDI1
IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxl
Rm9udEZhY2UqIGZvbnRGYWNlUnVsZSkKICAgICAvLyBFYWNoIGl0ZW0gaW4gdGhlIHNyYyBwcm9w
ZXJ0eSdzIGxpc3QgaXMgYSBzaW5nbGUgQ1NTRm9udEZhY2VTb3VyY2UuIFB1dCB0aGVtIGFsbCBp
bnRvIGEgQ1NTRm9udEZhY2UuCiAgICAgUmVmUHRyPENTU0ZvbnRGYWNlPiBmb250RmFjZTsKIAot
ICAgIGludCBzcmNMZW5ndGggPSBzcmNMaXN0LT5sZW5ndGgoKTsKKyAgICBpbnQgc3JjTGVuZ3Ro
ID0gc3JjTGlzdC5sZW5ndGgoKTsKIAogICAgIGJvb2wgZm91bmRTVkdGb250ID0gZmFsc2U7CiAK
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNyY0xlbmd0aDsgaSsrKSB7CiAgICAgICAgIC8vIEFu
IGl0ZW0gaW4gdGhlIGxpc3QgZWl0aGVyIHNwZWNpZmllcyBhIHN0cmluZyAobG9jYWwgZm9udCBu
YW1lKSBvciBhIFVSTCAocmVtb3RlIGZvbnQgdG8gZG93bmxvYWQpLgotICAgICAgICBDU1NGb250
RmFjZVNyY1ZhbHVlKiBpdGVtID0gdG9DU1NGb250RmFjZVNyY1ZhbHVlKHNyY0xpc3QtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soaSkpOworICAgICAgICBDU1NGb250RmFjZVNyY1ZhbHVlJiBpdGVt
ID0gZG93bmNhc3Q8Q1NTRm9udEZhY2VTcmNWYWx1ZT4oKnNyY0xpc3QuaXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjayhpKSk7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NGb250RmFjZVNvdXJjZT4g
c291cmNlOwogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICAgICAgZm91bmRTVkdGb250ID0g
aXRlbS0+aXNTVkdGb250RmFjZVNyYygpIHx8IGl0ZW0tPnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwor
ICAgICAgICBmb3VuZFNWR0ZvbnQgPSBpdGVtLmlzU1ZHRm9udEZhY2VTcmMoKSB8fCBpdGVtLnN2
Z0ZvbnRGYWNlRWxlbWVudCgpOwogI2VuZGlmCi0gICAgICAgIGlmICghaXRlbS0+aXNMb2NhbCgp
KSB7CisgICAgICAgIGlmICghaXRlbS5pc0xvY2FsKCkpIHsKICAgICAgICAgICAgIFNldHRpbmdz
KiBzZXR0aW5ncyA9IG1fZG9jdW1lbnQgPyBtX2RvY3VtZW50LT5mcmFtZSgpID8gJm1fZG9jdW1l
bnQtPmZyYW1lKCktPnNldHRpbmdzKCkgOiAwIDogMDsKICAgICAgICAgICAgIGJvb2wgYWxsb3dE
b3dubG9hZGluZyA9IGZvdW5kU1ZHRm9udCB8fCAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmRvd25s
b2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCgpKTsKLSAgICAgICAgICAgIGlmIChhbGxvd0Rvd25s
b2FkaW5nICYmIGl0ZW0tPmlzU3VwcG9ydGVkRm9ybWF0KCkgJiYgbV9kb2N1bWVudCkgewotICAg
ICAgICAgICAgICAgIENhY2hlZEZvbnQqIGNhY2hlZEZvbnQgPSBpdGVtLT5jYWNoZWRGb250KG1f
ZG9jdW1lbnQpOworICAgICAgICAgICAgaWYgKGFsbG93RG93bmxvYWRpbmcgJiYgaXRlbS5pc1N1
cHBvcnRlZEZvcm1hdCgpICYmIG1fZG9jdW1lbnQpIHsKKyAgICAgICAgICAgICAgICBDYWNoZWRG
b250KiBjYWNoZWRGb250ID0gaXRlbS5jYWNoZWRGb250KG1fZG9jdW1lbnQpOwogICAgICAgICAg
ICAgICAgIGlmIChjYWNoZWRGb250KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IHN0
ZDo6bWFrZV91bmlxdWU8Q1NTRm9udEZhY2VTb3VyY2U+KGl0ZW0tPnJlc291cmNlKCksIGNhY2hl
ZEZvbnQpOworICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENT
U0ZvbnRGYWNlU291cmNlPihpdGVtLnJlc291cmNlKCksIGNhY2hlZEZvbnQpOwogI2lmIEVOQUJM
RShTVkdfRk9OVFMpCiAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZFNWR0ZvbnQpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBzb3VyY2UtPnNldEhhc0V4dGVybmFsU1ZHRm9udCh0cnVlKTsK
QEAgLTIyMiw3ICsyMjIsNyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxl
KGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUpCiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc291cmNlID0g
c3RkOjptYWtlX3VuaXF1ZTxDU1NGb250RmFjZVNvdXJjZT4oaXRlbS0+cmVzb3VyY2UoKSk7Cisg
ICAgICAgICAgICBzb3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRGYWNlU291cmNlPihp
dGVtLnJlc291cmNlKCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFmb250RmFjZSkgewpA
QCAtMjM3LDcgKzIzNyw3IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUo
Y29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSkKIAogICAgICAgICBpZiAoc291
cmNlKSB7CiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICAgICAgICAgIHNvdXJjZS0+c2V0U1ZH
Rm9udEZhY2VFbGVtZW50KGl0ZW0tPnN2Z0ZvbnRGYWNlRWxlbWVudCgpKTsKKyAgICAgICAgICAg
IHNvdXJjZS0+c2V0U1ZHRm9udEZhY2VFbGVtZW50KGl0ZW0uc3ZnRm9udEZhY2VFbGVtZW50KCkp
OwogI2VuZGlmCiAgICAgICAgICAgICBmb250RmFjZS0+YWRkU291cmNlKFdURjo6bW92ZShzb3Vy
Y2UpKTsKICAgICAgICAgfQpAQCAtMjUxLDE1ICsyNTEsMTUgQEAgdm9pZCBDU1NGb250U2VsZWN0
b3I6OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxl
KQogICAgIGlmIChyYW5nZUxpc3QpIHsKICAgICAgICAgdW5zaWduZWQgbnVtUmFuZ2VzID0gcmFu
Z2VMaXN0LT5sZW5ndGgoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVJh
bmdlczsgaSsrKSB7Ci0gICAgICAgICAgICBDU1NVbmljb2RlUmFuZ2VWYWx1ZSogcmFuZ2UgPSB0
b0NTU1VuaWNvZGVSYW5nZVZhbHVlKHJhbmdlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhp
KSk7Ci0gICAgICAgICAgICBmb250RmFjZS0+YWRkUmFuZ2UocmFuZ2UtPmZyb20oKSwgcmFuZ2Ut
PnRvKCkpOworICAgICAgICAgICAgQ1NTVW5pY29kZVJhbmdlVmFsdWUmIHJhbmdlID0gZG93bmNh
c3Q8Q1NTVW5pY29kZVJhbmdlVmFsdWU+KCpyYW5nZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soaSkpOworICAgICAgICAgICAgZm9udEZhY2UtPmFkZFJhbmdlKHJhbmdlLmZyb20oKSwgcmFu
Z2UudG8oKSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBIYXNoIHVuZGVyIGV2ZXJ5IHNp
bmdsZSBmYW1pbHkgbmFtZS4KLSAgICBpbnQgZmFtaWx5TGVuZ3RoID0gZmFtaWx5TGlzdC0+bGVu
Z3RoKCk7CisgICAgaW50IGZhbWlseUxlbmd0aCA9IGZhbWlseUxpc3QubGVuZ3RoKCk7CiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBmYW1pbHlMZW5ndGg7IGkrKykgewotICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogaXRlbSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoZmFtaWx5TGlzdC0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjayhpKSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBpdGVtID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGZhbWlseUxpc3QuaXRlbVdpdGhvdXRCb3VuZHND
aGVjayhpKSk7CiAgICAgICAgIFN0cmluZyBmYW1pbHlOYW1lOwogICAgICAgICBpZiAoaXRlbS0+
aXNTdHJpbmcoKSkgewogICAgICAgICAgICAgZmFtaWx5TmFtZSA9IGl0ZW0tPmdldFN0cmluZ1Zh
bHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFZhbHVlLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFZhbHVlLmgKaW5kZXggODFhYzQxYTdhYzA5ODQ1NzNh
NWNkYzQwYzQ5NTU4Mjc0MjExNTk5Yy4uMDBkNzAxZjhjMzI0OGNjOTI1YzI3N2M1NjNjNzUzMTY3
ZDU4NWFmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRWYWx1ZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250VmFsdWUuaApAQCAtNTUsOCArNTUsOCBAQCBw
cml2YXRlOgogICAgIH0KIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0ZvbnRWYWx1ZSwg
aXNGb250VmFsdWUoKSkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotfSAvLyBuYW1lc3BhY2UK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0ZvbnRWYWx1ZSwgaXNGb250VmFs
dWUoKSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRnVuY3Rp
b25WYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Z1bmN0aW9uVmFsdWUuaAppbmRleCA1
MTExMjNiODczM2FmM2Q3YTFiZDEyYzRhNzBjOWYyZTc4NWViNTFlLi41NTFmNDVlODg3NGQwMzQ2
YmRiZTYwMjdhNDk1MDYyNDBjN2I4OGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTRnVuY3Rpb25WYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGdW5jdGlvblZh
bHVlLmgKQEAgLTU5LDggKzU5LDkgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0
PiBtX2FyZ3M7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NGdW5jdGlvblZhbHVlLCBp
c0Z1bmN0aW9uVmFsdWUoKSkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTRnVuY3Rpb25WYWx1ZSwgaXNGdW5jdGlvblZhbHVlKCkp
CiAKLX0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGll
bnRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKaW5k
ZXggNDMzMzJjMGJmYTEzMzJjZDFhMWIzYzJlMzg0YTdiOTA1YWE5MTlkMS4uMzAyNjc1OWUzYzMx
Y2RlMTMxZTJjZmM4NzA3MTU3ZWE3OGZhYjhhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFk
aWVudFZhbHVlLmNwcApAQCAtNDYsMTIgKzQ2LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFBh
c3NSZWZQdHI8SW1hZ2U+IENTU0dyYWRpZW50VmFsdWU6OmltYWdlKFJlbmRlckVsZW1lbnQqIHJl
bmRlcmVyLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7CiAgICAgaWYgKHNpemUuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBib29s
IGNhY2hlYWJsZSA9IGlzQ2FjaGVhYmxlKCk7CiAgICAgaWYgKGNhY2hlYWJsZSkgewogICAgICAg
ICBpZiAoIWNsaWVudHMoKS5jb250YWlucyhyZW5kZXJlcikpCi0gICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIEltYWdlKiByZXN1bHQg
PSBjYWNoZWRJbWFnZUZvclNpemUoc2l6ZSk7CiAgICAgICAgIGlmIChyZXN1bHQpCkBAIC02MCwx
MCArNjAsMTAgQEAgUGFzc1JlZlB0cjxJbWFnZT4gQ1NTR3JhZGllbnRWYWx1ZTo6aW1hZ2UoUmVu
ZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2kKIAogICAgIFJlZlB0cjxHcmFkaWVu
dD4gZ3JhZGllbnQ7CiAKLSAgICBpZiAoaXNMaW5lYXJHcmFkaWVudFZhbHVlKCkpCi0gICAgICAg
IGdyYWRpZW50ID0gdG9DU1NMaW5lYXJHcmFkaWVudFZhbHVlKHRoaXMpLT5jcmVhdGVHcmFkaWVu
dCgqcmVuZGVyZXIsIHNpemUpOworICAgIGlmIChpczxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPigq
dGhpcykpCisgICAgICAgIGdyYWRpZW50ID0gZG93bmNhc3Q8Q1NTTGluZWFyR3JhZGllbnRWYWx1
ZT4oKnRoaXMpLmNyZWF0ZUdyYWRpZW50KCpyZW5kZXJlciwgc2l6ZSk7CiAgICAgZWxzZQotICAg
ICAgICBncmFkaWVudCA9IHRvQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZSh0aGlzKS0+Y3JlYXRlR3Jh
ZGllbnQoKnJlbmRlcmVyLCBzaXplKTsKKyAgICAgICAgZ3JhZGllbnQgPSBkb3duY2FzdDxDU1NS
YWRpYWxHcmFkaWVudFZhbHVlPigqdGhpcykuY3JlYXRlR3JhZGllbnQoKnJlbmRlcmVyLCBzaXpl
KTsKIAogICAgIFJlZlB0cjxHcmFkaWVudEltYWdlPiBuZXdJbWFnZSA9IEdyYWRpZW50SW1hZ2U6
OmNyZWF0ZShncmFkaWVudCwgc2l6ZSk7CiAgICAgaWYgKGNhY2hlYWJsZSkKQEAgLTExOCwxMyAr
MTE4LDEzIEBAIFBhc3NSZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6
Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGVSCiAgICAgUmVmUHRyPENTU0dyYWRpZW50
VmFsdWU+IHJlc3VsdDsKICAgICBpZiAoIWRlcml2ZWQpCiAgICAgICAgIHJlc3VsdCA9IHRoaXM7
Ci0gICAgZWxzZSBpZiAoaXNMaW5lYXJHcmFkaWVudFZhbHVlKCkpCi0gICAgICAgIHJlc3VsdCA9
IHRvQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSh0aGlzKS0+Y2xvbmUoKTsKLSAgICBlbHNlIGlmIChp
c1JhZGlhbEdyYWRpZW50VmFsdWUoKSkKLSAgICAgICAgcmVzdWx0ID0gdG9DU1NSYWRpYWxHcmFk
aWVudFZhbHVlKHRoaXMpLT5jbG9uZSgpOworICAgIGVsc2UgaWYgKGlzPENTU0xpbmVhckdyYWRp
ZW50VmFsdWU+KCp0aGlzKSkKKyAgICAgICAgcmVzdWx0ID0gZG93bmNhc3Q8Q1NTTGluZWFyR3Jh
ZGllbnRWYWx1ZT4oKnRoaXMpLmNsb25lKCk7CisgICAgZWxzZSBpZiAoaXM8Q1NTUmFkaWFsR3Jh
ZGllbnRWYWx1ZT4oKnRoaXMpKQorICAgICAgICByZXN1bHQgPSBkb3duY2FzdDxDU1NSYWRpYWxH
cmFkaWVudFZhbHVlPigqdGhpcykuY2xvbmUoKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIHN0b3AgOiByZXN1bHQtPm1fc3RvcHMpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCmluZGV4IGU0NTIxMmYzMGVlZWVlOTllZGJl
Zjk0MDE4NTYzNzQwNWExN2MzZTcuLjZhYjc4ZGIwMjk1ZjQzMDAxMjhmNzQxNWVhNGIxYmQzMDIw
ZDllMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaApAQCAtMTMxLDggKzEz
MSw2IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1fcmVwZWF0aW5nOwogfTsKIAotQ1NTX1ZBTFVF
X1RZUEVfQ0FTVFMoQ1NTR3JhZGllbnRWYWx1ZSwgaXNHcmFkaWVudFZhbHVlKCkpCi0KIGNsYXNz
IENTU0xpbmVhckdyYWRpZW50VmFsdWUgOiBwdWJsaWMgQ1NTR3JhZGllbnRWYWx1ZSB7CiBwdWJs
aWM6CiAKQEAgLTE3MCw4ICsxNjgsNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gbV9hbmdsZTsgLy8gbWF5IGJlIG51bGwuCiB9OwogCi1DU1NfVkFMVUVfVFlQRV9D
QVNUUyhDU1NMaW5lYXJHcmFkaWVudFZhbHVlLCBpc0xpbmVhckdyYWRpZW50VmFsdWUoKSkKLQog
Y2xhc3MgQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZSA6IHB1YmxpYyBDU1NHcmFkaWVudFZhbHVlIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZjxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPiBjcmVh
dGUoQ1NTR3JhZGllbnRSZXBlYXQgcmVwZWF0LCBDU1NHcmFkaWVudFR5cGUgZ3JhZGllbnRUeXBl
ID0gQ1NTUmFkaWFsR3JhZGllbnQpCkBAIC0yMzMsOCArMjI5LDEwIEBAIHByaXZhdGU6CiAgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2VuZFZlcnRpY2FsU2l6ZTsKIH07CiAKLUNTU19W
QUxVRV9UWVBFX0NBU1RTKENTU1JhZGlhbEdyYWRpZW50VmFsdWUsIGlzUmFkaWFsR3JhZGllbnRW
YWx1ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQ1NTX1ZBTFVFKENTU0dyYWRpZW50VmFsdWUsIGlzR3JhZGllbnRWYWx1ZSgpKQorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSwgaXNMaW5l
YXJHcmFkaWVudFZhbHVlKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NS
YWRpYWxHcmFkaWVudFZhbHVlLCBpc1JhZGlhbEdyYWRpZW50VmFsdWUoKSkKKwogI2VuZGlmIC8v
IENTU0dyYWRpZW50VmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
aWRMaW5lTmFtZXNWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyaWRMaW5lTmFtZXNW
YWx1ZS5oCmluZGV4IDFiMGQxYjg3ZWU2YTRiNzc1MDU0ZDQwNDljY2UwOGUyMTdmYmZhMmUuLjdh
YjhiMjU4YTk2NjQ5N2Y2ODcyNWE2MTI0MDNjZDA1MzAwNWUwYWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmlkTGluZU5hbWVzVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLmgKQEAgLTUyLDkgKzUyLDkgQEAgcHJpdmF0ZToK
ICAgICBDU1NHcmlkTGluZU5hbWVzVmFsdWUoKTsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RT
KENTU0dyaWRMaW5lTmFtZXNWYWx1ZSwgaXNHcmlkTGluZU5hbWVzVmFsdWUoKSk7Cit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKLX0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENT
U0dyaWRMaW5lTmFtZXNWYWx1ZSwgaXNHcmlkTGluZU5hbWVzVmFsdWUoKSk7CiAKLSNlbmRpZgot
I2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKENTU19HUklEX0xBWU9VVCkKKyNlbmRpZiAvLyBDU1NH
cmlkTGluZU5hbWVzVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
aWRUZW1wbGF0ZUFyZWFzVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmlkVGVtcGxh
dGVBcmVhc1ZhbHVlLmgKaW5kZXggOGQyNWYyY2Q3NWQ1ZTMyNzQ5MzJhYTc1ZWE3OWFhNGVmOTAx
NjUyZS4uNDk4NGU3NjBiZWQ5YWI0ODE0N2ZmOTk0YTY3NzIwZmU1MGNkN2U3YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5oCkBAIC02MiwxMCAr
NjIsMTAgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9jb2x1bW5Db3VudDsKIH07CiAKLUNTU19W
QUxVRV9UWVBFX0NBU1RTKENTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUsIGlzR3JpZFRlbXBsYXRl
QXJlYXNWYWx1ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUsIGlzR3JpZFRlbXBs
YXRlQXJlYXNWYWx1ZSgpKQorCiAjZW5kaWYgLyogRU5BQkxFKENTU19HUklEX0xBWU9VVCkgKi8K
IAogI2VuZGlmIC8vIENTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCmluZGV4IDBlZjc3NGY4NGIxYmE2NTM5
NjljZWExOGE1ZWQ0NDYyOTk2MGI0ZjIuLmZiODk5NTU3MTc1NTYzYjk1NWQzODE3ODc0ZWQ0Yjc3
OGMwMjQ3YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRv
clZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZS5jcHAKQEAgLTEwOSwxNSArMTA5LDE1IEBAIFBhc3NSZWZQdHI8SW1hZ2U+IENTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWU6OmltYWdlKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBjb25zdCBGCiB7CiAg
ICAgc3dpdGNoIChjbGFzc1R5cGUoKSkgewogICAgIGNhc2UgQ2FudmFzQ2xhc3M6Ci0gICAgICAg
IHJldHVybiB0b0NTU0NhbnZhc1ZhbHVlKHRoaXMpLT5pbWFnZShyZW5kZXJlciwgc2l6ZSk7Cisg
ICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDYW52YXNWYWx1ZT4oKnRoaXMpLmltYWdlKHJlbmRl
cmVyLCBzaXplKTsKICAgICBjYXNlIENyb3NzZmFkZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9D
U1NDcm9zc2ZhZGVWYWx1ZSh0aGlzKS0+aW1hZ2UocmVuZGVyZXIsIHNpemUpOworICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KCp0aGlzKS5pbWFnZShyZW5kZXJlciwg
c2l6ZSk7CiAgICAgY2FzZSBGaWx0ZXJJbWFnZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NG
aWx0ZXJJbWFnZVZhbHVlKHRoaXMpLT5pbWFnZShyZW5kZXJlciwgc2l6ZSk7CisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPigqdGhpcykuaW1hZ2UocmVuZGVyZXIs
IHNpemUpOwogICAgIGNhc2UgTGluZWFyR3JhZGllbnRDbGFzczoKLSAgICAgICAgcmV0dXJuIHRv
Q1NTTGluZWFyR3JhZGllbnRWYWx1ZSh0aGlzKS0+aW1hZ2UocmVuZGVyZXIsIHNpemUpOworICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4oKnRoaXMpLmltYWdl
KHJlbmRlcmVyLCBzaXplKTsKICAgICBjYXNlIFJhZGlhbEdyYWRpZW50Q2xhc3M6Ci0gICAgICAg
IHJldHVybiB0b0NTU1JhZGlhbEdyYWRpZW50VmFsdWUodGhpcyktPmltYWdlKHJlbmRlcmVyLCBz
aXplKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCp0
aGlzKS5pbWFnZShyZW5kZXJlciwgc2l6ZSk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTI4LDE1ICsxMjgsMTUgQEAgYm9vbCBDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlOjppc0ZpeGVkU2l6ZSgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChjbGFz
c1R5cGUoKSkgewogICAgIGNhc2UgQ2FudmFzQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0Nh
bnZhc1ZhbHVlKHRoaXMpLT5pc0ZpeGVkU2l6ZSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q1NTQ2FudmFzVmFsdWU+KCp0aGlzKS5pc0ZpeGVkU2l6ZSgpOwogICAgIGNhc2UgQ3Jvc3NmYWRl
Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0Nyb3NzZmFkZVZhbHVlKHRoaXMpLT5pc0ZpeGVk
U2l6ZSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KCp0aGlz
KS5pc0ZpeGVkU2l6ZSgpOwogICAgIGNhc2UgRmlsdGVySW1hZ2VDbGFzczoKLSAgICAgICAgcmV0
dXJuIHRvQ1NTRmlsdGVySW1hZ2VWYWx1ZSh0aGlzKS0+aXNGaXhlZFNpemUoKTsKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KCp0aGlzKS5pc0ZpeGVkU2l6ZSgp
OwogICAgIGNhc2UgTGluZWFyR3JhZGllbnRDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTTGlu
ZWFyR3JhZGllbnRWYWx1ZSh0aGlzKS0+aXNGaXhlZFNpemUoKTsKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PENTU0xpbmVhckdyYWRpZW50VmFsdWU+KCp0aGlzKS5pc0ZpeGVkU2l6ZSgpOwogICAg
IGNhc2UgUmFkaWFsR3JhZGllbnRDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTUmFkaWFsR3Jh
ZGllbnRWYWx1ZSh0aGlzKS0+aXNGaXhlZFNpemUoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCp0aGlzKS5pc0ZpeGVkU2l6ZSgpOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTE0NywxNSArMTQ3
LDE1IEBAIEZsb2F0U2l6ZSBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpmaXhlZFNpemUoY29uc3Qg
UmVuZGVyRWxlbWVudCogcmVuZGVyZXIpCiB7CiAgICAgc3dpdGNoIChjbGFzc1R5cGUoKSkgewog
ICAgIGNhc2UgQ2FudmFzQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0NhbnZhc1ZhbHVlKHRo
aXMpLT5maXhlZFNpemUocmVuZGVyZXIpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ2Fu
dmFzVmFsdWU+KCp0aGlzKS5maXhlZFNpemUocmVuZGVyZXIpOwogICAgIGNhc2UgQ3Jvc3NmYWRl
Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0Nyb3NzZmFkZVZhbHVlKHRoaXMpLT5maXhlZFNp
emUocmVuZGVyZXIpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+
KCp0aGlzKS5maXhlZFNpemUocmVuZGVyZXIpOwogICAgIGNhc2UgRmlsdGVySW1hZ2VDbGFzczoK
LSAgICAgICAgcmV0dXJuIHRvQ1NTRmlsdGVySW1hZ2VWYWx1ZSh0aGlzKS0+Zml4ZWRTaXplKHJl
bmRlcmVyKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KCp0
aGlzKS5maXhlZFNpemUocmVuZGVyZXIpOwogICAgIGNhc2UgTGluZWFyR3JhZGllbnRDbGFzczoK
LSAgICAgICAgcmV0dXJuIHRvQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSh0aGlzKS0+Zml4ZWRTaXpl
KHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0xpbmVhckdyYWRpZW50VmFs
dWU+KCp0aGlzKS5maXhlZFNpemUocmVuZGVyZXIpOwogICAgIGNhc2UgUmFkaWFsR3JhZGllbnRD
bGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZSh0aGlzKS0+Zml4
ZWRTaXplKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1JhZGlhbEdyYWRp
ZW50VmFsdWU+KCp0aGlzKS5maXhlZFNpemUocmVuZGVyZXIpOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTE2NiwxNSArMTY2LDE1IEBAIGJv
b2wgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6aXNQZW5kaW5nKCkgY29uc3QKIHsKICAgICBzd2l0
Y2ggKGNsYXNzVHlwZSgpKSB7CiAgICAgY2FzZSBDcm9zc2ZhZGVDbGFzczoKLSAgICAgICAgcmV0
dXJuIHRvQ1NTQ3Jvc3NmYWRlVmFsdWUodGhpcyktPmlzUGVuZGluZygpOworICAgICAgICByZXR1
cm4gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KCp0aGlzKS5pc1BlbmRpbmcoKTsKICAgICBj
YXNlIENhbnZhc0NsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NDYW52YXNWYWx1ZSh0aGlzKS0+
aXNQZW5kaW5nKCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDYW52YXNWYWx1ZT4oKnRo
aXMpLmlzUGVuZGluZygpOwogICAgIGNhc2UgRmlsdGVySW1hZ2VDbGFzczoKLSAgICAgICAgcmV0
dXJuIHRvQ1NTRmlsdGVySW1hZ2VWYWx1ZSh0aGlzKS0+aXNQZW5kaW5nKCk7CisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPigqdGhpcykuaXNQZW5kaW5nKCk7CiAg
ICAgY2FzZSBMaW5lYXJHcmFkaWVudENsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NMaW5lYXJH
cmFkaWVudFZhbHVlKHRoaXMpLT5pc1BlbmRpbmcoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENTU0xpbmVhckdyYWRpZW50VmFsdWU+KCp0aGlzKS5pc1BlbmRpbmcoKTsKICAgICBjYXNlIFJh
ZGlhbEdyYWRpZW50Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU1JhZGlhbEdyYWRpZW50VmFs
dWUodGhpcyktPmlzUGVuZGluZygpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUmFkaWFs
R3JhZGllbnRWYWx1ZT4oKnRoaXMpLmlzUGVuZGluZygpOwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTE4NSwxNSArMTg1LDE1IEBAIGJvb2wg
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6a25vd25Ub0JlT3BhcXVlKGNvbnN0IFJlbmRlckVsZW1l
bnQqIHJlbmRlcmVyKSBjb25zCiB7CiAgICAgc3dpdGNoIChjbGFzc1R5cGUoKSkgewogICAgIGNh
c2UgQ3Jvc3NmYWRlQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0Nyb3NzZmFkZVZhbHVlKHRo
aXMpLT5rbm93blRvQmVPcGFxdWUocmVuZGVyZXIpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q1NTQ3Jvc3NmYWRlVmFsdWU+KCp0aGlzKS5rbm93blRvQmVPcGFxdWUocmVuZGVyZXIpOwogICAg
IGNhc2UgQ2FudmFzQ2xhc3M6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIEZpbHRl
ckltYWdlQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0ZpbHRlckltYWdlVmFsdWUodGhpcykt
Pmtub3duVG9CZU9wYXF1ZShyZW5kZXJlcik7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NG
aWx0ZXJJbWFnZVZhbHVlPigqdGhpcykua25vd25Ub0JlT3BhcXVlKHJlbmRlcmVyKTsKICAgICBj
YXNlIExpbmVhckdyYWRpZW50Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0xpbmVhckdyYWRp
ZW50VmFsdWUodGhpcyktPmtub3duVG9CZU9wYXF1ZShyZW5kZXJlcik7CisgICAgICAgIHJldHVy
biBkb3duY2FzdDxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPigqdGhpcykua25vd25Ub0JlT3BhcXVl
KHJlbmRlcmVyKTsKICAgICBjYXNlIFJhZGlhbEdyYWRpZW50Q2xhc3M6Ci0gICAgICAgIHJldHVy
biB0b0NTU1JhZGlhbEdyYWRpZW50VmFsdWUodGhpcyktPmtub3duVG9CZU9wYXF1ZShyZW5kZXJl
cik7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigqdGhp
cykua25vd25Ub0JlT3BhcXVlKHJlbmRlcmVyKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0yMDQsMTkgKzIwNCwxOSBAQCB2b2lkIENTU0lt
YWdlR2VuZXJhdG9yVmFsdWU6OmxvYWRTdWJpbWFnZXMoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNh
Y2hlZFJlc291cmNlTAogewogICAgIHN3aXRjaCAoY2xhc3NUeXBlKCkpIHsKICAgICBjYXNlIENy
b3NzZmFkZUNsYXNzOgotICAgICAgICB0b0NTU0Nyb3NzZmFkZVZhbHVlKHRoaXMpLT5sb2FkU3Vi
aW1hZ2VzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKyAgICAgICAgZG93bmNhc3Q8Q1NTQ3Jvc3Nm
YWRlVmFsdWU+KCp0aGlzKS5sb2FkU3ViaW1hZ2VzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBDYW52YXNDbGFzczoKLSAgICAgICAgdG9DU1NDYW52YXNW
YWx1ZSh0aGlzKS0+bG9hZFN1YmltYWdlcyhjYWNoZWRSZXNvdXJjZUxvYWRlcik7CisgICAgICAg
IGRvd25jYXN0PENTU0NhbnZhc1ZhbHVlPigqdGhpcykubG9hZFN1YmltYWdlcyhjYWNoZWRSZXNv
dXJjZUxvYWRlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVySW1hZ2VDbGFzczoK
LSAgICAgICAgdG9DU1NGaWx0ZXJJbWFnZVZhbHVlKHRoaXMpLT5sb2FkU3ViaW1hZ2VzKGNhY2hl
ZFJlc291cmNlTG9hZGVyKTsKKyAgICAgICAgZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4o
KnRoaXMpLmxvYWRTdWJpbWFnZXMoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIExpbmVhckdyYWRpZW50Q2xhc3M6Ci0gICAgICAgIHRvQ1NTTGluZWFyR3Jh
ZGllbnRWYWx1ZSh0aGlzKS0+bG9hZFN1YmltYWdlcyhjYWNoZWRSZXNvdXJjZUxvYWRlcik7Cisg
ICAgICAgIGRvd25jYXN0PENTU0xpbmVhckdyYWRpZW50VmFsdWU+KCp0aGlzKS5sb2FkU3ViaW1h
Z2VzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBSYWRp
YWxHcmFkaWVudENsYXNzOgotICAgICAgICB0b0NTU1JhZGlhbEdyYWRpZW50VmFsdWUodGhpcykt
PmxvYWRTdWJpbWFnZXMoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOworICAgICAgICBkb3duY2FzdDxD
U1NSYWRpYWxHcmFkaWVudFZhbHVlPigqdGhpcykubG9hZFN1YmltYWdlcyhjYWNoZWRSZXNvdXJj
ZUxvYWRlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtMjI1LDEzICsyMjUsMTMgQEAgdm9pZCBDU1NJbWFnZUdlbmVyYXRv
clZhbHVlOjpsb2FkU3ViaW1hZ2VzKENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJj
ZUwKIAogYm9vbCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpzdWJpbWFnZUlzUGVuZGluZyhDU1NW
YWx1ZSogdmFsdWUpCiB7Ci0gICAgaWYgKHZhbHVlLT5pc0ltYWdlVmFsdWUoKSkKLSAgICAgICAg
cmV0dXJuIHRvQ1NTSW1hZ2VWYWx1ZSh2YWx1ZSktPmNhY2hlZE9yUGVuZGluZ0ltYWdlKCktPmlz
UGVuZGluZ0ltYWdlKCk7CisgICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KCp2YWx1ZSkpCisgICAg
ICAgIHJldHVybiBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPigqdmFsdWUpLmNhY2hlZE9yUGVuZGlu
Z0ltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCk7CiAgICAgCi0gICAgaWYgKHZhbHVlLT5pc0ltYWdl
R2VuZXJhdG9yVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIHRvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZSh2YWx1ZSktPmlzUGVuZGluZygpOworICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVl
PigqdmFsdWUpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZT4oKnZhbHVlKS5pc1BlbmRpbmcoKTsKIAotICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpICYmIHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFs
dWVOb25lKQorICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25l
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTI0NCwyMSArMjQ0LDIxIEBAIENhY2hlZEltYWdlKiBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpj
YWNoZWRJbWFnZUZvckNTU1ZhbHVlKENTU1ZhbHVlKiB2YWx1ZSwgQ2FjCiAgICAgaWYgKCF2YWx1
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAodmFsdWUtPmlzSW1hZ2VWYWx1
ZSgpKSB7Ci0gICAgICAgIFN0eWxlQ2FjaGVkSW1hZ2UqIHN0eWxlQ2FjaGVkSW1hZ2UgPSB0b0NT
U0ltYWdlVmFsdWUodmFsdWUpLT5jYWNoZWRJbWFnZShjYWNoZWRSZXNvdXJjZUxvYWRlcik7Cisg
ICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KCp2YWx1ZSkpIHsKKyAgICAgICAgU3R5bGVDYWNoZWRJ
bWFnZSogc3R5bGVDYWNoZWRJbWFnZSA9IGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KCp2YWx1ZSku
Y2FjaGVkSW1hZ2UoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwogICAgICAgICBpZiAoIXN0eWxlQ2Fj
aGVkSW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICByZXR1cm4g
c3R5bGVDYWNoZWRJbWFnZS0+Y2FjaGVkSW1hZ2UoKTsKICAgICB9CiAgICAgCi0gICAgaWYgKHZh
bHVlLT5pc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSkgewotICAgICAgICB0b0NTU0ltYWdlR2VuZXJh
dG9yVmFsdWUodmFsdWUpLT5sb2FkU3ViaW1hZ2VzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKyAg
ICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICBkb3du
Y2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPigqdmFsdWUpLmxvYWRTdWJpbWFnZXMoY2FjaGVk
UmVzb3VyY2VMb2FkZXIpOwogICAgICAgICAvLyBGSVhNRTogSGFuZGxlIENTU0ltYWdlR2VuZXJh
dG9yVmFsdWUgKGFuZCB0aHVzIGNyb3NzLWZhZGVzIHdpdGggZ3JhZGllbnRzIGFuZCBjYW52YXMp
LgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAodmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+Z2V0VmFsdWVJRCgp
ID09IENTU1ZhbHVlTm9uZSkKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkg
JiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpID09IENT
U1ZhbHVlTm9uZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRv
clZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oCmlu
ZGV4IDYzYzgxMzdlMjliMGYwOGUzZGFlZWQwMDhjMWNiNmY5MWQ1ZDhiNmIuLjdkOTlkNDFlYTZh
NzQwODNjYzgzNDM4OGIzMWU1NTI0ODg3NzNiOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ltYWdlR2VuZXJhdG9yVmFsdWUuaApAQCAtOTIsOCArOTIsOCBAQCBwcml2YXRlOgogICAgIEhh
c2hNYXA8RmxvYXRTaXplLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkR2VuZXJhdGVkSW1hZ2U+PiBt
X2ltYWdlczsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0ltYWdlR2VuZXJhdG9yVmFs
dWUsIGlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0ltYWdlR2VuZXJhdG9yVmFsdWUs
IGlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKQorCiAjZW5kaWYgLy8gQ1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHAKaW5kZXggNGRiYjBl
NjViMWNmYzc0Njk5YzFiYzM1ZTk1ZDk4OTNhYzJhOWMzYS4uYmExODhhNWNmMTI4OTY1MzczYTFk
ZmFjNmNlNGFmNWM1MjI5OGVlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0lt
YWdlU2V0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZhbHVl
LmNwcApAQCAtNzAsMTMgKzcwLDEzIEBAIHZvaWQgQ1NTSW1hZ2VTZXRWYWx1ZTo6ZmlsbEltYWdl
U2V0KCkKICAgICBzaXplX3QgaSA9IDA7CiAgICAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKICAgICAg
ICAgQ1NTVmFsdWUqIGltYWdlVmFsdWUgPSBpdGVtKGkpOwotICAgICAgICBTdHJpbmcgaW1hZ2VV
UkwgPSB0b0NTU0ltYWdlVmFsdWUoaW1hZ2VWYWx1ZSktPnVybCgpOworICAgICAgICBTdHJpbmcg
aW1hZ2VVUkwgPSBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPigqaW1hZ2VWYWx1ZSkudXJsKCk7CiAK
ICAgICAgICAgKytpOwogICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihp
IDwgbGVuZ3RoKTsKICAgICAgICAgQ1NTVmFsdWUqIHNjYWxlRmFjdG9yVmFsdWUgPSBpdGVtKGkp
OwotICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzY2FsZUZhY3RvclZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUoc2NhbGVGYWN0b3JWYWx1ZSktPmdldEZsb2F0VmFsdWUoKTsKKyAg
ICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCpzY2FsZUZhY3RvclZhbHVlKSk7CisgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpzY2FsZUZhY3RvclZhbHVlKS5nZXRGbG9hdFZhbHVl
KCk7CiAKICAgICAgICAgSW1hZ2VXaXRoU2NhbGUgaW1hZ2U7CiAgICAgICAgIGltYWdlLmltYWdl
VVJMID0gaW1hZ2VVUkw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VT
ZXRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUuaAppbmRleCBj
MTg5OWYzYWI3MDE4NzgxZDgzOTFiYTFjZWNlZGRhOTE4ZGE1MDJkLi40MGE5OTY1M2M3MzdkYWRi
N2FjMGE4NjE4MDkyNGQxNDljYjVkM2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTSW1hZ2VTZXRWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZh
bHVlLmgKQEAgLTg3LDEwICs4NywxMCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxJbWFnZVdpdGhT
Y2FsZT4gbV9pbWFnZXNJblNldDsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0ltYWdl
U2V0VmFsdWUsIGlzSW1hZ2VTZXRWYWx1ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0ltYWdlU2V0VmFsdWUsIGlzSW1h
Z2VTZXRWYWx1ZSgpKQorCiAjZW5kaWYgLy8gRU5BQkxFKENTU19JTUFHRV9TRVQpCiAKICNlbmRp
ZiAvLyBDU1NJbWFnZVNldFZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NJbWFnZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5oCmluZGV4
IDljYzhiYzNlNDk0MmQ2YzI1NjQyZWNlNDFlZWFhMGM3NjMyMTNhOTguLjljNDIwOGY5ZjJiMDMz
MGZjYmY3ODM0NjVhYzRiZWY0MTU3ODA3YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NJbWFnZVZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlVmFsdWUu
aApAQCAtNjksOCArNjksOCBAQCBwcml2YXRlOgogICAgIEF0b21pY1N0cmluZyBtX2luaXRpYXRv
ck5hbWU7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NJbWFnZVZhbHVlLCBpc0ltYWdl
VmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0NTU19WQUxVRShDU1NJbWFnZVZhbHVlLCBpc0ltYWdlVmFsdWUoKSkKKwogI2VuZGlmIC8v
IENTU0ltYWdlVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0luaGVy
aXRlZFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW5oZXJpdGVkVmFsdWUuaAppbmRl
eCBmNmQxNjhlZWEwNzY4YmY4ZDAxNjZlNWM1MzhmYTA4ZGI2MzA2ZDU0Li4zMTY3MWJhNzI1Nzdl
N2Q5NjMzZTcwNGFmYTEzMTU3YjBmOGFmMjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTSW5oZXJpdGVkVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW5oZXJp
dGVkVmFsdWUuaApAQCAtNDQsOCArNDQsOCBAQCBwcml2YXRlOgogICAgIH0KIH07CiAKLUNTU19W
QUxVRV9UWVBFX0NBU1RTKENTU0luaGVyaXRlZFZhbHVlLCBpc0luaGVyaXRlZFZhbHVlKCkpCi0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFM
VUUoQ1NTSW5oZXJpdGVkVmFsdWUsIGlzSW5oZXJpdGVkVmFsdWUoKSkKKwogI2VuZGlmIC8vIENT
U0luaGVyaXRlZFZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbml0
aWFsVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbml0aWFsVmFsdWUuaAppbmRleCBh
MGE2ZTU1NDg4NWZhMTA4MTU2MGNhYjY4NDQyZDc3OTdhZTJmZTFiLi45MTE2YzE4YmQ5Zjk1MTdk
NGVmMWJmMDMzY2QzYmFjZTI1ZTI2MGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTSW5pdGlhbFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0luaXRpYWxWYWx1
ZS5oCkBAIC01Myw4ICs1Myw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzSW1wbGljaXQ7CiB9
OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NJbml0aWFsVmFsdWUsIGlzSW5pdGlhbFZhbHVl
KCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19D
U1NfVkFMVUUoQ1NTSW5pdGlhbFZhbHVlLCBpc0luaXRpYWxWYWx1ZSgpKQorCiAjZW5kaWYgLy8g
Q1NTSW5pdGlhbFZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NMaW5l
Qm94Q29udGFpblZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTGluZUJveENvbnRhaW5W
YWx1ZS5oCmluZGV4IGI5ODBlOGVmYTllNGIxZDEwMzdiM2RiMmI4ZTkzYWIyNjZlMjdkMjQuLmQ3
NjQzZmEzMTRlMDFkM2Y5OGE0OTBiOWZkN2ExYzE0MTQ0MTAyYjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NMaW5lQm94Q29udGFpblZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0xpbmVCb3hDb250YWluVmFsdWUuaApAQCAtNTYsOCArNTYsOCBAQCBwcml2YXRl
OgogICAgIExpbmVCb3hDb250YWluIG1fdmFsdWU7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNU
UyhDU1NMaW5lQm94Q29udGFpblZhbHVlLCBpc0xpbmVCb3hDb250YWluVmFsdWUoKSkKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAotfSAvLyBuYW1lc3BhY2UKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQ1NTX1ZBTFVFKENTU0xpbmVCb3hDb250YWluVmFsdWUsIGlzTGluZUJveENvbnRhaW5WYWx1
ZSgpKQogCi0jZW5kaWYKKyNlbmRpZiAvLyBDU1NMaW5lQm94Q29udGFpblZhbHVlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5jcHAKaW5kZXggYzNkZTZkYzhmY2Q3MTcwNmNjOGUzY2Y0NGMxN2I2Mjlm
YTk4NTRjMi4uZDU5Njk5ZDc4ZDdiMjI3MDUwNjk0MDFjOGY1MTBmMWQxMzk5ZGZkMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTEzNDUsMTQgKzEzNDUsMTQgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlQ29sb3IoUkdCQTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wg
c3RyaWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBDU1NWYWx1ZSogdmFsdWUgPSBw
YXJzZXIubV9wYXJzZWRQcm9wZXJ0aWVzLmZpcnN0KCkudmFsdWUoKTsKLSAgICBpZiAoIXZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgaWYgKCFwcmlt
aXRpdmVWYWx1ZS0+aXNSR0JDb2xvcigpKQorICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRp
dmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGlmICgh
cHJpbWl0aXZlVmFsdWUuaXNSR0JDb2xvcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBjb2xvciA9IHByaW1pdGl2ZVZhbHVlLT5nZXRSR0JBMzJWYWx1ZSgpOworICAgIGNvbG9yID0g
cHJpbWl0aXZlVmFsdWUuZ2V0UkdCQTMyVmFsdWUoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApA
QCAtMzExOCw3ICszMTE4LDcgQEAgdm9pZCBDU1NQYXJzZXI6OmFkZEZpbGxWYWx1ZShSZWZQdHI8
Q1NTVmFsdWU+JiBsdmFsLCBQYXNzUmVmPENTU1ZhbHVlPiBydmFsKQogICAgIH0KIAogICAgIGlm
IChsdmFsLT5pc0Jhc2VWYWx1ZUxpc3QoKSkgewotICAgICAgICB0b0NTU1ZhbHVlTGlzdCgqbHZh
bCkuYXBwZW5kKFdURjo6bW92ZShydmFsKSk7CisgICAgICAgIGRvd25jYXN0PENTU1ZhbHVlTGlz
dD4oKmx2YWwpLmFwcGVuZChXVEY6Om1vdmUocnZhbCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0zNDI1LDggKzM0MjUsOCBAQCB2b2lkIENTU1BhcnNlcjo6YWRkQW5pbWF0aW9uVmFs
dWUoUmVmUHRyPENTU1ZhbHVlPiYgbHZhbCwgUGFzc1JlZjxDU1NWYWx1ZT4gcnZhbAogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGx2YWwtPmlzVmFsdWVMaXN0KCkpIHsKLSAgICAg
ICAgdG9DU1NWYWx1ZUxpc3QoKmx2YWwpLmFwcGVuZChXVEY6Om1vdmUocnZhbCkpOworICAgIGlm
IChpczxDU1NWYWx1ZUxpc3Q+KCpsdmFsKSkgeworICAgICAgICBkb3duY2FzdDxDU1NWYWx1ZUxp
c3Q+KCpsdmFsKS5hcHBlbmQoV1RGOjptb3ZlKHJ2YWwpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtNDE3MCwxMCArNDE3MCwxMCBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2UzVmFsdWVz
RmlsbFBvc2l0aW9uKENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0LCBSZWZQdHI8QwogICAg
ICAgICB2YWx1ZTEuc3dhcCh2YWx1ZTIpOwogCiAjaWZuZGVmIE5ERUJVRwotICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBmaXJzdCA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUxLmdldCgpKTsKLSAg
ICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZTIu
Z2V0KCkpOwotICAgIGlkZW50MSA9IGZpcnN0LT5nZXRQYWlyVmFsdWUoKS0+Zmlyc3QoKS0+Z2V0
VmFsdWVJRCgpOwotICAgIGlkZW50MiA9IHNlY29uZC0+Z2V0UGFpclZhbHVlKCktPmZpcnN0KCkt
PmdldFZhbHVlSUQoKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgZmlyc3QgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlMSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHNlY29u
ZCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUyKTsKKyAgICBpZGVudDEgPSBm
aXJzdC5nZXRQYWlyVmFsdWUoKS0+Zmlyc3QoKS0+Z2V0VmFsdWVJRCgpOworICAgIGlkZW50MiA9
IHNlY29uZC5nZXRQYWlyVmFsdWUoKS0+Zmlyc3QoKS0+Z2V0VmFsdWVJRCgpOwogICAgIEFTU0VS
VChpZGVudDEgPT0gQ1NTVmFsdWVMZWZ0IHx8IGlkZW50MSA9PSBDU1NWYWx1ZVJpZ2h0KTsKICAg
ICBBU1NFUlQoaWRlbnQyID09IENTU1ZhbHVlQm90dG9tIHx8IGlkZW50MiA9PSBDU1NWYWx1ZVRv
cCk7CiAjZW5kaWYKQEAgLTQyMzEsOCArNDIzMSw4IEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZUZp
bGxQb3NpdGlvbihDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbHVl
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHBhcnNlZFZhbHVlMSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUxLmdldCgpKTsKLSAgICBS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMiA9IHRvQ1NTUHJpbWl0aXZlVmFs
dWUodmFsdWUyLmdldCgpKTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZh
bHVlMSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZTEuZ2V0KCkpOworICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUyID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KHZhbHVlMi5nZXQoKSk7CiAKICAgICB2YWx1ZTEuY2xlYXIoKTsKICAgICB2YWx1
ZTIuY2xlYXIoKTsKQEAgLTQzMjksNyArNDMyOSw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZUZp
bGxSZXBlYXQoUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUxLCBSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1
CiAKICAgICAvLyBJZiBvbmx5IG9uZSB2YWx1ZSB3YXMgc3BlY2lmaWVkLCB2YWx1ZTIgaXMgdGhl
IHNhbWUgYXMgdmFsdWUxLgogICAgIG1faW1wbGljaXRTaG9ydGhhbmQgPSB0cnVlOwotICAgIHZh
bHVlMiA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh0b0NTU1ByaW1pdGl2
ZVZhbHVlKHZhbHVlMS5nZXQoKSktPmdldFZhbHVlSUQoKSk7CisgICAgdmFsdWUyID0gY3NzVmFs
dWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqdmFsdWUxKS5nZXRWYWx1ZUlEKCkpOwogfQogCiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlRmlsbFNpemUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wmIGFsbG93Q29t
bWEpCkBAIC00OTQ2LDcgKzQ5NDYsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6
OnBhcnNlR3JpZFBvc2l0aW9uKCkKIAogc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdyaWRN
aXNzaW5nR3JpZFBvc2l0aW9uVmFsdWUoQ1NTVmFsdWUqIHZhbHVlKQogewotICAgIGlmICh2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpICYmIHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpLT5pc1N0
cmluZygpKQorICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5pc1N0cmluZygpKQogICAgICAgICByZXR1cm4g
dmFsdWU7CiAKICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlQXV0byk7CkBAIC00OTk4LDcgKzQ5OTgsNyBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VHcmlkVGVtcGxhdGVSb3dzQW5kQXJlYXMoUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdGVtcGxhdGVD
b2x1bQogICAgICAgICBpZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+dW5pdCA9PSBDU1NQYXJz
ZXJWYWx1ZTo6VmFsdWVMaXN0KSB7CiAgICAgICAgICAgICBpZiAodHJhaWxpbmdJZGVudFdhc0Fk
ZGVkKSB7CiAgICAgICAgICAgICAgICAgLy8gQSByb3cncyB0cmFpbGluZyBpZGVudCBtdXN0IGJl
IGNvbmNhdGVuYXRlZCB3aXRoIHRoZSBuZXh0IHJvdydzIGxlYWRpbmcgb25lLgotICAgICAgICAg
ICAgICAgIHBhcnNlR3JpZExpbmVOYW1lcygqbV92YWx1ZUxpc3QsICp0ZW1wbGF0ZVJvd3MsIHRv
Q1NTR3JpZExpbmVOYW1lc1ZhbHVlKHRlbXBsYXRlUm93cy0+aXRlbSh0ZW1wbGF0ZVJvd3MtPmxl
bmd0aCgpIC0gMSkpKTsKKyAgICAgICAgICAgICAgICBwYXJzZUdyaWRMaW5lTmFtZXMoKm1fdmFs
dWVMaXN0LCAqdGVtcGxhdGVSb3dzLCBkb3duY2FzdDxDU1NHcmlkTGluZU5hbWVzVmFsdWU+KHRl
bXBsYXRlUm93cy0+aXRlbSh0ZW1wbGF0ZVJvd3MtPmxlbmd0aCgpIC0gMSkpKTsKICAgICAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHBhcnNlR3JpZExpbmVOYW1lcygqbV92YWx1ZUxp
c3QsICp0ZW1wbGF0ZVJvd3MpOwogICAgICAgICB9CkBAIC01OTAwLDcgKzU5MDAsNyBAQCBQYXNz
UmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlQ2lyY2xlKENT
U1BhcnNlclZhbHVlTGlzdCogYQogICAgICAgICAvLyBhcmd1bWVudHMgZXhjZXB0IHRoZSBmaXJz
dCB0d28uIFRodXMsIGFuZCBpbmRleCBncmVhdGVyIHRoYW4gb25lCiAgICAgICAgIC8vIGluZGlj
YXRlcyBhbiBpbnZhbGlkIHByb2R1Y3Rpb24uCiAgICAgICAgIGlmIChhcmdzLT5jdXJyZW50SW5k
ZXgoKSA+IDEpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgICAgIGlmICghYXJncy0+Y3VycmVudEluZGV4KCkgJiYgYXJndW1lbnQtPmlk
ICE9IENTU1ZhbHVlQXQpIHsKICAgICAgICAgICAgIGlmIChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IHJhZGl1cyA9IHBhcnNlU2hhcGVSYWRpdXMoYXJndW1lbnQpKSB7CkBAIC01OTA4LDcgKzU5
MDgsNyBAQCBQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1No
YXBlQ2lyY2xlKENTU1BhcnNlclZhbHVlTGlzdCogYQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGFyZ3VtZW50LT5pZCA9PSBD
U1NWYWx1ZUF0ICYmIGFyZ3MtPm5leHQoKSkgewpAQCAtNTkxNiwxNCArNTkxNiwxNCBAQCBQYXNz
UmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlQ2lyY2xlKENT
U1BhcnNlclZhbHVlTGlzdCogYQogICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjZW50ZXJZ
OwogICAgICAgICAgICAgcGFyc2VGaWxsUG9zaXRpb24oYXJncywgY2VudGVyWCwgY2VudGVyWSk7
CiAgICAgICAgICAgICBpZiAoY2VudGVyWCAmJiBjZW50ZXJZICYmICFhcmdzLT5jdXJyZW50KCkp
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoY2VudGVyWC0+aXNQcmltaXRpdmVWYWx1ZSgpKTsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoY2VudGVyWS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAg
ICAgICAgICAgICAgICBzaGFwZS0+c2V0Q2VudGVyWCh0b0NTU1ByaW1pdGl2ZVZhbHVlKGNlbnRl
clguZ2V0KCkpKTsKLSAgICAgICAgICAgICAgICBzaGFwZS0+c2V0Q2VudGVyWSh0b0NTU1ByaW1p
dGl2ZVZhbHVlKGNlbnRlclkuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KCpjZW50ZXJYKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzPENT
U1ByaW1pdGl2ZVZhbHVlPigqY2VudGVyWSkpOworICAgICAgICAgICAgICAgIHNoYXBlLT5zZXRD
ZW50ZXJYKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihjZW50ZXJYLmdldCgpKSk7CisgICAg
ICAgICAgICAgICAgc2hhcGUtPnNldENlbnRlclkoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KGNlbnRlclkuZ2V0KCkpKTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCiAgICAgcmV0dXJuIHNoYXBlOwpAQCAtNTk0Niw3ICs1OTQ2LDcgQEAgUGFzc1JlZlB0cjxD
U1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUVsbGlwc2UoQ1NTUGFyc2Vy
VmFsdWVMaXN0KgogICAgICAgICAvLyBhcmd1bWVudHMgZXhjZXB0IHRoZSBmaXJzdCB0aHJlZS4g
VGh1cywgYW4gaW5kZXggZ3JlYXRlciB0aGFuIHR3bwogICAgICAgICAvLyBpbmRpY2F0ZXMgYW4g
aW52YWxpZCBwcm9kdWN0aW9uLgogICAgICAgICBpZiAoYXJncy0+Y3VycmVudEluZGV4KCkgPiAy
KQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgICAgICBpZiAoYXJncy0+Y3VycmVudEluZGV4KCkgPCAyICYmIGFyZ3VtZW50LT5pZCAhPSBD
U1NWYWx1ZUF0KSB7CiAgICAgICAgICAgICBpZiAoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBy
YWRpdXMgPSBwYXJzZVNoYXBlUmFkaXVzKGFyZ3VtZW50KSkgewpAQCAtNTk1NywyMiArNTk1Nywy
MiBAQCBQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBl
RWxsaXBzZShDU1NQYXJzZXJWYWx1ZUxpc3QqCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYXJndW1lbnQtPmlkICE9IENTU1Zh
bHVlQXQgfHwgIWFyZ3MtPm5leHQoKSkgLy8gZXhwZWN0aW5nIGVsbGlwc2UoLi4gYXQgPHBvc2l0
aW9uPikKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjZW50ZXJYOwogICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IGNlbnRlclk7CiAgICAgICAgIHBhcnNlRmlsbFBvc2l0aW9uKGFyZ3MsIGNlbnRlclgs
IGNlbnRlclkpOwogICAgICAgICBpZiAoIWNlbnRlclggfHwgIWNlbnRlclkgfHwgYXJncy0+Y3Vy
cmVudCgpKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgICAgICBBU1NFUlQoY2VudGVyWC0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAg
ICAgQVNTRVJUKGNlbnRlclktPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgIHNoYXBlLT5z
ZXRDZW50ZXJYKHRvQ1NTUHJpbWl0aXZlVmFsdWUoY2VudGVyWC5nZXQoKSkpOwotICAgICAgICBz
aGFwZS0+c2V0Q2VudGVyWSh0b0NTU1ByaW1pdGl2ZVZhbHVlKGNlbnRlclkuZ2V0KCkpKTsKKyAg
ICAgICAgQVNTRVJUKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqY2VudGVyWCkpOworICAgICAgICBB
U1NFUlQoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCpjZW50ZXJZKSk7CisgICAgICAgIHNoYXBlLT5z
ZXRDZW50ZXJYKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihjZW50ZXJYLmdldCgpKSk7Cisg
ICAgICAgIHNoYXBlLT5zZXRDZW50ZXJZKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihjZW50
ZXJZLmdldCgpKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHNoYXBlOwpAQCAtODExNSw3ICs4MTE1
LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclZh
bHVlTGlzdCogdmFsdWVMaXN0LCBSZWZQdHI8Q1MKICAgICAgICAgYSA9IGFyZ3MtPm5leHQoKTsK
ICAgICAgICAgaWYgKCFhIHx8IGEtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1C
RVIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHRvQ1NTUmFkaWFsR3JhZGll
bnRWYWx1ZShyZXN1bHQuZ2V0KCkpLT5zZXRGaXJzdFJhZGl1cyhjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUoYSkpOworICAgICAgICBkb3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigq
cmVzdWx0KS5zZXRGaXJzdFJhZGl1cyhjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYSkpOwog
CiAgICAgICAgIC8vIENvbW1hIGFmdGVyIHRoZSBmaXJzdCByYWRpdXMuCiAgICAgICAgIGEgPSBh
cmdzLT5uZXh0KCk7CkBAIC04MTUyLDcgKzgxNTIsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VE
ZXByZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZlB0cjxD
UwogICAgICAgICBhID0gYXJncy0+bmV4dCgpOwogICAgICAgICBpZiAoIWEgfHwgYS0+dW5pdCAh
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgdG9DU1NSYWRpYWxHcmFkaWVudFZhbHVlKHJlc3VsdC5nZXQoKSktPnNldFNl
Y29uZFJhZGl1cyhjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYSkpOworICAgICAgICBkb3du
Y2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigqcmVzdWx0KS5zZXRTZWNvbmRSYWRpdXMoY3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGEpKTsKICAgICB9CiAKICAgICAvLyBXZSBub3cgd2ls
bCBhY2NlcHQgYW55IG51bWJlciBvZiBzdG9wcyAoMCBvciBtb3JlKS4KQEAgLTgzMTIsMTQgKzgz
MTIsMTQgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRlZFJhZGlhbEdyYWRpZW50KENT
U1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0LCBSZWYKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICBBU1NFUlQoIWNlbnRlclggfHwgY2VudGVyWC0+aXNQcmltaXRpdmVW
YWx1ZSgpKTsKLSAgICBBU1NFUlQoIWNlbnRlclkgfHwgY2VudGVyWS0+aXNQcmltaXRpdmVWYWx1
ZSgpKTsKKyAgICBBU1NFUlQoIWNlbnRlclggfHwgaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCpjZW50
ZXJYKSk7CisgICAgQVNTRVJUKCFjZW50ZXJZIHx8IGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqY2Vu
dGVyWSkpOwogCi0gICAgcmVzdWx0LT5zZXRGaXJzdFgodG9DU1NQcmltaXRpdmVWYWx1ZShjZW50
ZXJYLmdldCgpKSk7Ci0gICAgcmVzdWx0LT5zZXRTZWNvbmRYKHRvQ1NTUHJpbWl0aXZlVmFsdWUo
Y2VudGVyWC5nZXQoKSkpOworICAgIHJlc3VsdC0+c2V0Rmlyc3RYKGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPihjZW50ZXJYLmdldCgpKSk7CisgICAgcmVzdWx0LT5zZXRTZWNvbmRYKGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPihjZW50ZXJYLmdldCgpKSk7CiAgICAgLy8gQ1NTMyByYWRp
YWwgZ3JhZGllbnRzIGFsd2F5cyBzaGFyZSB0aGUgc2FtZSBzdGFydCBhbmQgZW5kIHBvaW50Lgot
ICAgIHJlc3VsdC0+c2V0Rmlyc3RZKHRvQ1NTUHJpbWl0aXZlVmFsdWUoY2VudGVyWS5nZXQoKSkp
OwotICAgIHJlc3VsdC0+c2V0U2Vjb25kWSh0b0NTU1ByaW1pdGl2ZVZhbHVlKGNlbnRlclkuZ2V0
KCkpKTsKKyAgICByZXN1bHQtPnNldEZpcnN0WShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
Y2VudGVyWS5nZXQoKSkpOworICAgIHJlc3VsdC0+c2V0U2Vjb25kWShkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oY2VudGVyWS5nZXQoKSkpOwogCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBzaGFwZVZhbHVlOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2l6ZVZhbHVl
OwpAQCAtODU3OCwxMyArODU3OCwxMyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VSYWRpYWxHcmFk
aWVudChDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbAogICAgICAg
ICBpZiAoIWEpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgQVNTRVJUKGNl
bnRlclgtPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgIEFTU0VSVChjZW50ZXJZLT5pc1By
aW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICByZXN1bHQtPnNldEZpcnN0WCh0b0NTU1ByaW1pdGl2
ZVZhbHVlKGNlbnRlclguZ2V0KCkpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFkodG9DU1NQ
cmltaXRpdmVWYWx1ZShjZW50ZXJZLmdldCgpKSk7CisgICAgICAgIEFTU0VSVChpczxDU1NQcmlt
aXRpdmVWYWx1ZT4oKmNlbnRlclgpKTsKKyAgICAgICAgQVNTRVJUKGlzPENTU1ByaW1pdGl2ZVZh
bHVlPigqY2VudGVyWSkpOworICAgICAgICByZXN1bHQtPnNldEZpcnN0WChkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oY2VudGVyWC5nZXQoKSkpOworICAgICAgICByZXN1bHQtPnNldEZpcnN0
WShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY2VudGVyWS5nZXQoKSkpOwogICAgICAgICAv
LyBSaWdodCBub3csIENTUyByYWRpYWwgZ3JhZGllbnRzIGhhdmUgdGhlIHNhbWUgc3RhcnQgYW5k
IGVuZCBjZW50ZXJzLgotICAgICAgICByZXN1bHQtPnNldFNlY29uZFgodG9DU1NQcmltaXRpdmVW
YWx1ZShjZW50ZXJYLmdldCgpKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U2Vjb25kWSh0b0NTU1By
aW1pdGl2ZVZhbHVlKGNlbnRlclkuZ2V0KCkpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTZWNvbmRY
KGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihjZW50ZXJYLmdldCgpKSk7CisgICAgICAgIHJl
c3VsdC0+c2V0U2Vjb25kWShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY2VudGVyWS5nZXQo
KSkpOwogICAgIH0KIAogICAgIGlmIChzaGFwZVZhbHVlIHx8IHNpemVWYWx1ZSB8fCBob3Jpem9u
dGFsU2l6ZSB8fCBjZW50ZXJYIHx8IGNlbnRlclkpCkBAIC0xMTczNyw3ICsxMTczNyw3IEBAIFBh
c3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gQ1NTUGFyc2VyOjpjcmVhdGVGb250RmFjZVJ1bGUoKQog
ICAgICAgICBDU1NQcm9wZXJ0eSYgcHJvcGVydHkgPSBtX3BhcnNlZFByb3BlcnRpZXNbaV07CiAg
ICAgICAgIGlmIChwcm9wZXJ0eS5pZCgpID09IENTU1Byb3BlcnR5Rm9udFZhcmlhbnQgJiYgcHJv
cGVydHkudmFsdWUoKS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcHJvcGVydHku
d3JhcFZhbHVlSW5Db21tYVNlcGFyYXRlZExpc3QoKTsKLSAgICAgICAgZWxzZSBpZiAocHJvcGVy
dHkuaWQoKSA9PSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHkgJiYgKCFwcm9wZXJ0eS52YWx1ZSgpLT5p
c1ZhbHVlTGlzdCgpIHx8IHRvQ1NTVmFsdWVMaXN0KHByb3BlcnR5LnZhbHVlKCkpLT5sZW5ndGgo
KSAhPSAxKSkgeworICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eS5pZCgpID09IENTU1Byb3BlcnR5
Rm9udEZhbWlseSAmJiAoIWlzPENTU1ZhbHVlTGlzdD4oKnByb3BlcnR5LnZhbHVlKCkpIHx8IGRv
d25jYXN0PENTU1ZhbHVlTGlzdD4oKnByb3BlcnR5LnZhbHVlKCkpLmxlbmd0aCgpICE9IDEpKSB7
CiAgICAgICAgICAgICAvLyBVbmxpa2UgZm9udC1mYW1pbHkgcHJvcGVydHksIGZvbnQtZmFtaWx5
IGRlc2NyaXB0b3IgaW4gQGZvbnQtZmFjZSBydWxlCiAgICAgICAgICAgICAvLyBoYXMgdG8gYmUg
YSB2YWx1ZSBsaXN0IHdpdGggZXhhY3RseSBvbmUgZmFtaWx5IG5hbWUuIEl0IGNhbm5vdCBoYXZl
IGEKICAgICAgICAgICAgIC8vIGhhdmUgJ2luaXRpYWwnIHZhbHVlIGFuZCBjYW5ub3QgJ2luaGVy
aXQnIGZyb20gcGFyZW50LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1p
dGl2ZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAppbmRl
eCBhMTNjMTUzM2E0MWYzNjRhZDQ4OTg4NmQzYjQ3YTE2YmJjYWIxNGU5Li4yNDQ2MDkzYjI5ZmEw
MjFiYWZlMWJmMmQyZjVkZTIzOGNmZWQ2YWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0
aXZlVmFsdWUuaApAQCAtNDIxLDggKzQyMSw4IEBAIHByaXZhdGU6CiAgICAgfSBtX3ZhbHVlOwog
fTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTUHJpbWl0aXZlVmFsdWUsIGlzUHJpbWl0aXZl
VmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0NTU19WQUxVRShDU1NQcmltaXRpdmVWYWx1ZSwgaXNQcmltaXRpdmVWYWx1ZSgpKQorCiAj
ZW5kaWYgLy8gQ1NTUHJpbWl0aXZlVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1JlZmxlY3RWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1JlZmxlY3RWYWx1
ZS5oCmluZGV4IDhkMGZlNjA1OWM5YjIxMTg5NGExMjhiOWRhZDFlODU0MWNmMGVmMTEuLjcyZTM2
NmRmMWVkYTk1OTViZDdmNWZlNTNjMWI5ZjYwYWZmYTVjODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UmVmbGVjdFZhbHVlLmgKQEAgLTY3LDggKzY3LDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Q1NT
VmFsdWU+IG1fbWFzazsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU1JlZmxlY3RWYWx1
ZSwgaXNSZWZsZWN0VmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NSZWZsZWN0VmFsdWUsIGlzUmVmbGVjdFZhbHVl
KCkpCisKICNlbmRpZiAvLyBDU1NSZWZsZWN0VmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1NoYWRvd1ZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2hhZG93
VmFsdWUuaAppbmRleCA2MTc1ZGY4MjZmYTkxMmJkMDg2NDEyYmNjZmJlMTNhNWY1YjFkMjkwLi4w
MDZjNjI5MmYxNmM0YjExNDQ5NDNjMzE0YTg4OGYyYjdlODc5NmZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU2hhZG93VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU2hhZG93VmFsdWUuaApAQCAtNjIsOCArNjIsOCBAQCBwcml2YXRlOgogICAgICAgICBQYXNz
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb2xvcik7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9D
QVNUUyhDU1NTaGFkb3dWYWx1ZSwgaXNTaGFkb3dWYWx1ZSgpKQorfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCi19IC8vIG5hbWVzcGFjZQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUo
Q1NTU2hhZG93VmFsdWUsIGlzU2hhZG93VmFsdWUoKSkKIAotI2VuZGlmCisjZW5kaWYgLy8gQ1NT
U2hhZG93VmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RpbWluZ0Z1
bmN0aW9uVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVl
LmgKaW5kZXggNjZjMmMzYjI1NmYwOGMxNzA4NjM1MTNhZGJlZjhkYjI4ZTliYTAwMy4uYzM5YWIw
Y2ZmMjBkYjVhZDg5OTRiNzY0NzY3ZWQ4YzVjZGU1ZGYxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oCkBAIC02Myw4ICs2Myw2IEBAIHByaXZhdGU6CiAg
ICAgZG91YmxlIG1feTI7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NDdWJpY0Jlemll
clRpbWluZ0Z1bmN0aW9uVmFsdWUsIGlzQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlKCkp
Ci0KIGNsYXNzIENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZSB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWY8Q1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVl
PiBjcmVhdGUoaW50IHN0ZXBzLCBib29sIHN0ZXBBdFN0YXJ0KQpAQCAtOTEsOCArODksOSBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9zdGVwQXRTdGFydDsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NB
U1RTKENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZSwgaXNTdGVwc1RpbWluZ0Z1bmN0aW9uVmFs
dWUoKSkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotfSAvLyBuYW1lc3BhY2UKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1
ZSwgaXNDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUoKSkKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQ1NTX1ZBTFVFKENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZSwgaXNTdGVwc1RpbWlu
Z0Z1bmN0aW9uVmFsdWUoKSkKIAotI2VuZGlmCisjZW5kaWYgLy8gQ1NTVGltaW5nRnVuY3Rpb25W
YWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKaW5kZXggNTEzYzRkOWI3Mzli
NTc0OGE4ZjM4ODA5MzFkYmU3MzA4MDFkYTkxZC4uMGExODVmNGQ2YjYzYTY3MGE2ZWVmMmZhY2Fk
NDhhOTY0NGY4ZWQyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVN
YXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcApAQCAtNzQs
MTAgKzc0LDEwIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbEF0dGFjaG1lbnQoQ1NTUHJv
cGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3dpdGNo
ICh0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgc3dpdGNo
IChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCkpIHsKICAg
ICBjYXNlIENTU1ZhbHVlRml4ZWQ6CiAgICAgICAgIGxheWVyLT5zZXRBdHRhY2htZW50KEZpeGVk
QmFja2dyb3VuZEF0dGFjaG1lbnQpOwogICAgICAgICBicmVhazsKQEAgLTk5LDExICs5OSwxMSBA
QCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxDbGlwKENTU1Byb3BlcnR5SUQsIEZpbGxMYXll
ciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIGxheWVy
LT5zZXRDbGlwKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1p
dGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgbGF5
ZXItPnNldENsaXAocHJpbWl0aXZlVmFsdWUpOwogfQogCiB2b2lkIENTU1RvU3R5bGVNYXA6Om1h
cEZpbGxDb21wb3NpdGUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUq
IHZhbHVlKQpAQCAtMTEzLDExICsxMTMsMTEgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxs
Q29tcG9zaXRlKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKgogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0
aXZlVmFsdWUodmFsdWUpOwotICAgIGxheWVyLT5zZXRDb21wb3NpdGUoKnByaW1pdGl2ZVZhbHVl
KTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBsYXllci0+c2V0Q29tcG9zaXRlKHByaW1pdGl2
ZVZhbHVlKTsKIH0KIAogdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsQmxlbmRNb2RlKENTU1By
b3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKQEAgLTEyNywxMSAr
MTI3LDExIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbEJsZW5kTW9kZShDU1NQcm9wZXJ0
eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSoKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAg
ICBsYXllci0+c2V0QmxlbmRNb2RlKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgQ1NTUHJpbWl0aXZl
VmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSk7CisgICAgbGF5ZXItPnNldEJsZW5kTW9kZShwcmltaXRpdmVWYWx1ZSk7CiB9CiAKIHZvaWQg
Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbE9yaWdpbihDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxh
eWVyLCBDU1NWYWx1ZSogdmFsdWUpCkBAIC0xNDEsMTEgKzE0MSwxMSBAQCB2b2lkIENTU1RvU3R5
bGVNYXA6Om1hcEZpbGxPcmlnaW4oQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NT
VmFsdWUqIHZhbAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIGxheWVyLT5zZXRPcmlnaW4oKnBy
aW1pdGl2ZVZhbHVlKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBsYXllci0+c2V0T3JpZ2lu
KHByaW1pdGl2ZVZhbHVlKTsKIH0KIAogCkBAIC0xNjYsMTEgKzE2NiwxMSBAQCB2b2lkIENTU1Rv
U3R5bGVNYXA6Om1hcEZpbGxSZXBlYXRYKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIs
IENTU1ZhbHVlKiB2YQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+
aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIGxheWVyLT5zZXRSZXBlYXRY
KCpwcmltaXRpdmVWYWx1ZSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgbGF5ZXItPnNldFJl
cGVhdFgocHJpbWl0aXZlVmFsdWUpOwogfQogCiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxS
ZXBlYXRZKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
QEAgLTE4MCwzMSArMTgwLDMxIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFJlcGVhdFko
Q1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAg
aWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSh2YWx1ZSk7Ci0gICAgbGF5ZXItPnNldFJlcGVhdFkoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICBD
U1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKTsKKyAgICBsYXllci0+c2V0UmVwZWF0WShwcmltaXRpdmVWYWx1ZSk7CiB9
CiAKIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFNpemUoQ1NTUHJvcGVydHlJRCwgRmlsbExh
eWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQogewotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSkgeworICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsK
ICAgICAgICAgbGF5ZXItPnNldFNpemVUeXBlKFNpemVOb25lKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJp
bWl0aXZlVmFsdWUodmFsdWUpOwotICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgp
ID09IENTU1ZhbHVlQ29udGFpbikKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFs
dWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBpZiAocHJpbWl0
aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ29udGFpbikKICAgICAgICAgbGF5ZXIt
PnNldFNpemVUeXBlKENvbnRhaW4pOwotICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRW
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVDb3ZlcikKKyAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5n
ZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVDb3ZlcikKICAgICAgICAgbGF5ZXItPnNldFNpemVUeXBl
KENvdmVyKTsKICAgICBlbHNlCiAgICAgICAgIGxheWVyLT5zZXRTaXplVHlwZShTaXplTGVuZ3Ro
KTsKIAogICAgIExlbmd0aFNpemUgYiA9IEZpbGxMYXllcjo6aW5pdGlhbEZpbGxTaXplTGVuZ3Ro
KGxheWVyLT50eXBlKCkpOwogCi0gICAgaWYgKHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8IHBy
aW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVDb250YWluIHx8IHByaW1pdGl2
ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVDb3ZlcikgeworICAgIGlmICh2YWx1ZS0+
aXNJbml0aWFsVmFsdWUoKSB8fCBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFs
dWVDb250YWluIHx8IHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUNvdmVy
KSB7CiAgICAgICAgIGxheWVyLT5zZXRTaXplTGVuZ3RoKGIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMjEyLDEzICsyMTIsMTMgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsU2l6
ZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUKICAgICBM
ZW5ndGggZmlyc3RMZW5ndGg7CiAgICAgTGVuZ3RoIHNlY29uZExlbmd0aDsKIAotICAgIGlmIChQ
YWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1ZSgpKSB7CisgICAgaWYgKFBh
aXIqIHBhaXIgPSBwcmltaXRpdmVWYWx1ZS5nZXRQYWlyVmFsdWUoKSkgewogICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogZmlyc3QgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHBh
aXItPmZpcnN0KCkpOwogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihwYWlyLT5zZWNvbmQoKSk7CiAgICAgICAgIGZpcnN0
TGVuZ3RoID0gZmlyc3QtPmNvbnZlcnRUb0xlbmd0aDxBbnlDb252ZXJzaW9uPihtX3Jlc29sdmVy
LT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CiAgICAgICAgIHNlY29uZExl
bmd0aCA9IHNlY29uZC0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KG1fcmVzb2x2ZXIt
PnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKICAgICB9IGVsc2UgewotICAg
ICAgICBmaXJzdExlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8QW55Q29u
dmVyc2lvbj4obV9yZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkp
OworICAgICAgICBmaXJzdExlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLmNvbnZlcnRUb0xlbmd0aDxB
bnlDb252ZXJzaW9uPihtX3Jlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoKSk7CiAgICAgICAgIHNlY29uZExlbmd0aCA9IExlbmd0aCgpOwogICAgIH0KIApAQCAtMjM3
LDEwICsyMzcsMTAgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsWFBvc2l0aW9uKENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlz
PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVl
KTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIFBhaXIqIHBhaXIgPSBwcmltaXRpdmVWYWx1ZS0+
Z2V0UGFpclZhbHVlKCk7CiAgICAgaWYgKHBhaXIpIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChw
cm9wZXJ0eUlELCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWCB8
fCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCk7CkBAIC0yNjks
MTAgKzI2OSwxMCBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxZUG9zaXRpb24oQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLAogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUp
OworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgUGFpciogcGFpciA9IHByaW1pdGl2ZVZhbHVlLT5n
ZXRQYWlyVmFsdWUoKTsKICAgICBpZiAocGFpcikgewogICAgICAgICBBU1NFUlRfVU5VU0VEKHBy
b3BlcnR5SUQsIHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZIHx8
IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25ZKTsKQEAgLTMwMiwx
MSArMzAyLDExIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbE1hc2tTb3VyY2VUeXBlKENT
U1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7
Ci0gICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgQ1NTUHJp
bWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSk7CisgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAg
ICBjYXNlIENTU1ZhbHVlQWxwaGE6CiAgICAgICAgIHR5cGUgPSBFTWFza1NvdXJjZVR5cGU6Ok1h
c2tBbHBoYTsKICAgICAgICAgYnJlYWs7CkBAIC0zMjksMTEgKzMyOSwxMSBAQCB2b2lkIENTU1Rv
U3R5bGVNYXA6Om1hcEFuaW1hdGlvbkRlbGF5KEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgYW5pbWF0aW9uLT5zZXREZWxheShw
cmltaXRpdmVWYWx1ZS0+Y29tcHV0ZVRpbWU8ZG91YmxlLCBDU1NQcmltaXRpdmVWYWx1ZTo6U2Vj
b25kcz4oKSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgYW5pbWF0aW9uLT5zZXREZWxheShw
cmltaXRpdmVWYWx1ZS5jb21wdXRlVGltZTxkb3VibGUsIENTU1ByaW1pdGl2ZVZhbHVlOjpTZWNv
bmRzPigpKTsKIH0KIAogdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25EaXJlY3Rpb24o
QW5pbWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQpAQCAtMzQzLDExICszNDMsMTEgQEAg
dm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25EaXJlY3Rpb24oQW5pbWF0aW9uKiBsYXll
ciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmlt
aXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIHN3aXRjaCAocHJp
bWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSkgeworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmlt
aXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIHN3
aXRjaCAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpKSB7CiAgICAgY2FzZSBDU1NWYWx1ZU5v
cm1hbDoKICAgICAgICAgbGF5ZXItPnNldERpcmVjdGlvbihBbmltYXRpb246OkFuaW1hdGlvbkRp
cmVjdGlvbk5vcm1hbCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzcyLDExICszNzIsMTEgQEAgdm9p
ZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25EdXJhdGlvbihBbmltYXRpb24qIGFuaW1hdGlv
biwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmlt
aXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIGFuaW1hdGlvbi0+
c2V0RHVyYXRpb24ocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGRvdWJsZSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OlNlY29uZHM+KCkpOworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGFuaW1hdGlv
bi0+c2V0RHVyYXRpb24ocHJpbWl0aXZlVmFsdWUuY29tcHV0ZVRpbWU8ZG91YmxlLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6U2Vjb25kcz4oKSk7CiB9CiAKIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5p
bWF0aW9uRmlsbE1vZGUoQW5pbWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQpAQCAtMzg2
LDExICszODYsMTEgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25GaWxsTW9kZShB
bmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0g
ICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgQ1NTUHJpbWl0
aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSk7CisgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAgICBj
YXNlIENTU1ZhbHVlTm9uZToKICAgICAgICAgbGF5ZXItPnNldEZpbGxNb2RlKEFuaW1hdGlvbkZp
bGxNb2RlTm9uZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDE1LDE0ICs0MTUsMTQgQEAgdm9pZCBD
U1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25JdGVyYXRpb25Db3VudChBbmltYXRpb24qIGFuaW1h
dGlvbiwgQ1NTVmFsdWUqIHYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUluZmluaXRlKQorICAgIENTU1ByaW1pdGl2
ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVJbmZp
bml0ZSkKICAgICAgICAgYW5pbWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudChBbmltYXRpb246Okl0
ZXJhdGlvbkNvdW50SW5maW5pdGUpOwogICAgIGVsc2UKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRJ
dGVyYXRpb25Db3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKTsKKyAgICAgICAg
YW5pbWF0aW9uLT5zZXRJdGVyYXRpb25Db3VudChwcmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVl
KCkpOwogfQogCiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbk5hbWUoQW5pbWF0aW9u
KiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQpAQCAtNDMyLDE0ICs0MzIsMTQgQEAgdm9pZCBDU1NU
b1N0eWxlTWFwOjptYXBBbmltYXRpb25OYW1lKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZh
bHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2
ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgIGxheWVy
LT5zZXRJc05vbmVBbmltYXRpb24odHJ1ZSk7CiAgICAgZWxzZQotICAgICAgICBsYXllci0+c2V0
TmFtZShwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7CisgICAgICAgIGxheWVyLT5z
ZXROYW1lKHByaW1pdGl2ZVZhbHVlLmdldFN0cmluZ1ZhbHVlKCkpOwogfQogCiB2b2lkIENTU1Rv
U3R5bGVNYXA6Om1hcEFuaW1hdGlvblBsYXlTdGF0ZShBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1
ZSogdmFsdWUpCkBAIC00NDksMTEgKzQ0OSwxMSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFu
aW1hdGlvblBsYXlTdGF0ZShBbmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
CisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRp
dmVWYWx1ZSh2YWx1ZSk7Ci0gICAgRUFuaW1QbGF5U3RhdGUgcGxheVN0YXRlID0gKHByaW1pdGl2
ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVQYXVzZWQpID8gQW5pbVBsYXlTdGF0ZVBh
dXNlZCA6IEFuaW1QbGF5U3RhdGVQbGF5aW5nOworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmlt
aXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIEVB
bmltUGxheVN0YXRlIHBsYXlTdGF0ZSA9IChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVQYXVzZWQpID8gQW5pbVBsYXlTdGF0ZVBhdXNlZCA6IEFuaW1QbGF5U3RhdGVQbGF5
aW5nOwogICAgIGxheWVyLT5zZXRQbGF5U3RhdGUocGxheVN0YXRlKTsKIH0KIApAQCAtNDY1LDE5
ICs0NjUsMTkgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25Qcm9wZXJ0eShBbmlt
YXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwot
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQWxsKSB7Cisg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9
PSBDU1NWYWx1ZUFsbCkgewogICAgICAgICBhbmltYXRpb24tPnNldEFuaW1hdGlvbk1vZGUoQW5p
bWF0aW9uOjpBbmltYXRlQWxsKTsKICAgICAgICAgYW5pbWF0aW9uLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUludmFsaWQpOwotICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVl
SUQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKKyAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmdl
dFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKICAgICAgICAgYW5pbWF0aW9uLT5zZXRBbmlt
YXRpb25Nb2RlKEFuaW1hdGlvbjo6QW5pbWF0ZU5vbmUpOwogICAgICAgICBhbmltYXRpb24tPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5SW52YWxpZCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYW5p
bWF0aW9uLT5zZXRBbmltYXRpb25Nb2RlKEFuaW1hdGlvbjo6QW5pbWF0ZVNpbmdsZVByb3BlcnR5
KTsKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRQcm9wZXJ0eShwcmltaXRpdmVWYWx1ZS0+Z2V0UHJv
cGVydHlJRCgpKTsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRQcm9wZXJ0eShwcmltaXRpdmVWYWx1
ZS5nZXRQcm9wZXJ0eUlEKCkpOwogICAgIH0KIH0KIApAQCAtNDg4LDkgKzQ4OCw5IEBAIHZvaWQg
Q1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oQW5pbWF0aW9uKiBhbmlt
YXRpb24sIENTU1ZhbHVlKiB2CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAodmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICAgICAgc3dpdGNo
IChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgaWYgKGlzPENTU1ByaW1pdGl2
ZVZhbHVlPigqdmFsdWUpKSB7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgICAgICBzd2l0
Y2ggKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSkgewogICAgICAgICBjYXNlIENTU1ZhbHVl
TGluZWFyOgogICAgICAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihMaW5lYXJU
aW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC01MTgsMjMg
KzUxOCwyMyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9u
KEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdgogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKHZhbHVlLT5pc0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSgpKSB7
Ci0gICAgICAgIENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSogY3ViaWNUaW1pbmdG
dW5jdGlvbiA9IHRvQ1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlKHZhbHVlKTsKLSAg
ICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0
aW9uOjpjcmVhdGUoY3ViaWNUaW1pbmdGdW5jdGlvbi0+eDEoKSwgY3ViaWNUaW1pbmdGdW5jdGlv
bi0+eTEoKSwgY3ViaWNUaW1pbmdGdW5jdGlvbi0+eDIoKSwgY3ViaWNUaW1pbmdGdW5jdGlvbi0+
eTIoKSkpOwotICAgIH0gZWxzZSBpZiAodmFsdWUtPmlzU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVl
KCkpIHsKLSAgICAgICAgQ1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlKiBzdGVwc1RpbWluZ0Z1
bmN0aW9uID0gdG9DU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWUodmFsdWUpOwotICAgICAgICBh
bmltYXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFN0ZXBzVGltaW5nRnVuY3Rpb246OmNyZWF0ZShz
dGVwc1RpbWluZ0Z1bmN0aW9uLT5udW1iZXJPZlN0ZXBzKCksIHN0ZXBzVGltaW5nRnVuY3Rpb24t
PnN0ZXBBdFN0YXJ0KCkpKTsKKyAgICBpZiAoaXM8Q1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
blZhbHVlPigqdmFsdWUpKSB7CisgICAgICAgIENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25W
YWx1ZSYgY3ViaWNUaW1pbmdGdW5jdGlvbiA9IGRvd25jYXN0PENTU0N1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb25WYWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5j
dGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoY3ViaWNUaW1pbmdGdW5jdGlv
bi54MSgpLCBjdWJpY1RpbWluZ0Z1bmN0aW9uLnkxKCksIGN1YmljVGltaW5nRnVuY3Rpb24ueDIo
KSwgY3ViaWNUaW1pbmdGdW5jdGlvbi55MigpKSk7CisgICAgfSBlbHNlIGlmIChpczxDU1NTdGVw
c1RpbWluZ0Z1bmN0aW9uVmFsdWU+KCp2YWx1ZSkpIHsKKyAgICAgICAgQ1NTU3RlcHNUaW1pbmdG
dW5jdGlvblZhbHVlJiBzdGVwc1RpbWluZ0Z1bmN0aW9uID0gZG93bmNhc3Q8Q1NTU3RlcHNUaW1p
bmdGdW5jdGlvblZhbHVlPigqdmFsdWUpOworICAgICAgICBhbmltYXRpb24tPnNldFRpbWluZ0Z1
bmN0aW9uKFN0ZXBzVGltaW5nRnVuY3Rpb246OmNyZWF0ZShzdGVwc1RpbWluZ0Z1bmN0aW9uLm51
bWJlck9mU3RlcHMoKSwgc3RlcHNUaW1pbmdGdW5jdGlvbi5zdGVwQXRTdGFydCgpKSk7CiAgICAg
fQogfQogCiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQogewog
ICAgIC8vIElmIHdlJ3JlIG5vdCBhIHZhbHVlIGxpc3QsIHRoZW4gd2UgYXJlICJub25lIiBhbmQg
ZG9uJ3QgbmVlZCB0byBhbHRlciB0aGUgZW1wdHkgaW1hZ2UgYXQgYWxsLgotICAgIGlmICghdmFs
dWUgfHwgIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQorICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0Pih2
YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFJldHJpZXZlIHRoZSBib3JkZXIgaW1h
Z2UgdmFsdWUuCi0gICAgQ1NTVmFsdWVMaXN0KiBib3JkZXJJbWFnZSA9IHRvQ1NTVmFsdWVMaXN0
KHZhbHVlKTsKKyAgICBDU1NWYWx1ZUxpc3QmIGJvcmRlckltYWdlID0gZG93bmNhc3Q8Q1NTVmFs
dWVMaXN0PigqdmFsdWUpOwogCiAgICAgLy8gU2V0IHRoZSBpbWFnZSAodGhpcyBraWNrcyBvZmYg
dGhlIGxvYWQpLgogICAgIENTU1Byb3BlcnR5SUQgaW1hZ2VQcm9wZXJ0eTsKQEAgLTU0NSw4ICs1
NDUsOCBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSwgTgogICAgIGVsc2UKICAgICAgICAgaW1hZ2VQ
cm9wZXJ0eSA9IHByb3BlcnR5OwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBib3Jk
ZXJJbWFnZS0+bGVuZ3RoKCkgOyArK2kpIHsKLSAgICAgICAgQ1NTVmFsdWUqIGN1cnJlbnQgPSBi
b3JkZXJJbWFnZS0+aXRlbShpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IGJvcmRl
ckltYWdlLmxlbmd0aCgpIDsgKytpKSB7CisgICAgICAgIENTU1ZhbHVlKiBjdXJyZW50ID0gYm9y
ZGVySW1hZ2UuaXRlbShpKTsKIAogICAgICAgICBpZiAoY3VycmVudC0+aXNJbWFnZVZhbHVlKCkg
fHwgY3VycmVudC0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkKICNpZiBFTkFCTEUoQ1NTX0lNQUdF
X1NFVCkKQEAgLTU1NiwxOSArNTU2LDE5IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBp
ZWNlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTVmFsdWUqIHZhbHVlLCBOCiAgICAg
ICAgICAgICBpbWFnZS5zZXRJbWFnZShzdHlsZUltYWdlKGltYWdlUHJvcGVydHksIGN1cnJlbnQp
KTsKICAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+aXNCb3JkZXJJbWFnZVNsaWNlVmFsdWUoKSkK
ICAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdlU2xpY2UoY3VycmVudCwgaW1hZ2UpOwotICAg
ICAgICBlbHNlIGlmIChjdXJyZW50LT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAgICAgICAgICBDU1NW
YWx1ZUxpc3QqIHNsYXNoTGlzdCA9IHRvQ1NTVmFsdWVMaXN0KGN1cnJlbnQpOworICAgICAgICBl
bHNlIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCpjdXJyZW50KSkgeworICAgICAgICAgICAgQ1NTVmFs
dWVMaXN0JiBzbGFzaExpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpjdXJyZW50KTsKICAg
ICAgICAgICAgIC8vIE1hcCBpbiB0aGUgaW1hZ2Ugc2xpY2VzLgotICAgICAgICAgICAgaWYgKHNs
YXNoTGlzdC0+aXRlbSgwKSAmJiBzbGFzaExpc3QtPml0ZW0oMCktPmlzQm9yZGVySW1hZ2VTbGlj
ZVZhbHVlKCkpCi0gICAgICAgICAgICAgICAgbWFwTmluZVBpZWNlSW1hZ2VTbGljZShzbGFzaExp
c3QtPml0ZW0oMCksIGltYWdlKTsKKyAgICAgICAgICAgIGlmIChzbGFzaExpc3QuaXRlbSgwKSAm
JiBzbGFzaExpc3QuaXRlbSgwKS0+aXNCb3JkZXJJbWFnZVNsaWNlVmFsdWUoKSkKKyAgICAgICAg
ICAgICAgICBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKHNsYXNoTGlzdC5pdGVtKDApLCBpbWFnZSk7
CiAKICAgICAgICAgICAgIC8vIE1hcCBpbiB0aGUgYm9yZGVyIHNsaWNlcy4KLSAgICAgICAgICAg
IGlmIChzbGFzaExpc3QtPml0ZW0oMSkpCi0gICAgICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVy
U2xpY2VzKG1hcE5pbmVQaWVjZUltYWdlUXVhZChzbGFzaExpc3QtPml0ZW0oMSkpKTsKKyAgICAg
ICAgICAgIGlmIChzbGFzaExpc3QuaXRlbSgxKSkKKyAgICAgICAgICAgICAgICBpbWFnZS5zZXRC
b3JkZXJTbGljZXMobWFwTmluZVBpZWNlSW1hZ2VRdWFkKHNsYXNoTGlzdC5pdGVtKDEpKSk7CiAK
ICAgICAgICAgICAgIC8vIE1hcCBpbiB0aGUgb3V0c2V0LgotICAgICAgICAgICAgaWYgKHNsYXNo
TGlzdC0+aXRlbSgyKSkKLSAgICAgICAgICAgICAgICBpbWFnZS5zZXRPdXRzZXQobWFwTmluZVBp
ZWNlSW1hZ2VRdWFkKHNsYXNoTGlzdC0+aXRlbSgyKSkpOworICAgICAgICAgICAgaWYgKHNsYXNo
TGlzdC5pdGVtKDIpKQorICAgICAgICAgICAgICAgIGltYWdlLnNldE91dHNldChtYXBOaW5lUGll
Y2VJbWFnZVF1YWQoc2xhc2hMaXN0Lml0ZW0oMikpKTsKICAgICAgICAgfSBlbHNlIGlmIChjdXJy
ZW50LT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAgICAgIC8vIFNldCB0aGUgYXBwcm9w
cmlhdGUgcnVsZXMgZm9yIHN0cmV0Y2gvcm91bmQvcmVwZWF0IG9mIHRoZSBzbGljZXMuCiAgICAg
ICAgICAgICBtYXBOaW5lUGllY2VJbWFnZVJlcGVhdChjdXJyZW50LCBpbWFnZSk7CkBAIC01OTIs
MTUgKzU5MiwxNSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlKENTU1By
b3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSwgTgogCiB2b2lkIENTU1RvU3R5bGVN
YXA6Om1hcE5pbmVQaWVjZUltYWdlU2xpY2UoQ1NTVmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFn
ZSYgaW1hZ2UpCiB7Ci0gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUtPmlzQm9yZGVySW1hZ2VTbGlj
ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+KHZhbHVlKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gUmV0cmlldmUgdGhlIGJvcmRlciBpbWFnZSB2YWx1
ZS4KLSAgICBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUqIGJvcmRlckltYWdlU2xpY2UgPSB0b0NT
U0JvcmRlckltYWdlU2xpY2VWYWx1ZSh2YWx1ZSk7CisgICAgQ1NTQm9yZGVySW1hZ2VTbGljZVZh
bHVlJiBib3JkZXJJbWFnZVNsaWNlID0gZG93bmNhc3Q8Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVl
PigqdmFsdWUpOwogCiAgICAgLy8gU2V0IHVwIGEgbGVuZ3RoIGJveCB0byByZXByZXNlbnQgb3Vy
IGltYWdlIHNsaWNlcy4KICAgICBMZW5ndGhCb3ggYm94OwotICAgIFF1YWQqIHNsaWNlcyA9IGJv
cmRlckltYWdlU2xpY2UtPnNsaWNlcygpOworICAgIFF1YWQqIHNsaWNlcyA9IGJvcmRlckltYWdl
U2xpY2Uuc2xpY2VzKCk7CiAgICAgaWYgKHNsaWNlcy0+dG9wKCktPmlzUGVyY2VudGFnZSgpKQog
ICAgICAgICBib3gubV90b3AgPSBMZW5ndGgoc2xpY2VzLT50b3AoKS0+Z2V0RG91YmxlVmFsdWUo
KSwgUGVyY2VudCk7CiAgICAgZWxzZQpAQCAtNjIwLDIzICs2MjAsMjMgQEAgdm9pZCBDU1NUb1N0
eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVNsaWNlKENTU1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNl
SW1hZ2UmIGltYWcKICAgICBpbWFnZS5zZXRJbWFnZVNsaWNlcyhib3gpOwogCiAgICAgLy8gU2V0
IG91ciBmaWxsIG1vZGUuCi0gICAgaW1hZ2Uuc2V0RmlsbChib3JkZXJJbWFnZVNsaWNlLT5tX2Zp
bGwpOworICAgIGltYWdlLnNldEZpbGwoYm9yZGVySW1hZ2VTbGljZS5tX2ZpbGwpOwogfQogCiBM
ZW5ndGhCb3ggQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlKiB2
YWx1ZSkKIHsKLSAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQor
ICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuIExl
bmd0aEJveCgpOwogCiAgICAgLy8gR2V0IG91ciB6b29tIHZhbHVlLgogICAgIENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgPSB1c2VTVkdab29tUnVsZXMoKSA/IG1fcmVz
b2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0
ZWRab29tKDEuMGYpIDogbV9yZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25E
YXRhKCk7CiAKICAgICAvLyBSZXRyaWV2ZSB0aGUgcHJpbWl0aXZlIHZhbHVlLgotICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBib3JkZXJXaWR0aHMgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsK
KyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgYm9yZGVyV2lkdGhzID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSk7CiAKICAgICAvLyBTZXQgdXAgYSBsZW5ndGggYm94IHRvIHJlcHJl
c2VudCBvdXIgaW1hZ2Ugc2xpY2VzLgogICAgIExlbmd0aEJveCBib3g7IC8vIERlZmF1bHRzIHRv
ICdhdXRvJyBzbyB3ZSBkb24ndCBoYXZlIHRvIGhhbmRsZSB0aGF0IGV4cGxpY2l0bHkgYmVsb3cu
Ci0gICAgUXVhZCogc2xpY2VzID0gYm9yZGVyV2lkdGhzLT5nZXRRdWFkVmFsdWUoKTsKKyAgICBR
dWFkKiBzbGljZXMgPSBib3JkZXJXaWR0aHMuZ2V0UXVhZFZhbHVlKCk7CiAgICAgaWYgKHNsaWNl
cy0+dG9wKCktPmlzTnVtYmVyKCkpCiAgICAgICAgIGJveC5tX3RvcCA9IExlbmd0aChzbGljZXMt
PnRvcCgpLT5nZXRJbnRWYWx1ZSgpLCBSZWxhdGl2ZSk7CiAgICAgZWxzZSBpZiAoc2xpY2VzLT50
b3AoKS0+aXNQZXJjZW50YWdlKCkpCkBAIC02NzAsMTEgKzY3MCwxMSBAQCBMZW5ndGhCb3ggQ1NT
VG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlKiB2YWx1ZSkKIAogdm9p
ZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVJlcGVhdChDU1NWYWx1ZSogdmFsdWUs
IE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKIHsKLSAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgUGFpciogcGFpciA9IHByaW1pdGl2
ZVZhbHVlLT5nZXRQYWlyVmFsdWUoKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZl
VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBQYWlyKiBw
YWlyID0gcHJpbWl0aXZlVmFsdWUuZ2V0UGFpclZhbHVlKCk7CiAgICAgaWYgKCFwYWlyIHx8ICFw
YWlyLT5maXJzdCgpIHx8ICFwYWlyLT5zZWNvbmQoKSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVW5pY29kZVJhbmdlVmFsdWUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oCmluZGV4IDU5ZGFjOGU1YzA5Nzdi
MmM2NTE0YjFkZjI3MDY0MzE2MWRhMjkyM2MuLjA2YzE3NzQwMDg3NTViNjI1NmNhNDQzMTg0MDYy
NWE5Yzg3OTk3MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFu
Z2VWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5o
CkBAIC01Nyw4ICs1Nyw4IEBAIHByaXZhdGU6CiAgICAgVUNoYXIzMiBtX3RvOwogfTsKIAotQ1NT
X1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTVW5pY29kZVJhbmdlVmFsdWUsIGlzVW5pY29kZVJhbmdlVmFs
dWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0NTU19WQUxVRShDU1NVbmljb2RlUmFuZ2VWYWx1ZSwgaXNVbmljb2RlUmFuZ2VWYWx1ZSgpKQor
CiAjZW5kaWYgLy8gQ1NTVW5pY29kZVJhbmdlVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1ZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5jcHAK
aW5kZXggYWFjZjY4Njg1M2Q1YjI1YmE1MTA3Nzg1OTY2MzkzMjA0ZDIwNTRlNi4uZDAyOWVjMTdl
ZTIzY2IyN2YyYzAwZDI5MGQ3OTMxNTgzZGRlMTFiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuY3Bw
CkBAIC05MSw3ICs5MSw3IEBAIHByaXZhdGU6CiAKIGJvb2wgQ1NTVmFsdWU6OmlzSW1wbGljaXRJ
bml0aWFsVmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiBtX2NsYXNzVHlwZSA9PSBJbml0aWFs
Q2xhc3MgJiYgdG9DU1NJbml0aWFsVmFsdWUodGhpcyktPmlzSW1wbGljaXQoKTsKKyAgICByZXR1
cm4gbV9jbGFzc1R5cGUgPT0gSW5pdGlhbENsYXNzICYmIGRvd25jYXN0PENTU0luaXRpYWxWYWx1
ZT4oKnRoaXMpLmlzSW1wbGljaXQoKTsKIH0KIAogQ1NTVmFsdWU6OlR5cGUgQ1NTVmFsdWU6OmNz
c1ZhbHVlVHlwZSgpIGNvbnN0CkBAIC0xMTIsMTQgKzExMiwxNCBAQCB2b2lkIENTU1ZhbHVlOjph
ZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxVUkw+JiB1cmxzLCBjb25zdCBTdHls
ZVNoZWV0QwogICAgIC8vIFRoaXMgc2hvdWxkIGdldCBjYWxsZWQgZm9yIGludGVybmFsIGluc3Rh
bmNlcyBvbmx5LgogICAgIEFTU0VSVCghaXNDU1NPTVNhZmUoKSk7CiAKLSAgICBpZiAoaXNQcmlt
aXRpdmVWYWx1ZSgpKQotICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRoaXMpLT5hZGRTdWJy
ZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBzdHlsZVNoZWV0KTsKLSAgICBlbHNlIGlmIChpc1ZhbHVl
TGlzdCgpKQotICAgICAgICB0b0NTU1ZhbHVlTGlzdCh0aGlzKS0+YWRkU3VicmVzb3VyY2VTdHls
ZVVSTHModXJscywgc3R5bGVTaGVldCk7Ci0gICAgZWxzZSBpZiAoY2xhc3NUeXBlKCkgPT0gRm9u
dEZhY2VTcmNDbGFzcykKLSAgICAgICAgdG9DU1NGb250RmFjZVNyY1ZhbHVlKHRoaXMpLT5hZGRT
dWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBzdHlsZVNoZWV0KTsKLSAgICBlbHNlIGlmIChjbGFz
c1R5cGUoKSA9PSBSZWZsZWN0Q2xhc3MpCi0gICAgICAgIHRvQ1NTUmVmbGVjdFZhbHVlKHRoaXMp
LT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBzdHlsZVNoZWV0KTsKKyAgICBpZiAoaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp0aGlzKSkKKyAgICAgICAgZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp0aGlzKS5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBzdHlsZVNoZWV0KTsK
KyAgICBlbHNlIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp0aGlzKSkKKyAgICAgICAgZG93bmNhc3Q8
Q1NTVmFsdWVMaXN0PigqdGhpcykuYWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJscywgc3R5bGVT
aGVldCk7CisgICAgZWxzZSBpZiAoaXM8Q1NTRm9udEZhY2VTcmNWYWx1ZT4oKnRoaXMpKQorICAg
ICAgICBkb3duY2FzdDxDU1NGb250RmFjZVNyY1ZhbHVlPigqdGhpcykuYWRkU3VicmVzb3VyY2VT
dHlsZVVSTHModXJscywgc3R5bGVTaGVldCk7CisgICAgZWxzZSBpZiAoaXM8Q1NTUmVmbGVjdFZh
bHVlPigqdGhpcykpCisgICAgICAgIGRvd25jYXN0PENTU1JlZmxlY3RWYWx1ZT4oKnRoaXMpLmFk
ZFN1YnJlc291cmNlU3R5bGVVUkxzKHVybHMsIHN0eWxlU2hlZXQpOwogfQogCiBib29sIENTU1Zh
bHVlOjpoYXNGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKCkgY29uc3QKQEAgLTEyNywxOSAr
MTI3LDE5IEBAIGJvb2wgQ1NTVmFsdWU6Omhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMo
KSBjb25zdAogICAgIC8vIFRoaXMgc2hvdWxkIGdldCBjYWxsZWQgZm9yIGludGVybmFsIGluc3Rh
bmNlcyBvbmx5LgogICAgIEFTU0VSVCghaXNDU1NPTVNhZmUoKSk7CiAKLSAgICBpZiAoaXNWYWx1
ZUxpc3QoKSkKLSAgICAgICAgcmV0dXJuIHRvQ1NTVmFsdWVMaXN0KHRoaXMpLT5oYXNGYWlsZWRP
ckNhbmNlbGVkU3VicmVzb3VyY2VzKCk7Ci0gICAgaWYgKGNsYXNzVHlwZSgpID09IEZvbnRGYWNl
U3JjQ2xhc3MpCi0gICAgICAgIHJldHVybiB0b0NTU0ZvbnRGYWNlU3JjVmFsdWUodGhpcyktPmhh
c0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoKTsKLSAgICBpZiAoY2xhc3NUeXBlKCkgPT0g
SW1hZ2VDbGFzcykKLSAgICAgICAgcmV0dXJuIHRvQ1NTSW1hZ2VWYWx1ZSh0aGlzKS0+aGFzRmFp
bGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcygpOwotICAgIGlmIChjbGFzc1R5cGUoKSA9PSBDcm9z
c2ZhZGVDbGFzcykKLSAgICAgICAgcmV0dXJuIHRvQ1NTQ3Jvc3NmYWRlVmFsdWUodGhpcyktPmhh
c0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoKTsKLSAgICBpZiAoY2xhc3NUeXBlKCkgPT0g
RmlsdGVySW1hZ2VDbGFzcykKLSAgICAgICAgcmV0dXJuIHRvQ1NTRmlsdGVySW1hZ2VWYWx1ZSh0
aGlzKS0+aGFzRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcygpOworICAgIGlmIChpczxDU1NW
YWx1ZUxpc3Q+KCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ZhbHVlTGlzdD4o
KnRoaXMpLmhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoKTsKKyAgICBpZiAoaXM8Q1NT
Rm9udEZhY2VTcmNWYWx1ZT4oKnRoaXMpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTRm9u
dEZhY2VTcmNWYWx1ZT4oKnRoaXMpLmhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoKTsK
KyAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oKnRoaXMpKQorICAgICAgICByZXR1cm4gZG93bmNh
c3Q8Q1NTSW1hZ2VWYWx1ZT4oKnRoaXMpLmhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMo
KTsKKyAgICBpZiAoaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KCp0aGlzKSkKKyAgICAgICAgcmV0dXJu
IGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPigqdGhpcykuaGFzRmFpbGVkT3JDYW5jZWxlZFN1
YnJlc291cmNlcygpOworICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPigqdGhpcykpCisg
ICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPigqdGhpcykuaGFzRmFp
bGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcygpOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQot
ICAgIGlmIChjbGFzc1R5cGUoKSA9PSBJbWFnZVNldENsYXNzKQotICAgICAgICByZXR1cm4gdG9D
U1NJbWFnZVNldFZhbHVlKHRoaXMpLT5oYXNGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKCk7
CisgICAgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PENTU0ltYWdlU2V0VmFsdWU+KCp0aGlzKS5oYXNGYWlsZWRPckNhbmNlbGVkU3VicmVz
b3VyY2VzKCk7CiAjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yMjksOSArMjI5LDkg
QEAgYm9vbCBDU1NWYWx1ZTo6ZXF1YWxzKGNvbnN0IENTU1ZhbHVlJiBvdGhlcikgY29uc3QKICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX2NsYXNzVHlwZSA9PSBWYWx1ZUxpc3RDbGFz
cyAmJiBvdGhlci5tX2NsYXNzVHlwZSAhPSBWYWx1ZUxpc3RDbGFzcykKLSAgICAgICAgcmV0dXJu
IHRvQ1NTVmFsdWVMaXN0KHRoaXMpLT5lcXVhbHMob3RoZXIpOwotICAgIGVsc2UgaWYgKG1fY2xh
c3NUeXBlICE9IFZhbHVlTGlzdENsYXNzICYmIG90aGVyLm1fY2xhc3NUeXBlID09IFZhbHVlTGlz
dENsYXNzKQorICAgIH0gZWxzZSBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdGhpcykgJiYgIWlzPENT
U1ZhbHVlTGlzdD4ob3RoZXIpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0
PigqdGhpcykuZXF1YWxzKG90aGVyKTsKKyAgICBlbHNlIGlmICghaXM8Q1NTVmFsdWVMaXN0Pigq
dGhpcykgJiYgaXM8Q1NTVmFsdWVMaXN0PihvdGhlcikpCiAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCBDU1NWYWx1ZUxpc3QmPihvdGhlcikuZXF1YWxzKCp0aGlzKTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CkBAIC0yNDYsNzEgKzI0Niw3MSBAQCBTdHJpbmcgQ1NTVmFsdWU6OmNzc1Rl
eHQoKSBjb25zdAogCiAgICAgc3dpdGNoIChjbGFzc1R5cGUoKSkgewogICAgIGNhc2UgQXNwZWN0
UmF0aW9DbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTQXNwZWN0UmF0aW9WYWx1ZSh0aGlzKS0+
Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQXNwZWN0UmF0aW9W
YWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIEJvcmRlckltYWdlU2xpY2VD
bGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlKHRoaXMpLT5j
dXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NCb3JkZXJJbWFnZVNs
aWNlVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBDYW52YXNDbGFzczoK
LSAgICAgICAgcmV0dXJuIHRvQ1NTQ2FudmFzVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0NhbnZhc1ZhbHVlPigqdGhpcykuY3VzdG9tQ1NT
VGV4dCgpOwogICAgIGNhc2UgQ3Vyc29ySW1hZ2VDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NT
Q3Vyc29ySW1hZ2VWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAg
ICBjYXNlIEZpbHRlckltYWdlQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0ZpbHRlckltYWdl
VmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENT
U0ZpbHRlckltYWdlVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBGb250
Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0ZvbnRWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4
dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTRm9udFZhbHVlPigqdGhpcykuY3VzdG9t
Q1NTVGV4dCgpOwogICAgIGNhc2UgRm9udEZhY2VTcmNDbGFzczoKLSAgICAgICAgcmV0dXJuIHRv
Q1NTRm9udEZhY2VTcmNWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1
cm4gZG93bmNhc3Q8Q1NTRm9udEZhY2VTcmNWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsK
ICAgICBjYXNlIEZvbnRGZWF0dXJlQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0ZvbnRGZWF0
dXJlVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENTU0ZvbnRGZWF0dXJlVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBG
dW5jdGlvbkNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NGdW5jdGlvblZhbHVlKHRoaXMpLT5j
dXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NGdW5jdGlvblZhbHVl
PigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgTGluZWFyR3JhZGllbnRDbGFzczoK
LSAgICAgICAgcmV0dXJuIHRvQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NT
VGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4o
KnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIFJhZGlhbEdyYWRpZW50Q2xhc3M6Ci0g
ICAgICAgIHJldHVybiB0b0NTU1JhZGlhbEdyYWRpZW50VmFsdWUodGhpcyktPmN1c3RvbUNTU1Rl
eHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCp0
aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBDcm9zc2ZhZGVDbGFzczoKLSAgICAgICAg
cmV0dXJuIHRvQ1NTQ3Jvc3NmYWRlVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4
dCgpOwogICAgIGNhc2UgSW1hZ2VDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTSW1hZ2VWYWx1
ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1h
Z2VWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIEluaGVyaXRlZENsYXNz
OgotICAgICAgICByZXR1cm4gdG9DU1NJbmhlcml0ZWRWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4
dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW5oZXJpdGVkVmFsdWU+KCp0aGlzKS5j
dXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBJbml0aWFsQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0
b0NTU0luaXRpYWxWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8Q1NTSW5pdGlhbFZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogI2lmIEVO
QUJMRShDU1NfR1JJRF9MQVlPVVQpCiAgICAgY2FzZSBHcmlkTGluZU5hbWVzQ2xhc3M6Ci0gICAg
ICAgIHJldHVybiB0b0NTU0dyaWRMaW5lTmFtZXNWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgp
OworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTR3JpZExpbmVOYW1lc1ZhbHVlPigqdGhpcyku
Y3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgR3JpZFRlbXBsYXRlQXJlYXNDbGFzczoKLSAgICAg
ICAgcmV0dXJuIHRvQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4
dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZT4o
KnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICNlbmRpZgogICAgIGNhc2UgUHJpbWl0aXZlQ2xhc3M6
Ci0gICAgICAgIHJldHVybiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0
KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRoaXMpLmN1
c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIFJlZmxlY3RDbGFzczoKLSAgICAgICAgcmV0dXJuIHRv
Q1NTUmVmbGVjdFZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBk
b3duY2FzdDxDU1NSZWZsZWN0VmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2Fz
ZSBTaGFkb3dDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTU2hhZG93VmFsdWUodGhpcyktPmN1
c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1NoYWRvd1ZhbHVlPigq
dGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
bkNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFs
dWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0N1
YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAg
ICBjYXNlIFN0ZXBzVGltaW5nRnVuY3Rpb25DbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTU3Rl
cHNUaW1pbmdGdW5jdGlvblZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWU+KCp0aGlzKS5jdXN0b21D
U1NUZXh0KCk7CiAgICAgY2FzZSBVbmljb2RlUmFuZ2VDbGFzczoKLSAgICAgICAgcmV0dXJuIHRv
Q1NTVW5pY29kZVJhbmdlVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PENTU1VuaWNvZGVSYW5nZVZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgp
OwogICAgIGNhc2UgVmFsdWVMaXN0Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU1ZhbHVlTGlz
dCh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTVmFs
dWVMaXN0PigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNm
b3JtQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKHRoaXMp
LT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIExpbmVCb3hDb250
YWluQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0xpbmVCb3hDb250YWluVmFsdWUodGhpcykt
PmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0xpbmVCb3hDb250
YWluVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBDYWxjdWxhdGlvbkNs
YXNzOgotICAgICAgICByZXR1cm4gdG9DU1NDYWxjVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQo
KTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0NhbGNWYWx1ZT4oKnRoaXMpLmN1c3RvbUNT
U1RleHQoKTsKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKICAgICBjYXNlIEltYWdlU2V0Q2xh
c3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0ltYWdlU2V0VmFsdWUodGhpcyktPmN1c3RvbUNTU1Rl
eHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ltYWdlU2V0VmFsdWU+KCp0aGlzKS5j
dXN0b21DU1NUZXh0KCk7CiAjZW5kaWYKICAgICBjYXNlIFdlYktpdENTU0ZpbHRlckNsYXNzOgot
ICAgICAgICByZXR1cm4gdG9XZWJLaXRDU1NGaWx0ZXJWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4
dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+KCp0aGlz
KS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBTVkdDb2xvckNsYXNzOgotICAgICAgICByZXR1
cm4gdG9TVkdDb2xvcih0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93
bmNhc3Q8U1ZHQ29sb3I+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBTVkdQYWlu
dENsYXNzOgotICAgICAgICByZXR1cm4gdG9TVkdQYWludCh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgp
OworICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHUGFpbnQ+KCp0aGlzKS5jdXN0b21DU1NUZXh0
KCk7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBTdHJpbmco
KTsKQEAgLTMyNywxMDEgKzMyNywxMDEgQEAgdm9pZCBDU1NWYWx1ZTo6ZGVzdHJveSgpCiAKICAg
ICBzd2l0Y2ggKGNsYXNzVHlwZSgpKSB7CiAgICAgY2FzZSBBc3BlY3RSYXRpb0NsYXNzOgotICAg
ICAgICBkZWxldGUgdG9DU1NBc3BlY3RSYXRpb1ZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUg
ZG93bmNhc3Q8Q1NTQXNwZWN0UmF0aW9WYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIEJvcmRlckltYWdlU2xpY2VDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTQm9yZGVy
SW1hZ2VTbGljZVZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTQm9yZGVy
SW1hZ2VTbGljZVZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ2FudmFz
Q2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0NhbnZhc1ZhbHVlKHRoaXMpOworICAgICAgICBk
ZWxldGUgZG93bmNhc3Q8Q1NTQ2FudmFzVmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBDdXJzb3JJbWFnZUNsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NDdXJzb3JJbWFn
ZVZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1
ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEZvbnRDbGFzczoKLSAgICAgICAg
ZGVsZXRlIHRvQ1NTRm9udFZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NT
Rm9udFZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgRm9udEZhY2VTcmND
bGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTRm9udEZhY2VTcmNWYWx1ZSh0aGlzKTsKKyAgICAg
ICAgZGVsZXRlIGRvd25jYXN0PENTU0ZvbnRGYWNlU3JjVmFsdWU+KHRoaXMpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBGb250RmVhdHVyZUNsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NG
b250RmVhdHVyZVZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTRm9udEZl
YXR1cmVWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEZ1bmN0aW9uQ2xh
c3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0Z1bmN0aW9uVmFsdWUodGhpcyk7CisgICAgICAgIGRl
bGV0ZSBkb3duY2FzdDxDU1NGdW5jdGlvblZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIGNhc2UgTGluZWFyR3JhZGllbnRDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTTGluZWFy
R3JhZGllbnRWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENTU0xpbmVhckdy
YWRpZW50VmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBSYWRpYWxHcmFk
aWVudENsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NSYWRpYWxHcmFkaWVudFZhbHVlKHRoaXMp
OworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4odGhpcyk7
CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENyb3NzZmFkZUNsYXNzOgotICAgICAgICBkZWxl
dGUgdG9DU1NDcm9zc2ZhZGVWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENT
U0Nyb3NzZmFkZVZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSW1hZ2VD
bGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTSW1hZ2VWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVs
ZXRlIGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBJbmhlcml0ZWRDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTSW5oZXJpdGVkVmFsdWUo
dGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NJbmhlcml0ZWRWYWx1ZT4odGhpcyk7
CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEluaXRpYWxDbGFzczoKLSAgICAgICAgZGVsZXRl
IHRvQ1NTSW5pdGlhbFZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTSW5p
dGlhbFZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogI2lmIEVOQUJMRShDU1NfR1JJRF9M
QVlPVVQpCiAgICAgY2FzZSBHcmlkTGluZU5hbWVzQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NT
U0dyaWRMaW5lTmFtZXNWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENTU0dy
aWRMaW5lTmFtZXNWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEdyaWRU
ZW1wbGF0ZUFyZWFzQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0dyaWRUZW1wbGF0ZUFyZWFz
VmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NHcmlkVGVtcGxhdGVBcmVh
c1ZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgY2FzZSBQcmltaXRp
dmVDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTUHJpbWl0aXZlVmFsdWUodGhpcyk7CisgICAg
ICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIFJlZmxlY3RDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTUmVmbGVj
dFZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTUmVmbGVjdFZhbHVlPih0
aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2hhZG93Q2xhc3M6Ci0gICAgICAgIGRl
bGV0ZSB0b0NTU1NoYWRvd1ZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NT
U2hhZG93VmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDdWJpY0Jlemll
clRpbWluZ0Z1bmN0aW9uQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0N1YmljQmV6aWVyVGlt
aW5nRnVuY3Rpb25WYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENTU0N1Ymlj
QmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBj
YXNlIFN0ZXBzVGltaW5nRnVuY3Rpb25DbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTU3RlcHNU
aW1pbmdGdW5jdGlvblZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTU3Rl
cHNUaW1pbmdGdW5jdGlvblZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
VW5pY29kZVJhbmdlQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU1VuaWNvZGVSYW5nZVZhbHVl
KHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTVW5pY29kZVJhbmdlVmFsdWU+KHRo
aXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBWYWx1ZUxpc3RDbGFzczoKLSAgICAgICAg
ZGVsZXRlIHRvQ1NTVmFsdWVMaXN0KHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NT
VmFsdWVMaXN0Pih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgV2ViS2l0Q1NTVHJh
bnNmb3JtQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKHRo
aXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU+KHRo
aXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBMaW5lQm94Q29udGFpbkNsYXNzOgotICAg
ICAgICBkZWxldGUgdG9DU1NMaW5lQm94Q29udGFpblZhbHVlKHRoaXMpOworICAgICAgICBkZWxl
dGUgZG93bmNhc3Q8Q1NTTGluZUJveENvbnRhaW5WYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIENhbGN1bGF0aW9uQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0NhbGNW
YWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENTU0NhbGNWYWx1ZT4odGhpcyk7
CiAgICAgICAgIHJldHVybjsKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKICAgICBjYXNlIElt
YWdlU2V0Q2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0ltYWdlU2V0VmFsdWUodGhpcyk7Cisg
ICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NJbWFnZVNldFZhbHVlPih0aGlzKTsKICAgICAgICAg
cmV0dXJuOwogI2VuZGlmCiAgICAgY2FzZSBGaWx0ZXJJbWFnZUNsYXNzOgotICAgICAgICBkZWxl
dGUgdG9DU1NGaWx0ZXJJbWFnZVZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8
Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFdl
YktpdENTU0ZpbHRlckNsYXNzOgotICAgICAgICBkZWxldGUgdG9XZWJLaXRDU1NGaWx0ZXJWYWx1
ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PFdlYktpdENTU0ZpbHRlclZhbHVlPih0
aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU1ZHQ29sb3JDbGFzczoKLSAgICAgICAg
ZGVsZXRlIHRvU1ZHQ29sb3IodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxTVkdDb2xv
cj4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNWR1BhaW50Q2xhc3M6Ci0gICAg
ICAgIGRlbGV0ZSB0b1NWR1BhaW50KHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8U1ZH
UGFpbnQ+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtNDMxLDI0ICs0MzEsMjQgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTVmFs
dWU6OmNsb25lRm9yQ1NTT00oKSBjb25zdAogewogICAgIHN3aXRjaCAoY2xhc3NUeXBlKCkpIHsK
ICAgICBjYXNlIFByaW1pdGl2ZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NQcmltaXRpdmVW
YWx1ZSh0aGlzKS0+Y2xvbmVGb3JDU1NPTSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KCp0aGlzKS5jbG9uZUZvckNTU09NKCk7CiAgICAgY2FzZSBWYWx1ZUxp
c3RDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTVmFsdWVMaXN0KHRoaXMpLT5jbG9uZUZvckNT
U09NKCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp0aGlzKS5jbG9u
ZUZvckNTU09NKCk7CiAgICAgY2FzZSBJbWFnZUNsYXNzOgogICAgIGNhc2UgQ3Vyc29ySW1hZ2VD
bGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTSW1hZ2VWYWx1ZSh0aGlzKS0+Y2xvbmVGb3JDU1NP
TSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oKnRoaXMpLmNsb25l
Rm9yQ1NTT00oKTsKICAgICBjYXNlIFdlYktpdENTU0ZpbHRlckNsYXNzOgotICAgICAgICByZXR1
cm4gdG9XZWJLaXRDU1NGaWx0ZXJWYWx1ZSh0aGlzKS0+Y2xvbmVGb3JDU1NPTSgpOworICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+KCp0aGlzKS5jbG9uZUZvckNT
U09NKCk7CiAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1DbGFzczoKLSAgICAgICAgcmV0dXJu
IHRvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUodGhpcyktPmNsb25lRm9yQ1NTT00oKTsKKyAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PFdlYktpdENTU1RyYW5zZm9ybVZhbHVlPigqdGhpcykuY2xvbmVG
b3JDU1NPTSgpOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQogICAgIGNhc2UgSW1hZ2VTZXRD
bGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTSW1hZ2VTZXRWYWx1ZSh0aGlzKS0+Y2xvbmVGb3JD
U1NPTSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4oKnRoaXMp
LmNsb25lRm9yQ1NTT00oKTsKICNlbmRpZgogICAgIGNhc2UgU1ZHQ29sb3JDbGFzczoKLSAgICAg
ICAgcmV0dXJuIHRvU1ZHQ29sb3IodGhpcyktPmNsb25lRm9yQ1NTT00oKTsKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PFNWR0NvbG9yPigqdGhpcykuY2xvbmVGb3JDU1NPTSgpOwogICAgIGNhc2Ug
U1ZHUGFpbnRDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvU1ZHUGFpbnQodGhpcyktPmNsb25lRm9y
Q1NTT00oKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFNWR1BhaW50PigqdGhpcykuY2xvbmVG
b3JDU1NPTSgpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVCghaXNTdWJ0eXBlRXhwb3Nl
ZFRvQ1NTT00oKSk7CiAgICAgICAgIHJldHVybiBUZXh0Q2xvbmVDU1NWYWx1ZTo6Y3JlYXRlKGNs
YXNzVHlwZSgpLCBjc3NUZXh0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuaAppbmRleCA4MDQxM2Y4ODIw
YTdmNzZkMmJjNGVlMjNiMjhhMWNjMjQ0NGZjMzcxLi4wZTgxNmMyMmQzYmEyY2JhYjVmMDRiN2Fl
Mjg2ZTBlM2Y5ZDViYmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuaApAQCAtMjYsNiArMjYsNyBAQAog
I2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yNDksOSArMjUwLDExIEBAIGlubGluZSBib29sIGNv
bXBhcmVDU1NWYWx1ZShjb25zdCBSZWY8Q1NTVmFsdWVUeXBlPiYgZmlyc3QsIGNvbnN0IFJlZjxD
U1NWYWx1ZVR5CiAgICAgcmV0dXJuIGZpcnN0LmdldCgpLmVxdWFscyhzZWNvbmQuZ2V0KCkpOwog
fQogCi0jZGVmaW5lIENTU19WQUxVRV9UWVBFX0NBU1RTKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGlj
YXRlKSBcCi0gICAgVFlQRV9DQVNUU19CQVNFKFRvVmFsdWVUeXBlTmFtZSwgQ1NTVmFsdWUsIHZh
bHVlLCB2YWx1ZS0+cHJlZGljYXRlLCB2YWx1ZS5wcmVkaWNhdGUpCi0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAorI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShUb1Zh
bHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihX
ZWJDb3JlOjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3Qg
V2ViQ29yZTo6Q1NTVmFsdWUmIHZhbHVlKSB7IHJldHVybiB2YWx1ZS5wcmVkaWNhdGU7IH0gXAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCiAjZW5kaWYgLy8gQ1NTVmFsdWVfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1ZhbHVlTGlzdC5oCmluZGV4IDAxMjc5MjRiZTRmMWRiZWQ3MjFjZTg2MGFhMjI2
ZjQ2ZWRlYzFkZmMuLmE5Y2VhMjk0MTc3NmI3YjI5ZTBmMWIyMjBkM2EwMzVlNjBmOGY0ZmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKQEAgLTgxLDggKzgxLDYgQEAgcHJpdmF0ZToKICAg
ICBWZWN0b3I8UmVmPENTU1ZhbHVlPiwgND4gbV92YWx1ZXM7CiB9OwogCi1DU1NfVkFMVUVfVFlQ
RV9DQVNUUyhDU1NWYWx1ZUxpc3QsIGlzVmFsdWVMaXN0KCkpCi0KIGlubGluZSB2b2lkIENTU1Zh
bHVlTGlzdDo6YXBwZW5kKFBhc3NSZWY8Q1NTVmFsdWU+IHZhbHVlKQogewogICAgIG1fdmFsdWVz
LmFwcGVuZChXVEY6Om1vdmUodmFsdWUpKTsKQEAgLTk3LDcgKzk1LDEwIEBAIGlubGluZSB2b2lk
IENTU1ZhbHVlTGlzdDo6cHJlcGVuZChQYXNzUmVmPENTU1ZhbHVlPiB2YWx1ZSkKIC8vIFBsZWFz
ZSB0YWtlIGNhcmUgbm90IHRvIHBhc3MgdGhlc2UgYXJvdW5kIGFzIHRoZXkgZG8gaG9sZCBvbnRv
IGEgcmF3IHBvaW50ZXIuCiBjbGFzcyBDU1NWYWx1ZUxpc3RJbnNwZWN0b3IgewogcHVibGljOgot
ICAgIENTU1ZhbHVlTGlzdEluc3BlY3RvcihDU1NWYWx1ZSogdmFsdWUpIDogbV9saXN0KCh2YWx1
ZSAmJiB2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgPyB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSkgOiAwKSB7
IH0KKyAgICBDU1NWYWx1ZUxpc3RJbnNwZWN0b3IoQ1NTVmFsdWUqIHZhbHVlKQorICAgICAgICA6
IG1fbGlzdChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSA/IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4o
dmFsdWUpIDogbnVsbHB0cikKKyAgICB7IH0KKwogICAgIENTU1ZhbHVlKiBpdGVtKHNpemVfdCBp
bmRleCkgY29uc3QgeyBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IGxl
bmd0aCgpKTsgcmV0dXJuIG1fbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpbmRleCk7IH0K
ICAgICBDU1NWYWx1ZSogZmlyc3QoKSBjb25zdCB7IHJldHVybiBpdGVtKDApOyB9CiAgICAgQ1NT
VmFsdWUqIHNlY29uZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZW0oMSk7IH0KQEAgLTEyMyw0ICsxMjQs
NiBAQCBwcml2YXRlOgogfTsKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTVmFsdWVMaXN0LCBpc1ZhbHVlTGlzdCgpKQorCiAjZW5k
aWYgLy8gQ1NTVmFsdWVMaXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXBy
ZWNhdGVkU3R5bGVCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5
bGVCdWlsZGVyLmNwcAppbmRleCBiMmZmN2IxYWZlNjhiNjczMTBhYzMwNTMxZGVkZDZlODkxMTNj
YmU2Li41MTg1ZTAwYmQ2NmUwMjA5YWI3NmQxMWU0YThlNjc5ZjNlN2ZiZWEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiQ1NTQXNwZWN0UmF0aW9WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0NhbGN1
bGF0aW9uVmFsdWUuaCIKICNpbmNsdWRlICJDU1NDdXJzb3JJbWFnZVZhbHVlLmgiCisjaW5jbHVk
ZSAiQ1NTSW1hZ2VTZXRWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAj
aW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgogI2luY2x1ZGUgIkNTU1RvU3R5
bGVNYXAuaCIKQEAgLTE0OSw4ICsxNTAsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0
VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBTZXR0ZXJUeXBlIHZhbHVlKSB7IChzdHlsZS0+KnNl
dHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAg
ICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgKnRvQ1NTUHJpbWl0aXZlVmFsdWUo
dmFsdWUpKTsKKyAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQorICAg
ICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVy
IGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTE2NSwxNCArMTY2LDE0IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIE51bWJlclR5cGUgdmFs
dWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQogICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldFZhbHVlSUQoKSA9PSBpZE1hcHNUb01pbnVzT25lKQorICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
KnZhbHVlKTsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBpZE1h
cHNUb01pbnVzT25lKQogICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgLTEpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWU8TnVtYmVyVHlwZT4oQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlPE51bWJlclR5cGU+KENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRs
ZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtMjEzLDE2ICsyMTQsMTYgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IGF1dG9JZGVudGl0eSkKKyAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1
ZUlEKCkgPT0gYXV0b0lkZW50aXR5KQogICAgICAgICAgICAgc2V0QXV0byhzdHlsZVJlc29sdmVy
LT5zdHlsZSgpKTsKICAgICAgICAgZWxzZSBpZiAodmFsdWVUeXBlID09IE51bWJlcikKLSAgICAg
ICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksICpwcmltaXRpdmVWYWx1ZSk7
CisgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVW
YWx1ZSk7CiAgICAgICAgIGVsc2UgaWYgKHZhbHVlVHlwZSA9PSBDb21wdXRlTGVuZ3RoKQotICAg
ICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUt
PmNvbXB1dGVMZW5ndGg8VD4oc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCkpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCksIHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8VD4oc3R5bGVSZXNvbHZlci0+c3RhdGUo
KS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJv
cGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFw
cGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQpAQCAt
MjUyLDE5ICsyNTMsMTkgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAg
ICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQ
cmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRp
dmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogCi0gICAgICAg
IGlmIChSZWN0KiByZWN0ID0gcHJpbWl0aXZlVmFsdWUtPmdldFJlY3RWYWx1ZSgpKSB7CisgICAg
ICAgIGlmIChSZWN0KiByZWN0ID0gcHJpbWl0aXZlVmFsdWUuZ2V0UmVjdFZhbHVlKCkpIHsKICAg
ICAgICAgICAgIExlbmd0aCB0b3AgPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVj
dC0+dG9wKCkpOwogICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0ID0gY29udmVydFRvTGVuZ3RoKHN0
eWxlUmVzb2x2ZXIsIHJlY3QtPnJpZ2h0KCkpOwogICAgICAgICAgICAgTGVuZ3RoIGJvdHRvbSA9
IGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0LT5ib3R0b20oKSk7CiAgICAgICAg
ICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0LT5s
ZWZ0KCkpOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q2xpcCh0b3As
IHJpZ2h0LCBib3R0b20sIGxlZnQpOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUo
KS0+c2V0SGFzQ2xpcCh0cnVlKTsKLSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykgeworICAgICAgICB9IGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pIHsKICAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldENsaXAoTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgo
KSwgTGVuZ3RoKCkpOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SGFz
Q2xpcChmYWxzZSk7CiAgICAgICAgIH0KQEAgLTI5OCwxNyArMjk5LDE3IEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAg
ICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1
ZSk7Ci0gICAgICAgIGlmIChpbmhlcml0Q29sb3JGcm9tUGFyZW50ICYmIHByaW1pdGl2ZVZhbHVl
LT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCisgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpOworICAgICAgICBpZiAoaW5oZXJpdENvbG9yRnJvbVBhcmVudCAmJiBwcmltaXRpdmVW
YWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpCiAgICAgICAgICAgICBh
cHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvUmVndWxh
clN0eWxlKCkpCi0gICAgICAgICAgICAgICAgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPipzZXR0
ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZlci0+Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0
aXZlVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNl
dHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZSgmcHJp
bWl0aXZlVmFsdWUpKTsKICAgICAgICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5hcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpCi0gICAgICAgICAgICAgICAgKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPip2aXNpdGVkTGlua1NldHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5jb2xv
ckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1ZSwgLyogZm9yVmlzaXRlZExpbmsgKi8g
dHJ1ZSkpOworICAgICAgICAgICAgICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qdmlzaXRl
ZExpbmtTZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZlci0+Y29sb3JGcm9tUHJpbWl0aXZlVmFs
dWUoJnByaW1pdGl2ZVZhbHVlLCAvKiBmb3JWaXNpdGVkTGluayAqLyB0cnVlKSk7CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTM1OSw0NiArMzYwLDQ2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIExlbmd0aCB2YWx1ZSkgeyAoc3R5bGUtPipz
ZXR0ZXJGdW5jdGlvbikoV1RGOjptb3ZlKHZhbHVlKSk7IH0KICAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICAgICAgaWYgKG5vbmVFbmFibGVkICYm
IHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKSB7CisgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPigqdmFsdWUpOworICAgICAgICBpZiAobm9uZUVuYWJsZWQgJiYgcHJpbWl0aXZlVmFs
dWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkgewogICAgICAgICAgICAgaWYgKG5vbmVV
bmRlZmluZWQpCiAgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgTGVuZ3RoKFVuZGVmaW5lZCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aCgpKTsKICAgICAgICAgfQog
ICAgICAgICBpZiAobGVnYWN5SW50cmluc2ljRW5hYmxlZCkgewotICAgICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVJbnRyaW5zaWMpCisgICAgICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlSW50cmluc2lj
KQogICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0
aChJbnRyaW5zaWMpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRW
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVNaW5JbnRyaW5zaWMpCisgICAgICAgICAgICBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVNaW5JbnRyaW5zaWMpCiAgICAg
ICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKE1pbklu
dHJpbnNpYykpOwogICAgICAgICB9CiAgICAgICAgIGlmIChpbnRyaW5zaWNFbmFibGVkKSB7Ci0g
ICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdl
YmtpdE1pbkNvbnRlbnQpCisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJ
RCgpID09IENTU1ZhbHVlV2Via2l0TWluQ29udGVudCkKICAgICAgICAgICAgICAgICBzZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoTWluQ29udGVudCkpOwotICAgICAgICAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdlYmtp
dE1heENvbnRlbnQpCisgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1
ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRNYXhDb250ZW50KQogICAgICAgICAgICAgICAgIHNldFZh
bHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChNYXhDb250ZW50KSk7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Vi
a2l0RmlsbEF2YWlsYWJsZSkKKyAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmdl
dFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdlYmtpdEZpbGxBdmFpbGFibGUpCiAgICAgICAgICAgICAg
ICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKEZpbGxBdmFpbGFibGUp
KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVXZWJraXRGaXRDb250ZW50KQorICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZl
VmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Via2l0Rml0Q29udGVudCkKICAgICAgICAg
ICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoRml0Q29udGVu
dCkpOwogICAgICAgICB9CiAKICAgICAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjb252
ZXJzaW9uRGF0YSA9IHN0eWxlUmVzb2x2ZXItPnVzZVNWR1pvb21SdWxlc0Zvckxlbmd0aCgpID8K
ICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpCiAgICAgICAgICAgICA6IHN0eWxlUmVz
b2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOwotICAgICAgICBpZiAo
YXV0b0VuYWJsZWQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1
dG8pCisgICAgICAgIGlmIChhdXRvRW5hYmxlZCAmJiBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlE
KCkgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgTGVuZ3RoKCkpOwotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNM
ZW5ndGgoKSkgewotICAgICAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5j
b21wdXRlTGVuZ3RoPExlbmd0aD4oY29udmVyc2lvbkRhdGEpOwotICAgICAgICAgICAgbGVuZ3Ro
LnNldEhhc1F1aXJrKHByaW1pdGl2ZVZhbHVlLT5pc1F1aXJrVmFsdWUoKSk7CisgICAgICAgIGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIExlbmd0aCBs
ZW5ndGggPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY29udmVyc2lvbkRh
dGEpOworICAgICAgICAgICAgbGVuZ3RoLnNldEhhc1F1aXJrKHByaW1pdGl2ZVZhbHVlLmlzUXVp
cmtWYWx1ZSgpKTsKICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCks
IGxlbmd0aCk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFn
ZSgpKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3Ro
KHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KSk7Ci0gICAgICAgIGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgp
KQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKHBy
aW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+Y3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShjb252
ZXJzaW9uRGF0YSkpKTsKKyAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc1BlcmNl
bnRhZ2UoKSkKKyAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExl
bmd0aChwcmltaXRpdmVWYWx1ZS5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KSk7CisgICAgICAg
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3Ro
KCkpCisgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgo
cHJpbWl0aXZlVmFsdWUuY3NzQ2FsY1ZhbHVlKCktPmNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUoY29u
dmVyc2lvbkRhdGEpKSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVh
dGVIYW5kbGVyKCkKQEAgLTQxNSwxNCArNDE2LDE0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUp
IHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQogICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICAgICAgaWYgKChpZGVudEJlaGF2aW9y
ID09IE1hcE5vbmVUb051bGwgJiYgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NW
YWx1ZU5vbmUpCi0gICAgICAgICAgICB8fCAoaWRlbnRCZWhhdmlvciA9PSBNYXBBdXRvVG9OdWxs
ICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKSkKKyAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgICAgIGlmICgoaWRlbnRCZWhhdmlvciA9PSBNYXBOb25l
VG9OdWxsICYmIHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCisg
ICAgICAgICAgICB8fCAoaWRlbnRCZWhhdmlvciA9PSBNYXBBdXRvVG9OdWxsICYmIHByaW1pdGl2
ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pKQogICAgICAgICAgICAgc2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgbnVsbEF0b20pOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+
Z2V0U3RyaW5nVmFsdWUoKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLCBwcmltaXRpdmVWYWx1ZS5nZXRTdHJpbmdWYWx1ZSgpKTsKICAgICB9CiAgICAgc3Rh
dGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC00MzcsMTEgKzQz
OCwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0
eWxlLCBMZW5ndGhTaXplIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKShXVEY6Om1v
dmUodmFsdWUpKTsgfQogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUo
dmFsdWUpOwotICAgICAgICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1
ZSgpOworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgUGFpciogcGFpciA9IHByaW1p
dGl2ZVZhbHVlLmdldFBhaXJWYWx1ZSgpOwogICAgICAgICBpZiAoIXBhaXIgfHwgIXBhaXItPmZp
cnN0KCkgfHwgIXBhaXItPnNlY29uZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC01NTIs
MTMgKzU1MywxMyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBGaWxsTGF5ZXIqIGNoaWxkID0g
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5jdGlvbikoKTsKICAgICAg
ICAgRmlsbExheWVyKiBwcmV2aW91c0NoaWxkID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKHZhbHVl
LT5pc1ZhbHVlTGlzdCgpCisgICAgICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkKICNp
ZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKLSAgICAgICAgJiYgIXZhbHVlLT5pc0ltYWdlU2V0VmFs
dWUoKQorICAgICAgICAmJiAhaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4oKnZhbHVlKQogI2VuZGlmCiAg
ICAgICAgICkgewogICAgICAgICAgICAgLy8gV2FsayBlYWNoIHZhbHVlIGFuZCBwdXQgaXQgaW50
byBhIGxheWVyLCBjcmVhdGluZyBuZXcgbGF5ZXJzIGFzIG5lZWRlZC4KLSAgICAgICAgICAgIENT
U1ZhbHVlTGlzdCYgdmFsdWVMaXN0ID0gdG9DU1NWYWx1ZUxpc3QoKnZhbHVlKTsKKyAgICAgICAg
ICAgIENTU1ZhbHVlTGlzdCYgdmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFs
dWUpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlTGlzdC5sZW5n
dGgoKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZCkgewogICAgICAgICAgICAg
ICAgICAgICBwcmV2aW91c0NoaWxkLT5zZXROZXh0KHN0ZDo6bWFrZV91bmlxdWU8RmlsbExheWVy
PihmaWxsTGF5ZXJUeXBlKSk7CkBAIC01OTUsMTIgKzU5NiwxMiBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICAvLyBub3RlOiBDU1NQcm9w
ZXJ0eUxldHRlci9Xb3JkU3BhY2luZyByaWdodCBub3cgc2V0cyB0byB6ZXJvIGlmIGl0J3Mgbm90
IGEgcHJpbWl0aXZlIHZhbHVlIGZvciBzb21lIHJlYXNvbi4uLgotICAgICAgICBpZiAoIXZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPigqdmFsdWUpOwogCi0gICAgICAgIENTU1ZhbHVlSUQgaWRlbnQgPSBwcmltaXRpdmVW
YWx1ZS0+Z2V0VmFsdWVJRCgpOworICAgICAgICBDU1NWYWx1ZUlEIGlkZW50ID0gcHJpbWl0aXZl
VmFsdWUuZ2V0VmFsdWVJRCgpOwogICAgICAgICBUIGxlbmd0aDsKICAgICAgICAgaWYgKG5vcm1h
bEVuYWJsZWQgJiYgaWRlbnQgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKICAgICAgICAgICAgIGxlbmd0
aCA9IDA7CkBAIC02MTUsOSArNjE2LDkgQEAgcHVibGljOgogCiAgICAgICAgICAgICAvLyBBbnkg
b3JpZ2luYWwgcmVzdWx0IHRoYXQgd2FzID49IDEgc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvIGZh
bGwgYmVsb3cgMS4KICAgICAgICAgICAgIC8vIFRoaXMga2VlcHMgYm9yZGVyIGxpbmVzIGZyb20g
dmFuaXNoaW5nLgotICAgICAgICAgICAgbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVM
ZW5ndGg8VD4oY29udmVyc2lvbkRhdGEpOworICAgICAgICAgICAgbGVuZ3RoID0gcHJpbWl0aXZl
VmFsdWUuY29tcHV0ZUxlbmd0aDxUPihjb252ZXJzaW9uRGF0YSk7CiAgICAgICAgICAgICBpZiAo
Y29udmVyc2lvbkRhdGEuem9vbSgpIDwgMS4wZiAmJiBsZW5ndGggPCAxLjApIHsKLSAgICAgICAg
ICAgICAgICBUIG9yaWdpbmFsTGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8
VD4oY29udmVyc2lvbkRhdGEuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpOworICAgICAgICAg
ICAgICAgIFQgb3JpZ2luYWxMZW5ndGggPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPFQ+
KGNvbnZlcnNpb25EYXRhLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpKTsKICAgICAgICAgICAg
ICAgICBpZiAob3JpZ2luYWxMZW5ndGggPj0gMS4wKQogICAgICAgICAgICAgICAgICAgICBsZW5n
dGggPSAxLjA7CiAgICAgICAgICAgICB9CkBAIC02NTQsMTEgKzY1NSwxMSBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPigqdmFsdWUpOwogICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
ID0gc3R5bGVSZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIChmb250RGVzY3Jp
cHRpb24uKnNldHRlckZ1bmN0aW9uKSgqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAoZm9udERl
c2NyaXB0aW9uLipzZXR0ZXJGdW5jdGlvbikocHJpbWl0aXZlVmFsdWUpOwogICAgICAgICBzdHls
ZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAK
QEAgLTY5NywxMCArNjk4LDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAg
ICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgYXV0byYgdmFsdWVMaXN0ID0gdG9DU1NWYWx1ZUxpc3QoKnZhbHVlKTsKKyAgICAg
ICAgYXV0byYgdmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpOwogCiAg
ICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgLy8gQmVmb3JlIG1hcHBpbmcgaW4g
YSBuZXcgZm9udC1mYW1pbHkgcHJvcGVydHksIHdlIHNob3VsZCByZXNldCB0aGUgZ2VuZXJpYyBm
YW1pbHkuCkBAIC03MTIsMTQgKzcxMywxNCBAQCBwdWJsaWM6CiAKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHZhbHVlTGlzdC5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgICAgICBD
U1NWYWx1ZSogaXRlbSA9IHZhbHVlTGlzdC5pdGVtKGkpOwotICAgICAgICAgICAgaWYgKCFpdGVt
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZh
bHVlPigqaXRlbSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogY29udGVudFZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZShpdGVtKTsK
KyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBjb250ZW50VmFsdWUgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pOwogICAgICAgICAgICAgQXRvbWljU3RyaW5nIGZhY2U7
Ci0gICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLT5pc1N0cmluZygpKQotICAgICAgICAgICAg
ICAgIGZhY2UgPSBjb250ZW50VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7CisgICAgICAgICAgICBp
ZiAoY29udGVudFZhbHVlLmlzU3RyaW5nKCkpCisgICAgICAgICAgICAgICAgZmFjZSA9IGNvbnRl
bnRWYWx1ZS5nZXRTdHJpbmdWYWx1ZSgpOwogICAgICAgICAgICAgZWxzZSBpZiAoU2V0dGluZ3Mq
IHNldHRpbmdzID0gc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKS5zZXR0aW5ncygpKSB7Ci0gICAg
ICAgICAgICAgICAgc3dpdGNoIChjb250ZW50VmFsdWUtPmdldFZhbHVlSUQoKSkgeworICAgICAg
ICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVlLmdldFZhbHVlSUQoKSkgewogICAgICAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRCb2R5OgogICAgICAgICAgICAgICAgICAgICBmYWNl
ID0gc2V0dGluZ3MtPnN0YW5kYXJkRm9udEZhbWlseSgpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTg0MCwxMCArODQxLDEwIEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSk7CiAKICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0S2V5d29yZFNpemUoMCk7CkBAIC04NTYsNyArODU3LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgcGFyZW50SXNBYnNvbHV0ZVNpemUgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgp
LT5mb250RGVzY3JpcHRpb24oKS5pc0Fic29sdXRlU2l6ZSgpOwogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKENTU1ZhbHVlSUQgaWRlbnQgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpKSB7
CisgICAgICAgIGlmIChDU1NWYWx1ZUlEIGlkZW50ID0gcHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJ
RCgpKSB7CiAgICAgICAgICAgICAvLyBLZXl3b3JkcyBhcmUgYmVpbmcgdXNlZC4KICAgICAgICAg
ICAgIHN3aXRjaCAoaWRlbnQpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVYeFNtYWxsOgpA
QCAtODg2LDE1ICs4ODcsMTQgQEAgcHVibGljOgogCiAgICAgICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0SXNBYnNvbHV0ZVNpemUocGFyZW50SXNBYnNvbHV0ZVNpemUgJiYgKGlkZW50ID09IENT
U1ZhbHVlTGFyZ2VyIHx8IGlkZW50ID09IENTU1ZhbHVlU21hbGxlciB8fCBpZGVudCA9PSBDU1NW
YWx1ZVdlYmtpdFJ1YnlUZXh0KSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUocGFyZW50SXNBYnNvbHV0ZVNpemUKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhKHByaW1pdGl2ZVZh
bHVlLT5pc1BlcmNlbnRhZ2UoKSB8fCBwcmltaXRpdmVWYWx1ZS0+aXNGb250UmVsYXRpdmVMZW5n
dGgoKSkpOwotICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7Ci0g
ICAgICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0
PihDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCks
IHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+ZG9jdW1l
bnQoKS5yZW5kZXJWaWV3KCksIDEuMGYsIHRydWUpKTsKLSAgICAgICAgICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdGF0ZSgpLnNldEZvbnRTaXplSGFzVmlld3BvcnRVbml0cyhwcmltaXRpdmVWYWx1
ZS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgICAgICAgICBzaXplID0g
KHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkgKiBwYXJlbnRTaXplKSAvIDEwMC4wZjsK
LSAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50
YWdlV2l0aExlbmd0aCgpKSB7Ci0gICAgICAgICAgICAgICAgUmVmPENhbGN1bGF0aW9uVmFsdWU+
IGNhbGN1bGF0aW9uVmFsdWUgeyBwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPmNyZWF0
ZUNhbGN1bGF0aW9uVmFsdWUoc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpIH07CisgICAgICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUocGFyZW50SXNBYnNvbHV0ZVNpemUgfHwg
IShwcmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSB8fCBwcmltaXRpdmVWYWx1ZS5pc0ZvbnRS
ZWxhdGl2ZUxlbmd0aCgpKSk7CisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNMZW5n
dGgoKSkgeworICAgICAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVu
Z3RoPGZsb2F0PihDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKHN0eWxlUmVzb2x2ZXItPnBhcmVu
dFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZl
ci0+ZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCksIDEuMGYsIHRydWUpKTsKKyAgICAgICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLnNldEZvbnRTaXplSGFzVmlld3BvcnRVbml0cyhwcmlt
aXRpdmVWYWx1ZS5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkpCisgICAgICAgICAgICAgICAg
c2l6ZSA9IChwcmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKCkgKiBwYXJlbnRTaXplKSAvIDEw
MC4wZjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzQ2FsY3VsYXRlZFBl
cmNlbnRhZ2VXaXRoTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBSZWY8Q2FsY3VsYXRpb25W
YWx1ZT4gY2FsY3VsYXRpb25WYWx1ZSB7IHByaW1pdGl2ZVZhbHVlLmNzc0NhbGNWYWx1ZSgpLT5j
cmVhdGVDYWxjdWxhdGlvblZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpKSB9OwogICAgICAgICAg
ICAgICAgIHNpemUgPSBjYWxjdWxhdGlvblZhbHVlLT5ldmFsdWF0ZShwYXJlbnRTaXplKTsKICAg
ICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTkxOSwxMSArOTE5
LDExIEBAIGNsYXNzIEFwcGx5UHJvcGVydHlGb250V2VpZ2h0IHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpOwogICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVS
ZXNvbHZlci0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFs
dWUtPmdldFZhbHVlSUQoKSkgeworICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLmdldFZh
bHVlSUQoKSkgewogICAgICAgICBjYXNlIENTU1ZhbHVlSW52YWxpZDoKICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC05MzQsNyArOTM0LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChmb250RGVz
Y3JpcHRpb24ubGlnaHRlcldlaWdodCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodCgqcHJpbWl0aXZl
VmFsdWUpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChwcmltaXRpdmVW
YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0
aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgfQpAQCAtOTc2LDEzICs5NzYsMTMgQEAgcHVibGlj
OgogICAgICAgICBGb250RGVzY3JpcHRpb246OkxpZ2F0dXJlc1N0YXRlIGRpc2NyZXRpb25hcnlM
aWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGU7CiAg
ICAgICAgIEZvbnREZXNjcmlwdGlvbjo6TGlnYXR1cmVzU3RhdGUgaGlzdG9yaWNhbExpZ2F0dXJl
c1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZTsKIAotICAgICAg
ICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlTGlzdCog
dmFsdWVMaXN0ID0gdG9DU1NWYWx1ZUxpc3QodmFsdWUpOwotICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB2YWx1ZUxpc3QtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBDU1NWYWx1ZSogaXRlbSA9IHZhbHVlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAg
ICAgICAgICAgICBpZiAoaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAodG9DU1NQcmltaXRpdmVWYWx1ZShpdGVtKS0+Z2V0VmFsdWVJRCgpKSB7
CisgICAgICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpIHsKKyAgICAgICAgICAgIENT
U1ZhbHVlTGlzdCYgdmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpOwor
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZUxpc3QubGVuZ3RoKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gdmFsdWVMaXN0Lml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soaSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzPENTU1ByaW1pdGl2
ZVZhbHVlPihpdGVtKSk7CisgICAgICAgICAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVl
PigqaXRlbSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKml0ZW0pLmdldFZhbHVlSUQoKSkgewogICAgICAgICAgICAgICAgICAgICBj
YXNlIENTU1ZhbHVlTm9Db21tb25MaWdhdHVyZXM6CiAgICAgICAgICAgICAgICAgICAgICAgICBj
b21tb25MaWdhdHVyZXNTdGF0ZSA9IEZvbnREZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNT
dGF0ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTAxMCw4ICsxMDEwLDgg
QEAgcHVibGljOgogICAgICAgICB9CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICAgICAgQVNTRVJUKHRvQ1NTUHJpbWl0aXZlVmFs
dWUodmFsdWUpLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpOworICAgICAgICAgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSkpOworICAgICAgICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCk7CiAgICAgICAgIH0KICNlbmRp
ZgogCkBAIC0xMTU5LDkgKzExNTksOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgYm9vbCBzZXRDb3VudGVySW5jcmVtZW50
VG9Ob25lID0gY291bnRlckJlaGF2aW9yID09IEluY3JlbWVudCAmJiB2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpICYmIHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpLT5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVOb25lOworICAgICAgICBib29sIHNldENvdW50ZXJJbmNyZW1lbnRUb05vbmUgPSBj
b3VudGVyQmVoYXZpb3IgPT0gSW5jcmVtZW50ICYmIGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKSA9
PSBDU1NWYWx1ZU5vbmU7CiAKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSAmJiAh
c2V0Q291bnRlckluY3JlbWVudFRvTm9uZSkKKyAgICAgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+
KCp2YWx1ZSkgJiYgIXNldENvdW50ZXJJbmNyZW1lbnRUb05vbmUpCiAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKQEAgLTExNzcsMTQgKzExNzcsMTQg
QEAgcHVibGljOgogICAgICAgICBpZiAoc2V0Q291bnRlckluY3JlbWVudFRvTm9uZSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHRv
Q1NTVmFsdWVMaXN0KHZhbHVlKTsKLSAgICAgICAgaW50IGxlbmd0aCA9IGxpc3QgPyBsaXN0LT5s
ZW5ndGgoKSA6IDA7CisgICAgICAgIENTU1ZhbHVlTGlzdCYgbGlzdCA9IGRvd25jYXN0PENTU1Zh
bHVlTGlzdD4oKnZhbHVlKTsKKyAgICAgICAgaW50IGxlbmd0aCA9IGxpc3QubGVuZ3RoKCk7CiAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIENT
U1ZhbHVlKiBjdXJyVmFsdWUgPSBsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwotICAg
ICAgICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAg
IENTU1ZhbHVlKiBjdXJyVmFsdWUgPSBsaXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7Cisg
ICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqY3VyclZhbHVlKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgUGFpciogcGFpciA9IHRvQ1NTUHJp
bWl0aXZlVmFsdWUoY3VyclZhbHVlKS0+Z2V0UGFpclZhbHVlKCk7CisgICAgICAgICAgICBQYWly
KiBwYWlyID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpjdXJyVmFsdWUpLmdldFBhaXJW
YWx1ZSgpOwogICAgICAgICAgICAgaWYgKCFwYWlyIHx8ICFwYWlyLT5maXJzdCgpIHx8ICFwYWly
LT5zZWNvbmQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMTIxOSwyNyArMTIx
OSwyNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewog
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5jbGVhckN1cnNvckxpc3QoKTsKLSAgICAg
ICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZUxpc3Qq
IGxpc3QgPSB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSk7Ci0gICAgICAgICAgICBpbnQgbGVuID0gbGlz
dC0+bGVuZ3RoKCk7CisgICAgICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpIHsKKyAg
ICAgICAgICAgIENTU1ZhbHVlTGlzdCYgbGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZh
bHVlKTsKKyAgICAgICAgICAgIGludCBsZW4gPSBsaXN0Lmxlbmd0aCgpOwogICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKEN1cnNvckF1dG8pOwogICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgICAgIENTU1Zh
bHVlKiBpdGVtID0gbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKLSAgICAgICAgICAg
ICAgICBpZiAoaXRlbS0+aXNDdXJzb3JJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSogaW1hZ2UgPSB0b0NTU0N1cnNvckltYWdlVmFsdWUoaXRl
bSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+dXBkYXRlSWZTVkdDdXJzb3JJc1Vz
ZWQoc3R5bGVSZXNvbHZlci0+ZWxlbWVudCgpKSkgLy8gRWxlbWVudHMgd2l0aCBTVkcgY3Vyc29y
cyBhcmUgbm90IGFsbG93ZWQgdG8gc2hhcmUgc3R5bGUuCisgICAgICAgICAgICAgICAgQ1NTVmFs
dWUqIGl0ZW0gPSBsaXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CisgICAgICAgICAgICAg
ICAgaWYgKGlzPENTU0N1cnNvckltYWdlVmFsdWU+KCppdGVtKSkgeworICAgICAgICAgICAgICAg
ICAgICBDU1NDdXJzb3JJbWFnZVZhbHVlJiBpbWFnZSA9IGRvd25jYXN0PENTU0N1cnNvckltYWdl
VmFsdWU+KCppdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlLnVwZGF0ZUlmU1ZH
Q3Vyc29ySXNVc2VkKHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKSkpIC8vIEVsZW1lbnRzIHdpdGgg
U1ZHIGN1cnNvcnMgYXJlIG5vdCBhbGxvd2VkIHRvIHNoYXJlIHN0eWxlLgogICAgICAgICAgICAg
ICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VW5pcXVlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmFkZEN1cnNvcihzdHlsZVJlc29s
dmVyLT5zdHlsZUltYWdlKENTU1Byb3BlcnR5Q3Vyc29yLCBpbWFnZSksIGltYWdlLT5ob3RTcG90
KCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoaXRlbSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+aXNWYWx1ZUlEKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDdXJzb3IoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+YWRkQ3Vyc29yKHN0eWxlUmVzb2x2
ZXItPnN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlDdXJzb3IsICZpbWFnZSksIGltYWdlLmhvdFNwb3Qo
KSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKml0
ZW0pKSB7CisgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1ZhbHVlSUQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcihwcmltaXRpdmVWYWx1ZSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgICAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1ZhbHVlSUQoKSAmJiBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5jdXJzb3IoKSAhPSBFQ3Vyc29yKCpwcmltaXRpdmVWYWx1ZSkpCi0gICAgICAgICAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKCpwcmltaXRpdmVWYWx1ZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlz
VmFsdWVJRCgpICYmIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmN1cnNvcigpICE9IEVDdXJzb3Io
cHJpbWl0aXZlVmFsdWUpKQorICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldEN1cnNvcihwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEyNTAs
MTQgKzEyNTAsMTQgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHRBbGlnbiB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgICAg
IEFTU0VSVChwcmltaXRpdmVWYWx1ZS0+aXNWYWx1ZUlEKCkpOworICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKTsKKyAgICAgICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVlLmlzVmFsdWVJRCgpKTsKIAotICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSAhPSBDU1NWYWx1ZVdlYmtpdE1h
dGNoUGFyZW50KQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEFs
aWduKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1
ZUlEKCkgIT0gQ1NTVmFsdWVXZWJraXRNYXRjaFBhcmVudCkKKyAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbihwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIGVs
c2UgaWYgKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigpID09IFRBU1RB
UlQpCiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oc3R5
bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gTEVG
VCA6IFJJR0hUKTsKICAgICAgICAgZWxzZSBpZiAoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUo
KS0+dGV4dEFsaWduKCkgPT0gVEFFTkQpCkBAIC0xMjc5LDggKzEyNzksOCBAQCBwdWJsaWM6CiAg
ICAgICAgIFRleHREZWNvcmF0aW9uIHQgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHREZWNvcmF0
aW9uKCk7CiAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSh2YWx1ZSk7IGkuaGFz
TW9yZSgpOyBpLmFkdmFuY2UoKSkgewogICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZh
bHVlKCk7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpdGVt
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICAgICAgdCB8PSAqdG9DU1NQcmltaXRpdmVW
YWx1ZShpdGVtKTsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KGlzPENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtKSk7CisgICAgICAgICAgICB0IHw9IGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSk7CiAgICAgICAgIH0KICAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0VGV4dERlY29yYXRpb24odCk7CiAgICAgfQpAQCAtMTMyNCwxNCAr
MTMyNCwxNCBAQCBjbGFzcyBBcHBseVByb3BlcnR5VGV4dERlY29yYXRpb25Ta2lwIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICh2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRUZXh0RGVjb3JhdGlvblNraXAodmFsdWVUb0RlY29yYXRpb25Ta2lwKCp0b0NT
U1ByaW1pdGl2ZVZhbHVlKHZhbHVlKSkpOworICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSkpIHsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRl
eHREZWNvcmF0aW9uU2tpcCh2YWx1ZVRvRGVjb3JhdGlvblNraXAoZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAg
ICAgICAgIFRleHREZWNvcmF0aW9uU2tpcCBza2lwID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0
RGVjb3JhdGlvblNraXAoKTsKICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpKHZh
bHVlKTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKQotICAgICAgICAgICAgc2tpcCB8PSB2YWx1
ZVRvRGVjb3JhdGlvblNraXAoKnRvQ1NTUHJpbWl0aXZlVmFsdWUoaS52YWx1ZSgpKSk7CisgICAg
ICAgICAgICBza2lwIHw9IHZhbHVlVG9EZWNvcmF0aW9uU2tpcChkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKmkudmFsdWUoKSkpOwogICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5z
ZXRUZXh0RGVjb3JhdGlvblNraXAoc2tpcCk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhh
bmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC0xMzQ1LDEwICsxMzQ1LDEwIEBAIGNsYXNzIEFwcGx5
UHJvcGVydHlNYXJxdWVlSW5jcmVtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUg
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
JiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwog
ICAgICAgICBMZW5ndGggbWFycXVlZUxlbmd0aChVbmRlZmluZWQpOwogICAgICAgICBzd2l0Y2gg
KHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSkgewogICAgICAgICBjYXNlIENTU1ZhbHVlU21h
bGw6CkBAIC0xMzgwLDE0ICsxMzgwLDE0IEBAIGNsYXNzIEFwcGx5UHJvcGVydHlNYXJxdWVlUmVw
ZXRpdGlvbiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICgh
aXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09
IENTU1ZhbHVlSW5maW5pdGUpCisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlSW5maW5pdGUpCiAgICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsgLy8g
LTEgbWVhbnMgcmVwZWF0IGZvcmV2ZXIuCi0gICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LT5pc051bWJlcigpKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFy
cXVlZUxvb3BDb3VudChwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAgICAgIGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRNYXJxdWVlTG9vcENvdW50KHByaW1pdGl2ZVZhbHVlLmdldEludFZh
bHVlKCkpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIo
KQogICAgIHsKQEAgLTE0MDAsMTEgKzE0MDAsMTEgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eU1hcnF1
ZWVTcGVlZCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICgh
aXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGlmIChDU1NWYWx1ZUlEIGlkZW50ID0gcHJpbWl0aXZlVmFs
dWUtPmdldFZhbHVlSUQoKSkgeworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZl
VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgaWYg
KENTU1ZhbHVlSUQgaWRlbnQgPSBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAgICAg
ICAgICAgIHN3aXRjaCAoaWRlbnQpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbG93Ogog
ICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZCg1
MDApOyAvLyA1MDAgbXNlYy4KQEAgLTE0MTgsMTAgKzE0MTgsMTAgQEAgcHVibGljOgogICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNUaW1lKCkpCi0gICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmNv
bXB1dGVUaW1lPGludCwgQ1NTUHJpbWl0aXZlVmFsdWU6Ok1pbGxpc2Vjb25kcz4oKSk7Ci0gICAg
ICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSAvLyBGb3Igc2Nyb2xsYW1v
dW50IHN1cHBvcnQuCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRNYXJx
dWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpOworICAgICAgICB9IGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLmlzVGltZSgpKQorICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0TWFycXVlZVNwZWVkKHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVUaW1lPGludCwg
Q1NTUHJpbWl0aXZlVmFsdWU6Ok1pbGxpc2Vjb25kcz4oKSk7CisgICAgICAgIGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlLmlzTnVtYmVyKCkpIC8vIEZvciBzY3JvbGxhbW91bnQgc3VwcG9ydC4KKyAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZChwcmltaXRp
dmVWYWx1ZS5nZXRJbnRWYWx1ZSgpKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxl
ciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC0xNDM1LDggKzE0MzUsOCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICAvLyBUaGlzIGlz
IHRydWUgaWYgdmFsdWUgaXMgJ2F1dG8nIG9yICdhbHBoYWJldGljJy4KLSAgICAgICAgaWYgKHZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIFRleHRVbmRlcmxpbmVQb3Np
dGlvbiB0ID0gKnRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOworICAgICAgICBpZiAoaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsKKyAgICAgICAgICAgIFRleHRVbmRlcmxpbmVQb3Np
dGlvbiB0ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0VW5kZXJsaW5lUG9zaXRpb24odCk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTE0NDQsOCArMTQ0NCw4IEBAIHB1Ymxp
YzoKICAgICAgICAgdW5zaWduZWQgdCA9IDA7CiAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRl
cmF0b3IgaSh2YWx1ZSk7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewogICAgICAgICAgICAg
Q1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICAgICAg
VGV4dFVuZGVybGluZVBvc2l0aW9uIHQyID0gKnRvQ1NTUHJpbWl0aXZlVmFsdWUoaXRlbSk7Cisg
ICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpczxDU1NQcmltaXRp
dmVWYWx1ZT4oaXRlbSkpOworICAgICAgICAgICAgVGV4dFVuZGVybGluZVBvc2l0aW9uIHQyID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKTsKICAgICAgICAgICAgIHQgfD0gdDI7
CiAgICAgICAgIH0KICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dFVuZGVy
bGluZVBvc2l0aW9uKHN0YXRpY19jYXN0PFRleHRVbmRlcmxpbmVQb3NpdGlvbj4odCkpOwpAQCAt
MTQ2MSwyMiArMTQ2MSwyMiBAQCBjbGFzcyBBcHBseVByb3BlcnR5TGluZUhlaWdodCB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Cisg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogICAgICAgICBMZW5ndGggbGluZUhlaWdodDsKIAotICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkK
KyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1h
bCkKICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWln
aHQoKTsKLSAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpIHsKLSAg
ICAgICAgICAgIGxpbmVIZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5n
dGg+KGNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoKnN0eWxlUmVz
b2x2ZXIpKTsKLSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdl
KCkpIHsKKyAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkgeworICAg
ICAgICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8TGVuZ3Ro
Pihjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29tRmFjdG9yKCpzdHlsZVJlc29s
dmVyKSk7CisgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkp
IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBwZXJjZW50YWdlIHNob3VsZCBub3QgYmUgcmVzdHJp
Y3RlZCB0byBhbiBpbnRlZ2VyIGhlcmUuCi0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3Ro
KChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5jb21wdXRlZEZvbnRTaXplKCkgKiBwcmltaXRpdmVW
YWx1ZS0+Z2V0SW50VmFsdWUoKSkgLyAxMDAsIEZpeGVkKTsKLSAgICAgICAgfSBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgeworICAgICAgICAgICAgbGluZUhlaWdodCA9IExl
bmd0aCgoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y29tcHV0ZWRGb250U2l6ZSgpICogcHJpbWl0
aXZlVmFsdWUuZ2V0SW50VmFsdWUoKSkgLyAxMDAsIEZpeGVkKTsKKyAgICAgICAgfSBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogbnVt
YmVyIGFuZCBwZXJjZW50YWdlIHZhbHVlcyBzaG91bGQgcHJvZHVjZSB0aGUgc2FtZSB0eXBlIG9m
IExlbmd0aCAoaWUuIEZpeGVkIG9yIFBlcmNlbnQpLgotICAgICAgICAgICAgbGluZUhlaWdodCA9
IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSAqIDEwMC4wLCBQZXJjZW50
KTsKKyAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUuZ2V0RG91
YmxlVmFsdWUoKSAqIDEwMC4wLCBQZXJjZW50KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldExpbmVIZWlnaHQo
bGluZUhlaWdodCk7CkBAIC0xNDk0LDI3ICsxNDk0LDI3IEBAIGNsYXNzIEFwcGx5UHJvcGVydHlM
aW5lSGVpZ2h0Rm9ySU9TVGV4dEF1dG9zaXppbmcgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOworICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KTsKICAgICAgICAgTGVuZ3RoIGxpbmVIZWlnaHQ7CiAKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpCisgICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpCiAgICAgICAgICAgICBsaW5l
SGVpZ2h0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCk7Ci0gICAgICAgIGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7Ci0gICAgICAgICAgICBsaW5lSGVpZ2h0
ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjc3N0b0xlbmd0aENvbnZl
cnNpb25EYXRhV2l0aFRleHRab29tRmFjdG9yKCpzdHlsZVJlc29sdmVyKSk7CisgICAgICAgIGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGxpbmVIZWln
aHQgPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY3NzdG9MZW5ndGhDb252
ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3Rvcigqc3R5bGVSZXNvbHZlcikpOwogICAgICAgICAg
ICAgaWYgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnRleHRTaXplQWRqdXN0KCkuaXNQZXJjZW50
YWdlKCkpCiAgICAgICAgICAgICAgICAgbGluZUhlaWdodCA9IExlbmd0aChsaW5lSGVpZ2h0LnZh
bHVlKCkgKiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT50ZXh0U2l6ZUFkanVzdCgpLm11bHRpcGxp
ZXIoKSwgRml4ZWQpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNl
bnRhZ2UoKSkgeworICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFn
ZSgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogcGVyY2VudGFnZSBzaG91bGQgbm90IGJlIHJl
c3RyaWN0ZWQgdG8gYW4gaW50ZWdlciBoZXJlLgotICAgICAgICAgICAgbGluZUhlaWdodCA9IExl
bmd0aCgoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udFNpemUoKSAqIHByaW1pdGl2ZVZhbHVl
LT5nZXRJbnRWYWx1ZSgpKSAvIDEwMCwgRml4ZWQpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLT5pc051bWJlcigpKSB7CisgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3Ro
KChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250U2l6ZSgpICogcHJpbWl0aXZlVmFsdWUuZ2V0
SW50VmFsdWUoKSkgLyAxMDAsIEZpeGVkKTsKKyAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogbnVtYmVyIGFuZCBwZXJj
ZW50YWdlIHZhbHVlcyBzaG91bGQgcHJvZHVjZSB0aGUgc2FtZSB0eXBlIG9mIExlbmd0aCAoaWUu
IEZpeGVkIG9yIFBlcmNlbnQpLgogICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnRleHRTaXplQWRqdXN0KCkuaXNQZXJjZW50YWdlKCkpCi0gICAgICAgICAgICAgICAgbGlu
ZUhlaWdodCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSAqIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnRleHRTaXplQWRqdXN0KCkubXVsdGlwbGllcigpICogMTAwLjAs
IFBlcmNlbnQpOworICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZl
VmFsdWUuZ2V0RG91YmxlVmFsdWUoKSAqIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnRleHRTaXpl
QWRqdXN0KCkubXVsdGlwbGllcigpICogMTAwLjAsIFBlcmNlbnQpOwogICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdl
dERvdWJsZVZhbHVlKCkgKiAxMDAuMCwgUGVyY2VudCk7CisgICAgICAgICAgICAgICAgbGluZUhl
aWdodCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS5nZXREb3VibGVWYWx1ZSgpICogMTAwLjAsIFBl
cmNlbnQpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TGluZUhlaWdodChsaW5lSGVpZ2h0KTsKQEAgLTE1NDQs
MjAgKzE1NDQsMjAgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eVdvcmRTcGFjaW5nIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgIExlbmd0aCB3b3JkU3BhY2luZzsKIAotICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkKKyAg
ICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkK
ICAgICAgICAgICAgIHdvcmRTcGFjaW5nID0gUmVuZGVyU3R5bGU6OmluaXRpYWxXb3JkU3BhY2lu
ZygpOwotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewotICAg
ICAgICAgICAgd29yZFNwYWNpbmcgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5n
dGg+KGNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoKnN0eWxlUmVz
b2x2ZXIpKTsKLSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdl
KCkpCi0gICAgICAgICAgICB3b3JkU3BhY2luZyA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0
RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7Ci0gICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LT5pc051bWJlcigpKQotICAgICAgICAgICAgd29yZFNwYWNpbmcgPSBMZW5ndGgocHJpbWl0aXZl
VmFsdWUtPmdldERvdWJsZVZhbHVlKCksIEZpeGVkKTsKKyAgICAgICAgZWxzZSBpZiAocHJpbWl0
aXZlVmFsdWUuaXNMZW5ndGgoKSkgeworICAgICAgICAgICAgd29yZFNwYWNpbmcgPSBwcmltaXRp
dmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdp
dGhUZXh0Wm9vbUZhY3Rvcigqc3R5bGVSZXNvbHZlcikpOworICAgICAgICB9IGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpKQorICAgICAgICAgICAgd29yZFNwYWNpbmcgPSBM
ZW5ndGgocHJpbWl0aXZlVmFsdWUuZ2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CisgICAgICAg
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgICAgICB3b3JkU3Bh
Y2luZyA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS5nZXREb3VibGVWYWx1ZSgpLCBGaXhlZCk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0V29yZFNwYWNpbmcod29yZFNwYWNpbmcpOwpAQCAtMTY2NywyMSArMTY2Nywy
MSBAQCBwdWJsaWM6CiAgICAgICAgIHN3aXRjaCAoaW5zcGVjdG9yLmxlbmd0aCgpKSB7CiAgICAg
ICAgIGNhc2UgMjogewogICAgICAgICAgICAgLy8gPGxlbmd0aD57Mn0gfCA8cGFnZS1zaXplPiA8
b3JpZW50YXRpb24+Ci0gICAgICAgICAgICBpZiAoIWluc3BlY3Rvci5maXJzdCgpLT5pc1ByaW1p
dGl2ZVZhbHVlKCkgfHwgIWluc3BlY3Rvci5zZWNvbmQoKS0+aXNQcmltaXRpdmVWYWx1ZSgpKQor
ICAgICAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmluc3BlY3Rvci5maXJzdCgp
KSB8fCAhaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppbnNwZWN0b3Iuc2Vjb25kKCkpKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdCA9
IHRvQ1NTUHJpbWl0aXZlVmFsdWUoaW5zcGVjdG9yLmZpcnN0KCkpOwotICAgICAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHNlY29uZCA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoaW5zcGVjdG9yLnNl
Y29uZCgpKTsKLSAgICAgICAgICAgIGlmIChmaXJzdC0+aXNMZW5ndGgoKSkgeworICAgICAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGZpcnN0ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCppbnNwZWN0b3IuZmlyc3QoKSk7CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgc2Vj
b25kID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppbnNwZWN0b3Iuc2Vjb25kKCkpOwor
ICAgICAgICAgICAgaWYgKGZpcnN0LmlzTGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICAvLyA8
bGVuZ3RoPnsyfQotICAgICAgICAgICAgICAgIGlmICghc2Vjb25kLT5pc0xlbmd0aCgpKQorICAg
ICAgICAgICAgICAgIGlmICghc2Vjb25kLmlzTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZl
cnNpb25EYXRhID0gc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25E
YXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZik7Ci0gICAgICAgICAgICAgICAgd2lkdGgg
PSBmaXJzdC0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKLSAgICAgICAg
ICAgICAgICBoZWlnaHQgPSBzZWNvbmQtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJzaW9u
RGF0YSk7CisgICAgICAgICAgICAgICAgd2lkdGggPSBmaXJzdC5jb21wdXRlTGVuZ3RoPExlbmd0
aD4oY29udmVyc2lvbkRhdGEpOworICAgICAgICAgICAgICAgIGhlaWdodCA9IHNlY29uZC5jb21w
dXRlTGVuZ3RoPExlbmd0aD4oY29udmVyc2lvbkRhdGEpOwogICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAvLyA8cGFnZS1zaXplPiA8b3JpZW50YXRpb24+CiAgICAgICAgICAg
ICAgICAgLy8gVGhlIHZhbHVlIG9yZGVyIGlzIGd1YXJhbnRlZWQuIFNlZSBDU1NQYXJzZXI6OnBh
cnNlU2l6ZVBhcmFtZXRlci4KLSAgICAgICAgICAgICAgICBpZiAoIWdldFBhZ2VTaXplRnJvbU5h
bWUoZmlyc3QsIHNlY29uZCwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICAgICAgaWYgKCFn
ZXRQYWdlU2l6ZUZyb21OYW1lKCZmaXJzdCwgJnNlY29uZCwgd2lkdGgsIGhlaWdodCkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHBhZ2VT
aXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsKQEAgLTE2ODksMTUgKzE2ODksMTUgQEAgcHVi
bGljOgogICAgICAgICB9CiAgICAgICAgIGNhc2UgMTogewogICAgICAgICAgICAgLy8gPGxlbmd0
aD4gfCBhdXRvIHwgPHBhZ2Utc2l6ZT4gfCBbIHBvcnRyYWl0IHwgbGFuZHNjYXBlXQotICAgICAg
ICAgICAgaWYgKCFpbnNwZWN0b3IuZmlyc3QoKS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAg
ICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmluc3BlY3Rvci5maXJzdCgpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGluc3BlY3Rvci5maXJzdCgpKTsKLSAg
ICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgeworICAgICAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCppbnNwZWN0b3IuZmlyc3QoKSk7CisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUuaXNMZW5ndGgoKSkgewogICAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+CiAgICAgICAgICAg
ICAgICAgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX1JFU09MVkVEOwotICAgICAgICAgICAgICAg
IHdpZHRoID0gaGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihz
dHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0
aEFkanVzdGVkWm9vbSgxLjBmKSk7CisgICAgICAgICAgICAgICAgd2lkdGggPSBoZWlnaHQgPSBw
cmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3RhdGUo
KS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikp
OwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2
ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2
ZVZhbHVlLmdldFZhbHVlSUQoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVBdXRvOgpA
QCAtMTcxMiw3ICsxNzEyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgICAgIC8vIDxwYWdlLXNpemU+CiAgICAgICAgICAgICAgICAgICAgIHBh
Z2VTaXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFnZXRQYWdlU2l6ZUZyb21OYW1lKHByaW1pdGl2ZVZhbHVlLCAwLCB3aWR0aCwgaGVpZ2h0KSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFnZXRQYWdlU2l6ZUZyb21OYW1lKCZwcmltaXRpdmVW
YWx1ZSwgbnVsbHB0ciwgd2lkdGgsIGhlaWdodCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTc0NSw0NSArMTc0
NSw0NSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7
Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewotICAgICAgICAgICAgQ1NTVmFs
dWVMaXN0KiBsaXN0ID0gdG9DU1NWYWx1ZUxpc3QodmFsdWUpOwotICAgICAgICAgICAgQVNTRVJU
KGxpc3QtPmxlbmd0aCgpID09IDIpOwotICAgICAgICAgICAgaWYgKGxpc3QtPmxlbmd0aCgpICE9
IDIpCisgICAgICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpIHsKKyAgICAgICAgICAg
IENTU1ZhbHVlTGlzdCYgbGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKKyAg
ICAgICAgICAgIEFTU0VSVChsaXN0Lmxlbmd0aCgpID09IDIpOworICAgICAgICAgICAgaWYgKGxp
c3QubGVuZ3RoKCkgIT0gMikKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgQ1NTVmFs
dWUqIGl0ZW0gPSBsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwotICAgICAgICAgICAg
ICAgIGlmICghaXRlbS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgICAgIENTU1Zh
bHVlKiBpdGVtID0gbGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAgICAg
ICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKSkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUg
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGl0ZW0pOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlRmlsbGVkIHx8IHZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVPcGVuKQotICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRUZXh0RW1waGFzaXNGaWxsKCp2YWx1ZSk7CisgICAgICAgICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUmIHZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKTsKKyAg
ICAgICAgICAgICAgICBpZiAodmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlRmlsbGVkIHx8
IHZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU9wZW4pCisgICAgICAgICAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwodmFsdWUpOwogICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyaygqdmFsdWUpOworICAgICAgICAgICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKHZhbHVlKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBo
YXNpc0N1c3RvbU1hcmsobnVsbEF0b20pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAo
IWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKHZhbHVlKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAKLSAgICAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlLT5pc1N0cmluZygpKSB7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1N0
cmluZygpKSB7CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1w
aGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQpOwogICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJrQ3VzdG9t
KTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1
c3RvbU1hcmsocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhwcmltaXRp
dmVWYWx1ZS5nZXRTdHJpbmdWYWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3Rv
bU1hcmsobnVsbEF0b20pOwogCi0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJ
RCgpID09IENTU1ZhbHVlRmlsbGVkIHx8IHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVPcGVuKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRU
ZXh0RW1waGFzaXNGaWxsKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgIGlmIChwcmltaXRpdmVW
YWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVGaWxsZWQgfHwgcHJpbWl0aXZlVmFsdWUuZ2V0
VmFsdWVJRCgpID09IENTU1ZhbHVlT3BlbikgeworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFRleHRFbXBoYXNp
c01hcmtBdXRvKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoVGV4dEVtcGhhc2lzRmlsbEZpbGxlZCk7Ci0g
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKCpw
cmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRU
ZXh0RW1waGFzaXNNYXJrKHByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
MTgxNSwxNCArMTgxNSwxNCBAQCBjbGFzcyBBcHBseVByb3BlcnR5VGV4dEVtcGhhc2lzUG9zaXRp
b24gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAg
ICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc1Bvc2l0aW9uKHZhbHVlVG9FbXBoYXNp
c1Bvc2l0aW9uKCp0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKSkpOworICAgICAgICBpZiAoaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldFRleHRFbXBoYXNpc1Bvc2l0aW9uKHZhbHVlVG9FbXBoYXNpc1Bvc2l0aW9u
KGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAogICAgICAgICBUZXh0RW1waGFzaXNQb3NpdGlvbiBwb3NpdGlvbiA9
IDA7CiAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSh2YWx1ZSk7IGkuaGFzTW9y
ZSgpOyBpLmFkdmFuY2UoKSkKLSAgICAgICAgICAgIHBvc2l0aW9uIHw9IHZhbHVlVG9FbXBoYXNp
c1Bvc2l0aW9uKCp0b0NTU1ByaW1pdGl2ZVZhbHVlKGkudmFsdWUoKSkpOworICAgICAgICAgICAg
cG9zaXRpb24gfD0gdmFsdWVUb0VtcGhhc2lzUG9zaXRpb24oZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCppLnZhbHVlKCkpKTsKICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0
VGV4dEVtcGhhc2lzUG9zaXRpb24ocG9zaXRpb24pOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVy
dHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtMTkzNSwxMyArMTkzNSwxMyBAQCBjbGFzcyBB
cHBseVByb3BlcnR5UmVzaXplIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAg
ICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NT
U1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1p
dGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAKICAgICAg
ICAgRVJlc2l6ZSByID0gUkVTSVpFX05PTkU7Ci0gICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFs
dWUtPmdldFZhbHVlSUQoKSkgeworICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLmdldFZh
bHVlSUQoKSkgewogICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IGNhc2UgQ1NTVmFsdWVBdXRvOgpAQCAtMTk0OSw3ICsxOTQ5LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIHIgPSBzZXR0aW5ncy0+dGV4dEFyZWFzQXJlUmVzaXphYmxlKCkgPyBSRVNJWkVf
Qk9USCA6IFJFU0laRV9OT05FOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByID0gKnByaW1pdGl2ZVZhbHVlOworICAgICAgICAgICAgciA9IHByaW1p
dGl2ZVZhbHVlOwogICAgICAgICB9CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dFJlc2l6ZShyKTsKICAgICB9CkBAIC0xOTY1LDE1ICsxOTY1LDE1IEBAIGNsYXNzIEFwcGx5UHJv
cGVydHlWZXJ0aWNhbEFsaWduIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAg
ICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NT
U1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1p
dGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAKLSAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpCi0gICAgICAgICAgICByZXR1cm4g
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbigqcHJpbWl0aXZlVmFsdWUp
OworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpKQorICAgICAgICAgICAg
cmV0dXJuIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFZlcnRpY2FsQWxpZ24ocHJpbWl0aXZl
VmFsdWUpOwogCi0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFZlcnRpY2FsQWxp
Z25MZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252
ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3R5bGVS
ZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpKTsKKyAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbkxlbmd0aChwcmltaXRpdmVW
YWx1ZS5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252
ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0eWxlUmVzb2x2ZXItPnN0YXRlKCkuY3Nz
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5
SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTIwMDMsMjYgKzIwMDMsMjYgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAodmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAgIGlm
IChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSk7CiAKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09
IENTU1ZhbHVlQXV0bykKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlE
KCkgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICAgICAgICAgIHJldHVybiBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb1R5cGUoQXNwZWN0UmF0aW9BdXRvKTsKLSAgICAgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlRnJvbURpbWVu
c2lvbnMpCisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENT
U1ZhbHVlRnJvbURpbWVuc2lvbnMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvVHlwZShBc3BlY3RSYXRpb0Zyb21EaW1lbnNpb25z
KTsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1Zh
bHVlRnJvbUludHJpbnNpYykKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1
ZUlEKCkgPT0gQ1NTVmFsdWVGcm9tSW50cmluc2ljKQogICAgICAgICAgICAgICAgIHJldHVybiBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb1R5cGUoQXNwZWN0UmF0aW9Gcm9t
SW50cmluc2ljKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghdmFsdWUtPmlzQXNwZWN0UmF0
aW9WYWx1ZSgpKSB7CisgICAgICAgIGlmICghaXM8Q1NTQXNwZWN0UmF0aW9WYWx1ZT4oKnZhbHVl
KSkgewogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9U
eXBlKEFzcGVjdFJhdGlvQXV0byk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBDU1NBc3BlY3RSYXRpb1ZhbHVlKiBhc3BlY3RSYXRpb1ZhbHVlID0gdG9DU1NBc3Bl
Y3RSYXRpb1ZhbHVlKHZhbHVlKTsKKyAgICAgICAgQ1NTQXNwZWN0UmF0aW9WYWx1ZSYgYXNwZWN0
UmF0aW9WYWx1ZSA9IGRvd25jYXN0PENTU0FzcGVjdFJhdGlvVmFsdWU+KCp2YWx1ZSk7CiAgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvVHlwZShBc3BlY3RSYXRp
b1NwZWNpZmllZCk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJh
dGlvRGVub21pbmF0b3IoYXNwZWN0UmF0aW9WYWx1ZS0+ZGVub21pbmF0b3JWYWx1ZSgpKTsKLSAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3IoYXNw
ZWN0UmF0aW9WYWx1ZS0+bnVtZXJhdG9yVmFsdWUoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldEFzcGVjdFJhdGlvRGVub21pbmF0b3IoYXNwZWN0UmF0aW9WYWx1ZS5kZW5v
bWluYXRvclZhbHVlKCkpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3Bl
Y3RSYXRpb051bWVyYXRvcihhc3BlY3RSYXRpb1ZhbHVlLm51bWVyYXRvclZhbHVlKCkpOwogICAg
IH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC0yMDU0
LDI2ICsyMDU0LDI2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04odmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOworICAgICAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTihpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKKyAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRW
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkgewogICAgICAgICAgICAgcmVzZXRFZmZl
Y3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0
Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVJlc2V0KSB7CisgICAgICAgIH0g
ZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlUmVzZXQpIHsK
ICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEVmZmVjdGl2ZVpvb20oUmVuZGVyU3R5bGU6
OmluaXRpYWxab29tKCkpOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9vbShSZW5k
ZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZURvY3VtZW50KSB7CisgICAgICAgIH0gZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlRG9jdW1lbnQpIHsKICAg
ICAgICAgICAgIGZsb2F0IGRvY1pvb20gPSBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxl
KCkgPyBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCktPnpvb20oKSA6IFJlbmRlclN0
eWxlOjppbml0aWFsWm9vbSgpOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0RWZmZWN0
aXZlWm9vbShkb2Nab29tKTsKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oZG9j
Wm9vbSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgp
KSB7CisgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkpIHsK
ICAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKLSAgICAgICAg
ICAgIGlmIChmbG9hdCBwZXJjZW50ID0gcHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSkK
KyAgICAgICAgICAgIGlmIChmbG9hdCBwZXJjZW50ID0gcHJpbWl0aXZlVmFsdWUuZ2V0RmxvYXRW
YWx1ZSgpKQogICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20ocGVyY2VudCAv
IDEwMC4wZik7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkp
IHsKKyAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpKSB7CiAgICAg
ICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgICAgICBp
ZiAoZmxvYXQgbnVtYmVyID0gcHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSkKKyAgICAg
ICAgICAgIGlmIChmbG9hdCBudW1iZXIgPSBwcmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKCkp
CiAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9vbShudW1iZXIpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMjEwOCwxMCArMjEwOCwxMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkK
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBFRGlzcGxheSBkaXNwbGF5ID0gKnRvQ1NT
UHJpbWl0aXZlVmFsdWUodmFsdWUpOworICAgICAgICBFRGlzcGxheSBkaXNwbGF5ID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAKICAgICAgICAgaWYgKCFpc1ZhbGlkRGlz
cGxheVZhbHVlKHN0eWxlUmVzb2x2ZXIsIGRpc3BsYXkpKQogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMjEzMSw4ICsyMTMxLDggQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJl
bmRlclN0eWxlKiBzdHlsZSwgUGFzc1JlZlB0cjxDbGlwUGF0aE9wZXJhdGlvbj4gdmFsdWUpIHsg
KHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQogICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
IHsKLSAgICAgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSgqdmFsdWUpOworICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsK
KyAgICAgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJ
RCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLCAwKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLnBy
aW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewpAQCAtMjE0Mywx
MyArMjE0MywxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAg
aWYgKCFpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIENTU0JveFR5cGUgcmVmZXJlbmNlQm94ID0gQm94TWlzc2luZzsKICAgICAgICAgUmVmUHRy
PENsaXBQYXRoT3BlcmF0aW9uPiBvcGVyYXRpb247Ci0gICAgICAgIGF1dG8mIHZhbHVlTGlzdCA9
IHRvQ1NTVmFsdWVMaXN0KCp2YWx1ZSk7CisgICAgICAgIGF1dG8mIHZhbHVlTGlzdCA9IGRvd25j
YXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHZhbHVlTGlzdC5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvJiBwcmltaXRp
dmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVlTGlzdC5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKGkpKTsKKyAgICAgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZUxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7
CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNTaGFwZSgpICYmICFvcGVyYXRpb24p
CiAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gU2hhcGVDbGlwUGF0aE9wZXJhdGlvbjo6Y3Jl
YXRlKGJhc2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEoKSwgcHJpbWl0aXZlVmFsdWUuZ2V0U2hhcGVWYWx1ZSgpKSk7CiAgICAg
ICAgICAgICBlbHNlIGlmICgocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVl
Q29udGVudEJveApAQCAtMjE4NiwyNiArMjE4NiwyNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZv
aWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBQYXNzUmVmUHRyPFNoYXBlVmFsdWU+IHZh
bHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KICAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0
aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykKKyAgICAgICAgaWYg
KGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSB7CisgICAgICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKTsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NT
VmFsdWVBdXRvKQogICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCksIDApOwogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ltYWdlVmFsdWUoKSB8fCB2YWx1
ZS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkgfHwgdmFsdWUtPmlzSW1hZ2VTZXRWYWx1ZSgpKSB7
CiAgICAgICAgICAgICBSZWZQdHI8U2hhcGVWYWx1ZT4gc2hhcGUgPSBTaGFwZVZhbHVlOjpjcmVh
dGVJbWFnZVZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlSW1hZ2UocHJvcGVydHksIHZhbHVlKSk7
CiAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzaGFwZS5yZWxl
YXNlKCkpOwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CisgICAg
ICAgIH0gZWxzZSBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7CiAgICAgICAgICAgICBS
ZWZQdHI8QmFzaWNTaGFwZT4gc2hhcGU7CiAgICAgICAgICAgICBDU1NCb3hUeXBlIHJlZmVyZW5j
ZUJveCA9IEJveE1pc3Npbmc7Ci0gICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9
IHRvQ1NTVmFsdWVMaXN0KHZhbHVlKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB2YWx1ZUxpc3QtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlTGlz
dC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlLT5pc1NoYXBlKCkpCi0gICAgICAgICAgICAgICAgICAgIHNoYXBlID0gYmFzaWNT
aGFwZUZvclZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVWYWx1ZSgpKTsKLSAgICAgICAgICAgICAg
ICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ29udGVu
dEJveAotICAgICAgICAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgp
ID09IENTU1ZhbHVlQm9yZGVyQm94Ci0gICAgICAgICAgICAgICAgICAgIHx8IHByaW1pdGl2ZVZh
bHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVQYWRkaW5nQm94Ci0gICAgICAgICAgICAgICAg
ICAgIHx8IHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVNYXJnaW5Cb3gp
Ci0gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUJveCA9IENTU0JveFR5cGUoKnByaW1pdGl2
ZVZhbHVlKTsKKyAgICAgICAgICAgIENTU1ZhbHVlTGlzdCYgdmFsdWVMaXN0ID0gZG93bmNhc3Q8
Q1NTVmFsdWVMaXN0PigqdmFsdWUpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHZhbHVlTGlzdC5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZUxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7CisgICAgICAgICAgICAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlLmlzU2hhcGUoKSkKKyAgICAgICAgICAgICAgICAgICAgc2hhcGUgPSBi
YXNpY1NoYXBlRm9yVmFsdWUoc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCksIHByaW1pdGl2ZVZhbHVlLmdldFNoYXBlVmFsdWUoKSk7CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ29u
dGVudEJveAorICAgICAgICAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlE
KCkgPT0gQ1NTVmFsdWVCb3JkZXJCb3gKKyAgICAgICAgICAgICAgICAgICAgfHwgcHJpbWl0aXZl
VmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlUGFkZGluZ0JveAorICAgICAgICAgICAgICAg
ICAgICB8fCBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVNYXJnaW5Cb3gp
CisgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUJveCA9IENTU0JveFR5cGUocHJpbWl0aXZl
VmFsdWUpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQpAQCAtMjI0NSwyMyArMjI0NSwyMyBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlz
VmFsdWVMaXN0KCkpCisgICAgICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9IHRvQ1NT
VmFsdWVMaXN0KHZhbHVlKTsKKyAgICAgICAgQ1NTVmFsdWVMaXN0JiB2YWx1ZUxpc3QgPSBkb3du
Y2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CiAgICAgICAgIEltYWdlUmVzb2x1dGlvblNvdXJj
ZSBzb3VyY2UgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNvdXJjZSgpOwog
ICAgICAgICBJbWFnZVJlc29sdXRpb25TbmFwIHNuYXAgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbElt
YWdlUmVzb2x1dGlvblNuYXAoKTsKICAgICAgICAgZG91YmxlIHJlc29sdXRpb24gPSBSZW5kZXJT
dHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvbigpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHZhbHVlTGlzdC0+bGVuZ3RoKCk7IGkrKykgewotICAgICAgICAgICAgQ1NTVmFsdWUq
IGl0ZW0gPSB2YWx1ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7Ci0gICAgICAgICAg
ICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB2YWx1ZUxpc3QubGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgQ1NTVmFsdWUq
IGl0ZW0gPSB2YWx1ZUxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAgICAgICAg
IGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUoaXRlbSk7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUt
PmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUZyb21JbWFnZSkKKyAgICAgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
aXRlbSk7CisgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENT
U1ZhbHVlRnJvbUltYWdlKQogICAgICAgICAgICAgICAgIHNvdXJjZSA9IEltYWdlUmVzb2x1dGlv
bkZyb21JbWFnZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1
ZUlEKCkgPT0gQ1NTVmFsdWVTbmFwKQorICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlU25hcCkKICAgICAgICAgICAgICAgICBzbmFwID0g
SW1hZ2VSZXNvbHV0aW9uU25hcFBpeGVsczsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICByZXNvbHV0aW9uID0gcHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfRFBQWCk7CisgICAgICAgICAgICAgICAgcmVzb2x1dGlvbiA9IHByaW1p
dGl2ZVZhbHVlLmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQWCk7CiAg
ICAgICAgIH0KICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0
aW9uU291cmNlKHNvdXJjZSk7CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldElt
YWdlUmVzb2x1dGlvblNuYXAoc25hcCk7CkBAIC0yMjk3LDcgKzIyOTcsNyBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFs
dWUtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUp
KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIExlbmd0aCBsZW5ndGhPclBlcmNlbnRh
Z2VWYWx1ZTsKQEAgLTIzMDUsMTkgKzIzMDUsMTkgQEAgcHVibGljOgogICAgICAgICBUZXh0SW5k
ZW50TGluZSB0ZXh0SW5kZW50TGluZVZhbHVlID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5k
ZW50TGluZSgpOwogICAgICAgICBUZXh0SW5kZW50VHlwZSB0ZXh0SW5kZW50VHlwZVZhbHVlID0g
UmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5kZW50VHlwZSgpOwogI2VuZGlmCi0gICAgICAgIENT
U1ZhbHVlTGlzdCogdmFsdWVMaXN0ID0gdG9DU1NWYWx1ZUxpc3QodmFsdWUpOwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlTGlzdC0+bGVuZ3RoKCk7ICsraSkgewotICAgICAg
ICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSB2YWx1ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
aSk7Ci0gICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAg
Q1NTVmFsdWVMaXN0JiB2YWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVMaXN0Lmxlbmd0aCgpOyArK2kp
IHsKKyAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gdmFsdWVMaXN0Lml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soaSk7CisgICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaXRl
bSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoaXRlbSk7Ci0gICAg
ICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpCi0gICAgICAgICAgICAg
ICAgbGVuZ3RoT3JQZXJjZW50YWdlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVu
Z3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0
ZWRDb252ZXJzaW9uPihzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEoKSk7CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pOworICAgICAgICAgICAgaWYgKCFw
cmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpCisgICAgICAgICAgICAgICAgbGVuZ3RoT3JQZXJj
ZW50YWdlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2Vy
Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0
eWxlUmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKICNpZiBF
TkFCTEUoQ1NTM19URVhUKQotICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdl
dFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdlYmtpdEVhY2hMaW5lKQorICAgICAgICAgICAgZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Via2l0RWFjaExpbmUp
CiAgICAgICAgICAgICAgICAgdGV4dEluZGVudExpbmVWYWx1ZSA9IFRleHRJbmRlbnRFYWNoTGlu
ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVXZWJraXRIYW5naW5nKQorICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Via2l0SGFuZ2luZykKICAgICAgICAgICAgICAg
ICB0ZXh0SW5kZW50VHlwZVZhbHVlID0gVGV4dEluZGVudEhhbmdpbmc7CiAjZW5kaWYKICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhTGlzdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAppbmRleCA5NDQ1MDg2M2YxYjkzYWM2YTczNTg5
NmIyY2E5MmIxZmZiZGVhNGFmLi5lZTY2NzEyMDQyNDI2MGU4ZGIzNWY1MjI4YTNlNDVlYWMxMzIz
MjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcApAQCAtMzMyLDEwICszMzIsMTAgQEAgdm9p
ZCByZXBvcnRNZWRpYVF1ZXJ5V2FybmluZ0lmTmVlZGVkKERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgTWVkaWFRdWVyeVNldCogbWUKICAgICAgICAgICAgICAgICBjb25zdCBNZWRpYVF1ZXJ5RXhw
KiBleHAgPSBleHByZXNzaW9ucy5hdChqKS5nZXQoKTsKICAgICAgICAgICAgICAgICBpZiAoZXhw
LT5tZWRpYUZlYXR1cmUoKSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6cmVzb2x1dGlvbk1lZGlhRmVh
dHVyZSB8fCBleHAtPm1lZGlhRmVhdHVyZSgpID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhfcmVz
b2x1dGlvbk1lZGlhRmVhdHVyZSB8fCBleHAtPm1lZGlhRmVhdHVyZSgpID09IE1lZGlhRmVhdHVy
ZU5hbWVzOjptaW5fcmVzb2x1dGlvbk1lZGlhRmVhdHVyZSkgewogICAgICAgICAgICAgICAgICAg
ICBDU1NWYWx1ZSogY3NzVmFsdWUgPSAgZXhwLT52YWx1ZSgpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoY3NzVmFsdWUgJiYgY3NzVmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9D
U1NQcmltaXRpdmVWYWx1ZShjc3NWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzRG90c1BlckluY2goKSB8fCBwcmltaXRpdmVWYWx1ZS0+aXNEb3Rz
UGVyQ2VudGltZXRlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJlc29sdXRp
b25XYXJuaW5nTWVzc2FnZVRvQ29uc29sZShkb2N1bWVudCwgbWVkaWFRdWVyeVNldC0+bWVkaWFU
ZXh0KCksIHByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPENTU1By
aW1pdGl2ZVZhbHVlPihjc3NWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqY3NzVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LmlzRG90c1BlckluY2goKSB8fCBwcmltaXRpdmVWYWx1ZS5pc0RvdHNQZXJDZW50aW1ldGVyKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUmVzb2x1dGlvbldhcm5pbmdNZXNzYWdl
VG9Db25zb2xlKGRvY3VtZW50LCBtZWRpYVF1ZXJ5U2V0LT5tZWRpYVRleHQoKSwgJnByaW1pdGl2
ZVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVh
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAppbmRl
eCBlMThiOTExNDA1ZmE2N2Q4YmY2NmUxMTE3OWIxNWJkYmE2YmQ0NDVmLi4xNjJjNThlZWIwYTcy
ODliYjI4N2QxZGZmNWYwNDA0ZjRiM2ZjYzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlh
UXVlcnlFdmFsdWF0b3IuY3BwCkBAIC0xODYsOSArMTg2LDkgQEAgYm9vbCBjb21wYXJlVmFsdWUo
VCBhLCBUIGIsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIAogc3RhdGljIGJvb2wgY29tcGFyZUFz
cGVjdFJhdGlvVmFsdWUoQ1NTVmFsdWUqIHZhbHVlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIE1l
ZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKLSAgICBpZiAodmFsdWUtPmlzQXNwZWN0UmF0aW9WYWx1
ZSgpKSB7Ci0gICAgICAgIENTU0FzcGVjdFJhdGlvVmFsdWUqIGFzcGVjdFJhdGlvID0gdG9DU1NB
c3BlY3RSYXRpb1ZhbHVlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVWYWx1ZSh3aWR0
aCAqIHN0YXRpY19jYXN0PGludD4oYXNwZWN0UmF0aW8tPmRlbm9taW5hdG9yVmFsdWUoKSksIGhl
aWdodCAqIHN0YXRpY19jYXN0PGludD4oYXNwZWN0UmF0aW8tPm51bWVyYXRvclZhbHVlKCkpLCBv
cCk7CisgICAgaWYgKGlzPENTU0FzcGVjdFJhdGlvVmFsdWU+KCp2YWx1ZSkpIHsKKyAgICAgICAg
Q1NTQXNwZWN0UmF0aW9WYWx1ZSYgYXNwZWN0UmF0aW8gPSBkb3duY2FzdDxDU1NBc3BlY3RSYXRp
b1ZhbHVlPigqdmFsdWUpOworICAgICAgICByZXR1cm4gY29tcGFyZVZhbHVlKHdpZHRoICogc3Rh
dGljX2Nhc3Q8aW50Pihhc3BlY3RSYXRpby5kZW5vbWluYXRvclZhbHVlKCkpLCBoZWlnaHQgKiBz
dGF0aWNfY2FzdDxpbnQ+KGFzcGVjdFJhdGlvLm51bWVyYXRvclZhbHVlKCkpLCBvcCk7CiAgICAg
fQogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTk2LDkgKzE5Niw5IEBAIHN0YXRpYyBib29sIGNv
bXBhcmVBc3BlY3RSYXRpb1ZhbHVlKENTU1ZhbHVlKiB2YWx1ZSwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCBNZWRpCiAKIHN0YXRpYyBib29sIG51bWJlclZhbHVlKENTU1ZhbHVlKiB2YWx1ZSwgZmxv
YXQmIHJlc3VsdCkKIHsKLSAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKQotICAgICAg
ICAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+aXNOdW1iZXIoKSkgewotICAgICAgICBy
ZXN1bHQgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+Z2V0RmxvYXRWYWx1ZShDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpCisgICAgICAgICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlz
TnVtYmVyKCkpIHsKKyAgICAgICAgcmVzdWx0ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSkuZ2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNDYsOCAr
MjQ2LDggQEAgc3RhdGljIGJvb2wgb3JpZW50YXRpb25NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVl
KiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXIKIAogICAgIGludCB3aWR0aCA9IHZpZXct
PmxheW91dFdpZHRoKCk7CiAgICAgaW50IGhlaWdodCA9IHZpZXctPmxheW91dEhlaWdodCgpOwot
ICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgIGNv
bnN0IENTU1ZhbHVlSUQgaWQgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+Z2V0VmFsdWVJ
RCgpOworICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CisgICAgICAgIGNv
bnN0IENTU1ZhbHVlSUQgaWQgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5n
ZXRWYWx1ZUlEKCk7CiAgICAgICAgIGlmICh3aWR0aCA+IGhlaWdodCkgLy8gU3F1YXJlIHZpZXdw
b3J0IGlzIHBvcnRyYWl0LgogICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlTGFuZHNjYXBlID09
IGlkOwogICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb3J0cmFpdCA9PSBpZDsKQEAgLTMwOCwyMiAr
MzA4LDIyIEBAIHN0YXRpYyBib29sIGV2YWxSZXNvbHV0aW9uKENTU1ZhbHVlKiB2YWx1ZSwgRnJh
bWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiAgICAgaWYgKCF2YWx1ZSkKICAgICAg
ICAgcmV0dXJuICEhZGV2aWNlU2NhbGVGYWN0b3I7CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHJlc29sdXRpb24g
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICByZXR1cm4gY29tcGFyZVZhbHVlKGRl
dmljZVNjYWxlRmFjdG9yLCByZXNvbHV0aW9uLT5pc051bWJlcigpID8gcmVzb2x1dGlvbi0+Z2V0
RmxvYXRWYWx1ZSgpIDogcmVzb2x1dGlvbi0+Z2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX0RQUFgpLCBvcCk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHJlc29sdXRpb24gPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICByZXR1cm4gY29tcGFyZVZh
bHVlKGRldmljZVNjYWxlRmFjdG9yLCByZXNvbHV0aW9uLmlzTnVtYmVyKCkgPyByZXNvbHV0aW9u
LmdldEZsb2F0VmFsdWUoKSA6IHJlc29sdXRpb24uZ2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0RQUFgpLCBvcCk7CiB9CiAKIHN0YXRpYyBib29sIGRldmljZV9waXhlbF9yYXRp
b01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUgKnZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZl
cnNpb25EYXRhJiwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0gICAg
cmV0dXJuICghdmFsdWUgfHwgdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSktPmlzTnVtYmVyKCkp
ICYmIGV2YWxSZXNvbHV0aW9uKHZhbHVlLCBmcmFtZSwgb3ApOworICAgIHJldHVybiAoIXZhbHVl
IHx8IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzTnVtYmVyKCkpICYmIGV2
YWxSZXNvbHV0aW9uKHZhbHVlLCBmcmFtZSwgb3ApOwogfQogCiBzdGF0aWMgYm9vbCByZXNvbHV0
aW9uTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEmLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKICNp
ZiBFTkFCTEUoUkVTT0xVVElPTl9NRURJQV9RVUVSWSkKLSAgICByZXR1cm4gKCF2YWx1ZSB8fCB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+aXNSZXNvbHV0aW9uKCkpICYmIGV2YWxSZXNvbHV0
aW9uKHZhbHVlLCBmcmFtZSwgb3ApOworICAgIHJldHVybiAoIXZhbHVlIHx8IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzUmVzb2x1dGlvbigpKSAmJiBldmFsUmVzb2x1dGlv
bih2YWx1ZSwgZnJhbWUsIG9wKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0oZnJhbWUpOwpAQCAtMzQ0LDE4ICszNDQsMTggQEAgc3RhdGljIGJvb2wg
Z3JpZE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXQKIAogc3RhdGljIGJvb2wgY29tcHV0ZUxlbmd0aChDU1NWYWx1ZSogdmFsdWUs
IGJvb2wgc3RyaWN0LCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9u
RGF0YSwgaW50JiByZXN1bHQpCiB7Ci0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NT
UHJpbWl0aXZlVmFsdWUodmFsdWUpOworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogCi0gICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7Ci0gICAgICAgIHJlc3VsdCA9IHByaW1pdGl2ZVZh
bHVlLT5nZXRJbnRWYWx1ZSgpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpKSB7
CisgICAgICAgIHJlc3VsdCA9IHByaW1pdGl2ZVZhbHVlLmdldEludFZhbHVlKCk7CiAgICAgICAg
IHJldHVybiAhc3RyaWN0IHx8ICFyZXN1bHQ7CiAgICAgfQogCi0gICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc0xlbmd0aCgpKSB7Ci0gICAgICAgIHJlc3VsdCA9IHByaW1pdGl2ZVZhbHVlLT5jb21w
dXRlTGVuZ3RoPGludD4oY29udmVyc2lvbkRhdGEpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS5p
c0xlbmd0aCgpKSB7CisgICAgICAgIHJlc3VsdCA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5n
dGg8aW50Pihjb252ZXJzaW9uRGF0YSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApA
QCAtNTkzLDcgKzU5Myw3IEBAIHN0YXRpYyBib29sIHZpZXdfbW9kZU1lZGlhRmVhdHVyZUV2YWwo
Q1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpCiAgICAgaWYgKCF2YWx1
ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBjb25zdCBpbnQgdmlld01vZGVDU1NLZXl3
b3JkSUQgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+Z2V0VmFsdWVJRCgpOworICAgIGNv
bnN0IGludCB2aWV3TW9kZUNTU0tleXdvcmRJRCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqdmFsdWUpLmdldFZhbHVlSUQoKTsKICAgICBjb25zdCBQYWdlOjpWaWV3TW9kZSB2aWV3TW9k
ZSA9IGZyYW1lLT5wYWdlKCktPnZpZXdNb2RlKCk7CiAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsK
ICAgICBzd2l0Y2ggKHZpZXdNb2RlKSB7CkBAIC02ODgsMTAgKzY4OCwxMCBAQCBzdGF0aWMgYm9v
bCBwb2ludGVyTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVu
Z3RoQ29udmVyc2lvbgogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBwb2ludGVyICE9
IE5vUG9pbnRlcjsKIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBp
ZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBjb25zdCBDU1NWYWx1ZUlEIGlkID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSkt
PmdldFZhbHVlSUQoKTsKKyAgICBjb25zdCBDU1NWYWx1ZUlEIGlkID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpOwogICAgIHJldHVybiAocG9pbnRlciA9
PSBOb1BvaW50ZXIgJiYgaWQgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICB8fCAocG9pbnRlciA9
PSBUb3VjaFBvaW50ZXIgJiYgaWQgPT0gQ1NTVmFsdWVDb2Fyc2UpCiAgICAgICAgIHx8IChwb2lu
dGVyID09IE1vdXNlUG9pbnRlciAmJiBpZCA9PSBDU1NWYWx1ZUZpbmUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IGZhNDMyMWU4YjdiYjQ0YjlhN2I2
ZTE0N2FlMjIyMWIzNDkwYTdlMjIuLjY4NTQ5NDU5MTdjNmU0OTE2OGU0ZDJjZmFjZGUwZmRlYzc2
ZGYzMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9y
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAg
LTEwMyw5ICsxMDMsOSBAQCBzdGF0aWMgQ29sb3IgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShT
VkdDb2xvciogc3ZnQ29sb3IsIGNvbnN0IENvbG9yJiBmZ0NvbG9yKQogdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkK
IHsKICAgICBBU1NFUlQodmFsdWUpOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IDA7Ci0gICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHBy
aW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gbnVsbHB0cjsKKyAgICBpZiAoaXM8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSkpCisgICAgICAgIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKIAogICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3Rh
dGU7CiAgICAgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gc3RhdGUuc3R5bGUoKS0+YWNjZXNz
U1ZHU3R5bGUoKTsKQEAgLTIwOCwxMyArMjA4LDEzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAg
ICAgICAvLyAnbm9ybWFsJyBpcyB0aGUgb25seSBwcmltaXRpdmVWYWx1ZQogICAgICAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgICAgIHN2Z1N0eWxlLnNldFBhaW50T3Jk
ZXIoUGFpbnRPcmRlck5vcm1hbCk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlz
dCgpKQorICAgICAgICAgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIG9yZGVyVHlwZUxpc3Qg
PSB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSk7CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIG9yZGVy
VHlwZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CiAKICAgICAgICAgICAg
IC8vIFNlcmlhbGl6YXRpb24gaGFwcGVuZWQgZHVyaW5nIHBhcnNpbmcuIE5vIGFkZGl0aW9uYWwg
Y2hlY2tpbmcgbmVlZGVkLgotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gb3JkZXJUeXBl
TGlzdC0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0
aXZlVmFsdWUob3JkZXJUeXBlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7CisgICAg
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBvcmRlclR5cGVMaXN0Lmxlbmd0aCgpOworICAgICAg
ICAgICAgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4ob3JkZXJU
eXBlTGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsKICAgICAgICAgICAgIFBhaW50T3Jk
ZXIgcGFpbnRPcmRlcjsKICAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldFZh
bHVlSUQoKSkgewogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUZpbGw6CkBAIC0yNjYsOSArMjY2
LDkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBzdmdTdHlsZS5zZXRGaWxsUGFp
bnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRUeXBlKCksIFNWR1JlbmRlclN0eWxl
Ojppbml0aWFsRmlsbFBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFp
bnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR1BhaW50KCkpIHsKLSAgICAgICAgICAgICAg
ICBTVkdQYWludCogc3ZnUGFpbnQgPSB0b1NWR1BhaW50KHZhbHVlKTsKLSAgICAgICAgICAgICAg
ICBzdmdTdHlsZS5zZXRGaWxsUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21T
VkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFp
bnQtPnVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRv
VmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgIGlmIChpczxTVkdQYWludD4oKnZhbHVl
KSkgeworICAgICAgICAgICAgICAgIFNWR1BhaW50JiBzdmdQYWludCA9IGRvd25jYXN0PFNWR1Bh
aW50PigqdmFsdWUpOworICAgICAgICAgICAgICAgIHN2Z1N0eWxlLnNldEZpbGxQYWludChzdmdQ
YWludC5wYWludFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZSgmc3ZnUGFpbnQsIHN0
YXRlLnN0eWxlKCktPmNvbG9yKCkpLCBzdmdQYWludC51cmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVn
dWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjgzLDMwICsyODMsMzAg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICBzdmdTdHlsZS5zZXRTdHJva2VQYWlu
dChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50VHlwZSgpLCBTVkdSZW5kZXJTdHls
ZTo6aW5pdGlhbFN0cm9rZVBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJv
a2VQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0
eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkgewotICAgICAgICAg
ICAgICAgIFNWR1BhaW50KiBzdmdQYWludCA9IHRvU1ZHUGFpbnQodmFsdWUpOwotICAgICAgICAg
ICAgICAgIHN2Z1N0eWxlLnNldFN0cm9rZVBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29s
b3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSks
IHN2Z1BhaW50LT51cmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJv
cGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CisgICAgICAgICAgICBpZiAoaXM8U1ZHUGFpbnQ+
KCp2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBTVkdQYWludCYgc3ZnUGFpbnQgPSBkb3duY2Fz
dDxTVkdQYWludD4oKnZhbHVlKTsKKyAgICAgICAgICAgICAgICBzdmdTdHlsZS5zZXRTdHJva2VQ
YWludChzdmdQYWludC5wYWludFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZSgmc3Zn
UGFpbnQsIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpLCBzdmdQYWludC51cmkoKSwgYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5U3Ryb2tlRGFzaGFycmF5OgogICAgICAgICB7CiAgICAgICAgICAgICBI
QU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChzdHJva2VEYXNoQXJyYXksIFN0cm9rZURhc2hBcnJh
eSkKLSAgICAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKKyAgICAgICAgICAg
IGlmICghaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgc3ZnU3R5
bGUuc2V0U3Ryb2tlRGFzaEFycmF5KFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlRGFzaEFy
cmF5KCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBDU1NWYWx1ZUxpc3QqIGRhc2hlcyA9IHRvQ1NTVmFsdWVMaXN0KHZhbHVlKTsKKyAgICAg
ICAgICAgIENTU1ZhbHVlTGlzdCYgZGFzaGVzID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFs
dWUpOwogCiAgICAgICAgICAgICBWZWN0b3I8U1ZHTGVuZ3RoPiBhcnJheTsKLSAgICAgICAgICAg
IHNpemVfdCBsZW5ndGggPSBkYXNoZXMtPmxlbmd0aCgpOworICAgICAgICAgICAgc2l6ZV90IGxl
bmd0aCA9IGRhc2hlcy5sZW5ndGgoKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0g
ZGFzaGVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwotICAgICAgICAgICAgICAgIGlmICgh
Y3VyclZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgQ1NTVmFsdWUq
IGN1cnJWYWx1ZSA9IGRhc2hlcy5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAg
ICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCpjdXJyVmFsdWUpKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBkYXNoID0gdG9DU1NQcmltaXRpdmVWYWx1ZShkYXNoZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soaSkpOworICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBkYXNoID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGRhc2hlcy5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsK
ICAgICAgICAgICAgICAgICBhcnJheS5hcHBlbmQoU1ZHTGVuZ3RoOjpmcm9tQ1NTUHJpbWl0aXZl
VmFsdWUoZGFzaCkpOwogICAgICAgICAgICAgfQogCkBAIC00OTEsMTUgKzQ5MSwxNSBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUqIHZhbHVlKQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3RvcENvbG9yOgogICAgICAgICB7
CiAgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChzdG9wQ29sb3IsIFN0b3BD
b2xvcik7Ci0gICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZHQ29sb3IoKSkKLSAgICAgICAgICAg
ICAgICBzdmdTdHlsZS5zZXRTdG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZSh0b1NW
R0NvbG9yKHZhbHVlKSwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSkpOworICAgICAgICAgICAgaWYg
KGlzPFNWR0NvbG9yPigqdmFsdWUpKQorICAgICAgICAgICAgICAgIHN2Z1N0eWxlLnNldFN0b3BD
b2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKGRvd25jYXN0PFNWR0NvbG9yPih2YWx1ZSks
IHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpZ2h0aW5nQ29sb3I6CiAgICAgICAgIHsKICAgICAg
ICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGxpZ2h0aW5nQ29sb3IsIExpZ2h0aW5n
Q29sb3IpOwotICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAgICAgICAg
ICAgICAgc3ZnU3R5bGUuc2V0TGlnaHRpbmdDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVl
KHRvU1ZHQ29sb3IodmFsdWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSk7CisgICAgICAgICAg
ICBpZiAoaXM8U1ZHQ29sb3I+KCp2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3ZnU3R5bGUuc2V0
TGlnaHRpbmdDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKGRvd25jYXN0PFNWR0NvbG9y
Pih2YWx1ZSksIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGbG9vZE9wYWNpdHk6CkBAIC01MjMs
OCArNTIzLDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZsb29k
Q29sb3I6CiAgICAgICAgIHsKICAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFM
KGZsb29kQ29sb3IsIEZsb29kQ29sb3IpOwotICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0Nv
bG9yKCkpCi0gICAgICAgICAgICAgICAgc3ZnU3R5bGUuc2V0Rmxvb2RDb2xvcihjb2xvckZyb21T
VkdDb2xvckNTU1ZhbHVlKHRvU1ZHQ29sb3IodmFsdWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigp
KSk7CisgICAgICAgICAgICBpZiAoaXM8U1ZHQ29sb3I+KCp2YWx1ZSkpCisgICAgICAgICAgICAg
ICAgc3ZnU3R5bGUuc2V0Rmxvb2RDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKGRvd25j
YXN0PFNWR0NvbG9yPih2YWx1ZSksIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlwaE9yaWVu
dGF0aW9uSG9yaXpvbnRhbDoKQEAgLTU3MSwyNyArNTcxLDI3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgICAgICBpZiAoaXNJbml0aWFsIHx8IHByaW1pdGl2ZVZhbHVlKSAvLyBpbml0aWFsIHwg
bm9uZQogICAgICAgICAgICAgICAgIHJldHVybiBzdmdTdHlsZS5zZXRTaGFkb3cobnVsbHB0cik7
CiAKLSAgICAgICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgICAgICBp
ZiAoIWlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHRvQ1NTVmFsdWVMaXN0KHZhbHVlKTsK
LSAgICAgICAgICAgIGlmICghbGlzdC0+bGVuZ3RoKCkpCisgICAgICAgICAgICBDU1NWYWx1ZUxp
c3QmIGxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CisgICAgICAgICAgICBp
ZiAoIWxpc3QubGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAg
ICBDU1NWYWx1ZSogZmlyc3RWYWx1ZSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCk7
Ci0gICAgICAgICAgICBpZiAoIWZpcnN0VmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKKyAgICAgICAg
ICAgIENTU1ZhbHVlKiBmaXJzdFZhbHVlID0gbGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDAp
OworICAgICAgICAgICAgaWYgKCFpczxDU1NTaGFkb3dWYWx1ZT4oKmZpcnN0VmFsdWUpKQogICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIENTU1NoYWRvd1ZhbHVlKiBpdGVtID0g
dG9DU1NTaGFkb3dWYWx1ZShmaXJzdFZhbHVlKTsKLSAgICAgICAgICAgIEludFBvaW50IGxvY2F0
aW9uKGl0ZW0tPngtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNp
b25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpLAotICAgICAgICAgICAgICAgIGl0
ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRh
KCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpKTsKLSAgICAgICAgICAgIGludCBibHVyID0g
aXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xl
bmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpIDogMDsKKyAg
ICAgICAgICAgIENTU1NoYWRvd1ZhbHVlJiBpdGVtID0gZG93bmNhc3Q8Q1NTU2hhZG93VmFsdWU+
KCpmaXJzdFZhbHVlKTsKKyAgICAgICAgICAgIEludFBvaW50IGxvY2F0aW9uKGl0ZW0ueC0+Y29t
cHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0
aEFkanVzdGVkWm9vbSgxLjBmKSksCisgICAgICAgICAgICAgICAgaXRlbS55LT5jb21wdXRlTGVu
Z3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0
ZWRab29tKDEuMGYpKSk7CisgICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0uYmx1ciA/IGl0ZW0u
Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEo
KS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSkgOiAwOwogICAgICAgICAgICAgQ29sb3IgY29s
b3I7Ci0gICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCi0gICAgICAgICAgICAgICAgY29sb3Ig
PSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CisgICAgICAgICAg
ICBpZiAoaXRlbS5jb2xvcikKKyAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1p
dGl2ZVZhbHVlKGl0ZW0uY29sb3IuZ2V0KCkpOwogCiAgICAgICAgICAgICAvLyAtd2Via2l0LXN2
Zy1zaGFkb3cgZG9lcyBzaG91bGQgbm90IGhhdmUgYSBzcHJlYWQgb3Igc3R5bGUKLSAgICAgICAg
ICAgIEFTU0VSVCghaXRlbS0+c3ByZWFkKTsKLSAgICAgICAgICAgIEFTU0VSVCghaXRlbS0+c3R5
bGUpOworICAgICAgICAgICAgQVNTRVJUKCFpdGVtLnNwcmVhZCk7CisgICAgICAgICAgICBBU1NF
UlQoIWl0ZW0uc3R5bGUpOwogCiAgICAgICAgICAgICBhdXRvIHNoYWRvd0RhdGEgPSBzdGQ6Om1h
a2VfdW5pcXVlPFNoYWRvd0RhdGE+KGxvY2F0aW9uLCBibHVyLCAwLCBOb3JtYWwsIGZhbHNlLCBj
b2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCk7CiAgICAgICAgICAg
ICBzdmdTdHlsZS5zZXRTaGFkb3coV1RGOjptb3ZlKHNoYWRvd0RhdGEpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU291cmNlU2l6ZUxpc3QuY3BwCmluZGV4IDdkODYyZTFkNTg0MzhkNWIwOGU0ZWMwZWU3OGQy
YWU1NGRlNTMyZTguLjg4ODdiY2VkOGRjYmY0Y2JmNjJiMTAwYWRmOTJlODI2YWY0N2RmYzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1NvdXJjZVNpemVMaXN0LmNwcApAQCAtNjAsNyArNjAsNyBAQCBzdGF0
aWMgdW5zaWduZWQgY29tcHV0ZUxlbmd0aChDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFJlbmRlclN0
eWxlJiBzdHlsZSwgUmVuZGVyVgogICAgICAgICB9CiAgICAgfQogICAgIFJlZlB0cjxDU1NWYWx1
ZT4gY3NzVmFsdWUgPSB2YWx1ZS5jcmVhdGVDU1NWYWx1ZSgpOwotICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGNzc1ZhbHVl
LmdldCgpKTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHByaW1pdGl2ZVZhbHVlID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGNzc1ZhbHVlLmdldCgpKTsKICAgICByZXR1cm4g
cHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8dW5zaWduZWQ+KGNvbnZlcnNpb25EYXRhKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcAppbmRleCA2ZDJmZGNlMjFk
ZjE2ZWVjMWQ1MGQyNjU1ZWI0MGM0NTA5OWJkMmIyLi5mOGVhNDBkNDlhZDBlNTY0OTRhODBhZDFj
YWNkZjBlZjBkNTE0ODI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9w
ZXJ0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcApA
QCAtMzYzLDcgKzM2Myw3IEBAIFN0cmluZyBTdHlsZVByb3BlcnRpZXM6OmdldExheWVyZWRTaG9y
dGhhbmRWYWx1ZShjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBzCiAgICAgICAgIHZhbHVl
c1tpXSA9IGdldFByb3BlcnR5Q1NTVmFsdWUoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtpXSk7CiAg
ICAgICAgIGlmICh2YWx1ZXNbaV0pIHsKICAgICAgICAgICAgIGlmICh2YWx1ZXNbaV0tPmlzQmFz
ZVZhbHVlTGlzdCgpKQotICAgICAgICAgICAgICAgIG51bUxheWVycyA9IHN0ZDo6bWF4KHRvQ1NT
VmFsdWVMaXN0KHZhbHVlc1tpXS5nZXQoKSktPmxlbmd0aCgpLCBudW1MYXllcnMpOworICAgICAg
ICAgICAgICAgIG51bUxheWVycyA9IHN0ZDo6bWF4KGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZh
bHVlc1tpXSkubGVuZ3RoKCksIG51bUxheWVycyk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgbnVtTGF5ZXJzID0gc3RkOjptYXg8c2l6ZV90PigxVSwgbnVtTGF5ZXJzKTsKICAg
ICAgICAgfQpAQCAtMzg0LDcgKzM4NCw3IEBAIFN0cmluZyBTdHlsZVByb3BlcnRpZXM6OmdldExh
eWVyZWRTaG9ydGhhbmRWYWx1ZShjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBzCiAgICAg
ICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOwogICAgICAgICAgICAgaWYgKHZhbHVlc1tq
XSkgewogICAgICAgICAgICAgICAgIGlmICh2YWx1ZXNbal0tPmlzQmFzZVZhbHVlTGlzdCgpKQot
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvQ1NTVmFsdWVMaXN0KHZhbHVlc1tqXS5nZXQo
KSktPml0ZW0oaSk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZG93bmNhc3Q8Q1NTVmFs
dWVMaXN0PigqdmFsdWVzW2pdKS5pdGVtKGkpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlc1tqXTsKIApAQCAtNDA4LDE2ICs0MDgsMTYg
QEAgU3RyaW5nIFN0eWxlUHJvcGVydGllczo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGNvbnN0
IFN0eWxlUHJvcGVydHlTaG9ydGhhbmQmIHMKICAgICAgICAgICAgICAgICAgICAgfHwgKGogPCBz
aXplIC0gMSAmJiBzaG9ydGhhbmQucHJvcGVydGllcygpW2ogKyAxXSA9PSBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tSZXBlYXRZICYmIHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8
Q1NTVmFsdWU+IHlWYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBu
ZXh0VmFsdWUgPSB2YWx1ZXNbaiArIDFdOwotICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFZh
bHVlLT5pc1ZhbHVlTGlzdCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgeVZhbHVlID0gdG9D
U1NWYWx1ZUxpc3QobmV4dFZhbHVlLmdldCgpKS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKm5leHRWYWx1ZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICB5VmFsdWUgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpu
ZXh0VmFsdWUpLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CiAgICAgICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHlWYWx1ZSA9IG5leHRWYWx1ZTsKIAotICAg
ICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgfHwgIXlWYWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWlzPENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpIHx8ICFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnlWYWx1ZSkp
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAgICAg
ICBDU1NWYWx1ZUlEIHhJZCA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUuZ2V0KCkpLT5nZXRW
YWx1ZUlEKCk7Ci0gICAgICAgICAgICAgICAgICAgIENTU1ZhbHVlSUQgeUlkID0gdG9DU1NQcmlt
aXRpdmVWYWx1ZSh5VmFsdWUuZ2V0KCkpLT5nZXRWYWx1ZUlEKCk7CisgICAgICAgICAgICAgICAg
ICAgIENTU1ZhbHVlSUQgeElkID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSku
Z2V0VmFsdWVJRCgpOworICAgICAgICAgICAgICAgICAgICBDU1NWYWx1ZUlEIHlJZCA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqeVZhbHVlKS5nZXRWYWx1ZUlEKCk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICh4SWQgIT0geUlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
eElkID09IENTU1ZhbHVlUmVwZWF0ICYmIHlJZCA9PSBDU1NWYWx1ZU5vUmVwZWF0KSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXNlUmVwZWF0WFNob3J0aGFuZCA9IHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggMmYyZGZjNjE3YmQxYzQxNWQxZjQwNzFh
NGRmMTQ5NzE3Yzk4YTAyOC4uMzYxMGFiOTBhM2I5NGYzMWVhMTUyOThmYjlkMjM1MmQ2ZDM3YTQz
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMTY0MywxMyArMTY0Mywx
MyBAQCB2b2lkIGV4dHJhY3REaXJlY3Rpb25BbmRXcml0aW5nTW9kZShjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IFN0eWxlUmVzb2x2ZQogICAgICAgICAgICAgc3dpdGNoIChwcm9wZXJ0
eS5pZCgpKSB7CiAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3JpdGluZ01vZGU6
CiAgICAgICAgICAgICAgICAgaWYgKCFoYWRJbXBvcnRhbnRXZWJraXRXcml0aW5nTW9kZSB8fCBw
cm9wZXJ0eS5pc0ltcG9ydGFudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRpbmdNb2Rl
ID0gdG9DU1NQcmltaXRpdmVWYWx1ZSgqcHJvcGVydHkudmFsdWUoKSk7CisgICAgICAgICAgICAg
ICAgICAgIHdyaXRpbmdNb2RlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpwcm9wZXJ0
eS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaGFkSW1wb3J0YW50V2Via2l0V3JpdGlu
Z01vZGUgPSBwcm9wZXJ0eS5pc0ltcG9ydGFudCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246
CiAgICAgICAgICAgICAgICAgaWYgKCFoYWRJbXBvcnRhbnREaXJlY3Rpb24gfHwgcHJvcGVydHku
aXNJbXBvcnRhbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSB0b0NTU1By
aW1pdGl2ZVZhbHVlKCpwcm9wZXJ0eS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZGly
ZWN0aW9uID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpwcm9wZXJ0eS52YWx1ZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgaGFkSW1wb3J0YW50RGlyZWN0aW9uID0gcHJvcGVydHkuaXNJ
bXBvcnRhbnQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0xOTMxLDIyICsxOTMxLDIyIEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgo
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBjb25zdCBTdHlsCiAKIHN0YXRpYyBi
b29sIGNyZWF0ZUdyaWRUcmFja1NpemUoQ1NTVmFsdWUqIHZhbHVlLCBHcmlkVHJhY2tTaXplJiB0
cmFja1NpemUsIGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAo
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICBpZiAoaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUm
IHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAg
ICAgICAgIEdyaWRMZW5ndGggd29ya2luZ0xlbmd0aDsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlk
VHJhY2tCcmVhZHRoKHByaW1pdGl2ZVZhbHVlLCBzdGF0ZSwgd29ya2luZ0xlbmd0aCkpCisgICAg
ICAgIGlmICghY3JlYXRlR3JpZFRyYWNrQnJlYWR0aCgmcHJpbWl0aXZlVmFsdWUsIHN0YXRlLCB3
b3JraW5nTGVuZ3RoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICB0cmFj
a1NpemUuc2V0TGVuZ3RoKHdvcmtpbmdMZW5ndGgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKLSAgICBDU1NGdW5jdGlvblZhbHVlKiBtaW5tYXhGdW5jdGlvbiA9IHRvQ1NTRnVuY3Rp
b25WYWx1ZSh2YWx1ZSk7Ci0gICAgQ1NTVmFsdWVMaXN0KiBhcmd1bWVudHMgPSBtaW5tYXhGdW5j
dGlvbi0+YXJndW1lbnRzKCk7CisgICAgQ1NTRnVuY3Rpb25WYWx1ZSYgbWlubWF4RnVuY3Rpb24g
PSBkb3duY2FzdDxDU1NGdW5jdGlvblZhbHVlPigqdmFsdWUpOworICAgIENTU1ZhbHVlTGlzdCog
YXJndW1lbnRzID0gbWlubWF4RnVuY3Rpb24uYXJndW1lbnRzKCk7CiAgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oYXJndW1lbnRzLT5sZW5ndGgoKSA9PSAyKTsKICAgICBHcmlk
TGVuZ3RoIG1pblRyYWNrQnJlYWR0aDsKICAgICBHcmlkTGVuZ3RoIG1heFRyYWNrQnJlYWR0aDsK
LSAgICBpZiAoIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgodG9DU1NQcmltaXRpdmVWYWx1ZShhcmd1
bWVudHMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpLCBzdGF0ZSwgbWluVHJhY2tCcmVhZHRo
KSB8fCAhY3JlYXRlR3JpZFRyYWNrQnJlYWR0aCh0b0NTU1ByaW1pdGl2ZVZhbHVlKGFyZ3VtZW50
cy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSksIHN0YXRlLCBtYXhUcmFja0JyZWFkdGgpKQor
ICAgIGlmICghY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oYXJndW1lbnRzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKSwgc3RhdGUsIG1pblRyYWNr
QnJlYWR0aCkgfHwgIWNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KGFyZ3VtZW50cy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSksIHN0YXRlLCBtYXhU
cmFja0JyZWFkdGgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB0cmFja1NpemUuc2V0
TWluTWF4KG1pblRyYWNrQnJlYWR0aCwgbWF4VHJhY2tCcmVhZHRoKTsKQEAgLTE5NTYsOSArMTk1
Niw5IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja1NpemUoQ1NTVmFsdWUqIHZhbHVlLCBH
cmlkVHJhY2tTaXplJiB0cmFja1NpemUsIGNvbnN0CiBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJh
Y2tMaXN0KENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPEdyaWRUcmFja1NpemU+JiB0cmFja1NpemVz
LCBOYW1lZEdyaWRMaW5lc01hcCYgbmFtZWRHcmlkTGluZXMsIE9yZGVyZWROYW1lZEdyaWRMaW5l
c01hcCYgb3JkZXJlZE5hbWVkR3JpZExpbmVzLCBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYg
c3RhdGUpCiB7CiAgICAgLy8gSGFuZGxlICdub25lJy4KLSAgICBpZiAodmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSkgewotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZh
bHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lOworICAgIGlmIChpczxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZl
VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgcmV0
dXJuIHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmU7CiAgICAgfQog
CiAgICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKQEAgLTE5NjcsMTAgKzE5NjcsMTAgQEAg
c3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrTGlzdChDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxH
cmlkVHJhY2tTaXplPiYgdHJhY2tTaXoKICAgICBzaXplX3QgY3VycmVudE5hbWVkR3JpZExpbmUg
PSAwOwogICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUo
KTsgaS5hZHZhbmNlKCkpIHsKICAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUo
KTsKLSAgICAgICAgaWYgKGN1cnJWYWx1ZS0+aXNHcmlkTGluZU5hbWVzVmFsdWUoKSkgewotICAg
ICAgICAgICAgQ1NTR3JpZExpbmVOYW1lc1ZhbHVlKiBsaW5lTmFtZXNWYWx1ZSA9IHRvQ1NTR3Jp
ZExpbmVOYW1lc1ZhbHVlKGN1cnJWYWx1ZSk7Ci0gICAgICAgICAgICBmb3IgKENTU1ZhbHVlTGlz
dEl0ZXJhdG9yIGogPSBsaW5lTmFtZXNWYWx1ZTsgai5oYXNNb3JlKCk7IGouYWR2YW5jZSgpKSB7
Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5hbWVkR3JpZExpbmUgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKGoudmFsdWUoKSktPmdldFN0cmluZ1ZhbHVlKCk7CisgICAgICAgIGlmIChpczxDU1NHcmlk
TGluZU5hbWVzVmFsdWU+KCpjdXJyVmFsdWUpKSB7CisgICAgICAgICAgICBDU1NHcmlkTGluZU5h
bWVzVmFsdWUmIGxpbmVOYW1lc1ZhbHVlID0gZG93bmNhc3Q8Q1NTR3JpZExpbmVOYW1lc1ZhbHVl
PigqY3VyclZhbHVlKTsKKyAgICAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaiA9
ICZsaW5lTmFtZXNWYWx1ZTsgai5oYXNNb3JlKCk7IGouYWR2YW5jZSgpKSB7CisgICAgICAgICAg
ICAgICAgU3RyaW5nIG5hbWVkR3JpZExpbmUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
ai52YWx1ZSgpKS0+Z2V0U3RyaW5nVmFsdWUoKTsKICAgICAgICAgICAgICAgICBOYW1lZEdyaWRM
aW5lc01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG5hbWVkR3JpZExpbmVzLmFkZChuYW1lZEdyaWRM
aW5lLCBWZWN0b3I8c2l6ZV90PigpKTsKICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlLmFwcGVuZChjdXJyZW50TmFtZWRHcmlkTGluZSk7CiAgICAgICAgICAgICAgICAgT3Jk
ZXJlZE5hbWVkR3JpZExpbmVzTWFwOjpBZGRSZXN1bHQgb3JkZXJlZFJlc3VsdCA9IG9yZGVyZWRO
YW1lZEdyaWRMaW5lcy5hZGQoY3VycmVudE5hbWVkR3JpZExpbmUsIFZlY3RvcjxTdHJpbmc+KCkp
OwpAQCAtMTk5OCwzNyArMTk5OCwzNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkUG9zaXRpb24o
Q1NTVmFsdWUqIHZhbHVlLCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uKQogewogICAgIC8vIFdlIGFj
Y2VwdCB0aGUgc3BlY2lmaWNhdGlvbidzIGdyYW1tYXI6CiAgICAgLy8gYXV0byB8IDxjdXN0b20t
aWRlbnQ+IHwgWyA8aW50ZWdlcj4gJiYgPGN1c3RvbS1pZGVudD4/IF0gfCBbIHNwYW4gJiYgWyA8
aW50ZWdlcj4gfHwgPGN1c3RvbS1pZGVudD4gXSBdCi0gICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpIHsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
dG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVl
PigqdmFsdWUpKSB7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogICAgICAgICAvLyBXZSB0cmFu
c2xhdGUgPGlkZW50PiB0byA8c3RyaW5nPiBkdXJpbmcgcGFyc2luZyBhcyBpdCBtYWtlcyBoYW5k
bGluZyBpdCBzaW1wbGVyLgotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzU3RyaW5nKCkp
IHsKLSAgICAgICAgICAgIHBvc2l0aW9uLnNldE5hbWVkR3JpZEFyZWEocHJpbWl0aXZlVmFsdWUt
PmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNTdHJpbmco
KSkgeworICAgICAgICAgICAgcG9zaXRpb24uc2V0TmFtZWRHcmlkQXJlYShwcmltaXRpdmVWYWx1
ZS5nZXRTdHJpbmdWYWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAKLSAgICAgICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFs
dWVBdXRvKTsKKyAgICAgICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBD
U1NWYWx1ZUF1dG8pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBDU1NWYWx1
ZUxpc3QqIHZhbHVlcyA9IHRvQ1NTVmFsdWVMaXN0KHZhbHVlKTsKLSAgICBBU1NFUlQodmFsdWVz
LT5sZW5ndGgoKSk7CisgICAgQ1NTVmFsdWVMaXN0JiB2YWx1ZXMgPSBkb3duY2FzdDxDU1NWYWx1
ZUxpc3Q+KCp2YWx1ZSk7CisgICAgQVNTRVJUKHZhbHVlcy5sZW5ndGgoKSk7CiAKICAgICBib29s
IGlzU3BhblBvc2l0aW9uID0gZmFsc2U7CiAgICAgaW50IGdyaWRMaW5lTnVtYmVyID0gMDsKICAg
ICBTdHJpbmcgZ3JpZExpbmVOYW1lOwogCi0gICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXQgPSB2
YWx1ZXM7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGN1cnJlbnRWYWx1ZSA9IHRvQ1NTUHJpbWl0
aXZlVmFsdWUoaXQudmFsdWUoKSk7CisgICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXQgPSAmdmFs
dWVzOworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBjdXJyZW50VmFsdWUgPSBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oaXQudmFsdWUoKSk7CiAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+Z2V0VmFs
dWVJRCgpID09IENTU1ZhbHVlU3BhbikgewogICAgICAgICBpc1NwYW5Qb3NpdGlvbiA9IHRydWU7
CiAgICAgICAgIGl0LmFkdmFuY2UoKTsKLSAgICAgICAgY3VycmVudFZhbHVlID0gaXQuaGFzTW9y
ZSgpID8gdG9DU1NQcmltaXRpdmVWYWx1ZShpdC52YWx1ZSgpKSA6IDA7CisgICAgICAgIGN1cnJl
bnRWYWx1ZSA9IGl0Lmhhc01vcmUoKSA/IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdC52
YWx1ZSgpKSA6IG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKGN1cnJlbnRWYWx1ZSAmJiBjdXJy
ZW50VmFsdWUtPmlzTnVtYmVyKCkpIHsKICAgICAgICAgZ3JpZExpbmVOdW1iZXIgPSBjdXJyZW50
VmFsdWUtPmdldEludFZhbHVlKCk7CiAgICAgICAgIGl0LmFkdmFuY2UoKTsKLSAgICAgICAgY3Vy
cmVudFZhbHVlID0gaXQuaGFzTW9yZSgpID8gdG9DU1NQcmltaXRpdmVWYWx1ZShpdC52YWx1ZSgp
KSA6IDA7CisgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGl0Lmhhc01vcmUoKSA/IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPihpdC52YWx1ZSgpKSA6IG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYg
KGN1cnJlbnRWYWx1ZSAmJiBjdXJyZW50VmFsdWUtPmlzU3RyaW5nKCkpIHsKQEAgLTIwNTUsNyAr
MjA1NSw3IEBAIExlbmd0aCBTdHlsZVJlc29sdmVyOjpwYXJzZVNuYXBDb29yZGluYXRlKENTU1By
aW1pdGl2ZVZhbHVlJiB2YWx1ZSkKIAogTGVuZ3RoIFN0eWxlUmVzb2x2ZXI6OnBhcnNlU25hcENv
b3JkaW5hdGUoQ1NTVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIHVuc2lnbmVkIG9mZnNldCkKIHsKLSAg
ICByZXR1cm4gcGFyc2VTbmFwQ29vcmRpbmF0ZSh0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZUxp
c3QuaXRlbShvZmZzZXQpKSk7CisgICAgcmV0dXJuIHBhcnNlU25hcENvb3JkaW5hdGUoZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZUxpc3QuaXRlbShvZmZzZXQpKSk7CiB9CiAKIExl
bmd0aFNpemUgU3R5bGVSZXNvbHZlcjo6cGFyc2VTbmFwQ29vcmRpbmF0ZVBhaXIoQ1NTVmFsdWVM
aXN0JiB2YWx1ZUxpc3QsIHVuc2lnbmVkIG9mZnNldCkKQEAgLTIwNjcsMTQgKzIwNjcsMTQgQEAg
U2Nyb2xsU25hcFBvaW50cyBTdHlsZVJlc29sdmVyOjpwYXJzZVNuYXBQb2ludHMoQ1NTVmFsdWUm
IHZhbHVlKQogewogICAgIFNjcm9sbFNuYXBQb2ludHMgcG9pbnRzOwogCi0gICAgaWYgKHZhbHVl
LmlzUHJpbWl0aXZlVmFsdWUoKSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS5nZXRWYWx1
ZUlEKCkgPT0gQ1NTVmFsdWVFbGVtZW50cykgeworICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkuZ2V0VmFsdWVJ
RCgpID09IENTU1ZhbHVlRWxlbWVudHMpIHsKICAgICAgICAgcG9pbnRzLnVzZXNFbGVtZW50cyA9
IHRydWU7CiAgICAgICAgIHJldHVybiBwb2ludHM7CiAgICAgfQogCiAgICAgcG9pbnRzLmhhc1Jl
cGVhdCA9IGZhbHNlOwogICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXQoJnZhbHVlKTsg
aXQuaGFzTW9yZSgpOyBpdC5hZHZhbmNlKCkpIHsKLSAgICAgICAgYXV0byYgaXRlbVZhbHVlID0g
dG9DU1NQcmltaXRpdmVWYWx1ZSgqaXQudmFsdWUoKSk7CisgICAgICAgIGF1dG8mIGl0ZW1WYWx1
ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaXQudmFsdWUoKSk7CiAgICAgICAgIGlm
IChhdXRvKiBsZW5ndGhSZXBlYXQgPSBpdGVtVmFsdWUuZ2V0TGVuZ3RoUmVwZWF0VmFsdWUoKSkg
ewogICAgICAgICAgICAgaWYgKGF1dG8qIGludGVydmFsID0gbGVuZ3RoUmVwZWF0LT5pbnRlcnZh
bCgpKSB7CiAgICAgICAgICAgICAgICAgcG9pbnRzLnJlcGVhdE9mZnNldCA9IHBhcnNlU25hcENv
b3JkaW5hdGUoKmludGVydmFsKTsKQEAgLTIxMjcsNyArMjEyNyw3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpID8gdG9DU1NQcmltaXRpdmVWYWx1ZSh2
YWx1ZSkgOiAwOworICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IGlzPENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpID8gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKSA6IG51bGxwdHI7CiAKICAgICAvLyBXaGF0IGZvbGxvd3MgaXMgYSBsaXN0IHRoYXQgbWFw
cyB0aGUgQ1NTIHByb3BlcnRpZXMgaW50byB0aGVpciBjb3JyZXNwb25kaW5nIGZyb250LWVuZAog
ICAgIC8vIFJlbmRlclN0eWxlIHZhbHVlcy4KQEAgLTIxNTAsNDggKzIxNTAsNDggQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICAgICAgICAgIGJvb2wgZGlkU2V0ID0gZmFsc2U7CiAgICAgICAgICAgICBmb3Ig
KENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgp
KSB7CiAgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChpdGVtLT5pc0dyYWRpZW50VmFsdWUoKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3Jl
YXRlKCp0b0NTU0dyYWRpZW50VmFsdWUoaXRlbSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVk
KHRoaXMpKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZT4oKml0ZW0pKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpczxDU1NHcmFkaWVu
dFZhbHVlPigqaXRlbSkpCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSgqZG93bmNhc3Q8Q1NTR3JhZGll
bnRWYWx1ZT4oKml0ZW0pLmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpKSwgZGlkU2V0
KTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoKnRvQ1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZShpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0
ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPigqaXRlbSkpLCBkaWRTZXQpOwogICAg
ICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VU
KQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNJbWFnZVNldFZhbHVlKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChzZXRPclBlbmRp
bmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCB0b0NTU0ltYWdlU2V0VmFsdWUoaXRlbSkp
LCBkaWRTZXQpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXM8Q1NTSW1hZ2VTZXRWYWx1
ZT4oKml0ZW0pKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRl
bnQoc2V0T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgZG93bmNhc3Q8Q1NT
SW1hZ2VTZXRWYWx1ZT4oaXRlbSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRT
ZXQgPSB0cnVlOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
aWYgKGl0ZW0tPmlzSW1hZ2VWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldENvbnRlbnQoY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29u
dGVudCwgdG9DU1NJbWFnZVZhbHVlKGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICBp
ZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oKml0ZW0pKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldENvbnRlbnQoY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5
Q29udGVudCwgZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oaXRlbSkpLCBkaWRTZXQpOwogICAgICAg
ICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJp
bWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVl
PigqaXRlbSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGNvbnRlbnRWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUo
aXRlbSk7CisgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGNvbnRlbnRWYWx1ZSA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSk7CiAKLSAgICAgICAgICAgICAgICBp
ZiAoY29udGVudFZhbHVlLT5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldENvbnRlbnQoY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwo
KSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLmlzU3RyaW5nKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChjb250ZW50
VmFsdWUuZ2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAg
ICAgIGRpZFNldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFs
dWUtPmlzQXR0cigpKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUu
aXNBdHRyKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENhbiBhIG5hbWVzcGFj
ZSBiZSBzcGVjaWZpZWQgZm9yIGFuIGF0dHIoZm9vKT8KICAgICAgICAgICAgICAgICAgICAgaWYg
KHN0YXRlLnN0eWxlKCktPnN0eWxlVHlwZSgpID09IE5PUFNFVURPKQogICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VW5pcXVlKCk7CiAgICAgICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnBhcmVudFN0eWxlKCktPnNldFVu
aXF1ZSgpOwotICAgICAgICAgICAgICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0b20s
IGNvbnRlbnRWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsKKyAgICAg
ICAgICAgICAgICAgICAgUXVhbGlmaWVkTmFtZSBhdHRyKG51bGxBdG9tLCBjb250ZW50VmFsdWUu
Z2V0U3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsKICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IHN0YXRlLmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRl
KGF0dHIpOwogICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KHZh
bHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogdmFsdWUuaW1wbCgpLCBkaWRTZXQpOwogICAgICAg
ICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAvLyBSZWdp
c3RlciB0aGUgZmFjdCB0aGF0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgYWZmZWN0cyB0aGUgc3R5bGUu
CiAgICAgICAgICAgICAgICAgICAgIG1fcnVsZVNldHMuZmVhdHVyZXMoKS5hdHRyaWJ1dGVDYW5v
bmljYWxMb2NhbE5hbWVzSW5SdWxlcy5hZGQoYXR0ci5sb2NhbE5hbWUoKS5pbXBsKCkpOwogICAg
ICAgICAgICAgICAgICAgICBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuYXR0cmlidXRlTG9jYWxOYW1l
c0luUnVsZXMuYWRkKGF0dHIubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS0+aXNDb3VudGVyKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgQ291bnRlciogY291bnRlclZhbHVlID0gY29udGVudFZhbHVlLT5nZXRDb3VudGVyVmFsdWUo
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS5pc0NvdW50ZXIoKSkg
eworICAgICAgICAgICAgICAgICAgICBDb3VudGVyKiBjb3VudGVyVmFsdWUgPSBjb250ZW50VmFs
dWUuZ2V0Q291bnRlclZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgIEVMaXN0U3R5bGVUeXBl
IGxpc3RTdHlsZVR5cGUgPSBOb25lTGlzdFN0eWxlOwogICAgICAgICAgICAgICAgICAgICBDU1NW
YWx1ZUlEIGxpc3RTdHlsZUlkZW50ID0gY291bnRlclZhbHVlLT5saXN0U3R5bGVJZGVudCgpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAobGlzdFN0eWxlSWRlbnQgIT0gQ1NTVmFsdWVOb25lKQpA
QCAtMjIwMCw3ICsyMjAwLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0Q29udGVudChXVEY6Om1vdmUoY291bnRlciksIGRpZFNldCk7CiAgICAg
ICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb250ZW50VmFsdWUtPmdldFZhbHVlSUQoKSkg
eworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbnRlbnRWYWx1ZS5nZXRWYWx1ZUlEKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU9wZW5RdW90ZToKICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoT1BFTl9RVU9URSwgZGlk
U2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CkBAIC0yMjU4LDIy
ICsyMjU4LDIyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
UXVvdGVzKDApOworICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UXVvdGVzKG51bGxwdHIp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNW
YWx1ZUxpc3QoKSkgewotICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gdG9DU1NWYWx1
ZUxpc3QodmFsdWUpOworICAgICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7Cisg
ICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIGxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2
YWx1ZSk7CiAgICAgICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gcXVv
dGVzOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5sZW5ndGgoKTsg
aSArPSAyKSB7Ci0gICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGZpcnN0ID0gbGlzdC0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGlzdC5sZW5ndGgoKTsgaSArPSAyKSB7CisgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGZpcnN0
ID0gbGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwogICAgICAgICAgICAgICAgIC8vIGl0
ZW0oKSByZXR1cm5zIG51bGwgaWYgb3V0IG9mIGJvdW5kcyBzbyB0aGlzIGlzIHNhZmUuCi0gICAg
ICAgICAgICAgICAgQ1NTVmFsdWUqIHNlY29uZCA9IGxpc3QtPml0ZW0oaSArIDEpOworICAgICAg
ICAgICAgICAgIENTU1ZhbHVlKiBzZWNvbmQgPSBsaXN0Lml0ZW0oaSArIDEpOwogICAgICAgICAg
ICAgICAgIGlmICghc2Vjb25kKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihmaXJzdC0+aXNQcmlt
aXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihzZWNvbmQtPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgU3Ry
aW5nIHN0YXJ0UXVvdGUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGZpcnN0KS0+Z2V0U3RyaW5nVmFs
dWUoKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZW5kUXVvdGUgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKHNlY29uZCktPmdldFN0cmluZ1ZhbHVlKCk7CisgICAgICAgICAgICAgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCpmaXJzdCkpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlzPENTU1By
aW1pdGl2ZVZhbHVlPigqc2Vjb25kKSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHN0YXJ0UXVv
dGUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmZpcnN0KS5nZXRTdHJpbmdWYWx1ZSgp
OworICAgICAgICAgICAgICAgIFN0cmluZyBlbmRRdW90ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPigqc2Vjb25kKS5nZXRTdHJpbmdWYWx1ZSgpOwogICAgICAgICAgICAgICAgIHF1b3Rl
cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoc3RhcnRRdW90ZSwgZW5kUXVvdGUpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFF1b3RlcyhRdW90ZXNEYXRhOjpj
cmVhdGUocXVvdGVzKSk7CkBAIC0yMzE4LDI0ICsyMzE4LDI0IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZTo6Y29tcHV0
ZWRGb250U2l6ZUZyb21TcGVjaWZpZWRTaXplKGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXpl
KCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSwg
c3RhdGUuc3R5bGUoKSwgZG9jdW1lbnQoKSkpOwogICAgICAgICAgICAgICAgIHNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
aWYgKHZhbHVlLT5pc0ZvbnRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBDU1NGb250VmFsdWUqIGZv
bnQgPSB0b0NTU0ZvbnRWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIWZvbnQtPnN0eWxl
IHx8ICFmb250LT52YXJpYW50IHx8ICFmb250LT53ZWlnaHQKLSAgICAgICAgICAgICAgICB8fCAh
Zm9udC0+c2l6ZSB8fCAhZm9udC0+bGluZUhlaWdodCB8fCAhZm9udC0+ZmFtaWx5KQorICAgICAg
ICB9IGVsc2UgaWYgKGlzPENTU0ZvbnRWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICAgICAgQ1NT
Rm9udFZhbHVlJiBmb250ID0gZG93bmNhc3Q8Q1NTRm9udFZhbHVlPigqdmFsdWUpOworICAgICAg
ICAgICAgaWYgKCFmb250LnN0eWxlIHx8ICFmb250LnZhcmlhbnQgfHwgIWZvbnQud2VpZ2h0Cisg
ICAgICAgICAgICAgICAgfHwgIWZvbnQuc2l6ZSB8fCAhZm9udC5saW5lSGVpZ2h0IHx8ICFmb250
LmZhbWlseSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBhcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlLCBmb250LT5zdHlsZS5nZXQoKSk7Ci0gICAgICAgICAg
ICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIGZvbnQtPnZhcmlhbnQuZ2V0
KCkpOwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGZv
bnQtPndlaWdodC5nZXQoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
Rm9udFN0eWxlLCBmb250LnN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlGb250VmFyaWFudCwgZm9udC52YXJpYW50LmdldCgpKTsKKyAgICAgICAgICAg
IGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBmb250LndlaWdodC5nZXQoKSk7
CiAgICAgICAgICAgICAvLyBUaGUgcHJldmlvdXMgcHJvcGVydGllcyBjYW4gZGlydHkgb3VyIGZv
bnQgYnV0IHRoZXkgZG9uJ3QgdHJ5IHRvIHJlYWQgdGhlIGZvbnQncwogICAgICAgICAgICAgLy8g
cHJvcGVydGllcyBiYWNrLCB3aGljaCBpcyBzYWZlLiBIb3dldmVyIGlmIGZvbnQtc2l6ZSBpcyB1
c2luZyB0aGUgJ2V4JyB1bml0LCBpdCB3aWxsCiAgICAgICAgICAgICAvLyBuZWVkIHF1ZXJ5IHRo
ZSBkaXJ0aWVkIGZvbnQncyB4LWhlaWdodCB0byBnZXQgdGhlIGNvbXB1dGVkIHNpemUuIFRvIGJl
IHNhZmUgaW4gdGhpcwogICAgICAgICAgICAgLy8gY2FzZSwgbGV0J3MganVzdCB1cGRhdGUgdGhl
IGZvbnQgbm93LgogICAgICAgICAgICAgdXBkYXRlRm9udCgpOwotICAgICAgICAgICAgYXBwbHlQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBmb250LT5zaXplLmdldCgpKTsKKyAgICAgICAg
ICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgZm9udC5zaXplLmdldCgpKTsK
IAotICAgICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKGZvbnQtPmxpbmVIZWlnaHQu
Z2V0KCkpOworICAgICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKGZvbnQubGluZUhl
aWdodC5nZXQoKSk7CiAKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250
RmFtaWx5LCBmb250LT5mYW1pbHkuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUZvbnRGYW1pbHksIGZvbnQuZmFtaWx5LmdldCgpKTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm47CiAKQEAgLTI0MDUsMTcgKzI0MDUsMTcgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIAogICAg
ICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGku
YWR2YW5jZSgpKSB7CiAgICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1ZSgp
OwotICAgICAgICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKKyAgICAgICAg
ICAgIGlmICghaXM8Q1NTU2hhZG93VmFsdWU+KCpjdXJyVmFsdWUpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgQ1NTU2hhZG93VmFsdWUqIGl0ZW0gPSB0b0NTU1NoYWRv
d1ZhbHVlKGN1cnJWYWx1ZSk7Ci0gICAgICAgICAgICBpbnQgeCA9IGl0ZW0tPngtPmNvbXB1dGVM
ZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwotICAgICAgICAg
ICAgaW50IHkgPSBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSgpKTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0
ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25E
YXRhKCkpIDogMDsKLSAgICAgICAgICAgIGludCBzcHJlYWQgPSBpdGVtLT5zcHJlYWQgPyBpdGVt
LT5zcHJlYWQtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25E
YXRhKCkpIDogMDsKLSAgICAgICAgICAgIFNoYWRvd1N0eWxlIHNoYWRvd1N0eWxlID0gaXRlbS0+
c3R5bGUgJiYgaXRlbS0+c3R5bGUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUluc2V0ID8gSW5z
ZXQgOiBOb3JtYWw7CisgICAgICAgICAgICBDU1NTaGFkb3dWYWx1ZSYgaXRlbSA9IGRvd25jYXN0
PENTU1NoYWRvd1ZhbHVlPigqY3VyclZhbHVlKTsKKyAgICAgICAgICAgIGludCB4ID0gaXRlbS54
LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsK
KyAgICAgICAgICAgIGludCB5ID0gaXRlbS55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3Nz
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKKyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS5i
bHVyID8gaXRlbS5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSgpKSA6IDA7CisgICAgICAgICAgICBpbnQgc3ByZWFkID0gaXRlbS5zcHJlYWQg
PyBpdGVtLnNwcmVhZC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEoKSkgOiAwOworICAgICAgICAgICAgU2hhZG93U3R5bGUgc2hhZG93U3R5bGUgPSBp
dGVtLnN0eWxlICYmIGl0ZW0uc3R5bGUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUluc2V0ID8g
SW5zZXQgOiBOb3JtYWw7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKLSAgICAgICAgICAgIGlm
IChpdGVtLT5jb2xvcikKLSAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2
ZVZhbHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChpdGVtLmNvbG9yKQor
ICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS5jb2xv
ci5nZXQoKSk7CiAgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS5zdHlsZSgpKQogICAgICAgICAg
ICAgICAgIGNvbG9yID0gc3RhdGUuc3R5bGUoKS0+Y29sb3IoKTsKIApAQCAtMjQzNCwxNyArMjQz
NCwxNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKCF2YWx1ZS0+aXNSZWZsZWN0VmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NS
ZWZsZWN0VmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NT
UmVmbGVjdFZhbHVlKiByZWZsZWN0VmFsdWUgPSB0b0NTU1JlZmxlY3RWYWx1ZSh2YWx1ZSk7Cisg
ICAgICAgIENTU1JlZmxlY3RWYWx1ZSYgcmVmbGVjdFZhbHVlID0gZG93bmNhc3Q8Q1NTUmVmbGVj
dFZhbHVlPigqdmFsdWUpOwogICAgICAgICBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiByZWZsZWN0
aW9uID0gU3R5bGVSZWZsZWN0aW9uOjpjcmVhdGUoKTsKLSAgICAgICAgcmVmbGVjdGlvbi0+c2V0
RGlyZWN0aW9uKCpyZWZsZWN0VmFsdWUtPmRpcmVjdGlvbigpKTsKLSAgICAgICAgaWYgKHJlZmxl
Y3RWYWx1ZS0+b2Zmc2V0KCkpCi0gICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVm
bGVjdFZhbHVlLT5vZmZzZXQoKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNp
b24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdGF0ZS5jc3NU
b0xlbmd0aENvbnZlcnNpb25EYXRhKCkpKTsKKyAgICAgICAgcmVmbGVjdGlvbi0+c2V0RGlyZWN0
aW9uKCpyZWZsZWN0VmFsdWUuZGlyZWN0aW9uKCkpOworICAgICAgICBpZiAocmVmbGVjdFZhbHVl
Lm9mZnNldCgpKQorICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RWYWx1
ZS5vZmZzZXQoKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJj
ZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdGF0ZS5jc3NUb0xlbmd0aENv
bnZlcnNpb25EYXRhKCkpKTsKICAgICAgICAgTmluZVBpZWNlSW1hZ2UgbWFzazsKICAgICAgICAg
bWFzay5zZXRNYXNrRGVmYXVsdHMoKTsKLSAgICAgICAgbV9zdHlsZU1hcC5tYXBOaW5lUGllY2VJ
bWFnZShpZCwgcmVmbGVjdFZhbHVlLT5tYXNrKCksIG1hc2spOworICAgICAgICBtX3N0eWxlTWFw
Lm1hcE5pbmVQaWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUubWFzaygpLCBtYXNrKTsKICAgICAg
ICAgcmVmbGVjdGlvbi0+c2V0TWFzayhtYXNrKTsKIAogICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRCb3hSZWZsZWN0KHJlZmxlY3Rpb24ucmVsZWFzZSgpKTsKQEAgLTI2NjUsMTAgKzI2NjUsMTAg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAg
IGlmICghdmFsdWUtPmlzTGluZUJveENvbnRhaW5WYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENT
U0xpbmVCb3hDb250YWluVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUJveENvbnRhaW4odG9DU1NMaW5lQm94Q29udGFp
blZhbHVlKHZhbHVlKS0+dmFsdWUoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVC
b3hDb250YWluKGRvd25jYXN0PENTU0xpbmVCb3hDb250YWluVmFsdWU+KCp2YWx1ZSkudmFsdWUo
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI2NzksMTkgKzI2NzksMTkgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICgh
dmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqdmFs
dWUpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAg
Q1NTVmFsdWVMaXN0KiBsaXN0ID0gdG9DU1NWYWx1ZUxpc3QodmFsdWUpOworICAgICAgICBDU1NW
YWx1ZUxpc3QmIGxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CiAgICAgICAg
IFJlZlB0cjxGb250RmVhdHVyZVNldHRpbmdzPiBzZXR0aW5ncyA9IEZvbnRGZWF0dXJlU2V0dGlu
Z3M6OmNyZWF0ZSgpOwotICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7Ci0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlKiBp
dGVtID0gbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKLSAgICAgICAgICAgIGlmICgh
aXRlbS0+aXNGb250RmVhdHVyZVZhbHVlKCkpCisgICAgICAgIGludCBsZW5ndGggPSBsaXN0Lmxl
bmd0aCgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsK
KyAgICAgICAgICAgIGlmICghaXM8Q1NTRm9udEZlYXR1cmVWYWx1ZT4oKml0ZW0pKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgQ1NTRm9udEZlYXR1cmVWYWx1ZSogZmVh
dHVyZSA9IHRvQ1NTRm9udEZlYXR1cmVWYWx1ZShpdGVtKTsKLSAgICAgICAgICAgIHNldHRpbmdz
LT5hcHBlbmQoRm9udEZlYXR1cmUoZmVhdHVyZS0+dGFnKCksIGZlYXR1cmUtPnZhbHVlKCkpKTsK
KyAgICAgICAgICAgIENTU0ZvbnRGZWF0dXJlVmFsdWUmIGZlYXR1cmUgPSBkb3duY2FzdDxDU1NG
b250RmVhdHVyZVZhbHVlPigqaXRlbSk7CisgICAgICAgICAgICBzZXR0aW5ncy0+YXBwZW5kKEZv
bnRGZWF0dXJlKGZlYXR1cmUudGFnKCksIGZlYXR1cmUudmFsdWUoKSkpOwogICAgICAgICB9CiAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGZWF0dXJlU2V0dGluZ3Moc2V0dGluZ3MucmVsZWFz
ZSgpKTsKICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CkBAIC0y
ODMwLDggKzI4MzAsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKLSAgICAgICAgQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSogZ3JpZFRlbXBsYXRlQXJl
YXNWYWx1ZSA9IHRvQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGNv
bnN0IE5hbWVkR3JpZEFyZWFNYXAmIG5ld05hbWVkR3JpZEFyZWFzID0gZ3JpZFRlbXBsYXRlQXJl
YXNWYWx1ZS0+Z3JpZEFyZWFNYXAoKTsKKyAgICAgICAgQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1
ZSYgZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSA9IGRvd25jYXN0PENTU0dyaWRUZW1wbGF0ZUFyZWFz
VmFsdWU+KCp2YWx1ZSk7CisgICAgICAgIGNvbnN0IE5hbWVkR3JpZEFyZWFNYXAmIG5ld05hbWVk
R3JpZEFyZWFzID0gZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5ncmlkQXJlYU1hcCgpOwogCiAgICAg
ICAgIE5hbWVkR3JpZExpbmVzTWFwIG5hbWVkR3JpZENvbHVtbkxpbmVzID0gc3RhdGUuc3R5bGUo
KS0+bmFtZWRHcmlkQ29sdW1uTGluZXMoKTsKICAgICAgICAgTmFtZWRHcmlkTGluZXNNYXAgbmFt
ZWRHcmlkUm93TGluZXMgPSBzdGF0ZS5zdHlsZSgpLT5uYW1lZEdyaWRSb3dMaW5lcygpOwpAQCAt
Mjg0MCwyNyArMjg0MCwyNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXROYW1lZEdyaWRDb2x1bW5MaW5lcyhuYW1lZEdyaWRDb2x1bW5MaW5lcyk7CiAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldE5hbWVkR3JpZFJvd0xpbmVzKG5hbWVkR3JpZFJvd0xpbmVzKTsKIAot
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhKGdyaWRUZW1wbGF0ZUFyZWFz
VmFsdWUtPmdyaWRBcmVhTWFwKCkpOwotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXROYW1lZEdy
aWRBcmVhUm93Q291bnQoZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS0+cm93Q291bnQoKSk7Ci0gICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldE5hbWVkR3JpZEFyZWFDb2x1bW5Db3VudChncmlkVGVtcGxh
dGVBcmVhc1ZhbHVlLT5jb2x1bW5Db3VudCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
TmFtZWRHcmlkQXJlYShncmlkVGVtcGxhdGVBcmVhc1ZhbHVlLmdyaWRBcmVhTWFwKCkpOworICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhUm93Q291bnQoZ3JpZFRlbXBsYXRl
QXJlYXNWYWx1ZS5yb3dDb3VudCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TmFtZWRH
cmlkQXJlYUNvbHVtbkNvdW50KGdyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuY29sdW1uQ291bnQoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRB
dXRvRmxvdzogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChncmlkQXV0b0Zs
b3csIEdyaWRBdXRvRmxvdyk7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCisg
ICAgICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSk7Cisg
ICAgICAgIENTU1ZhbHVlTGlzdCYgbGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVl
KTsKIAotICAgICAgICBpZiAoIWxpc3QtPmxlbmd0aCgpKSB7CisgICAgICAgIGlmICghbGlzdC5s
ZW5ndGgoKSkgewogICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0R3JpZEF1dG9GbG93KFJl
bmRlclN0eWxlOjppbml0aWFsR3JpZEF1dG9GbG93KCkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0ID0gdG9DU1NQcmlt
aXRpdmVWYWx1ZShsaXN0LT5pdGVtKDApKTsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNl
Y29uZCA9IGxpc3QtPmxlbmd0aCgpID09IDIgPyB0b0NTU1ByaW1pdGl2ZVZhbHVlKGxpc3QtPml0
ZW0oMSkpIDogbnVsbHB0cjsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGZpcnN0ID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpsaXN0Lml0ZW0oMCkpOworICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogc2Vjb25kID0gbGlzdC5sZW5ndGgoKSA9PSAyID8gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KGxpc3QuaXRlbSgxKSkgOiBudWxscHRyOwogCiAgICAgICAgIEdyaWRBdXRv
RmxvdyBhdXRvRmxvdyA9IFJlbmRlclN0eWxlOjppbml0aWFsR3JpZEF1dG9GbG93KCk7Ci0gICAg
ICAgIHN3aXRjaCAoZmlyc3QtPmdldFZhbHVlSUQoKSkgeworICAgICAgICBzd2l0Y2ggKGZpcnN0
LmdldFZhbHVlSUQoKSkgewogICAgICAgICBjYXNlIENTU1ZhbHVlUm93OgogICAgICAgICAgICAg
aWYgKHNlY29uZCkKICAgICAgICAgICAgICAgICBhdXRvRmxvdyA9IHNlY29uZC0+Z2V0VmFsdWVJ
RCgpID09IENTU1ZhbHVlRGVuc2UgPyBBdXRvRmxvd1Jvd0RlbnNlIDogQXV0b0Zsb3dTdGFja1Jv
dzsKQEAgLTI5MDcsMTIgKzI5MDcsMTIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNjcm9sbFNuYXBEZXN0aW5hdGlvbjogewogICAgICAg
ICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChzY3JvbGxTbmFwRGVzdGluYXRpb24sIFNjcm9s
bFNuYXBEZXN0aW5hdGlvbikKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0U2Nyb2xsU25hcERl
c3RpbmF0aW9uKHBhcnNlU25hcENvb3JkaW5hdGVQYWlyKHRvQ1NTVmFsdWVMaXN0KCp2YWx1ZSks
IDApKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0U2Nyb2xsU25hcERlc3RpbmF0aW9uKHBh
cnNlU25hcENvb3JkaW5hdGVQYWlyKGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKSwgMCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTY3Jv
bGxTbmFwQ29vcmRpbmF0ZTogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChz
Y3JvbGxTbmFwQ29vcmRpbmF0ZXMsIFNjcm9sbFNuYXBDb29yZGluYXRlcykKLSAgICAgICAgQ1NT
VmFsdWVMaXN0JiB2YWx1ZUxpc3QgPSB0b0NTU1ZhbHVlTGlzdCgqdmFsdWUpOworICAgICAgICBD
U1NWYWx1ZUxpc3QmIHZhbHVlTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsK
ICAgICAgICAgQVNTRVJUKCEodmFsdWVMaXN0Lmxlbmd0aCgpICUgMikpOwogICAgICAgICBzaXpl
X3QgcG9pbnRDb3VudCA9IHZhbHVlTGlzdC5sZW5ndGgoKSAvIDI7CiAgICAgICAgIFZlY3RvcjxM
ZW5ndGhTaXplPiBjb29yZGluYXRlczsKQEAgLTMyMjAsMjQgKzMyMjAsMjQgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKIAogUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKENT
U1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSkKIHsKLSAgICBpZiAodmFsdWUt
PmlzSW1hZ2VWYWx1ZSgpKQotICAgICAgICByZXR1cm4gY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVl
KHByb3BlcnR5LCB0b0NTU0ltYWdlVmFsdWUodmFsdWUpKTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VW
YWx1ZT4oKnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShw
cm9wZXJ0eSwgZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4odmFsdWUpKTsKIAotICAgIGlmICh2YWx1
ZS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT5pc0dyYWRp
ZW50VmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFs
dWUocHJvcGVydHksICp0b0NTU0dyYWRpZW50VmFsdWUodmFsdWUpLT5ncmFkaWVudFdpdGhTdHls
ZXNSZXNvbHZlZCh0aGlzKSk7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9t
VmFsdWUocHJvcGVydHksIHRvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSgqdmFsdWUpKTsKKyAgICBp
ZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICBpZiAoaXM8
Q1NTR3JhZGllbnRWYWx1ZT4oKnZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRP
clBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksICpkb3duY2FzdDxDU1NHcmFkaWVudFZhbHVlPigq
dmFsdWUpLmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpKTsKKyAgICAgICAgcmV0dXJu
IGdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgZG93bmNhc3Q8Q1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZT4oKnZhbHVlKSk7CiAgICAgfQogCiAjaWYgRU5BQkxFKENTU19JTUFHRV9T
RVQpCi0gICAgaWYgKHZhbHVlLT5pc0ltYWdlU2V0VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIHNl
dE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgdG9DU1NJbWFnZVNldFZhbHVlKHZhbHVlKSk7
CisgICAgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KCp2YWx1ZSkpCisgICAgICAgIHJldHVybiBz
ZXRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIGRvd25jYXN0PENTU0ltYWdlU2V0VmFsdWU+
KHZhbHVlKSk7CiAjZW5kaWYKIAotICAgIGlmICh2YWx1ZS0+aXNDdXJzb3JJbWFnZVZhbHVlKCkp
Ci0gICAgICAgIHJldHVybiBjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHRvQ1NT
Q3Vyc29ySW1hZ2VWYWx1ZSh2YWx1ZSkpOworICAgIGlmIChpczxDU1NDdXJzb3JJbWFnZVZhbHVl
PigqdmFsdWUpKQorICAgICAgICByZXR1cm4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKHByb3Bl
cnR5LCBkb3duY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlPih2YWx1ZSkpOwogCi0gICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5
bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHksIENTU0ltYWdlVmFsdWUqIHZhbHVlKQpAQCAtMzI1MCw5ICszMjUwLDkgQEAgUGFzc1JlZlB0
cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm8KIAogUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpn
ZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKHZhbHVlLmlzRmlsdGVySW1hZ2VW
YWx1ZSgpKSB7CisgICAgaWYgKGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KHZhbHVlKSkgewogICAg
ICAgICAvLyBGaWx0ZXJJbWFnZSBuZWVkcyB0byBjYWxjdWxhdGUgRmlsdGVyT3BlcmF0aW9ucy4K
LSAgICAgICAgdG9DU1NGaWx0ZXJJbWFnZVZhbHVlKHZhbHVlKS5jcmVhdGVGaWx0ZXJPcGVyYXRp
b25zKHRoaXMpOworICAgICAgICBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPih2YWx1ZSku
Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyh0aGlzKTsKICAgICB9CiAKICAgICBpZiAodmFsdWUuaXNQ
ZW5kaW5nKCkpIHsKQEAgLTM1MTcsOSArMzUxNyw5IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3Jl
YXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgRmlsdGVyT3BlcmF0aW9ucyYK
ICAgICBpZiAoIWluVmFsdWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAo
aW5WYWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoaW5WYWx1ZSk7Ci0gICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKKyAgICBp
ZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppblZhbHVlKSkgeworICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmlu
VmFsdWUpOworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1Zh
bHVlTm9uZSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTM1Mjks
MjEgKzM1MjksMjEgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25z
KENTU1ZhbHVlKiBpblZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJgogICAgIEZpbHRlck9wZXJhdGlv
bnMgb3BlcmF0aW9uczsKICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSBpblZhbHVl
OyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKICAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1
ZSA9IGkudmFsdWUoKTsKLSAgICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzV2ViS2l0Q1NTRmlsdGVy
VmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4oKmN1cnJWYWx1
ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZSogZmlsdGVyVmFsdWUgPSB0b1dlYktpdENTU0ZpbHRlclZhbHVlKGkudmFsdWUoKSk7Ci0gICAg
ICAgIEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBlID0gZmlsdGVy
T3BlcmF0aW9uRm9yVHlwZShmaWx0ZXJWYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKTsKKyAgICAgICAg
V2ViS2l0Q1NTRmlsdGVyVmFsdWUmIGZpbHRlclZhbHVlID0gZG93bmNhc3Q8V2ViS2l0Q1NTRmls
dGVyVmFsdWU+KCppLnZhbHVlKCkpOworICAgICAgICBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlv
blR5cGUgb3BlcmF0aW9uVHlwZSA9IGZpbHRlck9wZXJhdGlvbkZvclR5cGUoZmlsdGVyVmFsdWUu
b3BlcmF0aW9uVHlwZSgpKTsKIAogICAgICAgICBpZiAob3BlcmF0aW9uVHlwZSA9PSBGaWx0ZXJP
cGVyYXRpb246OlJFRkVSRU5DRSkgewotICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5n
dGgoKSAhPSAxKQorICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLmxlbmd0aCgpICE9IDEpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogYXJndW1lbnQg
PSBmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKTsKKyAgICAgICAgICAgIENT
U1ZhbHVlKiBhcmd1bWVudCA9IGZpbHRlclZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCk7
CiAKLSAgICAgICAgICAgIGlmICghYXJndW1lbnQtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAg
ICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCphcmd1bWVudCkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRp
dmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoKmFyZ3VtZW50KTsKKyAgICAgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqYXJndW1lbnQpOwogICAgICAgICAgICAgU3RyaW5nIGNzc1VybCA9IHByaW1pdGl2ZVZh
bHVlLmdldFN0cmluZ1ZhbHVlKCk7CiAgICAgICAgICAgICBVUkwgdXJsID0gbV9zdGF0ZS5kb2N1
bWVudCgpLmNvbXBsZXRlVVJMKGNzc1VybCk7CiAKQEAgLTM1NjAsMjQgKzM1NjAsMjQgQEAgYm9v
bCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVl
LCBGaWx0ZXJPcGVyYXRpb25zJgogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3RWYWx1
ZSA9IG51bGxwdHI7CiAgICAgICAgIGlmIChvcGVyYXRpb25UeXBlICE9IEZpbHRlck9wZXJhdGlv
bjo6RFJPUF9TSEFET1cpIHsKICAgICAgICAgICAgIGJvb2wgaGF2ZU5vblByaW1pdGl2ZVZhbHVl
ID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgZmlsdGVyVmFs
dWUtPmxlbmd0aCgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAoIWZpbHRlclZhbHVlLT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKGopLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBmaWx0ZXJWYWx1ZS5sZW5ndGgoKTsgKytqKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmZpbHRlclZhbHVl
Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaikpKSB7CiAgICAgICAgICAgICAgICAgICAgIGhhdmVO
b25QcmltaXRpdmVWYWx1ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChoYXZlTm9uUHJp
bWl0aXZlVmFsdWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAo
ZmlsdGVyVmFsdWUtPmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIGZpcnN0VmFsdWUgPSB0b0NT
U1ByaW1pdGl2ZVZhbHVlKGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsK
KyAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBm
aXJzdFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGZpbHRlclZhbHVlLml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soMCkpOwogICAgICAgICB9CiAKLSAgICAgICAgc3dpdGNoIChmaWx0
ZXJWYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSB7CisgICAgICAgIHN3aXRjaCAoZmlsdGVyVmFsdWUu
b3BlcmF0aW9uVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Okdy
YXlzY2FsZUZpbHRlck9wZXJhdGlvbjoKICAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZTo6U2VwaWFGaWx0ZXJPcGVyYXRpb246CiAgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFs
dWU6OlNhdHVyYXRlRmlsdGVyT3BlcmF0aW9uOiB7CiAgICAgICAgICAgICBkb3VibGUgYW1vdW50
ID0gMTsKLSAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgPT0gMSkgeworICAg
ICAgICAgICAgaWYgKGZpbHRlclZhbHVlLmxlbmd0aCgpID09IDEpIHsKICAgICAgICAgICAgICAg
ICBhbW91bnQgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwogICAgICAgICAgICAgICAg
IGlmIChmaXJzdFZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKICAgICAgICAgICAgICAgICAgICAgYW1v
dW50IC89IDEwMDsKQEAgLTM1ODgsNyArMzU4OCw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3Jl
YXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgRmlsdGVyT3BlcmF0aW9ucyYK
ICAgICAgICAgfQogICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpIdWVSb3RhdGVG
aWx0ZXJPcGVyYXRpb246IHsKICAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IDA7Ci0gICAgICAg
ICAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0aCgpID09IDEpCisgICAgICAgICAgICBpZiAoZmls
dGVyVmFsdWUubGVuZ3RoKCkgPT0gMSkKICAgICAgICAgICAgICAgICBhbmdsZSA9IGZpcnN0VmFs
dWUtPmNvbXB1dGVEZWdyZWVzKCk7CiAKICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9u
cygpLmFwcGVuZChCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoYW5nbGUs
IG9wZXJhdGlvblR5cGUpKTsKQEAgLTM1OTgsOCArMzU5OCw4IEBAIGJvb2wgU3R5bGVSZXNvbHZl
cjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgRmlsdGVyT3BlcmF0
aW9ucyYKICAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6QnJpZ2h0bmVzc0ZpbHRl
ck9wZXJhdGlvbjoKICAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Q29udHJhc3RG
aWx0ZXJPcGVyYXRpb246CiAgICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Ok9wYWNp
dHlGaWx0ZXJPcGVyYXRpb246IHsKLSAgICAgICAgICAgIGRvdWJsZSBhbW91bnQgPSAoZmlsdGVy
VmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6QnJpZ2h0bmVz
c0ZpbHRlck9wZXJhdGlvbikgPyAwIDogMTsKLSAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+
bGVuZ3RoKCkgPT0gMSkgeworICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IChmaWx0ZXJWYWx1
ZS5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJyaWdodG5lc3NGaWx0
ZXJPcGVyYXRpb24pID8gMCA6IDE7CisgICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUubGVuZ3Ro
KCkgPT0gMSkgewogICAgICAgICAgICAgICAgIGFtb3VudCA9IGZpcnN0VmFsdWUtPmdldERvdWJs
ZVZhbHVlKCk7CiAgICAgICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUtPmlzUGVyY2VudGFnZSgp
KQogICAgICAgICAgICAgICAgICAgICBhbW91bnQgLz0gMTAwOwpAQCAtMzYxMCw3ICszNjEwLDcg
QEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBp
blZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJgogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2ViS2l0
Q1NTRmlsdGVyVmFsdWU6OkJsdXJGaWx0ZXJPcGVyYXRpb246IHsKICAgICAgICAgICAgIExlbmd0
aCBzdGREZXZpYXRpb24gPSBMZW5ndGgoMCwgRml4ZWQpOwotICAgICAgICAgICAgaWYgKGZpbHRl
clZhbHVlLT5sZW5ndGgoKSA+PSAxKQorICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLmxlbmd0
aCgpID49IDEpCiAgICAgICAgICAgICAgICAgc3RkRGV2aWF0aW9uID0gY29udmVydFRvRmxvYXRM
ZW5ndGgoZmlyc3RWYWx1ZSwgc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKICAg
ICAgICAgICAgIGlmIChzdGREZXZpYXRpb24uaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0zNjE5LDIxICszNjE5LDIxIEBAIGJvb2wgU3R5bGVSZXNvbHZl
cjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgRmlsdGVyT3BlcmF0
aW9ucyYKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2ViS2l0
Q1NTRmlsdGVyVmFsdWU6OkRyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246IHsKLSAgICAgICAgICAg
IGlmIChmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCkgIT0gMSkKKyAgICAgICAgICAgIGlmIChmaWx0ZXJW
YWx1ZS5sZW5ndGgoKSAhPSAxKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICAgICAgQ1NTVmFsdWUqIGNzc1ZhbHVlID0gZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMCk7Ci0gICAgICAgICAgICBpZiAoIWNzc1ZhbHVlLT5pc1NoYWRvd1ZhbHVlKCkp
CisgICAgICAgICAgICBDU1NWYWx1ZSogY3NzVmFsdWUgPSBmaWx0ZXJWYWx1ZS5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDApOworICAgICAgICAgICAgaWYgKCFpczxDU1NTaGFkb3dWYWx1ZT4oKmNz
c1ZhbHVlKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgQ1NTU2hh
ZG93VmFsdWUqIGl0ZW0gPSB0b0NTU1NoYWRvd1ZhbHVlKGNzc1ZhbHVlKTsKLSAgICAgICAgICAg
IGludCB4ID0gaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEoKSk7Ci0gICAgICAgICAgICBpbnQgeSA9IGl0ZW0tPnktPmNvbXB1dGVMZW5n
dGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOworICAgICAgICAgICAg
Q1NTU2hhZG93VmFsdWUmIGl0ZW0gPSBkb3duY2FzdDxDU1NTaGFkb3dWYWx1ZT4oKmNzc1ZhbHVl
KTsKKyAgICAgICAgICAgIGludCB4ID0gaXRlbS54LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUu
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKKyAgICAgICAgICAgIGludCB5ID0gaXRlbS55
LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsK
ICAgICAgICAgICAgIEludFBvaW50IGxvY2F0aW9uKHgsIHkpOwotICAgICAgICAgICAgaW50IGJs
dXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNz
c1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSkgOiAwOworICAgICAgICAgICAgaW50IGJsdXIgPSBp
dGVtLmJsdXIgPyBpdGVtLmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0
aENvbnZlcnNpb25EYXRhKCkpIDogMDsKICAgICAgICAgICAgIENvbG9yIGNvbG9yOwotICAgICAg
ICAgICAgaWYgKGl0ZW0tPmNvbG9yKQotICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9t
UHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0KCkpOworICAgICAgICAgICAgaWYgKGl0ZW0u
Y29sb3IpCisgICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShp
dGVtLmNvbG9yLmdldCgpKTsKIAogICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCku
YXBwZW5kKERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShsb2NhdGlvbiwgYmx1ciwg
Y29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiBDb2xvcjo6dHJhbnNwYXJlbnQpKTsKICAgICAgICAg
ICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1RyYW5zZm9ybUZ1bmN0
aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvVHJhbnNmb3JtRnVuY3Rpb25zLmNwcAppbmRl
eCAwNjYzYzMxMTk1ODEyN2UyODg4YTdkOTA0MjY1M2U5YjFhYWFlYWVjLi45ZmNmMDRjOWZjZTg4
MDRiNDY5ZDVkZWMxYmY5NjEwOTY3Mjk2NjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvVHJhbnNmb3JtRnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvVHJhbnNm
b3JtRnVuY3Rpb25zLmNwcApAQCAtOTIsMTYgKzkyLDE2IEBAIGJvb2wgdHJhbnNmb3Jtc0ZvclZh
bHVlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29u
dmVyCiAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9yZSgp
OyBpLmFkdmFuY2UoKSkgewogICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1ZSgp
OwogCi0gICAgICAgIGlmICghY3VyclZhbHVlLT5pc1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKCkp
CisgICAgICAgIGlmICghaXM8V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU+KCpjdXJyVmFsdWUpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUq
IHRyYW5zZm9ybVZhbHVlID0gdG9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZShpLnZhbHVlKCkpOwot
ICAgICAgICBpZiAoIXRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSkKKyAgICAgICAgV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWUmIHRyYW5zZm9ybVZhbHVlID0gZG93bmNhc3Q8V2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU+KCppLnZhbHVlKCkpOworICAgICAgICBpZiAoIXRyYW5zZm9ybVZhbHVlLmxlbmd0
aCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgYm9vbCBoYXZlTm9uUHJpbWl0
aXZlVmFsdWUgPSBmYWxzZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHRyYW5z
Zm9ybVZhbHVlLT5sZW5ndGgoKTsgKytqKSB7Ci0gICAgICAgICAgICBpZiAoIXRyYW5zZm9ybVZh
bHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGopLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHRyYW5zZm9ybVZhbHVlLmxlbmd0aCgpOyAr
K2opIHsKKyAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1W
YWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGopKSkgewogICAgICAgICAgICAgICAgIGhhdmVO
b25QcmltaXRpdmVWYWx1ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CkBAIC0xMDksMjcgKzEwOSwyNyBAQCBib29sIHRyYW5zZm9ybXNGb3JWYWx1ZShDU1NW
YWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcgogICAg
ICAgICBpZiAoaGF2ZU5vblByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0VmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsKKyAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUmIGZpcnN0VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOwogCi0gICAgICAg
IHN3aXRjaCAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkgeworICAgICAgICBzd2l0
Y2ggKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSkgewogICAgICAgICBjYXNlIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjoKICAgICAgICAgY2Fz
ZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uOgogICAg
ICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRp
b246IHsKICAgICAgICAgICAgIGRvdWJsZSBzeCA9IDEuMDsKICAgICAgICAgICAgIGRvdWJsZSBz
eSA9IDEuMDsKLSAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgp
ID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRpb24pCi0g
ICAgICAgICAgICAgICAgc3kgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAg
ICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIHN5
ID0gZmlyc3RWYWx1ZS5nZXREb3VibGVWYWx1ZSgpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgc3ggPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAg
ICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpICE9IFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZl
VmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgc3kgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAg
ICAgICAgICAgICAgICBzeCA9IGZpcnN0VmFsdWUuZ2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAg
ICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9uVHlwZSgpICE9IFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLmxlbmd0aCgpID4gMSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHNlY29uZFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc2Vjb25kVmFsdWUuZ2V0RG91YmxlVmFsdWUo
KTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBz
eSA9IHN4OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG9w
ZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3Jl
YXRlKHN4LCBzeSwgMS4wLCB0cmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLT5v
cGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5h
cHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShzeCwgc3ksIDEuMCwgdHJhbnNm
b3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkpKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpTY2FsZVpUcmFuc2Zvcm1PcGVyYXRpb246CkBAIC0xMzcsMjUgKzEzNywyNSBAQCBi
b29sIHRyYW5zZm9ybXNGb3JWYWx1ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEmIGNvbnZlcgogICAgICAgICAgICAgZG91YmxlIHN4ID0gMS4wOwogICAg
ICAgICAgICAgZG91YmxlIHN5ID0gMS4wOwogICAgICAgICAgICAgZG91YmxlIHN6ID0gMS4wOwot
ICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWlRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAg
ICAgICBzeiA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICBlbHNl
IGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRpb24pCi0gICAgICAgICAgICAgICAgc3kgPSBm
aXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZh
bHVlLm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVaVHJh
bnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIHN6ID0gZmlyc3RWYWx1ZS5nZXREb3Vi
bGVWYWx1ZSgpOworICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9u
VHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRp
b24pCisgICAgICAgICAgICAgICAgc3kgPSBmaXJzdFZhbHVlLmdldERvdWJsZVZhbHVlKCk7CiAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzeCA9IGZpcnN0VmFsdWUtPmdldERv
dWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRp
b25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJh
dGlvbikgewotICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgp
ID4gMikgewotICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRoaXJk
VmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN6ID0gdGhpcmRWYWx1ZS0+
Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBzeCA9IGZpcnN0VmFsdWUuZ2V0RG91
YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9u
VHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRp
b24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLmxlbmd0aCgpID4g
MikgeworICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHRoaXJkVmFs
dWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soMikpOworICAgICAgICAgICAgICAgICAgICAgICAgc3ogPSB0aGlyZFZh
bHVlLmdldERvdWJsZVZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHRvQ1NTUHJpbWl0
aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgc3kgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLmxlbmd0aCgpID4gMSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHNlY29uZFZhbHVlID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc2Vjb25kVmFsdWUu
Z2V0RG91YmxlVmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgICAgICBzeSA9IHN4OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTY2FsZVRyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKHN4LCBzeSwgc3osIHRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJh
bnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMu
b3BlcmF0aW9ucygpLmFwcGVuZChTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHN4LCBz
eSwgc3osIHRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9uVHlw
ZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOgpAQCAtMTYz
LDE0ICsxNjMsMTQgQEAgYm9vbCB0cmFuc2Zvcm1zRm9yVmFsdWUoQ1NTVmFsdWUqIHZhbHVlLCBj
b25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXIKICAgICAgICAgY2FzZSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbjogewogICAg
ICAgICAgICAgTGVuZ3RoIHR4ID0gTGVuZ3RoKDAsIEZpeGVkKTsKICAgICAgICAgICAgIExlbmd0
aCB0eSA9IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUt
Pm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRy
YW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRUb0Zsb2F0TGVu
Z3RoKGZpcnN0VmFsdWUsIGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAgICAgIGlmICh0cmFuc2Zv
cm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5z
bGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0VG9G
bG9hdExlbmd0aCgmZmlyc3RWYWx1ZSwgY29udmVyc2lvbkRhdGEpOwogICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgdHggPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVl
LCBjb252ZXJzaW9uRGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5v
cGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFu
c2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVl
LT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBzZWNvbmRWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHkgPSBj
b252ZXJ0VG9GbG9hdExlbmd0aChzZWNvbmRWYWx1ZSwgY29udmVyc2lvbkRhdGEpOworICAgICAg
ICAgICAgICAgIHR4ID0gY29udmVydFRvRmxvYXRMZW5ndGgoJmZpcnN0VmFsdWUsIGNvbnZlcnNp
b25EYXRhKTsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9uVHlw
ZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0
aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5sZW5ndGgoKSA+
IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBzZWNvbmRW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdp
dGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0eSA9IGNvbnZl
cnRUb0Zsb2F0TGVuZ3RoKCZzZWNvbmRWYWx1ZSwgY29udmVyc2lvbkRhdGEpOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTc4LDcg
KzE3OCw3IEBAIGJvb2wgdHJhbnNmb3Jtc0ZvclZhbHVlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3Qg
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyCiAgICAgICAgICAgICBpZiAodHguaXNV
bmRlZmluZWQoKSB8fCB0eS5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgTGVuZ3RoKDAsIEZpeGVkKSwg
dHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkp
OworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgTGVuZ3RoKDAsIEZpeGVkKSwgdHJhbnNm
b3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkpKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpUcmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9uOgpAQCAtMTg2LDIwICsxODYsMjAg
QEAgYm9vbCB0cmFuc2Zvcm1zRm9yVmFsdWUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXIKICAgICAgICAgICAgIExlbmd0aCB0eCA9IExlbmd0
aCgwLCBGaXhlZCk7CiAgICAgICAgICAgICBMZW5ndGggdHkgPSBMZW5ndGgoMCwgRml4ZWQpOwog
ICAgICAgICAgICAgTGVuZ3RoIHR6ID0gTGVuZ3RoKDAsIEZpeGVkKTsKLSAgICAgICAgICAgIGlm
ICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlOjpUcmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9uKQotICAgICAgICAgICAgICAgIHR6ID0g
Y29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgY29udmVyc2lvbkRhdGEpOwotICAgICAg
ICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAg
ICAgICAgICB0eSA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIGNvbnZlcnNpb25E
YXRhKTsKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkgPT0g
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb24pCisg
ICAgICAgICAgICAgICAgdHogPSBjb252ZXJ0VG9GbG9hdExlbmd0aCgmZmlyc3RWYWx1ZSwgY29u
dmVyc2lvbkRhdGEpOworICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUub3BlcmF0
aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3Jt
T3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRMZW5ndGgoJmZp
cnN0VmFsdWUsIGNvbnZlcnNpb25EYXRhKTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIHR4ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgY29udmVyc2lvbkRh
dGEpOwotICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgp
ICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0aW9u
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAy
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdGhpcmRWYWx1
ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soMikpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHogPSBjb252ZXJ0VG9GbG9hdExl
bmd0aCh0aGlyZFZhbHVlLCBjb252ZXJzaW9uRGF0YSk7CisgICAgICAgICAgICAgICAgdHggPSBj
b252ZXJ0VG9GbG9hdExlbmd0aCgmZmlyc3RWYWx1ZSwgY29udmVyc2lvbkRhdGEpOworICAgICAg
ICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLmxlbmd0aCgpID4gMikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHRoaXJkVmFsdWUgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MikpOworICAgICAgICAgICAgICAgICAgICAgICAgdHogPSBjb252ZXJ0VG9GbG9hdExlbmd0aCgm
dGhpcmRWYWx1ZSwgY29udmVyc2lvbkRhdGEpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSB0b0NT
U1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRMZW5ndGgoc2Vj
b25kVmFsdWUsIGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5z
Zm9ybVZhbHVlLmxlbmd0aCgpID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUmIHNlY29uZFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0
cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRMZW5ndGgoJnNlY29uZFZhbHVlLCBjb252ZXJz
aW9uRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CkBAIC0yMDcsMTIgKzIwNywxMiBAQCBib29sIHRyYW5zZm9ybXNGb3JWYWx1ZShD
U1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcgog
ICAgICAgICAgICAgaWYgKHR4LmlzVW5kZWZpbmVkKCkgfHwgdHkuaXNVbmRlZmluZWQoKSB8fCB0
ei5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgdHosIHRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNm
b3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMub3Bl
cmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0eCwg
dHksIHR6LCB0cmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5
cGUoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAg
ICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKLSAgICAg
ICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZSgwLCAwLCAxLCBhbmdsZSwgdHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFu
c2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgZG91YmxlIGFuZ2xl
ID0gZmlyc3RWYWx1ZS5jb21wdXRlRGVncmVlcygpOworICAgICAgICAgICAgb3BlcmF0aW9ucy5v
cGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKDAsIDAs
IDEsIGFuZ2xlLCB0cmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlv
blR5cGUoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb246CkBAIC0y
MjEsMjggKzIyMSwyOCBAQCBib29sIHRyYW5zZm9ybXNGb3JWYWx1ZShDU1NWYWx1ZSogdmFsdWUs
IGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcgogICAgICAgICAgICAgZG91
YmxlIHggPSAwOwogICAgICAgICAgICAgZG91YmxlIHkgPSAwOwogICAgICAgICAgICAgZG91Ymxl
IHogPSAwOwotICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS0+Y29tcHV0ZURl
Z3JlZXMoKTsKKyAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGZpcnN0VmFsdWUuY29tcHV0ZURl
Z3JlZXMoKTsKIAotICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBl
KCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24p
CisgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9uVHlwZSgpID09IFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVYVHJhbnNmb3JtT3BlcmF0aW9uKQogICAgICAgICAg
ICAgICAgIHggPSAxOwotICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJh
dGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9ybU9w
ZXJhdGlvbikKKyAgICAgICAgICAgIGVsc2UgaWYgKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5
cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9ybU9wZXJhdGlv
bikKICAgICAgICAgICAgICAgICB5ID0gMTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICB6ID0gMTsKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChS
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBhbmdsZSwgdHJhbnNmb3Jt
T3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAg
ICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbjo6Y3JlYXRlKHgsIHksIHosIGFuZ2xlLCB0cmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5z
Zm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZTNEVHJhbnNm
b3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgp
IDwgNCkKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5sZW5ndGgoKSA8IDQpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25k
VmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDEpKTsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0aGlyZFZhbHVl
ID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjaygyKSk7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZm91cnRoVmFsdWUgPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDMpKTsKLSAgICAgICAgICAgIGRvdWJsZSB4ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUo
KTsKLSAgICAgICAgICAgIGRvdWJsZSB5ID0gc2Vjb25kVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7
Ci0gICAgICAgICAgICBkb3VibGUgeiA9IHRoaXJkVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0g
ICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmb3VydGhWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsK
LSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3RhdGVUcmFuc2Zv
cm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBhbmdsZSwgdHJhbnNmb3JtT3BlcmF0aW9uVHlw
ZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUmIHNlY29uZFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0
cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKKyAgICAgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlJiB0aGlyZFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKTsKKyAgICAgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlJiBmb3VydGhWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygzKSk7CisgICAgICAg
ICAgICBkb3VibGUgeCA9IGZpcnN0VmFsdWUuZ2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAg
IGRvdWJsZSB5ID0gc2Vjb25kVmFsdWUuZ2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIGRv
dWJsZSB6ID0gdGhpcmRWYWx1ZS5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgZG91Ymxl
IGFuZ2xlID0gZm91cnRoVmFsdWUuY29tcHV0ZURlZ3JlZXMoKTsKKyAgICAgICAgICAgIG9wZXJh
dGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0
ZSh4LCB5LCB6LCBhbmdsZSwgdHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS5v
cGVyYXRpb25UeXBlKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOgpA
QCAtMjUwLDYyICsyNTAsNjIgQEAgYm9vbCB0cmFuc2Zvcm1zRm9yVmFsdWUoQ1NTVmFsdWUqIHZh
bHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXIKICAgICAgICAgY2Fz
ZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb246IHsKICAg
ICAgICAgICAgIGRvdWJsZSBhbmdsZVggPSAwOwogICAgICAgICAgICAgZG91YmxlIGFuZ2xlWSA9
IDA7Ci0gICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmaXJzdFZhbHVlLT5jb21wdXRlRGVncmVl
cygpOwotICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgPT0g
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAg
ICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS5jb21wdXRlRGVncmVlcygpOworICAgICAg
ICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb24pCiAgICAgICAgICAgICAgICAgYW5n
bGVZID0gYW5nbGU7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBhbmdsZVgg
PSBhbmdsZTsKLSAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5
cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbikg
ewotICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpID4gMSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVl
ID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjaygxKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVkgPSBzZWNvbmRWYWx1ZS0+
Y29tcHV0ZURlZ3JlZXMoKTsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUub3Bl
cmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJhbnNmb3JtT3Bl
cmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5sZW5ndGgo
KSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBzZWNv
bmRWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRl
bVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVkg
PSBzZWNvbmRWYWx1ZS5jb21wdXRlRGVncmVlcygpOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgb3BlcmF0aW9ucy5v
cGVyYXRpb25zKCkuYXBwZW5kKFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShhbmdsZVgs
IGFuZ2xlWSwgdHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9u
VHlwZSgpKSkpOworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFNr
ZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShhbmdsZVgsIGFuZ2xlWSwgdHJhbnNmb3JtT3Bl
cmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkpKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1W
YWx1ZS0+bGVuZ3RoKCkgPCA2KQorICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLmxlbmd0
aCgpIDwgNikKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRvdWJsZSBhID0g
Zmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgIGRvdWJsZSBiID0gdG9D
U1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygx
KSktPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICBkb3VibGUgYyA9IHRvQ1NTUHJpbWl0
aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpLT5nZXRE
b3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgZG91YmxlIGQgPSB0b0NTU1ByaW1pdGl2ZVZhbHVl
KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+Z2V0RG91YmxlVmFs
dWUoKTsKLSAgICAgICAgICAgIGRvdWJsZSBlID0gY29udmVyc2lvbkRhdGEuem9vbSgpICogdG9D
U1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg0
KSktPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICBkb3VibGUgZiA9IGNvbnZlcnNpb25E
YXRhLnpvb20oKSAqIHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soNSkpLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgZG91Ymxl
IGEgPSBmaXJzdFZhbHVlLmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBkb3VibGUgYiA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygxKSkuZ2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIGRvdWJsZSBjID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDIpKS5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgZG91YmxlIGQgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMykpLmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBkb3VibGUgZSA9IGNv
bnZlcnNpb25EYXRhLnpvb20oKSAqIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNm
b3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayg0KSkuZ2V0RG91YmxlVmFsdWUoKTsKKyAg
ICAgICAgICAgIGRvdWJsZSBmID0gY29udmVyc2lvbkRhdGEuem9vbSgpICogZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDUp
KS5nZXREb3VibGVWYWx1ZSgpOwogICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCku
YXBwZW5kKE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGEsIGIsIGMsIGQsIGUsIGYp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6Ok1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAg
ICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpIDwgMTYpCisgICAgICAgICAgICBpZiAodHJh
bnNmb3JtVmFsdWUubGVuZ3RoKCkgPCAxNikKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCh0b0NTU1ByaW1pdGl2ZVZhbHVlKHRy
YW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKS0+Z2V0RG91YmxlVmFsdWUo
KSwKLSAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAg
ICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDIpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0b0NTU1ByaW1p
dGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+Z2V0
RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5z
Zm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDQpKS0+Z2V0RG91YmxlVmFsdWUoKSwK
LSAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDUpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAg
ICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKDYpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2
ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDcpKS0+Z2V0RG91
YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9y
bVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDgpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAg
ICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDkpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDEwKSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgdG9DU1NQcmltaXRpdmVW
YWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMSkpLT5nZXREb3Vi
bGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgIGNvbnZlcnNpb25EYXRhLnpvb20oKSAqIHRvQ1NT
UHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTIp
KS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICBjb252ZXJzaW9uRGF0YS56b29t
KCkgKiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDEzKSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgdG9DU1NQcmlt
aXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxNCkpLT5n
ZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgIHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJh
bnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTUpKS0+Z2V0RG91YmxlVmFsdWUo
KSk7CisgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgoZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDAp
KS5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgIGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSkuZ2V0RG91
YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
KnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpLmdldERvdWJsZVZhbHVl
KCksCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zv
cm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS5nZXREb3VibGVWYWx1ZSgpLAorICAg
ICAgICAgICAgICAgIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUu
aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg0KSkuZ2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAg
ICAgICBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soNSkpLmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDYpKS5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgIGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayg3
KSkuZ2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soOCkpLmdldERv
dWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDkpKS5nZXREb3VibGVWYWx1
ZSgpLAorICAgICAgICAgICAgICAgIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNm
b3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMCkpLmdldERvdWJsZVZhbHVlKCksCisg
ICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1
ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDExKSkuZ2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAg
ICAgICAgICBjb252ZXJzaW9uRGF0YS56b29tKCkgKiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTIpKS5nZXREb3VibGVW
YWx1ZSgpLAorICAgICAgICAgICAgICAgIGNvbnZlcnNpb25EYXRhLnpvb20oKSAqIGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVj
aygxMykpLmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDE0KSku
Z2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTUpKS5nZXREb3Vi
bGVWYWx1ZSgpKTsKICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChN
YXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1hdHJpeCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246IHsKICAgICAgICAgICAgIExlbmd0aCBwID0g
TGVuZ3RoKDAsIEZpeGVkKTsKLSAgICAgICAgICAgIGlmIChmaXJzdFZhbHVlLT5pc0xlbmd0aCgp
KQotICAgICAgICAgICAgICAgIHAgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBj
b252ZXJzaW9uRGF0YSk7CisgICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZS5pc0xlbmd0aCgpKQor
ICAgICAgICAgICAgICAgIHAgPSBjb252ZXJ0VG9GbG9hdExlbmd0aCgmZmlyc3RWYWx1ZSwgY29u
dmVyc2lvbkRhdGEpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVGhp
cyBpcyBhIHF1aXJrIHRoYXQgc2hvdWxkIGdvIGF3YXkgd2hlbiAzZCB0cmFuc2Zvcm1zIGFyZSBm
aW5hbGl6ZWQuCi0gICAgICAgICAgICAgICAgZG91YmxlIHZhbCA9IGZpcnN0VmFsdWUtPmdldERv
dWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgZG91YmxlIHZhbCA9IGZpcnN0VmFsdWUuZ2V0
RG91YmxlVmFsdWUoKTsKICAgICAgICAgICAgICAgICBwID0gdmFsID49IDAgPyBMZW5ndGgoY2xh
bXBUb1Bvc2l0aXZlSW50ZWdlcih2YWwpLCBGaXhlZCkgOiBMZW5ndGgoVW5kZWZpbmVkKTsKICAg
ICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1ZpZXdwb3J0U3R5
bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvVmlld3BvcnRTdHlsZVJlc29sdmVy
LmNwcAppbmRleCA4ZDQxMjlhMGNmOWFkOTZiOWJhNmUyMTc5OTAwNWUzNWQzYzM4MmJiLi5mODll
ZmYwMDg2M2FjODlkYjc3OGRiMzIzZmU3ODUwMTU2NmFkZjA5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvVmlld3BvcnRTdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvVmlld3BvcnRTdHlsZVJlc29sdmVyLmNwcApAQCAtMTA4LDE5ICsxMDgsMTkgQEAgZmxv
YXQgVmlld3BvcnRTdHlsZVJlc29sdmVyOjpnZXRWaWV3cG9ydEFyZ3VtZW50VmFsdWUoQ1NTUHJv
cGVydHlJRCBpZCkgY29uc3QKICAgICAgICAgZGVmYXVsdFZhbHVlID0gMTsKIAogICAgIFJlZlB0
cjxDU1NWYWx1ZT4gdmFsdWUgPSBtX3Byb3BlcnR5U2V0LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKGlk
KTsKLSAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlm
ICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGRl
ZmF1bHRWYWx1ZTsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUodmFsdWUuZ2V0KCkpOworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBw
cmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogCi0g
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpIHx8IHByaW1pdGl2ZVZhbHVlLT5pc1B4
KCkpCi0gICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpOworICAg
IGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpIHx8IHByaW1pdGl2ZVZhbHVlLmlzUHgoKSkK
KyAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlLmdldEZsb2F0VmFsdWUoKTsKIAotICAgIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNGb250UmVsYXRpdmVMZW5ndGgoKSkKLSAgICAgICAgcmV0dXJu
IHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkgKiBtX2RvY3VtZW50LT5kb2N1bWVudEVs
ZW1lbnQoKS0+cmVuZGVyU3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCk7
CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzRm9udFJlbGF0aXZlTGVuZ3RoKCkpCisgICAgICAg
IHJldHVybiBwcmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKCkgKiBtX2RvY3VtZW50LT5kb2N1
bWVudEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRT
aXplKCk7CiAKLSAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKSB7Ci0gICAg
ICAgIGZsb2F0IHBlcmNlbnRWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkg
LyAxMDAuMGY7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpKSB7CisgICAg
ICAgIGZsb2F0IHBlcmNlbnRWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLmdldEZsb2F0VmFsdWUoKSAv
IDEwMC4wZjsKICAgICAgICAgc3dpdGNoIChpZCkgewogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
TWF4SGVpZ2h0OgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWluSGVpZ2h0OgpAQCAtMTQwLDcg
KzE0MCw3IEBAIGZsb2F0IFZpZXdwb3J0U3R5bGVSZXNvbHZlcjo6Z2V0Vmlld3BvcnRBcmd1bWVu
dFZhbHVlKENTU1Byb3BlcnR5SUQgaWQpIGNvbnN0CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBz
d2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICBzd2l0Y2ggKHByaW1p
dGl2ZVZhbHVlLmdldFZhbHVlSUQoKSkgewogICAgIGNhc2UgQ1NTVmFsdWVBdXRvOgogICAgICAg
ICByZXR1cm4gZGVmYXVsdFZhbHVlOwogICAgIGNhc2UgQ1NTVmFsdWVEZXZpY2VIZWlnaHQ6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTRmlsdGVyVmFsdWUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oCmluZGV4IDRmOWQ5MTU4NjY5
ZjUxYTBiYzFkMmQwNjdmZjYyYTgzMGZmZTQxMDQuLmRhZjNhZmJiZDE0YjRiYTIwY2UzZjkzMjg0
OTZiNzhlMDY5YTYyYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NG
aWx0ZXJWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NGaWx0ZXJWYWx1
ZS5oCkBAIC03MCw4ICs3MCw4IEBAIHByaXZhdGU6CiAgICAgRmlsdGVyT3BlcmF0aW9uVHlwZSBt
X3R5cGU7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhXZWJLaXRDU1NGaWx0ZXJWYWx1ZSwg
aXNXZWJLaXRDU1NGaWx0ZXJWYWx1ZSgpKQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi19CitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShXZWJLaXRDU1NGaWx0ZXJWYWx1ZSwgaXNX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZSgpKQogCi0jZW5kaWYKKyNlbmRpZiAvLyBXZWJLaXRDU1NGaWx0
ZXJWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCmluZGV4IDQzYmJk
MWMzMWM2ZDlmMjRmMTY4YmIwYzE5YzYyZjBjNzU4OWIzMzYuLmM2ZDU5OTk3MjA4ZjIxNWExMTQy
MTE2N2ZkMzkwMWY4ODgzMjhiNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJL
aXRDU1NNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXgu
Y3BwCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgV2ViS2l0Q1NTTWF0cml4OjpzZXRNYXRyaXhWYWx1
ZShjb25zdCBTdHJpbmcmIHN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIFJlZlB0
cjxDU1NWYWx1ZT4gdmFsdWUgPSBzdHlsZURlY2xhcmF0aW9uLT5nZXRQcm9wZXJ0eUNTU1ZhbHVl
KENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKIAogICAgICAgICAvLyBDaGVjayBmb3IgYSAi
bm9uZSIgb3IgZW1wdHkgdHJhbnNmb3JtLiBJbiB0aGVzZSBjYXNlcyB3ZSBjYW4gdXNlIHRoZSBk
ZWZhdWx0IGlkZW50aXR5IG1hdHJpeC4KLSAgICAgICAgaWYgKCF2YWx1ZSB8fCAodmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSAmJiAodG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS5nZXQoKSkpLT5n
ZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKSkKKyAgICAgICAgaWYgKCF2YWx1ZSB8fCAoaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkpCiAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaAppbmRleCAxOTVmOTZhNTFkM2E5
NmRkZWMyZGE2MmRiYjY4OThiZDc3NjZjOTdlLi45ZGVjOTU2Y2YxMWQyYzViMGRhZTA5NmUzOGQ2
MDQ4NDAxY2U5MjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWUuaApAQCAtNzksMTggKzc5LDggQEAgcHJpdmF0ZToKICAgICBUcmFuc2Zvcm1PcGVyYXRp
b25UeXBlIG1fdHlwZTsKIH07CiAKLWlubGluZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSogdG9X
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZShDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIXZhbHVlIHx8IHZhbHVlLT5pc1dlYktpdENTU1RyYW5z
Zm9ybVZhbHVlKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZSo+KHZhbHVlKTsKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotaW5saW5lIGNvbnN0
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKiB0b1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKGNvbnN0
IENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TighdmFsdWUgfHwgdmFsdWUtPmlzV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoKSk7Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKj4odmFsdWUpOwot
fQotCi19CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZSwgaXNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSgpKQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKaW5kZXggNjZiZWZmNDE3NWQw
N2EwY2M3MWUyYTc4ODg3ZGE2MDlkZDRjYTQ3OC4uMmYyNWRhYzc5MWRhZDJmYmIyOGFjMDAzYjA5
NWEyYzUyNTAwNTZmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHAKQEAgLTE1MTAsOCArMTUxMCw4IEBAIGZsb2F0IEFwcGx5U3R5bGVDb21tYW5kOjpj
b21wdXRlZEZvbnRTaXplKE5vZGUqIG5vZGUpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgUmVm
UHRyPENTU1ZhbHVlPiB2YWx1ZSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3Iobm9kZSkucHJvcGVy
dHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXplKTsKLSAgICBBU1NFUlQodmFsdWUgJiYgdmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgcmV0dXJuIHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFs
dWUuZ2V0KCkpLT5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworICAg
IEFTU0VSVChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUuZ2V0KCkpKTsKKyAgICByZXR1cm4g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0RmxvYXRWYWx1ZShDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BYKTsKIH0KIAogdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6am9pbkNo
aWxkVGV4dE5vZGVzKE5vZGUqIG5vZGUsIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9z
aXRpb24mIGVuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0
eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCA3
ODBkODQ3MTg4MWJmNGZhMzBhZDFkODYxYWFmOWU1OWU4N2RhMjcxLi5jNjI1Zjc3Y2Q0ZTdhNDcz
N2NkZTRlODJjMWZiNmIxYzU0ZDYwNDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
U3R5bGUuY3BwCkBAIC0xNDIsOSArMTQyLDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGludCBp
ZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eShUKiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlEKQogewogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBleHRyYWN0UHJvcGVydHlWYWx1
ZShzdHlsZSwgcHJvcGVydHlJRCk7Ci0gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZS5nZXQoKSkp
CiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVl
LmdldCgpKS0+Z2V0VmFsdWVJRCgpOworICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFBh
c3NSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gZ2V0UHJvcGVydGllc05vdEluKFN0eWxl
UHJvcGVydGllcyogc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcywgVCogYmFzZVN0eWxlKTsK
QEAgLTE5Nyw3ICsxOTcsNyBAQCBIVE1MRWxlbWVudEVxdWl2YWxlbnQ6OkhUTUxFbGVtZW50RXF1
aXZhbGVudChDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZUlEIHByaW1pdAogYm9vbCBIVE1MRWxl
bWVudEVxdWl2YWxlbnQ6OnZhbHVlSXNQcmVzZW50SW5TdHlsZShFbGVtZW50KiBlbGVtZW50LCBT
dHlsZVByb3BlcnRpZXMqIHN0eWxlKSBjb25zdAogewogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFs
dWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShtX3Byb3BlcnR5SUQpOwotICAgIHJldHVy
biBtYXRjaGVzKGVsZW1lbnQpICYmIHZhbHVlICYmIHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkg
JiYgdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS5nZXQoKSktPmdldFZhbHVlSUQoKSA9PSBtX3By
aW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCk7CisgICAgcmV0dXJuIG1hdGNoZXMoZWxlbWVudCkg
JiYgaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlLmdldCgpKSAmJiBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCkgPT0gbV9wcmltaXRpdmVWYWx1ZS0+Z2V0
VmFsdWVJRCgpOwogfQogCiB2b2lkIEhUTUxFbGVtZW50RXF1aXZhbGVudDo6YWRkVG9TdHlsZShF
bGVtZW50KiwgRWRpdGluZ1N0eWxlKiBzdHlsZSkgY29uc3QKQEAgLTIyOSw3ICsyMjksNyBAQCBi
b29sIEhUTUxUZXh0RGVjb3JhdGlvbkVxdWl2YWxlbnQ6OnZhbHVlSXNQcmVzZW50SW5TdHlsZShF
bGVtZW50KiBlbGVtZW50LCBTdHlsZQogICAgIFJlZlB0cjxDU1NWYWx1ZT4gc3R5bGVWYWx1ZSA9
IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRp
b25zSW5FZmZlY3QpOwogICAgIGlmICghc3R5bGVWYWx1ZSkKICAgICAgICAgc3R5bGVWYWx1ZSA9
IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOwot
ICAgIHJldHVybiBtYXRjaGVzKGVsZW1lbnQpICYmIHN0eWxlVmFsdWUgJiYgc3R5bGVWYWx1ZS0+
aXNWYWx1ZUxpc3QoKSAmJiB0b0NTU1ZhbHVlTGlzdChzdHlsZVZhbHVlLmdldCgpKS0+aGFzVmFs
dWUobV9wcmltaXRpdmVWYWx1ZS5nZXQoKSk7CisgICAgcmV0dXJuIG1hdGNoZXMoZWxlbWVudCkg
JiYgaXM8Q1NTVmFsdWVMaXN0PihzdHlsZVZhbHVlLmdldCgpKSAmJiBkb3duY2FzdDxDU1NWYWx1
ZUxpc3Q+KCpzdHlsZVZhbHVlKS5oYXNWYWx1ZShtX3ByaW1pdGl2ZVZhbHVlLmdldCgpKTsKIH0K
IAogY2xhc3MgSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnRFcXVp
dmFsZW50IHsKQEAgLTM1NiwxMiArMzU2LDEyIEBAIEVkaXRpbmdTdHlsZTo6fkVkaXRpbmdTdHls
ZSgpCiAKIHN0YXRpYyBSR0JBMzIgY3NzVmFsdWVUb1JHQkEoQ1NTVmFsdWUqIGNvbG9yVmFsdWUp
CiB7Ci0gICAgaWYgKCFjb2xvclZhbHVlIHx8ICFjb2xvclZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oY29sb3JWYWx1ZSkpCiAgICAgICAg
IHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnQ7CiAgICAgCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZUNvbG9yID0gdG9DU1NQcmltaXRpdmVWYWx1ZShjb2xvclZhbHVlKTsKLSAgICBp
ZiAocHJpbWl0aXZlQ29sb3ItPmlzUkdCQ29sb3IoKSkKLSAgICAgICAgcmV0dXJuIHByaW1pdGl2
ZUNvbG9yLT5nZXRSR0JBMzJWYWx1ZSgpOworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRp
dmVDb2xvciA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqY29sb3JWYWx1ZSk7CisgICAg
aWYgKHByaW1pdGl2ZUNvbG9yLmlzUkdCQ29sb3IoKSkKKyAgICAgICAgcmV0dXJuIHByaW1pdGl2
ZUNvbG9yLmdldFJHQkEzMlZhbHVlKCk7CiAgICAgCiAgICAgUkdCQTMyIHJnYmEgPSAwOwogICAg
IENTU1BhcnNlcjo6cGFyc2VDb2xvcihyZ2JhLCBjb2xvclZhbHVlLT5jc3NUZXh0KCkpOwpAQCAt
NDc2LDE3ICs0NzYsMTcgQEAgdm9pZCBFZGl0aW5nU3R5bGU6OmV4dHJhY3RGb250U2l6ZURlbHRh
KCkKIAogICAgIC8vIEdldCB0aGUgYWRqdXN0bWVudCBhbW91bnQgb3V0IG9mIHRoZSBzdHlsZS4K
ICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gbV9tdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5
Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRGb250U2l6ZURlbHRhKTsKLSAgICBpZiAoIXZhbHVl
IHx8ICF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS5nZXQoKSk7
CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAKICAgICAvLyBPbmx5IFBYIGhhbmRsZWQgbm93LiBJZiB3
ZSBoYW5kbGUgbW9yZSB0eXBlcyBpbiB0aGUgZnV0dXJlLCBwZXJoYXBzCiAgICAgLy8gYSBzd2l0
Y2ggc3RhdGVtZW50IGhlcmUgd291bGQgYmUgbW9yZSBhcHByb3ByaWF0ZS4KLSAgICBpZiAoIXBy
aW1pdGl2ZVZhbHVlLT5pc1B4KCkpCisgICAgaWYgKCFwcmltaXRpdmVWYWx1ZS5pc1B4KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fZm9udFNpemVEZWx0YSA9IHByaW1pdGl2ZVZhbHVlLT5n
ZXRGbG9hdFZhbHVlKCk7CisgICAgbV9mb250U2l6ZURlbHRhID0gcHJpbWl0aXZlVmFsdWUuZ2V0
RmxvYXRWYWx1ZSgpOwogICAgIG1fbXV0YWJsZVN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVdlYmtpdEZvbnRTaXplRGVsdGEpOwogfQogCkBAIC01MDEsMTYgKzUwMSwxNiBAQCBib29s
IEVkaXRpbmdTdHlsZTo6dGV4dERpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uJiB3cml0aW5nRGly
ZWN0aW9uKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBSZWZQdHI8Q1NTVmFs
dWU+IHVuaWNvZGVCaWRpID0gbV9tdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NT
UHJvcGVydHlVbmljb2RlQmlkaSk7Ci0gICAgaWYgKCF1bmljb2RlQmlkaSB8fCAhdW5pY29kZUJp
ZGktPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih1
bmljb2RlQmlkaS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIENTU1ZhbHVl
SUQgdW5pY29kZUJpZGlWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodW5pY29kZUJpZGkuZ2V0
KCkpLT5nZXRWYWx1ZUlEKCk7CisgICAgQ1NTVmFsdWVJRCB1bmljb2RlQmlkaVZhbHVlID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp1bmljb2RlQmlkaSkuZ2V0VmFsdWVJRCgpOwogICAg
IGlmICh1bmljb2RlQmlkaVZhbHVlID09IENTU1ZhbHVlRW1iZWQpIHsKICAgICAgICAgUmVmUHRy
PENTU1ZhbHVlPiBkaXJlY3Rpb24gPSBtX211dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NQcm9wZXJ0eURpcmVjdGlvbik7Ci0gICAgICAgIGlmICghZGlyZWN0aW9uIHx8ICFkaXJl
Y3Rpb24tPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVW
YWx1ZT4oZGlyZWN0aW9uLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICB3cml0aW5nRGlyZWN0aW9uID0gdG9DU1NQcmltaXRpdmVWYWx1ZShkaXJlY3Rpb24uZ2V0
KCkpLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVMdHIgPyBMZWZ0VG9SaWdodFdyaXRpbmdEaXJl
Y3Rpb24gOiBSaWdodFRvTGVmdFdyaXRpbmdEaXJlY3Rpb247CisgICAgICAgIHdyaXRpbmdEaXJl
Y3Rpb24gPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmRpcmVjdGlvbikuZ2V0VmFsdWVJ
RCgpID09IENTU1ZhbHVlTHRyID8gTGVmdFRvUmlnaHRXcml0aW5nRGlyZWN0aW9uIDogUmlnaHRU
b0xlZnRXcml0aW5nRGlyZWN0aW9uOwogCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAg
LTkzMCwxMCArOTMwLDEwIEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpwcmVwYXJlVG9BcHBseUF0KGNv
bnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgU2hvdWxkUHJlc2VydmVXcml0CiAgICAgICAgIHx8IGNz
c1ZhbHVlVG9SR0JBKG1fbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3Bl
cnR5QmFja2dyb3VuZENvbG9yKS5nZXQoKSkgPT0gcmdiYUJhY2tncm91bmRDb2xvckluRWZmZWN0
KHBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSkpCiAgICAgICAgIG1fbXV0YWJsZVN0eWxlLT5yZW1v
dmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAKLSAgICBpZiAodW5pY29k
ZUJpZGkgJiYgdW5pY29kZUJpZGktPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICBtX211
dGFibGVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSwgc3RhdGljX2Nh
c3Q8Q1NTVmFsdWVJRD4odG9DU1NQcmltaXRpdmVWYWx1ZSh1bmljb2RlQmlkaS5nZXQoKSktPmdl
dFZhbHVlSUQoKSkpOwotICAgICAgICBpZiAoZGlyZWN0aW9uICYmIGRpcmVjdGlvbi0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENT
U1Byb3BlcnR5RGlyZWN0aW9uLCBzdGF0aWNfY2FzdDxDU1NWYWx1ZUlEPih0b0NTU1ByaW1pdGl2
ZVZhbHVlKGRpcmVjdGlvbi5nZXQoKSktPmdldFZhbHVlSUQoKSkpOworICAgIGlmIChpczxDU1NQ
cmltaXRpdmVWYWx1ZT4odW5pY29kZUJpZGkuZ2V0KCkpKSB7CisgICAgICAgIG1fbXV0YWJsZVN0
eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBzdGF0aWNfY2FzdDxDU1NW
YWx1ZUlEPihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnVuaWNvZGVCaWRpKS5nZXRWYWx1
ZUlEKCkpKTsKKyAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPihkaXJlY3Rpb24uZ2V0
KCkpKQorICAgICAgICAgICAgbV9tdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5
RGlyZWN0aW9uLCBzdGF0aWNfY2FzdDxDU1NWYWx1ZUlEPihkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKmRpcmVjdGlvbikuZ2V0VmFsdWVJRCgpKSk7CiAgICAgfQogfQogCkBAIC0xMDc1LDEx
ICsxMDc1LDExIEBAIHZvaWQgRWRpdGluZ1N0eWxlOjptZXJnZVN0eWxlKGNvbnN0IFN0eWxlUHJv
cGVydGllcyogc3R5bGUsIENTU1Byb3BlcnR5T3ZlcnJpZGVNCiAKICAgICAgICAgLy8gdGV4dCBk
ZWNvcmF0aW9ucyBuZXZlciBvdmVycmlkZSB2YWx1ZXMKICAgICAgICAgaWYgKChwcm9wZXJ0eS5p
ZCgpID09IENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24gfHwgcHJvcGVydHkuaWQoKSA9PSBDU1NQ
cm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KSAmJiBwcm9wZXJ0eS52YWx1ZSgp
LT5pc1ZhbHVlTGlzdCgpICYmIHZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUtPmlzVmFs
dWVMaXN0KCkpIHsKLSAgICAgICAgICAgICAgICBtZXJnZVRleHREZWNvcmF0aW9uVmFsdWVzKHRv
Q1NTVmFsdWVMaXN0KHZhbHVlLmdldCgpKSwgdG9DU1NWYWx1ZUxpc3QocHJvcGVydHkudmFsdWUo
KSkpOworICAgICAgICAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkgeworICAgICAg
ICAgICAgICAgIG1lcmdlVGV4dERlY29yYXRpb25WYWx1ZXMoZG93bmNhc3Q8Q1NTVmFsdWVMaXN0
Pih2YWx1ZS5nZXQoKSksIGRvd25jYXN0PENTU1ZhbHVlTGlzdD4ocHJvcGVydHkudmFsdWUoKSkp
OwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
dmFsdWUgPSAwOyAvLyB0ZXh0LWRlY29yYXRpb246IG5vbmUgaXMgZXF1aXZhbGVudCB0byBub3Qg
aGF2aW5nIHRoZSBwcm9wZXJ0eQorICAgICAgICAgICAgdmFsdWUgPSBudWxscHRyOyAvLyB0ZXh0
LWRlY29yYXRpb246IG5vbmUgaXMgZXF1aXZhbGVudCB0byBub3QgaGF2aW5nIHRoZSBwcm9wZXJ0
eQogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1vZGUgPT0gT3ZlcnJpZGVWYWx1ZXMgfHwgKG1v
ZGUgPT0gRG9Ob3RPdmVycmlkZVZhbHVlcyAmJiAhdmFsdWUpKQpAQCAtMTEzMSw5ICsxMTMxLDkg
QEAgdm9pZCBFZGl0aW5nU3R5bGU6Om1lcmdlU3R5bGVGcm9tUnVsZXNGb3JTZXJpYWxpemF0aW9u
KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwcm9wZXJ0eUNvdW50OyArK2kpIHsKICAgICAgICAgICAgIFN0eWxlUHJvcGVydGllczo6UHJv
cGVydHlSZWZlcmVuY2UgcHJvcGVydHkgPSBtX211dGFibGVTdHlsZS0+cHJvcGVydHlBdChpKTsK
ICAgICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IHByb3BlcnR5LnZhbHVlKCk7Ci0gICAgICAg
ICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICBpZiAoIWlz
PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgaWYgKHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpLT5pc1BlcmNlbnRhZ2Uo
KSkgeworICAgICAgICAgICAgaWYgKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUp
LmlzUGVyY2VudGFnZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4g
Y29tcHV0ZWRQcm9wZXJ0eVZhbHVlID0gY29tcHV0ZWRTdHlsZS5wcm9wZXJ0eVZhbHVlKHByb3Bl
cnR5LmlkKCkpKQogICAgICAgICAgICAgICAgICAgICBmcm9tQ29tcHV0ZWRTdHlsZS0+YWRkUGFy
c2VkUHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVydHkuaWQoKSwgY29tcHV0ZWRQcm9wZXJ0eVZh
bHVlLnJlbGVhc2UoKSkpOwogICAgICAgICAgICAgfQpAQCAtMTI0NSw5ICsxMjQ1LDkgQEAgYm9v
bCBFZGl0aW5nU3R5bGU6OmlzRmxvYXRpbmcoKQogaW50IEVkaXRpbmdTdHlsZTo6bGVnYWN5Rm9u
dFNpemUoRG9jdW1lbnQqIGRvY3VtZW50KSBjb25zdAogewogICAgIFJlZlB0cjxDU1NWYWx1ZT4g
Y3NzVmFsdWUgPSBtX211dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0
eUZvbnRTaXplKTsKLSAgICBpZiAoIWNzc1ZhbHVlIHx8ICFjc3NWYWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KGNzc1ZhbHVlLmdldCgpKSkK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGxlZ2FjeUZvbnRTaXplRnJvbUNTU1ZhbHVl
KGRvY3VtZW50LCB0b0NTU1ByaW1pdGl2ZVZhbHVlKGNzc1ZhbHVlLmdldCgpKSwKKyAgICByZXR1
cm4gbGVnYWN5Rm9udFNpemVGcm9tQ1NTVmFsdWUoZG9jdW1lbnQsIGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPihjc3NWYWx1ZS5nZXQoKSksCiAgICAgICAgIG1fc2hvdWxkVXNlRml4ZWREZWZh
dWx0Rm9udFNpemUsIEFsd2F5c1VzZUxlZ2FjeUZvbnRTaXplKTsKIH0KIApAQCAtMTMwOCwxMCAr
MTMwOCwxMCBAQCBXcml0aW5nRGlyZWN0aW9uIEVkaXRpbmdTdHlsZTo6dGV4dERpcmVjdGlvbkZv
clNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJgogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHVuaWNvZGVCaWRpID0gQ29tcHV0
ZWRTdHlsZUV4dHJhY3RvcihuKS5wcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5VW5pY29kZUJpZGkp
OwotICAgICAgICAgICAgaWYgKCF1bmljb2RlQmlkaSB8fCAhdW5pY29kZUJpZGktPmlzUHJpbWl0
aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHVuaWNv
ZGVCaWRpLmdldCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAg
Q1NTVmFsdWVJRCB1bmljb2RlQmlkaVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh1bmljb2Rl
QmlkaS5nZXQoKSktPmdldFZhbHVlSUQoKTsKKyAgICAgICAgICAgIENTU1ZhbHVlSUQgdW5pY29k
ZUJpZGlWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdW5pY29kZUJpZGkpLmdl
dFZhbHVlSUQoKTsKICAgICAgICAgICAgIGlmICh1bmljb2RlQmlkaVZhbHVlID09IENTU1ZhbHVl
RW1iZWQgfHwgdW5pY29kZUJpZGlWYWx1ZSA9PSBDU1NWYWx1ZUJpZGlPdmVycmlkZSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb247CiAgICAgICAgIH0KQEAg
LTEzMzcsMTAgKzEzMzcsMTAgQEAgV3JpdGluZ0RpcmVjdGlvbiBFZGl0aW5nU3R5bGU6OnRleHRE
aXJlY3Rpb25Gb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYKIAogICAgICAgICBD
b21wdXRlZFN0eWxlRXh0cmFjdG9yIGNvbXB1dGVkU3R5bGUobm9kZSk7CiAgICAgICAgIFJlZlB0
cjxDU1NWYWx1ZT4gdW5pY29kZUJpZGkgPSBjb21wdXRlZFN0eWxlLnByb3BlcnR5VmFsdWUoQ1NT
UHJvcGVydHlVbmljb2RlQmlkaSk7Ci0gICAgICAgIGlmICghdW5pY29kZUJpZGkgfHwgIXVuaWNv
ZGVCaWRpLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZl
VmFsdWU+KHVuaWNvZGVCaWRpLmdldCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIENTU1ZhbHVlSUQgdW5pY29kZUJpZGlWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodW5p
Y29kZUJpZGkuZ2V0KCkpLT5nZXRWYWx1ZUlEKCk7CisgICAgICAgIENTU1ZhbHVlSUQgdW5pY29k
ZUJpZGlWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdW5pY29kZUJpZGkpLmdl
dFZhbHVlSUQoKTsKICAgICAgICAgaWYgKHVuaWNvZGVCaWRpVmFsdWUgPT0gQ1NTVmFsdWVOb3Jt
YWwpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMTM0OSwxMCArMTM0OSwxMCBAQCBXcml0
aW5nRGlyZWN0aW9uIEVkaXRpbmdTdHlsZTo6dGV4dERpcmVjdGlvbkZvclNlbGVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJgogCiAgICAgICAgIEFTU0VSVCh1bmljb2RlQmlkaVZhbHVlID09
IENTU1ZhbHVlRW1iZWQpOwogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGRpcmVjdGlvbiA9IGNv
bXB1dGVkU3R5bGUucHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eURpcmVjdGlvbik7Ci0gICAgICAg
IGlmICghZGlyZWN0aW9uIHx8ICFkaXJlY3Rpb24tPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAg
ICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oZGlyZWN0aW9uLmdldCgpKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgIENTU1ZhbHVlSUQgZGlyZWN0aW9uVmFsdWUgPSB0b0NT
U1ByaW1pdGl2ZVZhbHVlKGRpcmVjdGlvbi5nZXQoKSktPmdldFZhbHVlSUQoKTsKKyAgICAgICAg
Q1NTVmFsdWVJRCBkaXJlY3Rpb25WYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
ZGlyZWN0aW9uKS5nZXRWYWx1ZUlEKCk7CiAgICAgICAgIGlmIChkaXJlY3Rpb25WYWx1ZSAhPSBD
U1NWYWx1ZUx0ciAmJiBkaXJlY3Rpb25WYWx1ZSAhPSBDU1NWYWx1ZVJ0bCkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCkBAIC0xNDUyLDExICsxNDUyLDExIEBAIHZvaWQgU3R5bGVDaGFuZ2U6OmV4
dHJhY3RUZXh0U3R5bGVzKERvY3VtZW50KiBkb2N1bWVudCwgTXV0YWJsZVN0eWxlUHJvcGVydGll
cyoKICAgICAvLyBBc3N1bWluZyByZWNvbmNpbGVUZXh0RGVjb3JhdGlvblByb3BlcnRpZXMgaGFz
IGJlZW4gY2FsbGVkLCB0aGVyZSBzaG91bGQgbm90IGJlIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9u
cy1pbi1lZmZlY3QKICAgICAvLyBGdXJ0aGVybW9yZSwgdGV4dC1kZWNvcmF0aW9uOiBub25lIGhh
cyBiZWVuIHRyaW1tZWQgc28gdGhhdCB0ZXh0LWRlY29yYXRpb24gcHJvcGVydHkgaXMgYWx3YXlz
IGEgQ1NTVmFsdWVMaXN0LgogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4dERlY29yYXRpb24gPSBz
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKLSAg
ICBpZiAodGV4dERlY29yYXRpb24gJiYgdGV4dERlY29yYXRpb24tPmlzVmFsdWVMaXN0KCkpIHsK
KyAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0Pih0ZXh0RGVjb3JhdGlvbi5nZXQoKSkpIHsKICAgICAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB1bmRlcmxpbmUgPSBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVVbmRlcmxpbmUpOwogICAgICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGxpbmVUaHJvdWdoID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlTGluZVRocm91Z2gpOwogCi0gICAgICAgIFJlZlB0cjxDU1NW
YWx1ZUxpc3Q+IG5ld1RleHREZWNvcmF0aW9uID0gdG9DU1NWYWx1ZUxpc3QodGV4dERlY29yYXRp
b24uZ2V0KCkpLT5jb3B5KCk7CisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IG5ld1RleHRE
ZWNvcmF0aW9uID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdGV4dERlY29yYXRpb24pLmNvcHko
KTsKICAgICAgICAgaWYgKG5ld1RleHREZWNvcmF0aW9uLT5yZW1vdmVBbGwodW5kZXJsaW5lLmdl
dCgpKSkKICAgICAgICAgICAgIG1fYXBwbHlVbmRlcmxpbmUgPSB0cnVlOwogICAgICAgICBpZiAo
bmV3VGV4dERlY29yYXRpb24tPnJlbW92ZUFsbChsaW5lVGhyb3VnaC5nZXQoKSkpCkBAIC0xNDg5
LDkgKzE0ODksOSBAQCB2b2lkIFN0eWxlQ2hhbmdlOjpleHRyYWN0VGV4dFN0eWxlcyhEb2N1bWVu
dCogZG9jdW1lbnQsIE11dGFibGVTdHlsZVByb3BlcnRpZXMqCiAgICAgc3R5bGUtPnJlbW92ZVBy
b3BlcnR5KENTU1Byb3BlcnR5Rm9udEZhbWlseSk7CiAKICAgICBpZiAoUmVmUHRyPENTU1ZhbHVl
PiBmb250U2l6ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNp
emUpKSB7Ci0gICAgICAgIGlmICghZm9udFNpemUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAg
ICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmZvbnRTaXplKSkKICAgICAgICAgICAgIHN0
eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplKTsgLy8gQ2FuJ3QgbWFrZSBz
ZW5zZSBvZiB0aGUgbnVtYmVyLiBQdXQgbm8gZm9udCBzaXplLgotICAgICAgICBlbHNlIGlmIChp
bnQgbGVnYWN5Rm9udFNpemUgPSBsZWdhY3lGb250U2l6ZUZyb21DU1NWYWx1ZShkb2N1bWVudCwg
dG9DU1NQcmltaXRpdmVWYWx1ZShmb250U2l6ZS5nZXQoKSksCisgICAgICAgIGVsc2UgaWYgKGlu
dCBsZWdhY3lGb250U2l6ZSA9IGxlZ2FjeUZvbnRTaXplRnJvbUNTU1ZhbHVlKGRvY3VtZW50LCBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oZm9udFNpemUuZ2V0KCkpLAogICAgICAgICAgICAg
ICAgIHNob3VsZFVzZUZpeGVkRm9udERlZmF1bHRTaXplLCBVc2VMZWdhY3lGb250U2l6ZU9ubHlJ
ZlBpeGVsVmFsdWVzTWF0Y2gpKSB7CiAgICAgICAgICAgICBtX2FwcGx5Rm9udFNpemUgPSBTdHJp
bmc6Om51bWJlcihsZWdhY3lGb250U2l6ZSk7CiAgICAgICAgICAgICBzdHlsZS0+cmVtb3ZlUHJv
cGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSk7CkBAIC0xNTAyLDI4ICsxNTAyLDI2IEBAIHZvaWQg
U3R5bGVDaGFuZ2U6OmV4dHJhY3RUZXh0U3R5bGVzKERvY3VtZW50KiBkb2N1bWVudCwgTXV0YWJs
ZVN0eWxlUHJvcGVydGllcyoKIHN0YXRpYyB2b2lkIGRpZmZUZXh0RGVjb3JhdGlvbnMoTXV0YWJs
ZVN0eWxlUHJvcGVydGllcyogc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydElELCBDU1NWYWx1
ZSogcmVmVGV4dERlY29yYXRpb24pCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiB0ZXh0RGVjb3Jh
dGlvbiA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnRJRCk7Ci0gICAgaWYgKCF0
ZXh0RGVjb3JhdGlvbiB8fCAhdGV4dERlY29yYXRpb24tPmlzVmFsdWVMaXN0KCkgfHwgIXJlZlRl
eHREZWNvcmF0aW9uIHx8ICFyZWZUZXh0RGVjb3JhdGlvbi0+aXNWYWx1ZUxpc3QoKSkKKyAgICBp
ZiAoIWlzPENTU1ZhbHVlTGlzdD4odGV4dERlY29yYXRpb24uZ2V0KCkpIHx8ICFpczxDU1NWYWx1
ZUxpc3Q+KHJlZlRleHREZWNvcmF0aW9uKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRy
PENTU1ZhbHVlTGlzdD4gbmV3VGV4dERlY29yYXRpb24gPSB0b0NTU1ZhbHVlTGlzdCh0ZXh0RGVj
b3JhdGlvbi5nZXQoKSktPmNvcHkoKTsKLSAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlc0luUmVmVGV4
dERlY29yYXRpb24gPSB0b0NTU1ZhbHVlTGlzdChyZWZUZXh0RGVjb3JhdGlvbik7CisgICAgUmVm
UHRyPENTU1ZhbHVlTGlzdD4gbmV3VGV4dERlY29yYXRpb24gPSBkb3duY2FzdDxDU1NWYWx1ZUxp
c3Q+KCp0ZXh0RGVjb3JhdGlvbikuY29weSgpOworICAgIENTU1ZhbHVlTGlzdCYgdmFsdWVzSW5S
ZWZUZXh0RGVjb3JhdGlvbiA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnJlZlRleHREZWNvcmF0
aW9uKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzSW5SZWZUZXh0RGVjb3Jh
dGlvbi0+bGVuZ3RoKCk7IGkrKykKLSAgICAgICAgbmV3VGV4dERlY29yYXRpb24tPnJlbW92ZUFs
bCh2YWx1ZXNJblJlZlRleHREZWNvcmF0aW9uLT5pdGVtKGkpKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHZhbHVlc0luUmVmVGV4dERlY29yYXRpb24ubGVuZ3RoKCk7IGkrKykKKyAgICAg
ICAgbmV3VGV4dERlY29yYXRpb24tPnJlbW92ZUFsbCh2YWx1ZXNJblJlZlRleHREZWNvcmF0aW9u
Lml0ZW0oaSkpOwogCiAgICAgc2V0VGV4dERlY29yYXRpb25Qcm9wZXJ0eShzdHlsZSwgbmV3VGV4
dERlY29yYXRpb24uZ2V0KCksIHByb3BlcnRJRCk7CiB9CiAKIHN0YXRpYyBib29sIGZvbnRXZWln
aHRJc0JvbGQoQ1NTVmFsdWUqIGZvbnRXZWlnaHQpCiB7Ci0gICAgaWYgKCFmb250V2VpZ2h0KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFmb250V2VpZ2h0LT5pc1ByaW1pdGl2ZVZh
bHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oZm9udFdlaWdodCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEJlY2F1c2UgYiB0YWcgY2FuIG9ubHkgYm9sZCB0
ZXh0LCB0aGVyZSBhcmUgb25seSB0d28gc3RhdGVzIGluIHBsYWluIGh0bWw6IGJvbGQgYW5kIG5v
dCBib2xkLgogICAgIC8vIENvbGxhcHNlIGFsbCBvdGhlciB2YWx1ZXMgdG8gZWl0aGVyIG9uZSBv
ZiB0aGVzZSB0d28gc3RhdGVzIGZvciBlZGl0aW5nIHB1cnBvc2VzLgotICAgIHN3aXRjaCAodG9D
U1NQcmltaXRpdmVWYWx1ZShmb250V2VpZ2h0KS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgc3dpdGNo
IChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmZvbnRXZWlnaHQpLmdldFZhbHVlSUQoKSkg
ewogICAgICAgICBjYXNlIENTU1ZhbHVlMTAwOgogICAgICAgICBjYXNlIENTU1ZhbHVlMjAwOgog
ICAgICAgICBjYXNlIENTU1ZhbHVlMzAwOgpAQCAtMTYxNSwxMiArMTYxMywxMiBAQCBib29sIGlz
VHJhbnNwYXJlbnRDb2xvclZhbHVlKENTU1ZhbHVlKiBjc3NWYWx1ZSkKIHsKICAgICBpZiAoIWNz
c1ZhbHVlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoIWNzc1ZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmNzc1ZhbHVlKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUoY3NzVmFsdWUpOyAgICAKLSAgICBpZiAodmFsdWUtPmlzUkdCQ29s
b3IoKSkKLSAgICAgICAgcmV0dXJuICFhbHBoYUNoYW5uZWwodmFsdWUtPmdldFJHQkEzMlZhbHVl
KCkpOyAgICAKLSAgICByZXR1cm4gdmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVRyYW5z
cGFyZW50OworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPigqY3NzVmFsdWUpOworICAgIGlmICh2YWx1ZS5pc1JHQkNvbG9yKCkpCisgICAg
ICAgIHJldHVybiAhYWxwaGFDaGFubmVsKHZhbHVlLmdldFJHQkEzMlZhbHVlKCkpOworICAgIHJl
dHVybiB2YWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVUcmFuc3BhcmVudDsKIH0KIAogYm9v
bCBoYXNUcmFuc3BhcmVudEJhY2tncm91bmRDb2xvcihTdHlsZVByb3BlcnRpZXMqIHN0eWxlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggN2RiNjM2NGRiYTRm
MzU2ZTI0MTg5ZDcxNGVlMmRjZGMyMDU0MDRhYS4uYzBjMTI4N2VkMjcwNzNiZDJkMzcwZTUwNzY5
Y2Q4MzQ0Yjk5NmM3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JD
b21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3Bw
CkBAIC0xMzksOCArMTM5LDggQEAgc3RhdGljIGJvb2wgZXhlY3V0ZVRvZ2dsZVN0eWxlSW5MaXN0
KEZyYW1lJiBmcmFtZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEUKIAogICAgIFJlZlB0
cjxDU1NWYWx1ZT4gc2VsZWN0ZWRDU1NWYWx1ZSA9IHNlbGVjdGlvblN0eWxlLT5zdHlsZSgpLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOwogICAgIFN0cmluZyBuZXdTdHlsZSA9IEFT
Q0lJTGl0ZXJhbCgibm9uZSIpOwotICAgIGlmIChzZWxlY3RlZENTU1ZhbHVlLT5pc1ZhbHVlTGlz
dCgpKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHNlbGVjdGVkQ1NTVmFsdWVMaXN0
ID0gdG9DU1NWYWx1ZUxpc3Qoc2VsZWN0ZWRDU1NWYWx1ZS5nZXQoKSk7CisgICAgaWYgKGlzPENT
U1ZhbHVlTGlzdD4oKnNlbGVjdGVkQ1NTVmFsdWUpKSB7CisgICAgICAgIFJlZlB0cjxDU1NWYWx1
ZUxpc3Q+IHNlbGVjdGVkQ1NTVmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PihzZWxl
Y3RlZENTU1ZhbHVlLmdldCgpKTsKICAgICAgICAgaWYgKCFzZWxlY3RlZENTU1ZhbHVlTGlzdC0+
cmVtb3ZlQWxsKHZhbHVlKSkKICAgICAgICAgICAgIHNlbGVjdGVkQ1NTVmFsdWVMaXN0LT5hcHBl
bmQoKnZhbHVlKTsKICAgICAgICAgaWYgKHNlbGVjdGVkQ1NTVmFsdWVMaXN0LT5sZW5ndGgoKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5t
bSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQppbmRleCAw
ZDVkM2ZlMGY3OWExYmIwMTE0Y2Q3MWYyN2M3MTllYzg0ZmMwMzk4Li40MjYxMmU0ZTlkYzBlNjFl
YTA2ZjgxMWZlMjg4NDhmNTc2ZmE2MWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9IVE1MQ29udmVydGVyLm1tCkBAIC03MjAsOCArNzIwLDggQEAgUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gSFRNTENvbnZlcnRlckNhY2hlczo6aW5saW5lU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQo
RWxlbWVudCYKIAogc3RhdGljIGJvb2wgc3RyaW5nRnJvbUNTU1ZhbHVlKENTU1ZhbHVlJiB2YWx1
ZSwgU3RyaW5nJiByZXN1bHQpCiB7Ci0gICAgaWYgKHZhbHVlLmlzUHJpbWl0aXZlVmFsdWUoKSkg
ewotICAgICAgICB1bnNpZ25lZCBzaG9ydCBwcmltaXRpdmVUeXBlID0gdG9DU1NQcmltaXRpdmVW
YWx1ZSh2YWx1ZSkucHJpbWl0aXZlVHlwZSgpOworICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpKSB7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IHByaW1pdGl2ZVR5cGUgPSBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnByaW1pdGl2ZVR5cGUoKTsKICAgICAgICAg
aWYgKHByaW1pdGl2ZVR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcgfHwgcHJp
bWl0aXZlVHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSB8fAogICAgICAgICAgICAg
cHJpbWl0aXZlVHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UIHx8IHByaW1pdGl2
ZVR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19BVFRSKSB7CiAgICAgICAgICAgICBTdHJp
bmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS5jc3NUZXh0KCk7CkBAIC04OTIsMTMgKzg5MiwxMyBAQCBi
b29sIEhUTUxDb252ZXJ0ZXJDYWNoZXM6OmZsb2F0UHJvcGVydHlWYWx1ZUZvck5vZGUoTm9kZSYg
bm9kZSwgQ1NTUHJvcGVydHlJRCBwcgogCiAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0
PEVsZW1lbnQ+KG5vZGUpOwogICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gY29tcHV0
ZWRTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChlbGVtZW50LCBwcm9wZXJ0eUlkKSkgewotICAgICAg
ICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiBmbG9hdFZhbHVlRnJvbVByaW1pdGl2
ZVZhbHVlKHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVlKSwgcmVzdWx0KSkKKyAgICAgICAgaWYg
KGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpICYmIGZsb2F0VmFsdWVGcm9tUHJpbWl0aXZl
VmFsdWUoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSksIHJlc3VsdCkpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBib29sIGluaGVyaXQgPSBmYWxzZTsK
ICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGlubGluZVN0eWxlUHJvcGVydHlGb3JF
bGVtZW50KGVsZW1lbnQsIHByb3BlcnR5SWQpKSB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpICYmIGZsb2F0VmFsdWVGcm9tUHJpbWl0aXZlVmFsdWUodG9DU1NQcmltaXRp
dmVWYWx1ZSgqdmFsdWUpLCByZXN1bHQpKQorICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSkgJiYgZmxvYXRWYWx1ZUZyb21QcmltaXRpdmVWYWx1ZShkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnZhbHVlKSwgcmVzdWx0KSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICBpZiAodmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSkKICAgICAgICAgICAgIGlu
aGVyaXQgPSB0cnVlOwpAQCAtMTA2MSwxNCArMTA2MSwxNCBAQCBDb2xvciBIVE1MQ29udmVydGVy
Q2FjaGVzOjpjb2xvclByb3BlcnR5VmFsdWVGb3JOb2RlKE5vZGUmIG5vZGUsIENTU1Byb3BlcnR5
SUQgcAogCiAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwog
ICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gY29tcHV0ZWRTdHlsZVByb3BlcnR5Rm9y
RWxlbWVudChlbGVtZW50LCBwcm9wZXJ0eUlkKSkgewotICAgICAgICBpZiAodmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSkuaXNSR0JDb2xvcigp
KQotICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRDb2xvcihDb2xvcih0b0NTU1ByaW1pdGl2
ZVZhbHVlKCp2YWx1ZSkuZ2V0UkdCQTMyVmFsdWUoKSksIHByb3BlcnR5SWQgPT0gQ1NTUHJvcGVy
dHlDb2xvcik7CisgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5pc1JHQkNvbG9yKCkpCisgICAgICAg
ICAgICByZXR1cm4gbm9ybWFsaXplZENvbG9yKENvbG9yKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqdmFsdWUpLmdldFJHQkEzMlZhbHVlKCkpLCBwcm9wZXJ0eUlkID09IENTU1Byb3BlcnR5
Q29sb3IpOwogICAgIH0KIAogICAgIGJvb2wgaW5oZXJpdCA9IGZhbHNlOwogICAgIGlmIChSZWZQ
dHI8Q1NTVmFsdWU+IHZhbHVlID0gaW5saW5lU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoZWxlbWVu
dCwgcHJvcGVydHlJZCkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkg
JiYgdG9DU1NQcmltaXRpdmVWYWx1ZSgqdmFsdWUpLmlzUkdCQ29sb3IoKSkKLSAgICAgICAgICAg
IHJldHVybiBub3JtYWxpemVkQ29sb3IoQ29sb3IodG9DU1NQcmltaXRpdmVWYWx1ZSgqdmFsdWUp
LmdldFJHQkEzMlZhbHVlKCkpLCBwcm9wZXJ0eUlkID09IENTU1Byb3BlcnR5Q29sb3IpOworICAg
ICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNSR0JDb2xvcigpKQorICAgICAgICAgICAgcmV0dXJuIG5v
cm1hbGl6ZWRDb2xvcihDb2xvcihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5n
ZXRSR0JBMzJWYWx1ZSgpKSwgcHJvcGVydHlJZCA9PSBDU1NQcm9wZXJ0eUNvbG9yKTsKICAgICAg
ICAgaWYgKHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpCiAgICAgICAgICAgICBpbmhlcml0ID0g
dHJ1ZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggOTBmNDU1YjZjMTY5
ODZhN2FiZTEzOGM4YzU5ODIzZTAyNjE5MWYwOS4uMGU4ZmY4MzdmZWU0MGJmYzAyMWQ5ZmMyZjk5
ZWIxMjNkM2I0MmRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtNDc2LDkgKzQ3
Niw5IEBAIHN0YXRpYyBib29sIHByb3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUoU3R5bGVQcm9w
ZXJ0aWVzKiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwCiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1
ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOwogICAgIGlmICghdmFs
dWUpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFs
dWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUuZ2V0KCkp
LT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lOworICAgIHJldHVybiBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lOwogfQog
CiBzdGF0aWMgYm9vbCBuZWVkSW50ZXJjaGFuZ2VOZXdsaW5lQWZ0ZXIoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiB2KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXpl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAppbmRleCBiYWM0
ZjIxM2NjMjk5YmRkZWY3NDIxNGVmZDQzOGEzYjMzZDE0MGQzLi4xOTQ2YjkzNmIzYTczMmQzZDMx
YjI5MGIwMWU0YmM1MTMxOWQ0ZjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VTZXJpYWxpemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVy
LmNwcApAQCAtMzI4LDEwICszMjgsMTAgQEAgdm9pZCBQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVS
ZXNvdXJjZXNGb3JQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydGllcyogc3R5bGUKICAgICB1
bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gc3R5bGVEZWNsYXJhdGlvbi0+cHJvcGVydHlDb3VudCgp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0eUNvdW50OyArK2kpIHsKICAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSA9IHN0eWxlRGVjbGFyYXRpb24tPnByb3Bl
cnR5QXQoaSkudmFsdWUoKTsKLSAgICAgICAgaWYgKCFjc3NWYWx1ZS0+aXNJbWFnZVZhbHVlKCkp
CisgICAgICAgIGlmICghaXM8Q1NTSW1hZ2VWYWx1ZT4oKmNzc1ZhbHVlKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2UgPSB0b0NTU0ltYWdl
VmFsdWUoY3NzVmFsdWUuZ2V0KCkpLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOworICAgICAgICBT
dHlsZUltYWdlKiBzdHlsZUltYWdlID0gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oKmNzc1ZhbHVl
KS5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOwogICAgICAgICAvLyBOb24gY2FjaGVkLWltYWdlcyBh
cmUganVzdCBwbGFjZS1ob2xkZXJzIGFuZCBkbyBub3QgY29udGFpbiBkYXRhLgogICAgICAgICBp
ZiAoIXN0eWxlSW1hZ2UgfHwgIXN0eWxlSW1hZ2UtPmlzQ2FjaGVkSW1hZ2UoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
Q1NTUHJvcGVydHlBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
Q1NTUHJvcGVydHlBbmltYXRpb24uY3BwCmluZGV4IDdmMDZjZmUwNWVlZWRmNDQwNDc5OThhODll
MDUxZWNmMzFhZGUzM2QuLmJlYTg1M2VlOWU5NDE3ZTgwOTY2NDAzMTIxYzUzMWEyOTA5MDdmODcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5p
bWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0
eUFuaW1hdGlvbi5jcHAKQEAgLTI5NywxOCArMjk3LDE4IEBAIHN0YXRpYyBpbmxpbmUgUGFzc1Jl
ZlB0cjxTdHlsZUltYWdlPiBibGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9uQmFzZSogYW5pbSwgU3R5
bGVJCiAgICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIGZyb21HZW5lcmF0ZWQgPSB0b1N0
eWxlR2VuZXJhdGVkSW1hZ2UoZnJvbSktPmltYWdlVmFsdWUoKTsKICAgICAgICAgQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZSYgdG9HZW5lcmF0ZWQgPSB0b1N0eWxlR2VuZXJhdGVkSW1hZ2UodG8pLT5p
bWFnZVZhbHVlKCk7CiAKLSAgICAgICAgaWYgKGZyb21HZW5lcmF0ZWQuaXNGaWx0ZXJJbWFnZVZh
bHVlKCkgJiYgdG9HZW5lcmF0ZWQuaXNGaWx0ZXJJbWFnZVZhbHVlKCkpIHsKKyAgICAgICAgaWYg
KGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpICYmIGlzPENTU0ZpbHRlcklt
YWdlVmFsdWU+KHRvR2VuZXJhdGVkKSkgewogICAgICAgICAgICAgLy8gQW5pbWF0aW9uIG9mIGdl
bmVyYXRlZCBpbWFnZXMganVzdCBwb3NzaWJsZSBpZiBpbnB1dCBpbWFnZXMgYXJlIGVxdWFsLgog
ICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGZhbGwgYmFjayB0byBjcm9zcyBmYWRlIGFuaW1hdGlv
bi4KLSAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSB0b0NTU0Zp
bHRlckltYWdlVmFsdWUoZnJvbUdlbmVyYXRlZCk7Ci0gICAgICAgICAgICBDU1NGaWx0ZXJJbWFn
ZVZhbHVlJiB0b0ZpbHRlciA9IHRvQ1NTRmlsdGVySW1hZ2VWYWx1ZSh0b0dlbmVyYXRlZCk7Cisg
ICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiBmcm9tRmlsdGVyID0gZG93bmNhc3Q8Q1NT
RmlsdGVySW1hZ2VWYWx1ZT4oZnJvbUdlbmVyYXRlZCk7CisgICAgICAgICAgICBDU1NGaWx0ZXJJ
bWFnZVZhbHVlJiB0b0ZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2Vu
ZXJhdGVkKTsKICAgICAgICAgICAgIGlmIChmcm9tRmlsdGVyLmVxdWFsSW5wdXRJbWFnZXModG9G
aWx0ZXIpICYmIGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gYmxlbmRGaWx0ZXIoYW5pbSwgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpLCBmcm9tRmlsdGVy
LmZpbHRlck9wZXJhdGlvbnMoKSwgdG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVz
cyk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoZnJvbUdlbmVyYXRlZC5pc0Nyb3NzZmFkZVZh
bHVlKCkgJiYgdG9HZW5lcmF0ZWQuaXNDcm9zc2ZhZGVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBD
U1NDcm9zc2ZhZGVWYWx1ZSYgZnJvbUNyb3NzZmFkZSA9IHRvQ1NTQ3Jvc3NmYWRlVmFsdWUoZnJv
bUdlbmVyYXRlZCk7Ci0gICAgICAgICAgICBDU1NDcm9zc2ZhZGVWYWx1ZSYgdG9Dcm9zc2ZhZGUg
PSB0b0NTU0Nyb3NzZmFkZVZhbHVlKHRvR2VuZXJhdGVkKTsKKyAgICAgICAgaWYgKGlzPENTU0Ny
b3NzZmFkZVZhbHVlPihmcm9tR2VuZXJhdGVkKSAmJiBpczxDU1NDcm9zc2ZhZGVWYWx1ZT4odG9H
ZW5lcmF0ZWQpKSB7CisgICAgICAgICAgICBDU1NDcm9zc2ZhZGVWYWx1ZSYgZnJvbUNyb3NzZmFk
ZSA9IGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPihmcm9tR2VuZXJhdGVkKTsKKyAgICAgICAg
ICAgIENTU0Nyb3NzZmFkZVZhbHVlJiB0b0Nyb3NzZmFkZSA9IGRvd25jYXN0PENTU0Nyb3NzZmFk
ZVZhbHVlPih0b0dlbmVyYXRlZCk7CiAgICAgICAgICAgICBpZiAoZnJvbUNyb3NzZmFkZS5lcXVh
bElucHV0SW1hZ2VzKHRvQ3Jvc3NmYWRlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gU3R5bGVH
ZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKCp0b0Nyb3NzZmFkZS5ibGVuZChmcm9tQ3Jvc3NmYWRlLCBw
cm9ncmVzcykpOwogICAgICAgICB9CkBAIC0zMTcsMTYgKzMxNywxNiBAQCBzdGF0aWMgaW5saW5l
IFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRGdW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFu
aW0sIFN0eWxlSQogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTE5OTU2CiAgICAgfSBlbHNlIGlmIChmcm9tLT5pc0dlbmVyYXRlZEltYWdlKCkgJiYg
dG8tPmlzQ2FjaGVkSW1hZ2UoKSkgewogICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlJiBm
cm9tR2VuZXJhdGVkID0gdG9TdHlsZUdlbmVyYXRlZEltYWdlKGZyb20pLT5pbWFnZVZhbHVlKCk7
Ci0gICAgICAgIGlmIChmcm9tR2VuZXJhdGVkLmlzRmlsdGVySW1hZ2VWYWx1ZSgpKSB7Ci0gICAg
ICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiBmcm9tRmlsdGVyID0gdG9DU1NGaWx0ZXJJbWFn
ZVZhbHVlKGZyb21HZW5lcmF0ZWQpOworICAgICAgICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1
ZT4oZnJvbUdlbmVyYXRlZCkpIHsKKyAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIGZy
b21GaWx0ZXIgPSBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKTsK
ICAgICAgICAgICAgIGlmIChmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCkgJiYgdG9TdHlsZUNhY2hl
ZEltYWdlKHRvKS0+Y2FjaGVkSW1hZ2UoKSA9PSBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0sIGZyb21GaWx0ZXIuY2FjaGVk
SW1hZ2UoKSwgZnJvbUZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIEZpbHRlck9wZXJhdGlvbnMo
KSwgcHJvZ3Jlc3MpOwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiBBZGQgaW50ZXJwb2xh
dGlvbiBiZXR3ZWVuIGNyb3NzLWZhZGUgYW5kIGltYWdlIHNvdXJjZS4KICAgICB9IGVsc2UgaWYg
KGZyb20tPmlzQ2FjaGVkSW1hZ2UoKSAmJiB0by0+aXNHZW5lcmF0ZWRJbWFnZSgpKSB7CiAgICAg
ICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIHRvR2VuZXJhdGVkID0gdG9TdHlsZUdlbmVyYXRl
ZEltYWdlKHRvKS0+aW1hZ2VWYWx1ZSgpOwotICAgICAgICBpZiAodG9HZW5lcmF0ZWQuaXNGaWx0
ZXJJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIHRvRmls
dGVyID0gdG9DU1NGaWx0ZXJJbWFnZVZhbHVlKHRvR2VuZXJhdGVkKTsKKyAgICAgICAgaWYgKGlz
PENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKSkgeworICAgICAgICAgICAgQ1NTRmls
dGVySW1hZ2VWYWx1ZSYgdG9GaWx0ZXIgPSBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPih0
b0dlbmVyYXRlZCk7CiAgICAgICAgICAgICBpZiAodG9GaWx0ZXIuY2FjaGVkSW1hZ2UoKSAmJiB0
b1N0eWxlQ2FjaGVkSW1hZ2UoZnJvbSktPmNhY2hlZEltYWdlKCkgPT0gdG9GaWx0ZXIuY2FjaGVk
SW1hZ2UoKSkgICAgIAogICAgICAgICAgICAgICAgIHJldHVybiBibGVuZEZpbHRlcihhbmltLCB0
b0ZpbHRlci5jYWNoZWRJbWFnZSgpLCBGaWx0ZXJPcGVyYXRpb25zKCksIHRvRmlsdGVyLmZpbHRl
ck9wZXJhdGlvbnMoKSwgcHJvZ3Jlc3MpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAppbmRleCA0MDM1ZjY2MDQxOWVhZjUwODNh
ZGIzZDNlYjgxYzJkOWExOTg3NzkzLi5mNDJlY2U3NjY2YzNlZDcxZjBkNWQxNTY3ZDZiZTE2MDk1
NWNkN2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bC5jcHAKQEAgLTg0LDggKzg0LDggQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6YWRqdXN0SW5u
ZXJUZXh0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUsIFJlbmQKICAgICBpZiAo
SFRNTEVsZW1lbnQqIGlubmVyVGV4dCA9IGNvbnRyb2wuaW5uZXJUZXh0RWxlbWVudCgpKSB7CiAg
ICAgICAgIGlmIChjb25zdCBTdHlsZVByb3BlcnRpZXMqIHByb3BlcnRpZXMgPSBpbm5lclRleHQt
PnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NW
YWx1ZT4gdmFsdWUgPSBwcm9wZXJ0aWVzLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5
V2Via2l0VXNlck1vZGlmeSk7Ci0gICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgICAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0VXNlck1v
ZGlmeSh0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSkpOworICAgICAgICAgICAgaWYgKGlzPENT
U1ByaW1pdGl2ZVZhbHVlPih2YWx1ZS5nZXQoKSkpCisgICAgICAgICAgICAgICAgdGV4dEJsb2Nr
U3R5bGUtPnNldFVzZXJNb2RpZnkoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkp
OwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU3R5bGVQZW5kaW5nSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9TdHlsZVBlbmRpbmdJbWFnZS5oCmluZGV4IGI5NTQ4Njg1NGFhMWM5YWNiNmExYWI5MjIw
M2Q3OTQxNDE2MDZiMDUuLjU5OWRhMDQ3YWI2M2Q2NDgyYmFhNDU2ZWJjZGIwMjhkMjkzZGVlYTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVBlbmRpbmdJ
bWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVBlbmRpbmdJ
bWFnZS5oCkBAIC00NSwxMiArNDUsMTIgQEAgY2xhc3MgU3R5bGVQZW5kaW5nSW1hZ2UgOiBwdWJs
aWMgU3R5bGVJbWFnZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVQZW5k
aW5nSW1hZ2U+IGNyZWF0ZShDU1NWYWx1ZSogdmFsdWUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
dHlsZVBlbmRpbmdJbWFnZSh2YWx1ZSkpOyB9CiAKLSAgICBDU1NJbWFnZVZhbHVlKiBjc3NJbWFn
ZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSAmJiBtX3ZhbHVlLT5pc0ltYWdlVmFsdWUo
KSA/IHRvQ1NTSW1hZ2VWYWx1ZShtX3ZhbHVlKSA6IG51bGxwdHI7IH0KKyAgICBDU1NJbWFnZVZh
bHVlKiBjc3NJbWFnZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gaXM8Q1NTSW1hZ2VWYWx1ZT4obV92
YWx1ZSkgPyBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX3ZhbHVlKSA6IG51bGxwdHI7IH0KICAg
ICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKiBjc3NJbWFnZUdlbmVyYXRvclZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZSAmJiBtX3ZhbHVlLT5pc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSA/IHN0
YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPihtX3ZhbHVlKSA6IG51bGxwdHI7IH0K
LSAgICBDU1NDdXJzb3JJbWFnZVZhbHVlKiBjc3NDdXJzb3JJbWFnZVZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZSAmJiBtX3ZhbHVlLT5pc0N1cnNvckltYWdlVmFsdWUoKSA/IHRvQ1NTQ3Vy
c29ySW1hZ2VWYWx1ZShtX3ZhbHVlKSA6IG51bGxwdHI7IH0KKyAgICBDU1NDdXJzb3JJbWFnZVZh
bHVlKiBjc3NDdXJzb3JJbWFnZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gaXM8Q1NTQ3Vyc29ySW1h
Z2VWYWx1ZT4obV92YWx1ZSkgPyBkb3duY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlPihtX3ZhbHVl
KSA6IG51bGxwdHI7IH0KIAogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQotICAgIENTU0ltYWdl
U2V0VmFsdWUqIGNzc0ltYWdlU2V0VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlICYmIG1f
dmFsdWUtPmlzSW1hZ2VTZXRWYWx1ZSgpID8gdG9DU1NJbWFnZVNldFZhbHVlKG1fdmFsdWUpIDog
bnVsbHB0cjsgfQorICAgIENTU0ltYWdlU2V0VmFsdWUqIGNzc0ltYWdlU2V0VmFsdWUoKSBjb25z
dCB7IHJldHVybiBpczxDU1NJbWFnZVNldFZhbHVlPihtX3ZhbHVlKSA/IGRvd25jYXN0PENTU0lt
YWdlU2V0VmFsdWU+KG1fdmFsdWUpIDogbnVsbHB0cjsgfQogI2VuZGlmCiAKICAgICB2b2lkIGRl
dGFjaEZyb21DU1NWYWx1ZSgpIHsgbV92YWx1ZSA9IG51bGxwdHI7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdDb2xvci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NvbG9y
LmgKaW5kZXggNDYwY2YwMjk4YzhhNGYzNjA2OTEyYTEyMzUyNWUyMDdiOTU4MzVlYS4uMDA3NWVk
ZWNhZDdmNjVlYmI5NDljZDMwMDUwMDAzN2JhZTJjNDcyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0NvbG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NvbG9yLmgK
QEAgLTkyLDggKzkyLDggQEAgcHJpdmF0ZToKICAgICBTVkdDb2xvclR5cGUgbV9jb2xvclR5cGU7
CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhTVkdDb2xvciwgaXNTVkdDb2xvcigpKTsKLQog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxV
RShTVkdDb2xvciwgaXNTVkdDb2xvcigpKQorCiAjZW5kaWYgLy8gU1ZHQ29sb3JfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAppbmRleCAwNmRkMjQ4MDRiMjQ3ZTVk
OTM2ZjU1NDFkODBiZGNiNTY2NjA1MzBiLi5hZTY0OWRlYTMxOTJmNTM5MTk2YTY5OWYxNTliNWI5
NzY2MDBkODlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcApA
QCAtMjUzLDExICsyNTMsMTEgQEAgdm9pZCBTVkdGb250RmFjZUVsZW1lbnQ6OnJlYnVpbGRGb250
RmFjZSgpCiAgICAgaWYgKGRlc2NyaWJlc1BhcmVudEZvbnQpIHsgICAgCiAgICAgICAgIC8vIFRy
YXZlcnNlIHBhcnNlZCBDU1MgdmFsdWVzIGFuZCBhc3NvY2lhdGUgQ1NTRm9udEZhY2VTcmNWYWx1
ZSBlbGVtZW50cyB3aXRoIG91cnNlbHZlcy4KICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBzcmMg
PSBtX2ZvbnRGYWNlUnVsZS0+cHJvcGVydGllcygpLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJv
cGVydHlTcmMpOwotICAgICAgICBDU1NWYWx1ZUxpc3QqIHNyY0xpc3QgPSB0b0NTU1ZhbHVlTGlz
dChzcmMuZ2V0KCkpOworICAgICAgICBDU1NWYWx1ZUxpc3QqIHNyY0xpc3QgPSBkb3duY2FzdDxD
U1NWYWx1ZUxpc3Q+KHNyYy5nZXQoKSk7CiAKICAgICAgICAgdW5zaWduZWQgc3JjTGVuZ3RoID0g
c3JjTGlzdCA/IHNyY0xpc3QtPmxlbmd0aCgpIDogMDsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNyY0xlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoQ1NTRm9udEZhY2VT
cmNWYWx1ZSogaXRlbSA9IHRvQ1NTRm9udEZhY2VTcmNWYWx1ZShzcmNMaXN0LT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKGkpKSkKKyAgICAgICAgICAgIGlmIChDU1NGb250RmFjZVNyY1ZhbHVlKiBp
dGVtID0gZG93bmNhc3Q8Q1NTRm9udEZhY2VTcmNWYWx1ZT4oc3JjTGlzdC0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjayhpKSkpCiAgICAgICAgICAgICAgICAgaXRlbS0+c2V0U1ZHRm9udEZhY2VFbGVt
ZW50KHRoaXMpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFpbnQuaAppbmRleCBkMzA5
M2FmYjJhZTM4ZjlhNzcxNTU4ZGM4Yzc4MmRiMjkyNzMwZDA4Li5hYTM5YzdlMGI5OTc3MTNjYmM5
MTYxZWRkNTY0NDBmNTAzMGQwM2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UGFpbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFpbnQuaApAQCAtMTEyLDggKzEx
Miw4IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdXJpOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVf
Q0FTVFMoU1ZHUGFpbnQsIGlzU1ZHUGFpbnQoKSk7Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoU1ZHUGFpbnQsIGlzU1ZHUGFpbnQo
KSkKKwogI2VuZGlmIC8vIFNWR1BhaW50X2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239243</attachid>
            <date>2014-10-03 15:24:12 -0700</date>
            <delta_ts>2014-10-03 15:34:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137381-20141003152413.patch</filename>
            <type>text/plain</type>
            <size>277104</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MjkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTgxMTY3OGUxOTM5Y2Uy
ZGZjODBkYzMzMjQyNTM2OGY4NDkzMTJiYy4uYmMzMGI3OTVkZGM3ZDI3YTI3NmQ4M2NlNTdmY2Iw
MWE4MzNlNTUwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0MSBAQAorMjAxNC0xMC0wMiAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSBmb3IgQ1NTVmFsdWUgc3ViY2xhc3NlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzgxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgQmVuamFtaW4gUG91bGFpbi4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8Pigp
IGZvciBDU1NWYWx1ZSBzdWJjbGFzc2VzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVo
YXZpb3IgY2hhbmdlLgorCisgICAgICAgICogY3NzL0NTU0FzcGVjdFJhdGlvVmFsdWUuaDoKKyAg
ICAgICAgKiBjc3MvQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmg6CisgICAgICAgICogY3NzL0NT
U0NhbGN1bGF0aW9uVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlUGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAgICAgKiBjc3MvQ1NTQ2FsY3VsYXRpb25W
YWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NDYW52YXNWYWx1ZS5oOgorICAgICAgICAqIGNzcy9D
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Qm9y
ZGVyUmFkaXVzU2hvcnRoYW5kVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHls
ZUV4dHJhY3Rvcjo6cHJvcGVydHlNYXRjaGVzKToKKyAgICAgICAgKiBjc3MvQ1NTQ3Jvc3NmYWRl
VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3ViaW1hZ2VLbm93blRvQmVPcGFxdWUpOgor
ICAgICAgICAqIGNzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NDdXJz
b3JJbWFnZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0N1cnNvckltYWdlVmFsdWU6
On5DU1NDdXJzb3JJbWFnZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0N1cnNvckltYWdl
VmFsdWU6OnVwZGF0ZUlmU1ZHQ3Vyc29ySXNVc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0N1
cnNvckltYWdlVmFsdWU6OmNhY2hlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0N1cnNv
ckltYWdlVmFsdWU6OmNhY2hlZE9yUGVuZGluZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0N1cnNvckltYWdlVmFsdWU6OmlzU1ZHQ3Vyc29yKToKKyAgICAgICAgKiBjc3MvQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmg6CisgICAg
ICAgICogY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZl
YXR1cmVWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUpOgorICAgICAgICAq
IGNzcy9DU1NGb250VmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTRnVuY3Rpb25WYWx1ZS5oOgor
ICAgICAgICAqIGNzcy9DU1NHcmFkaWVudFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0dyYWRpZW50VmFsdWU6OmltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0dyYWRpZW50VmFs
dWU6OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKToKKyAgICAgICAgKiBjc3MvQ1NTR3JhZGll
bnRWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NHcmlkTGluZU5hbWVzVmFsdWUuaDoKKyAgICAg
ICAgKiBjc3MvQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NJ
bWFnZUdlbmVyYXRvclZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJh
dG9yVmFsdWU6OmltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFs
dWU6OmlzRml4ZWRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFs
dWU6OmZpeGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVl
Ojppc1BlbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6
a25vd25Ub0JlT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFs
dWU6OmxvYWRTdWJpbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZTo6c3ViaW1hZ2VJc1BlbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZTo6Y2FjaGVkSW1hZ2VGb3JDU1NWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU0lt
YWdlR2VuZXJhdG9yVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjpmaWxsSW1hZ2VTZXQpOgorICAg
ICAgICAqIGNzcy9DU1NJbWFnZVNldFZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0ltYWdlVmFs
dWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTSW5oZXJpdGVkVmFsdWUuaDoKKyAgICAgICAgKiBjc3Mv
Q1NTSW5pdGlhbFZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0xpbmVCb3hDb250YWluVmFsdWUu
aDoKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6cGFyc2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmFkZEZpbGxW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmFkZEFuaW1hdGlvblZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2UzVmFsdWVzRmlsbFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGaWxsUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZpbGxSZXBlYXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Z3JpZE1pc3NpbmdHcmlkUG9zaXRpb25WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
YXJzZXI6OnBhcnNlR3JpZFRlbXBsYXRlUm93c0FuZEFyZWFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlQ2lyY2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
YXJzZXI6OnBhcnNlRGVwcmVjYXRlZEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6cGFyc2VEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUGFyc2VyOjpwYXJzZVJhZGlhbEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFs
dWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTUmVmbGVjdFZhbHVlLmg6CisgICAgICAgICogY3NzL0NT
U1NoYWRvd1ZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaDoK
KyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjptYXBGaWxsQXR0YWNobWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0
eWxlTWFwOjptYXBGaWxsQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpt
YXBGaWxsQ29tcG9zaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6Om1hcEZp
bGxCbGVuZE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbE9y
aWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBGaWxsU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NUb1N0eWxlTWFwOjptYXBGaWxsWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxZUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VG9TdHlsZU1hcDo6bWFwRmlsbE1hc2tTb3VyY2VUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbkRlbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Rv
U3R5bGVNYXA6Om1hcEFuaW1hdGlvbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjptYXBBbmltYXRpb25EdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjptYXBBbmltYXRpb25GaWxsTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjptYXBBbmltYXRpb25JdGVyYXRpb25Db3VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25OYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25UaW1pbmdGdW5jdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVNsaWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlUXVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVJlcGVhdCk6CisgICAgICAgICog
Y3NzL0NTU1VuaWNvZGVSYW5nZVZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU1ZhbHVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlOjppc0ltcGxpY2l0SW5pdGlhbFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6aGFzRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6ZXF1YWxzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1ZhbHVlOjpjc3NUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlOjpkZXN0cm95
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlOjpjbG9uZUZvckNTU09NKToKKyAgICAgICAg
KiBjc3MvQ1NTVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWVMaXN0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpDU1NWYWx1ZUxpc3RJbnNwZWN0b3I6OkNTU1ZhbHVlTGlzdEluc3BlY3Rvcik6
CisgICAgICAgICogY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eU51bWJlcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5QXV0bzo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5Q2xpcDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
Q29sb3I6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUxlbmd0
aDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5U3RyaW5nOjph
cHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJSYWRpdXM6
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZpbGxMYXllcjo6
YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0
aDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udDo6YXBw
bHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udEZhbWlseTo6YXBw
bHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFNpemU6OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRXZWlnaHQ6OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1
cmVzOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDb3VudGVy
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDdXJzb3I6OmFw
cGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRBbGlnbjo6YXBw
bHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5VGV4dERlY29yYXRpb246
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHREZWNvcmF0
aW9uU2tpcDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5TWFy
cXVlZUluY3JlbWVudDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5TWFycXVlZVJlcGV0aXRpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eU1hcnF1ZWVTcGVlZDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5VGV4dFVuZGVybGluZVBvc2l0aW9uOjphcHBseVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlMaW5lSGVpZ2h0OjphcHBseVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlMaW5lSGVpZ2h0Rm9ySU9TVGV4dEF1dG9zaXppbmc6OmFw
cGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVdvcmRTcGFjaW5nOjph
cHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlQYWdlU2l6ZTo6YXBw
bHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5VGV4dEVtcGhhc2lzU3R5
bGU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRFbXBo
YXNpc1Bvc2l0aW9uOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlSZXNpemU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVZl
cnRpY2FsQWxpZ246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eUFzcGVjdFJhdGlvOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlab29tOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEaXNw
bGF5OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwUGF0
aDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5U2hhcGU6OmFw
cGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUltYWdlUmVzb2x1dGlv
bjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5VGV4dEluZGVu
dDo6YXBwbHlWYWx1ZSk6CisgICAgICAgICogY3NzL01lZGlhTGlzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpyZXBvcnRNZWRpYVF1ZXJ5V2FybmluZ0lmTmVlZGVkKToKKyAgICAgICAgKiBjc3Mv
TWVkaWFRdWVyeUV2YWx1YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlQXNwZWN0
UmF0aW9WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpudW1iZXJWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpvcmllbnRhdGlvbk1lZGlhRmVhdHVyZUV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6
ZXZhbFJlc29sdXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZGV2aWNlX3BpeGVsX3JhdGlvTWVk
aWFGZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHV0aW9uTWVkaWFGZWF0dXJl
RXZhbCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlTGVuZ3RoKToKKyAgICAgICAgKFdlYkNv
cmU6OnZpZXdfbW9kZU1lZGlhRmVhdHVyZUV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6cG9pbnRl
ck1lZGlhRmVhdHVyZUV2YWwpOgorICAgICAgICAqIGNzcy9TVkdDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3Ryb2tlRGFzaEFycmF5VG9DU1NWYWx1
ZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6c3ZnUHJv
cGVydHlWYWx1ZSk6CisgICAgICAgICogY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eSk6CisgICAgICAg
ICogY3NzL1NvdXJjZVNpemVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVMZW5n
dGgpOgorICAgICAgICAqIGNzcy9TdHlsZVByb3BlcnRpZXMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQcm9wZXJ0aWVzOjpnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUpOgorICAgICAgICAq
IGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3REaXJlY3Rp
b25BbmRXcml0aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHcmlkVHJhY2tTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0xpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlR3JpZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnBhcnNlU25hcENvb3JkaW5hdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6cGFyc2VTbmFwUG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFw
cGx5UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdG
cm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVy
T3BlcmF0aW9ucyk6CisgICAgICAgICogY3NzL1RyYW5zZm9ybUZ1bmN0aW9ucy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp0cmFuc2Zvcm1zRm9yVmFsdWUpOgorICAgICAgICAqIGNzcy9WaWV3cG9y
dFN0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Vmlld3BvcnRTdHlsZVJlc29s
dmVyOjpnZXRWaWV3cG9ydEFyZ3VtZW50VmFsdWUpOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NG
aWx0ZXJWYWx1ZS5oOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NNYXRyaXguY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViS2l0Q1NTTWF0cml4OjpzZXRNYXRyaXhWYWx1ZSk6CisgICAgICAgICog
Y3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjp0b1dlYktp
dENTU1RyYW5zZm9ybVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpjb21w
dXRlZEZvbnRTaXplKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjppZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRWxlbWVudEVxdWl2YWxlbnQ6OnZhbHVlSXNQcmVzZW50SW5TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGV4dERlY29yYXRpb25FcXVpdmFsZW50Ojp2YWx1ZUlzUHJlc2Vu
dEluU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y3NzVmFsdWVUb1JHQkEpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpleHRyYWN0Rm9udFNpemVEZWx0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnRleHREaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdGluZ1N0eWxlOjpwcmVwYXJlVG9BcHBseUF0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRp
bmdTdHlsZTo6bWVyZ2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6Om1l
cmdlU3R5bGVGcm9tUnVsZXNGb3JTZXJpYWxpemF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRpbmdTdHlsZTo6bGVnYWN5Rm9udFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0
eWxlOjp0ZXh0RGlyZWN0aW9uRm9yU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
Q2hhbmdlOjpleHRyYWN0VGV4dFN0eWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpkaWZmVGV4dERl
Y29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRXZWlnaHRJc0JvbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6aXNUcmFuc3BhcmVudENvbG9yVmFsdWUpOgorICAgICAgICAqIGVkaXRpbmcv
RWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlVG9nZ2xlU3R5bGVJ
bkxpc3QpOgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbToKKyAgICAg
ICAgKHN0cmluZ0Zyb21DU1NWYWx1ZSk6CisgICAgICAgIChIVE1MQ29udmVydGVyQ2FjaGVzOjpm
bG9hdFByb3BlcnR5VmFsdWVGb3JOb2RlKToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXJDYWNoZXM6
OmNvbG9yUHJvcGVydHlWYWx1ZUZvck5vZGUpOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnByb3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUpOgorICAg
ICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNl
cmlhbGl6ZXI6OnJldHJpZXZlUmVzb3VyY2VzRm9yUHJvcGVydGllcyk6CisgICAgICAgICogcGFn
ZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
YmxlbmRGdW5jKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmFkanVzdElubmVyVGV4dFN0eWxl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVQZW5kaW5nSW1hZ2UuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUGVuZGluZ0ltYWdlOjpjc3NJbWFnZVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUGVuZGluZ0ltYWdlOjpjc3NDdXJzb3JJbWFnZVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUGVuZGluZ0ltYWdlOjpjc3NJbWFnZVNldFZhbHVlKToKKyAgICAg
ICAgKiBzdmcvU1ZHQ29sb3IuaDoKKyAgICAgICAgKiBzdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6cmVidWlsZEZvbnRGYWNl
KToKKyAgICAgICAgKiBzdmcvU1ZHUGFpbnQuaDoKKwogMjAxNC0xMC0wMyAgVGltIEhvcnRvbiAg
PHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBXS1dlYlZpZXcgc25hcHNob3Qg
b2YgRGFyaW5nIEZpcmViYWxsIGhhcyB0aGUgd3JvbmcgY29sb3IgaW4gdGhlIG9ic2N1cmVkIGlu
c2V0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQXNwZWN0UmF0aW9WYWx1ZS5o
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FzcGVjdFJhdGlvVmFsdWUuaAppbmRleCA1ZDQ1NWZl
Y2Q4Y2ViMDM1YWE1Y2FkZjVkMWM0ODUxNTYzOWFkODVkLi44N2Q1NDZiODRmN2JjYTU1NDM4OWY4
ODY5NWMyMmJkOTFmOTc4OTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQXNw
ZWN0UmF0aW9WYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBc3BlY3RSYXRpb1Zh
bHVlLmgKQEAgLTYwLDggKzYwLDggQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX2Rlbm9taW5hdG9y
VmFsdWU7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NBc3BlY3RSYXRpb1ZhbHVlLCBp
c0FzcGVjdFJhdGlvVmFsdWUoKSkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotfQorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTQXNwZWN0UmF0aW9WYWx1ZSwgaXNBc3BlY3RS
YXRpb1ZhbHVlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0JvcmRlcklt
YWdlU2xpY2VWYWx1ZS5oCmluZGV4IGZiYzIwNGJjNjU2M2UzMTUxYzY1MjBmYWI2MjY4ZDFlYTgw
MzQwMTMuLjhiOWZlNGFjZTg4ZmU4ZWE0Y2M4OTNlNmIxY2I3NWYxNDkzZWVmNWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmgKQEAgLTU2LDggKzU2
LDggQEAgcHJpdmF0ZToKICAgICBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUoUGFzc1JlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gc2xpY2VzLCBib29sIGZpbGwpOwogfTsKIAotQ1NTX1ZBTFVFX1RZ
UEVfQ0FTVFMoQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLCBpc0JvcmRlckltYWdlU2xpY2VWYWx1
ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
Q1NTX1ZBTFVFKENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZSwgaXNCb3JkZXJJbWFnZVNsaWNlVmFs
dWUoKSkKKwogI2VuZGlmIC8vIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAKaW5kZXggMzdhODE3MTUwMTQxZWQyZjg5
OWM1NjQxYWIyOThlNzg2OTY1ZWUxMC4uNWE5MDQxZDFjMjFhNTVhNGE3Yjg3YTc0YjkyMzI3N2Vm
NDE5OGYzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFs
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcApA
QCAtNjAyLDExICs2MDIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gcGFyc2VyVmFsdWUtPmNyZWF0ZUNT
U1ZhbHVlKCk7Ci0gICAgICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlLmdldCgpKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLmdldCgpKTsKLSAgICAgICAg
cmVzdWx0LT52YWx1ZSA9IENTU0NhbGNQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByaW1pdGl2ZVZh
bHVlLCBwYXJzZXJWYWx1ZS0+aXNJbnQpOworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICAg
ICAgcmVzdWx0LT52YWx1ZSA9IENTU0NhbGNQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKCZwcmltaXRp
dmVWYWx1ZSwgcGFyc2VyVmFsdWUtPmlzSW50KTsKIAogICAgICAgICArKyppbmRleDsKICAgICAg
ICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3Vs
YXRpb25WYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuaApp
bmRleCBjZTBjYjVhNmUwYzYyYjBhMmQ3OTFmNmQyZWZkNWE4ODFiMWNjMjFiLi5mYzA0NDNmY2Ix
OTk4MTFmMDIxMzM4MWFmMzM1MTY5NmJmOTBmMmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
YWxjdWxhdGlvblZhbHVlLmgKQEAgLTEyMiw4ICsxMjIsOCBAQCBpbmxpbmUgUGFzc1JlZjxDYWxj
dWxhdGlvblZhbHVlPiBDU1NDYWxjVmFsdWU6OmNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUoY29uc3Qg
Q1NTVAogICAgICAgICBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSA/IENhbGN1bGF0aW9uUmFu
Z2VOb25OZWdhdGl2ZSA6IENhbGN1bGF0aW9uUmFuZ2VBbGwpOwogfQogCi1DU1NfVkFMVUVfVFlQ
RV9DQVNUUyhDU1NDYWxjVmFsdWUsIGlzQ2FsY1ZhbHVlKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTQ2FsY1ZhbHVlLCBp
c0NhbGNWYWx1ZSgpKQorCiAjZW5kaWYgLy8gQ1NTQ2FsY3VsYXRpb25WYWx1ZV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDYW52YXNWYWx1ZS5oCmluZGV4IGI2N2QwNGZlYmExMGUzNGM3NGQ2Y2QxODcwNGRh
ZTIxYWQwZGYxODguLjMyZWVjNmQ1ODMzZjk4Nzk2Y2U3ZmE4NDA0ZjVhMjRkNzc1OTkwOGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5oCkBAIC0xMDIsOCArMTAyLDggQEAgcHJpdmF0
ZToKICAgICBIVE1MQ2FudmFzRWxlbWVudCogbV9lbGVtZW50OwogfTsKIAotQ1NTX1ZBTFVFX1RZ
UEVfQ0FTVFMoQ1NTQ2FudmFzVmFsdWUsIGlzQ2FudmFzVmFsdWUoKSkKLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NDYW52YXNW
YWx1ZSwgaXNDYW52YXNWYWx1ZSgpKQorCiAjZW5kaWYgLy8gQ1NTQ2FudmFzVmFsdWVfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcApp
bmRleCAwNzkwMTY3Mzg4NTZmOTEwZTg3ZWYwN2M3ZTUzNWVkZDRiMWYzNzAyLi5jZTVlZTZlNGVl
N2NjY2MyY2I0OGJjZGM5YmZhMmUxYTkwOGJjMDg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcApAQCAtNzczLDcgKzc3Myw3IEBA
IHN0YXRpYyBQYXNzUmVmPENTU1ZhbHVlTGlzdD4gZ2V0Qm9yZGVyUmFkaXVzU2hvcnRoYW5kVmFs
dWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0CiAgICAgaWYgKHNob3dWZXJ0aWNhbEJvdHRvbUxlZnQp
CiAgICAgICAgIHZlcnRpY2FsUmFkaWlMaXN0LT5hcHBlbmQoKmJvdHRvbUxlZnRSYWRpdXMtPml0
ZW0oMSkpOwogCi0gICAgaWYgKCF2ZXJ0aWNhbFJhZGlpTGlzdC0+ZXF1YWxzKCp0b0NTU1ZhbHVl
TGlzdChsaXN0LmdldCgpLml0ZW0oMCkpKSkKKyAgICBpZiAoIXZlcnRpY2FsUmFkaWlMaXN0LT5l
cXVhbHMoZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqbGlzdC5nZXQoKS5pdGVtKDApKSkpCiAgICAg
ICAgIGxpc3QuZ2V0KCkuYXBwZW5kKHZlcnRpY2FsUmFkaWlMaXN0LnJlbGVhc2VOb25OdWxsKCkp
OwogCiAgICAgcmV0dXJuIGxpc3Q7CkBAIC0zMTQ5LDEzICszMTQ5LDEzIEBAIFN0cmluZyBDU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb246Oml0ZW0odW5zaWduZWQgaSkgY29uc3QKIAogYm9vbCBD
b21wdXRlZFN0eWxlRXh0cmFjdG9yOjpwcm9wZXJ0eU1hdGNoZXMoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlELCBjb25zdCBDU1NWYWx1ZSogdmFsdWUpIGNvbnN0CiB7Ci0gICAgaWYgKHByb3BlcnR5
SUQgPT0gQ1NTUHJvcGVydHlGb250U2l6ZSAmJiB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpICYm
IG1fbm9kZSkgeworICAgIGlmIChwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5Rm9udFNpemUgJiYg
aXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgbV9ub2RlKSB7CiAgICAgICAgIG1fbm9k
ZS0+ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAg
ICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9ub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRv
RWxlbWVudFNwZWNpZmllcik7CiAgICAgICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+Zm9udERlc2Ny
aXB0aW9uKCkua2V5d29yZFNpemUoKSkgewogICAgICAgICAgICAgQ1NTVmFsdWVJRCBzaXplVmFs
dWUgPSBjc3NJZGVudGlmaWVyRm9yRm9udFNpemVLZXl3b3JkKHN0eWxlLT5mb250RGVzY3JpcHRp
b24oKS5rZXl3b3JkU2l6ZSgpKTsKLSAgICAgICAgICAgIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgICAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1ZhbHVlSUQoKSAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0
VmFsdWVJRCgpID09IHNpemVWYWx1ZSkKKyAgICAgICAgICAgIGNvbnN0IENTU1ByaW1pdGl2ZVZh
bHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUp
OworICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzVmFsdWVJRCgpICYmIHByaW1pdGl2
ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBzaXplVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ3Jvc3NmYWRlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZh
bHVlLmNwcAppbmRleCBkNDNkYjFlNmE0YWFlNmM0ODlmZmUyOWZiNDdhZGI2NmM1YzJlNDdiLi4x
OTAyM2NiOTYzOTY5YWE3ZTNhMjE4YjU0Mjg0NGRhZGNlNDBjODkzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAKQEAgLTQ3LDExICs0NywxMSBAQCBzdGF0aWMgaW5s
aW5lIGRvdWJsZSBibGVuZEZ1bmMoZG91YmxlIGZyb20sIGRvdWJsZSB0bywgZG91YmxlIHByb2dy
ZXNzKQogCiBzdGF0aWMgYm9vbCBzdWJpbWFnZUtub3duVG9CZU9wYXF1ZShDU1NWYWx1ZSYgdmFs
dWUsIGNvbnN0IFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyKQogewotICAgIGlmICh2YWx1ZS5pc0lt
YWdlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIHRvQ1NTSW1hZ2VWYWx1ZSh2YWx1ZSkua25vd25U
b0JlT3BhcXVlKHJlbmRlcmVyKTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4odmFsdWUpKQor
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4odmFsdWUpLmtub3duVG9CZU9w
YXF1ZShyZW5kZXJlcik7CiAKLSAgICBpZiAodmFsdWUuaXNJbWFnZUdlbmVyYXRvclZhbHVlKCkp
Ci0gICAgICAgIHJldHVybiB0b0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUodmFsdWUpLmtub3duVG9C
ZU9wYXF1ZShyZW5kZXJlcik7CisgICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHZh
bHVlKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHZh
bHVlKS5rbm93blRvQmVPcGFxdWUocmVuZGVyZXIpOwogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5o
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmgKaW5kZXggMTRkYTU5Yzc5
NGRjN2NiYTIxOTlkNDIwOTg4YmVlMDU0MWU3OTlmNS4uMzMwNTQwYjhhMzQ1OTJjMzhlMGY1OWU5
YjM0MjgwYzU1MDUzNzE1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3Nz
ZmFkZVZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmgK
QEAgLTExMCw4ICsxMTAsOCBAQCBwcml2YXRlOgogICAgIENyb3NzZmFkZVN1YmltYWdlT2JzZXJ2
ZXJQcm94eSBtX2Nyb3NzZmFkZVN1YmltYWdlT2JzZXJ2ZXI7CiB9OwogCi1DU1NfVkFMVUVfVFlQ
RV9DQVNUUyhDU1NDcm9zc2ZhZGVWYWx1ZSwgaXNDcm9zc2ZhZGVWYWx1ZSgpKQotCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0Ny
b3NzZmFkZVZhbHVlLCBpc0Nyb3NzZmFkZVZhbHVlKCkpCisKICNlbmRpZiAvLyBDU1NDcm9zc2Zh
ZGVWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VW
YWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAKaW5k
ZXggZjU4YzkyMDVhZGZiNDFjMjg3NjRlZmI4YTQzYzZkMmYzYTRkOGQyNC4uOWY0NmU3OTE5ZDU1
YTJjMmUzMmZkZjkzN2U1OTE2ZWI3YjNmYThlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
dXJzb3JJbWFnZVZhbHVlLmNwcApAQCAtODEsNyArODEsNyBAQCBDU1NDdXJzb3JJbWFnZVZhbHVl
Ojp+Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSgpCiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewog
ICAgICAgICBTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCA9ICppdDsKICAgICAgICAgcmVm
ZXJlbmNlZEVsZW1lbnQtPmN1cnNvckltYWdlVmFsdWVSZW1vdmVkKCk7Ci0gICAgICAgIGlmIChT
VkdDdXJzb3JFbGVtZW50KiBjdXJzb3JFbGVtZW50ID0gcmVzb3VyY2VSZWZlcmVuY2VkQnlDdXJz
b3JFbGVtZW50KHRvQ1NTSW1hZ2VWYWx1ZShtX2ltYWdlVmFsdWUuZ2V0KCkpLnVybCgpLCByZWZl
cmVuY2VkRWxlbWVudC0+ZG9jdW1lbnQoKSkpCisgICAgICAgIGlmIChTVkdDdXJzb3JFbGVtZW50
KiBjdXJzb3JFbGVtZW50ID0gcmVzb3VyY2VSZWZlcmVuY2VkQnlDdXJzb3JFbGVtZW50KGRvd25j
YXN0PENTU0ltYWdlVmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkudXJsKCksIHJlZmVyZW5jZWRF
bGVtZW50LT5kb2N1bWVudCgpKSkKICAgICAgICAgICAgIGN1cnNvckVsZW1lbnQtPnJlbW92ZUNs
aWVudChyZWZlcmVuY2VkRWxlbWVudCk7CiAgICAgfQogfQpAQCAtMTA3LDcgKzEwNyw3IEBAIGJv
b2wgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6dXBkYXRlSWZTVkdDdXJzb3JJc1VzZWQoRWxlbWVudCog
ZWxlbWVudCkKICAgICBpZiAoIWlzU1ZHQ3Vyc29yKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGlmIChTVkdDdXJzb3JFbGVtZW50KiBjdXJzb3JFbGVtZW50ID0gcmVzb3VyY2VSZWZl
cmVuY2VkQnlDdXJzb3JFbGVtZW50KHRvQ1NTSW1hZ2VWYWx1ZShtX2ltYWdlVmFsdWUuZ2V0KCkp
LnVybCgpLCBlbGVtZW50LT5kb2N1bWVudCgpKSkgeworICAgIGlmIChTVkdDdXJzb3JFbGVtZW50
KiBjdXJzb3JFbGVtZW50ID0gcmVzb3VyY2VSZWZlcmVuY2VkQnlDdXJzb3JFbGVtZW50KGRvd25j
YXN0PENTU0ltYWdlVmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkudXJsKCksIGVsZW1lbnQtPmRv
Y3VtZW50KCkpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgb3ZlcnJpZGUgaG90IHNw
b3Qgc3BlY2lmaWVkIGluIENTUywgd2hpY2ggaXMgcHJvYmFibHkgaW5jb3JyZWN0LgogICAgICAg
ICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoMCk7CiAgICAgICAgIG1faGFzSG90U3Bv
dCA9IHRydWU7CkBAIC0xMzMsOCArMTMzLDggQEAgYm9vbCBDU1NDdXJzb3JJbWFnZVZhbHVlOjp1
cGRhdGVJZlNWR0N1cnNvcklzVXNlZChFbGVtZW50KiBlbGVtZW50KQogU3R5bGVJbWFnZSogQ1NT
Q3Vyc29ySW1hZ2VWYWx1ZTo6Y2FjaGVkSW1hZ2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGxvYWRl
cikKIHsKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKLSAgICBpZiAobV9pbWFnZVZhbHVlLmdl
dCgpLmlzSW1hZ2VTZXRWYWx1ZSgpKQotICAgICAgICByZXR1cm4gdG9DU1NJbWFnZVNldFZhbHVl
KG1faW1hZ2VWYWx1ZS5nZXQoKSkuY2FjaGVkSW1hZ2VTZXQobG9hZGVyKTsKKyAgICBpZiAoaXM8
Q1NTSW1hZ2VTZXRWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PENTU0ltYWdlU2V0VmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkuY2FjaGVkSW1hZ2VT
ZXQobG9hZGVyKTsKICNlbmRpZgogCiAgICAgaWYgKCFtX2FjY2Vzc2VkSW1hZ2UpIHsKQEAgLTE0
NSw3ICsxNDUsNyBAQCBTdHlsZUltYWdlKiBDU1NDdXJzb3JJbWFnZVZhbHVlOjpjYWNoZWRJbWFn
ZShDYWNoZWRSZXNvdXJjZUxvYWRlciogbG9hZGVyKQogICAgICAgICAvLyB3ZSBjcmVhdGUgYW4g
YWx0ZXJuYXRlIENTU0ltYWdlVmFsdWUgdG8gdXNlLgogICAgICAgICBpZiAoaXNTVkdDdXJzb3Io
KSAmJiBsb2FkZXIgJiYgbG9hZGVyLT5kb2N1bWVudCgpKSB7CiAgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyB3aWxsIGZhaWwgaWYgdGhlIDxjdXJzb3I+IGVsZW1lbnQgaXMgaW4gYSBzaGFkb3cg
RE9NIChidWcgNTk4MjcpCi0gICAgICAgICAgICBpZiAoU1ZHQ3Vyc29yRWxlbWVudCogY3Vyc29y
RWxlbWVudCA9IHJlc291cmNlUmVmZXJlbmNlZEJ5Q3Vyc29yRWxlbWVudCh0b0NTU0ltYWdlVmFs
dWUobV9pbWFnZVZhbHVlLmdldCgpKS51cmwoKSwgKmxvYWRlci0+ZG9jdW1lbnQoKSkpIHsKKyAg
ICAgICAgICAgIGlmIChTVkdDdXJzb3JFbGVtZW50KiBjdXJzb3JFbGVtZW50ID0gcmVzb3VyY2VS
ZWZlcmVuY2VkQnlDdXJzb3JFbGVtZW50KGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KG1faW1hZ2VW
YWx1ZS5nZXQoKSkudXJsKCksICpsb2FkZXItPmRvY3VtZW50KCkpKSB7CiAgICAgICAgICAgICAg
ICAgZGV0YWNoUGVuZGluZ0ltYWdlKCk7CiAgICAgICAgICAgICAgICAgUmVmPENTU0ltYWdlVmFs
dWU+IHN2Z0ltYWdlVmFsdWUoQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKGN1cnNvckVsZW1lbnQtPmhy
ZWYoKSkpOwogICAgICAgICAgICAgICAgIFN0eWxlQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0g
c3ZnSW1hZ2VWYWx1ZS0+Y2FjaGVkSW1hZ2UobG9hZGVyKTsKQEAgLTE1NCw5ICsxNTQsOSBAQCBT
dHlsZUltYWdlKiBDU1NDdXJzb3JJbWFnZVZhbHVlOjpjYWNoZWRJbWFnZShDYWNoZWRSZXNvdXJj
ZUxvYWRlciogbG9hZGVyKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KG1faW1hZ2VWYWx1ZS5nZXQoKS5pc0ltYWdlVmFsdWUoKSkgeworICAgICAgICBpZiAoaXM8Q1NT
SW1hZ2VWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKSkgewogICAgICAgICAgICAgZGV0YWNoUGVu
ZGluZ0ltYWdlKCk7Ci0gICAgICAgICAgICBtX2ltYWdlID0gdG9DU1NJbWFnZVZhbHVlKG1faW1h
Z2VWYWx1ZS5nZXQoKSkuY2FjaGVkSW1hZ2UobG9hZGVyKTsKKyAgICAgICAgICAgIG1faW1hZ2Ug
PSBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX2ltYWdlVmFsdWUuZ2V0KCkpLmNhY2hlZEltYWdl
KGxvYWRlcik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE3MCw4ICsxNzAsOCBAQCBTdHlsZUlt
YWdlKiBDU1NDdXJzb3JJbWFnZVZhbHVlOjpjYWNoZWRPclBlbmRpbmdJbWFnZShEb2N1bWVudCYg
ZG9jdW1lbnQpCiB7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCiAgICAgLy8gTmVlZCB0byBk
ZWxlZ2F0ZSBjb21wbGV0ZWx5IHNvIHRoYXQgY2hhbmdlcyBpbiBkZXZpY2Ugc2NhbGUgZmFjdG9y
IGNhbiBiZSBoYW5kbGVkIGFwcHJvcHJpYXRlbHkuCi0gICAgaWYgKG1faW1hZ2VWYWx1ZS5nZXQo
KS5pc0ltYWdlU2V0VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIHRvQ1NTSW1hZ2VTZXRWYWx1ZSht
X2ltYWdlVmFsdWUuZ2V0KCkpLmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KGRvY3VtZW50KTsKKyAg
ICBpZiAoaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKSkKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PENTU0ltYWdlU2V0VmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkuY2Fj
aGVkT3JQZW5kaW5nSW1hZ2VTZXQoZG9jdW1lbnQpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
ZG9jdW1lbnQpOwogI2VuZGlmCkBAIC0xODQsOCArMTg0LDggQEAgU3R5bGVJbWFnZSogQ1NTQ3Vy
c29ySW1hZ2VWYWx1ZTo6Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoRG9jdW1lbnQmIGRvY3VtZW50KQog
CiBib29sIENTU0N1cnNvckltYWdlVmFsdWU6OmlzU1ZHQ3Vyc29yKCkgY29uc3QKIHsKLSAgICBp
ZiAobV9pbWFnZVZhbHVlLmdldCgpLmlzSW1hZ2VWYWx1ZSgpKSB7Ci0gICAgICAgIFVSTCBrdXJs
KFBhcnNlZFVSTFN0cmluZywgdG9DU1NJbWFnZVZhbHVlKG1faW1hZ2VWYWx1ZS5nZXQoKSkudXJs
KCkpOworICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPihtX2ltYWdlVmFsdWUuZ2V0KCkpKSB7Cisg
ICAgICAgIFVSTCBrdXJsKFBhcnNlZFVSTFN0cmluZywgZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4o
bV9pbWFnZVZhbHVlLmdldCgpKS51cmwoKSk7CiAgICAgICAgIHJldHVybiBrdXJsLmhhc0ZyYWdt
ZW50SWRlbnRpZmllcigpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0N1cnNvckltYWdlVmFsdWUuaAppbmRleCA2NTFjZDYzMzAwYjRjYTEwNTZhMzI4MzY4
OWQ5MWEwNDRlYmE5MTgwLi44NmRmN2FkYTQyN2QyNTM0MDg4ZjMwODliNTk0Mzg4MWIyNGQyMTgz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmgKQEAgLTc4LDggKzc4
LDggQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPiBtX3JlZmVyZW5jZWRFbGVt
ZW50czsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0N1cnNvckltYWdlVmFsdWUsIGlz
Q3Vyc29ySW1hZ2VWYWx1ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0N1cnNvckltYWdlVmFsdWUsIGlzQ3Vyc29ySW1h
Z2VWYWx1ZSgpKQorCiAjZW5kaWYgLy8gQ1NTQ3Vyc29ySW1hZ2VWYWx1ZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuaAppbmRleCA2MDA1ZjdlN2MwNGM2ODRhZDA5OTg5
YWU4OWI3MDNiMjAxZjhhMDYzLi4zYzA2OGQ1OGNjYTAzYWUyYjU4YmZjNGQ4YjNiNjgwZDVjNmNh
NzZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmgKQEAgLTExNyw4
ICsxMTcsOCBAQCBwcml2YXRlOgogICAgIEZpbHRlclN1YmltYWdlT2JzZXJ2ZXJQcm94eSBtX2Zp
bHRlclN1YmltYWdlT2JzZXJ2ZXI7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NGaWx0
ZXJJbWFnZVZhbHVlLCBpc0ZpbHRlckltYWdlVmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NGaWx0ZXJJbWFnZVZh
bHVlLCBpc0ZpbHRlckltYWdlVmFsdWUoKSkKKwogI2VuZGlmIC8vIENTU0ZpbHRlckltYWdlVmFs
dWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUu
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmgKaW5kZXggODkyMTA3
MjE0ZDA5ZDEwZDBjMzU5OTU2OTU5NTRmZWQxZTNkZWRiZi4uNjFiZDkwOTMzYzUwMDE0NGZjZjdm
NTllZjI0NGM1NTI3M2ExNzJiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRGYWNlU3JjVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNW
YWx1ZS5oCkBAIC05NSw4ICs5NSw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLUNTU19WQUxV
RV9UWVBFX0NBU1RTKENTU0ZvbnRGYWNlU3JjVmFsdWUsIGlzRm9udEZhY2VTcmNWYWx1ZSgpKQor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi19CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19W
QUxVRShDU1NGb250RmFjZVNyY1ZhbHVlLCBpc0ZvbnRGYWNlU3JjVmFsdWUoKSkKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZlYXR1cmVWYWx1ZS5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGZWF0dXJlVmFsdWUuaAppbmRleCBkZjFjZDE3NTlj
ZGEzZWE4ZDNhYTMxZDMzYzc2NDM0OWQzZjczZjRhLi5jZjZjMzgxZmVjYTE1NTFiYWM0ZDI1NjM5
NzEzNGIwNjk1MmRmMzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZl
YXR1cmVWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmVhdHVyZVZhbHVl
LmgKQEAgLTUxLDggKzUxLDggQEAgcHJpdmF0ZToKICAgICBjb25zdCBpbnQgbV92YWx1ZTsKIH07
CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0ZvbnRGZWF0dXJlVmFsdWUsIGlzRm9udEZlYXR1
cmVWYWx1ZSgpKQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi19IC8vIG5hbWVzcGFjZQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTRm9udEZlYXR1cmVWYWx1ZSwgaXNGb250
RmVhdHVyZVZhbHVlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9y
LmNwcAppbmRleCAwYWQ5ODIzNTNmYTNkMDBhMmE0NmRkZjY0MjYzNjJmMTIwMDUxZGU3Li4zOTI1
YWVlMjRlYmExYzNmNzVjYzUwMGUwNTQwMDI0ZjQ2YmMxY2IwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTRm9udFNlbGVjdG9yLmNwcApAQCAtOTEsMjYgKzkxLDI2IEBAIHZvaWQgQ1NTRm9udFNlbGVj
dG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVs
ZSkKICAgICBSZWZQdHI8Q1NTVmFsdWU+IGZvbnRGYW1pbHkgPSBzdHlsZS5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSk7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBzcmMg
PSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5U3JjKTsKICAgICBSZWZQdHI8
Q1NTVmFsdWU+IHVuaWNvZGVSYW5nZSA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJv
cGVydHlVbmljb2RlUmFuZ2UpOwotICAgIGlmICghZm9udEZhbWlseSB8fCAhc3JjIHx8ICFmb250
RmFtaWx5LT5pc1ZhbHVlTGlzdCgpIHx8ICFzcmMtPmlzVmFsdWVMaXN0KCkgfHwgKHVuaWNvZGVS
YW5nZSAmJiAhdW5pY29kZVJhbmdlLT5pc1ZhbHVlTGlzdCgpKSkKKyAgICBpZiAoIWlzPENTU1Zh
bHVlTGlzdD4oZm9udEZhbWlseS5nZXQoKSkgfHwgIWlzPENTU1ZhbHVlTGlzdD4oc3JjLmdldCgp
KSB8fCAodW5pY29kZVJhbmdlICYmICFpczxDU1NWYWx1ZUxpc3Q+KCp1bmljb2RlUmFuZ2UpKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTVmFsdWVMaXN0KiBmYW1pbHlMaXN0ID0gdG9DU1NW
YWx1ZUxpc3QoZm9udEZhbWlseS5nZXQoKSk7Ci0gICAgaWYgKCFmYW1pbHlMaXN0LT5sZW5ndGgo
KSkKKyAgICBDU1NWYWx1ZUxpc3QmIGZhbWlseUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+
KCpmb250RmFtaWx5KTsKKyAgICBpZiAoIWZhbWlseUxpc3QubGVuZ3RoKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIENTU1ZhbHVlTGlzdCogc3JjTGlzdCA9IHRvQ1NTVmFsdWVMaXN0KHNyYy5n
ZXQoKSk7Ci0gICAgaWYgKCFzcmNMaXN0LT5sZW5ndGgoKSkKKyAgICBDU1NWYWx1ZUxpc3QmIHNy
Y0xpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpzcmMpOworICAgIGlmICghc3JjTGlzdC5s
ZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTVmFsdWVMaXN0KiByYW5nZUxpc3Qg
PSB0b0NTU1ZhbHVlTGlzdCh1bmljb2RlUmFuZ2UuZ2V0KCkpOworICAgIENTU1ZhbHVlTGlzdCog
cmFuZ2VMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih1bmljb2RlUmFuZ2UuZ2V0KCkpOwog
CiAgICAgdW5zaWduZWQgdHJhaXRzTWFzayA9IDA7CiAKICAgICBpZiAoUmVmUHRyPENTU1ZhbHVl
PiBmb250U3R5bGUgPSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFN0
eWxlKSkgewotICAgICAgICBpZiAoIWZvbnRTdHlsZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAg
ICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqZm9udFN0eWxlKSkKICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICBzd2l0Y2ggKHRvQ1NTUHJpbWl0aXZlVmFsdWUoZm9udFN0eWxl
LmdldCgpKS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgICAgIHN3aXRjaCAoZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCpmb250U3R5bGUpLmdldFZhbHVlSUQoKSkgewogICAgICAgICBjYXNlIENT
U1ZhbHVlTm9ybWFsOgogICAgICAgICAgICAgdHJhaXRzTWFzayB8PSBGb250U3R5bGVOb3JtYWxN
YXNrOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjUsMTAgKzEyNSwxMCBAQCB2b2lkIENTU0Zv
bnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250
RmFjZVJ1bGUpCiAgICAgICAgIHRyYWl0c01hc2sgfD0gRm9udFN0eWxlTm9ybWFsTWFzazsKIAog
ICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IGZvbnRXZWlnaHQgPSBzdHlsZS5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdodCkpIHsKLSAgICAgICAgaWYgKCFmb250V2VpZ2h0
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KCpmb250V2VpZ2h0KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBzd2l0Y2ggKHRv
Q1NTUHJpbWl0aXZlVmFsdWUoZm9udFdlaWdodC5nZXQoKSktPmdldFZhbHVlSUQoKSkgeworICAg
ICAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZm9udFdlaWdodCkuZ2V0
VmFsdWVJRCgpKSB7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVCb2xkOgogICAgICAgICBjYXNlIENT
U1ZhbHVlNzAwOgogICAgICAgICAgICAgdHJhaXRzTWFzayB8PSBGb250V2VpZ2h0NzAwTWFzazsK
QEAgLTE3MCwxNiArMTcwLDE2IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1
bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSkKICAgICAgICAgICAgIFJl
ZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJh
dGVkKCk7CiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoZm9udFZhcmlhbnQucmVsZWFzZU5vbk51
bGwoKSk7CiAgICAgICAgICAgICBmb250VmFyaWFudCA9IGxpc3QucmVsZWFzZU5vbk51bGwoKTsK
LSAgICAgICAgfSBlbHNlIGlmICghZm9udFZhcmlhbnQtPmlzVmFsdWVMaXN0KCkpCisgICAgICAg
IH0gZWxzZSBpZiAoIWlzPENTU1ZhbHVlTGlzdD4oKmZvbnRWYXJpYW50KSkKICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICBDU1NWYWx1ZUxpc3QqIHZhcmlhbnRMaXN0ID0gdG9DU1NWYWx1
ZUxpc3QoZm9udFZhcmlhbnQuZ2V0KCkpOwotICAgICAgICB1bnNpZ25lZCBudW1WYXJpYW50cyA9
IHZhcmlhbnRMaXN0LT5sZW5ndGgoKTsKKyAgICAgICAgQ1NTVmFsdWVMaXN0JiB2YXJpYW50TGlz
dCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKmZvbnRWYXJpYW50KTsKKyAgICAgICAgdW5zaWdu
ZWQgbnVtVmFyaWFudHMgPSB2YXJpYW50TGlzdC5sZW5ndGgoKTsKICAgICAgICAgaWYgKCFudW1W
YXJpYW50cykKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtVmFyaWFudHM7ICsraSkgewotICAgICAgICAgICAgc3dpdGNoICh0b0NTU1By
aW1pdGl2ZVZhbHVlKHZhcmlhbnRMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKS0+Z2V0
VmFsdWVJRCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPih2YXJpYW50TGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKS0+Z2V0VmFsdWVJRCgp
KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKICAgICAgICAgICAgICAg
ICAgICAgdHJhaXRzTWFzayB8PSBGb250VmFyaWFudE5vcm1hbE1hc2s7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTk2LDI1ICsxOTYsMjUgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6
OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlKQog
ICAgIC8vIEVhY2ggaXRlbSBpbiB0aGUgc3JjIHByb3BlcnR5J3MgbGlzdCBpcyBhIHNpbmdsZSBD
U1NGb250RmFjZVNvdXJjZS4gUHV0IHRoZW0gYWxsIGludG8gYSBDU1NGb250RmFjZS4KICAgICBS
ZWZQdHI8Q1NTRm9udEZhY2U+IGZvbnRGYWNlOwogCi0gICAgaW50IHNyY0xlbmd0aCA9IHNyY0xp
c3QtPmxlbmd0aCgpOworICAgIGludCBzcmNMZW5ndGggPSBzcmNMaXN0Lmxlbmd0aCgpOwogCiAg
ICAgYm9vbCBmb3VuZFNWR0ZvbnQgPSBmYWxzZTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c3JjTGVuZ3RoOyBpKyspIHsKICAgICAgICAgLy8gQW4gaXRlbSBpbiB0aGUgbGlzdCBlaXRoZXIg
c3BlY2lmaWVzIGEgc3RyaW5nIChsb2NhbCBmb250IG5hbWUpIG9yIGEgVVJMIChyZW1vdGUgZm9u
dCB0byBkb3dubG9hZCkuCi0gICAgICAgIENTU0ZvbnRGYWNlU3JjVmFsdWUqIGl0ZW0gPSB0b0NT
U0ZvbnRGYWNlU3JjVmFsdWUoc3JjTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7Cisg
ICAgICAgIENTU0ZvbnRGYWNlU3JjVmFsdWUmIGl0ZW0gPSBkb3duY2FzdDxDU1NGb250RmFjZVNy
Y1ZhbHVlPigqc3JjTGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKICAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPENTU0ZvbnRGYWNlU291cmNlPiBzb3VyY2U7CiAKICNpZiBFTkFCTEUoU1ZH
X0ZPTlRTKQotICAgICAgICBmb3VuZFNWR0ZvbnQgPSBpdGVtLT5pc1NWR0ZvbnRGYWNlU3JjKCkg
fHwgaXRlbS0+c3ZnRm9udEZhY2VFbGVtZW50KCk7CisgICAgICAgIGZvdW5kU1ZHRm9udCA9IGl0
ZW0uaXNTVkdGb250RmFjZVNyYygpIHx8IGl0ZW0uc3ZnRm9udEZhY2VFbGVtZW50KCk7CiAjZW5k
aWYKLSAgICAgICAgaWYgKCFpdGVtLT5pc0xvY2FsKCkpIHsKKyAgICAgICAgaWYgKCFpdGVtLmlz
TG9jYWwoKSkgewogICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9kb2N1bWVudCA/
IG1fZG9jdW1lbnQtPmZyYW1lKCkgPyAmbV9kb2N1bWVudC0+ZnJhbWUoKS0+c2V0dGluZ3MoKSA6
IDAgOiAwOwogICAgICAgICAgICAgYm9vbCBhbGxvd0Rvd25sb2FkaW5nID0gZm91bmRTVkdGb250
IHx8IChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+ZG93bmxvYWRhYmxlQmluYXJ5Rm9udHNFbmFibGVk
KCkpOwotICAgICAgICAgICAgaWYgKGFsbG93RG93bmxvYWRpbmcgJiYgaXRlbS0+aXNTdXBwb3J0
ZWRGb3JtYXQoKSAmJiBtX2RvY3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgQ2FjaGVkRm9udCog
Y2FjaGVkRm9udCA9IGl0ZW0tPmNhY2hlZEZvbnQobV9kb2N1bWVudCk7CisgICAgICAgICAgICBp
ZiAoYWxsb3dEb3dubG9hZGluZyAmJiBpdGVtLmlzU3VwcG9ydGVkRm9ybWF0KCkgJiYgbV9kb2N1
bWVudCkgeworICAgICAgICAgICAgICAgIENhY2hlZEZvbnQqIGNhY2hlZEZvbnQgPSBpdGVtLmNh
Y2hlZEZvbnQobV9kb2N1bWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKGNhY2hlZEZvbnQpIHsK
LSAgICAgICAgICAgICAgICAgICAgc291cmNlID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NGb250RmFj
ZVNvdXJjZT4oaXRlbS0+cmVzb3VyY2UoKSwgY2FjaGVkRm9udCk7CisgICAgICAgICAgICAgICAg
ICAgIHNvdXJjZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTRm9udEZhY2VTb3VyY2U+KGl0ZW0ucmVz
b3VyY2UoKSwgY2FjaGVkRm9udCk7CiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGZvdW5kU1ZHRm9udCkKICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJj
ZS0+c2V0SGFzRXh0ZXJuYWxTVkdGb250KHRydWUpOwpAQCAtMjIyLDcgKzIyMiw3IEBAIHZvaWQg
Q1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2Uq
IGZvbnRGYWNlUnVsZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBzb3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRG
YWNlU291cmNlPihpdGVtLT5yZXNvdXJjZSgpKTsKKyAgICAgICAgICAgIHNvdXJjZSA9IHN0ZDo6
bWFrZV91bmlxdWU8Q1NTRm9udEZhY2VTb3VyY2U+KGl0ZW0ucmVzb3VyY2UoKSk7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoIWZvbnRGYWNlKSB7CkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBD
U1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSog
Zm9udEZhY2VSdWxlKQogCiAgICAgICAgIGlmIChzb3VyY2UpIHsKICNpZiBFTkFCTEUoU1ZHX0ZP
TlRTKQotICAgICAgICAgICAgc291cmNlLT5zZXRTVkdGb250RmFjZUVsZW1lbnQoaXRlbS0+c3Zn
Rm9udEZhY2VFbGVtZW50KCkpOworICAgICAgICAgICAgc291cmNlLT5zZXRTVkdGb250RmFjZUVs
ZW1lbnQoaXRlbS5zdmdGb250RmFjZUVsZW1lbnQoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIGZv
bnRGYWNlLT5hZGRTb3VyY2UoV1RGOjptb3ZlKHNvdXJjZSkpOwogICAgICAgICB9CkBAIC0yNTEs
MTUgKzI1MSwxNSBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvbnN0
IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUpCiAgICAgaWYgKHJhbmdlTGlzdCkgewog
ICAgICAgICB1bnNpZ25lZCBudW1SYW5nZXMgPSByYW5nZUxpc3QtPmxlbmd0aCgpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUmFuZ2VzOyBpKyspIHsKLSAgICAgICAgICAg
IENTU1VuaWNvZGVSYW5nZVZhbHVlKiByYW5nZSA9IHRvQ1NTVW5pY29kZVJhbmdlVmFsdWUocmFu
Z2VMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKLSAgICAgICAgICAgIGZvbnRGYWNl
LT5hZGRSYW5nZShyYW5nZS0+ZnJvbSgpLCByYW5nZS0+dG8oKSk7CisgICAgICAgICAgICBDU1NV
bmljb2RlUmFuZ2VWYWx1ZSYgcmFuZ2UgPSBkb3duY2FzdDxDU1NVbmljb2RlUmFuZ2VWYWx1ZT4o
KnJhbmdlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7CisgICAgICAgICAgICBmb250
RmFjZS0+YWRkUmFuZ2UocmFuZ2UuZnJvbSgpLCByYW5nZS50bygpKTsKICAgICAgICAgfQogICAg
IH0KIAogICAgIC8vIEhhc2ggdW5kZXIgZXZlcnkgc2luZ2xlIGZhbWlseSBuYW1lLgotICAgIGlu
dCBmYW1pbHlMZW5ndGggPSBmYW1pbHlMaXN0LT5sZW5ndGgoKTsKKyAgICBpbnQgZmFtaWx5TGVu
Z3RoID0gZmFtaWx5TGlzdC5sZW5ndGgoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZhbWls
eUxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBpdGVtID0gdG9DU1NQ
cmltaXRpdmVWYWx1ZShmYW1pbHlMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKKyAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGl0ZW0gPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oZmFtaWx5TGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKICAgICAgICAgU3RyaW5n
IGZhbWlseU5hbWU7CiAgICAgICAgIGlmIChpdGVtLT5pc1N0cmluZygpKSB7CiAgICAgICAgICAg
ICBmYW1pbHlOYW1lID0gaXRlbS0+Z2V0U3RyaW5nVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
VmFsdWUuaAppbmRleCA4MWFjNDFhN2FjMDk4NDU3M2E1Y2RjNDBjNDk1NTgyNzQyMTE1OTljLi4w
MGQ3MDFmOGMzMjQ4Y2M5MjVjMjc3YzU2M2M3NTMxNjdkNTg1YWY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRWYWx1ZS5oCkBAIC01NSw4ICs1NSw4IEBAIHByaXZhdGU6CiAgICAgfQogfTsKIAotQ1NT
X1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTRm9udFZhbHVlLCBpc0ZvbnRWYWx1ZSgpKQorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCi19IC8vIG5hbWVzcGFjZQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19D
U1NfVkFMVUUoQ1NTRm9udFZhbHVlLCBpc0ZvbnRWYWx1ZSgpKQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGdW5jdGlvblZhbHVlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRnVuY3Rpb25WYWx1ZS5oCmluZGV4IDUxMTEyM2I4NzMzYWYzZDdhMWJkMTJjNGE3
MGM5ZjJlNzg1ZWI1MWUuLjU1MWY0NWU4ODc0ZDAzNDZiZGJlNjAyN2E0OTUwNjI0MGM3Yjg4YzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGdW5jdGlvblZhbHVlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0Z1bmN0aW9uVmFsdWUuaApAQCAtNTksOCArNTksOSBAQCBw
cml2YXRlOgogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IG1fYXJnczsKIH07CiAKLUNTU19WQUxV
RV9UWVBFX0NBU1RTKENTU0Z1bmN0aW9uVmFsdWUsIGlzRnVuY3Rpb25WYWx1ZSgpKQorfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NG
dW5jdGlvblZhbHVlLCBpc0Z1bmN0aW9uVmFsdWUoKSkKIAotfQogI2VuZGlmCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCA0MzMzMmMwYmZhMTMzMmNkMWExYjNj
MmUzODRhN2I5MDVhYTkxOWQxLi4zMDI2NzU5ZTNjMzFjZGUxMzFlMmNmYzg3MDcxNTdlYTc4ZmFi
OGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCkBAIC00NiwxMiAr
NDYsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogUGFzc1JlZlB0cjxJbWFnZT4gQ1NTR3JhZGll
bnRWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkKIHsKICAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGJvb2wgY2FjaGVhYmxlID0gaXNDYWNoZWFibGUo
KTsKICAgICBpZiAoY2FjaGVhYmxlKSB7CiAgICAgICAgIGlmICghY2xpZW50cygpLmNvbnRhaW5z
KHJlbmRlcmVyKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKICAgICAgICAgSW1hZ2UqIHJlc3VsdCA9IGNhY2hlZEltYWdlRm9yU2l6ZShzaXpl
KTsKICAgICAgICAgaWYgKHJlc3VsdCkKQEAgLTYwLDEwICs2MCwxMCBAQCBQYXNzUmVmUHRyPElt
YWdlPiBDU1NHcmFkaWVudFZhbHVlOjppbWFnZShSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29u
c3QgRmxvYXRTaQogCiAgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudDsKIAotICAgIGlmIChp
c0xpbmVhckdyYWRpZW50VmFsdWUoKSkKLSAgICAgICAgZ3JhZGllbnQgPSB0b0NTU0xpbmVhckdy
YWRpZW50VmFsdWUodGhpcyktPmNyZWF0ZUdyYWRpZW50KCpyZW5kZXJlciwgc2l6ZSk7CisgICAg
aWYgKGlzPENTU0xpbmVhckdyYWRpZW50VmFsdWU+KCp0aGlzKSkKKyAgICAgICAgZ3JhZGllbnQg
PSBkb3duY2FzdDxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPigqdGhpcykuY3JlYXRlR3JhZGllbnQo
KnJlbmRlcmVyLCBzaXplKTsKICAgICBlbHNlCi0gICAgICAgIGdyYWRpZW50ID0gdG9DU1NSYWRp
YWxHcmFkaWVudFZhbHVlKHRoaXMpLT5jcmVhdGVHcmFkaWVudCgqcmVuZGVyZXIsIHNpemUpOwor
ICAgICAgICBncmFkaWVudCA9IGRvd25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCp0aGlz
KS5jcmVhdGVHcmFkaWVudCgqcmVuZGVyZXIsIHNpemUpOwogCiAgICAgUmVmUHRyPEdyYWRpZW50
SW1hZ2U+IG5ld0ltYWdlID0gR3JhZGllbnRJbWFnZTo6Y3JlYXRlKGdyYWRpZW50LCBzaXplKTsK
ICAgICBpZiAoY2FjaGVhYmxlKQpAQCAtMTE4LDEzICsxMTgsMTMgQEAgUGFzc1JlZlB0cjxDU1NH
cmFkaWVudFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZl
ZChTdHlsZVIKICAgICBSZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gcmVzdWx0OwogICAgIGlmICgh
ZGVyaXZlZCkKICAgICAgICAgcmVzdWx0ID0gdGhpczsKLSAgICBlbHNlIGlmIChpc0xpbmVhckdy
YWRpZW50VmFsdWUoKSkKLSAgICAgICAgcmVzdWx0ID0gdG9DU1NMaW5lYXJHcmFkaWVudFZhbHVl
KHRoaXMpLT5jbG9uZSgpOwotICAgIGVsc2UgaWYgKGlzUmFkaWFsR3JhZGllbnRWYWx1ZSgpKQot
ICAgICAgICByZXN1bHQgPSB0b0NTU1JhZGlhbEdyYWRpZW50VmFsdWUodGhpcyktPmNsb25lKCk7
CisgICAgZWxzZSBpZiAoaXM8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4oKnRoaXMpKQorICAgICAg
ICByZXN1bHQgPSBkb3duY2FzdDxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPigqdGhpcykuY2xvbmUo
KTsKKyAgICBlbHNlIGlmIChpczxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigqdGhpcykpCisgICAg
ICAgIHJlc3VsdCA9IGRvd25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCp0aGlzKS5jbG9u
ZSgpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGZvciAoYXV0
byYgc3RvcCA6IHJlc3VsdC0+bV9zdG9wcykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0dyYWRpZW50VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZh
bHVlLmgKaW5kZXggZTQ1MjEyZjMwZWVlZWU5OWVkYmVmOTQwMTg1NjM3NDA1YTE3YzNlNy4uNmFi
NzhkYjAyOTVmNDMwMDEyOGY3NDE1ZWE0YjFiZDMwMjBkOWUxYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTR3JhZGllbnRWYWx1ZS5oCkBAIC0xMzEsOCArMTMxLDYgQEAgcHJvdGVjdGVkOgogICAgIGJv
b2wgbV9yZXBlYXRpbmc7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NHcmFkaWVudFZh
bHVlLCBpc0dyYWRpZW50VmFsdWUoKSkKLQogY2xhc3MgQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSA6
IHB1YmxpYyBDU1NHcmFkaWVudFZhbHVlIHsKIHB1YmxpYzoKIApAQCAtMTcwLDggKzE2OCw2IEBA
IHByaXZhdGU6CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2FuZ2xlOyAvLyBtYXkg
YmUgbnVsbC4KIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0xpbmVhckdyYWRpZW50VmFs
dWUsIGlzTGluZWFyR3JhZGllbnRWYWx1ZSgpKQotCiBjbGFzcyBDU1NSYWRpYWxHcmFkaWVudFZh
bHVlIDogcHVibGljIENTU0dyYWRpZW50VmFsdWUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
UmVmPENTU1JhZGlhbEdyYWRpZW50VmFsdWU+IGNyZWF0ZShDU1NHcmFkaWVudFJlcGVhdCByZXBl
YXQsIENTU0dyYWRpZW50VHlwZSBncmFkaWVudFR5cGUgPSBDU1NSYWRpYWxHcmFkaWVudCkKQEAg
LTIzMyw4ICsyMjksMTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IG1fZW5kVmVydGljYWxTaXplOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTUmFkaWFs
R3JhZGllbnRWYWx1ZSwgaXNSYWRpYWxHcmFkaWVudFZhbHVlKCkpCi0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTR3JhZGllbnRW
YWx1ZSwgaXNHcmFkaWVudFZhbHVlKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxV
RShDU1NMaW5lYXJHcmFkaWVudFZhbHVlLCBpc0xpbmVhckdyYWRpZW50VmFsdWUoKSkKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU1JhZGlhbEdyYWRpZW50VmFsdWUsIGlzUmFk
aWFsR3JhZGllbnRWYWx1ZSgpKQorCiAjZW5kaWYgLy8gQ1NTR3JhZGllbnRWYWx1ZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLmgKaW5kZXggMWIwZDFiODdlZTZh
NGI3NzUwNTRkNDA0OWNjZTA4ZTIxN2ZiZmEyZS4uN2FiOGIyNThhOTY2NDk3ZjY4NzI1YTYxMjQw
M2NkMDUzMDA1ZTBhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyaWRMaW5l
TmFtZXNWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmlkTGluZU5hbWVzVmFs
dWUuaApAQCAtNTIsOSArNTIsOSBAQCBwcml2YXRlOgogICAgIENTU0dyaWRMaW5lTmFtZXNWYWx1
ZSgpOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLCBp
c0dyaWRMaW5lTmFtZXNWYWx1ZSgpKTsKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotfQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLCBpc0dy
aWRMaW5lTmFtZXNWYWx1ZSgpKTsKIAotI2VuZGlmCi0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUo
Q1NTX0dSSURfTEFZT1VUKQorI2VuZGlmIC8vIENTU0dyaWRMaW5lTmFtZXNWYWx1ZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuaAppbmRleCA4ZDI1
ZjJjZDc1ZDVlMzI3NDkzMmFhNzVlYTc5YWE0ZWY5MDE2NTJlLi40OTg0ZTc2MGJlZDlhYjQ4MTQ3
ZmY5OTRhNjc3MjBmZTUwY2Q3ZTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
R3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmlk
VGVtcGxhdGVBcmVhc1ZhbHVlLmgKQEAgLTYyLDEwICs2MiwxMCBAQCBwcml2YXRlOgogICAgIHNp
emVfdCBtX2NvbHVtbkNvdW50OwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTR3JpZFRl
bXBsYXRlQXJlYXNWYWx1ZSwgaXNHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlKCkpCi0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTR3Jp
ZFRlbXBsYXRlQXJlYXNWYWx1ZSwgaXNHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlKCkpCisKICNlbmRp
ZiAvKiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKSAqLwogCiAjZW5kaWYgLy8gQ1NTR3JpZFRlbXBs
YXRlQXJlYXNWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZS5jcHAKaW5kZXggMGVmNzc0Zjg0YjFiYTY1Mzk2OWNlYTE4YTVlZDQ0NjI5OTYwYjRmMi4u
ZmI4OTk1NTcxNzU1NjNiOTU1ZDM4MTc4NzRlZDRiNzc4YzAyNDdjNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcApAQCAtMTA5LDE1ICsxMDksMTUg
QEAgUGFzc1JlZlB0cjxJbWFnZT4gQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6aW1hZ2UoUmVuZGVy
RWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IEYKIHsKICAgICBzd2l0Y2ggKGNsYXNzVHlwZSgpKSB7
CiAgICAgY2FzZSBDYW52YXNDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTQ2FudmFzVmFsdWUo
dGhpcyktPmltYWdlKHJlbmRlcmVyLCBzaXplKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENT
U0NhbnZhc1ZhbHVlPigqdGhpcykuaW1hZ2UocmVuZGVyZXIsIHNpemUpOwogICAgIGNhc2UgQ3Jv
c3NmYWRlQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0Nyb3NzZmFkZVZhbHVlKHRoaXMpLT5p
bWFnZShyZW5kZXJlciwgc2l6ZSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDcm9zc2Zh
ZGVWYWx1ZT4oKnRoaXMpLmltYWdlKHJlbmRlcmVyLCBzaXplKTsKICAgICBjYXNlIEZpbHRlcklt
YWdlQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0ZpbHRlckltYWdlVmFsdWUodGhpcyktPmlt
YWdlKHJlbmRlcmVyLCBzaXplKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ZpbHRlcklt
YWdlVmFsdWU+KCp0aGlzKS5pbWFnZShyZW5kZXJlciwgc2l6ZSk7CiAgICAgY2FzZSBMaW5lYXJH
cmFkaWVudENsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NMaW5lYXJHcmFkaWVudFZhbHVlKHRo
aXMpLT5pbWFnZShyZW5kZXJlciwgc2l6ZSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NM
aW5lYXJHcmFkaWVudFZhbHVlPigqdGhpcykuaW1hZ2UocmVuZGVyZXIsIHNpemUpOwogICAgIGNh
c2UgUmFkaWFsR3JhZGllbnRDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTUmFkaWFsR3JhZGll
bnRWYWx1ZSh0aGlzKS0+aW1hZ2UocmVuZGVyZXIsIHNpemUpOworICAgICAgICByZXR1cm4gZG93
bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnRoaXMpLmltYWdlKHJlbmRlcmVyLCBzaXpl
KTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBA
IC0xMjgsMTUgKzEyOCwxNSBAQCBib29sIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmlzRml4ZWRT
aXplKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGNsYXNzVHlwZSgpKSB7CiAgICAgY2FzZSBDYW52
YXNDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTQ2FudmFzVmFsdWUodGhpcyktPmlzRml4ZWRT
aXplKCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDYW52YXNWYWx1ZT4oKnRoaXMpLmlz
Rml4ZWRTaXplKCk7CiAgICAgY2FzZSBDcm9zc2ZhZGVDbGFzczoKLSAgICAgICAgcmV0dXJuIHRv
Q1NTQ3Jvc3NmYWRlVmFsdWUodGhpcyktPmlzRml4ZWRTaXplKCk7CisgICAgICAgIHJldHVybiBk
b3duY2FzdDxDU1NDcm9zc2ZhZGVWYWx1ZT4oKnRoaXMpLmlzRml4ZWRTaXplKCk7CiAgICAgY2Fz
ZSBGaWx0ZXJJbWFnZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NGaWx0ZXJJbWFnZVZhbHVl
KHRoaXMpLT5pc0ZpeGVkU2l6ZSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTRmlsdGVy
SW1hZ2VWYWx1ZT4oKnRoaXMpLmlzRml4ZWRTaXplKCk7CiAgICAgY2FzZSBMaW5lYXJHcmFkaWVu
dENsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NMaW5lYXJHcmFkaWVudFZhbHVlKHRoaXMpLT5p
c0ZpeGVkU2l6ZSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTTGluZWFyR3JhZGllbnRW
YWx1ZT4oKnRoaXMpLmlzRml4ZWRTaXplKCk7CiAgICAgY2FzZSBSYWRpYWxHcmFkaWVudENsYXNz
OgotICAgICAgICByZXR1cm4gdG9DU1NSYWRpYWxHcmFkaWVudFZhbHVlKHRoaXMpLT5pc0ZpeGVk
U2l6ZSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4o
KnRoaXMpLmlzRml4ZWRTaXplKCk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgfQpAQCAtMTQ3LDE1ICsxNDcsMTUgQEAgRmxvYXRTaXplIENTU0ltYWdl
R2VuZXJhdG9yVmFsdWU6OmZpeGVkU2l6ZShjb25zdCBSZW5kZXJFbGVtZW50KiByZW5kZXJlcikK
IHsKICAgICBzd2l0Y2ggKGNsYXNzVHlwZSgpKSB7CiAgICAgY2FzZSBDYW52YXNDbGFzczoKLSAg
ICAgICAgcmV0dXJuIHRvQ1NTQ2FudmFzVmFsdWUodGhpcyktPmZpeGVkU2l6ZShyZW5kZXJlcik7
CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDYW52YXNWYWx1ZT4oKnRoaXMpLmZpeGVkU2l6
ZShyZW5kZXJlcik7CiAgICAgY2FzZSBDcm9zc2ZhZGVDbGFzczoKLSAgICAgICAgcmV0dXJuIHRv
Q1NTQ3Jvc3NmYWRlVmFsdWUodGhpcyktPmZpeGVkU2l6ZShyZW5kZXJlcik7CisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxDU1NDcm9zc2ZhZGVWYWx1ZT4oKnRoaXMpLmZpeGVkU2l6ZShyZW5kZXJl
cik7CiAgICAgY2FzZSBGaWx0ZXJJbWFnZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NGaWx0
ZXJJbWFnZVZhbHVlKHRoaXMpLT5maXhlZFNpemUocmVuZGVyZXIpOworICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oKnRoaXMpLmZpeGVkU2l6ZShyZW5kZXJlcik7
CiAgICAgY2FzZSBMaW5lYXJHcmFkaWVudENsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NMaW5l
YXJHcmFkaWVudFZhbHVlKHRoaXMpLT5maXhlZFNpemUocmVuZGVyZXIpOworICAgICAgICByZXR1
cm4gZG93bmNhc3Q8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4oKnRoaXMpLmZpeGVkU2l6ZShyZW5k
ZXJlcik7CiAgICAgY2FzZSBSYWRpYWxHcmFkaWVudENsYXNzOgotICAgICAgICByZXR1cm4gdG9D
U1NSYWRpYWxHcmFkaWVudFZhbHVlKHRoaXMpLT5maXhlZFNpemUocmVuZGVyZXIpOworICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnRoaXMpLmZpeGVkU2l6
ZShyZW5kZXJlcik7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQpAQCAtMTY2LDE1ICsxNjYsMTUgQEAgYm9vbCBDU1NJbWFnZUdlbmVyYXRvclZhbHVl
Ojppc1BlbmRpbmcoKSBjb25zdAogewogICAgIHN3aXRjaCAoY2xhc3NUeXBlKCkpIHsKICAgICBj
YXNlIENyb3NzZmFkZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NDcm9zc2ZhZGVWYWx1ZSh0
aGlzKS0+aXNQZW5kaW5nKCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDcm9zc2ZhZGVW
YWx1ZT4oKnRoaXMpLmlzUGVuZGluZygpOwogICAgIGNhc2UgQ2FudmFzQ2xhc3M6Ci0gICAgICAg
IHJldHVybiB0b0NTU0NhbnZhc1ZhbHVlKHRoaXMpLT5pc1BlbmRpbmcoKTsKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PENTU0NhbnZhc1ZhbHVlPigqdGhpcykuaXNQZW5kaW5nKCk7CiAgICAgY2Fz
ZSBGaWx0ZXJJbWFnZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NGaWx0ZXJJbWFnZVZhbHVl
KHRoaXMpLT5pc1BlbmRpbmcoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ZpbHRlcklt
YWdlVmFsdWU+KCp0aGlzKS5pc1BlbmRpbmcoKTsKICAgICBjYXNlIExpbmVhckdyYWRpZW50Q2xh
c3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0xpbmVhckdyYWRpZW50VmFsdWUodGhpcyktPmlzUGVu
ZGluZygpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4o
KnRoaXMpLmlzUGVuZGluZygpOwogICAgIGNhc2UgUmFkaWFsR3JhZGllbnRDbGFzczoKLSAgICAg
ICAgcmV0dXJuIHRvQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZSh0aGlzKS0+aXNQZW5kaW5nKCk7Cisg
ICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigqdGhpcykuaXNQ
ZW5kaW5nKCk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgfQpAQCAtMTg1LDE1ICsxODUsMTUgQEAgYm9vbCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpr
bm93blRvQmVPcGFxdWUoY29uc3QgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIpIGNvbnMKIHsKICAg
ICBzd2l0Y2ggKGNsYXNzVHlwZSgpKSB7CiAgICAgY2FzZSBDcm9zc2ZhZGVDbGFzczoKLSAgICAg
ICAgcmV0dXJuIHRvQ1NTQ3Jvc3NmYWRlVmFsdWUodGhpcyktPmtub3duVG9CZU9wYXF1ZShyZW5k
ZXJlcik7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDcm9zc2ZhZGVWYWx1ZT4oKnRoaXMp
Lmtub3duVG9CZU9wYXF1ZShyZW5kZXJlcik7CiAgICAgY2FzZSBDYW52YXNDbGFzczoKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgRmlsdGVySW1hZ2VDbGFzczoKLSAgICAgICAgcmV0
dXJuIHRvQ1NTRmlsdGVySW1hZ2VWYWx1ZSh0aGlzKS0+a25vd25Ub0JlT3BhcXVlKHJlbmRlcmVy
KTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KCp0aGlzKS5r
bm93blRvQmVPcGFxdWUocmVuZGVyZXIpOwogICAgIGNhc2UgTGluZWFyR3JhZGllbnRDbGFzczoK
LSAgICAgICAgcmV0dXJuIHRvQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSh0aGlzKS0+a25vd25Ub0Jl
T3BhcXVlKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0xpbmVhckdyYWRp
ZW50VmFsdWU+KCp0aGlzKS5rbm93blRvQmVPcGFxdWUocmVuZGVyZXIpOwogICAgIGNhc2UgUmFk
aWFsR3JhZGllbnRDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTUmFkaWFsR3JhZGllbnRWYWx1
ZSh0aGlzKS0+a25vd25Ub0JlT3BhcXVlKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuIGRvd25j
YXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCp0aGlzKS5rbm93blRvQmVPcGFxdWUocmVuZGVy
ZXIpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0K
QEAgLTIwNCwxOSArMjA0LDE5IEBAIHZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6bG9hZFN1
YmltYWdlcyhDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMCiB7CiAgICAgc3dp
dGNoIChjbGFzc1R5cGUoKSkgewogICAgIGNhc2UgQ3Jvc3NmYWRlQ2xhc3M6Ci0gICAgICAgIHRv
Q1NTQ3Jvc3NmYWRlVmFsdWUodGhpcyktPmxvYWRTdWJpbWFnZXMoY2FjaGVkUmVzb3VyY2VMb2Fk
ZXIpOworICAgICAgICBkb3duY2FzdDxDU1NDcm9zc2ZhZGVWYWx1ZT4oKnRoaXMpLmxvYWRTdWJp
bWFnZXMoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENh
bnZhc0NsYXNzOgotICAgICAgICB0b0NTU0NhbnZhc1ZhbHVlKHRoaXMpLT5sb2FkU3ViaW1hZ2Vz
KGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKyAgICAgICAgZG93bmNhc3Q8Q1NTQ2FudmFzVmFsdWU+
KCp0aGlzKS5sb2FkU3ViaW1hZ2VzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBGaWx0ZXJJbWFnZUNsYXNzOgotICAgICAgICB0b0NTU0ZpbHRlckltYWdl
VmFsdWUodGhpcyktPmxvYWRTdWJpbWFnZXMoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOworICAgICAg
ICBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPigqdGhpcykubG9hZFN1YmltYWdlcyhjYWNo
ZWRSZXNvdXJjZUxvYWRlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTGluZWFyR3JhZGll
bnRDbGFzczoKLSAgICAgICAgdG9DU1NMaW5lYXJHcmFkaWVudFZhbHVlKHRoaXMpLT5sb2FkU3Vi
aW1hZ2VzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKyAgICAgICAgZG93bmNhc3Q8Q1NTTGluZWFy
R3JhZGllbnRWYWx1ZT4oKnRoaXMpLmxvYWRTdWJpbWFnZXMoY2FjaGVkUmVzb3VyY2VMb2FkZXIp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIFJhZGlhbEdyYWRpZW50Q2xhc3M6Ci0gICAgICAg
IHRvQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZSh0aGlzKS0+bG9hZFN1YmltYWdlcyhjYWNoZWRSZXNv
dXJjZUxvYWRlcik7CisgICAgICAgIGRvd25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCp0
aGlzKS5sb2FkU3ViaW1hZ2VzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKICAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMjUsMTMg
KzIyNSwxMyBAQCB2b2lkIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmxvYWRTdWJpbWFnZXMoQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTAogCiBib29sIENTU0ltYWdlR2VuZXJh
dG9yVmFsdWU6OnN1YmltYWdlSXNQZW5kaW5nKENTU1ZhbHVlKiB2YWx1ZSkKIHsKLSAgICBpZiAo
dmFsdWUtPmlzSW1hZ2VWYWx1ZSgpKQotICAgICAgICByZXR1cm4gdG9DU1NJbWFnZVZhbHVlKHZh
bHVlKS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKTsKKyAgICBpZiAo
aXM8Q1NTSW1hZ2VWYWx1ZT4oKnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0lt
YWdlVmFsdWU+KCp2YWx1ZSkuY2FjaGVkT3JQZW5kaW5nSW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2Uo
KTsKICAgICAKLSAgICBpZiAodmFsdWUtPmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKQotICAgICAg
ICByZXR1cm4gdG9DU1NJbWFnZUdlbmVyYXRvclZhbHVlKHZhbHVlKS0+aXNQZW5kaW5nKCk7Cisg
ICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KCp2YWx1ZSkpCisgICAgICAgIHJldHVy
biBkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPigqdmFsdWUpLmlzUGVuZGluZygpOwog
Ci0gICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYgdG9DU1NQcmltaXRpdmVWYWx1
ZSh2YWx1ZSktPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCisgICAgaWYgKGlzPENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjQ0LDIxICsyNDQsMjEgQEAgQ2FjaGVk
SW1hZ2UqIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmNhY2hlZEltYWdlRm9yQ1NTVmFsdWUoQ1NT
VmFsdWUqIHZhbHVlLCBDYWMKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIGlmICh2YWx1ZS0+aXNJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAgU3R5bGVDYWNo
ZWRJbWFnZSogc3R5bGVDYWNoZWRJbWFnZSA9IHRvQ1NTSW1hZ2VWYWx1ZSh2YWx1ZSktPmNhY2hl
ZEltYWdlKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4o
KnZhbHVlKSkgeworICAgICAgICBTdHlsZUNhY2hlZEltYWdlKiBzdHlsZUNhY2hlZEltYWdlID0g
ZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oKnZhbHVlKS5jYWNoZWRJbWFnZShjYWNoZWRSZXNvdXJj
ZUxvYWRlcik7CiAgICAgICAgIGlmICghc3R5bGVDYWNoZWRJbWFnZSkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgICAgIHJldHVybiBzdHlsZUNhY2hlZEltYWdlLT5jYWNoZWRJ
bWFnZSgpOwogICAgIH0KICAgICAKLSAgICBpZiAodmFsdWUtPmlzSW1hZ2VHZW5lcmF0b3JWYWx1
ZSgpKSB7Ci0gICAgICAgIHRvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSh2YWx1ZSktPmxvYWRTdWJp
bWFnZXMoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOworICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRv
clZhbHVlPigqdmFsdWUpKSB7CisgICAgICAgIGRvd25jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFs
dWU+KCp2YWx1ZSkubG9hZFN1YmltYWdlcyhjYWNoZWRSZXNvdXJjZUxvYWRlcik7CiAgICAgICAg
IC8vIEZJWE1FOiBIYW5kbGUgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSAoYW5kIHRodXMgY3Jvc3Mt
ZmFkZXMgd2l0aCBncmFkaWVudHMgYW5kIGNhbnZhcykuCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAotICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpICYmIHRvQ1NTUHJp
bWl0aXZlVmFsdWUodmFsdWUpLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKQorICAgIGlm
IChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgKaW5kZXggNjNjODEzN2UyOWIwZjA4ZTNkYWVl
ZDAwOGMxY2I2ZjkxZDVkOGI2Yi4uN2Q5OWQ0MWVhNmE3NDA4M2NjODM0Mzg4YjMxZTU1MjQ4ODc3
M2I5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFs
dWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oCkBA
IC05Miw4ICs5Miw4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxGbG9hdFNpemUsIHN0ZDo6dW5p
cXVlX3B0cjxDYWNoZWRHZW5lcmF0ZWRJbWFnZT4+IG1faW1hZ2VzOwogfTsKIAotQ1NTX1ZBTFVF
X1RZUEVfQ0FTVFMoQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSwgaXNJbWFnZUdlbmVyYXRvclZhbHVl
KCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19D
U1NfVkFMVUUoQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSwgaXNJbWFnZUdlbmVyYXRvclZhbHVlKCkp
CisKICNlbmRpZiAvLyBDU1NJbWFnZUdlbmVyYXRvclZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NJbWFnZVNldFZhbHVlLmNwcAppbmRleCA0ZGJiMGU2NWIxY2ZjNzQ2OTljMWJjMzVlOTVkOTg5
M2FjMmE5YzNhLi4wN2FjYjc3NDljM2IwNTQ3ZTMwMGM1MzY5MDFmMWEwYjU0OWEwOGUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUuY3BwCkBAIC03MCwxMyArNzAsMTIgQEAg
dm9pZCBDU1NJbWFnZVNldFZhbHVlOjpmaWxsSW1hZ2VTZXQoKQogICAgIHNpemVfdCBpID0gMDsK
ICAgICB3aGlsZSAoaSA8IGxlbmd0aCkgewogICAgICAgICBDU1NWYWx1ZSogaW1hZ2VWYWx1ZSA9
IGl0ZW0oaSk7Ci0gICAgICAgIFN0cmluZyBpbWFnZVVSTCA9IHRvQ1NTSW1hZ2VWYWx1ZShpbWFn
ZVZhbHVlKS0+dXJsKCk7CisgICAgICAgIFN0cmluZyBpbWFnZVVSTCA9IGRvd25jYXN0PENTU0lt
YWdlVmFsdWU+KCppbWFnZVZhbHVlKS51cmwoKTsKIAogICAgICAgICArK2k7CiAgICAgICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBsZW5ndGgpOwogICAgICAgICBDU1NW
YWx1ZSogc2NhbGVGYWN0b3JWYWx1ZSA9IGl0ZW0oaSk7Ci0gICAgICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKHNjYWxlRmFjdG9yVmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSk7
Ci0gICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gdG9DU1NQcmltaXRpdmVWYWx1ZShzY2FsZUZh
Y3RvclZhbHVlKS0+Z2V0RmxvYXRWYWx1ZSgpOworICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqc2NhbGVGYWN0b3JWYWx1ZSkuZ2V0RmxvYXRW
YWx1ZSgpOwogCiAgICAgICAgIEltYWdlV2l0aFNjYWxlIGltYWdlOwogICAgICAgICBpbWFnZS5p
bWFnZVVSTCA9IGltYWdlVVJMOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0lt
YWdlU2V0VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZhbHVlLmgKaW5k
ZXggYzE4OTlmM2FiNzAxODc4MWQ4MzkxYmExY2VjZWRkYTkxOGRhNTAyZC4uNDBhOTk2NTNjNzM3
ZGFkYjdhYzBhODYxODA5MjRkMTQ5Y2I1ZDNkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ltYWdlU2V0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VT
ZXRWYWx1ZS5oCkBAIC04NywxMCArODcsMTAgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8SW1hZ2VX
aXRoU2NhbGU+IG1faW1hZ2VzSW5TZXQ7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NJ
bWFnZVNldFZhbHVlLCBpc0ltYWdlU2V0VmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NJbWFnZVNldFZhbHVlLCBp
c0ltYWdlU2V0VmFsdWUoKSkKKwogI2VuZGlmIC8vIEVOQUJMRShDU1NfSU1BR0VfU0VUKQogCiAj
ZW5kaWYgLy8gQ1NTSW1hZ2VTZXRWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTSW1hZ2VWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlVmFsdWUuaApp
bmRleCA5Y2M4YmMzZTQ5NDJkNmMyNTY0MmVjZTQxZWVhYTBjNzYzMjEzYTk4Li45YzQyMDhmOWYy
YjAzMzBmY2JmNzgzNDY1YWM0YmVmNDE1NzgwN2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVZh
bHVlLmgKQEAgLTY5LDggKzY5LDggQEAgcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmcgbV9pbml0
aWF0b3JOYW1lOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTSW1hZ2VWYWx1ZSwgaXNJ
bWFnZVZhbHVlKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19DU1NfVkFMVUUoQ1NTSW1hZ2VWYWx1ZSwgaXNJbWFnZVZhbHVlKCkpCisKICNlbmRp
ZiAvLyBDU1NJbWFnZVZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJ
bmhlcml0ZWRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0luaGVyaXRlZFZhbHVlLmgK
aW5kZXggZjZkMTY4ZWVhMDc2OGJmOGQwMTY2ZTVjNTM4ZmEwOGRiNjMwNmQ1NC4uMzE2NzFiYTcy
NTc3ZTdkOTYzM2U3MDRhZmExMzE1N2IwZjhhZjIyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0luaGVyaXRlZFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0lu
aGVyaXRlZFZhbHVlLmgKQEAgLTQ0LDggKzQ0LDggQEAgcHJpdmF0ZToKICAgICB9CiB9OwogCi1D
U1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NJbmhlcml0ZWRWYWx1ZSwgaXNJbmhlcml0ZWRWYWx1ZSgp
KQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NT
X1ZBTFVFKENTU0luaGVyaXRlZFZhbHVlLCBpc0luaGVyaXRlZFZhbHVlKCkpCisKICNlbmRpZiAv
LyBDU1NJbmhlcml0ZWRWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
SW5pdGlhbFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW5pdGlhbFZhbHVlLmgKaW5k
ZXggYTBhNmU1NTQ4ODVmYTEwODE1NjBjYWI2ODQ0MmQ3Nzk3YWUyZmUxYi4uOTExNmMxOGJkOWY5
NTE3ZDRlZjFiZjAzM2NkM2JhY2UyNWUyNjBjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0luaXRpYWxWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbml0aWFs
VmFsdWUuaApAQCAtNTMsOCArNTMsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0ltcGxpY2l0
OwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTSW5pdGlhbFZhbHVlLCBpc0luaXRpYWxW
YWx1ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQ1NTX1ZBTFVFKENTU0luaXRpYWxWYWx1ZSwgaXNJbml0aWFsVmFsdWUoKSkKKwogI2VuZGlm
IC8vIENTU0luaXRpYWxWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
TGluZUJveENvbnRhaW5WYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0xpbmVCb3hDb250
YWluVmFsdWUuaAppbmRleCBiOTgwZThlZmE5ZTRiMWQxMDM3YjNkYjJiOGU5M2FiMjY2ZTI3ZDI0
Li5kNzY0M2ZhMzE0ZTAxZDNmOThhNDkwYjlmZDdhMWMxNDE0NDEwMmIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTTGluZUJveENvbnRhaW5WYWx1ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NMaW5lQm94Q29udGFpblZhbHVlLmgKQEAgLTU2LDggKzU2LDggQEAgcHJp
dmF0ZToKICAgICBMaW5lQm94Q29udGFpbiBtX3ZhbHVlOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVf
Q0FTVFMoQ1NTTGluZUJveENvbnRhaW5WYWx1ZSwgaXNMaW5lQm94Q29udGFpblZhbHVlKCkpCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLX0gLy8gbmFtZXNwYWNlCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0NTU19WQUxVRShDU1NMaW5lQm94Q29udGFpblZhbHVlLCBpc0xpbmVCb3hDb250YWlu
VmFsdWUoKSkKIAotI2VuZGlmCisjZW5kaWYgLy8gQ1NTTGluZUJveENvbnRhaW5WYWx1ZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IGMzZGU2ZGM4ZmNkNzE3MDZjYzhlM2NmNDRjMTdi
NjI5ZmE5ODU0YzIuLmMwMGY5Nzg5NDljNTRmMWNiY2MwNjYyMGYxNzhjNjJjZjIzZGU0YzkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC0xMzQ1LDE0ICsxMzQ1LDE0IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZUNvbG9yKFJHQkEzMiYgY29sb3IsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBi
b29sIHN0cmljdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQ1NTVmFsdWUqIHZhbHVl
ID0gcGFyc2VyLm1fcGFyc2VkUHJvcGVydGllcy5maXJzdCgpLnZhbHVlKCk7Ci0gICAgaWYgKCF2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIGlmICgh
cHJpbWl0aXZlVmFsdWUtPmlzUkdCQ29sb3IoKSkKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBp
ZiAoIXByaW1pdGl2ZVZhbHVlLmlzUkdCQ29sb3IoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgY29sb3IgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UkdCQTMyVmFsdWUoKTsKKyAgICBjb2xv
ciA9IHByaW1pdGl2ZVZhbHVlLmdldFJHQkEzMlZhbHVlKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTMxMTgsNyArMzExOCw3IEBAIHZvaWQgQ1NTUGFyc2VyOjphZGRGaWxsVmFsdWUoUmVm
UHRyPENTU1ZhbHVlPiYgbHZhbCwgUGFzc1JlZjxDU1NWYWx1ZT4gcnZhbCkKICAgICB9CiAKICAg
ICBpZiAobHZhbC0+aXNCYXNlVmFsdWVMaXN0KCkpIHsKLSAgICAgICAgdG9DU1NWYWx1ZUxpc3Qo
Kmx2YWwpLmFwcGVuZChXVEY6Om1vdmUocnZhbCkpOworICAgICAgICBkb3duY2FzdDxDU1NWYWx1
ZUxpc3Q+KCpsdmFsKS5hcHBlbmQoV1RGOjptb3ZlKHJ2YWwpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMzQyNSw4ICszNDI1LDggQEAgdm9pZCBDU1NQYXJzZXI6OmFkZEFuaW1hdGlv
blZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFBhc3NSZWY8Q1NTVmFsdWU+IHJ2YWwKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChsdmFsLT5pc1ZhbHVlTGlzdCgpKSB7Ci0g
ICAgICAgIHRvQ1NTVmFsdWVMaXN0KCpsdmFsKS5hcHBlbmQoV1RGOjptb3ZlKHJ2YWwpKTsKKyAg
ICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqbHZhbCkpIHsKKyAgICAgICAgZG93bmNhc3Q8Q1NTVmFs
dWVMaXN0PigqbHZhbCkuYXBwZW5kKFdURjo6bW92ZShydmFsKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTQxNzAsMTAgKzQxNzAsMTAgQEAgdm9pZCBDU1NQYXJzZXI6OnBhcnNlM1Zh
bHVlc0ZpbGxQb3NpdGlvbihDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRyPEMK
ICAgICAgICAgdmFsdWUxLnN3YXAodmFsdWUyKTsKIAogI2lmbmRlZiBOREVCVUcKLSAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogZmlyc3QgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlMS5nZXQoKSk7
Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZCA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFs
dWUyLmdldCgpKTsKLSAgICBpZGVudDEgPSBmaXJzdC0+Z2V0UGFpclZhbHVlKCktPmZpcnN0KCkt
PmdldFZhbHVlSUQoKTsKLSAgICBpZGVudDIgPSBzZWNvbmQtPmdldFBhaXJWYWx1ZSgpLT5maXJz
dCgpLT5nZXRWYWx1ZUlEKCk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGZpcnN0ID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZTEpOworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBz
ZWNvbmQgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlMik7CisgICAgaWRlbnQx
ID0gZmlyc3QuZ2V0UGFpclZhbHVlKCktPmZpcnN0KCktPmdldFZhbHVlSUQoKTsKKyAgICBpZGVu
dDIgPSBzZWNvbmQuZ2V0UGFpclZhbHVlKCktPmZpcnN0KCktPmdldFZhbHVlSUQoKTsKICAgICBB
U1NFUlQoaWRlbnQxID09IENTU1ZhbHVlTGVmdCB8fCBpZGVudDEgPT0gQ1NTVmFsdWVSaWdodCk7
CiAgICAgQVNTRVJUKGlkZW50MiA9PSBDU1NWYWx1ZUJvdHRvbSB8fCBpZGVudDIgPT0gQ1NTVmFs
dWVUb3ApOwogI2VuZGlmCkBAIC00MjMxLDggKzQyMzEsOCBAQCB2b2lkIENTU1BhcnNlcjo6cGFy
c2VGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NW
YWx1ZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBwYXJzZWRWYWx1ZTEgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlMS5nZXQoKSk7Ci0g
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZTIgPSB0b0NTU1ByaW1pdGl2
ZVZhbHVlKHZhbHVlMi5nZXQoKSk7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJz
ZWRWYWx1ZTEgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUxLmdldCgpKTsKKyAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMiA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZTIuZ2V0KCkpOwogCiAgICAgdmFsdWUxLmNsZWFyKCk7CiAgICAg
dmFsdWUyLmNsZWFyKCk7CkBAIC00MzI5LDcgKzQzMjksNyBAQCB2b2lkIENTU1BhcnNlcjo6cGFy
c2VGaWxsUmVwZWF0KFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMSwgUmVmUHRyPENTU1ZhbHVlPiYg
dmFsdQogCiAgICAgLy8gSWYgb25seSBvbmUgdmFsdWUgd2FzIHNwZWNpZmllZCwgdmFsdWUyIGlz
IHRoZSBzYW1lIGFzIHZhbHVlMS4KICAgICBtX2ltcGxpY2l0U2hvcnRoYW5kID0gdHJ1ZTsKLSAg
ICB2YWx1ZTIgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodG9DU1NQcmlt
aXRpdmVWYWx1ZSh2YWx1ZTEuZ2V0KCkpLT5nZXRWYWx1ZUlEKCkpOworICAgIHZhbHVlMiA9IGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlMSkuZ2V0VmFsdWVJRCgpKTsKIH0KIAogUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZUZpbGxTaXplKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sJiBhbGxv
d0NvbW1hKQpAQCAtNDk0Niw3ICs0OTQ2LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZUdyaWRQb3NpdGlvbigpCiAKIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBn
cmlkTWlzc2luZ0dyaWRQb3NpdGlvblZhbHVlKENTU1ZhbHVlKiB2YWx1ZSkKIHsKLSAgICBpZiAo
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+
aXNTdHJpbmcoKSkKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0
dXJuIHZhbHVlOwogCiAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZUF1dG8pOwpAQCAtNDk5OCw3ICs0OTk4LDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlR3JpZFRlbXBsYXRlUm93c0FuZEFyZWFzKFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHRlbXBs
YXRlQ29sdW0KICAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPnVuaXQgPT0gQ1NT
UGFyc2VyVmFsdWU6OlZhbHVlTGlzdCkgewogICAgICAgICAgICAgaWYgKHRyYWlsaW5nSWRlbnRX
YXNBZGRlZCkgewogICAgICAgICAgICAgICAgIC8vIEEgcm93J3MgdHJhaWxpbmcgaWRlbnQgbXVz
dCBiZSBjb25jYXRlbmF0ZWQgd2l0aCB0aGUgbmV4dCByb3cncyBsZWFkaW5nIG9uZS4KLSAgICAg
ICAgICAgICAgICBwYXJzZUdyaWRMaW5lTmFtZXMoKm1fdmFsdWVMaXN0LCAqdGVtcGxhdGVSb3dz
LCB0b0NTU0dyaWRMaW5lTmFtZXNWYWx1ZSh0ZW1wbGF0ZVJvd3MtPml0ZW0odGVtcGxhdGVSb3dz
LT5sZW5ndGgoKSAtIDEpKSk7CisgICAgICAgICAgICAgICAgcGFyc2VHcmlkTGluZU5hbWVzKCpt
X3ZhbHVlTGlzdCwgKnRlbXBsYXRlUm93cywgZG93bmNhc3Q8Q1NTR3JpZExpbmVOYW1lc1ZhbHVl
Pih0ZW1wbGF0ZVJvd3MtPml0ZW0odGVtcGxhdGVSb3dzLT5sZW5ndGgoKSAtIDEpKSk7CiAgICAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBwYXJzZUdyaWRMaW5lTmFtZXMoKm1fdmFs
dWVMaXN0LCAqdGVtcGxhdGVSb3dzKTsKICAgICAgICAgfQpAQCAtNTkwMCw3ICs1OTAwLDcgQEAg
UGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUNpcmNs
ZShDU1NQYXJzZXJWYWx1ZUxpc3QqIGEKICAgICAgICAgLy8gYXJndW1lbnRzIGV4Y2VwdCB0aGUg
Zmlyc3QgdHdvLiBUaHVzLCBhbmQgaW5kZXggZ3JlYXRlciB0aGFuIG9uZQogICAgICAgICAvLyBp
bmRpY2F0ZXMgYW4gaW52YWxpZCBwcm9kdWN0aW9uLgogICAgICAgICBpZiAoYXJncy0+Y3VycmVu
dEluZGV4KCkgPiAxKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgICAgICBpZiAoIWFyZ3MtPmN1cnJlbnRJbmRleCgpICYmIGFyZ3VtZW50
LT5pZCAhPSBDU1NWYWx1ZUF0KSB7CiAgICAgICAgICAgICBpZiAoUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiByYWRpdXMgPSBwYXJzZVNoYXBlUmFkaXVzKGFyZ3VtZW50KSkgewpAQCAtNTkwOCw3
ICs1OTA4LDcgQEAgUGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFz
aWNTaGFwZUNpcmNsZShDU1NQYXJzZXJWYWx1ZUxpc3QqIGEKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChhcmd1bWVudC0+aWQg
PT0gQ1NTVmFsdWVBdCAmJiBhcmdzLT5uZXh0KCkpIHsKQEAgLTU5MTYsMTQgKzU5MTYsMTIgQEAg
UGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUNpcmNs
ZShDU1NQYXJzZXJWYWx1ZUxpc3QqIGEKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY2Vu
dGVyWTsKICAgICAgICAgICAgIHBhcnNlRmlsbFBvc2l0aW9uKGFyZ3MsIGNlbnRlclgsIGNlbnRl
clkpOwogICAgICAgICAgICAgaWYgKGNlbnRlclggJiYgY2VudGVyWSAmJiAhYXJncy0+Y3VycmVu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGNlbnRlclgtPmlzUHJpbWl0aXZlVmFsdWUo
KSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGNlbnRlclktPmlzUHJpbWl0aXZlVmFsdWUoKSk7
Ci0gICAgICAgICAgICAgICAgc2hhcGUtPnNldENlbnRlclgodG9DU1NQcmltaXRpdmVWYWx1ZShj
ZW50ZXJYLmdldCgpKSk7Ci0gICAgICAgICAgICAgICAgc2hhcGUtPnNldENlbnRlclkodG9DU1NQ
cmltaXRpdmVWYWx1ZShjZW50ZXJZLmdldCgpKSk7CisgICAgICAgICAgICAgICAgc2hhcGUtPnNl
dENlbnRlclgoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGNlbnRlclguZ2V0KCkpKTsKKyAg
ICAgICAgICAgICAgICBzaGFwZS0+c2V0Q2VudGVyWShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oY2VudGVyWS5nZXQoKSkpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKICAgICByZXR1cm4gc2hhcGU7CkBAIC01OTQ2LDcgKzU5NDQsNyBAQCBQYXNzUmVmUHRy
PENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlRWxsaXBzZShDU1NQYXJz
ZXJWYWx1ZUxpc3QqCiAgICAgICAgIC8vIGFyZ3VtZW50cyBleGNlcHQgdGhlIGZpcnN0IHRocmVl
LiBUaHVzLCBhbiBpbmRleCBncmVhdGVyIHRoYW4gdHdvCiAgICAgICAgIC8vIGluZGljYXRlcyBh
biBpbnZhbGlkIHByb2R1Y3Rpb24uCiAgICAgICAgIGlmIChhcmdzLT5jdXJyZW50SW5kZXgoKSA+
IDIpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgICAgIGlmIChhcmdzLT5jdXJyZW50SW5kZXgoKSA8IDIgJiYgYXJndW1lbnQtPmlkICE9
IENTU1ZhbHVlQXQpIHsKICAgICAgICAgICAgIGlmIChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHJhZGl1cyA9IHBhcnNlU2hhcGVSYWRpdXMoYXJndW1lbnQpKSB7CkBAIC01OTU3LDIyICs1OTU1
LDIwIEBAIFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gQ1NTUGFyc2VyOjpwYXJzZUJhc2ljU2hh
cGVFbGxpcHNlKENTU1BhcnNlclZhbHVlTGlzdCoKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChhcmd1bWVudC0+aWQgIT0gQ1NT
VmFsdWVBdCB8fCAhYXJncy0+bmV4dCgpKSAvLyBleHBlY3RpbmcgZWxsaXBzZSguLiBhdCA8cG9z
aXRpb24+KQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGNlbnRlclg7CiAgICAgICAgIFJlZlB0cjxD
U1NWYWx1ZT4gY2VudGVyWTsKICAgICAgICAgcGFyc2VGaWxsUG9zaXRpb24oYXJncywgY2VudGVy
WCwgY2VudGVyWSk7CiAgICAgICAgIGlmICghY2VudGVyWCB8fCAhY2VudGVyWSB8fCBhcmdzLT5j
dXJyZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgICAgIEFTU0VSVChjZW50ZXJYLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAg
ICAgICBBU1NFUlQoY2VudGVyWS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgc2hhcGUt
PnNldENlbnRlclgodG9DU1NQcmltaXRpdmVWYWx1ZShjZW50ZXJYLmdldCgpKSk7Ci0gICAgICAg
IHNoYXBlLT5zZXRDZW50ZXJZKHRvQ1NTUHJpbWl0aXZlVmFsdWUoY2VudGVyWS5nZXQoKSkpOwor
ICAgICAgICBzaGFwZS0+c2V0Q2VudGVyWChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY2Vu
dGVyWC5nZXQoKSkpOworICAgICAgICBzaGFwZS0+c2V0Q2VudGVyWShkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oY2VudGVyWS5nZXQoKSkpOwogICAgIH0KIAogICAgIHJldHVybiBzaGFwZTsK
QEAgLTgxMTUsNyArODExMSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRHcmFk
aWVudChDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRyPENTCiAgICAgICAgIGEg
PSBhcmdzLT5uZXh0KCk7CiAgICAgICAgIGlmICghYSB8fCBhLT51bml0ICE9IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB0
b0NTU1JhZGlhbEdyYWRpZW50VmFsdWUocmVzdWx0LmdldCgpKS0+c2V0Rmlyc3RSYWRpdXMoY3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGEpKTsKKyAgICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFs
R3JhZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0Rmlyc3RSYWRpdXMoY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKGEpKTsKIAogICAgICAgICAvLyBDb21tYSBhZnRlciB0aGUgZmlyc3QgcmFkaXVz
LgogICAgICAgICBhID0gYXJncy0+bmV4dCgpOwpAQCAtODE1Miw3ICs4MTQ4LDcgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCogdmFs
dWVMaXN0LCBSZWZQdHI8Q1MKICAgICAgICAgYSA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgaWYg
KCFhIHx8IGEtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHRvQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZShyZXN1
bHQuZ2V0KCkpLT5zZXRTZWNvbmRSYWRpdXMoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGEp
KTsKKyAgICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0
U2Vjb25kUmFkaXVzKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhKSk7CiAgICAgfQogCiAg
ICAgLy8gV2Ugbm93IHdpbGwgYWNjZXB0IGFueSBudW1iZXIgb2Ygc3RvcHMgKDAgb3IgbW9yZSku
CkBAIC04MzEyLDE0ICs4MzA4LDExIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRS
YWRpYWxHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgQVNTRVJUKCFjZW50ZXJYIHx8IGNlbnRl
clgtPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgQVNTRVJUKCFjZW50ZXJZIHx8IGNlbnRlclkt
PmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0KLSAgICByZXN1bHQtPnNldEZpcnN0WCh0b0NTU1ByaW1p
dGl2ZVZhbHVlKGNlbnRlclguZ2V0KCkpKTsKLSAgICByZXN1bHQtPnNldFNlY29uZFgodG9DU1NQ
cmltaXRpdmVWYWx1ZShjZW50ZXJYLmdldCgpKSk7CisgICAgcmVzdWx0LT5zZXRGaXJzdFgoZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGNlbnRlclguZ2V0KCkpKTsKKyAgICByZXN1bHQtPnNl
dFNlY29uZFgoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGNlbnRlclguZ2V0KCkpKTsKICAg
ICAvLyBDU1MzIHJhZGlhbCBncmFkaWVudHMgYWx3YXlzIHNoYXJlIHRoZSBzYW1lIHN0YXJ0IGFu
ZCBlbmQgcG9pbnQuCi0gICAgcmVzdWx0LT5zZXRGaXJzdFkodG9DU1NQcmltaXRpdmVWYWx1ZShj
ZW50ZXJZLmdldCgpKSk7Ci0gICAgcmVzdWx0LT5zZXRTZWNvbmRZKHRvQ1NTUHJpbWl0aXZlVmFs
dWUoY2VudGVyWS5nZXQoKSkpOworICAgIHJlc3VsdC0+c2V0Rmlyc3RZKGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPihjZW50ZXJZLmdldCgpKSk7CisgICAgcmVzdWx0LT5zZXRTZWNvbmRZKGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihjZW50ZXJZLmdldCgpKSk7CiAKICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IHNoYXBlVmFsdWU7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBzaXplVmFsdWU7CkBAIC04NTc4LDEzICs4NTcxLDExIEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVJhZGlhbEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0LCBSZWZQdHI8
Q1NTVmFsCiAgICAgICAgIGlmICghYSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICBBU1NFUlQoY2VudGVyWC0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgQVNTRVJU
KGNlbnRlclktPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0Rmlyc3RY
KHRvQ1NTUHJpbWl0aXZlVmFsdWUoY2VudGVyWC5nZXQoKSkpOwotICAgICAgICByZXN1bHQtPnNl
dEZpcnN0WSh0b0NTU1ByaW1pdGl2ZVZhbHVlKGNlbnRlclkuZ2V0KCkpKTsKKyAgICAgICAgcmVz
dWx0LT5zZXRGaXJzdFgoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGNlbnRlclguZ2V0KCkp
KTsKKyAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFkoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KGNlbnRlclkuZ2V0KCkpKTsKICAgICAgICAgLy8gUmlnaHQgbm93LCBDU1MgcmFkaWFsIGdyYWRp
ZW50cyBoYXZlIHRoZSBzYW1lIHN0YXJ0IGFuZCBlbmQgY2VudGVycy4KLSAgICAgICAgcmVzdWx0
LT5zZXRTZWNvbmRYKHRvQ1NTUHJpbWl0aXZlVmFsdWUoY2VudGVyWC5nZXQoKSkpOwotICAgICAg
ICByZXN1bHQtPnNldFNlY29uZFkodG9DU1NQcmltaXRpdmVWYWx1ZShjZW50ZXJZLmdldCgpKSk7
CisgICAgICAgIHJlc3VsdC0+c2V0U2Vjb25kWChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
Y2VudGVyWC5nZXQoKSkpOworICAgICAgICByZXN1bHQtPnNldFNlY29uZFkoZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KGNlbnRlclkuZ2V0KCkpKTsKICAgICB9CiAKICAgICBpZiAoc2hhcGVW
YWx1ZSB8fCBzaXplVmFsdWUgfHwgaG9yaXpvbnRhbFNpemUgfHwgY2VudGVyWCB8fCBjZW50ZXJZ
KQpAQCAtMTE3MzcsNyArMTE3MjgsNyBAQCBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IENTU1Bh
cnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxlKCkKICAgICAgICAgQ1NTUHJvcGVydHkmIHByb3BlcnR5
ID0gbV9wYXJzZWRQcm9wZXJ0aWVzW2ldOwogICAgICAgICBpZiAocHJvcGVydHkuaWQoKSA9PSBD
U1NQcm9wZXJ0eUZvbnRWYXJpYW50ICYmIHByb3BlcnR5LnZhbHVlKCktPmlzUHJpbWl0aXZlVmFs
dWUoKSkKICAgICAgICAgICAgIHByb3BlcnR5LndyYXBWYWx1ZUluQ29tbWFTZXBhcmF0ZWRMaXN0
KCk7Ci0gICAgICAgIGVsc2UgaWYgKHByb3BlcnR5LmlkKCkgPT0gQ1NTUHJvcGVydHlGb250RmFt
aWx5ICYmICghcHJvcGVydHkudmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSB8fCB0b0NTU1ZhbHVlTGlz
dChwcm9wZXJ0eS52YWx1ZSgpKS0+bGVuZ3RoKCkgIT0gMSkpIHsKKyAgICAgICAgZWxzZSBpZiAo
cHJvcGVydHkuaWQoKSA9PSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHkgJiYgKCFpczxDU1NWYWx1ZUxp
c3Q+KCpwcm9wZXJ0eS52YWx1ZSgpKSB8fCBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpwcm9wZXJ0
eS52YWx1ZSgpKS5sZW5ndGgoKSAhPSAxKSkgewogICAgICAgICAgICAgLy8gVW5saWtlIGZvbnQt
ZmFtaWx5IHByb3BlcnR5LCBmb250LWZhbWlseSBkZXNjcmlwdG9yIGluIEBmb250LWZhY2UgcnVs
ZQogICAgICAgICAgICAgLy8gaGFzIHRvIGJlIGEgdmFsdWUgbGlzdCB3aXRoIGV4YWN0bHkgb25l
IGZhbWlseSBuYW1lLiBJdCBjYW5ub3QgaGF2ZSBhCiAgICAgICAgICAgICAvLyBoYXZlICdpbml0
aWFsJyB2YWx1ZSBhbmQgY2Fubm90ICdpbmhlcml0JyBmcm9tIHBhcmVudC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgKaW5kZXggYTEzYzE1MzNhNDFmMzY0YWQ0ODk4ODZkM2I0
N2ExNmJiY2FiMTRlOS4uMjQ0NjA5M2IyOWZhMDIxYmFmZTFiZjJkMmY1ZGUyMzhjZmVkNmFiOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgKQEAgLTQyMSw4ICs0MjEsOCBA
QCBwcml2YXRlOgogICAgIH0gbV92YWx1ZTsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENT
U1ByaW1pdGl2ZVZhbHVlLCBpc1ByaW1pdGl2ZVZhbHVlKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTUHJpbWl0aXZlVmFs
dWUsIGlzUHJpbWl0aXZlVmFsdWUoKSkKKwogI2VuZGlmIC8vIENTU1ByaW1pdGl2ZVZhbHVlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuaAppbmRleCA4ZDBmZTYwNTljOWIyMTE4OTRh
MTI4YjlkYWQxZTg1NDFjZjBlZjExLi43MmUzNjZkZjFlZGE5NTk1YmQ3ZjVmZTUzYzFiOWY2MGFm
ZmE1Yzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVmbGVjdFZhbHVlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1JlZmxlY3RWYWx1ZS5oCkBAIC02Nyw4ICs2Nyw4
IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBtX21hc2s7CiB9OwogCi1DU1NfVkFM
VUVfVFlQRV9DQVNUUyhDU1NSZWZsZWN0VmFsdWUsIGlzUmVmbGVjdFZhbHVlKCkpCi0KIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NT
UmVmbGVjdFZhbHVlLCBpc1JlZmxlY3RWYWx1ZSgpKQorCiAjZW5kaWYgLy8gQ1NTUmVmbGVjdFZh
bHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTaGFkb3dWYWx1ZS5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1NoYWRvd1ZhbHVlLmgKaW5kZXggNjE3NWRmODI2ZmE5MTJi
ZDA4NjQxMmJjY2ZiZTEzYTVmNWIxZDI5MC4uMDA2YzYyOTJmMTZjNGIxMTQ0OTQzYzMxNGE4ODhm
MmI3ZTg3OTZmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NoYWRvd1ZhbHVl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NoYWRvd1ZhbHVlLmgKQEAgLTYyLDggKzYy
LDggQEAgcHJpdmF0ZToKICAgICAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29s
b3IpOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTU2hhZG93VmFsdWUsIGlzU2hhZG93
VmFsdWUoKSkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotfSAvLyBuYW1lc3BhY2UKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU1NoYWRvd1ZhbHVlLCBpc1NoYWRvd1ZhbHVl
KCkpCiAKLSNlbmRpZgorI2VuZGlmIC8vIENTU1NoYWRvd1ZhbHVlX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oCmluZGV4IDY2YzJjM2IyNTZmMDhjMTcwODYz
NTEzYWRiZWY4ZGIyOGU5YmEwMDMuLmMzOWFiMGNmZjIwZGI1YWQ4OTk0Yjc2NDc2N2VkOGM1Y2Rl
NWRmMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZh
bHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaApA
QCAtNjMsOCArNjMsNiBAQCBwcml2YXRlOgogICAgIGRvdWJsZSBtX3kyOwogfTsKIAotQ1NTX1ZB
TFVFX1RZUEVfQ0FTVFMoQ1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlLCBpc0N1Ymlj
QmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSgpKQotCiBjbGFzcyBDU1NTdGVwc1RpbWluZ0Z1bmN0
aW9uVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
PENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZT4gY3JlYXRlKGludCBzdGVwcywgYm9vbCBzdGVw
QXRTdGFydCkKQEAgLTkxLDggKzg5LDkgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc3RlcEF0U3Rh
cnQ7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFs
dWUsIGlzU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlKCkpCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKLX0gLy8gbmFtZXNwYWNlCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1ND
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUsIGlzQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
blZhbHVlKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NTdGVwc1RpbWlu
Z0Z1bmN0aW9uVmFsdWUsIGlzU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlKCkpCiAKLSNlbmRpZgor
I2VuZGlmIC8vIENTU1RpbWluZ0Z1bmN0aW9uVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5
bGVNYXAuY3BwCmluZGV4IDUxM2M0ZDliNzM5YjU3NDhhOGYzODgwOTMxZGJlNzMwODAxZGE5MWQu
LjMwNjE5MGE4YzM1ZjM0YTZmODFkMzkxYzhiZGY3NDg5NGExODJiNGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVG9TdHlsZU1hcC5jcHAKQEAgLTc0LDEwICs3NCwxMCBAQCB2b2lkIENTU1RvU3R5bGVN
YXA6Om1hcEZpbGxBdHRhY2htZW50KENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENT
U1ZhbHVlKgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIHN3aXRjaCAodG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSkt
PmdldFZhbHVlSUQoKSkgeworICAgIHN3aXRjaCAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpKSB7CiAgICAgY2FzZSBDU1NWYWx1ZUZpeGVkOgogICAgICAg
ICBsYXllci0+c2V0QXR0YWNobWVudChGaXhlZEJhY2tncm91bmRBdHRhY2htZW50KTsKICAgICAg
ICAgYnJlYWs7CkBAIC05OSwxMSArOTksMTEgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxs
Q2xpcChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1p
dGl2ZVZhbHVlKHZhbHVlKTsKLSAgICBsYXllci0+c2V0Q2xpcCgqcHJpbWl0aXZlVmFsdWUpOwor
ICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGxheWVyLT5zZXRDbGlwKHByaW1pdGl2ZVZhbHVlKTsK
IH0KIAogdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsQ29tcG9zaXRlKENTU1Byb3BlcnR5SUQs
IEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKQEAgLTExMywxMSArMTEzLDExIEBA
IHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbENvbXBvc2l0ZShDU1NQcm9wZXJ0eUlELCBGaWxs
TGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSoKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
ICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZh
bHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICBsYXllci0+
c2V0Q29tcG9zaXRlKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHBy
aW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAg
bGF5ZXItPnNldENvbXBvc2l0ZShwcmltaXRpdmVWYWx1ZSk7CiB9CiAKIHZvaWQgQ1NTVG9TdHls
ZU1hcDo6bWFwRmlsbEJsZW5kTW9kZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBD
U1NWYWx1ZSogdmFsdWUpCkBAIC0xMjcsMTEgKzEyNywxMSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6
Om1hcEZpbGxCbGVuZE1vZGUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFs
dWUqCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9D
U1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgbGF5ZXItPnNldEJsZW5kTW9kZSgqcHJpbWl0
aXZlVmFsdWUpOworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGxheWVyLT5zZXRCbGVuZE1vZGUo
cHJpbWl0aXZlVmFsdWUpOwogfQogCiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxPcmlnaW4o
Q1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQpAQCAtMTQx
LDExICsxNDEsMTEgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsT3JpZ2luKENTU1Byb3Bl
cnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWwKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlz
PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVl
KTsKLSAgICBsYXllci0+c2V0T3JpZ2luKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgQ1NTUHJpbWl0
aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSk7CisgICAgbGF5ZXItPnNldE9yaWdpbihwcmltaXRpdmVWYWx1ZSk7CiB9CiAKIApAQCAt
MTY2LDExICsxNjYsMTEgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WChDU1NQ
cm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmEKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAo
IWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBD
U1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZh
bHVlKTsKLSAgICBsYXllci0+c2V0UmVwZWF0WCgqcHJpbWl0aXZlVmFsdWUpOworICAgIENTU1By
aW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqdmFsdWUpOworICAgIGxheWVyLT5zZXRSZXBlYXRYKHByaW1pdGl2ZVZhbHVlKTsKIH0KIAog
dm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5
ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCkBAIC0xODAsMzEgKzE4MCwzMSBAQCB2b2lkIENT
U1RvU3R5bGVNYXA6Om1hcEZpbGxSZXBlYXRZKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5
ZXIsIENTU1ZhbHVlKiB2YQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIGxheWVyLT5zZXRSZXBl
YXRZKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZh
bHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgbGF5ZXItPnNl
dFJlcGVhdFkocHJpbWl0aXZlVmFsdWUpOwogfQogCiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZp
bGxTaXplKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
IHsKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICBpZiAoIWlzPENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSB7CiAgICAgICAgIGxheWVyLT5zZXRTaXplVHlwZShT
aXplTm9uZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUNvbnRhaW4pCisgICAgQ1NT
UHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NW
YWx1ZUNvbnRhaW4pCiAgICAgICAgIGxheWVyLT5zZXRTaXplVHlwZShDb250YWluKTsKLSAgICBl
bHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ292ZXIpCisg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ292ZXIp
CiAgICAgICAgIGxheWVyLT5zZXRTaXplVHlwZShDb3Zlcik7CiAgICAgZWxzZQogICAgICAgICBs
YXllci0+c2V0U2l6ZVR5cGUoU2l6ZUxlbmd0aCk7CiAKICAgICBMZW5ndGhTaXplIGIgPSBGaWxs
TGF5ZXI6OmluaXRpYWxGaWxsU2l6ZUxlbmd0aChsYXllci0+dHlwZSgpKTsKIAotICAgIGlmICh2
YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09
IENTU1ZhbHVlQ29udGFpbiB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1Zh
bHVlQ292ZXIpIHsKKyAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgcHJpbWl0aXZl
VmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ29udGFpbiB8fCBwcmltaXRpdmVWYWx1ZS5n
ZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVDb3ZlcikgewogICAgICAgICBsYXllci0+c2V0U2l6ZUxl
bmd0aChiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIxMiwxMyArMjEyLDEzIEBAIHZv
aWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFNpemUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBs
YXllciwgQ1NTVmFsdWUqIHZhbHVlCiAgICAgTGVuZ3RoIGZpcnN0TGVuZ3RoOwogICAgIExlbmd0
aCBzZWNvbmRMZW5ndGg7CiAKLSAgICBpZiAoUGFpciogcGFpciA9IHByaW1pdGl2ZVZhbHVlLT5n
ZXRQYWlyVmFsdWUoKSkgeworICAgIGlmIChQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUuZ2V0
UGFpclZhbHVlKCkpIHsKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0ID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihwYWlyLT5maXJzdCgpKTsKICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHNlY29uZCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4ocGFp
ci0+c2Vjb25kKCkpOwogICAgICAgICBmaXJzdExlbmd0aCA9IGZpcnN0LT5jb252ZXJ0VG9MZW5n
dGg8QW55Q29udmVyc2lvbj4obV9yZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNp
b25EYXRhKCkpOwogICAgICAgICBzZWNvbmRMZW5ndGggPSBzZWNvbmQtPmNvbnZlcnRUb0xlbmd0
aDxBbnlDb252ZXJzaW9uPihtX3Jlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEoKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZmlyc3RMZW5ndGggPSBwcmltaXRpdmVW
YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KG1fcmVzb2x2ZXItPnN0YXRlKCku
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKKyAgICAgICAgZmlyc3RMZW5ndGggPSBwcmlt
aXRpdmVWYWx1ZS5jb252ZXJ0VG9MZW5ndGg8QW55Q29udmVyc2lvbj4obV9yZXNvbHZlci0+c3Rh
dGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwogICAgICAgICBzZWNvbmRMZW5ndGgg
PSBMZW5ndGgoKTsKICAgICB9CiAKQEAgLTIzNywxMCArMjM3LDEwIEBAIHZvaWQgQ1NTVG9TdHls
ZU1hcDo6bWFwRmlsbFhQb3NpdGlvbihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEZpbGxMYXll
ciogbGF5ZXIsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBQ
YWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1ZSgpOwogICAgIGlmIChwYWly
KSB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQocHJvcGVydHlJRCwgcHJvcGVydHlJRCA9PSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblggfHwgcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tQb3NpdGlvblgpOwpAQCAtMjY5LDEwICsyNjksMTAgQEAgdm9pZCBDU1NUb1N0eWxl
TWFwOjptYXBGaWxsWVBvc2l0aW9uKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgRmlsbExheWVy
KiBsYXllciwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIFBh
aXIqIHBhaXIgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UGFpclZhbHVlKCk7CiAgICAgaWYgKHBhaXIp
IHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChwcm9wZXJ0eUlELCBwcm9wZXJ0eUlEID09IENTU1By
b3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWSB8fCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5V2Vi
a2l0TWFza1Bvc2l0aW9uWSk7CkBAIC0zMDIsMTEgKzMwMiwxMSBAQCB2b2lkIENTU1RvU3R5bGVN
YXA6Om1hcEZpbGxNYXNrU291cmNlVHlwZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVy
LCBDU1NWYQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9
IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUt
PmdldFZhbHVlSUQoKSkgeworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIHN3aXRjaCAocHJpbWl0
aXZlVmFsdWUuZ2V0VmFsdWVJRCgpKSB7CiAgICAgY2FzZSBDU1NWYWx1ZUFscGhhOgogICAgICAg
ICB0eXBlID0gRU1hc2tTb3VyY2VUeXBlOjpNYXNrQWxwaGE7CiAgICAgICAgIGJyZWFrOwpAQCAt
MzI5LDExICszMjksMTEgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25EZWxheShB
bmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUp
OwotICAgIGFuaW1hdGlvbi0+c2V0RGVsYXkocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGRv
dWJsZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlNlY29uZHM+KCkpOworICAgIENTU1ByaW1pdGl2ZVZh
bHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUp
OworICAgIGFuaW1hdGlvbi0+c2V0RGVsYXkocHJpbWl0aXZlVmFsdWUuY29tcHV0ZVRpbWU8ZG91
YmxlLCBDU1NQcmltaXRpdmVWYWx1ZTo6U2Vjb25kcz4oKSk7CiB9CiAKIHZvaWQgQ1NTVG9TdHls
ZU1hcDo6bWFwQW5pbWF0aW9uRGlyZWN0aW9uKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKQEAgLTM0MywxMSArMzQzLDExIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0
aW9uRGlyZWN0aW9uKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAg
ICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKHZhbHVlKTsKLSAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsK
KyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVl
SUQoKSkgewogICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6CiAgICAgICAgIGxheWVyLT5zZXREaXJl
Y3Rpb24oQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25Ob3JtYWwpOwogICAgICAgICBicmVh
azsKQEAgLTM3MiwxMSArMzcyLDExIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9u
RHVyYXRpb24oQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAg
ICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKHZhbHVlKTsKLSAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKHByaW1pdGl2ZVZhbHVlLT5j
b21wdXRlVGltZTxkb3VibGUsIENTU1ByaW1pdGl2ZVZhbHVlOjpTZWNvbmRzPigpKTsKKyAgICBD
U1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKTsKKyAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKHByaW1pdGl2ZVZhbHVl
LmNvbXB1dGVUaW1lPGRvdWJsZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlNlY29uZHM+KCkpOwogfQog
CiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbkZpbGxNb2RlKEFuaW1hdGlvbiogbGF5
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKQEAgLTM4NiwxMSArMzg2LDExIEBAIHZvaWQgQ1NTVG9TdHls
ZU1hcDo6bWFwQW5pbWF0aW9uRmlsbE1vZGUoQW5pbWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdl
dFZhbHVlSUQoKSkgeworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIHN3aXRjaCAocHJpbWl0aXZl
VmFsdWUuZ2V0VmFsdWVJRCgpKSB7CiAgICAgY2FzZSBDU1NWYWx1ZU5vbmU6CiAgICAgICAgIGxh
eWVyLT5zZXRGaWxsTW9kZShBbmltYXRpb25GaWxsTW9kZU5vbmUpOwogICAgICAgICBicmVhazsK
QEAgLTQxNSwxNCArNDE1LDE0IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uSXRl
cmF0aW9uQ291bnQoQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAg
aWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSh2YWx1ZSk7Ci0gICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFs
dWVJbmZpbml0ZSkKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBpZiAocHJpbWl0aXZlVmFsdWUu
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlSW5maW5pdGUpCiAgICAgICAgIGFuaW1hdGlvbi0+c2V0
SXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uOjpJdGVyYXRpb25Db3VudEluZmluaXRlKTsKICAgICBl
bHNlCi0gICAgICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQocHJpbWl0aXZlVmFsdWUt
PmdldEZsb2F0VmFsdWUoKSk7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQo
cHJpbWl0aXZlVmFsdWUuZ2V0RmxvYXRWYWx1ZSgpKTsKIH0KIAogdm9pZCBDU1NUb1N0eWxlTWFw
OjptYXBBbmltYXRpb25OYW1lKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKQEAg
LTQzMiwxNCArNDMyLDE0IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uTmFtZShB
bmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0g
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKQorICAg
IENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPigqdmFsdWUpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVOb25lKQogICAgICAgICBsYXllci0+c2V0SXNOb25lQW5pbWF0aW9uKHRydWUpOwog
ICAgIGVsc2UKLSAgICAgICAgbGF5ZXItPnNldE5hbWUocHJpbWl0aXZlVmFsdWUtPmdldFN0cmlu
Z1ZhbHVlKCkpOworICAgICAgICBsYXllci0+c2V0TmFtZShwcmltaXRpdmVWYWx1ZS5nZXRTdHJp
bmdWYWx1ZSgpKTsKIH0KIAogdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25QbGF5U3Rh
dGUoQW5pbWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQpAQCAtNDQ5LDExICs0NDksMTEg
QEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25QbGF5U3RhdGUoQW5pbWF0aW9uKiBs
YXllciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYg
KCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIEVBbmltUGxh
eVN0YXRlIHBsYXlTdGF0ZSA9IChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1Zh
bHVlUGF1c2VkKSA/IEFuaW1QbGF5U3RhdGVQYXVzZWQgOiBBbmltUGxheVN0YXRlUGxheWluZzsK
KyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBFQW5pbVBsYXlTdGF0ZSBwbGF5U3RhdGUgPSAocHJp
bWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlUGF1c2VkKSA/IEFuaW1QbGF5U3Rh
dGVQYXVzZWQgOiBBbmltUGxheVN0YXRlUGxheWluZzsKICAgICBsYXllci0+c2V0UGxheVN0YXRl
KHBsYXlTdGF0ZSk7CiB9CiAKQEAgLTQ2NSwxOSArNDY1LDE5IEBAIHZvaWQgQ1NTVG9TdHlsZU1h
cDo6bWFwQW5pbWF0aW9uUHJvcGVydHkoQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZh
bHVlSUQoKSA9PSBDU1NWYWx1ZUFsbCkgeworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRp
dmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGlmIChw
cmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVBbGwpIHsKICAgICAgICAgYW5p
bWF0aW9uLT5zZXRBbmltYXRpb25Nb2RlKEFuaW1hdGlvbjo6QW5pbWF0ZUFsbCk7CiAgICAgICAg
IGFuaW1hdGlvbi0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJbnZhbGlkKTsKLSAgICB9IGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKSB7CisgICAg
fSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKSB7
CiAgICAgICAgIGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uTW9kZShBbmltYXRpb246OkFuaW1hdGVO
b25lKTsKICAgICAgICAgYW5pbWF0aW9uLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUludmFsaWQp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uTW9kZShBbmlt
YXRpb246OkFuaW1hdGVTaW5nbGVQcm9wZXJ0eSk7Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0UHJv
cGVydHkocHJpbWl0aXZlVmFsdWUtPmdldFByb3BlcnR5SUQoKSk7CisgICAgICAgIGFuaW1hdGlv
bi0+c2V0UHJvcGVydHkocHJpbWl0aXZlVmFsdWUuZ2V0UHJvcGVydHlJRCgpKTsKICAgICB9CiB9
CiAKQEAgLTQ4OCw5ICs0ODgsOSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblRp
bWluZ0Z1bmN0aW9uKEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdgogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQo
KSkgeworICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlE
KCkpIHsKICAgICAgICAgY2FzZSBDU1NWYWx1ZUxpbmVhcjoKICAgICAgICAgICAgIGFuaW1hdGlv
bi0+c2V0VGltaW5nRnVuY3Rpb24oTGluZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtNTE4LDIzICs1MTgsMjMgQEAgdm9pZCBDU1NUb1N0eWxlTWFw
OjptYXBBbmltYXRpb25UaW1pbmdGdW5jdGlvbihBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFs
dWUqIHYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICh2YWx1ZS0+aXNDdWJpY0Jl
emllclRpbWluZ0Z1bmN0aW9uVmFsdWUoKSkgewotICAgICAgICBDU1NDdWJpY0JlemllclRpbWlu
Z0Z1bmN0aW9uVmFsdWUqIGN1YmljVGltaW5nRnVuY3Rpb24gPSB0b0NTU0N1YmljQmV6aWVyVGlt
aW5nRnVuY3Rpb25WYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVu
Y3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKGN1YmljVGltaW5nRnVuY3Rp
b24tPngxKCksIGN1YmljVGltaW5nRnVuY3Rpb24tPnkxKCksIGN1YmljVGltaW5nRnVuY3Rpb24t
PngyKCksIGN1YmljVGltaW5nRnVuY3Rpb24tPnkyKCkpKTsKLSAgICB9IGVsc2UgaWYgKHZhbHVl
LT5pc1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZSgpKSB7Ci0gICAgICAgIENTU1N0ZXBzVGltaW5n
RnVuY3Rpb25WYWx1ZSogc3RlcHNUaW1pbmdGdW5jdGlvbiA9IHRvQ1NTU3RlcHNUaW1pbmdGdW5j
dGlvblZhbHVlKHZhbHVlKTsKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihT
dGVwc1RpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoc3RlcHNUaW1pbmdGdW5jdGlvbi0+bnVtYmVyT2ZT
dGVwcygpLCBzdGVwc1RpbWluZ0Z1bmN0aW9uLT5zdGVwQXRTdGFydCgpKSk7CisgICAgaWYgKGlz
PENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICBD
U1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUmIGN1YmljVGltaW5nRnVuY3Rpb24gPSBk
b3duY2FzdDxDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWU+KCp2YWx1ZSk7CisgICAg
ICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
bjo6Y3JlYXRlKGN1YmljVGltaW5nRnVuY3Rpb24ueDEoKSwgY3ViaWNUaW1pbmdGdW5jdGlvbi55
MSgpLCBjdWJpY1RpbWluZ0Z1bmN0aW9uLngyKCksIGN1YmljVGltaW5nRnVuY3Rpb24ueTIoKSkp
OworICAgIH0gZWxzZSBpZiAoaXM8Q1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlPigqdmFsdWUp
KSB7CisgICAgICAgIENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZSYgc3RlcHNUaW1pbmdGdW5j
dGlvbiA9IGRvd25jYXN0PENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZT4oKnZhbHVlKTsKKyAg
ICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihTdGVwc1RpbWluZ0Z1bmN0aW9uOjpj
cmVhdGUoc3RlcHNUaW1pbmdGdW5jdGlvbi5udW1iZXJPZlN0ZXBzKCksIHN0ZXBzVGltaW5nRnVu
Y3Rpb24uc3RlcEF0U3RhcnQoKSkpOwogICAgIH0KIH0KIAogdm9pZCBDU1NUb1N0eWxlTWFwOjpt
YXBOaW5lUGllY2VJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUs
IE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKIHsKICAgICAvLyBJZiB3ZSdyZSBub3QgYSB2YWx1ZSBs
aXN0LCB0aGVuIHdlIGFyZSAibm9uZSIgYW5kIGRvbid0IG5lZWQgdG8gYWx0ZXIgdGhlIGVtcHR5
IGltYWdlIGF0IGFsbC4KLSAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkK
KyAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4odmFsdWUpKQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBSZXRyaWV2ZSB0aGUgYm9yZGVyIGltYWdlIHZhbHVlLgotICAgIENTU1ZhbHVlTGlzdCog
Ym9yZGVySW1hZ2UgPSB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSk7CisgICAgQ1NTVmFsdWVMaXN0JiBi
b3JkZXJJbWFnZSA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKIAogICAgIC8vIFNl
dCB0aGUgaW1hZ2UgKHRoaXMga2lja3Mgb2ZmIHRoZSBsb2FkKS4KICAgICBDU1NQcm9wZXJ0eUlE
IGltYWdlUHJvcGVydHk7CkBAIC01NDUsOCArNTQ1LDggQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjpt
YXBOaW5lUGllY2VJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUs
IE4KICAgICBlbHNlCiAgICAgICAgIGltYWdlUHJvcGVydHkgPSBwcm9wZXJ0eTsKIAotICAgIGZv
ciAodW5zaWduZWQgaSA9IDAgOyBpIDwgYm9yZGVySW1hZ2UtPmxlbmd0aCgpIDsgKytpKSB7Ci0g
ICAgICAgIENTU1ZhbHVlKiBjdXJyZW50ID0gYm9yZGVySW1hZ2UtPml0ZW0oaSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMCA7IGkgPCBib3JkZXJJbWFnZS5sZW5ndGgoKTsgKytpKSB7CisgICAg
ICAgIENTU1ZhbHVlKiBjdXJyZW50ID0gYm9yZGVySW1hZ2UuaXRlbShpKTsKIAogICAgICAgICBp
ZiAoY3VycmVudC0+aXNJbWFnZVZhbHVlKCkgfHwgY3VycmVudC0+aXNJbWFnZUdlbmVyYXRvclZh
bHVlKCkKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKQEAgLTU1NiwxOSArNTU2LDE5IEBAIHZv
aWQgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgQ1NTVmFsdWUqIHZhbHVlLCBOCiAgICAgICAgICAgICBpbWFnZS5zZXRJbWFnZShzdHlsZUlt
YWdlKGltYWdlUHJvcGVydHksIGN1cnJlbnQpKTsKICAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+
aXNCb3JkZXJJbWFnZVNsaWNlVmFsdWUoKSkKICAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdl
U2xpY2UoY3VycmVudCwgaW1hZ2UpOwotICAgICAgICBlbHNlIGlmIChjdXJyZW50LT5pc1ZhbHVl
TGlzdCgpKSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIHNsYXNoTGlzdCA9IHRvQ1NTVmFs
dWVMaXN0KGN1cnJlbnQpOworICAgICAgICBlbHNlIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCpjdXJy
ZW50KSkgeworICAgICAgICAgICAgQ1NTVmFsdWVMaXN0JiBzbGFzaExpc3QgPSBkb3duY2FzdDxD
U1NWYWx1ZUxpc3Q+KCpjdXJyZW50KTsKICAgICAgICAgICAgIC8vIE1hcCBpbiB0aGUgaW1hZ2Ug
c2xpY2VzLgotICAgICAgICAgICAgaWYgKHNsYXNoTGlzdC0+aXRlbSgwKSAmJiBzbGFzaExpc3Qt
Pml0ZW0oMCktPmlzQm9yZGVySW1hZ2VTbGljZVZhbHVlKCkpCi0gICAgICAgICAgICAgICAgbWFw
TmluZVBpZWNlSW1hZ2VTbGljZShzbGFzaExpc3QtPml0ZW0oMCksIGltYWdlKTsKKyAgICAgICAg
ICAgIGlmIChzbGFzaExpc3QuaXRlbSgwKSAmJiBzbGFzaExpc3QuaXRlbSgwKS0+aXNCb3JkZXJJ
bWFnZVNsaWNlVmFsdWUoKSkKKyAgICAgICAgICAgICAgICBtYXBOaW5lUGllY2VJbWFnZVNsaWNl
KHNsYXNoTGlzdC5pdGVtKDApLCBpbWFnZSk7CiAKICAgICAgICAgICAgIC8vIE1hcCBpbiB0aGUg
Ym9yZGVyIHNsaWNlcy4KLSAgICAgICAgICAgIGlmIChzbGFzaExpc3QtPml0ZW0oMSkpCi0gICAg
ICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKG1hcE5pbmVQaWVjZUltYWdlUXVhZChz
bGFzaExpc3QtPml0ZW0oMSkpKTsKKyAgICAgICAgICAgIGlmIChzbGFzaExpc3QuaXRlbSgxKSkK
KyAgICAgICAgICAgICAgICBpbWFnZS5zZXRCb3JkZXJTbGljZXMobWFwTmluZVBpZWNlSW1hZ2VR
dWFkKHNsYXNoTGlzdC5pdGVtKDEpKSk7CiAKICAgICAgICAgICAgIC8vIE1hcCBpbiB0aGUgb3V0
c2V0LgotICAgICAgICAgICAgaWYgKHNsYXNoTGlzdC0+aXRlbSgyKSkKLSAgICAgICAgICAgICAg
ICBpbWFnZS5zZXRPdXRzZXQobWFwTmluZVBpZWNlSW1hZ2VRdWFkKHNsYXNoTGlzdC0+aXRlbSgy
KSkpOworICAgICAgICAgICAgaWYgKHNsYXNoTGlzdC5pdGVtKDIpKQorICAgICAgICAgICAgICAg
IGltYWdlLnNldE91dHNldChtYXBOaW5lUGllY2VJbWFnZVF1YWQoc2xhc2hMaXN0Lml0ZW0oMikp
KTsKICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAg
ICAgICAgICAgIC8vIFNldCB0aGUgYXBwcm9wcmlhdGUgcnVsZXMgZm9yIHN0cmV0Y2gvcm91bmQv
cmVwZWF0IG9mIHRoZSBzbGljZXMuCiAgICAgICAgICAgICBtYXBOaW5lUGllY2VJbWFnZVJlcGVh
dChjdXJyZW50LCBpbWFnZSk7CkBAIC01OTIsMTUgKzU5MiwxNSBAQCB2b2lkIENTU1RvU3R5bGVN
YXA6Om1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2
YWx1ZSwgTgogCiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlU2xpY2UoQ1NT
VmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCiB7Ci0gICAgaWYgKCF2YWx1ZSB8
fCAhdmFsdWUtPmlzQm9yZGVySW1hZ2VTbGljZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NCb3Jk
ZXJJbWFnZVNsaWNlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gUmV0
cmlldmUgdGhlIGJvcmRlciBpbWFnZSB2YWx1ZS4KLSAgICBDU1NCb3JkZXJJbWFnZVNsaWNlVmFs
dWUqIGJvcmRlckltYWdlU2xpY2UgPSB0b0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZSh2YWx1ZSk7
CisgICAgQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlJiBib3JkZXJJbWFnZVNsaWNlID0gZG93bmNh
c3Q8Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlPigqdmFsdWUpOwogCiAgICAgLy8gU2V0IHVwIGEg
bGVuZ3RoIGJveCB0byByZXByZXNlbnQgb3VyIGltYWdlIHNsaWNlcy4KICAgICBMZW5ndGhCb3gg
Ym94OwotICAgIFF1YWQqIHNsaWNlcyA9IGJvcmRlckltYWdlU2xpY2UtPnNsaWNlcygpOworICAg
IFF1YWQqIHNsaWNlcyA9IGJvcmRlckltYWdlU2xpY2Uuc2xpY2VzKCk7CiAgICAgaWYgKHNsaWNl
cy0+dG9wKCktPmlzUGVyY2VudGFnZSgpKQogICAgICAgICBib3gubV90b3AgPSBMZW5ndGgoc2xp
Y2VzLT50b3AoKS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CiAgICAgZWxzZQpAQCAtNjIw
LDIzICs2MjAsMjMgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVNsaWNl
KENTU1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWcKICAgICBpbWFnZS5zZXRJbWFn
ZVNsaWNlcyhib3gpOwogCiAgICAgLy8gU2V0IG91ciBmaWxsIG1vZGUuCi0gICAgaW1hZ2Uuc2V0
RmlsbChib3JkZXJJbWFnZVNsaWNlLT5tX2ZpbGwpOworICAgIGltYWdlLnNldEZpbGwoYm9yZGVy
SW1hZ2VTbGljZS5tX2ZpbGwpOwogfQogCiBMZW5ndGhCb3ggQ1NTVG9TdHlsZU1hcDo6bWFwTmlu
ZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlKiB2YWx1ZSkKIHsKLSAgICBpZiAoIXZhbHVlIHx8ICF2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhbHVlKSkKICAgICAgICAgcmV0dXJuIExlbmd0aEJveCgpOwogCiAgICAgLy8gR2V0IG91ciB6
b29tIHZhbHVlLgogICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEg
PSB1c2VTVkdab29tUnVsZXMoKSA/IG1fcmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpIDogbV9yZXNvbHZlci0+c3Rh
dGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CiAKICAgICAvLyBSZXRyaWV2ZSB0aGUg
cHJpbWl0aXZlIHZhbHVlLgotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBib3JkZXJXaWR0aHMgPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgYm9yZGVy
V2lkdGhzID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAKICAgICAvLyBT
ZXQgdXAgYSBsZW5ndGggYm94IHRvIHJlcHJlc2VudCBvdXIgaW1hZ2Ugc2xpY2VzLgogICAgIExl
bmd0aEJveCBib3g7IC8vIERlZmF1bHRzIHRvICdhdXRvJyBzbyB3ZSBkb24ndCBoYXZlIHRvIGhh
bmRsZSB0aGF0IGV4cGxpY2l0bHkgYmVsb3cuCi0gICAgUXVhZCogc2xpY2VzID0gYm9yZGVyV2lk
dGhzLT5nZXRRdWFkVmFsdWUoKTsKKyAgICBRdWFkKiBzbGljZXMgPSBib3JkZXJXaWR0aHMuZ2V0
UXVhZFZhbHVlKCk7CiAgICAgaWYgKHNsaWNlcy0+dG9wKCktPmlzTnVtYmVyKCkpCiAgICAgICAg
IGJveC5tX3RvcCA9IExlbmd0aChzbGljZXMtPnRvcCgpLT5nZXRJbnRWYWx1ZSgpLCBSZWxhdGl2
ZSk7CiAgICAgZWxzZSBpZiAoc2xpY2VzLT50b3AoKS0+aXNQZXJjZW50YWdlKCkpCkBAIC02NzAs
MTEgKzY3MCwxMSBAQCBMZW5ndGhCb3ggQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VR
dWFkKENTU1ZhbHVlKiB2YWx1ZSkKIAogdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJ
bWFnZVJlcGVhdChDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKIHsKLSAg
ICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7
Ci0gICAgUGFpciogcGFpciA9IHByaW1pdGl2ZVZhbHVlLT5nZXRQYWlyVmFsdWUoKTsKKyAgICBD
U1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKTsKKyAgICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUuZ2V0UGFpclZh
bHVlKCk7CiAgICAgaWYgKCFwYWlyIHx8ICFwYWlyLT5maXJzdCgpIHx8ICFwYWlyLT5zZWNvbmQo
KSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VW5pY29kZVJhbmdlVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VW
YWx1ZS5oCmluZGV4IDU5ZGFjOGU1YzA5NzdiMmM2NTE0YjFkZjI3MDY0MzE2MWRhMjkyM2MuLjA2
YzE3NzQwMDg3NTViNjI1NmNhNDQzMTg0MDYyNWE5Yzg3OTk3MjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oCkBAIC01Nyw4ICs1Nyw4IEBAIHByaXZhdGU6CiAg
ICAgVUNoYXIzMiBtX3RvOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTVW5pY29kZVJh
bmdlVmFsdWUsIGlzVW5pY29kZVJhbmdlVmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NVbmljb2RlUmFuZ2VWYWx1
ZSwgaXNVbmljb2RlUmFuZ2VWYWx1ZSgpKQorCiAjZW5kaWYgLy8gQ1NTVW5pY29kZVJhbmdlVmFs
dWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5jcHAKaW5kZXggYWFjZjY4Njg1M2Q1YjI1YmE1MTA3Nzg1
OTY2MzkzMjA0ZDIwNTRlNi4uZDAyOWVjMTdlZTIzY2IyN2YyYzAwZDI5MGQ3OTMxNTgzZGRlMTFi
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuY3BwCkBAIC05MSw3ICs5MSw3IEBAIHByaXZhdGU6CiAK
IGJvb2wgQ1NTVmFsdWU6OmlzSW1wbGljaXRJbml0aWFsVmFsdWUoKSBjb25zdAogewotICAgIHJl
dHVybiBtX2NsYXNzVHlwZSA9PSBJbml0aWFsQ2xhc3MgJiYgdG9DU1NJbml0aWFsVmFsdWUodGhp
cyktPmlzSW1wbGljaXQoKTsKKyAgICByZXR1cm4gbV9jbGFzc1R5cGUgPT0gSW5pdGlhbENsYXNz
ICYmIGRvd25jYXN0PENTU0luaXRpYWxWYWx1ZT4oKnRoaXMpLmlzSW1wbGljaXQoKTsKIH0KIAog
Q1NTVmFsdWU6OlR5cGUgQ1NTVmFsdWU6OmNzc1ZhbHVlVHlwZSgpIGNvbnN0CkBAIC0xMTIsMTQg
KzExMiwxNCBAQCB2b2lkIENTU1ZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFz
aFNldDxVUkw+JiB1cmxzLCBjb25zdCBTdHlsZVNoZWV0QwogICAgIC8vIFRoaXMgc2hvdWxkIGdl
dCBjYWxsZWQgZm9yIGludGVybmFsIGluc3RhbmNlcyBvbmx5LgogICAgIEFTU0VSVCghaXNDU1NP
TVNhZmUoKSk7CiAKLSAgICBpZiAoaXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICB0b0NTU1By
aW1pdGl2ZVZhbHVlKHRoaXMpLT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBzdHlsZVNo
ZWV0KTsKLSAgICBlbHNlIGlmIChpc1ZhbHVlTGlzdCgpKQotICAgICAgICB0b0NTU1ZhbHVlTGlz
dCh0aGlzKS0+YWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJscywgc3R5bGVTaGVldCk7Ci0gICAg
ZWxzZSBpZiAoY2xhc3NUeXBlKCkgPT0gRm9udEZhY2VTcmNDbGFzcykKLSAgICAgICAgdG9DU1NG
b250RmFjZVNyY1ZhbHVlKHRoaXMpLT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBzdHls
ZVNoZWV0KTsKLSAgICBlbHNlIGlmIChjbGFzc1R5cGUoKSA9PSBSZWZsZWN0Q2xhc3MpCi0gICAg
ICAgIHRvQ1NTUmVmbGVjdFZhbHVlKHRoaXMpLT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxz
LCBzdHlsZVNoZWV0KTsKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0aGlzKSkKKyAg
ICAgICAgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0aGlzKS5hZGRTdWJyZXNvdXJjZVN0
eWxlVVJMcyh1cmxzLCBzdHlsZVNoZWV0KTsKKyAgICBlbHNlIGlmIChpczxDU1NWYWx1ZUxpc3Q+
KCp0aGlzKSkKKyAgICAgICAgZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdGhpcykuYWRkU3VicmVz
b3VyY2VTdHlsZVVSTHModXJscywgc3R5bGVTaGVldCk7CisgICAgZWxzZSBpZiAoaXM8Q1NTRm9u
dEZhY2VTcmNWYWx1ZT4oKnRoaXMpKQorICAgICAgICBkb3duY2FzdDxDU1NGb250RmFjZVNyY1Zh
bHVlPigqdGhpcykuYWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJscywgc3R5bGVTaGVldCk7Cisg
ICAgZWxzZSBpZiAoaXM8Q1NTUmVmbGVjdFZhbHVlPigqdGhpcykpCisgICAgICAgIGRvd25jYXN0
PENTU1JlZmxlY3RWYWx1ZT4oKnRoaXMpLmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKHVybHMsIHN0
eWxlU2hlZXQpOwogfQogCiBib29sIENTU1ZhbHVlOjpoYXNGYWlsZWRPckNhbmNlbGVkU3VicmVz
b3VyY2VzKCkgY29uc3QKQEAgLTEyNywxOSArMTI3LDE5IEBAIGJvb2wgQ1NTVmFsdWU6Omhhc0Zh
aWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoKSBjb25zdAogICAgIC8vIFRoaXMgc2hvdWxkIGdl
dCBjYWxsZWQgZm9yIGludGVybmFsIGluc3RhbmNlcyBvbmx5LgogICAgIEFTU0VSVCghaXNDU1NP
TVNhZmUoKSk7CiAKLSAgICBpZiAoaXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgcmV0dXJuIHRvQ1NT
VmFsdWVMaXN0KHRoaXMpLT5oYXNGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKCk7Ci0gICAg
aWYgKGNsYXNzVHlwZSgpID09IEZvbnRGYWNlU3JjQ2xhc3MpCi0gICAgICAgIHJldHVybiB0b0NT
U0ZvbnRGYWNlU3JjVmFsdWUodGhpcyktPmhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMo
KTsKLSAgICBpZiAoY2xhc3NUeXBlKCkgPT0gSW1hZ2VDbGFzcykKLSAgICAgICAgcmV0dXJuIHRv
Q1NTSW1hZ2VWYWx1ZSh0aGlzKS0+aGFzRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcygpOwot
ICAgIGlmIChjbGFzc1R5cGUoKSA9PSBDcm9zc2ZhZGVDbGFzcykKLSAgICAgICAgcmV0dXJuIHRv
Q1NTQ3Jvc3NmYWRlVmFsdWUodGhpcyktPmhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMo
KTsKLSAgICBpZiAoY2xhc3NUeXBlKCkgPT0gRmlsdGVySW1hZ2VDbGFzcykKLSAgICAgICAgcmV0
dXJuIHRvQ1NTRmlsdGVySW1hZ2VWYWx1ZSh0aGlzKS0+aGFzRmFpbGVkT3JDYW5jZWxlZFN1YnJl
c291cmNlcygpOworICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp0aGlzKSkKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnRoaXMpLmhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJy
ZXNvdXJjZXMoKTsKKyAgICBpZiAoaXM8Q1NTRm9udEZhY2VTcmNWYWx1ZT4oKnRoaXMpKQorICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTRm9udEZhY2VTcmNWYWx1ZT4oKnRoaXMpLmhhc0ZhaWxl
ZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoKTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oKnRo
aXMpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oKnRoaXMpLmhhc0Zh
aWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoKTsKKyAgICBpZiAoaXM8Q1NTQ3Jvc3NmYWRlVmFs
dWU+KCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPigq
dGhpcykuaGFzRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcygpOworICAgIGlmIChpczxDU1NG
aWx0ZXJJbWFnZVZhbHVlPigqdGhpcykpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NGaWx0
ZXJJbWFnZVZhbHVlPigqdGhpcykuaGFzRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcygpOwog
I2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQotICAgIGlmIChjbGFzc1R5cGUoKSA9PSBJbWFnZVNl
dENsYXNzKQotICAgICAgICByZXR1cm4gdG9DU1NJbWFnZVNldFZhbHVlKHRoaXMpLT5oYXNGYWls
ZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKCk7CisgICAgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+
KCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ltYWdlU2V0VmFsdWU+KCp0aGlz
KS5oYXNGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKCk7CiAjZW5kaWYKICAgICByZXR1cm4g
ZmFsc2U7CiB9CkBAIC0yMjksOSArMjI5LDkgQEAgYm9vbCBDU1NWYWx1ZTo6ZXF1YWxzKGNvbnN0
IENTU1ZhbHVlJiBvdGhlcikgY29uc3QKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICht
X2NsYXNzVHlwZSA9PSBWYWx1ZUxpc3RDbGFzcyAmJiBvdGhlci5tX2NsYXNzVHlwZSAhPSBWYWx1
ZUxpc3RDbGFzcykKLSAgICAgICAgcmV0dXJuIHRvQ1NTVmFsdWVMaXN0KHRoaXMpLT5lcXVhbHMo
b3RoZXIpOwotICAgIGVsc2UgaWYgKG1fY2xhc3NUeXBlICE9IFZhbHVlTGlzdENsYXNzICYmIG90
aGVyLm1fY2xhc3NUeXBlID09IFZhbHVlTGlzdENsYXNzKQorICAgIH0gZWxzZSBpZiAoaXM8Q1NT
VmFsdWVMaXN0PigqdGhpcykgJiYgIWlzPENTU1ZhbHVlTGlzdD4ob3RoZXIpKQorICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdGhpcykuZXF1YWxzKG90aGVyKTsKKyAgICBl
bHNlIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqdGhpcykgJiYgaXM8Q1NTVmFsdWVMaXN0PihvdGhl
cikpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDU1NWYWx1ZUxpc3QmPihvdGhl
cikuZXF1YWxzKCp0aGlzKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yNDYsNzEgKzI0Niw3
MSBAQCBTdHJpbmcgQ1NTVmFsdWU6OmNzc1RleHQoKSBjb25zdAogCiAgICAgc3dpdGNoIChjbGFz
c1R5cGUoKSkgewogICAgIGNhc2UgQXNwZWN0UmF0aW9DbGFzczoKLSAgICAgICAgcmV0dXJuIHRv
Q1NTQXNwZWN0UmF0aW9WYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1
cm4gZG93bmNhc3Q8Q1NTQXNwZWN0UmF0aW9WYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsK
ICAgICBjYXNlIEJvcmRlckltYWdlU2xpY2VDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTQm9y
ZGVySW1hZ2VTbGljZVZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVy
biBkb3duY2FzdDxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0
KCk7CiAgICAgY2FzZSBDYW52YXNDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTQ2FudmFzVmFs
dWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0Nh
bnZhc1ZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgQ3Vyc29ySW1hZ2VD
bGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSh0aGlzKS0+Y3VzdG9t
Q1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4o
KnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIEZpbHRlckltYWdlQ2xhc3M6Ci0gICAg
ICAgIHJldHVybiB0b0NTU0ZpbHRlckltYWdlVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KCp0aGlzKS5jdXN0
b21DU1NUZXh0KCk7CiAgICAgY2FzZSBGb250Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0Zv
bnRWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q1NTRm9udFZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgRm9udEZhY2VT
cmNDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTRm9udEZhY2VTcmNWYWx1ZSh0aGlzKS0+Y3Vz
dG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTRm9udEZhY2VTcmNWYWx1
ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIEZvbnRGZWF0dXJlQ2xhc3M6Ci0g
ICAgICAgIHJldHVybiB0b0NTU0ZvbnRGZWF0dXJlVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQo
KTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ZvbnRGZWF0dXJlVmFsdWU+KCp0aGlzKS5j
dXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBGdW5jdGlvbkNsYXNzOgotICAgICAgICByZXR1cm4g
dG9DU1NGdW5jdGlvblZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVy
biBkb3duY2FzdDxDU1NGdW5jdGlvblZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAg
IGNhc2UgTGluZWFyR3JhZGllbnRDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTTGluZWFyR3Jh
ZGllbnRWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNh
c3Q8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBj
YXNlIFJhZGlhbEdyYWRpZW50Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU1JhZGlhbEdyYWRp
ZW50VmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2Fz
ZSBDcm9zc2ZhZGVDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTQ3Jvc3NmYWRlVmFsdWUodGhp
cyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0Nyb3NzZmFk
ZVZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgSW1hZ2VDbGFzczoKLSAg
ICAgICAgcmV0dXJuIHRvQ1NTSW1hZ2VWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQo
KTsKICAgICBjYXNlIEluaGVyaXRlZENsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NJbmhlcml0
ZWRWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q1NTSW5oZXJpdGVkVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBJbml0
aWFsQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0luaXRpYWxWYWx1ZSh0aGlzKS0+Y3VzdG9t
Q1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW5pdGlhbFZhbHVlPigqdGhp
cykuY3VzdG9tQ1NTVGV4dCgpOwogI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCiAgICAgY2Fz
ZSBHcmlkTGluZU5hbWVzQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0dyaWRMaW5lTmFtZXNW
YWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NT
R3JpZExpbmVOYW1lc1ZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgR3Jp
ZFRlbXBsYXRlQXJlYXNDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTR3JpZFRlbXBsYXRlQXJl
YXNWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICNlbmRp
ZgogICAgIGNhc2UgUHJpbWl0aXZlQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU1ByaW1pdGl2
ZVZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIFJlZmxl
Y3RDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTUmVmbGVjdFZhbHVlKHRoaXMpLT5jdXN0b21D
U1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NSZWZsZWN0VmFsdWU+KCp0aGlz
KS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBTaGFkb3dDbGFzczoKLSAgICAgICAgcmV0dXJu
IHRvQ1NTU2hhZG93VmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJu
IGRvd25jYXN0PENTU1NoYWRvd1ZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNh
c2UgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbkNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1ND
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZT4o
KnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIFN0ZXBzVGltaW5nRnVuY3Rpb25DbGFz
czoKLSAgICAgICAgcmV0dXJuIHRvQ1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlKHRoaXMpLT5j
dXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NTdGVwc1RpbWluZ0Z1
bmN0aW9uVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBVbmljb2RlUmFu
Z2VDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTVW5pY29kZVJhbmdlVmFsdWUodGhpcyktPmN1
c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1VuaWNvZGVSYW5nZVZh
bHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgVmFsdWVMaXN0Q2xhc3M6Ci0g
ICAgICAgIHJldHVybiB0b0NTU1ZhbHVlTGlzdCh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdGhpcykuY3VzdG9tQ1NTVGV4dCgp
OwogICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b1dl
YktpdENTU1RyYW5zZm9ybVZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1Rl
eHQoKTsKICAgICBjYXNlIExpbmVCb3hDb250YWluQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NT
U0xpbmVCb3hDb250YWluVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PENTU0xpbmVCb3hDb250YWluVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0
KCk7CiAgICAgY2FzZSBDYWxjdWxhdGlvbkNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NDYWxj
VmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENT
U0NhbGNWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICNpZiBFTkFCTEUoQ1NTX0lNQUdF
X1NFVCkKICAgICBjYXNlIEltYWdlU2V0Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0ltYWdl
U2V0VmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENTU0ltYWdlU2V0VmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAjZW5kaWYKICAgICBj
YXNlIFdlYktpdENTU0ZpbHRlckNsYXNzOgotICAgICAgICByZXR1cm4gdG9XZWJLaXRDU1NGaWx0
ZXJWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
V2ViS2l0Q1NTRmlsdGVyVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBT
VkdDb2xvckNsYXNzOgotICAgICAgICByZXR1cm4gdG9TVkdDb2xvcih0aGlzKS0+Y3VzdG9tQ1NT
VGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHQ29sb3I+KCp0aGlzKS5jdXN0b21D
U1NUZXh0KCk7CiAgICAgY2FzZSBTVkdQYWludENsYXNzOgotICAgICAgICByZXR1cm4gdG9TVkdQ
YWludCh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZH
UGFpbnQ+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTMyNywxMDEgKzMyNywxMDEgQEAgdm9p
ZCBDU1NWYWx1ZTo6ZGVzdHJveSgpCiAKICAgICBzd2l0Y2ggKGNsYXNzVHlwZSgpKSB7CiAgICAg
Y2FzZSBBc3BlY3RSYXRpb0NsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NBc3BlY3RSYXRpb1Zh
bHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTQXNwZWN0UmF0aW9WYWx1ZT4o
dGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEJvcmRlckltYWdlU2xpY2VDbGFzczoK
LSAgICAgICAgZGVsZXRlIHRvQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlKHRoaXMpOworICAgICAg
ICBkZWxldGUgZG93bmNhc3Q8Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlPih0aGlzKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgQ2FudmFzQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0Nh
bnZhc1ZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTQ2FudmFzVmFsdWU+
KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDdXJzb3JJbWFnZUNsYXNzOgotICAg
ICAgICBkZWxldGUgdG9DU1NDdXJzb3JJbWFnZVZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUg
ZG93bmNhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIEZvbnRDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTRm9udFZhbHVlKHRoaXMpOwor
ICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTRm9udFZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgRm9udEZhY2VTcmNDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTRm9u
dEZhY2VTcmNWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENTU0ZvbnRGYWNl
U3JjVmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBGb250RmVhdHVyZUNs
YXNzOgotICAgICAgICBkZWxldGUgdG9DU1NGb250RmVhdHVyZVZhbHVlKHRoaXMpOworICAgICAg
ICBkZWxldGUgZG93bmNhc3Q8Q1NTRm9udEZlYXR1cmVWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIEZ1bmN0aW9uQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0Z1bmN0
aW9uVmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NGdW5jdGlvblZhbHVl
Pih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgTGluZWFyR3JhZGllbnRDbGFzczoK
LSAgICAgICAgZGVsZXRlIHRvQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSh0aGlzKTsKKyAgICAgICAg
ZGVsZXRlIGRvd25jYXN0PENTU0xpbmVhckdyYWRpZW50VmFsdWU+KHRoaXMpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBSYWRpYWxHcmFkaWVudENsYXNzOgotICAgICAgICBkZWxldGUgdG9D
U1NSYWRpYWxHcmFkaWVudFZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NT
UmFkaWFsR3JhZGllbnRWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENy
b3NzZmFkZUNsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NDcm9zc2ZhZGVWYWx1ZSh0aGlzKTsK
KyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPih0aGlzKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgSW1hZ2VDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTSW1h
Z2VWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KHRo
aXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJbmhlcml0ZWRDbGFzczoKLSAgICAgICAg
ZGVsZXRlIHRvQ1NTSW5oZXJpdGVkVmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2Fz
dDxDU1NJbmhlcml0ZWRWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIElu
aXRpYWxDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTSW5pdGlhbFZhbHVlKHRoaXMpOworICAg
ICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTSW5pdGlhbFZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0
dXJuOwogI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCiAgICAgY2FzZSBHcmlkTGluZU5hbWVz
Q2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0dyaWRMaW5lTmFtZXNWYWx1ZSh0aGlzKTsKKyAg
ICAgICAgZGVsZXRlIGRvd25jYXN0PENTU0dyaWRMaW5lTmFtZXNWYWx1ZT4odGhpcyk7CiAgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIEdyaWRUZW1wbGF0ZUFyZWFzQ2xhc3M6Ci0gICAgICAgIGRl
bGV0ZSB0b0NTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBk
b3duY2FzdDxDU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJu
OwogI2VuZGlmCiAgICAgY2FzZSBQcmltaXRpdmVDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NT
UHJpbWl0aXZlVmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFJlZmxlY3RDbGFzczoK
LSAgICAgICAgZGVsZXRlIHRvQ1NTUmVmbGVjdFZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUg
ZG93bmNhc3Q8Q1NTUmVmbGVjdFZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgU2hhZG93Q2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU1NoYWRvd1ZhbHVlKHRoaXMpOwor
ICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTU2hhZG93VmFsdWU+KHRoaXMpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uQ2xhc3M6Ci0gICAgICAg
IGRlbGV0ZSB0b0NTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSh0aGlzKTsKKyAgICAg
ICAgZGVsZXRlIGRvd25jYXN0PENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZT4odGhp
cyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFN0ZXBzVGltaW5nRnVuY3Rpb25DbGFzczoK
LSAgICAgICAgZGVsZXRlIHRvQ1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlKHRoaXMpOworICAg
ICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlPih0aGlzKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVW5pY29kZVJhbmdlQ2xhc3M6Ci0gICAgICAgIGRl
bGV0ZSB0b0NTU1VuaWNvZGVSYW5nZVZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNh
c3Q8Q1NTVW5pY29kZVJhbmdlVmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBWYWx1ZUxpc3RDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTVmFsdWVMaXN0KHRoaXMpOwor
ICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih0aGlzKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0
b1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBMaW5lQm94Q29udGFpbkNsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NMaW5lQm94Q29udGFp
blZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTTGluZUJveENvbnRhaW5W
YWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENhbGN1bGF0aW9uQ2xhc3M6
Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0NhbGNWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRv
d25jYXN0PENTU0NhbGNWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICNpZiBFTkFCTEUo
Q1NTX0lNQUdFX1NFVCkKICAgICBjYXNlIEltYWdlU2V0Q2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0
b0NTU0ltYWdlU2V0VmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NJbWFn
ZVNldFZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgY2FzZSBGaWx0
ZXJJbWFnZUNsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NGaWx0ZXJJbWFnZVZhbHVlKHRoaXMp
OworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odGhpcyk7CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIFdlYktpdENTU0ZpbHRlckNsYXNzOgotICAgICAgICBk
ZWxldGUgdG9XZWJLaXRDU1NGaWx0ZXJWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25j
YXN0PFdlYktpdENTU0ZpbHRlclZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgU1ZHQ29sb3JDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvU1ZHQ29sb3IodGhpcyk7CisgICAg
ICAgIGRlbGV0ZSBkb3duY2FzdDxTVkdDb2xvcj4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIFNWR1BhaW50Q2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b1NWR1BhaW50KHRoaXMpOwor
ICAgICAgICBkZWxldGUgZG93bmNhc3Q8U1ZHUGFpbnQ+KHRoaXMpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDMxLDI0ICs0MzEsMjQgQEAg
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTVmFsdWU6OmNsb25lRm9yQ1NTT00oKSBjb25zdAogewog
ICAgIHN3aXRjaCAoY2xhc3NUeXBlKCkpIHsKICAgICBjYXNlIFByaW1pdGl2ZUNsYXNzOgotICAg
ICAgICByZXR1cm4gdG9DU1NQcmltaXRpdmVWYWx1ZSh0aGlzKS0+Y2xvbmVGb3JDU1NPTSgpOwor
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0aGlzKS5jbG9uZUZv
ckNTU09NKCk7CiAgICAgY2FzZSBWYWx1ZUxpc3RDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NT
VmFsdWVMaXN0KHRoaXMpLT5jbG9uZUZvckNTU09NKCk7CisgICAgICAgIHJldHVybiBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KCp0aGlzKS5jbG9uZUZvckNTU09NKCk7CiAgICAgY2FzZSBJbWFnZUNs
YXNzOgogICAgIGNhc2UgQ3Vyc29ySW1hZ2VDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTSW1h
Z2VWYWx1ZSh0aGlzKS0+Y2xvbmVGb3JDU1NPTSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q1NTSW1hZ2VWYWx1ZT4oKnRoaXMpLmNsb25lRm9yQ1NTT00oKTsKICAgICBjYXNlIFdlYktpdENT
U0ZpbHRlckNsYXNzOgotICAgICAgICByZXR1cm4gdG9XZWJLaXRDU1NGaWx0ZXJWYWx1ZSh0aGlz
KS0+Y2xvbmVGb3JDU1NPTSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8V2ViS2l0Q1NTRmls
dGVyVmFsdWU+KCp0aGlzKS5jbG9uZUZvckNTU09NKCk7CiAgICAgY2FzZSBXZWJLaXRDU1NUcmFu
c2Zvcm1DbGFzczoKLSAgICAgICAgcmV0dXJuIHRvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUodGhp
cyktPmNsb25lRm9yQ1NTT00oKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlPigqdGhpcykuY2xvbmVGb3JDU1NPTSgpOwogI2lmIEVOQUJMRShDU1NfSU1B
R0VfU0VUKQogICAgIGNhc2UgSW1hZ2VTZXRDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTSW1h
Z2VTZXRWYWx1ZSh0aGlzKS0+Y2xvbmVGb3JDU1NPTSgpOworICAgICAgICByZXR1cm4gZG93bmNh
c3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4oKnRoaXMpLmNsb25lRm9yQ1NTT00oKTsKICNlbmRpZgogICAg
IGNhc2UgU1ZHQ29sb3JDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvU1ZHQ29sb3IodGhpcyktPmNs
b25lRm9yQ1NTT00oKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFNWR0NvbG9yPigqdGhpcyku
Y2xvbmVGb3JDU1NPTSgpOwogICAgIGNhc2UgU1ZHUGFpbnRDbGFzczoKLSAgICAgICAgcmV0dXJu
IHRvU1ZHUGFpbnQodGhpcyktPmNsb25lRm9yQ1NTT00oKTsKKyAgICAgICAgcmV0dXJuIGRvd25j
YXN0PFNWR1BhaW50PigqdGhpcykuY2xvbmVGb3JDU1NPTSgpOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIEFTU0VSVCghaXNTdWJ0eXBlRXhwb3NlZFRvQ1NTT00oKSk7CiAgICAgICAgIHJldHVybiBU
ZXh0Q2xvbmVDU1NWYWx1ZTo6Y3JlYXRlKGNsYXNzVHlwZSgpLCBjc3NUZXh0KCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTVmFsdWUuaAppbmRleCA4MDQxM2Y4ODIwYTdmNzZkMmJjNGVlMjNiMjhhMWNjMjQ0NGZjMzcx
Li4wZTgxNmMyMmQzYmEyY2JhYjVmMDRiN2FlMjg2ZTBlM2Y5ZDViYmVhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VmFsdWUuaApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yNDks
OSArMjUwLDExIEBAIGlubGluZSBib29sIGNvbXBhcmVDU1NWYWx1ZShjb25zdCBSZWY8Q1NTVmFs
dWVUeXBlPiYgZmlyc3QsIGNvbnN0IFJlZjxDU1NWYWx1ZVR5CiAgICAgcmV0dXJuIGZpcnN0Lmdl
dCgpLmVxdWFscyhzZWNvbmQuZ2V0KCkpOwogfQogCi0jZGVmaW5lIENTU19WQUxVRV9UWVBFX0NB
U1RTKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCi0gICAgVFlQRV9DQVNUU19CQVNFKFRv
VmFsdWVUeXBlTmFtZSwgQ1NTVmFsdWUsIHZhbHVlLCB2YWx1ZS0+cHJlZGljYXRlLCB2YWx1ZS5w
cmVkaWNhdGUpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorI2RlZmluZSBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0NTU19WQUxVRShUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAg
ICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6Q1NTVmFsdWUmIHZhbHVlKSB7IHJl
dHVybiB2YWx1ZS5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQor
CiAjZW5kaWYgLy8gQ1NTVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhbHVlTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCmluZGV4IDAx
Mjc5MjRiZTRmMWRiZWQ3MjFjZTg2MGFhMjI2ZjQ2ZWRlYzFkZmMuLmYwYWZjM2YyYjcwYTJiOWFj
ZGU0ZDI2NDY1YTViMzc5ZWI3NGQ1YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NWYWx1ZUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKQEAg
LTgxLDggKzgxLDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmPENTU1ZhbHVlPiwgND4gbV92
YWx1ZXM7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NWYWx1ZUxpc3QsIGlzVmFsdWVM
aXN0KCkpCi0KIGlubGluZSB2b2lkIENTU1ZhbHVlTGlzdDo6YXBwZW5kKFBhc3NSZWY8Q1NTVmFs
dWU+IHZhbHVlKQogewogICAgIG1fdmFsdWVzLmFwcGVuZChXVEY6Om1vdmUodmFsdWUpKTsKQEAg
LTk3LDcgKzk1LDExIEBAIGlubGluZSB2b2lkIENTU1ZhbHVlTGlzdDo6cHJlcGVuZChQYXNzUmVm
PENTU1ZhbHVlPiB2YWx1ZSkKIC8vIFBsZWFzZSB0YWtlIGNhcmUgbm90IHRvIHBhc3MgdGhlc2Ug
YXJvdW5kIGFzIHRoZXkgZG8gaG9sZCBvbnRvIGEgcmF3IHBvaW50ZXIuCiBjbGFzcyBDU1NWYWx1
ZUxpc3RJbnNwZWN0b3IgewogcHVibGljOgotICAgIENTU1ZhbHVlTGlzdEluc3BlY3RvcihDU1NW
YWx1ZSogdmFsdWUpIDogbV9saXN0KCh2YWx1ZSAmJiB2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgPyB0
b0NTU1ZhbHVlTGlzdCh2YWx1ZSkgOiAwKSB7IH0KKyAgICBDU1NWYWx1ZUxpc3RJbnNwZWN0b3Io
Q1NTVmFsdWUqIHZhbHVlKQorICAgICAgICA6IG1fbGlzdChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVl
KSA/IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpIDogbnVsbHB0cikKKyAgICB7CisgICAg
fQorCiAgICAgQ1NTVmFsdWUqIGl0ZW0oc2l6ZV90IGluZGV4KSBjb25zdCB7IEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgbGVuZ3RoKCkpOyByZXR1cm4gbV9saXN0LT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKGluZGV4KTsgfQogICAgIENTU1ZhbHVlKiBmaXJzdCgpIGNv
bnN0IHsgcmV0dXJuIGl0ZW0oMCk7IH0KICAgICBDU1NWYWx1ZSogc2Vjb25kKCkgY29uc3QgeyBy
ZXR1cm4gaXRlbSgxKTsgfQpAQCAtMTIzLDQgKzEyNSw2IEBAIHByaXZhdGU6CiB9OwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NW
YWx1ZUxpc3QsIGlzVmFsdWVMaXN0KCkpCisKICNlbmRpZiAvLyBDU1NWYWx1ZUxpc3RfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwCmluZGV4IGIyZmY3
YjFhZmU2OGI2NzMxMGFjMzA1MzFkZWRkNmU4OTExM2NiZTYuLjUyOWVhZDdmYmE3ODVmNDMzYjg0
ZDA1OGFmYmYwMjU1ODk4MDMyOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXBy
ZWNhdGVkU3R5bGVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRl
ZFN0eWxlQnVpbGRlci5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDU1NBc3BlY3RS
YXRpb1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgogI2luY2x1ZGUg
IkNTU0N1cnNvckltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NJbWFnZVNldFZhbHVlLmgiCiAj
aW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1
ZU1hcHBpbmdzLmgiCiAjaW5jbHVkZSAiQ1NTVG9TdHlsZU1hcC5oIgpAQCAtMTQ5LDggKzE1MCw4
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUs
IFNldHRlclR5cGUgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQog
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKHZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCAqdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSkpOworICAgICAgICBpZiAoaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCisgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSk7CiAg
ICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpA
QCAtMTY1LDE0ICsxNjYsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJl
bmRlclN0eWxlKiBzdHlsZSwgTnVtYmVyVHlwZSB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5j
dGlvbikodmFsdWUpOyB9CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewot
ICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSh2YWx1ZSk7Ci0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IGlk
TWFwc1RvTWludXNPbmUpCisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1
ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IGlkTWFwc1RvTWludXNPbmUpCiAgICAgICAgICAg
ICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAtMSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVl
LT5nZXRWYWx1ZTxOdW1iZXJUeXBlPihDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwor
ICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgcHJpbWl0aXZlVmFs
dWUuZ2V0VmFsdWU8TnVtYmVyVHlwZT4oQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsK
ICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7
CkBAIC0yMTMsMTYgKzIxNCwxNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBhcHBseVZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkK
KyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5n
ZXRWYWx1ZUlEKCkgPT0gYXV0b0lkZW50aXR5KQorICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYg
cHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAg
ICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBhdXRvSWRlbnRpdHkpCiAg
ICAgICAgICAgICBzZXRBdXRvKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpOwogICAgICAgICBlbHNl
IGlmICh2YWx1ZVR5cGUgPT0gTnVtYmVyKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNv
bHZlci0+c3R5bGUoKSwgKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgZWxzZSBpZiAo
dmFsdWVUeXBlID09IENvbXB1dGVMZW5ndGgpCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdHlsZVJl
c29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSkpOworICAgICAgICAg
ICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUuY29tcHV0
ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoKSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxl
cigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUlu
aXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CkBAIC0yNTIsMTkgKzI1MywxOSBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICgh
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAKLSAgICAgICAgaWYgKFJlY3QqIHJlY3QgPSBwcmltaXRp
dmVWYWx1ZS0+Z2V0UmVjdFZhbHVlKCkpIHsKKyAgICAgICAgaWYgKFJlY3QqIHJlY3QgPSBwcmlt
aXRpdmVWYWx1ZS5nZXRSZWN0VmFsdWUoKSkgewogICAgICAgICAgICAgTGVuZ3RoIHRvcCA9IGNv
bnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0LT50b3AoKSk7CiAgICAgICAgICAgICBM
ZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+cmlnaHQo
KSk7CiAgICAgICAgICAgICBMZW5ndGggYm90dG9tID0gY29udmVydFRvTGVuZ3RoKHN0eWxlUmVz
b2x2ZXIsIHJlY3QtPmJvdHRvbSgpKTsKICAgICAgICAgICAgIExlbmd0aCBsZWZ0ID0gY29udmVy
dFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3QtPmxlZnQoKSk7CiAgICAgICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDbGlwKHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCk7CiAg
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKHRydWUpOwotICAg
ICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVB
dXRvKSB7CisgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09
IENTU1ZhbHVlQXV0bykgewogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0
Q2xpcChMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSk7CiAgICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKGZhbHNlKTsKICAgICAgICAgfQpA
QCAtMjk4LDE3ICsyOTksMTcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICAgICAgaWYgKGluaGVyaXRD
b2xvckZyb21QYXJlbnQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1
ZUN1cnJlbnRjb2xvcikKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgICAgIGlmIChpbmhl
cml0Q29sb3JGcm9tUGFyZW50ICYmIHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NW
YWx1ZUN1cnJlbnRjb2xvcikKICAgICAgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5
SUQsIHN0eWxlUmVzb2x2ZXIpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmIChzdHls
ZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSkKLSAgICAgICAgICAgICAg
ICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVy
LT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1ZSkpOworICAgICAgICAgICAg
ICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2
ZXItPmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKCZwcmltaXRpdmVWYWx1ZSkpOwogICAgICAgICAg
ICAgaWYgKHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSkK
LSAgICAgICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnZpc2l0ZWRMaW5rU2V0
dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHByaW1p
dGl2ZVZhbHVlLCAvKiBmb3JWaXNpdGVkTGluayAqLyB0cnVlKSk7CisgICAgICAgICAgICAgICAg
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPip2aXNpdGVkTGlua1NldHRlckZ1bmN0aW9uKShzdHls
ZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZSgmcHJpbWl0aXZlVmFsdWUsIC8qIGZv
clZpc2l0ZWRMaW5rICovIHRydWUpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzU5LDQ2ICsz
NjAsNDYgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBz
dHlsZSwgTGVuZ3RoIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKShXVEY6Om1vdmUo
dmFsdWUpKTsgfQogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAg
ICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFs
dWUpOwotICAgICAgICBpZiAobm9uZUVuYWJsZWQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVl
SUQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1p
dGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgICAg
IGlmIChub25lRW5hYmxlZCAmJiBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFs
dWVOb25lKSB7CiAgICAgICAgICAgICBpZiAobm9uZVVuZGVmaW5lZCkKICAgICAgICAgICAgICAg
ICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoVW5kZWZpbmVkKSk7CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgTGVuZ3RoKCkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChsZWdhY3lJbnRyaW5z
aWNFbmFibGVkKSB7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQo
KSA9PSBDU1NWYWx1ZUludHJpbnNpYykKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5n
ZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVJbnRyaW5zaWMpCiAgICAgICAgICAgICAgICAgc2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKEludHJpbnNpYykpOwotICAgICAgICAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU1pbklu
dHJpbnNpYykKKyAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQo
KSA9PSBDU1NWYWx1ZU1pbkludHJpbnNpYykKICAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoTWluSW50cmluc2ljKSk7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKGludHJpbnNpY0VuYWJsZWQpIHsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVW
YWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Via2l0TWluQ29udGVudCkKKyAgICAgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRNaW5D
b250ZW50KQogICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCks
IExlbmd0aChNaW5Db250ZW50KSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Via2l0TWF4Q29udGVudCkKKyAgICAgICAgICAg
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdlYmtpdE1h
eENvbnRlbnQpCiAgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgTGVuZ3RoKE1heENvbnRlbnQpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRGaWxsQXZhaWxhYmxlKQorICAgICAg
ICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Vi
a2l0RmlsbEF2YWlsYWJsZSkKICAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCBMZW5ndGgoRmlsbEF2YWlsYWJsZSkpOwotICAgICAgICAgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdlYmtpdEZpdENvbnRlbnQp
CisgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NT
VmFsdWVXZWJraXRGaXRDb250ZW50KQogICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksIExlbmd0aChGaXRDb250ZW50KSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhID0gc3R5bGVSZXNvbHZl
ci0+dXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCkgPwogICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpv
b20oMS4wZikKICAgICAgICAgICAgIDogc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0
aENvbnZlcnNpb25EYXRhKCk7Ci0gICAgICAgIGlmIChhdXRvRW5hYmxlZCAmJiBwcmltaXRpdmVW
YWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykKKyAgICAgICAgaWYgKGF1dG9FbmFi
bGVkICYmIHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pCiAgICAg
ICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoKSk7Ci0gICAg
ICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7Ci0gICAgICAgICAgICBM
ZW5ndGggbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252
ZXJzaW9uRGF0YSk7Ci0gICAgICAgICAgICBsZW5ndGguc2V0SGFzUXVpcmsocHJpbWl0aXZlVmFs
dWUtPmlzUXVpcmtWYWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNM
ZW5ndGgoKSkgeworICAgICAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLmNv
bXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJzaW9uRGF0YSk7CisgICAgICAgICAgICBsZW5ndGgu
c2V0SGFzUXVpcmsocHJpbWl0aXZlVmFsdWUuaXNRdWlya1ZhbHVlKCkpOwogICAgICAgICAgICAg
c2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgbGVuZ3RoKTsKLSAgICAgICAgfSBlbHNl
IGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgICAgICBzZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJs
ZVZhbHVlKCksIFBlcmNlbnQpKTsKLSAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlz
Q2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgICAgICBzZXRWYWx1ZShz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1
ZSgpLT5jcmVhdGVDYWxjdWxhdGlvblZhbHVlKGNvbnZlcnNpb25EYXRhKSkpOworICAgICAgICB9
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpKQorICAgICAgICAgICAgc2V0
VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLmdldERv
dWJsZVZhbHVlKCksIFBlcmNlbnQpKTsKKyAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUu
aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKKyAgICAgICAgICAgIHNldFZhbHVl
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1ZS5jc3NDYWxjVmFs
dWUoKS0+Y3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShjb252ZXJzaW9uRGF0YSkpKTsKICAgICB9CiAK
ICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtNDE1LDE0ICs0
MTYsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBz
dHlsZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlv
bikodmFsdWUpOyB9CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAg
ICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFs
dWUpOwotICAgICAgICBpZiAoKGlkZW50QmVoYXZpb3IgPT0gTWFwTm9uZVRvTnVsbCAmJiBwcmlt
aXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHx8
IChpZGVudEJlaGF2aW9yID09IE1hcEF1dG9Ub051bGwgJiYgcHJpbWl0aXZlVmFsdWUtPmdldFZh
bHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pKQorICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICAg
ICAgaWYgKChpZGVudEJlaGF2aW9yID09IE1hcE5vbmVUb051bGwgJiYgcHJpbWl0aXZlVmFsdWUu
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKKyAgICAgICAgICAgIHx8IChpZGVudEJlaGF2
aW9yID09IE1hcEF1dG9Ub051bGwgJiYgcHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENT
U1ZhbHVlQXV0bykpCiAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCBudWxsQXRvbSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKKyAgICAg
ICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLmdl
dFN0cmluZ1ZhbHVlKCkpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0
ZUhhbmRsZXIoKQogICAgIHsKQEAgLTQzNywxMSArNDM4LDExIEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIExlbmd0aFNpemUgdmFsdWUpIHsg
KHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKFdURjo6bW92ZSh2YWx1ZSkpOyB9CiAgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIFBhaXIqIHBh
aXIgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UGFpclZhbHVlKCk7CisgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpOworICAgICAgICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUuZ2V0UGFpclZhbHVlKCk7
CiAgICAgICAgIGlmICghcGFpciB8fCAhcGFpci0+Zmlyc3QoKSB8fCAhcGFpci0+c2Vjb25kKCkp
CiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTU1MiwxMyArNTUzLDEzIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIEZpbGxMYXllciogY2hpbGQgPSAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOwogICAgICAgICBGaWxsTGF5ZXIqIHByZXZpb3VzQ2hp
bGQgPSBudWxscHRyOwotICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkKKyAgICAgICAg
aWYgKGlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKQogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQot
ICAgICAgICAmJiAhdmFsdWUtPmlzSW1hZ2VTZXRWYWx1ZSgpCisgICAgICAgICYmICFpczxDU1NJ
bWFnZVNldFZhbHVlPigqdmFsdWUpCiAjZW5kaWYKICAgICAgICAgKSB7CiAgICAgICAgICAgICAv
LyBXYWxrIGVhY2ggdmFsdWUgYW5kIHB1dCBpdCBpbnRvIGEgbGF5ZXIsIGNyZWF0aW5nIG5ldyBs
YXllcnMgYXMgbmVlZGVkLgotICAgICAgICAgICAgQ1NTVmFsdWVMaXN0JiB2YWx1ZUxpc3QgPSB0
b0NTU1ZhbHVlTGlzdCgqdmFsdWUpOworICAgICAgICAgICAgQ1NTVmFsdWVMaXN0JiB2YWx1ZUxp
c3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVMaXN0Lmxlbmd0aCgpOyBpKyspIHsKICAgICAgICAgICAg
ICAgICBpZiAoIWNoaWxkKSB7CiAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzQ2hpbGQtPnNl
dE5leHQoc3RkOjptYWtlX3VuaXF1ZTxGaWxsTGF5ZXI+KGZpbGxMYXllclR5cGUpKTsKQEAgLTU5
NSwxMiArNTk2LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIC8vIG5vdGU6IENTU1Byb3BlcnR5TGV0dGVyL1dvcmRTcGFjaW5nIHJp
Z2h0IG5vdyBzZXRzIHRvIHplcm8gaWYgaXQncyBub3QgYSBwcmltaXRpdmUgdmFsdWUgZm9yIHNv
bWUgcmVhc29uLi4uCi0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAg
ICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NT
U1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1p
dGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAKLSAgICAg
ICAgQ1NTVmFsdWVJRCBpZGVudCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCk7CisgICAg
ICAgIENTU1ZhbHVlSUQgaWRlbnQgPSBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCk7CiAgICAg
ICAgIFQgbGVuZ3RoOwogICAgICAgICBpZiAobm9ybWFsRW5hYmxlZCAmJiBpZGVudCA9PSBDU1NW
YWx1ZU5vcm1hbCkgewogICAgICAgICAgICAgbGVuZ3RoID0gMDsKQEAgLTYxNSw5ICs2MTYsOSBA
QCBwdWJsaWM6CiAKICAgICAgICAgICAgIC8vIEFueSBvcmlnaW5hbCByZXN1bHQgdGhhdCB3YXMg
Pj0gMSBzaG91bGQgbm90IGJlIGFsbG93ZWQgdG8gZmFsbCBiZWxvdyAxLgogICAgICAgICAgICAg
Ly8gVGhpcyBrZWVwcyBib3JkZXIgbGluZXMgZnJvbSB2YW5pc2hpbmcuCi0gICAgICAgICAgICBs
ZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihjb252ZXJzaW9uRGF0YSk7
CisgICAgICAgICAgICBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPFQ+KGNv
bnZlcnNpb25EYXRhKTsKICAgICAgICAgICAgIGlmIChjb252ZXJzaW9uRGF0YS56b29tKCkgPCAx
LjBmICYmIGxlbmd0aCA8IDEuMCkgewotICAgICAgICAgICAgICAgIFQgb3JpZ2luYWxMZW5ndGgg
PSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihjb252ZXJzaW9uRGF0YS5jb3B5V2l0
aEFkanVzdGVkWm9vbSgxLjBmKSk7CisgICAgICAgICAgICAgICAgVCBvcmlnaW5hbExlbmd0aCA9
IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8VD4oY29udmVyc2lvbkRhdGEuY29weVdpdGhB
ZGp1c3RlZFpvb20oMS4wZikpOwogICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbExlbmd0aCA+
PSAxLjApCiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IDEuMDsKICAgICAgICAgICAgIH0K
QEAgLTY1NCwxMSArNjU1LDExIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQor
ICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NT
U1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1p
dGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAg
IEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVz
Y3JpcHRpb24oKTsKLSAgICAgICAgKGZvbnREZXNjcmlwdGlvbi4qc2V0dGVyRnVuY3Rpb24pKCpw
cmltaXRpdmVWYWx1ZSk7CisgICAgICAgIChmb250RGVzY3JpcHRpb24uKnNldHRlckZ1bmN0aW9u
KShwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KIApAQCAtNjk3LDEwICs2OTgsMTAgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBp
ZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4o
KnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBhdXRvJiB2YWx1ZUxpc3Qg
PSB0b0NTU1ZhbHVlTGlzdCgqdmFsdWUpOworICAgICAgICBhdXRvJiB2YWx1ZUxpc3QgPSBkb3du
Y2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CiAKICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZv
bnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigp
OwogICAgICAgICAvLyBCZWZvcmUgbWFwcGluZyBpbiBhIG5ldyBmb250LWZhbWlseSBwcm9wZXJ0
eSwgd2Ugc2hvdWxkIHJlc2V0IHRoZSBnZW5lcmljIGZhbWlseS4KQEAgLTcxMiwxNCArNzEzLDE0
IEBAIHB1YmxpYzoKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVMaXN0
Lmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gdmFsdWVMaXN0
Lml0ZW0oaSk7Ci0gICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAg
ICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBjb250ZW50VmFs
dWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGl0ZW0pOworICAgICAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUmIGNvbnRlbnRWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSk7
CiAgICAgICAgICAgICBBdG9taWNTdHJpbmcgZmFjZTsKLSAgICAgICAgICAgIGlmIChjb250ZW50
VmFsdWUtPmlzU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgZmFjZSA9IGNvbnRlbnRWYWx1ZS0+
Z2V0U3RyaW5nVmFsdWUoKTsKKyAgICAgICAgICAgIGlmIChjb250ZW50VmFsdWUuaXNTdHJpbmco
KSkKKyAgICAgICAgICAgICAgICBmYWNlID0gY29udGVudFZhbHVlLmdldFN0cmluZ1ZhbHVlKCk7
CiAgICAgICAgICAgICBlbHNlIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBzdHlsZVJlc29sdmVy
LT5kb2N1bWVudCgpLnNldHRpbmdzKCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbnRl
bnRWYWx1ZS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChjb250ZW50
VmFsdWUuZ2V0VmFsdWVJRCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtp
dEJvZHk6CiAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBzZXR0aW5ncy0+c3RhbmRhcmRGb250
RmFtaWx5KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtODQwLDEwICs4NDEsMTAg
QEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsK
LSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWlz
PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFs
dWUodmFsdWUpOworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKIAogICAgICAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZSgwKTsKQEAg
LTg1Niw3ICs4NTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBwYXJlbnRJc0Fic29sdXRlU2l6
ZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmlzQWJz
b2x1dGVTaXplKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoQ1NTVmFsdWVJRCBpZGVudCA9
IHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICAgICAgaWYgKENTU1ZhbHVlSUQg
aWRlbnQgPSBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgICAgIC8vIEtl
eXdvcmRzIGFyZSBiZWluZyB1c2VkLgogICAgICAgICAgICAgc3dpdGNoIChpZGVudCkgewogICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZVh4U21hbGw6CkBAIC04ODYsMTUgKzg4NywxNCBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZShwYXJl
bnRJc0Fic29sdXRlU2l6ZSAmJiAoaWRlbnQgPT0gQ1NTVmFsdWVMYXJnZXIgfHwgaWRlbnQgPT0g
Q1NTVmFsdWVTbWFsbGVyIHx8IGlkZW50ID09IENTU1ZhbHVlV2Via2l0UnVieVRleHQpKTsKICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRl
U2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHx8ICEocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpIHx8IHBy
aW1pdGl2ZVZhbHVlLT5pc0ZvbnRSZWxhdGl2ZUxlbmd0aCgpKSk7Ci0gICAgICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgICAgICBzaXplID0gcHJp
bWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1l
bnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLnJlbmRlclZpZXcoKSwgMS4wZiwg
dHJ1ZSkpOwotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0YXRlKCkuc2V0Rm9udFNp
emVIYXNWaWV3cG9ydFVuaXRzKHByaW1pdGl2ZVZhbHVlLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxl
bmd0aCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2Vu
dGFnZSgpKQotICAgICAgICAgICAgICAgIHNpemUgPSAocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0
VmFsdWUoKSAqIHBhcmVudFNpemUpIC8gMTAwLjBmOwotICAgICAgICAgICAgZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpIHsKLSAgICAg
ICAgICAgICAgICBSZWY8Q2FsY3VsYXRpb25WYWx1ZT4gY2FsY3VsYXRpb25WYWx1ZSB7IHByaW1p
dGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+Y3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShzdHlsZVJl
c29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVz
dGVkWm9vbSgxLjBmKSkgfTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29s
dXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZSB8fCAhKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2Vu
dGFnZSgpIHx8IHByaW1pdGl2ZVZhbHVlLmlzRm9udFJlbGF0aXZlTGVuZ3RoKCkpKTsKKyAgICAg
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAg
c2l6ZSA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+
cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLnJlbmRlclZpZXco
KSwgMS4wZiwgdHJ1ZSkpOworICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0YXRlKCku
c2V0Rm9udFNpemVIYXNWaWV3cG9ydFVuaXRzKHByaW1pdGl2ZVZhbHVlLmlzVmlld3BvcnRQZXJj
ZW50YWdlTGVuZ3RoKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5p
c1BlcmNlbnRhZ2UoKSkKKyAgICAgICAgICAgICAgICBzaXplID0gKHByaW1pdGl2ZVZhbHVlLmdl
dEZsb2F0VmFsdWUoKSAqIHBhcmVudFNpemUpIC8gMTAwLjBmOworICAgICAgICAgICAgZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUuaXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkgewor
ICAgICAgICAgICAgICAgIFJlZjxDYWxjdWxhdGlvblZhbHVlPiBjYWxjdWxhdGlvblZhbHVlIHsg
cHJpbWl0aXZlVmFsdWUuY3NzQ2FsY1ZhbHVlKCktPmNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUoc3R5
bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhB
ZGp1c3RlZFpvb20oMS4wZikpIH07CiAgICAgICAgICAgICAgICAgc2l6ZSA9IGNhbGN1bGF0aW9u
VmFsdWUtPmV2YWx1YXRlKHBhcmVudFNpemUpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtOTE5LDExICs5MTksMTEgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0
eUZvbnRXZWlnaHQgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBp
ZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2
ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24o
KTsKLSAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpKSB7CisgICAg
ICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpKSB7CiAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVJbnZhbGlkOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTkzNCw3ICs5MzQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KGZvbnREZXNjcmlwdGlvbi5saWdodGVyV2VpZ2h0KCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0V2VpZ2h0KCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0V2VpZ2h0KHByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgfQogICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAg
ICB9CkBAIC05NzYsMTMgKzk3NiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIEZvbnREZXNjcmlwdGlv
bjo6TGlnYXR1cmVzU3RhdGUgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2Ny
aXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZTsKICAgICAgICAgRm9udERlc2NyaXB0aW9uOjpM
aWdhdHVyZXNTdGF0ZSBoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRpb246
Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOwogCi0gICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3Qo
KSkgewotICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3QgPSB0b0NTU1ZhbHVlTGlz
dCh2YWx1ZSk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlTGlzdC0+
bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gdmFsdWVM
aXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwotICAgICAgICAgICAgICAgIEFTU0VSVChp
dGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc1By
aW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0b0NTU1ByaW1p
dGl2ZVZhbHVlKGl0ZW0pLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICAgICAgaWYgKGlzPENTU1ZhbHVl
TGlzdD4oKnZhbHVlKSkgeworICAgICAgICAgICAgQ1NTVmFsdWVMaXN0JiB2YWx1ZUxpc3QgPSBk
b3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHZhbHVlTGlzdC5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgQ1NT
VmFsdWUqIGl0ZW0gPSB2YWx1ZUxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKSkgeworICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSkuZ2V0
VmFsdWVJRCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb0NvbW1vbkxp
Z2F0dXJlczoKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbkxpZ2F0dXJlc1N0YXRlID0g
Rm9udERlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xMDA5LDEwICsxMDA4LDggQEAgcHVibGljOgogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpOwotICAgICAgICAgICAgQVNTRVJUKHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFs
dWUpLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpOwotICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpOwogI2VuZGlmCiAKICAgICAgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNj
cmlwdGlvbigpOwpAQCAtMTE1OSw5ICsxMTU2LDkgQEAgcHVibGljOgogICAgIH0KICAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGJvb2wgc2V0Q291bnRlcklu
Y3JlbWVudFRvTm9uZSA9IGNvdW50ZXJCZWhhdmlvciA9PSBJbmNyZW1lbnQgJiYgdmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+Z2V0VmFsdWVJ
RCgpID09IENTU1ZhbHVlTm9uZTsKKyAgICAgICAgYm9vbCBzZXRDb3VudGVySW5jcmVtZW50VG9O
b25lID0gY291bnRlckJlaGF2aW9yID09IEluY3JlbWVudCAmJiBpczxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1
ZUlEKCkgPT0gQ1NTVmFsdWVOb25lOwogCi0gICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0
KCkgJiYgIXNldENvdW50ZXJJbmNyZW1lbnRUb05vbmUpCisgICAgICAgIGlmICghaXM8Q1NTVmFs
dWVMaXN0PigqdmFsdWUpICYmICFzZXRDb3VudGVySW5jcmVtZW50VG9Ob25lKQogICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgIENvdW50ZXJEaXJlY3RpdmVNYXAmIG1hcCA9IHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7CkBAIC0xMTc3LDE0ICsx
MTc0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHNldENvdW50ZXJJbmNyZW1lbnRUb05vbmUp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBDU1NWYWx1ZUxpc3QqIGxp
c3QgPSB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSk7Ci0gICAgICAgIGludCBsZW5ndGggPSBsaXN0ID8g
bGlzdC0+bGVuZ3RoKCkgOiAwOworICAgICAgICBDU1NWYWx1ZUxpc3QmIGxpc3QgPSBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CisgICAgICAgIGludCBsZW5ndGggPSBsaXN0Lmxlbmd0
aCgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAg
ICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhp
KTsKLSAgICAgICAgICAgIGlmICghY3VyclZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAg
ICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gbGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KGkpOworICAgICAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmN1cnJWYWx1ZSkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIFBhaXIqIHBhaXIgPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKGN1cnJWYWx1ZSktPmdldFBhaXJWYWx1ZSgpOworICAgICAgICAg
ICAgUGFpciogcGFpciA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqY3VyclZhbHVlKS5n
ZXRQYWlyVmFsdWUoKTsKICAgICAgICAgICAgIGlmICghcGFpciB8fCAhcGFpci0+Zmlyc3QoKSB8
fCAhcGFpci0+c2Vjb25kKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTEyMTks
MjcgKzEyMTYsMjcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgIHsKICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7
Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewotICAgICAgICAgICAgQ1NTVmFs
dWVMaXN0KiBsaXN0ID0gdG9DU1NWYWx1ZUxpc3QodmFsdWUpOwotICAgICAgICAgICAgaW50IGxl
biA9IGxpc3QtPmxlbmd0aCgpOworICAgICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUp
KSB7CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIGxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxp
c3Q+KCp2YWx1ZSk7CisgICAgICAgICAgICBpbnQgbGVuZ3RoID0gbGlzdC5sZW5ndGgoKTsKICAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcihDdXJzb3JBdXRvKTsK
LSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzQ3Vyc29ySW1hZ2VWYWx1ZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIENTU0N1cnNvckltYWdlVmFsdWUqIGltYWdlID0gdG9DU1NDdXJzb3JJbWFn
ZVZhbHVlKGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPnVwZGF0ZUlmU1ZH
Q3Vyc29ySXNVc2VkKHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKSkpIC8vIEVsZW1lbnRzIHdpdGgg
U1ZHIGN1cnNvcnMgYXJlIG5vdCBhbGxvd2VkIHRvIHNoYXJlIHN0eWxlLgorICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIENTU1Zh
bHVlKiBpdGVtID0gbGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAgICAg
ICAgIGlmIChpczxDU1NDdXJzb3JJbWFnZVZhbHVlPigqaXRlbSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSYgaW1hZ2UgPSBkb3duY2FzdDxDU1NDdXJzb3JJbWFn
ZVZhbHVlPigqaXRlbSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS51cGRhdGVJZlNW
R0N1cnNvcklzVXNlZChzdHlsZVJlc29sdmVyLT5lbGVtZW50KCkpKSAvLyBFbGVtZW50cyB3aXRo
IFNWRyBjdXJzb3JzIGFyZSBub3QgYWxsb3dlZCB0byBzaGFyZSBzdHlsZS4KICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFVuaXF1ZSgpOwotICAgICAg
ICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5hZGRDdXJzb3Ioc3R5bGVSZXNv
bHZlci0+c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUN1cnNvciwgaW1hZ2UpLCBpbWFnZS0+aG90U3Bv
dCgpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUo
KSkgewotICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFs
dWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzVmFsdWVJRCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmFkZEN1cnNvcihzdHlsZVJlc29s
dmVyLT5zdHlsZUltYWdlKENTU1Byb3BlcnR5Q3Vyc29yLCAmaW1hZ2UpLCBpbWFnZS5ob3RTcG90
KCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCpp
dGVtKSkgeworICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZl
VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pOworICAgICAgICAgICAg
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNWYWx1ZUlEKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDdXJzb3IocHJpbWl0aXZlVmFsdWUp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICAgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNWYWx1ZUlEKCkgJiYgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+Y3Vyc29yKCkgIT0gRUN1cnNvcigqcHJpbWl0aXZlVmFsdWUpKQotICAgICAgICAgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOwor
ICAgICAgICB9IGVsc2UgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSB7CisgICAg
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5p
c1ZhbHVlSUQoKSAmJiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5jdXJzb3IoKSAhPSBFQ3Vyc29y
KHByaW1pdGl2ZVZhbHVlKSkKKyAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRDdXJzb3IocHJpbWl0aXZlVmFsdWUpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMjUw
LDE0ICsxMjQ3LDE0IEBAIGNsYXNzIEFwcGx5UHJvcGVydHlUZXh0QWxpZ24gewogcHVibGljOgog
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVl
PigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgICAg
ICBBU1NFUlQocHJpbWl0aXZlVmFsdWUtPmlzVmFsdWVJRCgpKTsKKyAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSk7CisgICAgICAgIEFTU0VSVChwcmltaXRpdmVWYWx1ZS5pc1ZhbHVlSUQoKSk7CiAKLSAg
ICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgIT0gQ1NTVmFsdWVXZWJraXRN
YXRjaFBhcmVudCkKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRB
bGlnbigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFs
dWVJRCgpICE9IENTU1ZhbHVlV2Via2l0TWF0Y2hQYXJlbnQpCisgICAgICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0QWxpZ24ocHJpbWl0aXZlVmFsdWUpOwogICAgICAgICBl
bHNlIGlmIChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBUQVNU
QVJUKQogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEFsaWduKHN0
eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IExF
RlQgOiBSSUdIVCk7CiAgICAgICAgIGVsc2UgaWYgKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxl
KCktPnRleHRBbGlnbigpID09IFRBRU5EKQpAQCAtMTI3OSw4ICsxMjc2LDcgQEAgcHVibGljOgog
ICAgICAgICBUZXh0RGVjb3JhdGlvbiB0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RGVjb3Jh
dGlvbigpOwogICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkodmFsdWUpOyBpLmhh
c01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gaS52
YWx1ZSgpOwotICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXRl
bS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgICAgIHQgfD0gKnRvQ1NTUHJpbWl0aXZl
VmFsdWUoaXRlbSk7CisgICAgICAgICAgICB0IHw9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqaXRlbSk7CiAgICAgICAgIH0KICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0
VGV4dERlY29yYXRpb24odCk7CiAgICAgfQpAQCAtMTMyNCwxNCArMTMyMCwxNCBAQCBjbGFzcyBB
cHBseVByb3BlcnR5VGV4dERlY29yYXRpb25Ta2lwIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RGVj
b3JhdGlvblNraXAodmFsdWVUb0RlY29yYXRpb25Ta2lwKCp0b0NTU1ByaW1pdGl2ZVZhbHVlKHZh
bHVlKSkpOworICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsKKyAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHREZWNvcmF0aW9uU2tpcCh2
YWx1ZVRvRGVjb3JhdGlvblNraXAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIFRleHREZWNvcmF0
aW9uU2tpcCBza2lwID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RGVjb3JhdGlvblNraXAoKTsK
ICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpKHZhbHVlKTsgaS5oYXNNb3JlKCk7
IGkuYWR2YW5jZSgpKQotICAgICAgICAgICAgc2tpcCB8PSB2YWx1ZVRvRGVjb3JhdGlvblNraXAo
KnRvQ1NTUHJpbWl0aXZlVmFsdWUoaS52YWx1ZSgpKSk7CisgICAgICAgICAgICBza2lwIHw9IHZh
bHVlVG9EZWNvcmF0aW9uU2tpcChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmkudmFsdWUo
KSkpOwogICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RGVjb3JhdGlvblNr
aXAoc2tpcCk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxl
cigpCkBAIC0xMzQ1LDEwICsxMzQxLDEwIEBAIGNsYXNzIEFwcGx5UHJvcGVydHlNYXJxdWVlSW5j
cmVtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7
Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFp
czxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKCp2YWx1ZSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogICAgICAgICBMZW5ndGggbWFy
cXVlZUxlbmd0aChVbmRlZmluZWQpOwogICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLmdl
dFZhbHVlSUQoKSkgewogICAgICAgICBjYXNlIENTU1ZhbHVlU21hbGw6CkBAIC0xMzgwLDE0ICsx
Mzc2LDE0IEBAIGNsYXNzIEFwcGx5UHJvcGVydHlNYXJxdWVlUmVwZXRpdGlvbiB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlSW5maW5pdGUp
CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0
VmFsdWVJRCgpID09IENTU1ZhbHVlSW5maW5pdGUpCiAgICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZv
cmV2ZXIuCi0gICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKQotICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmlt
aXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLmlzTnVtYmVyKCkpCisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRN
YXJxdWVlTG9vcENvdW50KHByaW1pdGl2ZVZhbHVlLmdldEludFZhbHVlKCkpOwogICAgIH0KICAg
ICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTE0MDAs
MTEgKzEzOTYsMTEgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eU1hcnF1ZWVTcGVlZCB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAg
ICAgIGlmIChDU1NWYWx1ZUlEIGlkZW50ID0gcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSkg
eworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgaWYgKENTU1ZhbHVlSUQgaWRlbnQg
PSBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAoaWRl
bnQpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbG93OgogICAgICAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZCg1MDApOyAvLyA1MDAgbXNlYy4K
QEAgLTE0MTgsMTAgKzE0MTQsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS0+aXNUaW1lKCkpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGludCwgQ1NT
UHJpbWl0aXZlVmFsdWU6Ok1pbGxpc2Vjb25kcz4oKSk7Ci0gICAgICAgIGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLT5pc051bWJlcigpKSAvLyBGb3Igc2Nyb2xsYW1vdW50IHN1cHBvcnQuCi0gICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZl
VmFsdWUtPmdldEludFZhbHVlKCkpOworICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LmlzVGltZSgpKQorICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFycXVl
ZVNwZWVkKHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVUaW1lPGludCwgQ1NTUHJpbWl0aXZlVmFsdWU6
Ok1pbGxpc2Vjb25kcz4oKSk7CisgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTnVt
YmVyKCkpIC8vIEZvciBzY3JvbGxhbW91bnQgc3VwcG9ydC4KKyAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS5nZXRJbnRWYWx1
ZSgpKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkK
ICAgICB7CkBAIC0xNDM1LDggKzE0MzEsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICAvLyBUaGlzIGlzIHRydWUgaWYgdmFsdWUgaXMg
J2F1dG8nIG9yICdhbHBoYWJldGljJy4KLSAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZh
bHVlKCkpIHsKLSAgICAgICAgICAgIFRleHRVbmRlcmxpbmVQb3NpdGlvbiB0ID0gKnRvQ1NTUHJp
bWl0aXZlVmFsdWUodmFsdWUpOworICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSkpIHsKKyAgICAgICAgICAgIFRleHRVbmRlcmxpbmVQb3NpdGlvbiB0ID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRUZXh0VW5kZXJsaW5lUG9zaXRpb24odCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KQEAgLTE0NDQsOCArMTQ0MCw3IEBAIHB1YmxpYzoKICAgICAgICAgdW5zaWdu
ZWQgdCA9IDA7CiAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSh2YWx1ZSk7IGku
aGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewogICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBp
LnZhbHVlKCk7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihp
dGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICAgICAgVGV4dFVuZGVybGluZVBvc2l0
aW9uIHQyID0gKnRvQ1NTUHJpbWl0aXZlVmFsdWUoaXRlbSk7CisgICAgICAgICAgICBUZXh0VW5k
ZXJsaW5lUG9zaXRpb24gdDIgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pOwog
ICAgICAgICAgICAgdCB8PSB0MjsKICAgICAgICAgfQogICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRUZXh0VW5kZXJsaW5lUG9zaXRpb24oc3RhdGljX2Nhc3Q8VGV4dFVuZGVybGlu
ZVBvc2l0aW9uPih0KSk7CkBAIC0xNDYxLDIyICsxNDU2LDIyIEBAIGNsYXNzIEFwcGx5UHJvcGVy
dHlMaW5lSGVpZ2h0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAg
aWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1p
dGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZh
bHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgIExlbmd0
aCBsaW5lSGVpZ2h0OwogCi0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgp
ID09IENTU1ZhbHVlTm9ybWFsKQorICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJ
RCgpID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICAgICAgbGluZUhlaWdodCA9IFJlbmRlclN0
eWxlOjppbml0aWFsTGluZUhlaWdodCgpOwotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS0+aXNMZW5ndGgoKSkgewotICAgICAgICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVl
LT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0
Wm9vbUZhY3Rvcigqc3R5bGVSZXNvbHZlcikpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2
ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkgeworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS5pc0xlbmd0aCgpKQorICAgICAgICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLmNv
bXB1dGVMZW5ndGg8TGVuZ3RoPihjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29t
RmFjdG9yKCpzdHlsZVJlc29sdmVyKSk7CisgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LmlzUGVyY2VudGFnZSgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogcGVyY2VudGFnZSBzaG91
bGQgbm90IGJlIHJlc3RyaWN0ZWQgdG8gYW4gaW50ZWdlciBoZXJlLgotICAgICAgICAgICAgbGlu
ZUhlaWdodCA9IExlbmd0aCgoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y29tcHV0ZWRGb250U2l6
ZSgpICogcHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpIC8gMTAwLCBGaXhlZCk7Ci0gICAg
ICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAg
IGxpbmVIZWlnaHQgPSBMZW5ndGgoKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmNvbXB1dGVkRm9u
dFNpemUoKSAqIHByaW1pdGl2ZVZhbHVlLmdldEludFZhbHVlKCkpIC8gMTAwLCBGaXhlZCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNOdW1iZXIoKSkgewogICAgICAgICAg
ICAgLy8gRklYTUU6IG51bWJlciBhbmQgcGVyY2VudGFnZSB2YWx1ZXMgc2hvdWxkIHByb2R1Y2Ug
dGhlIHNhbWUgdHlwZSBvZiBMZW5ndGggKGllLiBGaXhlZCBvciBQZXJjZW50KS4KLSAgICAgICAg
ICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCkg
KiAxMDAuMCwgUGVyY2VudCk7CisgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKHByaW1p
dGl2ZVZhbHVlLmdldERvdWJsZVZhbHVlKCkgKiAxMDAuMCwgUGVyY2VudCk7CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRMaW5lSGVpZ2h0KGxpbmVIZWlnaHQpOwpAQCAtMTQ5NCwyNyArMTQ4OSwyNyBAQCBjbGFz
cyBBcHBseVByb3BlcnR5TGluZUhlaWdodEZvcklPU1RleHRBdXRvc2l6aW5nIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgIExlbmd0aCBsaW5lSGVpZ2h0OwogCi0gICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKQorICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKQog
ICAgICAgICAgICAgbGluZUhlaWdodCA9IFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgp
OwotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewotICAgICAg
ICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4o
Y3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3Rvcigqc3R5bGVSZXNvbHZl
cikpOworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7CisgICAg
ICAgICAgICBsaW5lSGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+
KGNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoKnN0eWxlUmVzb2x2
ZXIpKTsKICAgICAgICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT50ZXh0U2l6ZUFk
anVzdCgpLmlzUGVyY2VudGFnZSgpKQogICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5n
dGgobGluZUhlaWdodC52YWx1ZSgpICogc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+dGV4dFNpemVB
ZGp1c3QoKS5tdWx0aXBsaWVyKCksIEZpeGVkKTsKLSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRp
dmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS5pc1BlcmNlbnRhZ2UoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IHBlcmNlbnRhZ2Ug
c2hvdWxkIG5vdCBiZSByZXN0cmljdGVkIHRvIGFuIGludGVnZXIgaGVyZS4KLSAgICAgICAgICAg
IGxpbmVIZWlnaHQgPSBMZW5ndGgoKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnRTaXplKCkg
KiBwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSkgLyAxMDAsIEZpeGVkKTsKLSAgICAgICAg
fSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgeworICAgICAgICAgICAgbGlu
ZUhlaWdodCA9IExlbmd0aCgoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udFNpemUoKSAqIHBy
aW1pdGl2ZVZhbHVlLmdldEludFZhbHVlKCkpIC8gMTAwLCBGaXhlZCk7CisgICAgICAgIH0gZWxz
ZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6
IG51bWJlciBhbmQgcGVyY2VudGFnZSB2YWx1ZXMgc2hvdWxkIHByb2R1Y2UgdGhlIHNhbWUgdHlw
ZSBvZiBMZW5ndGggKGllLiBGaXhlZCBvciBQZXJjZW50KS4KICAgICAgICAgICAgIGlmIChzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT50ZXh0U2l6ZUFkanVzdCgpLmlzUGVyY2VudGFnZSgpKQotICAg
ICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJs
ZVZhbHVlKCkgKiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT50ZXh0U2l6ZUFkanVzdCgpLm11bHRp
cGxpZXIoKSAqIDEwMC4wLCBQZXJjZW50KTsKKyAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0ID0g
TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLmdldERvdWJsZVZhbHVlKCkgKiBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT50ZXh0U2l6ZUFkanVzdCgpLm11bHRpcGxpZXIoKSAqIDEwMC4wLCBQZXJjZW50KTsK
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKHBy
aW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpICogMTAwLjAsIFBlcmNlbnQpOworICAgICAg
ICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUuZ2V0RG91YmxlVmFs
dWUoKSAqIDEwMC4wLCBQZXJjZW50KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldExpbmVIZWlnaHQobGluZUhl
aWdodCk7CkBAIC0xNTQ0LDIwICsxNTM5LDIwIEBAIGNsYXNzIEFwcGx5UHJvcGVydHlXb3JkU3Bh
Y2luZyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewot
ICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSh2YWx1ZSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogICAgICAgICBMZW5ndGggd29yZFNw
YWNpbmc7CiAKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NT
VmFsdWVOb3JtYWwpCisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVOb3JtYWwpCiAgICAgICAgICAgICB3b3JkU3BhY2luZyA9IFJlbmRlclN0eWxlOjpp
bml0aWFsV29yZFNwYWNpbmcoKTsKLSAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlz
TGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIHdvcmRTcGFjaW5nID0gcHJpbWl0aXZlVmFsdWUtPmNv
bXB1dGVMZW5ndGg8TGVuZ3RoPihjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29t
RmFjdG9yKCpzdHlsZVJlc29sdmVyKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUtPmlzUGVyY2VudGFnZSgpKQotICAgICAgICAgICAgd29yZFNwYWNpbmcgPSBMZW5ndGgocHJp
bWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwotICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHdvcmRTcGFjaW5nID0g
TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBGaXhlZCk7CisgICAgICAg
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHdvcmRT
cGFjaW5nID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNzc3RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoKnN0eWxlUmVzb2x2ZXIpKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSkKKyAgICAgICAgICAg
IHdvcmRTcGFjaW5nID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLmdldERvdWJsZVZhbHVlKCksIFBl
cmNlbnQpOworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpKQorICAg
ICAgICAgICAgd29yZFNwYWNpbmcgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUuZ2V0RG91YmxlVmFs
dWUoKSwgRml4ZWQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFdvcmRTcGFjaW5nKHdvcmRTcGFjaW5nKTsKQEAg
LTE2NjcsMjEgKzE2NjIsMjEgQEAgcHVibGljOgogICAgICAgICBzd2l0Y2ggKGluc3BlY3Rvci5s
ZW5ndGgoKSkgewogICAgICAgICBjYXNlIDI6IHsKICAgICAgICAgICAgIC8vIDxsZW5ndGg+ezJ9
IHwgPHBhZ2Utc2l6ZT4gPG9yaWVudGF0aW9uPgotICAgICAgICAgICAgaWYgKCFpbnNwZWN0b3Iu
Zmlyc3QoKS0+aXNQcmltaXRpdmVWYWx1ZSgpIHx8ICFpbnNwZWN0b3Iuc2Vjb25kKCktPmlzUHJp
bWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCpp
bnNwZWN0b3IuZmlyc3QoKSkgfHwgIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaW5zcGVjdG9yLnNl
Y29uZCgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogZmlyc3QgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGluc3BlY3Rvci5maXJzdCgpKTsK
LSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKGluc3BlY3Rvci5zZWNvbmQoKSk7Ci0gICAgICAgICAgICBpZiAoZmlyc3QtPmlzTGVuZ3Ro
KCkpIHsKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBmaXJzdCA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqaW5zcGVjdG9yLmZpcnN0KCkpOworICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUmIHNlY29uZCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaW5zcGVj
dG9yLnNlY29uZCgpKTsKKyAgICAgICAgICAgIGlmIChmaXJzdC5pc0xlbmd0aCgpKSB7CiAgICAg
ICAgICAgICAgICAgLy8gPGxlbmd0aD57Mn0KLSAgICAgICAgICAgICAgICBpZiAoIXNlY29uZC0+
aXNMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBpZiAoIXNlY29uZC5pc0xlbmd0aCgpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YSA9IHN0eWxlUmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpOwotICAgICAg
ICAgICAgICAgIHdpZHRoID0gZmlyc3QtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJzaW9u
RGF0YSk7Ci0gICAgICAgICAgICAgICAgaGVpZ2h0ID0gc2Vjb25kLT5jb21wdXRlTGVuZ3RoPExl
bmd0aD4oY29udmVyc2lvbkRhdGEpOworICAgICAgICAgICAgICAgIHdpZHRoID0gZmlyc3QuY29t
cHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAgICAgICAgICBoZWln
aHQgPSBzZWNvbmQuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gPHBhZ2Utc2l6ZT4gPG9yaWVudGF0
aW9uPgogICAgICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBvcmRlciBpcyBndWFyYW50ZWVkLiBT
ZWUgQ1NTUGFyc2VyOjpwYXJzZVNpemVQYXJhbWV0ZXIuCi0gICAgICAgICAgICAgICAgaWYgKCFn
ZXRQYWdlU2l6ZUZyb21OYW1lKGZpcnN0LCBzZWNvbmQsIHdpZHRoLCBoZWlnaHQpKQorICAgICAg
ICAgICAgICAgIGlmICghZ2V0UGFnZVNpemVGcm9tTmFtZSgmZmlyc3QsICZzZWNvbmQsIHdpZHRo
LCBoZWlnaHQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfUkVTT0xWRUQ7CkBAIC0xNjg5LDE1
ICsxNjg0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICBjYXNlIDE6IHsKICAgICAg
ICAgICAgIC8vIDxsZW5ndGg+IHwgYXV0byB8IDxwYWdlLXNpemU+IHwgWyBwb3J0cmFpdCB8IGxh
bmRzY2FwZV0KLSAgICAgICAgICAgIGlmICghaW5zcGVjdG9yLmZpcnN0KCktPmlzUHJpbWl0aXZl
VmFsdWUoKSkKKyAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppbnNwZWN0
b3IuZmlyc3QoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZShpbnNwZWN0
b3IuZmlyc3QoKSk7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkp
IHsKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaW5zcGVjdG9yLmZpcnN0KCkpOworICAgICAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICAvLyA8bGVu
Z3RoPgogICAgICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsK
LSAgICAgICAgICAgICAgICB3aWR0aCA9IGhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRl
TGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNp
b25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpOworICAgICAgICAgICAgICAgIHdp
ZHRoID0gaGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxl
UmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRq
dXN0ZWRab29tKDEuMGYpKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
c3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgICAgICAgICAgICAg
c3dpdGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgICAgICAgICBj
YXNlIDA6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBjYXNl
IENTU1ZhbHVlQXV0bzoKQEAgLTE3MTIsNyArMTcwNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAvLyA8cGFnZS1zaXplPgogICAgICAg
ICAgICAgICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfUkVTT0xWRUQ7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghZ2V0UGFnZVNpemVGcm9tTmFtZShwcmltaXRpdmVWYWx1ZSwgMCwg
d2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghZ2V0UGFnZVNpemVGcm9t
TmFtZSgmcHJpbWl0aXZlVmFsdWUsIG51bGxwdHIsIHdpZHRoLCBoZWlnaHQpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
QEAgLTE3NDUsNDUgKzE3NDAsNDUgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKLSAg
ICAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHRvQ1NTVmFsdWVMaXN0KHZhbHVlKTsKLSAg
ICAgICAgICAgIEFTU0VSVChsaXN0LT5sZW5ndGgoKSA9PSAyKTsKLSAgICAgICAgICAgIGlmIChs
aXN0LT5sZW5ndGgoKSAhPSAyKQorICAgICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUp
KSB7CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIGxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxp
c3Q+KCp2YWx1ZSk7CisgICAgICAgICAgICBBU1NFUlQobGlzdC5sZW5ndGgoKSA9PSAyKTsKKyAg
ICAgICAgICAgIGlmIChsaXN0Lmxlbmd0aCgpICE9IDIpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI7ICsraSkgewotICAgICAg
ICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhp
KTsKLSAgICAgICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAg
ICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhp
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSkpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZShpdGVtKTsKLSAgICAgICAgICAg
ICAgICBpZiAodmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUZpbGxlZCB8fCB2YWx1ZS0+
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlT3BlbikKLSAgICAgICAgICAgICAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbCgqdmFsdWUpOworICAgICAgICAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqaXRlbSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmdldFZhbHVlSUQoKSA9PSBD
U1NWYWx1ZUZpbGxlZCB8fCB2YWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVPcGVuKQorICAg
ICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNG
aWxsKHZhbHVlKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoKnZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFy
ayh2YWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
dG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBw
cmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogCi0g
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNTdHJpbmcoKSkgeworICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUuaXNTdHJpbmcoKSkgewogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChUZXh0RW1waGFzaXNGaWxsRmlsbGVkKTsKICAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVt
cGhhc2lzTWFya0N1c3RvbSk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5z
ZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgp
KTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1
c3RvbU1hcmsocHJpbWl0aXZlVmFsdWUuZ2V0U3RyaW5nVmFsdWUoKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRU
ZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKTsKIAotICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUZpbGxlZCB8fCBwcmltaXRpdmVWYWx1ZS0+
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlT3BlbikgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbCgqcHJpbWl0aXZlVmFsdWUpOworICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlRmlsbGVkIHx8IHBy
aW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU9wZW4pIHsKKyAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwocHJpbWl0aXZlVmFs
dWUpOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lz
TWFyayhUZXh0RW1waGFzaXNNYXJrQXV0byk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNp
c0ZpbGxGaWxsZWQpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4
dEVtcGhhc2lzTWFyaygqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTE4MTUsMTQgKzE4MTAsMTQgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eVRl
eHRFbXBoYXNpc1Bvc2l0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0g
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNQb3NpdGlv
bih2YWx1ZVRvRW1waGFzaXNQb3NpdGlvbigqdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSkpKTsK
KyAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSB7CisgICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNQb3NpdGlvbih2YWx1ZVRv
RW1waGFzaXNQb3NpdGlvbihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgVGV4dEVtcGhhc2lzUG9z
aXRpb24gcG9zaXRpb24gPSAwOwogICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGko
dmFsdWUpOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpCi0gICAgICAgICAgICBwb3NpdGlvbiB8
PSB2YWx1ZVRvRW1waGFzaXNQb3NpdGlvbigqdG9DU1NQcmltaXRpdmVWYWx1ZShpLnZhbHVlKCkp
KTsKKyAgICAgICAgICAgIHBvc2l0aW9uIHw9IHZhbHVlVG9FbXBoYXNpc1Bvc2l0aW9uKGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaS52YWx1ZSgpKSk7CiAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc1Bvc2l0aW9uKHBvc2l0aW9uKTsKICAgICB9CiAg
ICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTE5MzUsMjMgKzE5
MzAsMjMgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eVJlc2l6ZSB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpOwogCi0gICAgICAgIEVSZXNpemUgciA9IFJFU0laRV9OT05FOwotICAgICAgICBzd2l0
Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICAgICAgRVJlc2l6ZSByZXNp
emUgPSBSRVNJWkVfTk9ORTsKKyAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1
ZUlEKCkpIHsKICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBj
YXNlIENTU1ZhbHVlQXV0bzoKICAgICAgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBz
dHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLnNldHRpbmdzKCkpCi0gICAgICAgICAgICAgICAgciA9
IHNldHRpbmdzLT50ZXh0QXJlYXNBcmVSZXNpemFibGUoKSA/IFJFU0laRV9CT1RIIDogUkVTSVpF
X05PTkU7CisgICAgICAgICAgICAgICAgcmVzaXplID0gc2V0dGluZ3MtPnRleHRBcmVhc0FyZVJl
c2l6YWJsZSgpID8gUkVTSVpFX0JPVEggOiBSRVNJWkVfTk9ORTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgciA9ICpwcmltaXRpdmVWYWx1ZTsKKyAg
ICAgICAgICAgIHJlc2l6ZSA9IHByaW1pdGl2ZVZhbHVlOwogICAgICAgICB9Ci0gICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFJlc2l6ZShyKTsKKyAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0UmVzaXplKHJlc2l6ZSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3Bl
cnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTE5NjUsMTUgKzE5NjAsMTUgQEAgY2xhc3Mg
QXBwbHlQcm9wZXJ0eVZlcnRpY2FsQWxpZ24gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOworICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsK
IAotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSkKLSAgICAgICAgICAg
IHJldHVybiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFsaWduKCpwcmltaXRp
dmVWYWx1ZSk7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpCisgICAg
ICAgICAgICByZXR1cm4gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbihw
cmltaXRpdmVWYWx1ZSk7CiAKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VmVy
dGljYWxBbGlnbkxlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50
ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9u
PihzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSkpOwor
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFsaWduTGVuZ3RoKHBy
aW1pdGl2ZVZhbHVlLmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVy
Y2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3R5bGVSZXNvbHZlci0+c3Rh
dGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpKTsKICAgICB9CiAKICAgICBzdGF0aWMg
UHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtMjAwMywyNiArMTk5OCwyNiBAQCBw
dWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAg
ICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSB7CisgICAgICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKTsKIAotICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1
ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdl
dFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvVHlwZShBc3BlY3RSYXRpb0F1dG8pOwot
ICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVG
cm9tRGltZW5zaW9ucykKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlE
KCkgPT0gQ1NTVmFsdWVGcm9tRGltZW5zaW9ucykKICAgICAgICAgICAgICAgICByZXR1cm4gc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9UeXBlKEFzcGVjdFJhdGlvRnJvbURp
bWVuc2lvbnMpOwotICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkg
PT0gQ1NTVmFsdWVGcm9tSW50cmluc2ljKQorICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUZyb21JbnRyaW5zaWMpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvVHlwZShBc3BlY3RS
YXRpb0Zyb21JbnRyaW5zaWMpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNB
c3BlY3RSYXRpb1ZhbHVlKCkpIHsKKyAgICAgICAgaWYgKCFpczxDU1NBc3BlY3RSYXRpb1ZhbHVl
PigqdmFsdWUpKSB7CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3Bl
Y3RSYXRpb1R5cGUoQXNwZWN0UmF0aW9BdXRvKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIENTU0FzcGVjdFJhdGlvVmFsdWUqIGFzcGVjdFJhdGlvVmFsdWUgPSB0
b0NTU0FzcGVjdFJhdGlvVmFsdWUodmFsdWUpOworICAgICAgICBDU1NBc3BlY3RSYXRpb1ZhbHVl
JiBhc3BlY3RSYXRpb1ZhbHVlID0gZG93bmNhc3Q8Q1NTQXNwZWN0UmF0aW9WYWx1ZT4oKnZhbHVl
KTsKICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9UeXBlKEFz
cGVjdFJhdGlvU3BlY2lmaWVkKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0
QXNwZWN0UmF0aW9EZW5vbWluYXRvcihhc3BlY3RSYXRpb1ZhbHVlLT5kZW5vbWluYXRvclZhbHVl
KCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVy
YXRvcihhc3BlY3RSYXRpb1ZhbHVlLT5udW1lcmF0b3JWYWx1ZSgpKTsKKyAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihhc3BlY3RSYXRpb1Zh
bHVlLmRlbm9taW5hdG9yVmFsdWUoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldEFzcGVjdFJhdGlvTnVtZXJhdG9yKGFzcGVjdFJhdGlvVmFsdWUubnVtZXJhdG9yVmFsdWUo
KSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkK
QEAgLTIwNTQsMjYgKzIwNDksMjUgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgewotICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
Tih2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqdmFsdWUpOwogCi0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgp
ID09IENTU1ZhbHVlTm9ybWFsKSB7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1
ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKICAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9v
bShzdHlsZVJlc29sdmVyKTsKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oUmVu
ZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVSZXNldCkgeworICAgICAgICB9IGVsc2UgaWYg
KHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVJlc2V0KSB7CiAgICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxlOjppbml0aWFs
Wm9vbSgpKTsKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oUmVuZGVyU3R5bGU6
OmluaXRpYWxab29tKCkpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRW
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVEb2N1bWVudCkgeworICAgICAgICB9IGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZURvY3VtZW50KSB7CiAgICAgICAgICAg
ICBmbG9hdCBkb2Nab29tID0gc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpID8gc3R5
bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLT56b29tKCkgOiBSZW5kZXJTdHlsZTo6aW5p
dGlhbFpvb20oKTsKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEVmZmVjdGl2ZVpvb20o
ZG9jWm9vbSk7CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKGRvY1pvb20pOwot
ICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkgeworICAg
ICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpKSB7CiAgICAgICAg
ICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgICAgICBpZiAo
ZmxvYXQgcGVyY2VudCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpCisgICAgICAg
ICAgICBpZiAoZmxvYXQgcGVyY2VudCA9IHByaW1pdGl2ZVZhbHVlLmdldEZsb2F0VmFsdWUoKSkK
ICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKHBlcmNlbnQgLyAxMDAuMGYp
OwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7CisgICAg
ICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAg
cmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICAgICAgaWYgKGZsb2F0
IG51bWJlciA9IHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpCisgICAgICAgICAgICBp
ZiAoZmxvYXQgbnVtYmVyID0gcHJpbWl0aXZlVmFsdWUuZ2V0RmxvYXRWYWx1ZSgpKQogICAgICAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20obnVtYmVyKTsKICAgICAgICAgfQogICAg
IH0KQEAgLTIxMDgsMTAgKzIxMDIsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgRURpc3BsYXkgZGlzcGxheSA9ICp0b0NTU1ByaW1pdGl2
ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgRURpc3BsYXkgZGlzcGxheSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogCiAgICAgICAgIGlmICghaXNWYWxpZERpc3BsYXlWYWx1
ZShzdHlsZVJlc29sdmVyLCBkaXNwbGF5KSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTIxMzEs
OCArMjEyNSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHls
ZSogc3R5bGUsIFBhc3NSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IHZhbHVlKSB7IChzdHlsZS0+
KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAg
ICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVl
KTsKKyAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSB7CisgICAgICAg
ICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpOwogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBD
U1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgMCk7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5wcmltaXRpdmVU
eXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKQEAgLTIxNDMsMTMgKzIxMzcs
MTMgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgIGlmICghaXM8
Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBDU1NC
b3hUeXBlIHJlZmVyZW5jZUJveCA9IEJveE1pc3Npbmc7CiAgICAgICAgIFJlZlB0cjxDbGlwUGF0
aE9wZXJhdGlvbj4gb3BlcmF0aW9uOwotICAgICAgICBhdXRvJiB2YWx1ZUxpc3QgPSB0b0NTU1Zh
bHVlTGlzdCgqdmFsdWUpOworICAgICAgICBhdXRvJiB2YWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NW
YWx1ZUxpc3Q+KCp2YWx1ZSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1
ZUxpc3QubGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUg
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZUxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhp
KSk7CisgICAgICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPigqdmFsdWVMaXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOwogICAgICAg
ICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzU2hhcGUoKSAmJiAhb3BlcmF0aW9uKQogICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbiA9IFNoYXBlQ2xpcFBhdGhPcGVyYXRpb246OmNyZWF0ZShiYXNp
Y1NoYXBlRm9yVmFsdWUoc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNp
b25EYXRhKCksIHByaW1pdGl2ZVZhbHVlLmdldFNoYXBlVmFsdWUoKSkpOwogICAgICAgICAgICAg
ZWxzZSBpZiAoKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUNvbnRlbnRC
b3gKQEAgLTIxODYsMjYgKzIxODAsMjYgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZh
bHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgUGFzc1JlZlB0cjxTaGFwZVZhbHVlPiB2YWx1ZSkgeyAo
c3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9CiAgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkgewotICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pCisgICAgICAgIGlmIChpczxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUm
IHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7Cisg
ICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQXV0
bykKICAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAwKTsK
ICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNJbWFnZVZhbHVlKCkgfHwgdmFsdWUtPmlzSW1h
Z2VHZW5lcmF0b3JWYWx1ZSgpIHx8IHZhbHVlLT5pc0ltYWdlU2V0VmFsdWUoKSkgewogICAgICAg
ICAgICAgUmVmUHRyPFNoYXBlVmFsdWU+IHNoYXBlID0gU2hhcGVWYWx1ZTo6Y3JlYXRlSW1hZ2VW
YWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKHByb3BlcnR5LCB2YWx1ZSkpOwogICAgICAg
ICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc2hhcGUucmVsZWFzZSgpKTsK
LSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgeworICAgICAgICB9IGVs
c2UgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkgewogICAgICAgICAgICAgUmVmUHRyPEJh
c2ljU2hhcGU+IHNoYXBlOwogICAgICAgICAgICAgQ1NTQm94VHlwZSByZWZlcmVuY2VCb3ggPSBC
b3hNaXNzaW5nOwotICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3QgPSB0b0NTU1Zh
bHVlTGlzdCh2YWx1ZSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFs
dWVMaXN0LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZUxpc3QtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soaSkpOwotICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+aXNTaGFwZSgpKQotICAgICAgICAgICAgICAgICAgICBzaGFwZSA9IGJhc2ljU2hhcGVGb3JW
YWx1ZShzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSwg
cHJpbWl0aXZlVmFsdWUtPmdldFNoYXBlVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUNvbnRlbnRCb3gKLSAg
ICAgICAgICAgICAgICAgICAgfHwgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NW
YWx1ZUJvcmRlckJveAotICAgICAgICAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0
VmFsdWVJRCgpID09IENTU1ZhbHVlUGFkZGluZ0JveAotICAgICAgICAgICAgICAgICAgICB8fCBw
cmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTWFyZ2luQm94KQotICAgICAg
ICAgICAgICAgICAgICByZWZlcmVuY2VCb3ggPSBDU1NCb3hUeXBlKCpwcmltaXRpdmVWYWx1ZSk7
CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIHZhbHVlTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVl
TGlzdD4oKnZhbHVlKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1
ZUxpc3QubGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
JiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWVMaXN0
Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOworICAgICAgICAgICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZS5pc1NoYXBlKCkpCisgICAgICAgICAgICAgICAgICAgIHNoYXBlID0gYmFzaWNTaGFw
ZUZvclZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSgpLCBwcmltaXRpdmVWYWx1ZS5nZXRTaGFwZVZhbHVlKCkpOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUNvbnRlbnRCb3gK
KyAgICAgICAgICAgICAgICAgICAgfHwgcHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENT
U1ZhbHVlQm9yZGVyQm94CisgICAgICAgICAgICAgICAgICAgIHx8IHByaW1pdGl2ZVZhbHVlLmdl
dFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVBhZGRpbmdCb3gKKyAgICAgICAgICAgICAgICAgICAgfHwg
cHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTWFyZ2luQm94KQorICAgICAg
ICAgICAgICAgICAgICByZWZlcmVuY2VCb3ggPSBDU1NCb3hUeXBlKHByaW1pdGl2ZVZhbHVlKTsK
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KQEAgLTIyNDUsMjMgKzIyMzksMjMgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlz
dCgpKQorICAgICAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3QgPSB0b0NTU1ZhbHVlTGlz
dCh2YWx1ZSk7CisgICAgICAgIENTU1ZhbHVlTGlzdCYgdmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NT
VmFsdWVMaXN0PigqdmFsdWUpOwogICAgICAgICBJbWFnZVJlc29sdXRpb25Tb3VyY2Ugc291cmNl
ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25Tb3VyY2UoKTsKICAgICAgICAg
SW1hZ2VSZXNvbHV0aW9uU25hcCBzbmFwID0gUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29s
dXRpb25TbmFwKCk7CiAgICAgICAgIGRvdWJsZSByZXNvbHV0aW9uID0gUmVuZGVyU3R5bGU6Omlu
aXRpYWxJbWFnZVJlc29sdXRpb24oKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2
YWx1ZUxpc3QtPmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0g
dmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwotICAgICAgICAgICAgaWYgKCFp
dGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dmFsdWVMaXN0Lmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlJiBpdGVtID0g
KnZhbHVlTGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAgICAgaWYgKCFp
czxDU1NQcmltaXRpdmVWYWx1ZT4oaXRlbSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1p
dGl2ZVZhbHVlKGl0ZW0pOwotICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1
ZUlEKCkgPT0gQ1NTVmFsdWVGcm9tSW1hZ2UpCisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXRlbSk7Cisg
ICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlRnJv
bUltYWdlKQogICAgICAgICAgICAgICAgIHNvdXJjZSA9IEltYWdlUmVzb2x1dGlvbkZyb21JbWFn
ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVTbmFwKQorICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFs
dWVJRCgpID09IENTU1ZhbHVlU25hcCkKICAgICAgICAgICAgICAgICBzbmFwID0gSW1hZ2VSZXNv
bHV0aW9uU25hcFBpeGVsczsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXNv
bHV0aW9uID0gcHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfRFBQWCk7CisgICAgICAgICAgICAgICAgcmVzb2x1dGlvbiA9IHByaW1pdGl2ZVZhbHVl
LmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQWCk7CiAgICAgICAgIH0K
ICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNl
KHNvdXJjZSk7CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEltYWdlUmVzb2x1
dGlvblNuYXAoc25hcCk7CkBAIC0yMjk3LDcgKzIyOTEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzVmFs
dWVMaXN0KCkpCisgICAgICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIExlbmd0aCBsZW5ndGhPclBlcmNlbnRhZ2VWYWx1ZTsK
QEAgLTIzMDUsMTkgKzIyOTksMTkgQEAgcHVibGljOgogICAgICAgICBUZXh0SW5kZW50TGluZSB0
ZXh0SW5kZW50TGluZVZhbHVlID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5kZW50TGluZSgp
OwogICAgICAgICBUZXh0SW5kZW50VHlwZSB0ZXh0SW5kZW50VHlwZVZhbHVlID0gUmVuZGVyU3R5
bGU6OmluaXRpYWxUZXh0SW5kZW50VHlwZSgpOwogI2VuZGlmCi0gICAgICAgIENTU1ZhbHVlTGlz
dCogdmFsdWVMaXN0ID0gdG9DU1NWYWx1ZUxpc3QodmFsdWUpOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHZhbHVlTGlzdC0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgQ1NT
VmFsdWUqIGl0ZW0gPSB2YWx1ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7Ci0gICAg
ICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgQ1NTVmFsdWVM
aXN0JiB2YWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVMaXN0Lmxlbmd0aCgpOyArK2kpIHsKKyAgICAg
ICAgICAgIENTU1ZhbHVlKiBpdGVtID0gdmFsdWVMaXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
aSk7CisgICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoaXRlbSk7Ci0gICAgICAgICAgICBp
ZiAoIXByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpCi0gICAgICAgICAgICAgICAgbGVuZ3Ro
T3JQZXJjZW50YWdlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVk
SW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJz
aW9uPihzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7
CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pOworICAgICAgICAgICAgaWYgKCFwcmltaXRpdmVW
YWx1ZS5nZXRWYWx1ZUlEKCkpCisgICAgICAgICAgICAgICAgbGVuZ3RoT3JQZXJjZW50YWdlVmFs
dWUgPSBwcmltaXRpdmVWYWx1ZS5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lv
biB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0eWxlUmVzb2x2
ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKICNpZiBFTkFCTEUoQ1NT
M19URVhUKQotICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQo
KSA9PSBDU1NWYWx1ZVdlYmtpdEVhY2hMaW5lKQorICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0
aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Via2l0RWFjaExpbmUpCiAgICAgICAg
ICAgICAgICAgdGV4dEluZGVudExpbmVWYWx1ZSA9IFRleHRJbmRlbnRFYWNoTGluZTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVX
ZWJraXRIYW5naW5nKQorICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFs
dWVJRCgpID09IENTU1ZhbHVlV2Via2l0SGFuZ2luZykKICAgICAgICAgICAgICAgICB0ZXh0SW5k
ZW50VHlwZVZhbHVlID0gVGV4dEluZGVudEhhbmdpbmc7CiAjZW5kaWYKICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvTWVkaWFMaXN0LmNwcAppbmRleCA5NDQ1MDg2M2YxYjkzYWM2YTczNTg5NmIyY2E5MmIx
ZmZiZGVhNGFmLi5lZTY2NzEyMDQyNDI2MGU4ZGIzNWY1MjI4YTNlNDVlYWMxMzIzMjAxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvTWVkaWFMaXN0LmNwcApAQCAtMzMyLDEwICszMzIsMTAgQEAgdm9pZCByZXBvcnRN
ZWRpYVF1ZXJ5V2FybmluZ0lmTmVlZGVkKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgTWVkaWFR
dWVyeVNldCogbWUKICAgICAgICAgICAgICAgICBjb25zdCBNZWRpYVF1ZXJ5RXhwKiBleHAgPSBl
eHByZXNzaW9ucy5hdChqKS5nZXQoKTsKICAgICAgICAgICAgICAgICBpZiAoZXhwLT5tZWRpYUZl
YXR1cmUoKSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6cmVzb2x1dGlvbk1lZGlhRmVhdHVyZSB8fCBl
eHAtPm1lZGlhRmVhdHVyZSgpID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhfcmVzb2x1dGlvbk1l
ZGlhRmVhdHVyZSB8fCBleHAtPm1lZGlhRmVhdHVyZSgpID09IE1lZGlhRmVhdHVyZU5hbWVzOjpt
aW5fcmVzb2x1dGlvbk1lZGlhRmVhdHVyZSkgewogICAgICAgICAgICAgICAgICAgICBDU1NWYWx1
ZSogY3NzVmFsdWUgPSAgZXhwLT52YWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY3Nz
VmFsdWUgJiYgY3NzVmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRp
dmVWYWx1ZShjc3NWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmlzRG90c1BlckluY2goKSB8fCBwcmltaXRpdmVWYWx1ZS0+aXNEb3RzUGVyQ2VudGlt
ZXRlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJlc29sdXRpb25XYXJuaW5n
TWVzc2FnZVRvQ29uc29sZShkb2N1bWVudCwgbWVkaWFRdWVyeVNldC0+bWVkaWFUZXh0KCksIHBy
aW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZh
bHVlPihjc3NWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqY3NzVmFs
dWUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzRG90c1Bl
ckluY2goKSB8fCBwcmltaXRpdmVWYWx1ZS5pc0RvdHNQZXJDZW50aW1ldGVyKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkUmVzb2x1dGlvbldhcm5pbmdNZXNzYWdlVG9Db25zb2xl
KGRvY3VtZW50LCBtZWRpYVF1ZXJ5U2V0LT5tZWRpYVRleHQoKSwgJnByaW1pdGl2ZVZhbHVlKTsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAppbmRleCBlMThiOTEx
NDA1ZmE2N2Q4YmY2NmUxMTE3OWIxNWJkYmE2YmQ0NDVmLi4zOGVkMzBiYzBiNWY0YjYzODljOGMy
NGQ4NGJmYTRmZDQ5ZjNjZGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFR
dWVyeUV2YWx1YXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFs
dWF0b3IuY3BwCkBAIC0xODYsOSArMTg2LDkgQEAgYm9vbCBjb21wYXJlVmFsdWUoVCBhLCBUIGIs
IE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIAogc3RhdGljIGJvb2wgY29tcGFyZUFzcGVjdFJhdGlv
VmFsdWUoQ1NTVmFsdWUqIHZhbHVlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIE1lZGlhRmVhdHVy
ZVByZWZpeCBvcCkKIHsKLSAgICBpZiAodmFsdWUtPmlzQXNwZWN0UmF0aW9WYWx1ZSgpKSB7Ci0g
ICAgICAgIENTU0FzcGVjdFJhdGlvVmFsdWUqIGFzcGVjdFJhdGlvID0gdG9DU1NBc3BlY3RSYXRp
b1ZhbHVlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVWYWx1ZSh3aWR0aCAqIHN0YXRp
Y19jYXN0PGludD4oYXNwZWN0UmF0aW8tPmRlbm9taW5hdG9yVmFsdWUoKSksIGhlaWdodCAqIHN0
YXRpY19jYXN0PGludD4oYXNwZWN0UmF0aW8tPm51bWVyYXRvclZhbHVlKCkpLCBvcCk7CisgICAg
aWYgKGlzPENTU0FzcGVjdFJhdGlvVmFsdWU+KCp2YWx1ZSkpIHsKKyAgICAgICAgQ1NTQXNwZWN0
UmF0aW9WYWx1ZSYgYXNwZWN0UmF0aW8gPSBkb3duY2FzdDxDU1NBc3BlY3RSYXRpb1ZhbHVlPigq
dmFsdWUpOworICAgICAgICByZXR1cm4gY29tcGFyZVZhbHVlKHdpZHRoICogc3RhdGljX2Nhc3Q8
aW50Pihhc3BlY3RSYXRpby5kZW5vbWluYXRvclZhbHVlKCkpLCBoZWlnaHQgKiBzdGF0aWNfY2Fz
dDxpbnQ+KGFzcGVjdFJhdGlvLm51bWVyYXRvclZhbHVlKCkpLCBvcCk7CiAgICAgfQogCiAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTk2LDkgKzE5Niw4IEBAIHN0YXRpYyBib29sIGNvbXBhcmVBc3Bl
Y3RSYXRpb1ZhbHVlKENTU1ZhbHVlKiB2YWx1ZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBNZWRp
CiAKIHN0YXRpYyBib29sIG51bWJlclZhbHVlKENTU1ZhbHVlKiB2YWx1ZSwgZmxvYXQmIHJlc3Vs
dCkKIHsKLSAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKQotICAgICAgICAmJiB0b0NT
U1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+aXNOdW1iZXIoKSkgewotICAgICAgICByZXN1bHQgPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+Z2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUik7CisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpICYm
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzTnVtYmVyKCkpIHsKKyAgICAg
ICAgcmVzdWx0ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0RmxvYXRW
YWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNDYsOCArMjQ1LDggQEAgc3RhdGljIGJv
b2wgb3JpZW50YXRpb25NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXIKIAogICAgIGludCB3aWR0aCA9IHZpZXctPmxheW91dFdpZHRoKCk7CiAg
ICAgaW50IGhlaWdodCA9IHZpZXctPmxheW91dEhlaWdodCgpOwotICAgIGlmICh2YWx1ZSAmJiB2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgIGNvbnN0IENTU1ZhbHVlSUQgaWQg
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+Z2V0VmFsdWVJRCgpOworICAgIGlmIChpczxD
U1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CisgICAgICAgIGNvbnN0IENTU1ZhbHVlSUQgaWQg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCk7CiAgICAg
ICAgIGlmICh3aWR0aCA+IGhlaWdodCkgLy8gU3F1YXJlIHZpZXdwb3J0IGlzIHBvcnRyYWl0Lgog
ICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlTGFuZHNjYXBlID09IGlkOwogICAgICAgICByZXR1
cm4gQ1NTVmFsdWVQb3J0cmFpdCA9PSBpZDsKQEAgLTMwOCwyMiArMzA3LDIyIEBAIHN0YXRpYyBi
b29sIGV2YWxSZXNvbHV0aW9uKENTU1ZhbHVlKiB2YWx1ZSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZl
YXR1cmVQcmVmaXggb3ApCiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuICEhZGV2aWNl
U2NhbGVGYWN0b3I7CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAg
aWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHJlc29sdXRpb24gPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKHZhbHVlKTsKLSAgICByZXR1cm4gY29tcGFyZVZhbHVlKGRldmljZVNjYWxlRmFjdG9yLCBy
ZXNvbHV0aW9uLT5pc051bWJlcigpID8gcmVzb2x1dGlvbi0+Z2V0RmxvYXRWYWx1ZSgpIDogcmVz
b2x1dGlvbi0+Z2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQUFgpLCBvcCk7
CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHJlc29sdXRpb24gPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKTsKKyAgICByZXR1cm4gY29tcGFyZVZhbHVlKGRldmljZVNjYWxlRmFj
dG9yLCByZXNvbHV0aW9uLmlzTnVtYmVyKCkgPyByZXNvbHV0aW9uLmdldEZsb2F0VmFsdWUoKSA6
IHJlc29sdXRpb24uZ2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQUFgpLCBv
cCk7CiB9CiAKIHN0YXRpYyBib29sIGRldmljZV9waXhlbF9yYXRpb01lZGlhRmVhdHVyZUV2YWwo
Q1NTVmFsdWUgKnZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUq
IGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0gICAgcmV0dXJuICghdmFsdWUgfHwg
dG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSktPmlzTnVtYmVyKCkpICYmIGV2YWxSZXNvbHV0aW9u
KHZhbHVlLCBmcmFtZSwgb3ApOworICAgIHJldHVybiAoIXZhbHVlIHx8IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzTnVtYmVyKCkpICYmIGV2YWxSZXNvbHV0aW9uKHZhbHVl
LCBmcmFtZSwgb3ApOwogfQogCiBzdGF0aWMgYm9vbCByZXNvbHV0aW9uTWVkaWFGZWF0dXJlRXZh
bChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFt
ZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKICNpZiBFTkFCTEUoUkVTT0xVVElP
Tl9NRURJQV9RVUVSWSkKLSAgICByZXR1cm4gKCF2YWx1ZSB8fCB0b0NTU1ByaW1pdGl2ZVZhbHVl
KHZhbHVlKS0+aXNSZXNvbHV0aW9uKCkpICYmIGV2YWxSZXNvbHV0aW9uKHZhbHVlLCBmcmFtZSwg
b3ApOworICAgIHJldHVybiAoIXZhbHVlIHx8IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpLmlzUmVzb2x1dGlvbigpKSAmJiBldmFsUmVzb2x1dGlvbih2YWx1ZSwgZnJhbWUsIG9w
KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oZnJh
bWUpOwpAQCAtMzQ0LDE4ICszNDMsMTggQEAgc3RhdGljIGJvb2wgZ3JpZE1lZGlhRmVhdHVyZUV2
YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXQKIAogc3Rh
dGljIGJvb2wgY29tcHV0ZUxlbmd0aChDU1NWYWx1ZSogdmFsdWUsIGJvb2wgc3RyaWN0LCBjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgaW50JiByZXN1bHQp
CiB7Ci0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFs
dWUpOworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogCi0gICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051
bWJlcigpKSB7Ci0gICAgICAgIHJlc3VsdCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgp
OworICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpKSB7CisgICAgICAgIHJlc3VsdCA9
IHByaW1pdGl2ZVZhbHVlLmdldEludFZhbHVlKCk7CiAgICAgICAgIHJldHVybiAhc3RyaWN0IHx8
ICFyZXN1bHQ7CiAgICAgfQogCi0gICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7
Ci0gICAgICAgIHJlc3VsdCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGludD4oY29u
dmVyc2lvbkRhdGEpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7CisgICAg
ICAgIHJlc3VsdCA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8aW50Pihjb252ZXJzaW9u
RGF0YSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNTkzLDcgKzU5Miw3IEBA
IHN0YXRpYyBib29sIHZpZXdfbW9kZU1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBj
b25zdCBDU1NUb0xlbmd0aENvbnZlcnNpCiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICBjb25zdCBpbnQgdmlld01vZGVDU1NLZXl3b3JkSUQgPSB0b0NTU1ByaW1p
dGl2ZVZhbHVlKHZhbHVlKS0+Z2V0VmFsdWVJRCgpOworICAgIGNvbnN0IGludCB2aWV3TW9kZUNT
U0tleXdvcmRJRCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVl
SUQoKTsKICAgICBjb25zdCBQYWdlOjpWaWV3TW9kZSB2aWV3TW9kZSA9IGZyYW1lLT5wYWdlKCkt
PnZpZXdNb2RlKCk7CiAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKICAgICBzd2l0Y2ggKHZpZXdN
b2RlKSB7CkBAIC02ODgsMTAgKzY4NywxMCBAQCBzdGF0aWMgYm9vbCBwb2ludGVyTWVkaWFGZWF0
dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbgogICAg
IGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBwb2ludGVyICE9IE5vUG9pbnRlcjsKIAotICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2
ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCBDU1NW
YWx1ZUlEIGlkID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSktPmdldFZhbHVlSUQoKTsKKyAg
ICBjb25zdCBDU1NWYWx1ZUlEIGlkID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSkuZ2V0VmFsdWVJRCgpOwogICAgIHJldHVybiAocG9pbnRlciA9PSBOb1BvaW50ZXIgJiYgaWQg
PT0gQ1NTVmFsdWVOb25lKQogICAgICAgICB8fCAocG9pbnRlciA9PSBUb3VjaFBvaW50ZXIgJiYg
aWQgPT0gQ1NTVmFsdWVDb2Fyc2UpCiAgICAgICAgIHx8IChwb2ludGVyID09IE1vdXNlUG9pbnRl
ciAmJiBpZCA9PSBDU1NWYWx1ZUZpbmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxl
U2VsZWN0b3IuY3BwCmluZGV4IGZhNDMyMWU4YjdiYjQ0YjlhN2I2ZTE0N2FlMjIyMWIzNDkwYTdl
MjIuLjY4NTQ5NDU5MTdjNmU0OTE2OGU0ZDJjZmFjZGUwZmRlYzc2ZGYzMjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTEwMyw5ICsxMDMsOSBAQCBz
dGF0aWMgQ29sb3IgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShTVkdDb2xvciogc3ZnQ29sb3Is
IGNvbnN0IENvbG9yJiBmZ0NvbG9yKQogdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBBU1NFUlQodmFs
dWUpOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IDA7Ci0gICAgaWYg
KHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHByaW1pdGl2ZVZhbHVlID0gdG9D
U1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlID0gbnVsbHB0cjsKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkp
CisgICAgICAgIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKTsKIAogICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgU1ZHUmVuZGVy
U3R5bGUmIHN2Z1N0eWxlID0gc3RhdGUuc3R5bGUoKS0+YWNjZXNzU1ZHU3R5bGUoKTsKQEAgLTIw
OCwxMyArMjA4LDEzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAvLyAnbm9ybWFsJyBp
cyB0aGUgb25seSBwcmltaXRpdmVWYWx1ZQogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
KQogICAgICAgICAgICAgICAgIHN2Z1N0eWxlLnNldFBhaW50T3JkZXIoUGFpbnRPcmRlck5vcm1h
bCk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICAgICAg
aWYgKCFpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIG9yZGVyVHlwZUxpc3QgPSB0b0NTU1ZhbHVlTGlzdCh2
YWx1ZSk7CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIG9yZGVyVHlwZUxpc3QgPSBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CiAKICAgICAgICAgICAgIC8vIFNlcmlhbGl6YXRpb24g
aGFwcGVuZWQgZHVyaW5nIHBhcnNpbmcuIE5vIGFkZGl0aW9uYWwgY2hlY2tpbmcgbmVlZGVkLgot
ICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gb3JkZXJUeXBlTGlzdC0+bGVuZ3RoKCk7Ci0g
ICAgICAgICAgICBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUob3JkZXJUeXBl
TGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7CisgICAgICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBvcmRlclR5cGVMaXN0Lmxlbmd0aCgpOworICAgICAgICAgICAgcHJpbWl0aXZlVmFs
dWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4ob3JkZXJUeXBlTGlzdC5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDApKTsKICAgICAgICAgICAgIFBhaW50T3JkZXIgcGFpbnRPcmRlcjsKICAg
ICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSkgewogICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZUZpbGw6CkBAIC0yNjYsOSArMjY2LDkgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICAgICAgICAgICAgICBzdmdTdHlsZS5zZXRGaWxsUGFpbnQoU1ZHUmVuZGVyU3R5bGU6
OmluaXRpYWxGaWxsUGFpbnRUeXBlKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50
Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRVcmkoKSwgYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KHZhbHVlLT5pc1NWR1BhaW50KCkpIHsKLSAgICAgICAgICAgICAgICBTVkdQYWludCogc3ZnUGFp
bnQgPSB0b1NWR1BhaW50KHZhbHVlKTsKLSAgICAgICAgICAgICAgICBzdmdTdHlsZS5zZXRGaWxs
UGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2
Z1BhaW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgp
KTsKKyAgICAgICAgICAgIGlmIChpczxTVkdQYWludD4oKnZhbHVlKSkgeworICAgICAgICAgICAg
ICAgIFNWR1BhaW50JiBzdmdQYWludCA9IGRvd25jYXN0PFNWR1BhaW50PigqdmFsdWUpOworICAg
ICAgICAgICAgICAgIHN2Z1N0eWxlLnNldEZpbGxQYWludChzdmdQYWludC5wYWludFR5cGUoKSwg
Y29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZSgmc3ZnUGFpbnQsIHN0YXRlLnN0eWxlKCktPmNvbG9y
KCkpLCBzdmdQYWludC51cmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5
UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtMjgzLDMwICsyODMsMzAgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICAgICAgICAgICAgICBzdmdTdHlsZS5zZXRTdHJva2VQYWludChTVkdSZW5kZXJTdHlsZTo6
aW5pdGlhbFN0cm9rZVBhaW50VHlwZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBh
aW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFVyaSgpLCBhcHBs
eVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkgewotICAgICAgICAgICAgICAgIFNWR1BhaW50KiBz
dmdQYWludCA9IHRvU1ZHUGFpbnQodmFsdWUpOwotICAgICAgICAgICAgICAgIHN2Z1N0eWxlLnNl
dFN0cm9rZVBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NW
YWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSksIHN2Z1BhaW50LT51cmkoKSwg
YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5r
U3R5bGUoKSk7CisgICAgICAgICAgICBpZiAoaXM8U1ZHUGFpbnQ+KCp2YWx1ZSkpIHsKKyAgICAg
ICAgICAgICAgICBTVkdQYWludCYgc3ZnUGFpbnQgPSBkb3duY2FzdDxTVkdQYWludD4oKnZhbHVl
KTsKKyAgICAgICAgICAgICAgICBzdmdTdHlsZS5zZXRTdHJva2VQYWludChzdmdQYWludC5wYWlu
dFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZSgmc3ZnUGFpbnQsIHN0YXRlLnN0eWxl
KCktPmNvbG9yKCkpLCBzdmdQYWludC51cmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxl
KCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3Ry
b2tlRGFzaGFycmF5OgogICAgICAgICB7CiAgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRf
SU5JVElBTChzdHJva2VEYXNoQXJyYXksIFN0cm9rZURhc2hBcnJheSkKLSAgICAgICAgICAgIGlm
ICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKKyAgICAgICAgICAgIGlmICghaXM8Q1NTVmFsdWVM
aXN0PigqdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgc3ZnU3R5bGUuc2V0U3Ryb2tlRGFzaEFy
cmF5KFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlRGFzaEFycmF5KCkpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBDU1NWYWx1ZUxpc3Qq
IGRhc2hlcyA9IHRvQ1NTVmFsdWVMaXN0KHZhbHVlKTsKKyAgICAgICAgICAgIENTU1ZhbHVlTGlz
dCYgZGFzaGVzID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpOwogCiAgICAgICAgICAg
ICBWZWN0b3I8U1ZHTGVuZ3RoPiBhcnJheTsKLSAgICAgICAgICAgIHNpemVfdCBsZW5ndGggPSBk
YXNoZXMtPmxlbmd0aCgpOworICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IGRhc2hlcy5sZW5n
dGgoKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gZGFzaGVzLT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKGkpOwotICAgICAgICAgICAgICAgIGlmICghY3VyclZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGRhc2hl
cy5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAgICAgICAgIGlmICghaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KCpjdXJyVmFsdWUpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBkYXNoID0gdG9DU1NQcmlt
aXRpdmVWYWx1ZShkYXNoZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOworICAgICAgICAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBkYXNoID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KGRhc2hlcy5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKICAgICAgICAgICAgICAgICBh
cnJheS5hcHBlbmQoU1ZHTGVuZ3RoOjpmcm9tQ1NTUHJpbWl0aXZlVmFsdWUoZGFzaCkpOwogICAg
ICAgICAgICAgfQogCkBAIC00OTEsMTUgKzQ5MSwxNSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5U3RvcENvbG9yOgogICAgICAgICB7CiAgICAgICAgICAgICBIQU5E
TEVfSU5IRVJJVF9BTkRfSU5JVElBTChzdG9wQ29sb3IsIFN0b3BDb2xvcik7Ci0gICAgICAgICAg
ICBpZiAodmFsdWUtPmlzU1ZHQ29sb3IoKSkKLSAgICAgICAgICAgICAgICBzdmdTdHlsZS5zZXRT
dG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZSh0b1NWR0NvbG9yKHZhbHVlKSwgc3Rh
dGUuc3R5bGUoKS0+Y29sb3IoKSkpOworICAgICAgICAgICAgaWYgKGlzPFNWR0NvbG9yPigqdmFs
dWUpKQorICAgICAgICAgICAgICAgIHN2Z1N0eWxlLnNldFN0b3BDb2xvcihjb2xvckZyb21TVkdD
b2xvckNTU1ZhbHVlKGRvd25jYXN0PFNWR0NvbG9yPih2YWx1ZSksIHN0YXRlLnN0eWxlKCktPmNv
bG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUxpZ2h0aW5nQ29sb3I6CiAgICAgICAgIHsKICAgICAgICAgICAgIEhBTkRMRV9JTkhF
UklUX0FORF9JTklUSUFMKGxpZ2h0aW5nQ29sb3IsIExpZ2h0aW5nQ29sb3IpOwotICAgICAgICAg
ICAgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAgICAgICAgICAgICAgc3ZnU3R5bGUuc2V0
TGlnaHRpbmdDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHRvU1ZHQ29sb3IodmFsdWUp
LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSk7CisgICAgICAgICAgICBpZiAoaXM8U1ZHQ29sb3I+
KCp2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3ZnU3R5bGUuc2V0TGlnaHRpbmdDb2xvcihjb2xv
ckZyb21TVkdDb2xvckNTU1ZhbHVlKGRvd25jYXN0PFNWR0NvbG9yPih2YWx1ZSksIHN0YXRlLnN0
eWxlKCktPmNvbG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlGbG9vZE9wYWNpdHk6CkBAIC01MjMsOCArNTIzLDggQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZsb29kQ29sb3I6CiAgICAgICAgIHsK
ICAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGZsb29kQ29sb3IsIEZsb29k
Q29sb3IpOwotICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAgICAgICAg
ICAgICAgc3ZnU3R5bGUuc2V0Rmxvb2RDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHRv
U1ZHQ29sb3IodmFsdWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSk7CisgICAgICAgICAgICBp
ZiAoaXM8U1ZHQ29sb3I+KCp2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3ZnU3R5bGUuc2V0Rmxv
b2RDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKGRvd25jYXN0PFNWR0NvbG9yPih2YWx1
ZSksIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbDoK
QEAgLTU3MSwyNyArNTcxLDI3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAoaXNJ
bml0aWFsIHx8IHByaW1pdGl2ZVZhbHVlKSAvLyBpbml0aWFsIHwgbm9uZQogICAgICAgICAgICAg
ICAgIHJldHVybiBzdmdTdHlsZS5zZXRTaGFkb3cobnVsbHB0cik7CiAKLSAgICAgICAgICAgIGlm
ICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgICAgICBpZiAoIWlzPENTU1ZhbHVlTGlz
dD4oKnZhbHVlKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIENTU1Zh
bHVlTGlzdCogbGlzdCA9IHRvQ1NTVmFsdWVMaXN0KHZhbHVlKTsKLSAgICAgICAgICAgIGlmICgh
bGlzdC0+bGVuZ3RoKCkpCisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIGxpc3QgPSBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIWxpc3QubGVuZ3RoKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBDU1NWYWx1ZSogZmlyc3RW
YWx1ZSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCk7Ci0gICAgICAgICAgICBpZiAo
IWZpcnN0VmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKKyAgICAgICAgICAgIENTU1ZhbHVlKiBmaXJz
dFZhbHVlID0gbGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApOworICAgICAgICAgICAgaWYg
KCFpczxDU1NTaGFkb3dWYWx1ZT4oKmZpcnN0VmFsdWUpKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIENTU1NoYWRvd1ZhbHVlKiBpdGVtID0gdG9DU1NTaGFkb3dWYWx1ZShm
aXJzdFZhbHVlKTsKLSAgICAgICAgICAgIEludFBvaW50IGxvY2F0aW9uKGl0ZW0tPngtPmNvbXB1
dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhB
ZGp1c3RlZFpvb20oMS4wZikpLAotICAgICAgICAgICAgICAgIGl0ZW0tPnktPmNvbXB1dGVMZW5n
dGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3Rl
ZFpvb20oMS4wZikpKTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0t
PmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRh
KCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpIDogMDsKKyAgICAgICAgICAgIENTU1NoYWRv
d1ZhbHVlJiBpdGVtID0gZG93bmNhc3Q8Q1NTU2hhZG93VmFsdWU+KCpmaXJzdFZhbHVlKTsKKyAg
ICAgICAgICAgIEludFBvaW50IGxvY2F0aW9uKGl0ZW0ueC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0
YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBm
KSksCisgICAgICAgICAgICAgICAgaXRlbS55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3Nz
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpKSk7Cisg
ICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0uYmx1ciA/IGl0ZW0uYmx1ci0+Y29tcHV0ZUxlbmd0
aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVk
Wm9vbSgxLjBmKSkgOiAwOwogICAgICAgICAgICAgQ29sb3IgY29sb3I7Ci0gICAgICAgICAgICBp
ZiAoaXRlbS0+Y29sb3IpCi0gICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRp
dmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CisgICAgICAgICAgICBpZiAoaXRlbS5jb2xvcikK
KyAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGl0ZW0uY29s
b3IuZ2V0KCkpOwogCiAgICAgICAgICAgICAvLyAtd2Via2l0LXN2Zy1zaGFkb3cgZG9lcyBzaG91
bGQgbm90IGhhdmUgYSBzcHJlYWQgb3Igc3R5bGUKLSAgICAgICAgICAgIEFTU0VSVCghaXRlbS0+
c3ByZWFkKTsKLSAgICAgICAgICAgIEFTU0VSVCghaXRlbS0+c3R5bGUpOworICAgICAgICAgICAg
QVNTRVJUKCFpdGVtLnNwcmVhZCk7CisgICAgICAgICAgICBBU1NFUlQoIWl0ZW0uc3R5bGUpOwog
CiAgICAgICAgICAgICBhdXRvIHNoYWRvd0RhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFNoYWRvd0Rh
dGE+KGxvY2F0aW9uLCBibHVyLCAwLCBOb3JtYWwsIGZhbHNlLCBjb2xvci5pc1ZhbGlkKCkgPyBj
b2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCk7CiAgICAgICAgICAgICBzdmdTdHlsZS5zZXRTaGFk
b3coV1RGOjptb3ZlKHNoYWRvd0RhdGEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9Tb3VyY2VTaXplTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU291cmNlU2l6ZUxpc3Qu
Y3BwCmluZGV4IDdkODYyZTFkNTg0MzhkNWIwOGU0ZWMwZWU3OGQyYWU1NGRlNTMyZTguLjg4ODdi
Y2VkOGRjYmY0Y2JmNjJiMTAwYWRmOTJlODI2YWY0N2RmYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1Nv
dXJjZVNpemVMaXN0LmNwcApAQCAtNjAsNyArNjAsNyBAQCBzdGF0aWMgdW5zaWduZWQgY29tcHV0
ZUxlbmd0aChDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFJlbmRlclN0eWxlJiBzdHlsZSwgUmVuZGVy
VgogICAgICAgICB9CiAgICAgfQogICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSB2YWx1
ZS5jcmVhdGVDU1NWYWx1ZSgpOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcHJpbWl0
aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGNzc1ZhbHVlLmdldCgpKTsKKyAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KGNzc1ZhbHVlLmdldCgpKTsKICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWUtPmNv
bXB1dGVMZW5ndGg8dW5zaWduZWQ+KGNvbnZlcnNpb25EYXRhKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVQcm9wZXJ0aWVzLmNwcAppbmRleCA2ZDJmZGNlMjFkZjE2ZWVjMWQ1MGQyNjU1ZWI0
MGM0NTA5OWJkMmIyLi5mOGVhNDBkNDlhZDBlNTY0OTRhODBhZDFjYWNkZjBlZjBkNTE0ODI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcApAQCAtMzYzLDcgKzM2Myw3IEBA
IFN0cmluZyBTdHlsZVByb3BlcnRpZXM6OmdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShjb25zdCBT
dHlsZVByb3BlcnR5U2hvcnRoYW5kJiBzCiAgICAgICAgIHZhbHVlc1tpXSA9IGdldFByb3BlcnR5
Q1NTVmFsdWUoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtpXSk7CiAgICAgICAgIGlmICh2YWx1ZXNb
aV0pIHsKICAgICAgICAgICAgIGlmICh2YWx1ZXNbaV0tPmlzQmFzZVZhbHVlTGlzdCgpKQotICAg
ICAgICAgICAgICAgIG51bUxheWVycyA9IHN0ZDo6bWF4KHRvQ1NTVmFsdWVMaXN0KHZhbHVlc1tp
XS5nZXQoKSktPmxlbmd0aCgpLCBudW1MYXllcnMpOworICAgICAgICAgICAgICAgIG51bUxheWVy
cyA9IHN0ZDo6bWF4KGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlc1tpXSkubGVuZ3RoKCks
IG51bUxheWVycyk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbnVtTGF5ZXJz
ID0gc3RkOjptYXg8c2l6ZV90PigxVSwgbnVtTGF5ZXJzKTsKICAgICAgICAgfQpAQCAtMzg0LDcg
KzM4NCw3IEBAIFN0cmluZyBTdHlsZVByb3BlcnRpZXM6OmdldExheWVyZWRTaG9ydGhhbmRWYWx1
ZShjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBzCiAgICAgICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IHZhbHVlOwogICAgICAgICAgICAgaWYgKHZhbHVlc1tqXSkgewogICAgICAgICAgICAg
ICAgIGlmICh2YWx1ZXNbal0tPmlzQmFzZVZhbHVlTGlzdCgpKQotICAgICAgICAgICAgICAgICAg
ICB2YWx1ZSA9IHRvQ1NTVmFsdWVMaXN0KHZhbHVlc1tqXS5nZXQoKSktPml0ZW0oaSk7CisgICAg
ICAgICAgICAgICAgICAgIHZhbHVlID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWVzW2pd
KS5pdGVtKGkpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICB2
YWx1ZSA9IHZhbHVlc1tqXTsKIApAQCAtNDA4LDE2ICs0MDgsMTYgQEAgU3RyaW5nIFN0eWxlUHJv
cGVydGllczo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGNvbnN0IFN0eWxlUHJvcGVydHlTaG9y
dGhhbmQmIHMKICAgICAgICAgICAgICAgICAgICAgfHwgKGogPCBzaXplIC0gMSAmJiBzaG9ydGhh
bmQucHJvcGVydGllcygpW2ogKyAxXSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRZICYm
IHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHlWYWx1ZTsK
ICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBuZXh0VmFsdWUgPSB2YWx1ZXNb
aiArIDFdOwotICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFZhbHVlLT5pc1ZhbHVlTGlzdCgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgeVZhbHVlID0gdG9DU1NWYWx1ZUxpc3QobmV4dFZh
bHVlLmdldCgpKS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKm5leHRWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICB5VmFsdWUgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpuZXh0VmFsdWUpLml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soaSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgICAgIHlWYWx1ZSA9IG5leHRWYWx1ZTsKIAotICAgICAgICAgICAgICAgICAgICBp
ZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgfHwgIXlWYWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpIHx8ICFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnlWYWx1ZSkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAgICAgICBDU1NWYWx1ZUlEIHhJZCA9
IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUuZ2V0KCkpLT5nZXRWYWx1ZUlEKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIENTU1ZhbHVlSUQgeUlkID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh5VmFsdWUu
Z2V0KCkpLT5nZXRWYWx1ZUlEKCk7CisgICAgICAgICAgICAgICAgICAgIENTU1ZhbHVlSUQgeElk
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpOworICAg
ICAgICAgICAgICAgICAgICBDU1NWYWx1ZUlEIHlJZCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqeVZhbHVlKS5nZXRWYWx1ZUlEKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh4SWQg
IT0geUlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeElkID09IENTU1ZhbHVlUmVw
ZWF0ICYmIHlJZCA9PSBDU1NWYWx1ZU5vUmVwZWF0KSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXNlUmVwZWF0WFNob3J0aGFuZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAKaW5kZXggMmYyZGZjNjE3YmQxYzQxNWQxZjQwNzFhNGRmMTQ5NzE3Yzk4YTAyOC4u
ZTFhM2NiMTRkOTY3Mzc4NjliYjc4YzQyMTBhYmY3MzU5ZDRiOTIwMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMTY0MywxMyArMTY0MywxMyBAQCB2b2lkIGV4dHJhY3RE
aXJlY3Rpb25BbmRXcml0aW5nTW9kZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFN0
eWxlUmVzb2x2ZQogICAgICAgICAgICAgc3dpdGNoIChwcm9wZXJ0eS5pZCgpKSB7CiAgICAgICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3JpdGluZ01vZGU6CiAgICAgICAgICAgICAgICAg
aWYgKCFoYWRJbXBvcnRhbnRXZWJraXRXcml0aW5nTW9kZSB8fCBwcm9wZXJ0eS5pc0ltcG9ydGFu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRpbmdNb2RlID0gdG9DU1NQcmltaXRpdmVW
YWx1ZSgqcHJvcGVydHkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIHdyaXRpbmdNb2Rl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpwcm9wZXJ0eS52YWx1ZSgpKTsKICAgICAg
ICAgICAgICAgICAgICAgaGFkSW1wb3J0YW50V2Via2l0V3JpdGluZ01vZGUgPSBwcm9wZXJ0eS5p
c0ltcG9ydGFudCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246CiAgICAgICAgICAgICAgICAg
aWYgKCFoYWRJbXBvcnRhbnREaXJlY3Rpb24gfHwgcHJvcGVydHkuaXNJbXBvcnRhbnQoKSkgewot
ICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKCpwcm9w
ZXJ0eS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCpwcm9wZXJ0eS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAg
ICAgaGFkSW1wb3J0YW50RGlyZWN0aW9uID0gcHJvcGVydHkuaXNJbXBvcnRhbnQoKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTMxLDIyICsxOTMxLDIy
IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlLCBjb25zdCBTdHlsCiAKIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFj
a1NpemUoQ1NTVmFsdWUqIHZhbHVlLCBHcmlkVHJhY2tTaXplJiB0cmFja1NpemUsIGNvbnN0IFN0
eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkgewotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSkpIHsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgIEdyaWRMZW5ndGgg
d29ya2luZ0xlbmd0aDsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKHByaW1p
dGl2ZVZhbHVlLCBzdGF0ZSwgd29ya2luZ0xlbmd0aCkpCisgICAgICAgIGlmICghY3JlYXRlR3Jp
ZFRyYWNrQnJlYWR0aCgmcHJpbWl0aXZlVmFsdWUsIHN0YXRlLCB3b3JraW5nTGVuZ3RoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICB0cmFja1NpemUuc2V0TGVuZ3RoKHdv
cmtpbmdMZW5ndGgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBDU1NGdW5j
dGlvblZhbHVlKiBtaW5tYXhGdW5jdGlvbiA9IHRvQ1NTRnVuY3Rpb25WYWx1ZSh2YWx1ZSk7Ci0g
ICAgQ1NTVmFsdWVMaXN0KiBhcmd1bWVudHMgPSBtaW5tYXhGdW5jdGlvbi0+YXJndW1lbnRzKCk7
CisgICAgQ1NTRnVuY3Rpb25WYWx1ZSYgbWlubWF4RnVuY3Rpb24gPSBkb3duY2FzdDxDU1NGdW5j
dGlvblZhbHVlPigqdmFsdWUpOworICAgIENTU1ZhbHVlTGlzdCogYXJndW1lbnRzID0gbWlubWF4
RnVuY3Rpb24uYXJndW1lbnRzKCk7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oYXJndW1lbnRzLT5sZW5ndGgoKSA9PSAyKTsKICAgICBHcmlkTGVuZ3RoIG1pblRyYWNrQnJl
YWR0aDsKICAgICBHcmlkTGVuZ3RoIG1heFRyYWNrQnJlYWR0aDsKLSAgICBpZiAoIWNyZWF0ZUdy
aWRUcmFja0JyZWFkdGgodG9DU1NQcmltaXRpdmVWYWx1ZShhcmd1bWVudHMtPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soMCkpLCBzdGF0ZSwgbWluVHJhY2tCcmVhZHRoKSB8fCAhY3JlYXRlR3JpZFRy
YWNrQnJlYWR0aCh0b0NTU1ByaW1pdGl2ZVZhbHVlKGFyZ3VtZW50cy0+aXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjaygxKSksIHN0YXRlLCBtYXhUcmFja0JyZWFkdGgpKQorICAgIGlmICghY3JlYXRlR3Jp
ZFRyYWNrQnJlYWR0aChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oYXJndW1lbnRzLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDApKSwgc3RhdGUsIG1pblRyYWNrQnJlYWR0aCkgfHwgIWNyZWF0
ZUdyaWRUcmFja0JyZWFkdGgoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGFyZ3VtZW50cy0+
aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSksIHN0YXRlLCBtYXhUcmFja0JyZWFkdGgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB0cmFja1NpemUuc2V0TWluTWF4KG1pblRyYWNrQnJl
YWR0aCwgbWF4VHJhY2tCcmVhZHRoKTsKQEAgLTE5NTYsOSArMTk1Niw5IEBAIHN0YXRpYyBib29s
IGNyZWF0ZUdyaWRUcmFja1NpemUoQ1NTVmFsdWUqIHZhbHVlLCBHcmlkVHJhY2tTaXplJiB0cmFj
a1NpemUsIGNvbnN0CiBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tMaXN0KENTU1ZhbHVlKiB2
YWx1ZSwgVmVjdG9yPEdyaWRUcmFja1NpemU+JiB0cmFja1NpemVzLCBOYW1lZEdyaWRMaW5lc01h
cCYgbmFtZWRHcmlkTGluZXMsIE9yZGVyZWROYW1lZEdyaWRMaW5lc01hcCYgb3JkZXJlZE5hbWVk
R3JpZExpbmVzLCBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiB7CiAgICAgLy8g
SGFuZGxlICdub25lJy4KLSAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkg
PT0gQ1NTVmFsdWVOb25lOworICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkg
eworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVl
LmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmU7CiAgICAgfQogCiAgICAgaWYgKCF2YWx1ZS0+
aXNWYWx1ZUxpc3QoKSkKQEAgLTE5NjcsMTAgKzE5NjcsMTAgQEAgc3RhdGljIGJvb2wgY3JlYXRl
R3JpZFRyYWNrTGlzdChDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxHcmlkVHJhY2tTaXplPiYgdHJh
Y2tTaXoKICAgICBzaXplX3QgY3VycmVudE5hbWVkR3JpZExpbmUgPSAwOwogICAgIGZvciAoQ1NT
VmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsK
ICAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUoKTsKLSAgICAgICAgaWYgKGN1
cnJWYWx1ZS0+aXNHcmlkTGluZU5hbWVzVmFsdWUoKSkgewotICAgICAgICAgICAgQ1NTR3JpZExp
bmVOYW1lc1ZhbHVlKiBsaW5lTmFtZXNWYWx1ZSA9IHRvQ1NTR3JpZExpbmVOYW1lc1ZhbHVlKGN1
cnJWYWx1ZSk7Ci0gICAgICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGogPSBsaW5l
TmFtZXNWYWx1ZTsgai5oYXNNb3JlKCk7IGouYWR2YW5jZSgpKSB7Ci0gICAgICAgICAgICAgICAg
U3RyaW5nIG5hbWVkR3JpZExpbmUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGoudmFsdWUoKSktPmdl
dFN0cmluZ1ZhbHVlKCk7CisgICAgICAgIGlmIChpczxDU1NHcmlkTGluZU5hbWVzVmFsdWU+KCpj
dXJyVmFsdWUpKSB7CisgICAgICAgICAgICBDU1NHcmlkTGluZU5hbWVzVmFsdWUmIGxpbmVOYW1l
c1ZhbHVlID0gZG93bmNhc3Q8Q1NTR3JpZExpbmVOYW1lc1ZhbHVlPigqY3VyclZhbHVlKTsKKyAg
ICAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaiA9ICZsaW5lTmFtZXNWYWx1ZTsg
ai5oYXNNb3JlKCk7IGouYWR2YW5jZSgpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWVk
R3JpZExpbmUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oai52YWx1ZSgpKS0+Z2V0U3Ry
aW5nVmFsdWUoKTsKICAgICAgICAgICAgICAgICBOYW1lZEdyaWRMaW5lc01hcDo6QWRkUmVzdWx0
IHJlc3VsdCA9IG5hbWVkR3JpZExpbmVzLmFkZChuYW1lZEdyaWRMaW5lLCBWZWN0b3I8c2l6ZV90
PigpKTsKICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChjdXJy
ZW50TmFtZWRHcmlkTGluZSk7CiAgICAgICAgICAgICAgICAgT3JkZXJlZE5hbWVkR3JpZExpbmVz
TWFwOjpBZGRSZXN1bHQgb3JkZXJlZFJlc3VsdCA9IG9yZGVyZWROYW1lZEdyaWRMaW5lcy5hZGQo
Y3VycmVudE5hbWVkR3JpZExpbmUsIFZlY3RvcjxTdHJpbmc+KCkpOwpAQCAtMTk5OCwzNyArMTk5
OCwzNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkUG9zaXRpb24oQ1NTVmFsdWUqIHZhbHVlLCBH
cmlkUG9zaXRpb24mIHBvc2l0aW9uKQogewogICAgIC8vIFdlIGFjY2VwdCB0aGUgc3BlY2lmaWNh
dGlvbidzIGdyYW1tYXI6CiAgICAgLy8gYXV0byB8IDxjdXN0b20taWRlbnQ+IHwgWyA8aW50ZWdl
cj4gJiYgPGN1c3RvbS1pZGVudD4/IF0gfCBbIHNwYW4gJiYgWyA8aW50ZWdlcj4gfHwgPGN1c3Rv
bS1pZGVudD4gXSBdCi0gICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSh2YWx1ZSk7CisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSB7CisgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPigqdmFsdWUpOwogICAgICAgICAvLyBXZSB0cmFuc2xhdGUgPGlkZW50PiB0byA8
c3RyaW5nPiBkdXJpbmcgcGFyc2luZyBhcyBpdCBtYWtlcyBoYW5kbGluZyBpdCBzaW1wbGVyLgot
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIHBv
c2l0aW9uLnNldE5hbWVkR3JpZEFyZWEocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkp
OworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNTdHJpbmcoKSkgeworICAgICAgICAgICAg
cG9zaXRpb24uc2V0TmFtZWRHcmlkQXJlYShwcmltaXRpdmVWYWx1ZS5nZXRTdHJpbmdWYWx1ZSgp
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgQVNTRVJU
KHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKTsKKyAgICAgICAg
QVNTRVJUKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlcyA9IHRv
Q1NTVmFsdWVMaXN0KHZhbHVlKTsKLSAgICBBU1NFUlQodmFsdWVzLT5sZW5ndGgoKSk7CisgICAg
Q1NTVmFsdWVMaXN0JiB2YWx1ZXMgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7Cisg
ICAgQVNTRVJUKHZhbHVlcy5sZW5ndGgoKSk7CiAKICAgICBib29sIGlzU3BhblBvc2l0aW9uID0g
ZmFsc2U7CiAgICAgaW50IGdyaWRMaW5lTnVtYmVyID0gMDsKICAgICBTdHJpbmcgZ3JpZExpbmVO
YW1lOwogCi0gICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXQgPSB2YWx1ZXM7Ci0gICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIGN1cnJlbnRWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoaXQudmFsdWUo
KSk7CisgICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXQgPSAmdmFsdWVzOworICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBjdXJyZW50VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXQu
dmFsdWUoKSk7CiAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVl
U3BhbikgewogICAgICAgICBpc1NwYW5Qb3NpdGlvbiA9IHRydWU7CiAgICAgICAgIGl0LmFkdmFu
Y2UoKTsKLSAgICAgICAgY3VycmVudFZhbHVlID0gaXQuaGFzTW9yZSgpID8gdG9DU1NQcmltaXRp
dmVWYWx1ZShpdC52YWx1ZSgpKSA6IDA7CisgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGl0Lmhhc01v
cmUoKSA/IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdC52YWx1ZSgpKSA6IG51bGxwdHI7
CiAgICAgfQogCiAgICAgaWYgKGN1cnJlbnRWYWx1ZSAmJiBjdXJyZW50VmFsdWUtPmlzTnVtYmVy
KCkpIHsKICAgICAgICAgZ3JpZExpbmVOdW1iZXIgPSBjdXJyZW50VmFsdWUtPmdldEludFZhbHVl
KCk7CiAgICAgICAgIGl0LmFkdmFuY2UoKTsKLSAgICAgICAgY3VycmVudFZhbHVlID0gaXQuaGFz
TW9yZSgpID8gdG9DU1NQcmltaXRpdmVWYWx1ZShpdC52YWx1ZSgpKSA6IDA7CisgICAgICAgIGN1
cnJlbnRWYWx1ZSA9IGl0Lmhhc01vcmUoKSA/IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihp
dC52YWx1ZSgpKSA6IG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKGN1cnJlbnRWYWx1ZSAmJiBj
dXJyZW50VmFsdWUtPmlzU3RyaW5nKCkpIHsKQEAgLTIwNTUsNyArMjA1NSw3IEBAIExlbmd0aCBT
dHlsZVJlc29sdmVyOjpwYXJzZVNuYXBDb29yZGluYXRlKENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1
ZSkKIAogTGVuZ3RoIFN0eWxlUmVzb2x2ZXI6OnBhcnNlU25hcENvb3JkaW5hdGUoQ1NTVmFsdWVM
aXN0JiB2YWx1ZUxpc3QsIHVuc2lnbmVkIG9mZnNldCkKIHsKLSAgICByZXR1cm4gcGFyc2VTbmFw
Q29vcmRpbmF0ZSh0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZUxpc3QuaXRlbShvZmZzZXQpKSk7
CisgICAgcmV0dXJuIHBhcnNlU25hcENvb3JkaW5hdGUoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZUxpc3QuaXRlbShvZmZzZXQpKSk7CiB9CiAKIExlbmd0aFNpemUgU3R5bGVSZXNv
bHZlcjo6cGFyc2VTbmFwQ29vcmRpbmF0ZVBhaXIoQ1NTVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIHVu
c2lnbmVkIG9mZnNldCkKQEAgLTIwNjcsMTQgKzIwNjcsMTQgQEAgU2Nyb2xsU25hcFBvaW50cyBT
dHlsZVJlc29sdmVyOjpwYXJzZVNuYXBQb2ludHMoQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIFNj
cm9sbFNuYXBQb2ludHMgcG9pbnRzOwogCi0gICAgaWYgKHZhbHVlLmlzUHJpbWl0aXZlVmFsdWUo
KSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVF
bGVtZW50cykgeworICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpICYmIGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlRWxl
bWVudHMpIHsKICAgICAgICAgcG9pbnRzLnVzZXNFbGVtZW50cyA9IHRydWU7CiAgICAgICAgIHJl
dHVybiBwb2ludHM7CiAgICAgfQogCiAgICAgcG9pbnRzLmhhc1JlcGVhdCA9IGZhbHNlOwogICAg
IGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXQoJnZhbHVlKTsgaXQuaGFzTW9yZSgpOyBpdC5h
ZHZhbmNlKCkpIHsKLSAgICAgICAgYXV0byYgaXRlbVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSgqaXQudmFsdWUoKSk7CisgICAgICAgIGF1dG8mIGl0ZW1WYWx1ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqaXQudmFsdWUoKSk7CiAgICAgICAgIGlmIChhdXRvKiBsZW5ndGhSZXBl
YXQgPSBpdGVtVmFsdWUuZ2V0TGVuZ3RoUmVwZWF0VmFsdWUoKSkgewogICAgICAgICAgICAgaWYg
KGF1dG8qIGludGVydmFsID0gbGVuZ3RoUmVwZWF0LT5pbnRlcnZhbCgpKSB7CiAgICAgICAgICAg
ICAgICAgcG9pbnRzLnJlcGVhdE9mZnNldCA9IHBhcnNlU25hcENvb3JkaW5hdGUoKmludGVydmFs
KTsKQEAgLTIxMjcsNyArMjEyNyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpID8gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSkgOiAwOworICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IGlzPENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpID8gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSA6IG51bGxwdHI7CiAK
ICAgICAvLyBXaGF0IGZvbGxvd3MgaXMgYSBsaXN0IHRoYXQgbWFwcyB0aGUgQ1NTIHByb3BlcnRp
ZXMgaW50byB0aGVpciBjb3JyZXNwb25kaW5nIGZyb250LWVuZAogICAgIC8vIFJlbmRlclN0eWxl
IHZhbHVlcy4KQEAgLTIxNTAsNDggKzIxNTAsNDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAg
IGJvb2wgZGlkU2V0ID0gZmFsc2U7CiAgICAgICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJh
dG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7CiAgICAgICAgICAgICAg
ICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZW0t
PmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdGVt
LT5pc0dyYWRpZW50VmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKCp0b0NTU0dyYWRpZW50
VmFsdWUoaXRlbSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpKSwgZGlkU2V0KTsK
KyAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oKml0ZW0pKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChpczxDU1NHcmFkaWVudFZhbHVlPigqaXRlbSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2Vu
ZXJhdGVkSW1hZ2U6OmNyZWF0ZSgqZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1ZT4oKml0ZW0pLmdy
YWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29u
dGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoKnRvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZShpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlPigqaXRlbSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBk
aWRTZXQgPSB0cnVlOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQotICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoaXRlbS0+aXNJbWFnZVNldFZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJv
cGVydHlDb250ZW50LCB0b0NTU0ltYWdlU2V0VmFsdWUoaXRlbSkpLCBkaWRTZXQpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4oKml0ZW0pKSB7CisgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoc2V0T3JQZW5kaW5nRnJv
bVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4oaXRl
bSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogI2VuZGlm
CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VW
YWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQo
Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgdG9DU1NJbWFnZVZh
bHVlKGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1
ZT4oKml0ZW0pKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRl
bnQoY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgZG93bmNhc3Q8
Q1NTSW1hZ2VWYWx1ZT4oaXRlbSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRT
ZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAg
ICAgICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSkpCiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIGNvbnRlbnRWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoaXRlbSk7CisgICAgICAgICAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGNvbnRlbnRWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPigqaXRlbSk7CiAKLSAgICAgICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLT5p
c1N0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRl
bnQoY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwoKSwgZGlkU2V0KTsKKyAgICAg
ICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChjb250ZW50VmFsdWUuZ2V0U3RyaW5nVmFs
dWUoKS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUtPmlzQXR0cigpKSB7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUuaXNBdHRyKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IENhbiBhIG5hbWVzcGFjZSBiZSBzcGVjaWZpZWQgZm9y
IGFuIGF0dHIoZm9vKT8KICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLnN0eWxlKCktPnN0
eWxlVHlwZSgpID09IE5PUFNFVURPKQogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0VW5pcXVlKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLnBhcmVudFN0eWxlKCktPnNldFVuaXF1ZSgpOwotICAgICAgICAg
ICAgICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0b20sIGNvbnRlbnRWYWx1ZS0+Z2V0
U3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsKKyAgICAgICAgICAgICAgICAgICAgUXVh
bGlmaWVkTmFtZSBhdHRyKG51bGxBdG9tLCBjb250ZW50VmFsdWUuZ2V0U3RyaW5nVmFsdWUoKS5p
bXBsKCksIG51bGxBdG9tKTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSA9IHN0YXRlLmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGF0dHIpOwogICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1w
dHlBdG9tIDogdmFsdWUuaW1wbCgpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRT
ZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlciB0aGUgZmFjdCB0aGF0
IHRoZSBhdHRyaWJ1dGUgdmFsdWUgYWZmZWN0cyB0aGUgc3R5bGUuCiAgICAgICAgICAgICAgICAg
ICAgIG1fcnVsZVNldHMuZmVhdHVyZXMoKS5hdHRyaWJ1dGVDYW5vbmljYWxMb2NhbE5hbWVzSW5S
dWxlcy5hZGQoYXR0ci5sb2NhbE5hbWUoKS5pbXBsKCkpOwogICAgICAgICAgICAgICAgICAgICBt
X3J1bGVTZXRzLmZlYXR1cmVzKCkuYXR0cmlidXRlTG9jYWxOYW1lc0luUnVsZXMuYWRkKGF0dHIu
bG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRW
YWx1ZS0+aXNDb3VudGVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQ291bnRlciogY291bnRl
clZhbHVlID0gY29udGVudFZhbHVlLT5nZXRDb3VudGVyVmFsdWUoKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS5pc0NvdW50ZXIoKSkgeworICAgICAgICAgICAgICAg
ICAgICBDb3VudGVyKiBjb3VudGVyVmFsdWUgPSBjb250ZW50VmFsdWUuZ2V0Q291bnRlclZhbHVl
KCk7CiAgICAgICAgICAgICAgICAgICAgIEVMaXN0U3R5bGVUeXBlIGxpc3RTdHlsZVR5cGUgPSBO
b25lTGlzdFN0eWxlOwogICAgICAgICAgICAgICAgICAgICBDU1NWYWx1ZUlEIGxpc3RTdHlsZUlk
ZW50ID0gY291bnRlclZhbHVlLT5saXN0U3R5bGVJZGVudCgpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAobGlzdFN0eWxlSWRlbnQgIT0gQ1NTVmFsdWVOb25lKQpAQCAtMjIwMCw3ICsyMjAwLDcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29u
dGVudChXVEY6Om1vdmUoY291bnRlciksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRp
ZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoIChjb250ZW50VmFsdWUtPmdldFZhbHVlSUQoKSkgeworICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGNvbnRlbnRWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZU9wZW5RdW90ZToKICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldENvbnRlbnQoT1BFTl9RVU9URSwgZGlkU2V0KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CkBAIC0yMjU4LDIyICsyMjU4LDIwIEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzSW5p
dGlhbCkgewotICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UXVvdGVzKDApOworICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UXVvdGVzKG51bGxwdHIpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewotICAg
ICAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gdG9DU1NWYWx1ZUxpc3QodmFsdWUpOworICAg
ICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7CisgICAgICAgICAgICBDU1NWYWx1
ZUxpc3QmIGxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CiAgICAgICAgICAg
ICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gcXVvdGVzOwotICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5sZW5ndGgoKTsgaSArPSAyKSB7Ci0gICAgICAg
ICAgICAgICAgQ1NTVmFsdWUqIGZpcnN0ID0gbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhp
KTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGgoKTsgaSAr
PSAyKSB7CisgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGZpcnN0ID0gbGlzdC5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKGkpOwogICAgICAgICAgICAgICAgIC8vIGl0ZW0oKSByZXR1cm5zIG51bGwg
aWYgb3V0IG9mIGJvdW5kcyBzbyB0aGlzIGlzIHNhZmUuCi0gICAgICAgICAgICAgICAgQ1NTVmFs
dWUqIHNlY29uZCA9IGxpc3QtPml0ZW0oaSArIDEpOworICAgICAgICAgICAgICAgIENTU1ZhbHVl
KiBzZWNvbmQgPSBsaXN0Lml0ZW0oaSArIDEpOwogICAgICAgICAgICAgICAgIGlmICghc2Vjb25k
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihmaXJzdC0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAg
ICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzZWNvbmQtPmlz
UHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHN0YXJ0UXVvdGUgPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKGZpcnN0KS0+Z2V0U3RyaW5nVmFsdWUoKTsKLSAgICAgICAgICAg
ICAgICBTdHJpbmcgZW5kUXVvdGUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHNlY29uZCktPmdldFN0
cmluZ1ZhbHVlKCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHN0YXJ0UXVvdGUgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oKmZpcnN0KS5nZXRTdHJpbmdWYWx1ZSgpOworICAgICAgICAg
ICAgICAgIFN0cmluZyBlbmRRdW90ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqc2Vj
b25kKS5nZXRTdHJpbmdWYWx1ZSgpOwogICAgICAgICAgICAgICAgIHF1b3Rlcy5hcHBlbmQoc3Rk
OjptYWtlX3BhaXIoc3RhcnRRdW90ZSwgZW5kUXVvdGUpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFF1b3RlcyhRdW90ZXNEYXRhOjpjcmVhdGUocXVvdGVz
KSk7CkBAIC0yMzE4LDI0ICsyMzE2LDI0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZUZy
b21TcGVjaWZpZWRTaXplKGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIGZvbnREZXNj
cmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSwgc3RhdGUuc3R5bGUo
KSwgZG9jdW1lbnQoKSkpOwogICAgICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5p
c0ZvbnRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBDU1NGb250VmFsdWUqIGZvbnQgPSB0b0NTU0Zv
bnRWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIWZvbnQtPnN0eWxlIHx8ICFmb250LT52
YXJpYW50IHx8ICFmb250LT53ZWlnaHQKLSAgICAgICAgICAgICAgICB8fCAhZm9udC0+c2l6ZSB8
fCAhZm9udC0+bGluZUhlaWdodCB8fCAhZm9udC0+ZmFtaWx5KQorICAgICAgICB9IGVsc2UgaWYg
KGlzPENTU0ZvbnRWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICAgICAgQ1NTRm9udFZhbHVlJiBm
b250ID0gZG93bmNhc3Q8Q1NTRm9udFZhbHVlPigqdmFsdWUpOworICAgICAgICAgICAgaWYgKCFm
b250LnN0eWxlIHx8ICFmb250LnZhcmlhbnQgfHwgIWZvbnQud2VpZ2h0CisgICAgICAgICAgICAg
ICAgfHwgIWZvbnQuc2l6ZSB8fCAhZm9udC5saW5lSGVpZ2h0IHx8ICFmb250LmZhbWlseSkKICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5Rm9udFN0eWxlLCBmb250LT5zdHlsZS5nZXQoKSk7Ci0gICAgICAgICAgICBhcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIGZvbnQtPnZhcmlhbnQuZ2V0KCkpOwotICAgICAg
ICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGZvbnQtPndlaWdodC5n
ZXQoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlLCBm
b250LnN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlG
b250VmFyaWFudCwgZm9udC52YXJpYW50LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBmb250LndlaWdodC5nZXQoKSk7CiAgICAgICAgICAg
ICAvLyBUaGUgcHJldmlvdXMgcHJvcGVydGllcyBjYW4gZGlydHkgb3VyIGZvbnQgYnV0IHRoZXkg
ZG9uJ3QgdHJ5IHRvIHJlYWQgdGhlIGZvbnQncwogICAgICAgICAgICAgLy8gcHJvcGVydGllcyBi
YWNrLCB3aGljaCBpcyBzYWZlLiBIb3dldmVyIGlmIGZvbnQtc2l6ZSBpcyB1c2luZyB0aGUgJ2V4
JyB1bml0LCBpdCB3aWxsCiAgICAgICAgICAgICAvLyBuZWVkIHF1ZXJ5IHRoZSBkaXJ0aWVkIGZv
bnQncyB4LWhlaWdodCB0byBnZXQgdGhlIGNvbXB1dGVkIHNpemUuIFRvIGJlIHNhZmUgaW4gdGhp
cwogICAgICAgICAgICAgLy8gY2FzZSwgbGV0J3MganVzdCB1cGRhdGUgdGhlIGZvbnQgbm93Lgog
ICAgICAgICAgICAgdXBkYXRlRm9udCgpOwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUZvbnRTaXplLCBmb250LT5zaXplLmdldCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgZm9udC5zaXplLmdldCgpKTsKIAotICAgICAgICAg
ICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKGZvbnQtPmxpbmVIZWlnaHQuZ2V0KCkpOworICAg
ICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKGZvbnQubGluZUhlaWdodC5nZXQoKSk7
CiAKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBmb250
LT5mYW1pbHkuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZv
bnRGYW1pbHksIGZvbnQuZmFtaWx5LmdldCgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47
CiAKQEAgLTI0MDUsMTcgKzI0MDMsMTcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIAogICAgICAgICBmb3IgKENT
U1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7
CiAgICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1ZSgpOwotICAgICAgICAg
ICAgaWYgKCFjdXJyVmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKKyAgICAgICAgICAgIGlmICghaXM8
Q1NTU2hhZG93VmFsdWU+KCpjdXJyVmFsdWUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgQ1NTU2hhZG93VmFsdWUqIGl0ZW0gPSB0b0NTU1NoYWRvd1ZhbHVlKGN1cnJW
YWx1ZSk7Ci0gICAgICAgICAgICBpbnQgeCA9IGl0ZW0tPngtPmNvbXB1dGVMZW5ndGg8aW50Pihz
dGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwotICAgICAgICAgICAgaW50IHkgPSBp
dGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSgpKTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNv
bXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpIDogMDsK
LSAgICAgICAgICAgIGludCBzcHJlYWQgPSBpdGVtLT5zcHJlYWQgPyBpdGVtLT5zcHJlYWQtPmNv
bXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpIDogMDsK
LSAgICAgICAgICAgIFNoYWRvd1N0eWxlIHNoYWRvd1N0eWxlID0gaXRlbS0+c3R5bGUgJiYgaXRl
bS0+c3R5bGUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUluc2V0ID8gSW5zZXQgOiBOb3JtYWw7
CisgICAgICAgICAgICBDU1NTaGFkb3dWYWx1ZSYgaXRlbSA9IGRvd25jYXN0PENTU1NoYWRvd1Zh
bHVlPigqY3VyclZhbHVlKTsKKyAgICAgICAgICAgIGludCB4ID0gaXRlbS54LT5jb21wdXRlTGVu
Z3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKKyAgICAgICAgICAg
IGludCB5ID0gaXRlbS55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSgpKTsKKyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS5ibHVyID8gaXRlbS5i
bHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgp
KSA6IDA7CisgICAgICAgICAgICBpbnQgc3ByZWFkID0gaXRlbS5zcHJlYWQgPyBpdGVtLnNwcmVh
ZC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSkg
OiAwOworICAgICAgICAgICAgU2hhZG93U3R5bGUgc2hhZG93U3R5bGUgPSBpdGVtLnN0eWxlICYm
IGl0ZW0uc3R5bGUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUluc2V0ID8gSW5zZXQgOiBOb3Jt
YWw7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKLSAgICAgICAgICAgIGlmIChpdGVtLT5jb2xv
cikKLSAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGl0ZW0t
PmNvbG9yLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChpdGVtLmNvbG9yKQorICAgICAgICAgICAg
ICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS5jb2xvci5nZXQoKSk7CiAg
ICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS5zdHlsZSgpKQogICAgICAgICAgICAgICAgIGNvbG9y
ID0gc3RhdGUuc3R5bGUoKS0+Y29sb3IoKTsKIApAQCAtMjQzNCwxNyArMjQzMiwxNyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCF2
YWx1ZS0+aXNSZWZsZWN0VmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NSZWZsZWN0VmFsdWU+
KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUmVmbGVjdFZhbHVl
KiByZWZsZWN0VmFsdWUgPSB0b0NTU1JlZmxlY3RWYWx1ZSh2YWx1ZSk7CisgICAgICAgIENTU1Jl
ZmxlY3RWYWx1ZSYgcmVmbGVjdFZhbHVlID0gZG93bmNhc3Q8Q1NTUmVmbGVjdFZhbHVlPigqdmFs
dWUpOwogICAgICAgICBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiByZWZsZWN0aW9uID0gU3R5bGVS
ZWZsZWN0aW9uOjpjcmVhdGUoKTsKLSAgICAgICAgcmVmbGVjdGlvbi0+c2V0RGlyZWN0aW9uKCpy
ZWZsZWN0VmFsdWUtPmRpcmVjdGlvbigpKTsKLSAgICAgICAgaWYgKHJlZmxlY3RWYWx1ZS0+b2Zm
c2V0KCkpCi0gICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVjdFZhbHVlLT5v
ZmZzZXQoKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50
Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdGF0ZS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCkpKTsKKyAgICAgICAgcmVmbGVjdGlvbi0+c2V0RGlyZWN0aW9uKCpyZWZsZWN0
VmFsdWUuZGlyZWN0aW9uKCkpOworICAgICAgICBpZiAocmVmbGVjdFZhbHVlLm9mZnNldCgpKQor
ICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RWYWx1ZS5vZmZzZXQoKS0+
Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lv
biB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRh
KCkpKTsKICAgICAgICAgTmluZVBpZWNlSW1hZ2UgbWFzazsKICAgICAgICAgbWFzay5zZXRNYXNr
RGVmYXVsdHMoKTsKLSAgICAgICAgbV9zdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZShpZCwgcmVm
bGVjdFZhbHVlLT5tYXNrKCksIG1hc2spOworICAgICAgICBtX3N0eWxlTWFwLm1hcE5pbmVQaWVj
ZUltYWdlKGlkLCByZWZsZWN0VmFsdWUubWFzaygpLCBtYXNrKTsKICAgICAgICAgcmVmbGVjdGlv
bi0+c2V0TWFzayhtYXNrKTsKIAogICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hSZWZsZWN0
KHJlZmxlY3Rpb24ucmVsZWFzZSgpKTsKQEAgLTI2NjUsMTAgKzI2NjMsMTAgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghdmFsdWUt
PmlzTGluZUJveENvbnRhaW5WYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENTU0xpbmVCb3hDb250
YWluVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0TGluZUJveENvbnRhaW4odG9DU1NMaW5lQm94Q29udGFpblZhbHVlKHZhbHVl
KS0+dmFsdWUoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVCb3hDb250YWluKGRv
d25jYXN0PENTU0xpbmVCb3hDb250YWluVmFsdWU+KCp2YWx1ZSkudmFsdWUoKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTI2NzksMTkgKzI2NzcsMTkgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghdmFsdWUtPmlzVmFs
dWVMaXN0KCkpCisgICAgICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24g
PSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgQ1NTVmFsdWVMaXN0
KiBsaXN0ID0gdG9DU1NWYWx1ZUxpc3QodmFsdWUpOworICAgICAgICBDU1NWYWx1ZUxpc3QmIGxp
c3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CiAgICAgICAgIFJlZlB0cjxGb250
RmVhdHVyZVNldHRpbmdzPiBzZXR0aW5ncyA9IEZvbnRGZWF0dXJlU2V0dGluZ3M6OmNyZWF0ZSgp
OwotICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7Ci0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gbGlzdC0+
aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKLSAgICAgICAgICAgIGlmICghaXRlbS0+aXNGb250
RmVhdHVyZVZhbHVlKCkpCisgICAgICAgIGludCBsZW5ndGggPSBsaXN0Lmxlbmd0aCgpOworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBDU1NW
YWx1ZSogaXRlbSA9IGxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAgICAgICAg
IGlmICghaXM8Q1NTRm9udEZlYXR1cmVWYWx1ZT4oKml0ZW0pKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgQ1NTRm9udEZlYXR1cmVWYWx1ZSogZmVhdHVyZSA9IHRvQ1NT
Rm9udEZlYXR1cmVWYWx1ZShpdGVtKTsKLSAgICAgICAgICAgIHNldHRpbmdzLT5hcHBlbmQoRm9u
dEZlYXR1cmUoZmVhdHVyZS0+dGFnKCksIGZlYXR1cmUtPnZhbHVlKCkpKTsKKyAgICAgICAgICAg
IENTU0ZvbnRGZWF0dXJlVmFsdWUmIGZlYXR1cmUgPSBkb3duY2FzdDxDU1NGb250RmVhdHVyZVZh
bHVlPigqaXRlbSk7CisgICAgICAgICAgICBzZXR0aW5ncy0+YXBwZW5kKEZvbnRGZWF0dXJlKGZl
YXR1cmUudGFnKCksIGZlYXR1cmUudmFsdWUoKSkpOwogICAgICAgICB9CiAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRGZWF0dXJlU2V0dGluZ3Moc2V0dGluZ3MucmVsZWFzZSgpKTsKICAgICAg
ICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CkBAIC0yODMwLDggKzI4Mjgs
OCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAg
ICAgQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSogZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSA9IHRv
Q1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGNvbnN0IE5hbWVkR3Jp
ZEFyZWFNYXAmIG5ld05hbWVkR3JpZEFyZWFzID0gZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS0+Z3Jp
ZEFyZWFNYXAoKTsKKyAgICAgICAgQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSYgZ3JpZFRlbXBs
YXRlQXJlYXNWYWx1ZSA9IGRvd25jYXN0PENTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWU+KCp2YWx1
ZSk7CisgICAgICAgIGNvbnN0IE5hbWVkR3JpZEFyZWFNYXAmIG5ld05hbWVkR3JpZEFyZWFzID0g
Z3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5ncmlkQXJlYU1hcCgpOwogCiAgICAgICAgIE5hbWVkR3Jp
ZExpbmVzTWFwIG5hbWVkR3JpZENvbHVtbkxpbmVzID0gc3RhdGUuc3R5bGUoKS0+bmFtZWRHcmlk
Q29sdW1uTGluZXMoKTsKICAgICAgICAgTmFtZWRHcmlkTGluZXNNYXAgbmFtZWRHcmlkUm93TGlu
ZXMgPSBzdGF0ZS5zdHlsZSgpLT5uYW1lZEdyaWRSb3dMaW5lcygpOwpAQCAtMjg0MCwyNyArMjgz
OCwyNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXROYW1lZEdyaWRD
b2x1bW5MaW5lcyhuYW1lZEdyaWRDb2x1bW5MaW5lcyk7CiAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldE5hbWVkR3JpZFJvd0xpbmVzKG5hbWVkR3JpZFJvd0xpbmVzKTsKIAotICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhKGdyaWRUZW1wbGF0ZUFyZWFzVmFsdWUtPmdyaWRB
cmVhTWFwKCkpOwotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhUm93Q291
bnQoZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS0+cm93Q291bnQoKSk7Ci0gICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldE5hbWVkR3JpZEFyZWFDb2x1bW5Db3VudChncmlkVGVtcGxhdGVBcmVhc1ZhbHVl
LT5jb2x1bW5Db3VudCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQXJl
YShncmlkVGVtcGxhdGVBcmVhc1ZhbHVlLmdyaWRBcmVhTWFwKCkpOworICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhUm93Q291bnQoZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5y
b3dDb3VudCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQXJlYUNvbHVt
bkNvdW50KGdyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuY29sdW1uQ291bnQoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRBdXRvRmxvdzogewog
ICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChncmlkQXV0b0Zsb3csIEdyaWRBdXRv
Rmxvdyk7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgIGlmICgh
aXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBD
U1NWYWx1ZUxpc3QqIGxpc3QgPSB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSk7CisgICAgICAgIENTU1Zh
bHVlTGlzdCYgbGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKIAotICAgICAg
ICBpZiAoIWxpc3QtPmxlbmd0aCgpKSB7CisgICAgICAgIGlmICghbGlzdC5sZW5ndGgoKSkgewog
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0R3JpZEF1dG9GbG93KFJlbmRlclN0eWxlOjpp
bml0aWFsR3JpZEF1dG9GbG93KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
LSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0ID0gdG9DU1NQcmltaXRpdmVWYWx1ZShs
aXN0LT5pdGVtKDApKTsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZCA9IGxpc3Qt
Pmxlbmd0aCgpID09IDIgPyB0b0NTU1ByaW1pdGl2ZVZhbHVlKGxpc3QtPml0ZW0oMSkpIDogbnVs
bHB0cjsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGZpcnN0ID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCpsaXN0Lml0ZW0oMCkpOworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
c2Vjb25kID0gbGlzdC5sZW5ndGgoKSA9PSAyID8gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KGxpc3QuaXRlbSgxKSkgOiBudWxscHRyOwogCiAgICAgICAgIEdyaWRBdXRvRmxvdyBhdXRvRmxv
dyA9IFJlbmRlclN0eWxlOjppbml0aWFsR3JpZEF1dG9GbG93KCk7Ci0gICAgICAgIHN3aXRjaCAo
Zmlyc3QtPmdldFZhbHVlSUQoKSkgeworICAgICAgICBzd2l0Y2ggKGZpcnN0LmdldFZhbHVlSUQo
KSkgewogICAgICAgICBjYXNlIENTU1ZhbHVlUm93OgogICAgICAgICAgICAgaWYgKHNlY29uZCkK
ICAgICAgICAgICAgICAgICBhdXRvRmxvdyA9IHNlY29uZC0+Z2V0VmFsdWVJRCgpID09IENTU1Zh
bHVlRGVuc2UgPyBBdXRvRmxvd1Jvd0RlbnNlIDogQXV0b0Zsb3dTdGFja1JvdzsKQEAgLTI5MDcs
MTIgKzI5MDUsMTIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFNjcm9sbFNuYXBEZXN0aW5hdGlvbjogewogICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChzY3JvbGxTbmFwRGVzdGluYXRpb24sIFNjcm9sbFNuYXBEZXN0aW5h
dGlvbikKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0U2Nyb2xsU25hcERlc3RpbmF0aW9uKHBh
cnNlU25hcENvb3JkaW5hdGVQYWlyKHRvQ1NTVmFsdWVMaXN0KCp2YWx1ZSksIDApKTsKKyAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0U2Nyb2xsU25hcERlc3RpbmF0aW9uKHBhcnNlU25hcENvb3Jk
aW5hdGVQYWlyKGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKSwgMCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTY3JvbGxTbmFwQ29vcmRp
bmF0ZTogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChzY3JvbGxTbmFwQ29v
cmRpbmF0ZXMsIFNjcm9sbFNuYXBDb29yZGluYXRlcykKLSAgICAgICAgQ1NTVmFsdWVMaXN0JiB2
YWx1ZUxpc3QgPSB0b0NTU1ZhbHVlTGlzdCgqdmFsdWUpOworICAgICAgICBDU1NWYWx1ZUxpc3Qm
IHZhbHVlTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKICAgICAgICAgQVNT
RVJUKCEodmFsdWVMaXN0Lmxlbmd0aCgpICUgMikpOwogICAgICAgICBzaXplX3QgcG9pbnRDb3Vu
dCA9IHZhbHVlTGlzdC5sZW5ndGgoKSAvIDI7CiAgICAgICAgIFZlY3RvcjxMZW5ndGhTaXplPiBj
b29yZGluYXRlczsKQEAgLTMyMjAsMjQgKzMyMTgsMjQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIAogUGFzc1Jl
ZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSkKIHsKLSAgICBpZiAodmFsdWUtPmlzSW1hZ2VWYWx1
ZSgpKQotICAgICAgICByZXR1cm4gY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCB0
b0NTU0ltYWdlVmFsdWUodmFsdWUpKTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oKnZhbHVl
KSkKKyAgICAgICAgcmV0dXJuIGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgZG93
bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4odmFsdWUpKTsKIAotICAgIGlmICh2YWx1ZS0+aXNJbWFnZUdl
bmVyYXRvclZhbHVlKCkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT5pc0dyYWRpZW50VmFsdWUoKSkK
LSAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHks
ICp0b0NTU0dyYWRpZW50VmFsdWUodmFsdWUpLT5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCh0
aGlzKSk7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVy
dHksIHRvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSgqdmFsdWUpKTsKKyAgICBpZiAoaXM8Q1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICBpZiAoaXM8Q1NTR3JhZGllbnRW
YWx1ZT4oKnZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9t
VmFsdWUocHJvcGVydHksICpkb3duY2FzdDxDU1NHcmFkaWVudFZhbHVlPigqdmFsdWUpLmdyYWRp
ZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9y
UGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZT4oKnZhbHVlKSk7CiAgICAgfQogCiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAgaWYg
KHZhbHVlLT5pc0ltYWdlU2V0VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIHNldE9yUGVuZGluZ0Zy
b21WYWx1ZShwcm9wZXJ0eSwgdG9DU1NJbWFnZVNldFZhbHVlKHZhbHVlKSk7CisgICAgaWYgKGlz
PENTU0ltYWdlU2V0VmFsdWU+KCp2YWx1ZSkpCisgICAgICAgIHJldHVybiBzZXRPclBlbmRpbmdG
cm9tVmFsdWUocHJvcGVydHksIGRvd25jYXN0PENTU0ltYWdlU2V0VmFsdWU+KHZhbHVlKSk7CiAj
ZW5kaWYKIAotICAgIGlmICh2YWx1ZS0+aXNDdXJzb3JJbWFnZVZhbHVlKCkpCi0gICAgICAgIHJl
dHVybiBjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHRvQ1NTQ3Vyc29ySW1hZ2VW
YWx1ZSh2YWx1ZSkpOworICAgIGlmIChpczxDU1NDdXJzb3JJbWFnZVZhbHVlPigqdmFsdWUpKQor
ICAgICAgICByZXR1cm4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBkb3duY2Fz
dDxDU1NDdXJzb3JJbWFnZVZhbHVlPih2YWx1ZSkpOwogCi0gICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6
Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdl
VmFsdWUqIHZhbHVlKQpAQCAtMzI1MCw5ICszMjQ4LDkgQEAgUGFzc1JlZlB0cjxTdHlsZUltYWdl
PiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBw
cm8KIAogUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBl
bmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKHZhbHVlLmlzRmlsdGVySW1hZ2VWYWx1ZSgpKSB7Cisg
ICAgaWYgKGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICAvLyBGaWx0
ZXJJbWFnZSBuZWVkcyB0byBjYWxjdWxhdGUgRmlsdGVyT3BlcmF0aW9ucy4KLSAgICAgICAgdG9D
U1NGaWx0ZXJJbWFnZVZhbHVlKHZhbHVlKS5jcmVhdGVGaWx0ZXJPcGVyYXRpb25zKHRoaXMpOwor
ICAgICAgICBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPih2YWx1ZSkuY3JlYXRlRmlsdGVy
T3BlcmF0aW9ucyh0aGlzKTsKICAgICB9CiAKICAgICBpZiAodmFsdWUuaXNQZW5kaW5nKCkpIHsK
QEAgLTM1MTcsOSArMzUxNSw5IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3Bl
cmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgRmlsdGVyT3BlcmF0aW9ucyYKICAgICBpZiAoIWlu
VmFsdWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoaW5WYWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoaW5WYWx1ZSk7Ci0gICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKKyAgICBpZiAoaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KCppblZhbHVlKSkgeworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmluVmFsdWUpOworICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTM1MjksMjEgKzM1MjcsMjEg
QEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBp
blZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJgogICAgIEZpbHRlck9wZXJhdGlvbnMgb3BlcmF0aW9u
czsKICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSBpblZhbHVlOyBpLmhhc01vcmUo
KTsgaS5hZHZhbmNlKCkpIHsKICAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUo
KTsKLSAgICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzV2ViS2l0Q1NTRmlsdGVyVmFsdWUoKSkKKyAg
ICAgICAgaWYgKCFpczxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4oKmN1cnJWYWx1ZSkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICBXZWJLaXRDU1NGaWx0ZXJWYWx1ZSogZmlsdGVyVmFs
dWUgPSB0b1dlYktpdENTU0ZpbHRlclZhbHVlKGkudmFsdWUoKSk7Ci0gICAgICAgIEZpbHRlck9w
ZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBlID0gZmlsdGVyT3BlcmF0aW9uRm9y
VHlwZShmaWx0ZXJWYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKTsKKyAgICAgICAgV2ViS2l0Q1NTRmls
dGVyVmFsdWUmIGZpbHRlclZhbHVlID0gZG93bmNhc3Q8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+KCpp
LnZhbHVlKCkpOworICAgICAgICBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgb3BlcmF0
aW9uVHlwZSA9IGZpbHRlck9wZXJhdGlvbkZvclR5cGUoZmlsdGVyVmFsdWUub3BlcmF0aW9uVHlw
ZSgpKTsKIAogICAgICAgICBpZiAob3BlcmF0aW9uVHlwZSA9PSBGaWx0ZXJPcGVyYXRpb246OlJF
RkVSRU5DRSkgewotICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSAhPSAxKQor
ICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLmxlbmd0aCgpICE9IDEpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogYXJndW1lbnQgPSBmaWx0ZXJWYWx1
ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKTsKKyAgICAgICAgICAgIENTU1ZhbHVlJiBhcmd1
bWVudCA9ICpmaWx0ZXJWYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApOwogCi0gICAgICAg
ICAgICBpZiAoIWFyZ3VtZW50LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICBpZiAo
IWlzPENTU1ByaW1pdGl2ZVZhbHVlPihhcmd1bWVudCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUoKmFyZ3VtZW50KTsKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihhcmd1bWVu
dCk7CiAgICAgICAgICAgICBTdHJpbmcgY3NzVXJsID0gcHJpbWl0aXZlVmFsdWUuZ2V0U3RyaW5n
VmFsdWUoKTsKICAgICAgICAgICAgIFVSTCB1cmwgPSBtX3N0YXRlLmRvY3VtZW50KCkuY29tcGxl
dGVVUkwoY3NzVXJsKTsKIApAQCAtMzU2MCwyNCArMzU1OCwyNCBAQCBib29sIFN0eWxlUmVzb2x2
ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIEZpbHRlck9wZXJh
dGlvbnMmCiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdFZhbHVlID0gbnVsbHB0cjsK
ICAgICAgICAgaWYgKG9wZXJhdGlvblR5cGUgIT0gRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURP
VykgewogICAgICAgICAgICAgYm9vbCBoYXZlTm9uUHJpbWl0aXZlVmFsdWUgPSBmYWxzZTsKLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCk7
ICsraikgewotICAgICAgICAgICAgICAgIGlmICghZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soaiktPmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IGZpbHRlclZhbHVlLmxlbmd0aCgpOyArK2opIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqZmlsdGVyVmFsdWUuaXRlbVdpdGhvdXRC
b3VuZHNDaGVjayhqKSkpIHsKICAgICAgICAgICAgICAgICAgICAgaGF2ZU5vblByaW1pdGl2ZVZh
bHVlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGhhdmVOb25QcmltaXRpdmVWYWx1ZSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+
bGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgZmlyc3RWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFs
dWUoZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOworICAgICAgICAgICAg
aWYgKGZpbHRlclZhbHVlLmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIGZpcnN0VmFsdWUgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oZmlsdGVyVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHND
aGVjaygwKSk7CiAgICAgICAgIH0KIAotICAgICAgICBzd2l0Y2ggKGZpbHRlclZhbHVlLT5vcGVy
YXRpb25UeXBlKCkpIHsKKyAgICAgICAgc3dpdGNoIChmaWx0ZXJWYWx1ZS5vcGVyYXRpb25UeXBl
KCkpIHsKICAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6R3JheXNjYWxlRmlsdGVy
T3BlcmF0aW9uOgogICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpTZXBpYUZpbHRl
ck9wZXJhdGlvbjoKICAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2F0dXJhdGVG
aWx0ZXJPcGVyYXRpb246IHsKICAgICAgICAgICAgIGRvdWJsZSBhbW91bnQgPSAxOwotICAgICAg
ICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA9PSAxKSB7CisgICAgICAgICAgICBpZiAo
ZmlsdGVyVmFsdWUubGVuZ3RoKCkgPT0gMSkgewogICAgICAgICAgICAgICAgIGFtb3VudCA9IGZp
cnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CiAgICAgICAgICAgICAgICAgaWYgKGZpcnN0VmFs
dWUtPmlzUGVyY2VudGFnZSgpKQogICAgICAgICAgICAgICAgICAgICBhbW91bnQgLz0gMTAwOwpA
QCAtMzU4OCw3ICszNTg2LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVy
YXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJgogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Okh1ZVJvdGF0ZUZpbHRlck9wZXJhdGlv
bjogewogICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gMDsKLSAgICAgICAgICAgIGlmIChmaWx0
ZXJWYWx1ZS0+bGVuZ3RoKCkgPT0gMSkKKyAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5sZW5n
dGgoKSA9PSAxKQogICAgICAgICAgICAgICAgIGFuZ2xlID0gZmlyc3RWYWx1ZS0+Y29tcHV0ZURl
Z3JlZXMoKTsKIAogICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKEJh
c2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShhbmdsZSwgb3BlcmF0aW9uVHlw
ZSkpOwpAQCAtMzU5OCw4ICszNTk2LDggQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0
ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJgogICAgICAg
ICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpCcmlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOgog
ICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpDb250cmFzdEZpbHRlck9wZXJhdGlv
bjoKICAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6T3BhY2l0eUZpbHRlck9wZXJh
dGlvbjogewotICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IChmaWx0ZXJWYWx1ZS0+b3BlcmF0
aW9uVHlwZSgpID09IFdlYktpdENTU0ZpbHRlclZhbHVlOjpCcmlnaHRuZXNzRmlsdGVyT3BlcmF0
aW9uKSA/IDAgOiAxOwotICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA9PSAx
KSB7CisgICAgICAgICAgICBkb3VibGUgYW1vdW50ID0gKGZpbHRlclZhbHVlLm9wZXJhdGlvblR5
cGUoKSA9PSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6QnJpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbikg
PyAwIDogMTsKKyAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5sZW5ndGgoKSA9PSAxKSB7CiAg
ICAgICAgICAgICAgICAgYW1vdW50ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKICAg
ICAgICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCiAgICAgICAgICAg
ICAgICAgICAgIGFtb3VudCAvPSAxMDA7CkBAIC0zNjEwLDcgKzM2MDgsNyBAQCBib29sIFN0eWxl
UmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIEZpbHRl
ck9wZXJhdGlvbnMmCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZTo6Qmx1ckZpbHRlck9wZXJhdGlvbjogewogICAgICAgICAgICAgTGVuZ3RoIHN0ZERldmlhdGlv
biA9IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0
aCgpID49IDEpCisgICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUubGVuZ3RoKCkgPj0gMSkKICAg
ICAgICAgICAgICAgICBzdGREZXZpYXRpb24gPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZh
bHVlLCBzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwogICAgICAgICAgICAgaWYg
KHN0ZERldmlhdGlvbi5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTM2MTksMjEgKzM2MTcsMjEgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0
ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZTo6RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjogewotICAgICAgICAgICAgaWYgKGZpbHRlclZh
bHVlLT5sZW5ndGgoKSAhPSAxKQorICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLmxlbmd0aCgp
ICE9IDEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBDU1NW
YWx1ZSogY3NzVmFsdWUgPSBmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKTsK
LSAgICAgICAgICAgIGlmICghY3NzVmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKKyAgICAgICAgICAg
IENTU1ZhbHVlJiBjc3NWYWx1ZSA9ICZmaWx0ZXJWYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDApOworICAgICAgICAgICAgaWYgKCFpczxDU1NTaGFkb3dWYWx1ZT4oY3NzVmFsdWUpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBDU1NTaGFkb3dWYWx1ZSogaXRl
bSA9IHRvQ1NTU2hhZG93VmFsdWUoY3NzVmFsdWUpOwotICAgICAgICAgICAgaW50IHggPSBpdGVt
LT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgp
KTsKLSAgICAgICAgICAgIGludCB5ID0gaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRl
LmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CisgICAgICAgICAgICBDU1NTaGFkb3dWYWx1
ZSYgaXRlbSA9IGRvd25jYXN0PENTU1NoYWRvd1ZhbHVlPihjc3NWYWx1ZSk7CisgICAgICAgICAg
ICBpbnQgeCA9IGl0ZW0ueC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEoKSk7CisgICAgICAgICAgICBpbnQgeSA9IGl0ZW0ueS0+Y29tcHV0ZUxlbmd0
aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CiAgICAgICAgICAgICBJ
bnRQb2ludCBsb2NhdGlvbih4LCB5KTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1
ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCkpIDogMDsKKyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS5ibHVyID8gaXRl
bS5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSgpKSA6IDA7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKLSAgICAgICAgICAgIGlmIChpdGVt
LT5jb2xvcikKLSAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
KGl0ZW0tPmNvbG9yLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChpdGVtLmNvbG9yKQorICAgICAg
ICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS5jb2xvci5nZXQo
KSk7CiAKICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChEcm9wU2hh
ZG93RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUobG9jYXRpb24sIGJsdXIsIGNvbG9yLmlzVmFsaWQo
KSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFyZW50KSk7CiAgICAgICAgICAgICBicmVhazsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9UcmFuc2Zvcm1GdW5jdGlvbnMuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL1RyYW5zZm9ybUZ1bmN0aW9ucy5jcHAKaW5kZXggMDY2M2MzMTE5NTgx
MjdlMjg4OGE3ZDkwNDI2NTNlOWIxYWFhZWFlYy4uNjY4YjE0ODliYmViMWM0ODc5ZTRhYjIyOTI0
ZWQ3ZDY1ODYwYjU2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1RyYW5zZm9ybUZ1
bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1RyYW5zZm9ybUZ1bmN0aW9ucy5j
cHAKQEAgLTkwLDE4ICs5MCwxOCBAQCBib29sIHRyYW5zZm9ybXNGb3JWYWx1ZShDU1NWYWx1ZSog
dmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcgogCiAgICAgVHJh
bnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwogICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0
b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKLSAgICAgICAgQ1NTVmFs
dWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUoKTsKKyAgICAgICAgQ1NTVmFsdWUmIGN1cnJWYWx1ZSA9
ICppLnZhbHVlKCk7CiAKLSAgICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZT4oY3Vy
clZhbHVlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlKiB0cmFuc2Zvcm1WYWx1ZSA9IHRvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoaS52
YWx1ZSgpKTsKLSAgICAgICAgaWYgKCF0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkpCisgICAgICAg
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlJiB0cmFuc2Zvcm1WYWx1ZSA9IGRvd25jYXN0PFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlPihjdXJyVmFsdWUpOworICAgICAgICBpZiAoIXRyYW5zZm9ybVZh
bHVlLmxlbmd0aCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgYm9vbCBoYXZl
Tm9uUHJpbWl0aXZlVmFsdWUgPSBmYWxzZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsg
aiA8IHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKTsgKytqKSB7Ci0gICAgICAgICAgICBpZiAoIXRy
YW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGopLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHRyYW5zZm9ybVZhbHVlLmxl
bmd0aCgpOyArK2opIHsKKyAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0
cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGopKSkgewogICAgICAgICAgICAg
ICAgIGhhdmVOb25QcmltaXRpdmVWYWx1ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CkBAIC0xMDksMjcgKzEwOSwyNyBAQCBib29sIHRyYW5zZm9ybXNGb3JW
YWx1ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNv
bnZlcgogICAgICAgICBpZiAoaGF2ZU5vblByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0VmFsdWUgPSB0b0NTU1By
aW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsK
KyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGZpcnN0VmFsdWUgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOwog
Ci0gICAgICAgIHN3aXRjaCAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkgeworICAg
ICAgICBzd2l0Y2ggKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSkgewogICAgICAgICBj
YXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjoKICAg
ICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0
aW9uOgogICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zv
cm1PcGVyYXRpb246IHsKICAgICAgICAgICAgIGRvdWJsZSBzeCA9IDEuMDsKICAgICAgICAgICAg
IGRvdWJsZSBzeSA9IDEuMDsKLSAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0
aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVy
YXRpb24pCi0gICAgICAgICAgICAgICAgc3kgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgp
OworICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSA9PSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAg
ICAgICAgIHN5ID0gZmlyc3RWYWx1ZS5nZXREb3VibGVWYWx1ZSgpOwogICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgc3ggPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwot
ICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpICE9IFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHRvQ1NT
UHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91YmxlVmFs
dWUoKTsKKyAgICAgICAgICAgICAgICBzeCA9IGZpcnN0VmFsdWUuZ2V0RG91YmxlVmFsdWUoKTsK
KyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9uVHlwZSgpICE9IFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLmxlbmd0aCgpID4gMSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHNlY29uZFZhbHVlID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc2Vjb25kVmFsdWUuZ2V0RG91
YmxlVmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgICAgICBzeSA9IHN4OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTY2FsZVRyYW5zZm9ybU9wZXJh
dGlvbjo6Y3JlYXRlKHN4LCBzeSwgMS4wLCB0cmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9y
bVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJh
dGlvbnMoKS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShzeCwgc3ksIDEu
MCwgdHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpTY2FsZVpUcmFuc2Zvcm1PcGVyYXRpb246CkBAIC0xMzcsMjUgKzEz
NywyNSBAQCBib29sIHRyYW5zZm9ybXNGb3JWYWx1ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcgogICAgICAgICAgICAgZG91YmxlIHN4ID0g
MS4wOwogICAgICAgICAgICAgZG91YmxlIHN5ID0gMS4wOwogICAgICAgICAgICAgZG91YmxlIHN6
ID0gMS4wOwotICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkg
PT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWlRyYW5zZm9ybU9wZXJhdGlvbikKLSAg
ICAgICAgICAgICAgICBzeiA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAg
ICAgICBlbHNlIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRpb24pCi0gICAgICAgICAgICAg
ICAgc3kgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgaWYgKHRy
YW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
U2NhbGVaVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIHN6ID0gZmlyc3RWYWx1
ZS5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUu
b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zv
cm1PcGVyYXRpb24pCisgICAgICAgICAgICAgICAgc3kgPSBmaXJzdFZhbHVlLmdldERvdWJsZVZh
bHVlKCk7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzeCA9IGZpcnN0VmFs
dWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVl
LT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWFRyYW5z
Zm9ybU9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUt
Pmxlbmd0aCgpID4gMikgewotICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHRoaXJkVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN6ID0gdGhp
cmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBzeCA9IGZpcnN0VmFs
dWUuZ2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUu
b3BlcmF0aW9uVHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zv
cm1PcGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLmxl
bmd0aCgpID4gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUm
IHRoaXJkVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVl
Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpOworICAgICAgICAgICAgICAgICAgICAgICAgc3og
PSB0aGlyZFZhbHVlLmdldERvdWJsZVZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91Ymxl
VmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLmxlbmd0aCgp
ID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHNlY29u
ZFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc2Vj
b25kVmFsdWUuZ2V0RG91YmxlVmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgICAgICBzeSA9IHN4OwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTY2Fs
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHN4LCBzeSwgc3osIHRyYW5zZm9ybU9wZXJhdGlv
blR5cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAgICAgICAgICAgIG9w
ZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3Jl
YXRlKHN4LCBzeSwgc3osIHRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUub3Bl
cmF0aW9uVHlwZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
OgpAQCAtMTYzLDE0ICsxNjMsMTQgQEAgYm9vbCB0cmFuc2Zvcm1zRm9yVmFsdWUoQ1NTVmFsdWUq
IHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXIKICAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlv
bjogewogICAgICAgICAgICAgTGVuZ3RoIHR4ID0gTGVuZ3RoKDAsIEZpeGVkKTsKICAgICAgICAg
ICAgIExlbmd0aCB0eSA9IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICBpZiAodHJhbnNm
b3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJh
bnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRU
b0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAgICAgIGlm
ICh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAgICAgICAgICAgdHkgPSBj
b252ZXJ0VG9GbG9hdExlbmd0aCgmZmlyc3RWYWx1ZSwgY29udmVyc2lvbkRhdGEpOwogICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdHggPSBjb252ZXJ0VG9GbG9hdExlbmd0aChm
aXJzdFZhbHVlLCBjb252ZXJzaW9uRGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9y
bVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5z
bGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5z
Zm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3Jt
VmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgdHkgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChzZWNvbmRWYWx1ZSwgY29udmVyc2lvbkRhdGEp
OworICAgICAgICAgICAgICAgIHR4ID0gY29udmVydFRvRmxvYXRMZW5ndGgoJmZpcnN0VmFsdWUs
IGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUub3Bl
cmF0aW9uVHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNm
b3JtT3BlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5s
ZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
JiBzZWNvbmRWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFs
dWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0
eSA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKCZzZWNvbmRWYWx1ZSwgY29udmVyc2lvbkRhdGEpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpA
QCAtMTc4LDcgKzE3OCw3IEBAIGJvb2wgdHJhbnNmb3Jtc0ZvclZhbHVlKENTU1ZhbHVlKiB2YWx1
ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyCiAgICAgICAgICAgICBp
ZiAodHguaXNVbmRlZmluZWQoKSB8fCB0eS5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBw
ZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgTGVuZ3RoKDAs
IEZpeGVkKSwgdHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9u
VHlwZSgpKSkpOworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgTGVuZ3RoKDAsIEZpeGVk
KSwgdHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9uOgpAQCAtMTg2LDIw
ICsxODYsMjAgQEAgYm9vbCB0cmFuc2Zvcm1zRm9yVmFsdWUoQ1NTVmFsdWUqIHZhbHVlLCBjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXIKICAgICAgICAgICAgIExlbmd0aCB0
eCA9IExlbmd0aCgwLCBGaXhlZCk7CiAgICAgICAgICAgICBMZW5ndGggdHkgPSBMZW5ndGgoMCwg
Rml4ZWQpOwogICAgICAgICAgICAgTGVuZ3RoIHR6ID0gTGVuZ3RoKDAsIEZpeGVkKTsKLSAgICAg
ICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9uKQotICAgICAgICAgICAg
ICAgIHR6ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgY29udmVyc2lvbkRhdGEp
OwotICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9
PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbikK
LSAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIGNv
bnZlcnNpb25EYXRhKTsKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25U
eXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVy
YXRpb24pCisgICAgICAgICAgICAgICAgdHogPSBjb252ZXJ0VG9GbG9hdExlbmd0aCgmZmlyc3RW
YWx1ZSwgY29udmVyc2lvbkRhdGEpOworICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFs
dWUub3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZ
VHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRM
ZW5ndGgoJmZpcnN0VmFsdWUsIGNvbnZlcnNpb25EYXRhKTsKICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIHR4ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgY29u
dmVyc2lvbkRhdGEpOwotICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0
aW9uVHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3Jt
T3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVu
Z3RoKCkgPiAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
dGhpcmRWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soMikpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHogPSBjb252ZXJ0
VG9GbG9hdExlbmd0aCh0aGlyZFZhbHVlLCBjb252ZXJzaW9uRGF0YSk7CisgICAgICAgICAgICAg
ICAgdHggPSBjb252ZXJ0VG9GbG9hdExlbmd0aCgmZmlyc3RWYWx1ZSwgY29udmVyc2lvbkRhdGEp
OworICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkgIT0g
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLmxlbmd0aCgpID4gMikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHRoaXJkVmFsdWUgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMikpOworICAgICAgICAgICAgICAgICAgICAgICAgdHogPSBjb252ZXJ0VG9GbG9h
dExlbmd0aCgmdGhpcmRWYWx1ZSwgY29udmVyc2lvbkRhdGEpOwogICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAx
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFs
dWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRM
ZW5ndGgoc2Vjb25kVmFsdWUsIGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHRyYW5zZm9ybVZhbHVlLmxlbmd0aCgpID4gMSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHNlY29uZFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRMZW5ndGgoJnNlY29uZFZhbHVl
LCBjb252ZXJzaW9uRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CkBAIC0yMDcsMTIgKzIwNywxMiBAQCBib29sIHRyYW5zZm9ybXNG
b3JWYWx1ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEm
IGNvbnZlcgogICAgICAgICAgICAgaWYgKHR4LmlzVW5kZWZpbmVkKCkgfHwgdHkuaXNVbmRlZmlu
ZWQoKSB8fCB0ei5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgdHosIHRyYW5zZm9ybU9wZXJhdGlvblR5
cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAgICAgICAgICAgIG9wZXJh
dGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNy
ZWF0ZSh0eCwgdHksIHR6LCB0cmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLm9w
ZXJhdGlvblR5cGUoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjog
ewotICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMo
KTsKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3RhdGVUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgwLCAwLCAxLCBhbmdsZSwgdHJhbnNmb3JtT3BlcmF0aW9u
VHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgZG91
YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS5jb21wdXRlRGVncmVlcygpOworICAgICAgICAgICAgb3Bl
cmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3Jl
YXRlKDAsIDAsIDEsIGFuZ2xlLCB0cmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9ybVZhbHVl
Lm9wZXJhdGlvblR5cGUoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zvcm1PcGVyYXRp
b246CkBAIC0yMjEsMjggKzIyMSwyOCBAQCBib29sIHRyYW5zZm9ybXNGb3JWYWx1ZShDU1NWYWx1
ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcgogICAgICAg
ICAgICAgZG91YmxlIHggPSAwOwogICAgICAgICAgICAgZG91YmxlIHkgPSAwOwogICAgICAgICAg
ICAgZG91YmxlIHogPSAwOwotICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS0+
Y29tcHV0ZURlZ3JlZXMoKTsKKyAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGZpcnN0VmFsdWUu
Y29tcHV0ZURlZ3JlZXMoKTsKIAotICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVy
YXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zvcm1P
cGVyYXRpb24pCisgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9uVHlwZSgp
ID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVYVHJhbnNmb3JtT3BlcmF0aW9uKQog
ICAgICAgICAgICAgICAgIHggPSAxOwotICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFs
dWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRy
YW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAgIGVsc2UgaWYgKHRyYW5zZm9ybVZhbHVlLm9w
ZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9y
bU9wZXJhdGlvbikKICAgICAgICAgICAgICAgICB5ID0gMTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICB6ID0gMTsKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygp
LmFwcGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBhbmdsZSwg
dHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkp
OworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHgsIHksIHosIGFuZ2xlLCB0cmFuc2Zvcm1PcGVyYXRpb25U
eXBlKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSkpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0
ZTNEVHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUt
Pmxlbmd0aCgpIDwgNCkKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5sZW5ndGgoKSA8
IDQpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogc2Vjb25kVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0
aGlyZFZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjaygyKSk7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZm91cnRo
VmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDMpKTsKLSAgICAgICAgICAgIGRvdWJsZSB4ID0gZmlyc3RWYWx1ZS0+Z2V0RG91
YmxlVmFsdWUoKTsKLSAgICAgICAgICAgIGRvdWJsZSB5ID0gc2Vjb25kVmFsdWUtPmdldERvdWJs
ZVZhbHVlKCk7Ci0gICAgICAgICAgICBkb3VibGUgeiA9IHRoaXJkVmFsdWUtPmdldERvdWJsZVZh
bHVlKCk7Ci0gICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmb3VydGhWYWx1ZS0+Y29tcHV0ZURl
Z3JlZXMoKTsKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3Rh
dGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBhbmdsZSwgdHJhbnNmb3JtT3Bl
cmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHNlY29uZFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKKyAgICAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiB0aGlyZFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKTsKKyAg
ICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBmb3VydGhWYWx1ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygzKSk7
CisgICAgICAgICAgICBkb3VibGUgeCA9IGZpcnN0VmFsdWUuZ2V0RG91YmxlVmFsdWUoKTsKKyAg
ICAgICAgICAgIGRvdWJsZSB5ID0gc2Vjb25kVmFsdWUuZ2V0RG91YmxlVmFsdWUoKTsKKyAgICAg
ICAgICAgIGRvdWJsZSB6ID0gdGhpcmRWYWx1ZS5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAg
ICAgZG91YmxlIGFuZ2xlID0gZm91cnRoVmFsdWUuY29tcHV0ZURlZ3JlZXMoKTsKKyAgICAgICAg
ICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVyYXRp
b246OmNyZWF0ZSh4LCB5LCB6LCBhbmdsZSwgdHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zv
cm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJhbnNmb3JtT3Bl
cmF0aW9uOgpAQCAtMjUwLDYyICsyNTAsNjIgQEAgYm9vbCB0cmFuc2Zvcm1zRm9yVmFsdWUoQ1NT
VmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXIKICAg
ICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRp
b246IHsKICAgICAgICAgICAgIGRvdWJsZSBhbmdsZVggPSAwOwogICAgICAgICAgICAgZG91Ymxl
IGFuZ2xlWSA9IDA7Ci0gICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmaXJzdFZhbHVlLT5jb21w
dXRlRGVncmVlcygpOwotICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25U
eXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdZVHJhbnNmb3JtT3BlcmF0aW9u
KQorICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS5jb21wdXRlRGVncmVlcygp
OworICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSA9PSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb24pCiAgICAgICAgICAg
ICAgICAgYW5nbGVZID0gYW5nbGU7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAg
ICBhbmdsZVggPSBhbmdsZTsKLSAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9w
ZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1RyYW5zZm9ybU9w
ZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0
aCgpID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNl
Y29uZFZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjaygxKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVkgPSBzZWNv
bmRWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3Jt
VmFsdWUub3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJh
bnNmb3JtT3BlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1
ZS5sZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlJiBzZWNvbmRWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3Jt
VmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhbmdsZVkgPSBzZWNvbmRWYWx1ZS5jb21wdXRlRGVncmVlcygpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgb3Bl
cmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0
ZShhbmdsZVgsIGFuZ2xlWSwgdHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+
b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCku
YXBwZW5kKFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShhbmdsZVgsIGFuZ2xlWSwgdHJh
bnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkpKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAgIGlmICh0
cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPCA2KQorICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZh
bHVlLmxlbmd0aCgpIDwgNikKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRv
dWJsZSBhID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgIGRvdWJs
ZSBiID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjaygxKSktPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICBkb3VibGUgYyA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MikpLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgZG91YmxlIGQgPSB0b0NTU1ByaW1p
dGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+Z2V0
RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgIGRvdWJsZSBlID0gY29udmVyc2lvbkRhdGEuem9v
bSgpICogdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjayg0KSktPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICBkb3VibGUgZiA9IGNv
bnZlcnNpb25EYXRhLnpvb20oKSAqIHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUt
Pml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNSkpLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAg
ICAgZG91YmxlIGEgPSBmaXJzdFZhbHVlLmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBk
b3VibGUgYiA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRl
bVdpdGhvdXRCb3VuZHNDaGVjaygxKSkuZ2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIGRv
dWJsZSBjID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDIpKS5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgZG91
YmxlIGQgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soMykpLmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBkb3Vi
bGUgZSA9IGNvbnZlcnNpb25EYXRhLnpvb20oKSAqIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayg0KSkuZ2V0RG91YmxlVmFs
dWUoKTsKKyAgICAgICAgICAgIGRvdWJsZSBmID0gY29udmVyc2lvbkRhdGEuem9vbSgpICogZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDUpKS5nZXREb3VibGVWYWx1ZSgpOwogICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVy
YXRpb25zKCkuYXBwZW5kKE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGEsIGIsIGMs
IGQsIGUsIGYpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6Ok1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0g
ICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpIDwgMTYpCisgICAgICAgICAg
ICBpZiAodHJhbnNmb3JtVmFsdWUubGVuZ3RoKCkgPCAxNikKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCh0b0NTU1ByaW1pdGl2
ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKS0+Z2V0RG91
YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9y
bVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAg
ICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDIpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDMpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZh
bHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDQpKS0+Z2V0RG91Ymxl
VmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZh
bHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDUpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAg
ICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDYpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0b0NT
U1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDcp
KS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVl
KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDgpKS0+Z2V0RG91YmxlVmFs
dWUoKSwKLSAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVl
LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDkpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAg
ICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDEwKSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgdG9DU1NQ
cmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMSkp
LT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgIGNvbnZlcnNpb25EYXRhLnpvb20o
KSAqIHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soMTIpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICBjb252ZXJzaW9u
RGF0YS56b29tKCkgKiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDEzKSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAg
dG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVj
aygxNCkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgIHRvQ1NTUHJpbWl0aXZl
VmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTUpKS0+Z2V0RG91
YmxlVmFsdWUoKSk7CisgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgoZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDApKS5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgIGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygx
KSkuZ2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpLmdldERv
dWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS5nZXREb3VibGVWYWx1
ZSgpLAorICAgICAgICAgICAgICAgIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNm
b3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayg0KSkuZ2V0RG91YmxlVmFsdWUoKSwKKyAg
ICAgICAgICAgICAgICBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVl
Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNSkpLmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAg
ICAgICAgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDYpKS5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgIGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjayg3KSkuZ2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
OCkpLmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDkpKS5nZXRE
b3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMCkpLmdldERvdWJsZVZh
bHVlKCksCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFu
c2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDExKSkuZ2V0RG91YmxlVmFsdWUoKSwK
KyAgICAgICAgICAgICAgICBjb252ZXJzaW9uRGF0YS56b29tKCkgKiBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTIpKS5n
ZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgIGNvbnZlcnNpb25EYXRhLnpvb20oKSAq
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygxMykpLmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKDE0KSkuZ2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTUp
KS5nZXREb3VibGVWYWx1ZSgpKTsKICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygp
LmFwcGVuZChNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1hdHJpeCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246IHsKICAgICAgICAgICAgIExl
bmd0aCBwID0gTGVuZ3RoKDAsIEZpeGVkKTsKLSAgICAgICAgICAgIGlmIChmaXJzdFZhbHVlLT5p
c0xlbmd0aCgpKQotICAgICAgICAgICAgICAgIHAgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJz
dFZhbHVlLCBjb252ZXJzaW9uRGF0YSk7CisgICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZS5pc0xl
bmd0aCgpKQorICAgICAgICAgICAgICAgIHAgPSBjb252ZXJ0VG9GbG9hdExlbmd0aCgmZmlyc3RW
YWx1ZSwgY29udmVyc2lvbkRhdGEpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAg
ICAgLy8gVGhpcyBpcyBhIHF1aXJrIHRoYXQgc2hvdWxkIGdvIGF3YXkgd2hlbiAzZCB0cmFuc2Zv
cm1zIGFyZSBmaW5hbGl6ZWQuCi0gICAgICAgICAgICAgICAgZG91YmxlIHZhbCA9IGZpcnN0VmFs
dWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgZG91YmxlIHZhbCA9IGZpcnN0
VmFsdWUuZ2V0RG91YmxlVmFsdWUoKTsKICAgICAgICAgICAgICAgICBwID0gdmFsID49IDAgPyBM
ZW5ndGgoY2xhbXBUb1Bvc2l0aXZlSW50ZWdlcih2YWwpLCBGaXhlZCkgOiBMZW5ndGgoVW5kZWZp
bmVkKTsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1Zp
ZXdwb3J0U3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvVmlld3BvcnRTdHls
ZVJlc29sdmVyLmNwcAppbmRleCA4ZDQxMjlhMGNmOWFkOTZiOWJhNmUyMTc5OTAwNWUzNWQzYzM4
MmJiLi5mODllZmYwMDg2M2FjODlkYjc3OGRiMzIzZmU3ODUwMTU2NmFkZjA5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvVmlld3BvcnRTdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvVmlld3BvcnRTdHlsZVJlc29sdmVyLmNwcApAQCAtMTA4LDE5ICsxMDgs
MTkgQEAgZmxvYXQgVmlld3BvcnRTdHlsZVJlc29sdmVyOjpnZXRWaWV3cG9ydEFyZ3VtZW50VmFs
dWUoQ1NTUHJvcGVydHlJRCBpZCkgY29uc3QKICAgICAgICAgZGVmYXVsdFZhbHVlID0gMTsKIAog
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBtX3Byb3BlcnR5U2V0LT5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKGlkKTsKLSAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlLmdldCgpKSkKICAgICAgICAg
cmV0dXJuIGRlZmF1bHRWYWx1ZTsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUuZ2V0KCkpOworICAgIENTU1ByaW1pdGl2
ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpOwogCi0gICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpIHx8IHByaW1pdGl2ZVZh
bHVlLT5pc1B4KCkpCi0gICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1
ZSgpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpIHx8IHByaW1pdGl2ZVZhbHVl
LmlzUHgoKSkKKyAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlLmdldEZsb2F0VmFsdWUoKTsK
IAotICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNGb250UmVsYXRpdmVMZW5ndGgoKSkKLSAgICAg
ICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkgKiBtX2RvY3VtZW50LT5k
b2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0
ZWRTaXplKCk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzRm9udFJlbGF0aXZlTGVuZ3RoKCkp
CisgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKCkgKiBtX2RvY3Vt
ZW50LT5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCku
Y29tcHV0ZWRTaXplKCk7CiAKLSAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgp
KSB7Ci0gICAgICAgIGZsb2F0IHBlcmNlbnRWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9h
dFZhbHVlKCkgLyAxMDAuMGY7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgp
KSB7CisgICAgICAgIGZsb2F0IHBlcmNlbnRWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLmdldEZsb2F0
VmFsdWUoKSAvIDEwMC4wZjsKICAgICAgICAgc3dpdGNoIChpZCkgewogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5TWF4SGVpZ2h0OgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWluSGVpZ2h0OgpA
QCAtMTQwLDcgKzE0MCw3IEBAIGZsb2F0IFZpZXdwb3J0U3R5bGVSZXNvbHZlcjo6Z2V0Vmlld3Bv
cnRBcmd1bWVudFZhbHVlKENTU1Byb3BlcnR5SUQgaWQpIGNvbnN0CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICBzd2l0
Y2ggKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSkgewogICAgIGNhc2UgQ1NTVmFsdWVBdXRv
OgogICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwogICAgIGNhc2UgQ1NTVmFsdWVEZXZpY2VI
ZWlnaHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTRmlsdGVyVmFs
dWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oCmluZGV4IDRm
OWQ5MTU4NjY5ZjUxYTBiYzFkMmQwNjdmZjYyYTgzMGZmZTQxMDQuLmRhZjNhZmJiZDE0YjRiYTIw
Y2UzZjkzMjg0OTZiNzhlMDY5YTYyYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9X
ZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NG
aWx0ZXJWYWx1ZS5oCkBAIC03MCw4ICs3MCw4IEBAIHByaXZhdGU6CiAgICAgRmlsdGVyT3BlcmF0
aW9uVHlwZSBtX3R5cGU7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhXZWJLaXRDU1NGaWx0
ZXJWYWx1ZSwgaXNXZWJLaXRDU1NGaWx0ZXJWYWx1ZSgpKQorfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCi19CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShXZWJLaXRDU1NGaWx0ZXJW
YWx1ZSwgaXNXZWJLaXRDU1NGaWx0ZXJWYWx1ZSgpKQogCi0jZW5kaWYKKyNlbmRpZiAvLyBXZWJL
aXRDU1NGaWx0ZXJWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0
Q1NTTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCmlu
ZGV4IDQzYmJkMWMzMWM2ZDlmMjRmMTY4YmIwYzE5YzYyZjBjNzU4OWIzMzYuLmM2ZDU5OTk3MjA4
ZjIxNWExMTQyMTE2N2ZkMzkwMWY4ODgzMjhiNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRD
U1NNYXRyaXguY3BwCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgV2ViS2l0Q1NTTWF0cml4OjpzZXRN
YXRyaXhWYWx1ZShjb25zdCBTdHJpbmcmIHN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAg
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBzdHlsZURlY2xhcmF0aW9uLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKIAogICAgICAgICAvLyBDaGVj
ayBmb3IgYSAibm9uZSIgb3IgZW1wdHkgdHJhbnNmb3JtLiBJbiB0aGVzZSBjYXNlcyB3ZSBjYW4g
dXNlIHRoZSBkZWZhdWx0IGlkZW50aXR5IG1hdHJpeC4KLSAgICAgICAgaWYgKCF2YWx1ZSB8fCAo
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiAodG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS5n
ZXQoKSkpLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKSkKKyAgICAgICAgaWYgKCF2YWx1
ZSB8fCAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaAppbmRleCAxOTVm
OTZhNTFkM2E5NmRkZWMyZGE2MmRiYjY4OThiZDc3NjZjOTdlLi45ZGVjOTU2Y2YxMWQyYzViMGRh
ZTA5NmUzOGQ2MDQ4NDAxY2U5MjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWUuaApAQCAtNzksMTggKzc5LDggQEAgcHJpdmF0ZToKICAgICBUcmFuc2Zv
cm1PcGVyYXRpb25UeXBlIG1fdHlwZTsKIH07CiAKLWlubGluZSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZSogdG9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZShDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIXZhbHVlIHx8IHZhbHVlLT5pc1dlYktp
dENTU1RyYW5zZm9ybVZhbHVlKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZSo+KHZhbHVlKTsKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotaW5s
aW5lIGNvbnN0IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKiB0b1dlYktpdENTU1RyYW5zZm9ybVZh
bHVlKGNvbnN0IENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTighdmFsdWUgfHwgdmFsdWUtPmlzV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoKSk7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKj4o
dmFsdWUpOwotfQotCi19CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZSwgaXNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSgpKQogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKaW5kZXggNjZi
ZWZmNDE3NWQwN2EwY2M3MWUyYTc4ODg3ZGE2MDlkZDRjYTQ3OC4uZTMxMGRhNDIxMjQzNWNmN2E5
ZjM4MjhmYmQ5MzJlNDBkMmZlYjkzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBs
eVN0eWxlQ29tbWFuZC5jcHAKQEAgLTE1MTAsOCArMTUxMCw3IEBAIGZsb2F0IEFwcGx5U3R5bGVD
b21tYW5kOjpjb21wdXRlZEZvbnRTaXplKE5vZGUqIG5vZGUpCiAgICAgICAgIHJldHVybiAwOwog
CiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3Iobm9k
ZSkucHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXplKTsKLSAgICBBU1NFUlQodmFsdWUg
JiYgdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgcmV0dXJuIHRvQ1NTUHJpbWl0aXZl
VmFsdWUodmFsdWUuZ2V0KCkpLT5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UFgpOworICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRG
bG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwogfQogCiB2b2lkIEFwcGx5U3R5
bGVDb21tYW5kOjpqb2luQ2hpbGRUZXh0Tm9kZXMoTm9kZSogbm9kZSwgY29uc3QgUG9zaXRpb24m
IHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
U3R5bGUuY3BwCmluZGV4IDc4MGQ4NDcxODgxYmY0ZmEzMGFkMWQ4NjFhYWY5ZTU5ZTg3ZGEyNzEu
LjdmNjFkM2Y5ODZlNDI5NzBlMDcxYWE5YmYxZGQwYzA2NzY2Nzk1MDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKQEAgLTE0Miw5ICsxNDIsOSBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgogaW50IGlkZW50aWZpZXJGb3JTdHlsZVByb3BlcnR5KFQqIHN0eWxlLCBDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGV4
dHJhY3RQcm9wZXJ0eVZhbHVlKHN0eWxlLCBwcm9wZXJ0eUlEKTsKLSAgICBpZiAoIXZhbHVlIHx8
ICF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlLmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHRvQ1NTUHJp
bWl0aXZlVmFsdWUodmFsdWUuZ2V0KCkpLT5nZXRWYWx1ZUlEKCk7CisgICAgcmV0dXJuIGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBnZXRQcm9w
ZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVz
LCBUKiBiYXNlU3R5bGUpOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIEhUTUxFbGVtZW50RXF1aXZhbGVu
dDo6SFRNTEVsZW1lbnRFcXVpdmFsZW50KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlSUQgcHJp
bWl0CiBib29sIEhUTUxFbGVtZW50RXF1aXZhbGVudDo6dmFsdWVJc1ByZXNlbnRJblN0eWxlKEVs
ZW1lbnQqIGVsZW1lbnQsIFN0eWxlUHJvcGVydGllcyogc3R5bGUpIGNvbnN0CiB7CiAgICAgUmVm
UHRyPENTU1ZhbHVlPiB2YWx1ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKG1fcHJvcGVy
dHlJRCk7Ci0gICAgcmV0dXJuIG1hdGNoZXMoZWxlbWVudCkgJiYgdmFsdWUgJiYgdmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLmdldCgpKS0+Z2V0
VmFsdWVJRCgpID09IG1fcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKTsKKyAgICByZXR1cm4g
bWF0Y2hlcyhlbGVtZW50KSAmJiBpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUuZ2V0KCkpICYm
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKSA9PSBtX3By
aW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCk7CiB9CiAKIHZvaWQgSFRNTEVsZW1lbnRFcXVpdmFs
ZW50OjphZGRUb1N0eWxlKEVsZW1lbnQqLCBFZGl0aW5nU3R5bGUqIHN0eWxlKSBjb25zdApAQCAt
MjI5LDcgKzIyOSw3IEBAIGJvb2wgSFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudDo6dmFsdWVJ
c1ByZXNlbnRJblN0eWxlKEVsZW1lbnQqIGVsZW1lbnQsIFN0eWxlCiAgICAgUmVmUHRyPENTU1Zh
bHVlPiBzdHlsZVZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlX
ZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCk7CiAgICAgaWYgKCFzdHlsZVZhbHVlKQogICAg
ICAgICBzdHlsZVZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlU
ZXh0RGVjb3JhdGlvbik7Ci0gICAgcmV0dXJuIG1hdGNoZXMoZWxlbWVudCkgJiYgc3R5bGVWYWx1
ZSAmJiBzdHlsZVZhbHVlLT5pc1ZhbHVlTGlzdCgpICYmIHRvQ1NTVmFsdWVMaXN0KHN0eWxlVmFs
dWUuZ2V0KCkpLT5oYXNWYWx1ZShtX3ByaW1pdGl2ZVZhbHVlLmdldCgpKTsKKyAgICByZXR1cm4g
bWF0Y2hlcyhlbGVtZW50KSAmJiBpczxDU1NWYWx1ZUxpc3Q+KHN0eWxlVmFsdWUuZ2V0KCkpICYm
IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnN0eWxlVmFsdWUpLmhhc1ZhbHVlKG1fcHJpbWl0aXZl
VmFsdWUuZ2V0KCkpOwogfQogCiBjbGFzcyBIVE1MQXR0cmlidXRlRXF1aXZhbGVudCA6IHB1Ymxp
YyBIVE1MRWxlbWVudEVxdWl2YWxlbnQgewpAQCAtMzU2LDEyICszNTYsMTIgQEAgRWRpdGluZ1N0
eWxlOjp+RWRpdGluZ1N0eWxlKCkKIAogc3RhdGljIFJHQkEzMiBjc3NWYWx1ZVRvUkdCQShDU1NW
YWx1ZSogY29sb3JWYWx1ZSkKIHsKLSAgICBpZiAoIWNvbG9yVmFsdWUgfHwgIWNvbG9yVmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPihjb2xv
clZhbHVlKSkKICAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudDsKICAgICAKLSAgICBD
U1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlQ29sb3IgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGNv
bG9yVmFsdWUpOwotICAgIGlmIChwcmltaXRpdmVDb2xvci0+aXNSR0JDb2xvcigpKQotICAgICAg
ICByZXR1cm4gcHJpbWl0aXZlQ29sb3ItPmdldFJHQkEzMlZhbHVlKCk7CisgICAgQ1NTUHJpbWl0
aXZlVmFsdWUmIHByaW1pdGl2ZUNvbG9yID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpj
b2xvclZhbHVlKTsKKyAgICBpZiAocHJpbWl0aXZlQ29sb3IuaXNSR0JDb2xvcigpKQorICAgICAg
ICByZXR1cm4gcHJpbWl0aXZlQ29sb3IuZ2V0UkdCQTMyVmFsdWUoKTsKICAgICAKICAgICBSR0JB
MzIgcmdiYSA9IDA7CiAgICAgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKHJnYmEsIGNvbG9yVmFsdWUt
PmNzc1RleHQoKSk7CkBAIC00NzYsMTcgKzQ3NiwxNyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6ZXh0
cmFjdEZvbnRTaXplRGVsdGEoKQogCiAgICAgLy8gR2V0IHRoZSBhZGp1c3RtZW50IGFtb3VudCBv
dXQgb2YgdGhlIHN0eWxlLgogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBtX211dGFibGVT
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTaXplRGVsdGEp
OwotICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYg
KCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKHZhbHVlLmdldCgpKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKIAogICAgIC8vIE9ubHkgUFgg
aGFuZGxlZCBub3cuIElmIHdlIGhhbmRsZSBtb3JlIHR5cGVzIGluIHRoZSBmdXR1cmUsIHBlcmhh
cHMKICAgICAvLyBhIHN3aXRjaCBzdGF0ZW1lbnQgaGVyZSB3b3VsZCBiZSBtb3JlIGFwcHJvcHJp
YXRlLgotICAgIGlmICghcHJpbWl0aXZlVmFsdWUtPmlzUHgoKSkKKyAgICBpZiAoIXByaW1pdGl2
ZVZhbHVlLmlzUHgoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9mb250U2l6ZURlbHRhID0g
cHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKTsKKyAgICBtX2ZvbnRTaXplRGVsdGEgPSBw
cmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKCk7CiAgICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92
ZVByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0Rm9udFNpemVEZWx0YSk7CiB9CiAKQEAgLTUwMSwx
NiArNTAxLDE2IEBAIGJvb2wgRWRpdGluZ1N0eWxlOjp0ZXh0RGlyZWN0aW9uKFdyaXRpbmdEaXJl
Y3Rpb24mIHdyaXRpbmdEaXJlY3Rpb24pIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5pY29kZUJpZGkgPSBtX211dGFibGVTdHlsZS0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpKTsKLSAgICBpZiAoIXVuaWNvZGVC
aWRpIHx8ICF1bmljb2RlQmlkaS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KHVuaWNvZGVCaWRpLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgQ1NTVmFsdWVJRCB1bmljb2RlQmlkaVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSh1bmljb2RlQmlkaS5nZXQoKSktPmdldFZhbHVlSUQoKTsKKyAgICBDU1NWYWx1ZUlEIHVuaWNv
ZGVCaWRpVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnVuaWNvZGVCaWRpKS5n
ZXRWYWx1ZUlEKCk7CiAgICAgaWYgKHVuaWNvZGVCaWRpVmFsdWUgPT0gQ1NTVmFsdWVFbWJlZCkg
ewogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGRpcmVjdGlvbiA9IG1fbXV0YWJsZVN0eWxlLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5RGlyZWN0aW9uKTsKLSAgICAgICAgaWYgKCFk
aXJlY3Rpb24gfHwgIWRpcmVjdGlvbi0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAo
IWlzPENTU1ByaW1pdGl2ZVZhbHVlPihkaXJlY3Rpb24uZ2V0KCkpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgIHdyaXRpbmdEaXJlY3Rpb24gPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKGRpcmVjdGlvbi5nZXQoKSktPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUx0ciA/IExlZnRU
b1JpZ2h0V3JpdGluZ0RpcmVjdGlvbiA6IFJpZ2h0VG9MZWZ0V3JpdGluZ0RpcmVjdGlvbjsKKyAg
ICAgICAgd3JpdGluZ0RpcmVjdGlvbiA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZGly
ZWN0aW9uKS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVMdHIgPyBMZWZ0VG9SaWdodFdyaXRpbmdE
aXJlY3Rpb24gOiBSaWdodFRvTGVmdFdyaXRpbmdEaXJlY3Rpb247CiAKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQpAQCAtOTMwLDEwICs5MzAsMTAgQEAgdm9pZCBFZGl0aW5nU3R5bGU6OnBy
ZXBhcmVUb0FwcGx5QXQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBTaG91bGRQcmVzZXJ2ZVdy
aXQKICAgICAgICAgfHwgY3NzVmFsdWVUb1JHQkEobV9tdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5
Q1NTVmFsdWUoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmdldCgpKSA9PSByZ2JhQmFja2dy
b3VuZENvbG9ySW5FZmZlY3QocG9zaXRpb24uY29udGFpbmVyTm9kZSgpKSkKICAgICAgICAgbV9t
dXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsK
IAotICAgIGlmICh1bmljb2RlQmlkaSAmJiB1bmljb2RlQmlkaS0+aXNQcmltaXRpdmVWYWx1ZSgp
KSB7Ci0gICAgICAgIG1fbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNv
ZGVCaWRpLCBzdGF0aWNfY2FzdDxDU1NWYWx1ZUlEPih0b0NTU1ByaW1pdGl2ZVZhbHVlKHVuaWNv
ZGVCaWRpLmdldCgpKS0+Z2V0VmFsdWVJRCgpKSk7Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gJiYg
ZGlyZWN0aW9uLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICBtX211dGFibGVTdHls
ZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIHN0YXRpY19jYXN0PENTU1ZhbHVl
SUQ+KHRvQ1NTUHJpbWl0aXZlVmFsdWUoZGlyZWN0aW9uLmdldCgpKS0+Z2V0VmFsdWVJRCgpKSk7
CisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih1bmljb2RlQmlkaS5nZXQoKSkpIHsKKyAg
ICAgICAgbV9tdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VW5pY29kZUJpZGks
IHN0YXRpY19jYXN0PENTU1ZhbHVlSUQ+KGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdW5p
Y29kZUJpZGkpLmdldFZhbHVlSUQoKSkpOworICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KGRpcmVjdGlvbi5nZXQoKSkpCisgICAgICAgICAgICBtX211dGFibGVTdHlsZS0+c2V0UHJv
cGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIHN0YXRpY19jYXN0PENTU1ZhbHVlSUQ+KGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZGlyZWN0aW9uKS5nZXRWYWx1ZUlEKCkpKTsKICAgICB9
CiB9CiAKQEAgLTEwNzMsMTMgKzEwNzMsMTMgQEAgdm9pZCBFZGl0aW5nU3R5bGU6Om1lcmdlU3R5
bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgQ1NTUHJvcGVydHlPdmVycmlkZU0KICAg
ICAgICAgU3R5bGVQcm9wZXJ0aWVzOjpQcm9wZXJ0eVJlZmVyZW5jZSBwcm9wZXJ0eSA9IHN0eWxl
LT5wcm9wZXJ0eUF0KGkpOwogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gbV9tdXRh
YmxlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHkuaWQoKSk7CiAKLSAgICAgICAg
Ly8gdGV4dCBkZWNvcmF0aW9ucyBuZXZlciBvdmVycmlkZSB2YWx1ZXMKKyAgICAgICAgLy8gdGV4
dCBkZWNvcmF0aW9ucyBuZXZlciBvdmVycmlkZSB2YWx1ZXMuCiAgICAgICAgIGlmICgocHJvcGVy
dHkuaWQoKSA9PSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uIHx8IHByb3BlcnR5LmlkKCkgPT0g
Q1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCkgJiYgcHJvcGVydHkudmFs
dWUoKS0+aXNWYWx1ZUxpc3QoKSAmJiB2YWx1ZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLT5p
c1ZhbHVlTGlzdCgpKSB7Ci0gICAgICAgICAgICAgICAgbWVyZ2VUZXh0RGVjb3JhdGlvblZhbHVl
cyh0b0NTU1ZhbHVlTGlzdCh2YWx1ZS5nZXQoKSksIHRvQ1NTVmFsdWVMaXN0KHByb3BlcnR5LnZh
bHVlKCkpKTsKKyAgICAgICAgICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpIHsKKyAg
ICAgICAgICAgICAgICBtZXJnZVRleHREZWNvcmF0aW9uVmFsdWVzKGRvd25jYXN0PENTU1ZhbHVl
TGlzdD4odmFsdWUuZ2V0KCkpLCBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHByb3BlcnR5LnZhbHVl
KCkpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHZhbHVlID0gMDsgLy8gdGV4dC1kZWNvcmF0aW9uOiBub25lIGlzIGVxdWl2YWxlbnQgdG8g
bm90IGhhdmluZyB0aGUgcHJvcGVydHkKKyAgICAgICAgICAgIHZhbHVlID0gbnVsbHB0cjsgLy8g
dGV4dC1kZWNvcmF0aW9uOiBub25lIGlzIGVxdWl2YWxlbnQgdG8gbm90IGhhdmluZyB0aGUgcHJv
cGVydHkuCiAgICAgICAgIH0KIAogICAgICAgICBpZiAobW9kZSA9PSBPdmVycmlkZVZhbHVlcyB8
fCAobW9kZSA9PSBEb05vdE92ZXJyaWRlVmFsdWVzICYmICF2YWx1ZSkpCkBAIC0xMTMxLDkgKzEx
MzEsOSBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6bWVyZ2VTdHlsZUZyb21SdWxlc0ZvclNlcmlhbGl6
YXRpb24oU3R5bGVkRWxlbWVudCogZWxlbWVudCkKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHByb3BlcnR5Q291bnQ7ICsraSkgewogICAgICAgICAgICAgU3R5bGVQcm9wZXJ0aWVz
OjpQcm9wZXJ0eVJlZmVyZW5jZSBwcm9wZXJ0eSA9IG1fbXV0YWJsZVN0eWxlLT5wcm9wZXJ0eUF0
KGkpOwogICAgICAgICAgICAgQ1NTVmFsdWUqIHZhbHVlID0gcHJvcGVydHkudmFsdWUoKTsKLSAg
ICAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIGlm
ICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBpZiAodG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSktPmlzUGVyY2Vu
dGFnZSgpKSB7CisgICAgICAgICAgICBpZiAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSkuaXNQZXJjZW50YWdlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoUmVmUHRyPENTU1Zh
bHVlPiBjb21wdXRlZFByb3BlcnR5VmFsdWUgPSBjb21wdXRlZFN0eWxlLnByb3BlcnR5VmFsdWUo
cHJvcGVydHkuaWQoKSkpCiAgICAgICAgICAgICAgICAgICAgIGZyb21Db21wdXRlZFN0eWxlLT5h
ZGRQYXJzZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0eS5pZCgpLCBjb21wdXRlZFByb3Bl
cnR5VmFsdWUucmVsZWFzZSgpKSk7CiAgICAgICAgICAgICB9CkBAIC0xMjQ1LDkgKzEyNDUsOSBA
QCBib29sIEVkaXRpbmdTdHlsZTo6aXNGbG9hdGluZygpCiBpbnQgRWRpdGluZ1N0eWxlOjpsZWdh
Y3lGb250U2l6ZShEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0CiB7CiAgICAgUmVmUHRyPENTU1Zh
bHVlPiBjc3NWYWx1ZSA9IG1fbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1By
b3BlcnR5Rm9udFNpemUpOwotICAgIGlmICghY3NzVmFsdWUgfHwgIWNzc1ZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oY3NzVmFsdWUuZ2V0
KCkpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbGVnYWN5Rm9udFNpemVGcm9tQ1NT
VmFsdWUoZG9jdW1lbnQsIHRvQ1NTUHJpbWl0aXZlVmFsdWUoY3NzVmFsdWUuZ2V0KCkpLAorICAg
IHJldHVybiBsZWdhY3lGb250U2l6ZUZyb21DU1NWYWx1ZShkb2N1bWVudCwgZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KGNzc1ZhbHVlLmdldCgpKSwKICAgICAgICAgbV9zaG91bGRVc2VGaXhl
ZERlZmF1bHRGb250U2l6ZSwgQWx3YXlzVXNlTGVnYWN5Rm9udFNpemUpOwogfQogCkBAIC0xMzA4
LDEwICsxMzA4LDEwIEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdGluZ1N0eWxlOjp0ZXh0RGlyZWN0
aW9uRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5pY29kZUJpZGkgPSBD
b21wdXRlZFN0eWxlRXh0cmFjdG9yKG4pLnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlVbmljb2Rl
QmlkaSk7Ci0gICAgICAgICAgICBpZiAoIXVuaWNvZGVCaWRpIHx8ICF1bmljb2RlQmlkaS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4o
dW5pY29kZUJpZGkuZ2V0KCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
ICAgICBDU1NWYWx1ZUlEIHVuaWNvZGVCaWRpVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHVu
aWNvZGVCaWRpLmdldCgpKS0+Z2V0VmFsdWVJRCgpOworICAgICAgICAgICAgQ1NTVmFsdWVJRCB1
bmljb2RlQmlkaVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp1bmljb2RlQmlk
aSkuZ2V0VmFsdWVJRCgpOwogICAgICAgICAgICAgaWYgKHVuaWNvZGVCaWRpVmFsdWUgPT0gQ1NT
VmFsdWVFbWJlZCB8fCB1bmljb2RlQmlkaVZhbHVlID09IENTU1ZhbHVlQmlkaU92ZXJyaWRlKQog
ICAgICAgICAgICAgICAgIHJldHVybiBOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbjsKICAgICAgICAg
fQpAQCAtMTMzNywxMCArMTMzNywxMCBAQCBXcml0aW5nRGlyZWN0aW9uIEVkaXRpbmdTdHlsZTo6
dGV4dERpcmVjdGlvbkZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJgogCiAgICAg
ICAgIENvbXB1dGVkU3R5bGVFeHRyYWN0b3IgY29tcHV0ZWRTdHlsZShub2RlKTsKICAgICAgICAg
UmVmUHRyPENTU1ZhbHVlPiB1bmljb2RlQmlkaSA9IGNvbXB1dGVkU3R5bGUucHJvcGVydHlWYWx1
ZShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpKTsKLSAgICAgICAgaWYgKCF1bmljb2RlQmlkaSB8fCAh
dW5pY29kZUJpZGktPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmlt
aXRpdmVWYWx1ZT4odW5pY29kZUJpZGkuZ2V0KCkpKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgQ1NTVmFsdWVJRCB1bmljb2RlQmlkaVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSh1bmljb2RlQmlkaS5nZXQoKSktPmdldFZhbHVlSUQoKTsKKyAgICAgICAgQ1NTVmFsdWVJRCB1
bmljb2RlQmlkaVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp1bmljb2RlQmlk
aSkuZ2V0VmFsdWVJRCgpOwogICAgICAgICBpZiAodW5pY29kZUJpZGlWYWx1ZSA9PSBDU1NWYWx1
ZU5vcm1hbCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMzQ5LDEwICsxMzQ5LDEwIEBA
IFdyaXRpbmdEaXJlY3Rpb24gRWRpdGluZ1N0eWxlOjp0ZXh0RGlyZWN0aW9uRm9yU2VsZWN0aW9u
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mCiAKICAgICAgICAgQVNTRVJUKHVuaWNvZGVCaWRpVmFs
dWUgPT0gQ1NTVmFsdWVFbWJlZCk7CiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gZGlyZWN0aW9u
ID0gY29tcHV0ZWRTdHlsZS5wcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5RGlyZWN0aW9uKTsKLSAg
ICAgICAgaWYgKCFkaXJlY3Rpb24gfHwgIWRpcmVjdGlvbi0+aXNQcmltaXRpdmVWYWx1ZSgpKQor
ICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPihkaXJlY3Rpb24uZ2V0KCkpKQogICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgQ1NTVmFsdWVJRCBkaXJlY3Rpb25WYWx1ZSA9
IHRvQ1NTUHJpbWl0aXZlVmFsdWUoZGlyZWN0aW9uLmdldCgpKS0+Z2V0VmFsdWVJRCgpOworICAg
ICAgICBDU1NWYWx1ZUlEIGRpcmVjdGlvblZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KCpkaXJlY3Rpb24pLmdldFZhbHVlSUQoKTsKICAgICAgICAgaWYgKGRpcmVjdGlvblZhbHVl
ICE9IENTU1ZhbHVlTHRyICYmIGRpcmVjdGlvblZhbHVlICE9IENTU1ZhbHVlUnRsKQogICAgICAg
ICAgICAgY29udGludWU7CiAKQEAgLTE0NTIsMTEgKzE0NTIsMTEgQEAgdm9pZCBTdHlsZUNoYW5n
ZTo6ZXh0cmFjdFRleHRTdHlsZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzKgogICAgIC8vIEFzc3VtaW5nIHJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJvcGVydGll
cyBoYXMgYmVlbiBjYWxsZWQsIHRoZXJlIHNob3VsZCBub3QgYmUgLXdlYmtpdC10ZXh0LWRlY29y
YXRpb25zLWluLWVmZmVjdAogICAgIC8vIEZ1cnRoZXJtb3JlLCB0ZXh0LWRlY29yYXRpb246IG5v
bmUgaGFzIGJlZW4gdHJpbW1lZCBzbyB0aGF0IHRleHQtZGVjb3JhdGlvbiBwcm9wZXJ0eSBpcyBh
bHdheXMgYSBDU1NWYWx1ZUxpc3QuCiAgICAgUmVmUHRyPENTU1ZhbHVlPiB0ZXh0RGVjb3JhdGlv
biA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24p
OwotICAgIGlmICh0ZXh0RGVjb3JhdGlvbiAmJiB0ZXh0RGVjb3JhdGlvbi0+aXNWYWx1ZUxpc3Qo
KSkgeworICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KHRleHREZWNvcmF0aW9uLmdldCgpKSkgewog
ICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHVuZGVybGluZSA9IGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVVuZGVybGluZSk7CiAgICAgICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGluZVRocm91Z2ggPSBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVMaW5lVGhyb3VnaCk7CiAKLSAgICAgICAgUmVmUHRy
PENTU1ZhbHVlTGlzdD4gbmV3VGV4dERlY29yYXRpb24gPSB0b0NTU1ZhbHVlTGlzdCh0ZXh0RGVj
b3JhdGlvbi5nZXQoKSktPmNvcHkoKTsKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbmV3
VGV4dERlY29yYXRpb24gPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp0ZXh0RGVjb3JhdGlvbiku
Y29weSgpOwogICAgICAgICBpZiAobmV3VGV4dERlY29yYXRpb24tPnJlbW92ZUFsbCh1bmRlcmxp
bmUuZ2V0KCkpKQogICAgICAgICAgICAgbV9hcHBseVVuZGVybGluZSA9IHRydWU7CiAgICAgICAg
IGlmIChuZXdUZXh0RGVjb3JhdGlvbi0+cmVtb3ZlQWxsKGxpbmVUaHJvdWdoLmdldCgpKSkKQEAg
LTE0ODksOSArMTQ4OSw5IEBAIHZvaWQgU3R5bGVDaGFuZ2U6OmV4dHJhY3RUZXh0U3R5bGVzKERv
Y3VtZW50KiBkb2N1bWVudCwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyoKICAgICBzdHlsZS0+cmVt
b3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5KTsKIAogICAgIGlmIChSZWZQdHI8Q1NT
VmFsdWU+IGZvbnRTaXplID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlG
b250U2l6ZSkpIHsKLSAgICAgICAgaWYgKCFmb250U2l6ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQor
ICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqZm9udFNpemUpKQogICAgICAgICAg
ICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUpOyAvLyBDYW4ndCBt
YWtlIHNlbnNlIG9mIHRoZSBudW1iZXIuIFB1dCBubyBmb250IHNpemUuCi0gICAgICAgIGVsc2Ug
aWYgKGludCBsZWdhY3lGb250U2l6ZSA9IGxlZ2FjeUZvbnRTaXplRnJvbUNTU1ZhbHVlKGRvY3Vt
ZW50LCB0b0NTU1ByaW1pdGl2ZVZhbHVlKGZvbnRTaXplLmdldCgpKSwKKyAgICAgICAgZWxzZSBp
ZiAoaW50IGxlZ2FjeUZvbnRTaXplID0gbGVnYWN5Rm9udFNpemVGcm9tQ1NTVmFsdWUoZG9jdW1l
bnQsIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihmb250U2l6ZS5nZXQoKSksCiAgICAgICAg
ICAgICAgICAgc2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUsIFVzZUxlZ2FjeUZvbnRTaXpl
T25seUlmUGl4ZWxWYWx1ZXNNYXRjaCkpIHsKICAgICAgICAgICAgIG1fYXBwbHlGb250U2l6ZSA9
IFN0cmluZzo6bnVtYmVyKGxlZ2FjeUZvbnRTaXplKTsKICAgICAgICAgICAgIHN0eWxlLT5yZW1v
dmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplKTsKQEAgLTE1MDIsMjggKzE1MDIsMjYgQEAg
dm9pZCBTdHlsZUNoYW5nZTo6ZXh0cmFjdFRleHRTdHlsZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzKgogc3RhdGljIHZvaWQgZGlmZlRleHREZWNvcmF0aW9ucyhN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0SUQsIENT
U1ZhbHVlKiByZWZUZXh0RGVjb3JhdGlvbikKIHsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHRE
ZWNvcmF0aW9uID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydElEKTsKLSAgICBp
ZiAoIXRleHREZWNvcmF0aW9uIHx8ICF0ZXh0RGVjb3JhdGlvbi0+aXNWYWx1ZUxpc3QoKSB8fCAh
cmVmVGV4dERlY29yYXRpb24gfHwgIXJlZlRleHREZWNvcmF0aW9uLT5pc1ZhbHVlTGlzdCgpKQor
ICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0Pih0ZXh0RGVjb3JhdGlvbi5nZXQoKSkgfHwgIWlzPENT
U1ZhbHVlTGlzdD4ocmVmVGV4dERlY29yYXRpb24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBS
ZWZQdHI8Q1NTVmFsdWVMaXN0PiBuZXdUZXh0RGVjb3JhdGlvbiA9IHRvQ1NTVmFsdWVMaXN0KHRl
eHREZWNvcmF0aW9uLmdldCgpKS0+Y29weSgpOwotICAgIENTU1ZhbHVlTGlzdCogdmFsdWVzSW5S
ZWZUZXh0RGVjb3JhdGlvbiA9IHRvQ1NTVmFsdWVMaXN0KHJlZlRleHREZWNvcmF0aW9uKTsKKyAg
ICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBuZXdUZXh0RGVjb3JhdGlvbiA9IGRvd25jYXN0PENTU1Zh
bHVlTGlzdD4oKnRleHREZWNvcmF0aW9uKS5jb3B5KCk7CisgICAgQ1NTVmFsdWVMaXN0JiB2YWx1
ZXNJblJlZlRleHREZWNvcmF0aW9uID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqcmVmVGV4dERl
Y29yYXRpb24pOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXNJblJlZlRleHRE
ZWNvcmF0aW9uLT5sZW5ndGgoKTsgaSsrKQotICAgICAgICBuZXdUZXh0RGVjb3JhdGlvbi0+cmVt
b3ZlQWxsKHZhbHVlc0luUmVmVGV4dERlY29yYXRpb24tPml0ZW0oaSkpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdmFsdWVzSW5SZWZUZXh0RGVjb3JhdGlvbi5sZW5ndGgoKTsgKytpKQor
ICAgICAgICBuZXdUZXh0RGVjb3JhdGlvbi0+cmVtb3ZlQWxsKHZhbHVlc0luUmVmVGV4dERlY29y
YXRpb24uaXRlbShpKSk7CiAKICAgICBzZXRUZXh0RGVjb3JhdGlvblByb3BlcnR5KHN0eWxlLCBu
ZXdUZXh0RGVjb3JhdGlvbi5nZXQoKSwgcHJvcGVydElEKTsKIH0KIAogc3RhdGljIGJvb2wgZm9u
dFdlaWdodElzQm9sZChDU1NWYWx1ZSogZm9udFdlaWdodCkKIHsKLSAgICBpZiAoIWZvbnRXZWln
aHQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWZvbnRXZWlnaHQtPmlzUHJpbWl0
aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPihmb250V2VpZ2h0KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQmVjYXVzZSBiIHRhZyBjYW4gb25seSBi
b2xkIHRleHQsIHRoZXJlIGFyZSBvbmx5IHR3byBzdGF0ZXMgaW4gcGxhaW4gaHRtbDogYm9sZCBh
bmQgbm90IGJvbGQuCiAgICAgLy8gQ29sbGFwc2UgYWxsIG90aGVyIHZhbHVlcyB0byBlaXRoZXIg
b25lIG9mIHRoZXNlIHR3byBzdGF0ZXMgZm9yIGVkaXRpbmcgcHVycG9zZXMuCi0gICAgc3dpdGNo
ICh0b0NTU1ByaW1pdGl2ZVZhbHVlKGZvbnRXZWlnaHQpLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICBz
d2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZm9udFdlaWdodCkuZ2V0VmFsdWVJ
RCgpKSB7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWUxMDA6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWUy
MDA6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWUzMDA6CkBAIC0xNjE1LDEyICsxNjEzLDEyIEBAIGJv
b2wgaXNUcmFuc3BhcmVudENvbG9yVmFsdWUoQ1NTVmFsdWUqIGNzc1ZhbHVlKQogewogICAgIGlm
ICghY3NzVmFsdWUpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICghY3NzVmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqY3NzVmFs
dWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVl
ID0gdG9DU1NQcmltaXRpdmVWYWx1ZShjc3NWYWx1ZSk7ICAgIAotICAgIGlmICh2YWx1ZS0+aXNS
R0JDb2xvcigpKQotICAgICAgICByZXR1cm4gIWFscGhhQ2hhbm5lbCh2YWx1ZS0+Z2V0UkdCQTMy
VmFsdWUoKSk7ICAgIAotICAgIHJldHVybiB2YWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVl
VHJhbnNwYXJlbnQ7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlID0gZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KCpjc3NWYWx1ZSk7CisgICAgaWYgKHZhbHVlLmlzUkdCQ29sb3IoKSkK
KyAgICAgICAgcmV0dXJuICFhbHBoYUNoYW5uZWwodmFsdWUuZ2V0UkdCQTMyVmFsdWUoKSk7Cisg
ICAgcmV0dXJuIHZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVRyYW5zcGFyZW50OwogfQog
CiBib29sIGhhc1RyYW5zcGFyZW50QmFja2dyb3VuZENvbG9yKFN0eWxlUHJvcGVydGllcyogc3R5
bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAppbmRleCA3ZGI2MzY0
ZGJhNGYzNTZlMjQxODlkNzE0ZWUyZGNkYzIwNTQwNGFhLi5jMGMxMjg3ZWQyNzA3M2JkMmQzNzBl
NTA3NjljZDgzNDRiOTk2YzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHAKQEAgLTEzOSw4ICsxMzksOCBAQCBzdGF0aWMgYm9vbCBleGVjdXRlVG9nZ2xlU3R5bGVJ
bkxpc3QoRnJhbWUmIGZyYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRQogCiAgICAg
UmVmUHRyPENTU1ZhbHVlPiBzZWxlY3RlZENTU1ZhbHVlID0gc2VsZWN0aW9uU3R5bGUtPnN0eWxl
KCktPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7CiAgICAgU3RyaW5nIG5ld1N0eWxl
ID0gQVNDSUlMaXRlcmFsKCJub25lIik7Ci0gICAgaWYgKHNlbGVjdGVkQ1NTVmFsdWUtPmlzVmFs
dWVMaXN0KCkpIHsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gc2VsZWN0ZWRDU1NWYWx1
ZUxpc3QgPSB0b0NTU1ZhbHVlTGlzdChzZWxlY3RlZENTU1ZhbHVlLmdldCgpKTsKKyAgICBpZiAo
aXM8Q1NTVmFsdWVMaXN0Pigqc2VsZWN0ZWRDU1NWYWx1ZSkpIHsKKyAgICAgICAgUmVmUHRyPENT
U1ZhbHVlTGlzdD4gc2VsZWN0ZWRDU1NWYWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+
KHNlbGVjdGVkQ1NTVmFsdWUuZ2V0KCkpOwogICAgICAgICBpZiAoIXNlbGVjdGVkQ1NTVmFsdWVM
aXN0LT5yZW1vdmVBbGwodmFsdWUpKQogICAgICAgICAgICAgc2VsZWN0ZWRDU1NWYWx1ZUxpc3Qt
PmFwcGVuZCgqdmFsdWUpOwogICAgICAgICBpZiAoc2VsZWN0ZWRDU1NWYWx1ZUxpc3QtPmxlbmd0
aCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVy
dGVyLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCmlu
ZGV4IDBkNWQzZmUwZjc5YTFiYjAxMTRjZDcxZjI3YzcxOWVjODRmYzAzOTguLjQyNjEyZTRlOWRj
MGU2MWVhMDZmODExZmUyODg0OGY1NzZmYTYxZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KQEAgLTcyMCw4ICs3MjAsOCBAQCBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBIVE1MQ29udmVydGVyQ2FjaGVzOjppbmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxl
bWVudChFbGVtZW50JgogCiBzdGF0aWMgYm9vbCBzdHJpbmdGcm9tQ1NTVmFsdWUoQ1NTVmFsdWUm
IHZhbHVlLCBTdHJpbmcmIHJlc3VsdCkKIHsKLSAgICBpZiAodmFsdWUuaXNQcmltaXRpdmVWYWx1
ZSgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IHByaW1pdGl2ZVR5cGUgPSB0b0NTU1ByaW1p
dGl2ZVZhbHVlKHZhbHVlKS5wcmltaXRpdmVUeXBlKCk7CisgICAgaWYgKGlzPENTU1ByaW1pdGl2
ZVZhbHVlPih2YWx1ZSkpIHsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgcHJpbWl0aXZlVHlwZSA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkucHJpbWl0aXZlVHlwZSgpOwogICAg
ICAgICBpZiAocHJpbWl0aXZlVHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyB8
fCBwcmltaXRpdmVUeXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJIHx8CiAgICAgICAg
ICAgICBwcmltaXRpdmVUeXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQgfHwgcHJp
bWl0aXZlVHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0FUVFIpIHsKICAgICAgICAgICAg
IFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLmNzc1RleHQoKTsKQEAgLTg5MiwxMyArODkyLDEz
IEBAIGJvb2wgSFRNTENvbnZlcnRlckNhY2hlczo6ZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9kZShO
b2RlJiBub2RlLCBDU1NQcm9wZXJ0eUlEIHByCiAKICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93
bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBj
b21wdXRlZFN0eWxlUHJvcGVydHlGb3JFbGVtZW50KGVsZW1lbnQsIHByb3BlcnR5SWQpKSB7Ci0g
ICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpICYmIGZsb2F0VmFsdWVGcm9tUHJp
bWl0aXZlVmFsdWUodG9DU1NQcmltaXRpdmVWYWx1ZSgqdmFsdWUpLCByZXN1bHQpKQorICAgICAg
ICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgZmxvYXRWYWx1ZUZyb21Qcmlt
aXRpdmVWYWx1ZShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSwgcmVzdWx0KSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGJvb2wgaW5oZXJpdCA9IGZh
bHNlOwogICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gaW5saW5lU3R5bGVQcm9wZXJ0
eUZvckVsZW1lbnQoZWxlbWVudCwgcHJvcGVydHlJZCkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkgJiYgZmxvYXRWYWx1ZUZyb21QcmltaXRpdmVWYWx1ZSh0b0NTU1By
aW1pdGl2ZVZhbHVlKCp2YWx1ZSksIHJlc3VsdCkpCisgICAgICAgIGlmIChpczxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKSAmJiBmbG9hdFZhbHVlRnJvbVByaW1pdGl2ZVZhbHVlKGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLCByZXN1bHQpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKQogICAgICAgICAg
ICAgaW5oZXJpdCA9IHRydWU7CkBAIC0xMDYxLDE0ICsxMDYxLDE0IEBAIENvbG9yIEhUTUxDb252
ZXJ0ZXJDYWNoZXM6OmNvbG9yUHJvcGVydHlWYWx1ZUZvck5vZGUoTm9kZSYgbm9kZSwgQ1NTUHJv
cGVydHlJRCBwCiAKICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4obm9k
ZSk7CiAgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBjb21wdXRlZFN0eWxlUHJvcGVy
dHlGb3JFbGVtZW50KGVsZW1lbnQsIHByb3BlcnR5SWQpKSB7Ci0gICAgICAgIGlmICh2YWx1ZS0+
aXNQcmltaXRpdmVWYWx1ZSgpICYmIHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVlKS5pc1JHQkNv
bG9yKCkpCi0gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZENvbG9yKENvbG9yKHRvQ1NTUHJp
bWl0aXZlVmFsdWUoKnZhbHVlKS5nZXRSR0JBMzJWYWx1ZSgpKSwgcHJvcGVydHlJZCA9PSBDU1NQ
cm9wZXJ0eUNvbG9yKTsKKyAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUp
ICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzUkdCQ29sb3IoKSkKKyAg
ICAgICAgICAgIHJldHVybiBub3JtYWxpemVkQ29sb3IoQ29sb3IoZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0UkdCQTMyVmFsdWUoKSksIHByb3BlcnR5SWQgPT0gQ1NTUHJv
cGVydHlDb2xvcik7CiAgICAgfQogCiAgICAgYm9vbCBpbmhlcml0ID0gZmFsc2U7CiAgICAgaWYg
KFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBpbmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChl
bGVtZW50LCBwcm9wZXJ0eUlkKSkgewotICAgICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFs
dWUoKSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSkuaXNSR0JDb2xvcigpKQotICAgICAg
ICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRDb2xvcihDb2xvcih0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2
YWx1ZSkuZ2V0UkdCQTMyVmFsdWUoKSksIHByb3BlcnR5SWQgPT0gQ1NTUHJvcGVydHlDb2xvcik7
CisgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5pc1JHQkNvbG9yKCkpCisgICAgICAgICAgICByZXR1
cm4gbm9ybWFsaXplZENvbG9yKENvbG9yKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpLmdldFJHQkEzMlZhbHVlKCkpLCBwcm9wZXJ0eUlkID09IENTU1Byb3BlcnR5Q29sb3IpOwog
ICAgICAgICBpZiAodmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSkKICAgICAgICAgICAgIGluaGVy
aXQgPSB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFy
a3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAppbmRleCA5MGY0NTVi
NmMxNjk4NmE3YWJlMTM4YzhjNTk4MjNlMDI2MTkxZjA5Li4wZThmZjgzN2ZlZTQwYmZjMDIxZDlm
YzJmOTllYjEyM2QzYjQyZGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
cmt1cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCkBAIC00NzYs
OSArNDc2LDkgQEAgc3RhdGljIGJvb2wgcHJvcGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZShTdHls
ZVByb3BlcnRpZXMqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHAKICAgICBSZWZQdHI8Q1NTVmFsdWU+
IHZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7CiAgICAgaWYg
KCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS5n
ZXQoKSktPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmU7CisgICAgcmV0dXJuIGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmU7
CiB9CiAKIHN0YXRpYyBib29sIG5lZWRJbnRlcmNoYW5nZU5ld2xpbmVBZnRlcihjb25zdCBWaXNp
YmxlUG9zaXRpb24mIHYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJp
YWxpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4
IGJhYzRmMjEzY2MyOTliZGRlZjc0MjE0ZWZkNDM4YTNiMzNkMTQwZDMuLjE5NDZiOTM2YjNhNzMy
ZDNkMzFiMjkwYjAxZTRiYzUxMzE5ZDRmMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlh
bGl6ZXIuY3BwCkBAIC0zMjgsMTAgKzMyOCwxMCBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpyZXRy
aWV2ZVJlc291cmNlc0ZvclByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZQog
ICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBzdHlsZURlY2xhcmF0aW9uLT5wcm9wZXJ0eUNv
dW50KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7ICsraSkg
ewogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0gc3R5bGVEZWNsYXJhdGlvbi0+
cHJvcGVydHlBdChpKS52YWx1ZSgpOwotICAgICAgICBpZiAoIWNzc1ZhbHVlLT5pc0ltYWdlVmFs
dWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NJbWFnZVZhbHVlPigqY3NzVmFsdWUpKQogICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgU3R5bGVJbWFnZSogc3R5bGVJbWFnZSA9IHRvQ1NT
SW1hZ2VWYWx1ZShjc3NWYWx1ZS5nZXQoKSktPmNhY2hlZE9yUGVuZGluZ0ltYWdlKCk7CisgICAg
ICAgIFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2UgPSBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPigqY3Nz
VmFsdWUpLmNhY2hlZE9yUGVuZGluZ0ltYWdlKCk7CiAgICAgICAgIC8vIE5vbiBjYWNoZWQtaW1h
Z2VzIGFyZSBqdXN0IHBsYWNlLWhvbGRlcnMgYW5kIGRvIG5vdCBjb250YWluIGRhdGEuCiAgICAg
ICAgIGlmICghc3R5bGVJbWFnZSB8fCAhc3R5bGVJbWFnZS0+aXNDYWNoZWRJbWFnZSgpKQogICAg
ICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKaW5kZXggN2YwNmNmZTA1ZWVlZGY0NDA0Nzk5
OGE4OWUwNTFlY2YzMWFkZTMzZC4uYmVhODUzZWU5ZTk0MTdlODA5NjY0MDMxMjFjNTMxYTI5MDkw
N2Y4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVy
dHlBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1By
b3BlcnR5QW5pbWF0aW9uLmNwcApAQCAtMjk3LDE4ICsyOTcsMTggQEAgc3RhdGljIGlubGluZSBQ
YXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRnVuYyhjb25zdCBBbmltYXRpb25CYXNlKiBhbmlt
LCBTdHlsZUkKICAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVyYXRlZCA9
IHRvU3R5bGVHZW5lcmF0ZWRJbWFnZShmcm9tKS0+aW1hZ2VWYWx1ZSgpOwogICAgICAgICBDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlJiB0b0dlbmVyYXRlZCA9IHRvU3R5bGVHZW5lcmF0ZWRJbWFnZSh0
byktPmltYWdlVmFsdWUoKTsKIAotICAgICAgICBpZiAoZnJvbUdlbmVyYXRlZC5pc0ZpbHRlcklt
YWdlVmFsdWUoKSAmJiB0b0dlbmVyYXRlZC5pc0ZpbHRlckltYWdlVmFsdWUoKSkgeworICAgICAg
ICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oZnJvbUdlbmVyYXRlZCkgJiYgaXM8Q1NTRmls
dGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0ZWQpKSB7CiAgICAgICAgICAgICAvLyBBbmltYXRpb24g
b2YgZ2VuZXJhdGVkIGltYWdlcyBqdXN0IHBvc3NpYmxlIGlmIGlucHV0IGltYWdlcyBhcmUgZXF1
YWwuCiAgICAgICAgICAgICAvLyBPdGhlcndpc2UgZmFsbCBiYWNrIHRvIGNyb3NzIGZhZGUgYW5p
bWF0aW9uLgotICAgICAgICAgICAgQ1NTRmlsdGVySW1hZ2VWYWx1ZSYgZnJvbUZpbHRlciA9IHRv
Q1NTRmlsdGVySW1hZ2VWYWx1ZShmcm9tR2VuZXJhdGVkKTsKLSAgICAgICAgICAgIENTU0ZpbHRl
ckltYWdlVmFsdWUmIHRvRmlsdGVyID0gdG9DU1NGaWx0ZXJJbWFnZVZhbHVlKHRvR2VuZXJhdGVk
KTsKKyAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSBkb3duY2Fz
dDxDU1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKTsKKyAgICAgICAgICAgIENTU0Zp
bHRlckltYWdlVmFsdWUmIHRvRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4o
dG9HZW5lcmF0ZWQpOwogICAgICAgICAgICAgaWYgKGZyb21GaWx0ZXIuZXF1YWxJbnB1dEltYWdl
cyh0b0ZpbHRlcikgJiYgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpKQogICAgICAgICAgICAgICAg
IHJldHVybiBibGVuZEZpbHRlcihhbmltLCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21G
aWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIHBy
b2dyZXNzKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChmcm9tR2VuZXJhdGVkLmlzQ3Jvc3Nm
YWRlVmFsdWUoKSAmJiB0b0dlbmVyYXRlZC5pc0Nyb3NzZmFkZVZhbHVlKCkpIHsKLSAgICAgICAg
ICAgIENTU0Nyb3NzZmFkZVZhbHVlJiBmcm9tQ3Jvc3NmYWRlID0gdG9DU1NDcm9zc2ZhZGVWYWx1
ZShmcm9tR2VuZXJhdGVkKTsKLSAgICAgICAgICAgIENTU0Nyb3NzZmFkZVZhbHVlJiB0b0Nyb3Nz
ZmFkZSA9IHRvQ1NTQ3Jvc3NmYWRlVmFsdWUodG9HZW5lcmF0ZWQpOworICAgICAgICBpZiAoaXM8
Q1NTQ3Jvc3NmYWRlVmFsdWU+KGZyb21HZW5lcmF0ZWQpICYmIGlzPENTU0Nyb3NzZmFkZVZhbHVl
Pih0b0dlbmVyYXRlZCkpIHsKKyAgICAgICAgICAgIENTU0Nyb3NzZmFkZVZhbHVlJiBmcm9tQ3Jv
c3NmYWRlID0gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KGZyb21HZW5lcmF0ZWQpOworICAg
ICAgICAgICAgQ1NTQ3Jvc3NmYWRlVmFsdWUmIHRvQ3Jvc3NmYWRlID0gZG93bmNhc3Q8Q1NTQ3Jv
c3NmYWRlVmFsdWU+KHRvR2VuZXJhdGVkKTsKICAgICAgICAgICAgIGlmIChmcm9tQ3Jvc3NmYWRl
LmVxdWFsSW5wdXRJbWFnZXModG9Dcm9zc2ZhZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBT
dHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoKnRvQ3Jvc3NmYWRlLmJsZW5kKGZyb21Dcm9zc2Zh
ZGUsIHByb2dyZXNzKSk7CiAgICAgICAgIH0KQEAgLTMxNywxNiArMzE3LDE2IEBAIHN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBibGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9uQmFz
ZSogYW5pbSwgU3R5bGVJCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTk5NTYKICAgICB9IGVsc2UgaWYgKGZyb20tPmlzR2VuZXJhdGVkSW1hZ2Uo
KSAmJiB0by0+aXNDYWNoZWRJbWFnZSgpKSB7CiAgICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFs
dWUmIGZyb21HZW5lcmF0ZWQgPSB0b1N0eWxlR2VuZXJhdGVkSW1hZ2UoZnJvbSktPmltYWdlVmFs
dWUoKTsKLSAgICAgICAgaWYgKGZyb21HZW5lcmF0ZWQuaXNGaWx0ZXJJbWFnZVZhbHVlKCkpIHsK
LSAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSB0b0NTU0ZpbHRl
ckltYWdlVmFsdWUoZnJvbUdlbmVyYXRlZCk7CisgICAgICAgIGlmIChpczxDU1NGaWx0ZXJJbWFn
ZVZhbHVlPihmcm9tR2VuZXJhdGVkKSkgeworICAgICAgICAgICAgQ1NTRmlsdGVySW1hZ2VWYWx1
ZSYgZnJvbUZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0
ZWQpOwogICAgICAgICAgICAgaWYgKGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSAmJiB0b1N0eWxl
Q2FjaGVkSW1hZ2UodG8pLT5jYWNoZWRJbWFnZSgpID09IGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2Uo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0ZXIoYW5pbSwgZnJvbUZpbHRlci5j
YWNoZWRJbWFnZSgpLCBmcm9tRmlsdGVyLmZpbHRlck9wZXJhdGlvbnMoKSwgRmlsdGVyT3BlcmF0
aW9ucygpLCBwcm9ncmVzcyk7CiAgICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IEFkZCBpbnRl
cnBvbGF0aW9uIGJldHdlZW4gY3Jvc3MtZmFkZSBhbmQgaW1hZ2Ugc291cmNlLgogICAgIH0gZWxz
ZSBpZiAoZnJvbS0+aXNDYWNoZWRJbWFnZSgpICYmIHRvLT5pc0dlbmVyYXRlZEltYWdlKCkpIHsK
ICAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgdG9HZW5lcmF0ZWQgPSB0b1N0eWxlR2Vu
ZXJhdGVkSW1hZ2UodG8pLT5pbWFnZVZhbHVlKCk7Ci0gICAgICAgIGlmICh0b0dlbmVyYXRlZC5p
c0ZpbHRlckltYWdlVmFsdWUoKSkgewotICAgICAgICAgICAgQ1NTRmlsdGVySW1hZ2VWYWx1ZSYg
dG9GaWx0ZXIgPSB0b0NTU0ZpbHRlckltYWdlVmFsdWUodG9HZW5lcmF0ZWQpOworICAgICAgICBp
ZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0ZWQpKSB7CisgICAgICAgICAgICBD
U1NGaWx0ZXJJbWFnZVZhbHVlJiB0b0ZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFs
dWU+KHRvR2VuZXJhdGVkKTsKICAgICAgICAgICAgIGlmICh0b0ZpbHRlci5jYWNoZWRJbWFnZSgp
ICYmIHRvU3R5bGVDYWNoZWRJbWFnZShmcm9tKS0+Y2FjaGVkSW1hZ2UoKSA9PSB0b0ZpbHRlci5j
YWNoZWRJbWFnZSgpKSAgICAgCiAgICAgICAgICAgICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGFu
aW0sIHRvRmlsdGVyLmNhY2hlZEltYWdlKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgdG9GaWx0ZXIu
ZmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCmluZGV4IDQwMzVmNjYwNDE5ZWFm
NTA4M2FkYjNkM2ViODFjMmQ5YTE5ODc3OTMuLmY0MmVjZTc2NjZjM2VkNzFmMGQ1ZDE1NjdkNmJl
MTYwOTU1Y2Q3ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sLmNwcApAQCAtODQsOCArODQsOCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjphZGp1
c3RJbm5lclRleHRTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRTdHlsZSwgUmVuZAogICAg
IGlmIChIVE1MRWxlbWVudCogaW5uZXJUZXh0ID0gY29udHJvbC5pbm5lclRleHRFbGVtZW50KCkp
IHsKICAgICAgICAgaWYgKGNvbnN0IFN0eWxlUHJvcGVydGllcyogcHJvcGVydGllcyA9IGlubmVy
VGV4dC0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkgewogICAgICAgICAgICAgUmVmUHRy
PENTU1ZhbHVlPiB2YWx1ZSA9IHByb3BlcnRpZXMtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJv
cGVydHlXZWJraXRVc2VyTW9kaWZ5KTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+
aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgICAgIHRleHRCbG9ja1N0eWxlLT5zZXRV
c2VyTW9kaWZ5KHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVlKSk7CisgICAgICAgICAgICBpZiAo
aXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlLmdldCgpKSkKKyAgICAgICAgICAgICAgICB0ZXh0
QmxvY2tTdHlsZS0+c2V0VXNlck1vZGlmeShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TdHlsZVBlbmRpbmdJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlUGVuZGluZ0ltYWdlLmgKaW5kZXggYjk1NDg2ODU0YWExYzlhY2I2YTFh
YjkyMjAzZDc5NDE0MTYwNmIwNS4uNTk5ZGEwNDdhYjYzZDY0ODJiYWE0NTZlYmNkYjAyOGQyOTNk
ZWVhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUGVu
ZGluZ0ltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUGVu
ZGluZ0ltYWdlLmgKQEAgLTQ1LDEyICs0NSwxMiBAQCBjbGFzcyBTdHlsZVBlbmRpbmdJbWFnZSA6
IHB1YmxpYyBTdHlsZUltYWdlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHls
ZVBlbmRpbmdJbWFnZT4gY3JlYXRlKENTU1ZhbHVlKiB2YWx1ZSkgeyByZXR1cm4gYWRvcHRSZWYo
bmV3IFN0eWxlUGVuZGluZ0ltYWdlKHZhbHVlKSk7IH0KIAotICAgIENTU0ltYWdlVmFsdWUqIGNz
c0ltYWdlVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlICYmIG1fdmFsdWUtPmlzSW1hZ2VW
YWx1ZSgpID8gdG9DU1NJbWFnZVZhbHVlKG1fdmFsdWUpIDogbnVsbHB0cjsgfQorICAgIENTU0lt
YWdlVmFsdWUqIGNzc0ltYWdlVmFsdWUoKSBjb25zdCB7IHJldHVybiBpczxDU1NJbWFnZVZhbHVl
PihtX3ZhbHVlKSA/IGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KG1fdmFsdWUpIDogbnVsbHB0cjsg
fQogICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqIGNzc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlICYmIG1fdmFsdWUtPmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgp
ID8gc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KG1fdmFsdWUpIDogbnVsbHB0
cjsgfQotICAgIENTU0N1cnNvckltYWdlVmFsdWUqIGNzc0N1cnNvckltYWdlVmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlICYmIG1fdmFsdWUtPmlzQ3Vyc29ySW1hZ2VWYWx1ZSgpID8gdG9D
U1NDdXJzb3JJbWFnZVZhbHVlKG1fdmFsdWUpIDogbnVsbHB0cjsgfQorICAgIENTU0N1cnNvcklt
YWdlVmFsdWUqIGNzc0N1cnNvckltYWdlVmFsdWUoKSBjb25zdCB7IHJldHVybiBpczxDU1NDdXJz
b3JJbWFnZVZhbHVlPihtX3ZhbHVlKSA/IGRvd25jYXN0PENTU0N1cnNvckltYWdlVmFsdWU+KG1f
dmFsdWUpIDogbnVsbHB0cjsgfQogCiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAgQ1NT
SW1hZ2VTZXRWYWx1ZSogY3NzSW1hZ2VTZXRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUg
JiYgbV92YWx1ZS0+aXNJbWFnZVNldFZhbHVlKCkgPyB0b0NTU0ltYWdlU2V0VmFsdWUobV92YWx1
ZSkgOiBudWxscHRyOyB9CisgICAgQ1NTSW1hZ2VTZXRWYWx1ZSogY3NzSW1hZ2VTZXRWYWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIGlzPENTU0ltYWdlU2V0VmFsdWU+KG1fdmFsdWUpID8gZG93bmNhc3Q8
Q1NTSW1hZ2VTZXRWYWx1ZT4obV92YWx1ZSkgOiBudWxscHRyOyB9CiAjZW5kaWYKIAogICAgIHZv
aWQgZGV0YWNoRnJvbUNTU1ZhbHVlKCkgeyBtX3ZhbHVlID0gbnVsbHB0cjsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NvbG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Q29sb3IuaAppbmRleCA0NjBjZjAyOThjOGE0ZjM2MDY5MTJhMTIzNTI1ZTIwN2I5NTgzNWVhLi4w
MDc1ZWRlY2FkN2Y2NWViYjk0OWNkMzAwNTAwMDM3YmFlMmM0NzI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQ29sb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ29s
b3IuaApAQCAtOTIsOCArOTIsOCBAQCBwcml2YXRlOgogICAgIFNWR0NvbG9yVHlwZSBtX2NvbG9y
VHlwZTsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKFNWR0NvbG9yLCBpc1NWR0NvbG9yKCkp
OwotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NT
X1ZBTFVFKFNWR0NvbG9yLCBpc1NWR0NvbG9yKCkpCisKICNlbmRpZiAvLyBTVkdDb2xvcl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCmluZGV4IDA2ZGQyNDgwNGIy
NDdlNWQ5MzZmNTU0MWQ4MGJkY2I1NjY2MDUzMGIuLjY5MGVmN2EyMjgzNWNhNDQ4ZTMxYWY4Yjhi
N2NhMWRjZDNhYWEzYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFj
ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQu
Y3BwCkBAIC0yNTMsMTEgKzI1MywxMSBAQCB2b2lkIFNWR0ZvbnRGYWNlRWxlbWVudDo6cmVidWls
ZEZvbnRGYWNlKCkKICAgICBpZiAoZGVzY3JpYmVzUGFyZW50Rm9udCkgeyAgICAKICAgICAgICAg
Ly8gVHJhdmVyc2UgcGFyc2VkIENTUyB2YWx1ZXMgYW5kIGFzc29jaWF0ZSBDU1NGb250RmFjZVNy
Y1ZhbHVlIGVsZW1lbnRzIHdpdGggb3Vyc2VsdmVzLgogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+
IHNyYyA9IG1fZm9udEZhY2VSdWxlLT5wcm9wZXJ0aWVzKCkuZ2V0UHJvcGVydHlDU1NWYWx1ZShD
U1NQcm9wZXJ0eVNyYyk7Ci0gICAgICAgIENTU1ZhbHVlTGlzdCogc3JjTGlzdCA9IHRvQ1NTVmFs
dWVMaXN0KHNyYy5nZXQoKSk7CisgICAgICAgIENTU1ZhbHVlTGlzdCogc3JjTGlzdCA9IGRvd25j
YXN0PENTU1ZhbHVlTGlzdD4oc3JjLmdldCgpKTsKIAogICAgICAgICB1bnNpZ25lZCBzcmNMZW5n
dGggPSBzcmNMaXN0ID8gc3JjTGlzdC0+bGVuZ3RoKCkgOiAwOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc3JjTGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChDU1NGb250
RmFjZVNyY1ZhbHVlKiBpdGVtID0gdG9DU1NGb250RmFjZVNyY1ZhbHVlKHNyY0xpc3QtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soaSkpKQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c3JjTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChDU1NGb250RmFjZVNyY1ZhbHVlKiBp
dGVtID0gZG93bmNhc3Q8Q1NTRm9udEZhY2VTcmNWYWx1ZT4oc3JjTGlzdC0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjayhpKSkpCiAgICAgICAgICAgICAgICAgaXRlbS0+c2V0U1ZHRm9udEZhY2VFbGVt
ZW50KHRoaXMpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFpbnQuaAppbmRleCBkMzA5
M2FmYjJhZTM4ZjlhNzcxNTU4ZGM4Yzc4MmRiMjkyNzMwZDA4Li5hYTM5YzdlMGI5OTc3MTNjYmM5
MTYxZWRkNTY0NDBmNTAzMGQwM2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UGFpbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFpbnQuaApAQCAtMTEyLDggKzEx
Miw4IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdXJpOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVf
Q0FTVFMoU1ZHUGFpbnQsIGlzU1ZHUGFpbnQoKSk7Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoU1ZHUGFpbnQsIGlzU1ZHUGFpbnQo
KSkKKwogI2VuZGlmIC8vIFNWR1BhaW50X2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239245</attachid>
            <date>2014-10-03 15:34:06 -0700</date>
            <delta_ts>2014-10-03 16:17:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137381-20141003153407.patch</filename>
            <type>text/plain</type>
            <size>277104</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MjkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTgxMTY3OGUxOTM5Y2Uy
ZGZjODBkYzMzMjQyNTM2OGY4NDkzMTJiYy4uYmMzMGI3OTVkZGM3ZDI3YTI3NmQ4M2NlNTdmY2Iw
MWE4MzNlNTUwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0MSBAQAorMjAxNC0xMC0wMiAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGlzPD4oKSAv
IGRvd25jYXN0PD4oKSBmb3IgQ1NTVmFsdWUgc3ViY2xhc3NlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzgxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgQmVuamFtaW4gUG91bGFpbi4KKworICAgICAgICBVc2UgaXM8PigpIC8gZG93bmNhc3Q8Pigp
IGZvciBDU1NWYWx1ZSBzdWJjbGFzc2VzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVo
YXZpb3IgY2hhbmdlLgorCisgICAgICAgICogY3NzL0NTU0FzcGVjdFJhdGlvVmFsdWUuaDoKKyAg
ICAgICAgKiBjc3MvQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmg6CisgICAgICAgICogY3NzL0NT
U0NhbGN1bGF0aW9uVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlUGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAgICAgKiBjc3MvQ1NTQ2FsY3VsYXRpb25W
YWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NDYW52YXNWYWx1ZS5oOgorICAgICAgICAqIGNzcy9D
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Qm9y
ZGVyUmFkaXVzU2hvcnRoYW5kVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHls
ZUV4dHJhY3Rvcjo6cHJvcGVydHlNYXRjaGVzKToKKyAgICAgICAgKiBjc3MvQ1NTQ3Jvc3NmYWRl
VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3ViaW1hZ2VLbm93blRvQmVPcGFxdWUpOgor
ICAgICAgICAqIGNzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NDdXJz
b3JJbWFnZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0N1cnNvckltYWdlVmFsdWU6
On5DU1NDdXJzb3JJbWFnZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0N1cnNvckltYWdl
VmFsdWU6OnVwZGF0ZUlmU1ZHQ3Vyc29ySXNVc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0N1
cnNvckltYWdlVmFsdWU6OmNhY2hlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0N1cnNv
ckltYWdlVmFsdWU6OmNhY2hlZE9yUGVuZGluZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0N1cnNvckltYWdlVmFsdWU6OmlzU1ZHQ3Vyc29yKToKKyAgICAgICAgKiBjc3MvQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmg6CisgICAg
ICAgICogY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZl
YXR1cmVWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUpOgorICAgICAgICAq
IGNzcy9DU1NGb250VmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTRnVuY3Rpb25WYWx1ZS5oOgor
ICAgICAgICAqIGNzcy9DU1NHcmFkaWVudFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0dyYWRpZW50VmFsdWU6OmltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0dyYWRpZW50VmFs
dWU6OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKToKKyAgICAgICAgKiBjc3MvQ1NTR3JhZGll
bnRWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NHcmlkTGluZU5hbWVzVmFsdWUuaDoKKyAgICAg
ICAgKiBjc3MvQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NJ
bWFnZUdlbmVyYXRvclZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJh
dG9yVmFsdWU6OmltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFs
dWU6OmlzRml4ZWRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFs
dWU6OmZpeGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVl
Ojppc1BlbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6
a25vd25Ub0JlT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFs
dWU6OmxvYWRTdWJpbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZTo6c3ViaW1hZ2VJc1BlbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZTo6Y2FjaGVkSW1hZ2VGb3JDU1NWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU0lt
YWdlR2VuZXJhdG9yVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZVNldFZhbHVlOjpmaWxsSW1hZ2VTZXQpOgorICAg
ICAgICAqIGNzcy9DU1NJbWFnZVNldFZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0ltYWdlVmFs
dWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTSW5oZXJpdGVkVmFsdWUuaDoKKyAgICAgICAgKiBjc3Mv
Q1NTSW5pdGlhbFZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0xpbmVCb3hDb250YWluVmFsdWUu
aDoKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6cGFyc2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmFkZEZpbGxW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmFkZEFuaW1hdGlvblZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2UzVmFsdWVzRmlsbFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGaWxsUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZpbGxSZXBlYXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Z3JpZE1pc3NpbmdHcmlkUG9zaXRpb25WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
YXJzZXI6OnBhcnNlR3JpZFRlbXBsYXRlUm93c0FuZEFyZWFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlQ2lyY2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
YXJzZXI6OnBhcnNlRGVwcmVjYXRlZEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6cGFyc2VEZXByZWNhdGVkUmFkaWFsR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUGFyc2VyOjpwYXJzZVJhZGlhbEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFs
dWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTUmVmbGVjdFZhbHVlLmg6CisgICAgICAgICogY3NzL0NT
U1NoYWRvd1ZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaDoK
KyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjptYXBGaWxsQXR0YWNobWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0
eWxlTWFwOjptYXBGaWxsQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpt
YXBGaWxsQ29tcG9zaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6Om1hcEZp
bGxCbGVuZE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbE9y
aWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjptYXBGaWxsU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NUb1N0eWxlTWFwOjptYXBGaWxsWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxZUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VG9TdHlsZU1hcDo6bWFwRmlsbE1hc2tTb3VyY2VUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbkRlbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Rv
U3R5bGVNYXA6Om1hcEFuaW1hdGlvbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjptYXBBbmltYXRpb25EdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjptYXBBbmltYXRpb25GaWxsTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NU
b1N0eWxlTWFwOjptYXBBbmltYXRpb25JdGVyYXRpb25Db3VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25OYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25UaW1pbmdGdW5jdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVNsaWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlUXVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVJlcGVhdCk6CisgICAgICAgICog
Y3NzL0NTU1VuaWNvZGVSYW5nZVZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU1ZhbHVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlOjppc0ltcGxpY2l0SW5pdGlhbFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6aGFzRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6ZXF1YWxzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1ZhbHVlOjpjc3NUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlOjpkZXN0cm95
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlOjpjbG9uZUZvckNTU09NKToKKyAgICAgICAg
KiBjc3MvQ1NTVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWVMaXN0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpDU1NWYWx1ZUxpc3RJbnNwZWN0b3I6OkNTU1ZhbHVlTGlzdEluc3BlY3Rvcik6
CisgICAgICAgICogY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eU51bWJlcjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5QXV0bzo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5Q2xpcDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
Q29sb3I6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUxlbmd0
aDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5U3RyaW5nOjph
cHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJSYWRpdXM6
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZpbGxMYXllcjo6
YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0
aDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udDo6YXBw
bHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udEZhbWlseTo6YXBw
bHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFNpemU6OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRXZWlnaHQ6OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1
cmVzOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDb3VudGVy
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDdXJzb3I6OmFw
cGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRBbGlnbjo6YXBw
bHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5VGV4dERlY29yYXRpb246
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHREZWNvcmF0
aW9uU2tpcDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5TWFy
cXVlZUluY3JlbWVudDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5TWFycXVlZVJlcGV0aXRpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eU1hcnF1ZWVTcGVlZDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5VGV4dFVuZGVybGluZVBvc2l0aW9uOjphcHBseVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlMaW5lSGVpZ2h0OjphcHBseVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlMaW5lSGVpZ2h0Rm9ySU9TVGV4dEF1dG9zaXppbmc6OmFw
cGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVdvcmRTcGFjaW5nOjph
cHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlQYWdlU2l6ZTo6YXBw
bHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5VGV4dEVtcGhhc2lzU3R5
bGU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRleHRFbXBo
YXNpc1Bvc2l0aW9uOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlSZXNpemU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVZl
cnRpY2FsQWxpZ246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eUFzcGVjdFJhdGlvOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlab29tOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEaXNw
bGF5OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwUGF0
aDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5U2hhcGU6OmFw
cGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUltYWdlUmVzb2x1dGlv
bjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5VGV4dEluZGVu
dDo6YXBwbHlWYWx1ZSk6CisgICAgICAgICogY3NzL01lZGlhTGlzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpyZXBvcnRNZWRpYVF1ZXJ5V2FybmluZ0lmTmVlZGVkKToKKyAgICAgICAgKiBjc3Mv
TWVkaWFRdWVyeUV2YWx1YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlQXNwZWN0
UmF0aW9WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpudW1iZXJWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpvcmllbnRhdGlvbk1lZGlhRmVhdHVyZUV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6
ZXZhbFJlc29sdXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZGV2aWNlX3BpeGVsX3JhdGlvTWVk
aWFGZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHV0aW9uTWVkaWFGZWF0dXJl
RXZhbCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlTGVuZ3RoKToKKyAgICAgICAgKFdlYkNv
cmU6OnZpZXdfbW9kZU1lZGlhRmVhdHVyZUV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6cG9pbnRl
ck1lZGlhRmVhdHVyZUV2YWwpOgorICAgICAgICAqIGNzcy9TVkdDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3Ryb2tlRGFzaEFycmF5VG9DU1NWYWx1
ZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6c3ZnUHJv
cGVydHlWYWx1ZSk6CisgICAgICAgICogY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eSk6CisgICAgICAg
ICogY3NzL1NvdXJjZVNpemVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVMZW5n
dGgpOgorICAgICAgICAqIGNzcy9TdHlsZVByb3BlcnRpZXMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQcm9wZXJ0aWVzOjpnZXRMYXllcmVkU2hvcnRoYW5kVmFsdWUpOgorICAgICAgICAq
IGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3REaXJlY3Rp
b25BbmRXcml0aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHcmlkVHJhY2tTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdyaWRUcmFja0xpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlR3JpZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnBhcnNlU25hcENvb3JkaW5hdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6cGFyc2VTbmFwUG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFw
cGx5UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdG
cm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVy
T3BlcmF0aW9ucyk6CisgICAgICAgICogY3NzL1RyYW5zZm9ybUZ1bmN0aW9ucy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp0cmFuc2Zvcm1zRm9yVmFsdWUpOgorICAgICAgICAqIGNzcy9WaWV3cG9y
dFN0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Vmlld3BvcnRTdHlsZVJlc29s
dmVyOjpnZXRWaWV3cG9ydEFyZ3VtZW50VmFsdWUpOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NG
aWx0ZXJWYWx1ZS5oOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NNYXRyaXguY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViS2l0Q1NTTWF0cml4OjpzZXRNYXRyaXhWYWx1ZSk6CisgICAgICAgICog
Y3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjp0b1dlYktp
dENTU1RyYW5zZm9ybVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpjb21w
dXRlZEZvbnRTaXplKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjppZGVudGlmaWVyRm9yU3R5bGVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRWxlbWVudEVxdWl2YWxlbnQ6OnZhbHVlSXNQcmVzZW50SW5TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGV4dERlY29yYXRpb25FcXVpdmFsZW50Ojp2YWx1ZUlzUHJlc2Vu
dEluU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y3NzVmFsdWVUb1JHQkEpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpleHRyYWN0Rm9udFNpemVEZWx0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnRleHREaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdGluZ1N0eWxlOjpwcmVwYXJlVG9BcHBseUF0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRp
bmdTdHlsZTo6bWVyZ2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6Om1l
cmdlU3R5bGVGcm9tUnVsZXNGb3JTZXJpYWxpemF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRpbmdTdHlsZTo6bGVnYWN5Rm9udFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0
eWxlOjp0ZXh0RGlyZWN0aW9uRm9yU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
Q2hhbmdlOjpleHRyYWN0VGV4dFN0eWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpkaWZmVGV4dERl
Y29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRXZWlnaHRJc0JvbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6aXNUcmFuc3BhcmVudENvbG9yVmFsdWUpOgorICAgICAgICAqIGVkaXRpbmcv
RWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlVG9nZ2xlU3R5bGVJ
bkxpc3QpOgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbToKKyAgICAg
ICAgKHN0cmluZ0Zyb21DU1NWYWx1ZSk6CisgICAgICAgIChIVE1MQ29udmVydGVyQ2FjaGVzOjpm
bG9hdFByb3BlcnR5VmFsdWVGb3JOb2RlKToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXJDYWNoZXM6
OmNvbG9yUHJvcGVydHlWYWx1ZUZvck5vZGUpOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnByb3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUpOgorICAg
ICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNl
cmlhbGl6ZXI6OnJldHJpZXZlUmVzb3VyY2VzRm9yUHJvcGVydGllcyk6CisgICAgICAgICogcGFn
ZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
YmxlbmRGdW5jKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmFkanVzdElubmVyVGV4dFN0eWxl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5bGVQZW5kaW5nSW1hZ2UuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUGVuZGluZ0ltYWdlOjpjc3NJbWFnZVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUGVuZGluZ0ltYWdlOjpjc3NDdXJzb3JJbWFnZVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUGVuZGluZ0ltYWdlOjpjc3NJbWFnZVNldFZhbHVlKToKKyAgICAg
ICAgKiBzdmcvU1ZHQ29sb3IuaDoKKyAgICAgICAgKiBzdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6cmVidWlsZEZvbnRGYWNl
KToKKyAgICAgICAgKiBzdmcvU1ZHUGFpbnQuaDoKKwogMjAxNC0xMC0wMyAgVGltIEhvcnRvbiAg
PHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBXS1dlYlZpZXcgc25hcHNob3Qg
b2YgRGFyaW5nIEZpcmViYWxsIGhhcyB0aGUgd3JvbmcgY29sb3IgaW4gdGhlIG9ic2N1cmVkIGlu
c2V0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQXNwZWN0UmF0aW9WYWx1ZS5o
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0FzcGVjdFJhdGlvVmFsdWUuaAppbmRleCA1ZDQ1NWZl
Y2Q4Y2ViMDM1YWE1Y2FkZjVkMWM0ODUxNTYzOWFkODVkLi44N2Q1NDZiODRmN2JjYTU1NDM4OWY4
ODY5NWMyMmJkOTFmOTc4OTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQXNw
ZWN0UmF0aW9WYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBc3BlY3RSYXRpb1Zh
bHVlLmgKQEAgLTYwLDggKzYwLDggQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX2Rlbm9taW5hdG9y
VmFsdWU7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NBc3BlY3RSYXRpb1ZhbHVlLCBp
c0FzcGVjdFJhdGlvVmFsdWUoKSkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotfQorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTQXNwZWN0UmF0aW9WYWx1ZSwgaXNBc3BlY3RS
YXRpb1ZhbHVlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0JvcmRlcklt
YWdlU2xpY2VWYWx1ZS5oCmluZGV4IGZiYzIwNGJjNjU2M2UzMTUxYzY1MjBmYWI2MjY4ZDFlYTgw
MzQwMTMuLjhiOWZlNGFjZTg4ZmU4ZWE0Y2M4OTNlNmIxY2I3NWYxNDkzZWVmNWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmgKQEAgLTU2LDggKzU2
LDggQEAgcHJpdmF0ZToKICAgICBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUoUGFzc1JlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gc2xpY2VzLCBib29sIGZpbGwpOwogfTsKIAotQ1NTX1ZBTFVFX1RZ
UEVfQ0FTVFMoQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLCBpc0JvcmRlckltYWdlU2xpY2VWYWx1
ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
Q1NTX1ZBTFVFKENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZSwgaXNCb3JkZXJJbWFnZVNsaWNlVmFs
dWUoKSkKKwogI2VuZGlmIC8vIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAKaW5kZXggMzdhODE3MTUwMTQxZWQyZjg5
OWM1NjQxYWIyOThlNzg2OTY1ZWUxMC4uNWE5MDQxZDFjMjFhNTVhNGE3Yjg3YTc0YjkyMzI3N2Vm
NDE5OGYzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFs
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcApA
QCAtNjAyLDExICs2MDIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gcGFyc2VyVmFsdWUtPmNyZWF0ZUNT
U1ZhbHVlKCk7Ci0gICAgICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlLmdldCgpKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLmdldCgpKTsKLSAgICAgICAg
cmVzdWx0LT52YWx1ZSA9IENTU0NhbGNQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByaW1pdGl2ZVZh
bHVlLCBwYXJzZXJWYWx1ZS0+aXNJbnQpOworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICAg
ICAgcmVzdWx0LT52YWx1ZSA9IENTU0NhbGNQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKCZwcmltaXRp
dmVWYWx1ZSwgcGFyc2VyVmFsdWUtPmlzSW50KTsKIAogICAgICAgICArKyppbmRleDsKICAgICAg
ICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3Vs
YXRpb25WYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuaApp
bmRleCBjZTBjYjVhNmUwYzYyYjBhMmQ3OTFmNmQyZWZkNWE4ODFiMWNjMjFiLi5mYzA0NDNmY2Ix
OTk4MTFmMDIxMzM4MWFmMzM1MTY5NmJmOTBmMmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
YWxjdWxhdGlvblZhbHVlLmgKQEAgLTEyMiw4ICsxMjIsOCBAQCBpbmxpbmUgUGFzc1JlZjxDYWxj
dWxhdGlvblZhbHVlPiBDU1NDYWxjVmFsdWU6OmNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUoY29uc3Qg
Q1NTVAogICAgICAgICBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSA/IENhbGN1bGF0aW9uUmFu
Z2VOb25OZWdhdGl2ZSA6IENhbGN1bGF0aW9uUmFuZ2VBbGwpOwogfQogCi1DU1NfVkFMVUVfVFlQ
RV9DQVNUUyhDU1NDYWxjVmFsdWUsIGlzQ2FsY1ZhbHVlKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTQ2FsY1ZhbHVlLCBp
c0NhbGNWYWx1ZSgpKQorCiAjZW5kaWYgLy8gQ1NTQ2FsY3VsYXRpb25WYWx1ZV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDYW52YXNWYWx1ZS5oCmluZGV4IGI2N2QwNGZlYmExMGUzNGM3NGQ2Y2QxODcwNGRh
ZTIxYWQwZGYxODguLjMyZWVjNmQ1ODMzZjk4Nzk2Y2U3ZmE4NDA0ZjVhMjRkNzc1OTkwOGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5oCkBAIC0xMDIsOCArMTAyLDggQEAgcHJpdmF0
ZToKICAgICBIVE1MQ2FudmFzRWxlbWVudCogbV9lbGVtZW50OwogfTsKIAotQ1NTX1ZBTFVFX1RZ
UEVfQ0FTVFMoQ1NTQ2FudmFzVmFsdWUsIGlzQ2FudmFzVmFsdWUoKSkKLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NDYW52YXNW
YWx1ZSwgaXNDYW52YXNWYWx1ZSgpKQorCiAjZW5kaWYgLy8gQ1NTQ2FudmFzVmFsdWVfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcApp
bmRleCAwNzkwMTY3Mzg4NTZmOTEwZTg3ZWYwN2M3ZTUzNWVkZDRiMWYzNzAyLi5jZTVlZTZlNGVl
N2NjY2MyY2I0OGJjZGM5YmZhMmUxYTkwOGJjMDg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcApAQCAtNzczLDcgKzc3Myw3IEBA
IHN0YXRpYyBQYXNzUmVmPENTU1ZhbHVlTGlzdD4gZ2V0Qm9yZGVyUmFkaXVzU2hvcnRoYW5kVmFs
dWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0CiAgICAgaWYgKHNob3dWZXJ0aWNhbEJvdHRvbUxlZnQp
CiAgICAgICAgIHZlcnRpY2FsUmFkaWlMaXN0LT5hcHBlbmQoKmJvdHRvbUxlZnRSYWRpdXMtPml0
ZW0oMSkpOwogCi0gICAgaWYgKCF2ZXJ0aWNhbFJhZGlpTGlzdC0+ZXF1YWxzKCp0b0NTU1ZhbHVl
TGlzdChsaXN0LmdldCgpLml0ZW0oMCkpKSkKKyAgICBpZiAoIXZlcnRpY2FsUmFkaWlMaXN0LT5l
cXVhbHMoZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqbGlzdC5nZXQoKS5pdGVtKDApKSkpCiAgICAg
ICAgIGxpc3QuZ2V0KCkuYXBwZW5kKHZlcnRpY2FsUmFkaWlMaXN0LnJlbGVhc2VOb25OdWxsKCkp
OwogCiAgICAgcmV0dXJuIGxpc3Q7CkBAIC0zMTQ5LDEzICszMTQ5LDEzIEBAIFN0cmluZyBDU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb246Oml0ZW0odW5zaWduZWQgaSkgY29uc3QKIAogYm9vbCBD
b21wdXRlZFN0eWxlRXh0cmFjdG9yOjpwcm9wZXJ0eU1hdGNoZXMoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlELCBjb25zdCBDU1NWYWx1ZSogdmFsdWUpIGNvbnN0CiB7Ci0gICAgaWYgKHByb3BlcnR5
SUQgPT0gQ1NTUHJvcGVydHlGb250U2l6ZSAmJiB2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpICYm
IG1fbm9kZSkgeworICAgIGlmIChwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5Rm9udFNpemUgJiYg
aXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgbV9ub2RlKSB7CiAgICAgICAgIG1fbm9k
ZS0+ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAg
ICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9ub2RlLT5jb21wdXRlZFN0eWxlKG1fcHNldWRv
RWxlbWVudFNwZWNpZmllcik7CiAgICAgICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+Zm9udERlc2Ny
aXB0aW9uKCkua2V5d29yZFNpemUoKSkgewogICAgICAgICAgICAgQ1NTVmFsdWVJRCBzaXplVmFs
dWUgPSBjc3NJZGVudGlmaWVyRm9yRm9udFNpemVLZXl3b3JkKHN0eWxlLT5mb250RGVzY3JpcHRp
b24oKS5rZXl3b3JkU2l6ZSgpKTsKLSAgICAgICAgICAgIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgICAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1ZhbHVlSUQoKSAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0
VmFsdWVJRCgpID09IHNpemVWYWx1ZSkKKyAgICAgICAgICAgIGNvbnN0IENTU1ByaW1pdGl2ZVZh
bHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUp
OworICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzVmFsdWVJRCgpICYmIHByaW1pdGl2
ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBzaXplVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ3Jvc3NmYWRlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZh
bHVlLmNwcAppbmRleCBkNDNkYjFlNmE0YWFlNmM0ODlmZmUyOWZiNDdhZGI2NmM1YzJlNDdiLi4x
OTAyM2NiOTYzOTY5YWE3ZTNhMjE4YjU0Mjg0NGRhZGNlNDBjODkzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAKQEAgLTQ3LDExICs0NywxMSBAQCBzdGF0aWMgaW5s
aW5lIGRvdWJsZSBibGVuZEZ1bmMoZG91YmxlIGZyb20sIGRvdWJsZSB0bywgZG91YmxlIHByb2dy
ZXNzKQogCiBzdGF0aWMgYm9vbCBzdWJpbWFnZUtub3duVG9CZU9wYXF1ZShDU1NWYWx1ZSYgdmFs
dWUsIGNvbnN0IFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyKQogewotICAgIGlmICh2YWx1ZS5pc0lt
YWdlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIHRvQ1NTSW1hZ2VWYWx1ZSh2YWx1ZSkua25vd25U
b0JlT3BhcXVlKHJlbmRlcmVyKTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4odmFsdWUpKQor
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4odmFsdWUpLmtub3duVG9CZU9w
YXF1ZShyZW5kZXJlcik7CiAKLSAgICBpZiAodmFsdWUuaXNJbWFnZUdlbmVyYXRvclZhbHVlKCkp
Ci0gICAgICAgIHJldHVybiB0b0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUodmFsdWUpLmtub3duVG9C
ZU9wYXF1ZShyZW5kZXJlcik7CisgICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHZh
bHVlKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHZh
bHVlKS5rbm93blRvQmVPcGFxdWUocmVuZGVyZXIpOwogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5o
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmgKaW5kZXggMTRkYTU5Yzc5
NGRjN2NiYTIxOTlkNDIwOTg4YmVlMDU0MWU3OTlmNS4uMzMwNTQwYjhhMzQ1OTJjMzhlMGY1OWU5
YjM0MjgwYzU1MDUzNzE1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3Nz
ZmFkZVZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3NzZmFkZVZhbHVlLmgK
QEAgLTExMCw4ICsxMTAsOCBAQCBwcml2YXRlOgogICAgIENyb3NzZmFkZVN1YmltYWdlT2JzZXJ2
ZXJQcm94eSBtX2Nyb3NzZmFkZVN1YmltYWdlT2JzZXJ2ZXI7CiB9OwogCi1DU1NfVkFMVUVfVFlQ
RV9DQVNUUyhDU1NDcm9zc2ZhZGVWYWx1ZSwgaXNDcm9zc2ZhZGVWYWx1ZSgpKQotCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0Ny
b3NzZmFkZVZhbHVlLCBpc0Nyb3NzZmFkZVZhbHVlKCkpCisKICNlbmRpZiAvLyBDU1NDcm9zc2Zh
ZGVWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VW
YWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAKaW5k
ZXggZjU4YzkyMDVhZGZiNDFjMjg3NjRlZmI4YTQzYzZkMmYzYTRkOGQyNC4uOWY0NmU3OTE5ZDU1
YTJjMmUzMmZkZjkzN2U1OTE2ZWI3YjNmYThlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
dXJzb3JJbWFnZVZhbHVlLmNwcApAQCAtODEsNyArODEsNyBAQCBDU1NDdXJzb3JJbWFnZVZhbHVl
Ojp+Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSgpCiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewog
ICAgICAgICBTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCA9ICppdDsKICAgICAgICAgcmVm
ZXJlbmNlZEVsZW1lbnQtPmN1cnNvckltYWdlVmFsdWVSZW1vdmVkKCk7Ci0gICAgICAgIGlmIChT
VkdDdXJzb3JFbGVtZW50KiBjdXJzb3JFbGVtZW50ID0gcmVzb3VyY2VSZWZlcmVuY2VkQnlDdXJz
b3JFbGVtZW50KHRvQ1NTSW1hZ2VWYWx1ZShtX2ltYWdlVmFsdWUuZ2V0KCkpLnVybCgpLCByZWZl
cmVuY2VkRWxlbWVudC0+ZG9jdW1lbnQoKSkpCisgICAgICAgIGlmIChTVkdDdXJzb3JFbGVtZW50
KiBjdXJzb3JFbGVtZW50ID0gcmVzb3VyY2VSZWZlcmVuY2VkQnlDdXJzb3JFbGVtZW50KGRvd25j
YXN0PENTU0ltYWdlVmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkudXJsKCksIHJlZmVyZW5jZWRF
bGVtZW50LT5kb2N1bWVudCgpKSkKICAgICAgICAgICAgIGN1cnNvckVsZW1lbnQtPnJlbW92ZUNs
aWVudChyZWZlcmVuY2VkRWxlbWVudCk7CiAgICAgfQogfQpAQCAtMTA3LDcgKzEwNyw3IEBAIGJv
b2wgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZTo6dXBkYXRlSWZTVkdDdXJzb3JJc1VzZWQoRWxlbWVudCog
ZWxlbWVudCkKICAgICBpZiAoIWlzU1ZHQ3Vyc29yKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGlmIChTVkdDdXJzb3JFbGVtZW50KiBjdXJzb3JFbGVtZW50ID0gcmVzb3VyY2VSZWZl
cmVuY2VkQnlDdXJzb3JFbGVtZW50KHRvQ1NTSW1hZ2VWYWx1ZShtX2ltYWdlVmFsdWUuZ2V0KCkp
LnVybCgpLCBlbGVtZW50LT5kb2N1bWVudCgpKSkgeworICAgIGlmIChTVkdDdXJzb3JFbGVtZW50
KiBjdXJzb3JFbGVtZW50ID0gcmVzb3VyY2VSZWZlcmVuY2VkQnlDdXJzb3JFbGVtZW50KGRvd25j
YXN0PENTU0ltYWdlVmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkudXJsKCksIGVsZW1lbnQtPmRv
Y3VtZW50KCkpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgb3ZlcnJpZGUgaG90IHNw
b3Qgc3BlY2lmaWVkIGluIENTUywgd2hpY2ggaXMgcHJvYmFibHkgaW5jb3JyZWN0LgogICAgICAg
ICBTVkdMZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoMCk7CiAgICAgICAgIG1faGFzSG90U3Bv
dCA9IHRydWU7CkBAIC0xMzMsOCArMTMzLDggQEAgYm9vbCBDU1NDdXJzb3JJbWFnZVZhbHVlOjp1
cGRhdGVJZlNWR0N1cnNvcklzVXNlZChFbGVtZW50KiBlbGVtZW50KQogU3R5bGVJbWFnZSogQ1NT
Q3Vyc29ySW1hZ2VWYWx1ZTo6Y2FjaGVkSW1hZ2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGxvYWRl
cikKIHsKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKLSAgICBpZiAobV9pbWFnZVZhbHVlLmdl
dCgpLmlzSW1hZ2VTZXRWYWx1ZSgpKQotICAgICAgICByZXR1cm4gdG9DU1NJbWFnZVNldFZhbHVl
KG1faW1hZ2VWYWx1ZS5nZXQoKSkuY2FjaGVkSW1hZ2VTZXQobG9hZGVyKTsKKyAgICBpZiAoaXM8
Q1NTSW1hZ2VTZXRWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGRv
d25jYXN0PENTU0ltYWdlU2V0VmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkuY2FjaGVkSW1hZ2VT
ZXQobG9hZGVyKTsKICNlbmRpZgogCiAgICAgaWYgKCFtX2FjY2Vzc2VkSW1hZ2UpIHsKQEAgLTE0
NSw3ICsxNDUsNyBAQCBTdHlsZUltYWdlKiBDU1NDdXJzb3JJbWFnZVZhbHVlOjpjYWNoZWRJbWFn
ZShDYWNoZWRSZXNvdXJjZUxvYWRlciogbG9hZGVyKQogICAgICAgICAvLyB3ZSBjcmVhdGUgYW4g
YWx0ZXJuYXRlIENTU0ltYWdlVmFsdWUgdG8gdXNlLgogICAgICAgICBpZiAoaXNTVkdDdXJzb3Io
KSAmJiBsb2FkZXIgJiYgbG9hZGVyLT5kb2N1bWVudCgpKSB7CiAgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyB3aWxsIGZhaWwgaWYgdGhlIDxjdXJzb3I+IGVsZW1lbnQgaXMgaW4gYSBzaGFkb3cg
RE9NIChidWcgNTk4MjcpCi0gICAgICAgICAgICBpZiAoU1ZHQ3Vyc29yRWxlbWVudCogY3Vyc29y
RWxlbWVudCA9IHJlc291cmNlUmVmZXJlbmNlZEJ5Q3Vyc29yRWxlbWVudCh0b0NTU0ltYWdlVmFs
dWUobV9pbWFnZVZhbHVlLmdldCgpKS51cmwoKSwgKmxvYWRlci0+ZG9jdW1lbnQoKSkpIHsKKyAg
ICAgICAgICAgIGlmIChTVkdDdXJzb3JFbGVtZW50KiBjdXJzb3JFbGVtZW50ID0gcmVzb3VyY2VS
ZWZlcmVuY2VkQnlDdXJzb3JFbGVtZW50KGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KG1faW1hZ2VW
YWx1ZS5nZXQoKSkudXJsKCksICpsb2FkZXItPmRvY3VtZW50KCkpKSB7CiAgICAgICAgICAgICAg
ICAgZGV0YWNoUGVuZGluZ0ltYWdlKCk7CiAgICAgICAgICAgICAgICAgUmVmPENTU0ltYWdlVmFs
dWU+IHN2Z0ltYWdlVmFsdWUoQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKGN1cnNvckVsZW1lbnQtPmhy
ZWYoKSkpOwogICAgICAgICAgICAgICAgIFN0eWxlQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0g
c3ZnSW1hZ2VWYWx1ZS0+Y2FjaGVkSW1hZ2UobG9hZGVyKTsKQEAgLTE1NCw5ICsxNTQsOSBAQCBT
dHlsZUltYWdlKiBDU1NDdXJzb3JJbWFnZVZhbHVlOjpjYWNoZWRJbWFnZShDYWNoZWRSZXNvdXJj
ZUxvYWRlciogbG9hZGVyKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KG1faW1hZ2VWYWx1ZS5nZXQoKS5pc0ltYWdlVmFsdWUoKSkgeworICAgICAgICBpZiAoaXM8Q1NT
SW1hZ2VWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKSkgewogICAgICAgICAgICAgZGV0YWNoUGVu
ZGluZ0ltYWdlKCk7Ci0gICAgICAgICAgICBtX2ltYWdlID0gdG9DU1NJbWFnZVZhbHVlKG1faW1h
Z2VWYWx1ZS5nZXQoKSkuY2FjaGVkSW1hZ2UobG9hZGVyKTsKKyAgICAgICAgICAgIG1faW1hZ2Ug
PSBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX2ltYWdlVmFsdWUuZ2V0KCkpLmNhY2hlZEltYWdl
KGxvYWRlcik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE3MCw4ICsxNzAsOCBAQCBTdHlsZUlt
YWdlKiBDU1NDdXJzb3JJbWFnZVZhbHVlOjpjYWNoZWRPclBlbmRpbmdJbWFnZShEb2N1bWVudCYg
ZG9jdW1lbnQpCiB7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCiAgICAgLy8gTmVlZCB0byBk
ZWxlZ2F0ZSBjb21wbGV0ZWx5IHNvIHRoYXQgY2hhbmdlcyBpbiBkZXZpY2Ugc2NhbGUgZmFjdG9y
IGNhbiBiZSBoYW5kbGVkIGFwcHJvcHJpYXRlbHkuCi0gICAgaWYgKG1faW1hZ2VWYWx1ZS5nZXQo
KS5pc0ltYWdlU2V0VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIHRvQ1NTSW1hZ2VTZXRWYWx1ZSht
X2ltYWdlVmFsdWUuZ2V0KCkpLmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KGRvY3VtZW50KTsKKyAg
ICBpZiAoaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4obV9pbWFnZVZhbHVlLmdldCgpKSkKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PENTU0ltYWdlU2V0VmFsdWU+KG1faW1hZ2VWYWx1ZS5nZXQoKSkuY2Fj
aGVkT3JQZW5kaW5nSW1hZ2VTZXQoZG9jdW1lbnQpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
ZG9jdW1lbnQpOwogI2VuZGlmCkBAIC0xODQsOCArMTg0LDggQEAgU3R5bGVJbWFnZSogQ1NTQ3Vy
c29ySW1hZ2VWYWx1ZTo6Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoRG9jdW1lbnQmIGRvY3VtZW50KQog
CiBib29sIENTU0N1cnNvckltYWdlVmFsdWU6OmlzU1ZHQ3Vyc29yKCkgY29uc3QKIHsKLSAgICBp
ZiAobV9pbWFnZVZhbHVlLmdldCgpLmlzSW1hZ2VWYWx1ZSgpKSB7Ci0gICAgICAgIFVSTCBrdXJs
KFBhcnNlZFVSTFN0cmluZywgdG9DU1NJbWFnZVZhbHVlKG1faW1hZ2VWYWx1ZS5nZXQoKSkudXJs
KCkpOworICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPihtX2ltYWdlVmFsdWUuZ2V0KCkpKSB7Cisg
ICAgICAgIFVSTCBrdXJsKFBhcnNlZFVSTFN0cmluZywgZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4o
bV9pbWFnZVZhbHVlLmdldCgpKS51cmwoKSk7CiAgICAgICAgIHJldHVybiBrdXJsLmhhc0ZyYWdt
ZW50SWRlbnRpZmllcigpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0N1cnNvckltYWdlVmFsdWUuaAppbmRleCA2NTFjZDYzMzAwYjRjYTEwNTZhMzI4MzY4
OWQ5MWEwNDRlYmE5MTgwLi44NmRmN2FkYTQyN2QyNTM0MDg4ZjMwODliNTk0Mzg4MWIyNGQyMTgz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmgKQEAgLTc4LDggKzc4
LDggQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPiBtX3JlZmVyZW5jZWRFbGVt
ZW50czsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0N1cnNvckltYWdlVmFsdWUsIGlz
Q3Vyc29ySW1hZ2VWYWx1ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0N1cnNvckltYWdlVmFsdWUsIGlzQ3Vyc29ySW1h
Z2VWYWx1ZSgpKQorCiAjZW5kaWYgLy8gQ1NTQ3Vyc29ySW1hZ2VWYWx1ZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuaAppbmRleCA2MDA1ZjdlN2MwNGM2ODRhZDA5OTg5
YWU4OWI3MDNiMjAxZjhhMDYzLi4zYzA2OGQ1OGNjYTAzYWUyYjU4YmZjNGQ4YjNiNjgwZDVjNmNh
NzZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmgKQEAgLTExNyw4
ICsxMTcsOCBAQCBwcml2YXRlOgogICAgIEZpbHRlclN1YmltYWdlT2JzZXJ2ZXJQcm94eSBtX2Zp
bHRlclN1YmltYWdlT2JzZXJ2ZXI7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NGaWx0
ZXJJbWFnZVZhbHVlLCBpc0ZpbHRlckltYWdlVmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NGaWx0ZXJJbWFnZVZh
bHVlLCBpc0ZpbHRlckltYWdlVmFsdWUoKSkKKwogI2VuZGlmIC8vIENTU0ZpbHRlckltYWdlVmFs
dWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUu
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmgKaW5kZXggODkyMTA3
MjE0ZDA5ZDEwZDBjMzU5OTU2OTU5NTRmZWQxZTNkZWRiZi4uNjFiZDkwOTMzYzUwMDE0NGZjZjdm
NTllZjI0NGM1NTI3M2ExNzJiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRGYWNlU3JjVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNW
YWx1ZS5oCkBAIC05NSw4ICs5NSw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLUNTU19WQUxV
RV9UWVBFX0NBU1RTKENTU0ZvbnRGYWNlU3JjVmFsdWUsIGlzRm9udEZhY2VTcmNWYWx1ZSgpKQor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi19CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19W
QUxVRShDU1NGb250RmFjZVNyY1ZhbHVlLCBpc0ZvbnRGYWNlU3JjVmFsdWUoKSkKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZlYXR1cmVWYWx1ZS5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGZWF0dXJlVmFsdWUuaAppbmRleCBkZjFjZDE3NTlj
ZGEzZWE4ZDNhYTMxZDMzYzc2NDM0OWQzZjczZjRhLi5jZjZjMzgxZmVjYTE1NTFiYWM0ZDI1NjM5
NzEzNGIwNjk1MmRmMzQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZl
YXR1cmVWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmVhdHVyZVZhbHVl
LmgKQEAgLTUxLDggKzUxLDggQEAgcHJpdmF0ZToKICAgICBjb25zdCBpbnQgbV92YWx1ZTsKIH07
CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0ZvbnRGZWF0dXJlVmFsdWUsIGlzRm9udEZlYXR1
cmVWYWx1ZSgpKQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi19IC8vIG5hbWVzcGFjZQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTRm9udEZlYXR1cmVWYWx1ZSwgaXNGb250
RmVhdHVyZVZhbHVlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9y
LmNwcAppbmRleCAwYWQ5ODIzNTNmYTNkMDBhMmE0NmRkZjY0MjYzNjJmMTIwMDUxZGU3Li4zOTI1
YWVlMjRlYmExYzNmNzVjYzUwMGUwNTQwMDI0ZjQ2YmMxY2IwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTRm9udFNlbGVjdG9yLmNwcApAQCAtOTEsMjYgKzkxLDI2IEBAIHZvaWQgQ1NTRm9udFNlbGVj
dG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVs
ZSkKICAgICBSZWZQdHI8Q1NTVmFsdWU+IGZvbnRGYW1pbHkgPSBzdHlsZS5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSk7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBzcmMg
PSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5U3JjKTsKICAgICBSZWZQdHI8
Q1NTVmFsdWU+IHVuaWNvZGVSYW5nZSA9IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJv
cGVydHlVbmljb2RlUmFuZ2UpOwotICAgIGlmICghZm9udEZhbWlseSB8fCAhc3JjIHx8ICFmb250
RmFtaWx5LT5pc1ZhbHVlTGlzdCgpIHx8ICFzcmMtPmlzVmFsdWVMaXN0KCkgfHwgKHVuaWNvZGVS
YW5nZSAmJiAhdW5pY29kZVJhbmdlLT5pc1ZhbHVlTGlzdCgpKSkKKyAgICBpZiAoIWlzPENTU1Zh
bHVlTGlzdD4oZm9udEZhbWlseS5nZXQoKSkgfHwgIWlzPENTU1ZhbHVlTGlzdD4oc3JjLmdldCgp
KSB8fCAodW5pY29kZVJhbmdlICYmICFpczxDU1NWYWx1ZUxpc3Q+KCp1bmljb2RlUmFuZ2UpKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTVmFsdWVMaXN0KiBmYW1pbHlMaXN0ID0gdG9DU1NW
YWx1ZUxpc3QoZm9udEZhbWlseS5nZXQoKSk7Ci0gICAgaWYgKCFmYW1pbHlMaXN0LT5sZW5ndGgo
KSkKKyAgICBDU1NWYWx1ZUxpc3QmIGZhbWlseUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+
KCpmb250RmFtaWx5KTsKKyAgICBpZiAoIWZhbWlseUxpc3QubGVuZ3RoKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIENTU1ZhbHVlTGlzdCogc3JjTGlzdCA9IHRvQ1NTVmFsdWVMaXN0KHNyYy5n
ZXQoKSk7Ci0gICAgaWYgKCFzcmNMaXN0LT5sZW5ndGgoKSkKKyAgICBDU1NWYWx1ZUxpc3QmIHNy
Y0xpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpzcmMpOworICAgIGlmICghc3JjTGlzdC5s
ZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTVmFsdWVMaXN0KiByYW5nZUxpc3Qg
PSB0b0NTU1ZhbHVlTGlzdCh1bmljb2RlUmFuZ2UuZ2V0KCkpOworICAgIENTU1ZhbHVlTGlzdCog
cmFuZ2VMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih1bmljb2RlUmFuZ2UuZ2V0KCkpOwog
CiAgICAgdW5zaWduZWQgdHJhaXRzTWFzayA9IDA7CiAKICAgICBpZiAoUmVmUHRyPENTU1ZhbHVl
PiBmb250U3R5bGUgPSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFN0
eWxlKSkgewotICAgICAgICBpZiAoIWZvbnRTdHlsZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAg
ICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqZm9udFN0eWxlKSkKICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICBzd2l0Y2ggKHRvQ1NTUHJpbWl0aXZlVmFsdWUoZm9udFN0eWxl
LmdldCgpKS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgICAgIHN3aXRjaCAoZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCpmb250U3R5bGUpLmdldFZhbHVlSUQoKSkgewogICAgICAgICBjYXNlIENT
U1ZhbHVlTm9ybWFsOgogICAgICAgICAgICAgdHJhaXRzTWFzayB8PSBGb250U3R5bGVOb3JtYWxN
YXNrOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjUsMTAgKzEyNSwxMCBAQCB2b2lkIENTU0Zv
bnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvbnN0IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250
RmFjZVJ1bGUpCiAgICAgICAgIHRyYWl0c01hc2sgfD0gRm9udFN0eWxlTm9ybWFsTWFzazsKIAog
ICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IGZvbnRXZWlnaHQgPSBzdHlsZS5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdodCkpIHsKLSAgICAgICAgaWYgKCFmb250V2VpZ2h0
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KCpmb250V2VpZ2h0KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBzd2l0Y2ggKHRv
Q1NTUHJpbWl0aXZlVmFsdWUoZm9udFdlaWdodC5nZXQoKSktPmdldFZhbHVlSUQoKSkgeworICAg
ICAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZm9udFdlaWdodCkuZ2V0
VmFsdWVJRCgpKSB7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVCb2xkOgogICAgICAgICBjYXNlIENT
U1ZhbHVlNzAwOgogICAgICAgICAgICAgdHJhaXRzTWFzayB8PSBGb250V2VpZ2h0NzAwTWFzazsK
QEAgLTE3MCwxNiArMTcwLDE2IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1
bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2UqIGZvbnRGYWNlUnVsZSkKICAgICAgICAgICAgIFJl
ZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJh
dGVkKCk7CiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoZm9udFZhcmlhbnQucmVsZWFzZU5vbk51
bGwoKSk7CiAgICAgICAgICAgICBmb250VmFyaWFudCA9IGxpc3QucmVsZWFzZU5vbk51bGwoKTsK
LSAgICAgICAgfSBlbHNlIGlmICghZm9udFZhcmlhbnQtPmlzVmFsdWVMaXN0KCkpCisgICAgICAg
IH0gZWxzZSBpZiAoIWlzPENTU1ZhbHVlTGlzdD4oKmZvbnRWYXJpYW50KSkKICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICBDU1NWYWx1ZUxpc3QqIHZhcmlhbnRMaXN0ID0gdG9DU1NWYWx1
ZUxpc3QoZm9udFZhcmlhbnQuZ2V0KCkpOwotICAgICAgICB1bnNpZ25lZCBudW1WYXJpYW50cyA9
IHZhcmlhbnRMaXN0LT5sZW5ndGgoKTsKKyAgICAgICAgQ1NTVmFsdWVMaXN0JiB2YXJpYW50TGlz
dCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKmZvbnRWYXJpYW50KTsKKyAgICAgICAgdW5zaWdu
ZWQgbnVtVmFyaWFudHMgPSB2YXJpYW50TGlzdC5sZW5ndGgoKTsKICAgICAgICAgaWYgKCFudW1W
YXJpYW50cykKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtVmFyaWFudHM7ICsraSkgewotICAgICAgICAgICAgc3dpdGNoICh0b0NTU1By
aW1pdGl2ZVZhbHVlKHZhcmlhbnRMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKS0+Z2V0
VmFsdWVJRCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPih2YXJpYW50TGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKS0+Z2V0VmFsdWVJRCgp
KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vcm1hbDoKICAgICAgICAgICAgICAg
ICAgICAgdHJhaXRzTWFzayB8PSBGb250VmFyaWFudE5vcm1hbE1hc2s7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTk2LDI1ICsxOTYsMjUgQEAgdm9pZCBDU1NGb250U2VsZWN0b3I6
OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VSdWxlKQog
ICAgIC8vIEVhY2ggaXRlbSBpbiB0aGUgc3JjIHByb3BlcnR5J3MgbGlzdCBpcyBhIHNpbmdsZSBD
U1NGb250RmFjZVNvdXJjZS4gUHV0IHRoZW0gYWxsIGludG8gYSBDU1NGb250RmFjZS4KICAgICBS
ZWZQdHI8Q1NTRm9udEZhY2U+IGZvbnRGYWNlOwogCi0gICAgaW50IHNyY0xlbmd0aCA9IHNyY0xp
c3QtPmxlbmd0aCgpOworICAgIGludCBzcmNMZW5ndGggPSBzcmNMaXN0Lmxlbmd0aCgpOwogCiAg
ICAgYm9vbCBmb3VuZFNWR0ZvbnQgPSBmYWxzZTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c3JjTGVuZ3RoOyBpKyspIHsKICAgICAgICAgLy8gQW4gaXRlbSBpbiB0aGUgbGlzdCBlaXRoZXIg
c3BlY2lmaWVzIGEgc3RyaW5nIChsb2NhbCBmb250IG5hbWUpIG9yIGEgVVJMIChyZW1vdGUgZm9u
dCB0byBkb3dubG9hZCkuCi0gICAgICAgIENTU0ZvbnRGYWNlU3JjVmFsdWUqIGl0ZW0gPSB0b0NT
U0ZvbnRGYWNlU3JjVmFsdWUoc3JjTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7Cisg
ICAgICAgIENTU0ZvbnRGYWNlU3JjVmFsdWUmIGl0ZW0gPSBkb3duY2FzdDxDU1NGb250RmFjZVNy
Y1ZhbHVlPigqc3JjTGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKICAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPENTU0ZvbnRGYWNlU291cmNlPiBzb3VyY2U7CiAKICNpZiBFTkFCTEUoU1ZH
X0ZPTlRTKQotICAgICAgICBmb3VuZFNWR0ZvbnQgPSBpdGVtLT5pc1NWR0ZvbnRGYWNlU3JjKCkg
fHwgaXRlbS0+c3ZnRm9udEZhY2VFbGVtZW50KCk7CisgICAgICAgIGZvdW5kU1ZHRm9udCA9IGl0
ZW0uaXNTVkdGb250RmFjZVNyYygpIHx8IGl0ZW0uc3ZnRm9udEZhY2VFbGVtZW50KCk7CiAjZW5k
aWYKLSAgICAgICAgaWYgKCFpdGVtLT5pc0xvY2FsKCkpIHsKKyAgICAgICAgaWYgKCFpdGVtLmlz
TG9jYWwoKSkgewogICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9kb2N1bWVudCA/
IG1fZG9jdW1lbnQtPmZyYW1lKCkgPyAmbV9kb2N1bWVudC0+ZnJhbWUoKS0+c2V0dGluZ3MoKSA6
IDAgOiAwOwogICAgICAgICAgICAgYm9vbCBhbGxvd0Rvd25sb2FkaW5nID0gZm91bmRTVkdGb250
IHx8IChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+ZG93bmxvYWRhYmxlQmluYXJ5Rm9udHNFbmFibGVk
KCkpOwotICAgICAgICAgICAgaWYgKGFsbG93RG93bmxvYWRpbmcgJiYgaXRlbS0+aXNTdXBwb3J0
ZWRGb3JtYXQoKSAmJiBtX2RvY3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgQ2FjaGVkRm9udCog
Y2FjaGVkRm9udCA9IGl0ZW0tPmNhY2hlZEZvbnQobV9kb2N1bWVudCk7CisgICAgICAgICAgICBp
ZiAoYWxsb3dEb3dubG9hZGluZyAmJiBpdGVtLmlzU3VwcG9ydGVkRm9ybWF0KCkgJiYgbV9kb2N1
bWVudCkgeworICAgICAgICAgICAgICAgIENhY2hlZEZvbnQqIGNhY2hlZEZvbnQgPSBpdGVtLmNh
Y2hlZEZvbnQobV9kb2N1bWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKGNhY2hlZEZvbnQpIHsK
LSAgICAgICAgICAgICAgICAgICAgc291cmNlID0gc3RkOjptYWtlX3VuaXF1ZTxDU1NGb250RmFj
ZVNvdXJjZT4oaXRlbS0+cmVzb3VyY2UoKSwgY2FjaGVkRm9udCk7CisgICAgICAgICAgICAgICAg
ICAgIHNvdXJjZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NTRm9udEZhY2VTb3VyY2U+KGl0ZW0ucmVz
b3VyY2UoKSwgY2FjaGVkRm9udCk7CiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGZvdW5kU1ZHRm9udCkKICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJj
ZS0+c2V0SGFzRXh0ZXJuYWxTVkdGb250KHRydWUpOwpAQCAtMjIyLDcgKzIyMiw3IEBAIHZvaWQg
Q1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgU3R5bGVSdWxlRm9udEZhY2Uq
IGZvbnRGYWNlUnVsZSkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBzb3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENTU0ZvbnRG
YWNlU291cmNlPihpdGVtLT5yZXNvdXJjZSgpKTsKKyAgICAgICAgICAgIHNvdXJjZSA9IHN0ZDo6
bWFrZV91bmlxdWU8Q1NTRm9udEZhY2VTb3VyY2U+KGl0ZW0ucmVzb3VyY2UoKSk7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoIWZvbnRGYWNlKSB7CkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBD
U1NGb250U2VsZWN0b3I6OmFkZEZvbnRGYWNlUnVsZShjb25zdCBTdHlsZVJ1bGVGb250RmFjZSog
Zm9udEZhY2VSdWxlKQogCiAgICAgICAgIGlmIChzb3VyY2UpIHsKICNpZiBFTkFCTEUoU1ZHX0ZP
TlRTKQotICAgICAgICAgICAgc291cmNlLT5zZXRTVkdGb250RmFjZUVsZW1lbnQoaXRlbS0+c3Zn
Rm9udEZhY2VFbGVtZW50KCkpOworICAgICAgICAgICAgc291cmNlLT5zZXRTVkdGb250RmFjZUVs
ZW1lbnQoaXRlbS5zdmdGb250RmFjZUVsZW1lbnQoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIGZv
bnRGYWNlLT5hZGRTb3VyY2UoV1RGOjptb3ZlKHNvdXJjZSkpOwogICAgICAgICB9CkBAIC0yNTEs
MTUgKzI1MSwxNSBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvbnN0
IFN0eWxlUnVsZUZvbnRGYWNlKiBmb250RmFjZVJ1bGUpCiAgICAgaWYgKHJhbmdlTGlzdCkgewog
ICAgICAgICB1bnNpZ25lZCBudW1SYW5nZXMgPSByYW5nZUxpc3QtPmxlbmd0aCgpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtUmFuZ2VzOyBpKyspIHsKLSAgICAgICAgICAg
IENTU1VuaWNvZGVSYW5nZVZhbHVlKiByYW5nZSA9IHRvQ1NTVW5pY29kZVJhbmdlVmFsdWUocmFu
Z2VMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKLSAgICAgICAgICAgIGZvbnRGYWNl
LT5hZGRSYW5nZShyYW5nZS0+ZnJvbSgpLCByYW5nZS0+dG8oKSk7CisgICAgICAgICAgICBDU1NV
bmljb2RlUmFuZ2VWYWx1ZSYgcmFuZ2UgPSBkb3duY2FzdDxDU1NVbmljb2RlUmFuZ2VWYWx1ZT4o
KnJhbmdlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7CisgICAgICAgICAgICBmb250
RmFjZS0+YWRkUmFuZ2UocmFuZ2UuZnJvbSgpLCByYW5nZS50bygpKTsKICAgICAgICAgfQogICAg
IH0KIAogICAgIC8vIEhhc2ggdW5kZXIgZXZlcnkgc2luZ2xlIGZhbWlseSBuYW1lLgotICAgIGlu
dCBmYW1pbHlMZW5ndGggPSBmYW1pbHlMaXN0LT5sZW5ndGgoKTsKKyAgICBpbnQgZmFtaWx5TGVu
Z3RoID0gZmFtaWx5TGlzdC5sZW5ndGgoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZhbWls
eUxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBpdGVtID0gdG9DU1NQ
cmltaXRpdmVWYWx1ZShmYW1pbHlMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKKyAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGl0ZW0gPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oZmFtaWx5TGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKICAgICAgICAgU3RyaW5n
IGZhbWlseU5hbWU7CiAgICAgICAgIGlmIChpdGVtLT5pc1N0cmluZygpKSB7CiAgICAgICAgICAg
ICBmYW1pbHlOYW1lID0gaXRlbS0+Z2V0U3RyaW5nVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
VmFsdWUuaAppbmRleCA4MWFjNDFhN2FjMDk4NDU3M2E1Y2RjNDBjNDk1NTgyNzQyMTE1OTljLi4w
MGQ3MDFmOGMzMjQ4Y2M5MjVjMjc3YzU2M2M3NTMxNjdkNTg1YWY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRWYWx1ZS5oCkBAIC01NSw4ICs1NSw4IEBAIHByaXZhdGU6CiAgICAgfQogfTsKIAotQ1NT
X1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTRm9udFZhbHVlLCBpc0ZvbnRWYWx1ZSgpKQorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCi19IC8vIG5hbWVzcGFjZQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19D
U1NfVkFMVUUoQ1NTRm9udFZhbHVlLCBpc0ZvbnRWYWx1ZSgpKQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGdW5jdGlvblZhbHVlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRnVuY3Rpb25WYWx1ZS5oCmluZGV4IDUxMTEyM2I4NzMzYWYzZDdhMWJkMTJjNGE3
MGM5ZjJlNzg1ZWI1MWUuLjU1MWY0NWU4ODc0ZDAzNDZiZGJlNjAyN2E0OTUwNjI0MGM3Yjg4YzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGdW5jdGlvblZhbHVlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0Z1bmN0aW9uVmFsdWUuaApAQCAtNTksOCArNTksOSBAQCBw
cml2YXRlOgogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IG1fYXJnczsKIH07CiAKLUNTU19WQUxV
RV9UWVBFX0NBU1RTKENTU0Z1bmN0aW9uVmFsdWUsIGlzRnVuY3Rpb25WYWx1ZSgpKQorfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NG
dW5jdGlvblZhbHVlLCBpc0Z1bmN0aW9uVmFsdWUoKSkKIAotfQogI2VuZGlmCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAppbmRleCA0MzMzMmMwYmZhMTMzMmNkMWExYjNj
MmUzODRhN2I5MDVhYTkxOWQxLi4zMDI2NzU5ZTNjMzFjZGUxMzFlMmNmYzg3MDcxNTdlYTc4ZmFi
OGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCkBAIC00NiwxMiAr
NDYsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogUGFzc1JlZlB0cjxJbWFnZT4gQ1NTR3JhZGll
bnRWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkKIHsKICAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGJvb2wgY2FjaGVhYmxlID0gaXNDYWNoZWFibGUo
KTsKICAgICBpZiAoY2FjaGVhYmxlKSB7CiAgICAgICAgIGlmICghY2xpZW50cygpLmNvbnRhaW5z
KHJlbmRlcmVyKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKICAgICAgICAgSW1hZ2UqIHJlc3VsdCA9IGNhY2hlZEltYWdlRm9yU2l6ZShzaXpl
KTsKICAgICAgICAgaWYgKHJlc3VsdCkKQEAgLTYwLDEwICs2MCwxMCBAQCBQYXNzUmVmUHRyPElt
YWdlPiBDU1NHcmFkaWVudFZhbHVlOjppbWFnZShSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgY29u
c3QgRmxvYXRTaQogCiAgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudDsKIAotICAgIGlmIChp
c0xpbmVhckdyYWRpZW50VmFsdWUoKSkKLSAgICAgICAgZ3JhZGllbnQgPSB0b0NTU0xpbmVhckdy
YWRpZW50VmFsdWUodGhpcyktPmNyZWF0ZUdyYWRpZW50KCpyZW5kZXJlciwgc2l6ZSk7CisgICAg
aWYgKGlzPENTU0xpbmVhckdyYWRpZW50VmFsdWU+KCp0aGlzKSkKKyAgICAgICAgZ3JhZGllbnQg
PSBkb3duY2FzdDxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPigqdGhpcykuY3JlYXRlR3JhZGllbnQo
KnJlbmRlcmVyLCBzaXplKTsKICAgICBlbHNlCi0gICAgICAgIGdyYWRpZW50ID0gdG9DU1NSYWRp
YWxHcmFkaWVudFZhbHVlKHRoaXMpLT5jcmVhdGVHcmFkaWVudCgqcmVuZGVyZXIsIHNpemUpOwor
ICAgICAgICBncmFkaWVudCA9IGRvd25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCp0aGlz
KS5jcmVhdGVHcmFkaWVudCgqcmVuZGVyZXIsIHNpemUpOwogCiAgICAgUmVmUHRyPEdyYWRpZW50
SW1hZ2U+IG5ld0ltYWdlID0gR3JhZGllbnRJbWFnZTo6Y3JlYXRlKGdyYWRpZW50LCBzaXplKTsK
ICAgICBpZiAoY2FjaGVhYmxlKQpAQCAtMTE4LDEzICsxMTgsMTMgQEAgUGFzc1JlZlB0cjxDU1NH
cmFkaWVudFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZl
ZChTdHlsZVIKICAgICBSZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gcmVzdWx0OwogICAgIGlmICgh
ZGVyaXZlZCkKICAgICAgICAgcmVzdWx0ID0gdGhpczsKLSAgICBlbHNlIGlmIChpc0xpbmVhckdy
YWRpZW50VmFsdWUoKSkKLSAgICAgICAgcmVzdWx0ID0gdG9DU1NMaW5lYXJHcmFkaWVudFZhbHVl
KHRoaXMpLT5jbG9uZSgpOwotICAgIGVsc2UgaWYgKGlzUmFkaWFsR3JhZGllbnRWYWx1ZSgpKQot
ICAgICAgICByZXN1bHQgPSB0b0NTU1JhZGlhbEdyYWRpZW50VmFsdWUodGhpcyktPmNsb25lKCk7
CisgICAgZWxzZSBpZiAoaXM8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4oKnRoaXMpKQorICAgICAg
ICByZXN1bHQgPSBkb3duY2FzdDxDU1NMaW5lYXJHcmFkaWVudFZhbHVlPigqdGhpcykuY2xvbmUo
KTsKKyAgICBlbHNlIGlmIChpczxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigqdGhpcykpCisgICAg
ICAgIHJlc3VsdCA9IGRvd25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCp0aGlzKS5jbG9u
ZSgpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGZvciAoYXV0
byYgc3RvcCA6IHJlc3VsdC0+bV9zdG9wcykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0dyYWRpZW50VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZh
bHVlLmgKaW5kZXggZTQ1MjEyZjMwZWVlZWU5OWVkYmVmOTQwMTg1NjM3NDA1YTE3YzNlNy4uNmFi
NzhkYjAyOTVmNDMwMDEyOGY3NDE1ZWE0YjFiZDMwMjBkOWUxYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTR3JhZGllbnRWYWx1ZS5oCkBAIC0xMzEsOCArMTMxLDYgQEAgcHJvdGVjdGVkOgogICAgIGJv
b2wgbV9yZXBlYXRpbmc7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NHcmFkaWVudFZh
bHVlLCBpc0dyYWRpZW50VmFsdWUoKSkKLQogY2xhc3MgQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSA6
IHB1YmxpYyBDU1NHcmFkaWVudFZhbHVlIHsKIHB1YmxpYzoKIApAQCAtMTcwLDggKzE2OCw2IEBA
IHByaXZhdGU6CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2FuZ2xlOyAvLyBtYXkg
YmUgbnVsbC4KIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENTU0xpbmVhckdyYWRpZW50VmFs
dWUsIGlzTGluZWFyR3JhZGllbnRWYWx1ZSgpKQotCiBjbGFzcyBDU1NSYWRpYWxHcmFkaWVudFZh
bHVlIDogcHVibGljIENTU0dyYWRpZW50VmFsdWUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
UmVmPENTU1JhZGlhbEdyYWRpZW50VmFsdWU+IGNyZWF0ZShDU1NHcmFkaWVudFJlcGVhdCByZXBl
YXQsIENTU0dyYWRpZW50VHlwZSBncmFkaWVudFR5cGUgPSBDU1NSYWRpYWxHcmFkaWVudCkKQEAg
LTIzMyw4ICsyMjksMTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IG1fZW5kVmVydGljYWxTaXplOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTUmFkaWFs
R3JhZGllbnRWYWx1ZSwgaXNSYWRpYWxHcmFkaWVudFZhbHVlKCkpCi0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTR3JhZGllbnRW
YWx1ZSwgaXNHcmFkaWVudFZhbHVlKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxV
RShDU1NMaW5lYXJHcmFkaWVudFZhbHVlLCBpc0xpbmVhckdyYWRpZW50VmFsdWUoKSkKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU1JhZGlhbEdyYWRpZW50VmFsdWUsIGlzUmFk
aWFsR3JhZGllbnRWYWx1ZSgpKQorCiAjZW5kaWYgLy8gQ1NTR3JhZGllbnRWYWx1ZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLmgKaW5kZXggMWIwZDFiODdlZTZh
NGI3NzUwNTRkNDA0OWNjZTA4ZTIxN2ZiZmEyZS4uN2FiOGIyNThhOTY2NDk3ZjY4NzI1YTYxMjQw
M2NkMDUzMDA1ZTBhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyaWRMaW5l
TmFtZXNWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmlkTGluZU5hbWVzVmFs
dWUuaApAQCAtNTIsOSArNTIsOSBAQCBwcml2YXRlOgogICAgIENTU0dyaWRMaW5lTmFtZXNWYWx1
ZSgpOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLCBp
c0dyaWRMaW5lTmFtZXNWYWx1ZSgpKTsKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotfQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTR3JpZExpbmVOYW1lc1ZhbHVlLCBpc0dy
aWRMaW5lTmFtZXNWYWx1ZSgpKTsKIAotI2VuZGlmCi0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUo
Q1NTX0dSSURfTEFZT1VUKQorI2VuZGlmIC8vIENTU0dyaWRMaW5lTmFtZXNWYWx1ZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuaAppbmRleCA4ZDI1
ZjJjZDc1ZDVlMzI3NDkzMmFhNzVlYTc5YWE0ZWY5MDE2NTJlLi40OTg0ZTc2MGJlZDlhYjQ4MTQ3
ZmY5OTRhNjc3MjBmZTUwY2Q3ZTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
R3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmlk
VGVtcGxhdGVBcmVhc1ZhbHVlLmgKQEAgLTYyLDEwICs2MiwxMCBAQCBwcml2YXRlOgogICAgIHNp
emVfdCBtX2NvbHVtbkNvdW50OwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTR3JpZFRl
bXBsYXRlQXJlYXNWYWx1ZSwgaXNHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlKCkpCi0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTR3Jp
ZFRlbXBsYXRlQXJlYXNWYWx1ZSwgaXNHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlKCkpCisKICNlbmRp
ZiAvKiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKSAqLwogCiAjZW5kaWYgLy8gQ1NTR3JpZFRlbXBs
YXRlQXJlYXNWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZS5jcHAKaW5kZXggMGVmNzc0Zjg0YjFiYTY1Mzk2OWNlYTE4YTVlZDQ0NjI5OTYwYjRmMi4u
ZmI4OTk1NTcxNzU1NjNiOTU1ZDM4MTc4NzRlZDRiNzc4YzAyNDdjNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcApAQCAtMTA5LDE1ICsxMDksMTUg
QEAgUGFzc1JlZlB0cjxJbWFnZT4gQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6aW1hZ2UoUmVuZGVy
RWxlbWVudCogcmVuZGVyZXIsIGNvbnN0IEYKIHsKICAgICBzd2l0Y2ggKGNsYXNzVHlwZSgpKSB7
CiAgICAgY2FzZSBDYW52YXNDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTQ2FudmFzVmFsdWUo
dGhpcyktPmltYWdlKHJlbmRlcmVyLCBzaXplKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENT
U0NhbnZhc1ZhbHVlPigqdGhpcykuaW1hZ2UocmVuZGVyZXIsIHNpemUpOwogICAgIGNhc2UgQ3Jv
c3NmYWRlQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0Nyb3NzZmFkZVZhbHVlKHRoaXMpLT5p
bWFnZShyZW5kZXJlciwgc2l6ZSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDcm9zc2Zh
ZGVWYWx1ZT4oKnRoaXMpLmltYWdlKHJlbmRlcmVyLCBzaXplKTsKICAgICBjYXNlIEZpbHRlcklt
YWdlQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0ZpbHRlckltYWdlVmFsdWUodGhpcyktPmlt
YWdlKHJlbmRlcmVyLCBzaXplKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ZpbHRlcklt
YWdlVmFsdWU+KCp0aGlzKS5pbWFnZShyZW5kZXJlciwgc2l6ZSk7CiAgICAgY2FzZSBMaW5lYXJH
cmFkaWVudENsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NMaW5lYXJHcmFkaWVudFZhbHVlKHRo
aXMpLT5pbWFnZShyZW5kZXJlciwgc2l6ZSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NM
aW5lYXJHcmFkaWVudFZhbHVlPigqdGhpcykuaW1hZ2UocmVuZGVyZXIsIHNpemUpOwogICAgIGNh
c2UgUmFkaWFsR3JhZGllbnRDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTUmFkaWFsR3JhZGll
bnRWYWx1ZSh0aGlzKS0+aW1hZ2UocmVuZGVyZXIsIHNpemUpOworICAgICAgICByZXR1cm4gZG93
bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnRoaXMpLmltYWdlKHJlbmRlcmVyLCBzaXpl
KTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBA
IC0xMjgsMTUgKzEyOCwxNSBAQCBib29sIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmlzRml4ZWRT
aXplKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGNsYXNzVHlwZSgpKSB7CiAgICAgY2FzZSBDYW52
YXNDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTQ2FudmFzVmFsdWUodGhpcyktPmlzRml4ZWRT
aXplKCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDYW52YXNWYWx1ZT4oKnRoaXMpLmlz
Rml4ZWRTaXplKCk7CiAgICAgY2FzZSBDcm9zc2ZhZGVDbGFzczoKLSAgICAgICAgcmV0dXJuIHRv
Q1NTQ3Jvc3NmYWRlVmFsdWUodGhpcyktPmlzRml4ZWRTaXplKCk7CisgICAgICAgIHJldHVybiBk
b3duY2FzdDxDU1NDcm9zc2ZhZGVWYWx1ZT4oKnRoaXMpLmlzRml4ZWRTaXplKCk7CiAgICAgY2Fz
ZSBGaWx0ZXJJbWFnZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NGaWx0ZXJJbWFnZVZhbHVl
KHRoaXMpLT5pc0ZpeGVkU2l6ZSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTRmlsdGVy
SW1hZ2VWYWx1ZT4oKnRoaXMpLmlzRml4ZWRTaXplKCk7CiAgICAgY2FzZSBMaW5lYXJHcmFkaWVu
dENsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NMaW5lYXJHcmFkaWVudFZhbHVlKHRoaXMpLT5p
c0ZpeGVkU2l6ZSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTTGluZWFyR3JhZGllbnRW
YWx1ZT4oKnRoaXMpLmlzRml4ZWRTaXplKCk7CiAgICAgY2FzZSBSYWRpYWxHcmFkaWVudENsYXNz
OgotICAgICAgICByZXR1cm4gdG9DU1NSYWRpYWxHcmFkaWVudFZhbHVlKHRoaXMpLT5pc0ZpeGVk
U2l6ZSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4o
KnRoaXMpLmlzRml4ZWRTaXplKCk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgfQpAQCAtMTQ3LDE1ICsxNDcsMTUgQEAgRmxvYXRTaXplIENTU0ltYWdl
R2VuZXJhdG9yVmFsdWU6OmZpeGVkU2l6ZShjb25zdCBSZW5kZXJFbGVtZW50KiByZW5kZXJlcikK
IHsKICAgICBzd2l0Y2ggKGNsYXNzVHlwZSgpKSB7CiAgICAgY2FzZSBDYW52YXNDbGFzczoKLSAg
ICAgICAgcmV0dXJuIHRvQ1NTQ2FudmFzVmFsdWUodGhpcyktPmZpeGVkU2l6ZShyZW5kZXJlcik7
CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDYW52YXNWYWx1ZT4oKnRoaXMpLmZpeGVkU2l6
ZShyZW5kZXJlcik7CiAgICAgY2FzZSBDcm9zc2ZhZGVDbGFzczoKLSAgICAgICAgcmV0dXJuIHRv
Q1NTQ3Jvc3NmYWRlVmFsdWUodGhpcyktPmZpeGVkU2l6ZShyZW5kZXJlcik7CisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxDU1NDcm9zc2ZhZGVWYWx1ZT4oKnRoaXMpLmZpeGVkU2l6ZShyZW5kZXJl
cik7CiAgICAgY2FzZSBGaWx0ZXJJbWFnZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NGaWx0
ZXJJbWFnZVZhbHVlKHRoaXMpLT5maXhlZFNpemUocmVuZGVyZXIpOworICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oKnRoaXMpLmZpeGVkU2l6ZShyZW5kZXJlcik7
CiAgICAgY2FzZSBMaW5lYXJHcmFkaWVudENsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NMaW5l
YXJHcmFkaWVudFZhbHVlKHRoaXMpLT5maXhlZFNpemUocmVuZGVyZXIpOworICAgICAgICByZXR1
cm4gZG93bmNhc3Q8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4oKnRoaXMpLmZpeGVkU2l6ZShyZW5k
ZXJlcik7CiAgICAgY2FzZSBSYWRpYWxHcmFkaWVudENsYXNzOgotICAgICAgICByZXR1cm4gdG9D
U1NSYWRpYWxHcmFkaWVudFZhbHVlKHRoaXMpLT5maXhlZFNpemUocmVuZGVyZXIpOworICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnRoaXMpLmZpeGVkU2l6
ZShyZW5kZXJlcik7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQpAQCAtMTY2LDE1ICsxNjYsMTUgQEAgYm9vbCBDU1NJbWFnZUdlbmVyYXRvclZhbHVl
Ojppc1BlbmRpbmcoKSBjb25zdAogewogICAgIHN3aXRjaCAoY2xhc3NUeXBlKCkpIHsKICAgICBj
YXNlIENyb3NzZmFkZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NDcm9zc2ZhZGVWYWx1ZSh0
aGlzKS0+aXNQZW5kaW5nKCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDcm9zc2ZhZGVW
YWx1ZT4oKnRoaXMpLmlzUGVuZGluZygpOwogICAgIGNhc2UgQ2FudmFzQ2xhc3M6Ci0gICAgICAg
IHJldHVybiB0b0NTU0NhbnZhc1ZhbHVlKHRoaXMpLT5pc1BlbmRpbmcoKTsKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PENTU0NhbnZhc1ZhbHVlPigqdGhpcykuaXNQZW5kaW5nKCk7CiAgICAgY2Fz
ZSBGaWx0ZXJJbWFnZUNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NGaWx0ZXJJbWFnZVZhbHVl
KHRoaXMpLT5pc1BlbmRpbmcoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ZpbHRlcklt
YWdlVmFsdWU+KCp0aGlzKS5pc1BlbmRpbmcoKTsKICAgICBjYXNlIExpbmVhckdyYWRpZW50Q2xh
c3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0xpbmVhckdyYWRpZW50VmFsdWUodGhpcyktPmlzUGVu
ZGluZygpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4o
KnRoaXMpLmlzUGVuZGluZygpOwogICAgIGNhc2UgUmFkaWFsR3JhZGllbnRDbGFzczoKLSAgICAg
ICAgcmV0dXJuIHRvQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZSh0aGlzKS0+aXNQZW5kaW5nKCk7Cisg
ICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NSYWRpYWxHcmFkaWVudFZhbHVlPigqdGhpcykuaXNQ
ZW5kaW5nKCk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgfQpAQCAtMTg1LDE1ICsxODUsMTUgQEAgYm9vbCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpr
bm93blRvQmVPcGFxdWUoY29uc3QgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIpIGNvbnMKIHsKICAg
ICBzd2l0Y2ggKGNsYXNzVHlwZSgpKSB7CiAgICAgY2FzZSBDcm9zc2ZhZGVDbGFzczoKLSAgICAg
ICAgcmV0dXJuIHRvQ1NTQ3Jvc3NmYWRlVmFsdWUodGhpcyktPmtub3duVG9CZU9wYXF1ZShyZW5k
ZXJlcik7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDcm9zc2ZhZGVWYWx1ZT4oKnRoaXMp
Lmtub3duVG9CZU9wYXF1ZShyZW5kZXJlcik7CiAgICAgY2FzZSBDYW52YXNDbGFzczoKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgRmlsdGVySW1hZ2VDbGFzczoKLSAgICAgICAgcmV0
dXJuIHRvQ1NTRmlsdGVySW1hZ2VWYWx1ZSh0aGlzKS0+a25vd25Ub0JlT3BhcXVlKHJlbmRlcmVy
KTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KCp0aGlzKS5r
bm93blRvQmVPcGFxdWUocmVuZGVyZXIpOwogICAgIGNhc2UgTGluZWFyR3JhZGllbnRDbGFzczoK
LSAgICAgICAgcmV0dXJuIHRvQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSh0aGlzKS0+a25vd25Ub0Jl
T3BhcXVlKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0xpbmVhckdyYWRp
ZW50VmFsdWU+KCp0aGlzKS5rbm93blRvQmVPcGFxdWUocmVuZGVyZXIpOwogICAgIGNhc2UgUmFk
aWFsR3JhZGllbnRDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTUmFkaWFsR3JhZGllbnRWYWx1
ZSh0aGlzKS0+a25vd25Ub0JlT3BhcXVlKHJlbmRlcmVyKTsKKyAgICAgICAgcmV0dXJuIGRvd25j
YXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCp0aGlzKS5rbm93blRvQmVPcGFxdWUocmVuZGVy
ZXIpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0K
QEAgLTIwNCwxOSArMjA0LDE5IEBAIHZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6bG9hZFN1
YmltYWdlcyhDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMCiB7CiAgICAgc3dp
dGNoIChjbGFzc1R5cGUoKSkgewogICAgIGNhc2UgQ3Jvc3NmYWRlQ2xhc3M6Ci0gICAgICAgIHRv
Q1NTQ3Jvc3NmYWRlVmFsdWUodGhpcyktPmxvYWRTdWJpbWFnZXMoY2FjaGVkUmVzb3VyY2VMb2Fk
ZXIpOworICAgICAgICBkb3duY2FzdDxDU1NDcm9zc2ZhZGVWYWx1ZT4oKnRoaXMpLmxvYWRTdWJp
bWFnZXMoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENh
bnZhc0NsYXNzOgotICAgICAgICB0b0NTU0NhbnZhc1ZhbHVlKHRoaXMpLT5sb2FkU3ViaW1hZ2Vz
KGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKyAgICAgICAgZG93bmNhc3Q8Q1NTQ2FudmFzVmFsdWU+
KCp0aGlzKS5sb2FkU3ViaW1hZ2VzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBGaWx0ZXJJbWFnZUNsYXNzOgotICAgICAgICB0b0NTU0ZpbHRlckltYWdl
VmFsdWUodGhpcyktPmxvYWRTdWJpbWFnZXMoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOworICAgICAg
ICBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPigqdGhpcykubG9hZFN1YmltYWdlcyhjYWNo
ZWRSZXNvdXJjZUxvYWRlcik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTGluZWFyR3JhZGll
bnRDbGFzczoKLSAgICAgICAgdG9DU1NMaW5lYXJHcmFkaWVudFZhbHVlKHRoaXMpLT5sb2FkU3Vi
aW1hZ2VzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKyAgICAgICAgZG93bmNhc3Q8Q1NTTGluZWFy
R3JhZGllbnRWYWx1ZT4oKnRoaXMpLmxvYWRTdWJpbWFnZXMoY2FjaGVkUmVzb3VyY2VMb2FkZXIp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIFJhZGlhbEdyYWRpZW50Q2xhc3M6Ci0gICAgICAg
IHRvQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZSh0aGlzKS0+bG9hZFN1YmltYWdlcyhjYWNoZWRSZXNv
dXJjZUxvYWRlcik7CisgICAgICAgIGRvd25jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCp0
aGlzKS5sb2FkU3ViaW1hZ2VzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKICAgICAgICAgYnJlYWs7
CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yMjUsMTMg
KzIyNSwxMyBAQCB2b2lkIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmxvYWRTdWJpbWFnZXMoQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTAogCiBib29sIENTU0ltYWdlR2VuZXJh
dG9yVmFsdWU6OnN1YmltYWdlSXNQZW5kaW5nKENTU1ZhbHVlKiB2YWx1ZSkKIHsKLSAgICBpZiAo
dmFsdWUtPmlzSW1hZ2VWYWx1ZSgpKQotICAgICAgICByZXR1cm4gdG9DU1NJbWFnZVZhbHVlKHZh
bHVlKS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKTsKKyAgICBpZiAo
aXM8Q1NTSW1hZ2VWYWx1ZT4oKnZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0lt
YWdlVmFsdWU+KCp2YWx1ZSkuY2FjaGVkT3JQZW5kaW5nSW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2Uo
KTsKICAgICAKLSAgICBpZiAodmFsdWUtPmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKQotICAgICAg
ICByZXR1cm4gdG9DU1NJbWFnZUdlbmVyYXRvclZhbHVlKHZhbHVlKS0+aXNQZW5kaW5nKCk7Cisg
ICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KCp2YWx1ZSkpCisgICAgICAgIHJldHVy
biBkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPigqdmFsdWUpLmlzUGVuZGluZygpOwog
Ci0gICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgJiYgdG9DU1NQcmltaXRpdmVWYWx1
ZSh2YWx1ZSktPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCisgICAgaWYgKGlzPENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjQ0LDIxICsyNDQsMjEgQEAgQ2FjaGVk
SW1hZ2UqIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmNhY2hlZEltYWdlRm9yQ1NTVmFsdWUoQ1NT
VmFsdWUqIHZhbHVlLCBDYWMKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIGlmICh2YWx1ZS0+aXNJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAgU3R5bGVDYWNo
ZWRJbWFnZSogc3R5bGVDYWNoZWRJbWFnZSA9IHRvQ1NTSW1hZ2VWYWx1ZSh2YWx1ZSktPmNhY2hl
ZEltYWdlKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4o
KnZhbHVlKSkgeworICAgICAgICBTdHlsZUNhY2hlZEltYWdlKiBzdHlsZUNhY2hlZEltYWdlID0g
ZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oKnZhbHVlKS5jYWNoZWRJbWFnZShjYWNoZWRSZXNvdXJj
ZUxvYWRlcik7CiAgICAgICAgIGlmICghc3R5bGVDYWNoZWRJbWFnZSkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgICAgIHJldHVybiBzdHlsZUNhY2hlZEltYWdlLT5jYWNoZWRJ
bWFnZSgpOwogICAgIH0KICAgICAKLSAgICBpZiAodmFsdWUtPmlzSW1hZ2VHZW5lcmF0b3JWYWx1
ZSgpKSB7Ci0gICAgICAgIHRvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSh2YWx1ZSktPmxvYWRTdWJp
bWFnZXMoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOworICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRv
clZhbHVlPigqdmFsdWUpKSB7CisgICAgICAgIGRvd25jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFs
dWU+KCp2YWx1ZSkubG9hZFN1YmltYWdlcyhjYWNoZWRSZXNvdXJjZUxvYWRlcik7CiAgICAgICAg
IC8vIEZJWE1FOiBIYW5kbGUgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSAoYW5kIHRodXMgY3Jvc3Mt
ZmFkZXMgd2l0aCBncmFkaWVudHMgYW5kIGNhbnZhcykuCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAotICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpICYmIHRvQ1NTUHJp
bWl0aXZlVmFsdWUodmFsdWUpLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKQorICAgIGlm
IChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgKaW5kZXggNjNjODEzN2UyOWIwZjA4ZTNkYWVl
ZDAwOGMxY2I2ZjkxZDVkOGI2Yi4uN2Q5OWQ0MWVhNmE3NDA4M2NjODM0Mzg4YjMxZTU1MjQ4ODc3
M2I5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFs
dWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oCkBA
IC05Miw4ICs5Miw4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxGbG9hdFNpemUsIHN0ZDo6dW5p
cXVlX3B0cjxDYWNoZWRHZW5lcmF0ZWRJbWFnZT4+IG1faW1hZ2VzOwogfTsKIAotQ1NTX1ZBTFVF
X1RZUEVfQ0FTVFMoQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSwgaXNJbWFnZUdlbmVyYXRvclZhbHVl
KCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19D
U1NfVkFMVUUoQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSwgaXNJbWFnZUdlbmVyYXRvclZhbHVlKCkp
CisKICNlbmRpZiAvLyBDU1NJbWFnZUdlbmVyYXRvclZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NJbWFnZVNldFZhbHVlLmNwcAppbmRleCA0ZGJiMGU2NWIxY2ZjNzQ2OTljMWJjMzVlOTVkOTg5
M2FjMmE5YzNhLi4wN2FjYjc3NDljM2IwNTQ3ZTMwMGM1MzY5MDFmMWEwYjU0OWEwOGUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VTZXRWYWx1ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlU2V0VmFsdWUuY3BwCkBAIC03MCwxMyArNzAsMTIgQEAg
dm9pZCBDU1NJbWFnZVNldFZhbHVlOjpmaWxsSW1hZ2VTZXQoKQogICAgIHNpemVfdCBpID0gMDsK
ICAgICB3aGlsZSAoaSA8IGxlbmd0aCkgewogICAgICAgICBDU1NWYWx1ZSogaW1hZ2VWYWx1ZSA9
IGl0ZW0oaSk7Ci0gICAgICAgIFN0cmluZyBpbWFnZVVSTCA9IHRvQ1NTSW1hZ2VWYWx1ZShpbWFn
ZVZhbHVlKS0+dXJsKCk7CisgICAgICAgIFN0cmluZyBpbWFnZVVSTCA9IGRvd25jYXN0PENTU0lt
YWdlVmFsdWU+KCppbWFnZVZhbHVlKS51cmwoKTsKIAogICAgICAgICArK2k7CiAgICAgICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBsZW5ndGgpOwogICAgICAgICBDU1NW
YWx1ZSogc2NhbGVGYWN0b3JWYWx1ZSA9IGl0ZW0oaSk7Ci0gICAgICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKHNjYWxlRmFjdG9yVmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSk7
Ci0gICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gdG9DU1NQcmltaXRpdmVWYWx1ZShzY2FsZUZh
Y3RvclZhbHVlKS0+Z2V0RmxvYXRWYWx1ZSgpOworICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqc2NhbGVGYWN0b3JWYWx1ZSkuZ2V0RmxvYXRW
YWx1ZSgpOwogCiAgICAgICAgIEltYWdlV2l0aFNjYWxlIGltYWdlOwogICAgICAgICBpbWFnZS5p
bWFnZVVSTCA9IGltYWdlVVJMOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0lt
YWdlU2V0VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVNldFZhbHVlLmgKaW5k
ZXggYzE4OTlmM2FiNzAxODc4MWQ4MzkxYmExY2VjZWRkYTkxOGRhNTAyZC4uNDBhOTk2NTNjNzM3
ZGFkYjdhYzBhODYxODA5MjRkMTQ5Y2I1ZDNkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ltYWdlU2V0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VT
ZXRWYWx1ZS5oCkBAIC04NywxMCArODcsMTAgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8SW1hZ2VX
aXRoU2NhbGU+IG1faW1hZ2VzSW5TZXQ7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NJ
bWFnZVNldFZhbHVlLCBpc0ltYWdlU2V0VmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NJbWFnZVNldFZhbHVlLCBp
c0ltYWdlU2V0VmFsdWUoKSkKKwogI2VuZGlmIC8vIEVOQUJMRShDU1NfSU1BR0VfU0VUKQogCiAj
ZW5kaWYgLy8gQ1NTSW1hZ2VTZXRWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTSW1hZ2VWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlVmFsdWUuaApp
bmRleCA5Y2M4YmMzZTQ5NDJkNmMyNTY0MmVjZTQxZWVhYTBjNzYzMjEzYTk4Li45YzQyMDhmOWYy
YjAzMzBmY2JmNzgzNDY1YWM0YmVmNDE1NzgwN2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVZh
bHVlLmgKQEAgLTY5LDggKzY5LDggQEAgcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmcgbV9pbml0
aWF0b3JOYW1lOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTSW1hZ2VWYWx1ZSwgaXNJ
bWFnZVZhbHVlKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19DU1NfVkFMVUUoQ1NTSW1hZ2VWYWx1ZSwgaXNJbWFnZVZhbHVlKCkpCisKICNlbmRp
ZiAvLyBDU1NJbWFnZVZhbHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJ
bmhlcml0ZWRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0luaGVyaXRlZFZhbHVlLmgK
aW5kZXggZjZkMTY4ZWVhMDc2OGJmOGQwMTY2ZTVjNTM4ZmEwOGRiNjMwNmQ1NC4uMzE2NzFiYTcy
NTc3ZTdkOTYzM2U3MDRhZmExMzE1N2IwZjhhZjIyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0luaGVyaXRlZFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0lu
aGVyaXRlZFZhbHVlLmgKQEAgLTQ0LDggKzQ0LDggQEAgcHJpdmF0ZToKICAgICB9CiB9OwogCi1D
U1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NJbmhlcml0ZWRWYWx1ZSwgaXNJbmhlcml0ZWRWYWx1ZSgp
KQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NT
X1ZBTFVFKENTU0luaGVyaXRlZFZhbHVlLCBpc0luaGVyaXRlZFZhbHVlKCkpCisKICNlbmRpZiAv
LyBDU1NJbmhlcml0ZWRWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
SW5pdGlhbFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW5pdGlhbFZhbHVlLmgKaW5k
ZXggYTBhNmU1NTQ4ODVmYTEwODE1NjBjYWI2ODQ0MmQ3Nzk3YWUyZmUxYi4uOTExNmMxOGJkOWY5
NTE3ZDRlZjFiZjAzM2NkM2JhY2UyNWUyNjBjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0luaXRpYWxWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbml0aWFs
VmFsdWUuaApAQCAtNTMsOCArNTMsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0ltcGxpY2l0
OwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTSW5pdGlhbFZhbHVlLCBpc0luaXRpYWxW
YWx1ZSgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQ1NTX1ZBTFVFKENTU0luaXRpYWxWYWx1ZSwgaXNJbml0aWFsVmFsdWUoKSkKKwogI2VuZGlm
IC8vIENTU0luaXRpYWxWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
TGluZUJveENvbnRhaW5WYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0xpbmVCb3hDb250
YWluVmFsdWUuaAppbmRleCBiOTgwZThlZmE5ZTRiMWQxMDM3YjNkYjJiOGU5M2FiMjY2ZTI3ZDI0
Li5kNzY0M2ZhMzE0ZTAxZDNmOThhNDkwYjlmZDdhMWMxNDE0NDEwMmIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTTGluZUJveENvbnRhaW5WYWx1ZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NMaW5lQm94Q29udGFpblZhbHVlLmgKQEAgLTU2LDggKzU2LDggQEAgcHJp
dmF0ZToKICAgICBMaW5lQm94Q29udGFpbiBtX3ZhbHVlOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVf
Q0FTVFMoQ1NTTGluZUJveENvbnRhaW5WYWx1ZSwgaXNMaW5lQm94Q29udGFpblZhbHVlKCkpCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLX0gLy8gbmFtZXNwYWNlCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0NTU19WQUxVRShDU1NMaW5lQm94Q29udGFpblZhbHVlLCBpc0xpbmVCb3hDb250YWlu
VmFsdWUoKSkKIAotI2VuZGlmCisjZW5kaWYgLy8gQ1NTTGluZUJveENvbnRhaW5WYWx1ZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IGMzZGU2ZGM4ZmNkNzE3MDZjYzhlM2NmNDRjMTdi
NjI5ZmE5ODU0YzIuLmMwMGY5Nzg5NDljNTRmMWNiY2MwNjYyMGYxNzhjNjJjZjIzZGU0YzkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC0xMzQ1LDE0ICsxMzQ1LDE0IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZUNvbG9yKFJHQkEzMiYgY29sb3IsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBi
b29sIHN0cmljdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQ1NTVmFsdWUqIHZhbHVl
ID0gcGFyc2VyLm1fcGFyc2VkUHJvcGVydGllcy5maXJzdCgpLnZhbHVlKCk7Ci0gICAgaWYgKCF2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVl
KiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIGlmICgh
cHJpbWl0aXZlVmFsdWUtPmlzUkdCQ29sb3IoKSkKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBp
ZiAoIXByaW1pdGl2ZVZhbHVlLmlzUkdCQ29sb3IoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgY29sb3IgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UkdCQTMyVmFsdWUoKTsKKyAgICBjb2xv
ciA9IHByaW1pdGl2ZVZhbHVlLmdldFJHQkEzMlZhbHVlKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTMxMTgsNyArMzExOCw3IEBAIHZvaWQgQ1NTUGFyc2VyOjphZGRGaWxsVmFsdWUoUmVm
UHRyPENTU1ZhbHVlPiYgbHZhbCwgUGFzc1JlZjxDU1NWYWx1ZT4gcnZhbCkKICAgICB9CiAKICAg
ICBpZiAobHZhbC0+aXNCYXNlVmFsdWVMaXN0KCkpIHsKLSAgICAgICAgdG9DU1NWYWx1ZUxpc3Qo
Kmx2YWwpLmFwcGVuZChXVEY6Om1vdmUocnZhbCkpOworICAgICAgICBkb3duY2FzdDxDU1NWYWx1
ZUxpc3Q+KCpsdmFsKS5hcHBlbmQoV1RGOjptb3ZlKHJ2YWwpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMzQyNSw4ICszNDI1LDggQEAgdm9pZCBDU1NQYXJzZXI6OmFkZEFuaW1hdGlv
blZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFBhc3NSZWY8Q1NTVmFsdWU+IHJ2YWwKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChsdmFsLT5pc1ZhbHVlTGlzdCgpKSB7Ci0g
ICAgICAgIHRvQ1NTVmFsdWVMaXN0KCpsdmFsKS5hcHBlbmQoV1RGOjptb3ZlKHJ2YWwpKTsKKyAg
ICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqbHZhbCkpIHsKKyAgICAgICAgZG93bmNhc3Q8Q1NTVmFs
dWVMaXN0PigqbHZhbCkuYXBwZW5kKFdURjo6bW92ZShydmFsKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTQxNzAsMTAgKzQxNzAsMTAgQEAgdm9pZCBDU1NQYXJzZXI6OnBhcnNlM1Zh
bHVlc0ZpbGxQb3NpdGlvbihDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRyPEMK
ICAgICAgICAgdmFsdWUxLnN3YXAodmFsdWUyKTsKIAogI2lmbmRlZiBOREVCVUcKLSAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogZmlyc3QgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlMS5nZXQoKSk7
Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZCA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFs
dWUyLmdldCgpKTsKLSAgICBpZGVudDEgPSBmaXJzdC0+Z2V0UGFpclZhbHVlKCktPmZpcnN0KCkt
PmdldFZhbHVlSUQoKTsKLSAgICBpZGVudDIgPSBzZWNvbmQtPmdldFBhaXJWYWx1ZSgpLT5maXJz
dCgpLT5nZXRWYWx1ZUlEKCk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGZpcnN0ID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZTEpOworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBz
ZWNvbmQgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlMik7CisgICAgaWRlbnQx
ID0gZmlyc3QuZ2V0UGFpclZhbHVlKCktPmZpcnN0KCktPmdldFZhbHVlSUQoKTsKKyAgICBpZGVu
dDIgPSBzZWNvbmQuZ2V0UGFpclZhbHVlKCktPmZpcnN0KCktPmdldFZhbHVlSUQoKTsKICAgICBB
U1NFUlQoaWRlbnQxID09IENTU1ZhbHVlTGVmdCB8fCBpZGVudDEgPT0gQ1NTVmFsdWVSaWdodCk7
CiAgICAgQVNTRVJUKGlkZW50MiA9PSBDU1NWYWx1ZUJvdHRvbSB8fCBpZGVudDIgPT0gQ1NTVmFs
dWVUb3ApOwogI2VuZGlmCkBAIC00MjMxLDggKzQyMzEsOCBAQCB2b2lkIENTU1BhcnNlcjo6cGFy
c2VGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NW
YWx1ZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBwYXJzZWRWYWx1ZTEgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlMS5nZXQoKSk7Ci0g
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZWRWYWx1ZTIgPSB0b0NTU1ByaW1pdGl2
ZVZhbHVlKHZhbHVlMi5nZXQoKSk7CisgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJz
ZWRWYWx1ZTEgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUxLmdldCgpKTsKKyAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMiA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZTIuZ2V0KCkpOwogCiAgICAgdmFsdWUxLmNsZWFyKCk7CiAgICAg
dmFsdWUyLmNsZWFyKCk7CkBAIC00MzI5LDcgKzQzMjksNyBAQCB2b2lkIENTU1BhcnNlcjo6cGFy
c2VGaWxsUmVwZWF0KFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMSwgUmVmUHRyPENTU1ZhbHVlPiYg
dmFsdQogCiAgICAgLy8gSWYgb25seSBvbmUgdmFsdWUgd2FzIHNwZWNpZmllZCwgdmFsdWUyIGlz
IHRoZSBzYW1lIGFzIHZhbHVlMS4KICAgICBtX2ltcGxpY2l0U2hvcnRoYW5kID0gdHJ1ZTsKLSAg
ICB2YWx1ZTIgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodG9DU1NQcmlt
aXRpdmVWYWx1ZSh2YWx1ZTEuZ2V0KCkpLT5nZXRWYWx1ZUlEKCkpOworICAgIHZhbHVlMiA9IGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlMSkuZ2V0VmFsdWVJRCgpKTsKIH0KIAogUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZUZpbGxTaXplKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sJiBhbGxv
d0NvbW1hKQpAQCAtNDk0Niw3ICs0OTQ2LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZUdyaWRQb3NpdGlvbigpCiAKIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBn
cmlkTWlzc2luZ0dyaWRQb3NpdGlvblZhbHVlKENTU1ZhbHVlKiB2YWx1ZSkKIHsKLSAgICBpZiAo
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+
aXNTdHJpbmcoKSkKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0
dXJuIHZhbHVlOwogCiAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZUF1dG8pOwpAQCAtNDk5OCw3ICs0OTk4LDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlR3JpZFRlbXBsYXRlUm93c0FuZEFyZWFzKFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHRlbXBs
YXRlQ29sdW0KICAgICAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPnVuaXQgPT0gQ1NT
UGFyc2VyVmFsdWU6OlZhbHVlTGlzdCkgewogICAgICAgICAgICAgaWYgKHRyYWlsaW5nSWRlbnRX
YXNBZGRlZCkgewogICAgICAgICAgICAgICAgIC8vIEEgcm93J3MgdHJhaWxpbmcgaWRlbnQgbXVz
dCBiZSBjb25jYXRlbmF0ZWQgd2l0aCB0aGUgbmV4dCByb3cncyBsZWFkaW5nIG9uZS4KLSAgICAg
ICAgICAgICAgICBwYXJzZUdyaWRMaW5lTmFtZXMoKm1fdmFsdWVMaXN0LCAqdGVtcGxhdGVSb3dz
LCB0b0NTU0dyaWRMaW5lTmFtZXNWYWx1ZSh0ZW1wbGF0ZVJvd3MtPml0ZW0odGVtcGxhdGVSb3dz
LT5sZW5ndGgoKSAtIDEpKSk7CisgICAgICAgICAgICAgICAgcGFyc2VHcmlkTGluZU5hbWVzKCpt
X3ZhbHVlTGlzdCwgKnRlbXBsYXRlUm93cywgZG93bmNhc3Q8Q1NTR3JpZExpbmVOYW1lc1ZhbHVl
Pih0ZW1wbGF0ZVJvd3MtPml0ZW0odGVtcGxhdGVSb3dzLT5sZW5ndGgoKSAtIDEpKSk7CiAgICAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBwYXJzZUdyaWRMaW5lTmFtZXMoKm1fdmFs
dWVMaXN0LCAqdGVtcGxhdGVSb3dzKTsKICAgICAgICAgfQpAQCAtNTkwMCw3ICs1OTAwLDcgQEAg
UGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUNpcmNs
ZShDU1NQYXJzZXJWYWx1ZUxpc3QqIGEKICAgICAgICAgLy8gYXJndW1lbnRzIGV4Y2VwdCB0aGUg
Zmlyc3QgdHdvLiBUaHVzLCBhbmQgaW5kZXggZ3JlYXRlciB0aGFuIG9uZQogICAgICAgICAvLyBp
bmRpY2F0ZXMgYW4gaW52YWxpZCBwcm9kdWN0aW9uLgogICAgICAgICBpZiAoYXJncy0+Y3VycmVu
dEluZGV4KCkgPiAxKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgICAgICBpZiAoIWFyZ3MtPmN1cnJlbnRJbmRleCgpICYmIGFyZ3VtZW50
LT5pZCAhPSBDU1NWYWx1ZUF0KSB7CiAgICAgICAgICAgICBpZiAoUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiByYWRpdXMgPSBwYXJzZVNoYXBlUmFkaXVzKGFyZ3VtZW50KSkgewpAQCAtNTkwOCw3
ICs1OTA4LDcgQEAgUGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFz
aWNTaGFwZUNpcmNsZShDU1NQYXJzZXJWYWx1ZUxpc3QqIGEKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChhcmd1bWVudC0+aWQg
PT0gQ1NTVmFsdWVBdCAmJiBhcmdzLT5uZXh0KCkpIHsKQEAgLTU5MTYsMTQgKzU5MTYsMTIgQEAg
UGFzc1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUNpcmNs
ZShDU1NQYXJzZXJWYWx1ZUxpc3QqIGEKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY2Vu
dGVyWTsKICAgICAgICAgICAgIHBhcnNlRmlsbFBvc2l0aW9uKGFyZ3MsIGNlbnRlclgsIGNlbnRl
clkpOwogICAgICAgICAgICAgaWYgKGNlbnRlclggJiYgY2VudGVyWSAmJiAhYXJncy0+Y3VycmVu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGNlbnRlclgtPmlzUHJpbWl0aXZlVmFsdWUo
KSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGNlbnRlclktPmlzUHJpbWl0aXZlVmFsdWUoKSk7
Ci0gICAgICAgICAgICAgICAgc2hhcGUtPnNldENlbnRlclgodG9DU1NQcmltaXRpdmVWYWx1ZShj
ZW50ZXJYLmdldCgpKSk7Ci0gICAgICAgICAgICAgICAgc2hhcGUtPnNldENlbnRlclkodG9DU1NQ
cmltaXRpdmVWYWx1ZShjZW50ZXJZLmdldCgpKSk7CisgICAgICAgICAgICAgICAgc2hhcGUtPnNl
dENlbnRlclgoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGNlbnRlclguZ2V0KCkpKTsKKyAg
ICAgICAgICAgICAgICBzaGFwZS0+c2V0Q2VudGVyWShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oY2VudGVyWS5nZXQoKSkpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKICAgICByZXR1cm4gc2hhcGU7CkBAIC01OTQ2LDcgKzU5NDQsNyBAQCBQYXNzUmVmUHRy
PENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlRWxsaXBzZShDU1NQYXJz
ZXJWYWx1ZUxpc3QqCiAgICAgICAgIC8vIGFyZ3VtZW50cyBleGNlcHQgdGhlIGZpcnN0IHRocmVl
LiBUaHVzLCBhbiBpbmRleCBncmVhdGVyIHRoYW4gdHdvCiAgICAgICAgIC8vIGluZGljYXRlcyBh
biBpbnZhbGlkIHByb2R1Y3Rpb24uCiAgICAgICAgIGlmIChhcmdzLT5jdXJyZW50SW5kZXgoKSA+
IDIpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgICAgIGlmIChhcmdzLT5jdXJyZW50SW5kZXgoKSA8IDIgJiYgYXJndW1lbnQtPmlkICE9
IENTU1ZhbHVlQXQpIHsKICAgICAgICAgICAgIGlmIChSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHJhZGl1cyA9IHBhcnNlU2hhcGVSYWRpdXMoYXJndW1lbnQpKSB7CkBAIC01OTU3LDIyICs1OTU1
LDIwIEBAIFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gQ1NTUGFyc2VyOjpwYXJzZUJhc2ljU2hh
cGVFbGxpcHNlKENTU1BhcnNlclZhbHVlTGlzdCoKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChhcmd1bWVudC0+aWQgIT0gQ1NT
VmFsdWVBdCB8fCAhYXJncy0+bmV4dCgpKSAvLyBleHBlY3RpbmcgZWxsaXBzZSguLiBhdCA8cG9z
aXRpb24+KQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGNlbnRlclg7CiAgICAgICAgIFJlZlB0cjxD
U1NWYWx1ZT4gY2VudGVyWTsKICAgICAgICAgcGFyc2VGaWxsUG9zaXRpb24oYXJncywgY2VudGVy
WCwgY2VudGVyWSk7CiAgICAgICAgIGlmICghY2VudGVyWCB8fCAhY2VudGVyWSB8fCBhcmdzLT5j
dXJyZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgICAgIEFTU0VSVChjZW50ZXJYLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAg
ICAgICBBU1NFUlQoY2VudGVyWS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgc2hhcGUt
PnNldENlbnRlclgodG9DU1NQcmltaXRpdmVWYWx1ZShjZW50ZXJYLmdldCgpKSk7Ci0gICAgICAg
IHNoYXBlLT5zZXRDZW50ZXJZKHRvQ1NTUHJpbWl0aXZlVmFsdWUoY2VudGVyWS5nZXQoKSkpOwor
ICAgICAgICBzaGFwZS0+c2V0Q2VudGVyWChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY2Vu
dGVyWC5nZXQoKSkpOworICAgICAgICBzaGFwZS0+c2V0Q2VudGVyWShkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oY2VudGVyWS5nZXQoKSkpOwogICAgIH0KIAogICAgIHJldHVybiBzaGFwZTsK
QEAgLTgxMTUsNyArODExMSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRHcmFk
aWVudChDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRyPENTCiAgICAgICAgIGEg
PSBhcmdzLT5uZXh0KCk7CiAgICAgICAgIGlmICghYSB8fCBhLT51bml0ICE9IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB0
b0NTU1JhZGlhbEdyYWRpZW50VmFsdWUocmVzdWx0LmdldCgpKS0+c2V0Rmlyc3RSYWRpdXMoY3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGEpKTsKKyAgICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFs
R3JhZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0Rmlyc3RSYWRpdXMoY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKGEpKTsKIAogICAgICAgICAvLyBDb21tYSBhZnRlciB0aGUgZmlyc3QgcmFkaXVz
LgogICAgICAgICBhID0gYXJncy0+bmV4dCgpOwpAQCAtODE1Miw3ICs4MTQ4LDcgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCogdmFs
dWVMaXN0LCBSZWZQdHI8Q1MKICAgICAgICAgYSA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgaWYg
KCFhIHx8IGEtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHRvQ1NTUmFkaWFsR3JhZGllbnRWYWx1ZShyZXN1
bHQuZ2V0KCkpLT5zZXRTZWNvbmRSYWRpdXMoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGEp
KTsKKyAgICAgICAgZG93bmNhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZT4oKnJlc3VsdCkuc2V0
U2Vjb25kUmFkaXVzKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhKSk7CiAgICAgfQogCiAg
ICAgLy8gV2Ugbm93IHdpbGwgYWNjZXB0IGFueSBudW1iZXIgb2Ygc3RvcHMgKDAgb3IgbW9yZSku
CkBAIC04MzEyLDE0ICs4MzA4LDExIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRS
YWRpYWxHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgQVNTRVJUKCFjZW50ZXJYIHx8IGNlbnRl
clgtPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgQVNTRVJUKCFjZW50ZXJZIHx8IGNlbnRlclkt
PmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0KLSAgICByZXN1bHQtPnNldEZpcnN0WCh0b0NTU1ByaW1p
dGl2ZVZhbHVlKGNlbnRlclguZ2V0KCkpKTsKLSAgICByZXN1bHQtPnNldFNlY29uZFgodG9DU1NQ
cmltaXRpdmVWYWx1ZShjZW50ZXJYLmdldCgpKSk7CisgICAgcmVzdWx0LT5zZXRGaXJzdFgoZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGNlbnRlclguZ2V0KCkpKTsKKyAgICByZXN1bHQtPnNl
dFNlY29uZFgoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGNlbnRlclguZ2V0KCkpKTsKICAg
ICAvLyBDU1MzIHJhZGlhbCBncmFkaWVudHMgYWx3YXlzIHNoYXJlIHRoZSBzYW1lIHN0YXJ0IGFu
ZCBlbmQgcG9pbnQuCi0gICAgcmVzdWx0LT5zZXRGaXJzdFkodG9DU1NQcmltaXRpdmVWYWx1ZShj
ZW50ZXJZLmdldCgpKSk7Ci0gICAgcmVzdWx0LT5zZXRTZWNvbmRZKHRvQ1NTUHJpbWl0aXZlVmFs
dWUoY2VudGVyWS5nZXQoKSkpOworICAgIHJlc3VsdC0+c2V0Rmlyc3RZKGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPihjZW50ZXJZLmdldCgpKSk7CisgICAgcmVzdWx0LT5zZXRTZWNvbmRZKGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihjZW50ZXJZLmdldCgpKSk7CiAKICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IHNoYXBlVmFsdWU7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBzaXplVmFsdWU7CkBAIC04NTc4LDEzICs4NTcxLDExIEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVJhZGlhbEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0LCBSZWZQdHI8
Q1NTVmFsCiAgICAgICAgIGlmICghYSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICBBU1NFUlQoY2VudGVyWC0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgQVNTRVJU
KGNlbnRlclktPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0Rmlyc3RY
KHRvQ1NTUHJpbWl0aXZlVmFsdWUoY2VudGVyWC5nZXQoKSkpOwotICAgICAgICByZXN1bHQtPnNl
dEZpcnN0WSh0b0NTU1ByaW1pdGl2ZVZhbHVlKGNlbnRlclkuZ2V0KCkpKTsKKyAgICAgICAgcmVz
dWx0LT5zZXRGaXJzdFgoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGNlbnRlclguZ2V0KCkp
KTsKKyAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFkoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KGNlbnRlclkuZ2V0KCkpKTsKICAgICAgICAgLy8gUmlnaHQgbm93LCBDU1MgcmFkaWFsIGdyYWRp
ZW50cyBoYXZlIHRoZSBzYW1lIHN0YXJ0IGFuZCBlbmQgY2VudGVycy4KLSAgICAgICAgcmVzdWx0
LT5zZXRTZWNvbmRYKHRvQ1NTUHJpbWl0aXZlVmFsdWUoY2VudGVyWC5nZXQoKSkpOwotICAgICAg
ICByZXN1bHQtPnNldFNlY29uZFkodG9DU1NQcmltaXRpdmVWYWx1ZShjZW50ZXJZLmdldCgpKSk7
CisgICAgICAgIHJlc3VsdC0+c2V0U2Vjb25kWChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
Y2VudGVyWC5nZXQoKSkpOworICAgICAgICByZXN1bHQtPnNldFNlY29uZFkoZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KGNlbnRlclkuZ2V0KCkpKTsKICAgICB9CiAKICAgICBpZiAoc2hhcGVW
YWx1ZSB8fCBzaXplVmFsdWUgfHwgaG9yaXpvbnRhbFNpemUgfHwgY2VudGVyWCB8fCBjZW50ZXJZ
KQpAQCAtMTE3MzcsNyArMTE3MjgsNyBAQCBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IENTU1Bh
cnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxlKCkKICAgICAgICAgQ1NTUHJvcGVydHkmIHByb3BlcnR5
ID0gbV9wYXJzZWRQcm9wZXJ0aWVzW2ldOwogICAgICAgICBpZiAocHJvcGVydHkuaWQoKSA9PSBD
U1NQcm9wZXJ0eUZvbnRWYXJpYW50ICYmIHByb3BlcnR5LnZhbHVlKCktPmlzUHJpbWl0aXZlVmFs
dWUoKSkKICAgICAgICAgICAgIHByb3BlcnR5LndyYXBWYWx1ZUluQ29tbWFTZXBhcmF0ZWRMaXN0
KCk7Ci0gICAgICAgIGVsc2UgaWYgKHByb3BlcnR5LmlkKCkgPT0gQ1NTUHJvcGVydHlGb250RmFt
aWx5ICYmICghcHJvcGVydHkudmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSB8fCB0b0NTU1ZhbHVlTGlz
dChwcm9wZXJ0eS52YWx1ZSgpKS0+bGVuZ3RoKCkgIT0gMSkpIHsKKyAgICAgICAgZWxzZSBpZiAo
cHJvcGVydHkuaWQoKSA9PSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHkgJiYgKCFpczxDU1NWYWx1ZUxp
c3Q+KCpwcm9wZXJ0eS52YWx1ZSgpKSB8fCBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpwcm9wZXJ0
eS52YWx1ZSgpKS5sZW5ndGgoKSAhPSAxKSkgewogICAgICAgICAgICAgLy8gVW5saWtlIGZvbnQt
ZmFtaWx5IHByb3BlcnR5LCBmb250LWZhbWlseSBkZXNjcmlwdG9yIGluIEBmb250LWZhY2UgcnVs
ZQogICAgICAgICAgICAgLy8gaGFzIHRvIGJlIGEgdmFsdWUgbGlzdCB3aXRoIGV4YWN0bHkgb25l
IGZhbWlseSBuYW1lLiBJdCBjYW5ub3QgaGF2ZSBhCiAgICAgICAgICAgICAvLyBoYXZlICdpbml0
aWFsJyB2YWx1ZSBhbmQgY2Fubm90ICdpbmhlcml0JyBmcm9tIHBhcmVudC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgKaW5kZXggYTEzYzE1MzNhNDFmMzY0YWQ0ODk4ODZkM2I0
N2ExNmJiY2FiMTRlOS4uMjQ0NjA5M2IyOWZhMDIxYmFmZTFiZjJkMmY1ZGUyMzhjZmVkNmFiOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgKQEAgLTQyMSw4ICs0MjEsOCBA
QCBwcml2YXRlOgogICAgIH0gbV92YWx1ZTsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKENT
U1ByaW1pdGl2ZVZhbHVlLCBpc1ByaW1pdGl2ZVZhbHVlKCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTUHJpbWl0aXZlVmFs
dWUsIGlzUHJpbWl0aXZlVmFsdWUoKSkKKwogI2VuZGlmIC8vIENTU1ByaW1pdGl2ZVZhbHVlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuaAppbmRleCA4ZDBmZTYwNTljOWIyMTE4OTRh
MTI4YjlkYWQxZTg1NDFjZjBlZjExLi43MmUzNjZkZjFlZGE5NTk1YmQ3ZjVmZTUzYzFiOWY2MGFm
ZmE1Yzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUmVmbGVjdFZhbHVlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1JlZmxlY3RWYWx1ZS5oCkBAIC02Nyw4ICs2Nyw4
IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBtX21hc2s7CiB9OwogCi1DU1NfVkFM
VUVfVFlQRV9DQVNUUyhDU1NSZWZsZWN0VmFsdWUsIGlzUmVmbGVjdFZhbHVlKCkpCi0KIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NT
UmVmbGVjdFZhbHVlLCBpc1JlZmxlY3RWYWx1ZSgpKQorCiAjZW5kaWYgLy8gQ1NTUmVmbGVjdFZh
bHVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTaGFkb3dWYWx1ZS5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1NoYWRvd1ZhbHVlLmgKaW5kZXggNjE3NWRmODI2ZmE5MTJi
ZDA4NjQxMmJjY2ZiZTEzYTVmNWIxZDI5MC4uMDA2YzYyOTJmMTZjNGIxMTQ0OTQzYzMxNGE4ODhm
MmI3ZTg3OTZmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NoYWRvd1ZhbHVl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NoYWRvd1ZhbHVlLmgKQEAgLTYyLDggKzYy
LDggQEAgcHJpdmF0ZToKICAgICAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29s
b3IpOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTU2hhZG93VmFsdWUsIGlzU2hhZG93
VmFsdWUoKSkKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotfSAvLyBuYW1lc3BhY2UKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU1NoYWRvd1ZhbHVlLCBpc1NoYWRvd1ZhbHVl
KCkpCiAKLSNlbmRpZgorI2VuZGlmIC8vIENTU1NoYWRvd1ZhbHVlX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oCmluZGV4IDY2YzJjM2IyNTZmMDhjMTcwODYz
NTEzYWRiZWY4ZGIyOGU5YmEwMDMuLmMzOWFiMGNmZjIwZGI1YWQ4OTk0Yjc2NDc2N2VkOGM1Y2Rl
NWRmMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZh
bHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaApA
QCAtNjMsOCArNjMsNiBAQCBwcml2YXRlOgogICAgIGRvdWJsZSBtX3kyOwogfTsKIAotQ1NTX1ZB
TFVFX1RZUEVfQ0FTVFMoQ1NTQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlLCBpc0N1Ymlj
QmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSgpKQotCiBjbGFzcyBDU1NTdGVwc1RpbWluZ0Z1bmN0
aW9uVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
PENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZT4gY3JlYXRlKGludCBzdGVwcywgYm9vbCBzdGVw
QXRTdGFydCkKQEAgLTkxLDggKzg5LDkgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc3RlcEF0U3Rh
cnQ7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFs
dWUsIGlzU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlKCkpCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKLX0gLy8gbmFtZXNwYWNlCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1ND
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUsIGlzQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
blZhbHVlKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NTdGVwc1RpbWlu
Z0Z1bmN0aW9uVmFsdWUsIGlzU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlKCkpCiAKLSNlbmRpZgor
I2VuZGlmIC8vIENTU1RpbWluZ0Z1bmN0aW9uVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5
bGVNYXAuY3BwCmluZGV4IDUxM2M0ZDliNzM5YjU3NDhhOGYzODgwOTMxZGJlNzMwODAxZGE5MWQu
LjMwNjE5MGE4YzM1ZjM0YTZmODFkMzkxYzhiZGY3NDg5NGExODJiNGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVG9TdHlsZU1hcC5jcHAKQEAgLTc0LDEwICs3NCwxMCBAQCB2b2lkIENTU1RvU3R5bGVN
YXA6Om1hcEZpbGxBdHRhY2htZW50KENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENT
U1ZhbHVlKgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIHN3aXRjaCAodG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSkt
PmdldFZhbHVlSUQoKSkgeworICAgIHN3aXRjaCAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpKSB7CiAgICAgY2FzZSBDU1NWYWx1ZUZpeGVkOgogICAgICAg
ICBsYXllci0+c2V0QXR0YWNobWVudChGaXhlZEJhY2tncm91bmRBdHRhY2htZW50KTsKICAgICAg
ICAgYnJlYWs7CkBAIC05OSwxMSArOTksMTEgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxs
Q2xpcChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1p
dGl2ZVZhbHVlKHZhbHVlKTsKLSAgICBsYXllci0+c2V0Q2xpcCgqcHJpbWl0aXZlVmFsdWUpOwor
ICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGxheWVyLT5zZXRDbGlwKHByaW1pdGl2ZVZhbHVlKTsK
IH0KIAogdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsQ29tcG9zaXRlKENTU1Byb3BlcnR5SUQs
IEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKQEAgLTExMywxMSArMTEzLDExIEBA
IHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbENvbXBvc2l0ZShDU1NQcm9wZXJ0eUlELCBGaWxs
TGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSoKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
ICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZh
bHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSog
cHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICBsYXllci0+
c2V0Q29tcG9zaXRlKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHBy
aW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAg
bGF5ZXItPnNldENvbXBvc2l0ZShwcmltaXRpdmVWYWx1ZSk7CiB9CiAKIHZvaWQgQ1NTVG9TdHls
ZU1hcDo6bWFwRmlsbEJsZW5kTW9kZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBD
U1NWYWx1ZSogdmFsdWUpCkBAIC0xMjcsMTEgKzEyNywxMSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6
Om1hcEZpbGxCbGVuZE1vZGUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFs
dWUqCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9D
U1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgbGF5ZXItPnNldEJsZW5kTW9kZSgqcHJpbWl0
aXZlVmFsdWUpOworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGxheWVyLT5zZXRCbGVuZE1vZGUo
cHJpbWl0aXZlVmFsdWUpOwogfQogCiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxPcmlnaW4o
Q1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQpAQCAtMTQx
LDExICsxNDEsMTEgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsT3JpZ2luKENTU1Byb3Bl
cnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWwKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlz
PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVl
KTsKLSAgICBsYXllci0+c2V0T3JpZ2luKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgQ1NTUHJpbWl0
aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSk7CisgICAgbGF5ZXItPnNldE9yaWdpbihwcmltaXRpdmVWYWx1ZSk7CiB9CiAKIApAQCAt
MTY2LDExICsxNjYsMTEgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WChDU1NQ
cm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmEKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAo
IWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBD
U1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZh
bHVlKTsKLSAgICBsYXllci0+c2V0UmVwZWF0WCgqcHJpbWl0aXZlVmFsdWUpOworICAgIENTU1By
aW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqdmFsdWUpOworICAgIGxheWVyLT5zZXRSZXBlYXRYKHByaW1pdGl2ZVZhbHVlKTsKIH0KIAog
dm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0WShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5
ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCkBAIC0xODAsMzEgKzE4MCwzMSBAQCB2b2lkIENT
U1RvU3R5bGVNYXA6Om1hcEZpbGxSZXBlYXRZKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5
ZXIsIENTU1ZhbHVlKiB2YQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIGxheWVyLT5zZXRSZXBl
YXRZKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZh
bHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgbGF5ZXItPnNl
dFJlcGVhdFkocHJpbWl0aXZlVmFsdWUpOwogfQogCiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZp
bGxTaXplKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
IHsKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICBpZiAoIWlzPENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSB7CiAgICAgICAgIGxheWVyLT5zZXRTaXplVHlwZShT
aXplTm9uZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUNvbnRhaW4pCisgICAgQ1NT
UHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NW
YWx1ZUNvbnRhaW4pCiAgICAgICAgIGxheWVyLT5zZXRTaXplVHlwZShDb250YWluKTsKLSAgICBl
bHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ292ZXIpCisg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ292ZXIp
CiAgICAgICAgIGxheWVyLT5zZXRTaXplVHlwZShDb3Zlcik7CiAgICAgZWxzZQogICAgICAgICBs
YXllci0+c2V0U2l6ZVR5cGUoU2l6ZUxlbmd0aCk7CiAKICAgICBMZW5ndGhTaXplIGIgPSBGaWxs
TGF5ZXI6OmluaXRpYWxGaWxsU2l6ZUxlbmd0aChsYXllci0+dHlwZSgpKTsKIAotICAgIGlmICh2
YWx1ZS0+aXNJbml0aWFsVmFsdWUoKSB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09
IENTU1ZhbHVlQ29udGFpbiB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1Zh
bHVlQ292ZXIpIHsKKyAgICBpZiAodmFsdWUtPmlzSW5pdGlhbFZhbHVlKCkgfHwgcHJpbWl0aXZl
VmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQ29udGFpbiB8fCBwcmltaXRpdmVWYWx1ZS5n
ZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVDb3ZlcikgewogICAgICAgICBsYXllci0+c2V0U2l6ZUxl
bmd0aChiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIxMiwxMyArMjEyLDEzIEBAIHZv
aWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFNpemUoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBs
YXllciwgQ1NTVmFsdWUqIHZhbHVlCiAgICAgTGVuZ3RoIGZpcnN0TGVuZ3RoOwogICAgIExlbmd0
aCBzZWNvbmRMZW5ndGg7CiAKLSAgICBpZiAoUGFpciogcGFpciA9IHByaW1pdGl2ZVZhbHVlLT5n
ZXRQYWlyVmFsdWUoKSkgeworICAgIGlmIChQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUuZ2V0
UGFpclZhbHVlKCkpIHsKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0ID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihwYWlyLT5maXJzdCgpKTsKICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHNlY29uZCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4ocGFp
ci0+c2Vjb25kKCkpOwogICAgICAgICBmaXJzdExlbmd0aCA9IGZpcnN0LT5jb252ZXJ0VG9MZW5n
dGg8QW55Q29udmVyc2lvbj4obV9yZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNp
b25EYXRhKCkpOwogICAgICAgICBzZWNvbmRMZW5ndGggPSBzZWNvbmQtPmNvbnZlcnRUb0xlbmd0
aDxBbnlDb252ZXJzaW9uPihtX3Jlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEoKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZmlyc3RMZW5ndGggPSBwcmltaXRpdmVW
YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KG1fcmVzb2x2ZXItPnN0YXRlKCku
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKKyAgICAgICAgZmlyc3RMZW5ndGggPSBwcmlt
aXRpdmVWYWx1ZS5jb252ZXJ0VG9MZW5ndGg8QW55Q29udmVyc2lvbj4obV9yZXNvbHZlci0+c3Rh
dGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwogICAgICAgICBzZWNvbmRMZW5ndGgg
PSBMZW5ndGgoKTsKICAgICB9CiAKQEAgLTIzNywxMCArMjM3LDEwIEBAIHZvaWQgQ1NTVG9TdHls
ZU1hcDo6bWFwRmlsbFhQb3NpdGlvbihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEZpbGxMYXll
ciogbGF5ZXIsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBQ
YWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1ZSgpOwogICAgIGlmIChwYWly
KSB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQocHJvcGVydHlJRCwgcHJvcGVydHlJRCA9PSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblggfHwgcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tQb3NpdGlvblgpOwpAQCAtMjY5LDEwICsyNjksMTAgQEAgdm9pZCBDU1NUb1N0eWxl
TWFwOjptYXBGaWxsWVBvc2l0aW9uKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgRmlsbExheWVy
KiBsYXllciwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIFBh
aXIqIHBhaXIgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UGFpclZhbHVlKCk7CiAgICAgaWYgKHBhaXIp
IHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChwcm9wZXJ0eUlELCBwcm9wZXJ0eUlEID09IENTU1By
b3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWSB8fCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5V2Vi
a2l0TWFza1Bvc2l0aW9uWSk7CkBAIC0zMDIsMTEgKzMwMiwxMSBAQCB2b2lkIENTU1RvU3R5bGVN
YXA6Om1hcEZpbGxNYXNrU291cmNlVHlwZShDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVy
LCBDU1NWYQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9
IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUt
PmdldFZhbHVlSUQoKSkgeworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIHN3aXRjaCAocHJpbWl0
aXZlVmFsdWUuZ2V0VmFsdWVJRCgpKSB7CiAgICAgY2FzZSBDU1NWYWx1ZUFscGhhOgogICAgICAg
ICB0eXBlID0gRU1hc2tTb3VyY2VUeXBlOjpNYXNrQWxwaGE7CiAgICAgICAgIGJyZWFrOwpAQCAt
MzI5LDExICszMjksMTEgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25EZWxheShB
bmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUp
OwotICAgIGFuaW1hdGlvbi0+c2V0RGVsYXkocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGRv
dWJsZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlNlY29uZHM+KCkpOworICAgIENTU1ByaW1pdGl2ZVZh
bHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUp
OworICAgIGFuaW1hdGlvbi0+c2V0RGVsYXkocHJpbWl0aXZlVmFsdWUuY29tcHV0ZVRpbWU8ZG91
YmxlLCBDU1NQcmltaXRpdmVWYWx1ZTo6U2Vjb25kcz4oKSk7CiB9CiAKIHZvaWQgQ1NTVG9TdHls
ZU1hcDo6bWFwQW5pbWF0aW9uRGlyZWN0aW9uKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKQEAgLTM0MywxMSArMzQzLDExIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0
aW9uRGlyZWN0aW9uKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAg
ICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKHZhbHVlKTsKLSAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsK
KyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVl
SUQoKSkgewogICAgIGNhc2UgQ1NTVmFsdWVOb3JtYWw6CiAgICAgICAgIGxheWVyLT5zZXREaXJl
Y3Rpb24oQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25Ob3JtYWwpOwogICAgICAgICBicmVh
azsKQEAgLTM3MiwxMSArMzcyLDExIEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9u
RHVyYXRpb24oQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAg
ICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKHZhbHVlKTsKLSAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKHByaW1pdGl2ZVZhbHVlLT5j
b21wdXRlVGltZTxkb3VibGUsIENTU1ByaW1pdGl2ZVZhbHVlOjpTZWNvbmRzPigpKTsKKyAgICBD
U1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKTsKKyAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKHByaW1pdGl2ZVZhbHVl
LmNvbXB1dGVUaW1lPGRvdWJsZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlNlY29uZHM+KCkpOwogfQog
CiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvbkZpbGxNb2RlKEFuaW1hdGlvbiogbGF5
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKQEAgLTM4NiwxMSArMzg2LDExIEBAIHZvaWQgQ1NTVG9TdHls
ZU1hcDo6bWFwQW5pbWF0aW9uRmlsbE1vZGUoQW5pbWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdl
dFZhbHVlSUQoKSkgeworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIHN3aXRjaCAocHJpbWl0aXZl
VmFsdWUuZ2V0VmFsdWVJRCgpKSB7CiAgICAgY2FzZSBDU1NWYWx1ZU5vbmU6CiAgICAgICAgIGxh
eWVyLT5zZXRGaWxsTW9kZShBbmltYXRpb25GaWxsTW9kZU5vbmUpOwogICAgICAgICBicmVhazsK
QEAgLTQxNSwxNCArNDE1LDE0IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uSXRl
cmF0aW9uQ291bnQoQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAg
aWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSh2YWx1ZSk7Ci0gICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFs
dWVJbmZpbml0ZSkKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBpZiAocHJpbWl0aXZlVmFsdWUu
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlSW5maW5pdGUpCiAgICAgICAgIGFuaW1hdGlvbi0+c2V0
SXRlcmF0aW9uQ291bnQoQW5pbWF0aW9uOjpJdGVyYXRpb25Db3VudEluZmluaXRlKTsKICAgICBl
bHNlCi0gICAgICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQocHJpbWl0aXZlVmFsdWUt
PmdldEZsb2F0VmFsdWUoKSk7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0SXRlcmF0aW9uQ291bnQo
cHJpbWl0aXZlVmFsdWUuZ2V0RmxvYXRWYWx1ZSgpKTsKIH0KIAogdm9pZCBDU1NUb1N0eWxlTWFw
OjptYXBBbmltYXRpb25OYW1lKEFuaW1hdGlvbiogbGF5ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKQEAg
LTQzMiwxNCArNDMyLDE0IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uTmFtZShB
bmltYXRpb24qIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0g
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKQorICAg
IENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPigqdmFsdWUpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVOb25lKQogICAgICAgICBsYXllci0+c2V0SXNOb25lQW5pbWF0aW9uKHRydWUpOwog
ICAgIGVsc2UKLSAgICAgICAgbGF5ZXItPnNldE5hbWUocHJpbWl0aXZlVmFsdWUtPmdldFN0cmlu
Z1ZhbHVlKCkpOworICAgICAgICBsYXllci0+c2V0TmFtZShwcmltaXRpdmVWYWx1ZS5nZXRTdHJp
bmdWYWx1ZSgpKTsKIH0KIAogdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25QbGF5U3Rh
dGUoQW5pbWF0aW9uKiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQpAQCAtNDQ5LDExICs0NDksMTEg
QEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRpb25QbGF5U3RhdGUoQW5pbWF0aW9uKiBs
YXllciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYg
KCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgIEVBbmltUGxh
eVN0YXRlIHBsYXlTdGF0ZSA9IChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1Zh
bHVlUGF1c2VkKSA/IEFuaW1QbGF5U3RhdGVQYXVzZWQgOiBBbmltUGxheVN0YXRlUGxheWluZzsK
KyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBFQW5pbVBsYXlTdGF0ZSBwbGF5U3RhdGUgPSAocHJp
bWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlUGF1c2VkKSA/IEFuaW1QbGF5U3Rh
dGVQYXVzZWQgOiBBbmltUGxheVN0YXRlUGxheWluZzsKICAgICBsYXllci0+c2V0UGxheVN0YXRl
KHBsYXlTdGF0ZSk7CiB9CiAKQEAgLTQ2NSwxOSArNDY1LDE5IEBAIHZvaWQgQ1NTVG9TdHlsZU1h
cDo6bWFwQW5pbWF0aW9uUHJvcGVydHkoQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZh
bHVlSUQoKSA9PSBDU1NWYWx1ZUFsbCkgeworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRp
dmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGlmIChw
cmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVBbGwpIHsKICAgICAgICAgYW5p
bWF0aW9uLT5zZXRBbmltYXRpb25Nb2RlKEFuaW1hdGlvbjo6QW5pbWF0ZUFsbCk7CiAgICAgICAg
IGFuaW1hdGlvbi0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJbnZhbGlkKTsKLSAgICB9IGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKSB7CisgICAg
fSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKSB7
CiAgICAgICAgIGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uTW9kZShBbmltYXRpb246OkFuaW1hdGVO
b25lKTsKICAgICAgICAgYW5pbWF0aW9uLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUludmFsaWQp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uTW9kZShBbmlt
YXRpb246OkFuaW1hdGVTaW5nbGVQcm9wZXJ0eSk7Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0UHJv
cGVydHkocHJpbWl0aXZlVmFsdWUtPmdldFByb3BlcnR5SUQoKSk7CisgICAgICAgIGFuaW1hdGlv
bi0+c2V0UHJvcGVydHkocHJpbWl0aXZlVmFsdWUuZ2V0UHJvcGVydHlJRCgpKTsKICAgICB9CiB9
CiAKQEAgLTQ4OCw5ICs0ODgsOSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblRp
bWluZ0Z1bmN0aW9uKEFuaW1hdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdgogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQo
KSkgeworICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlE
KCkpIHsKICAgICAgICAgY2FzZSBDU1NWYWx1ZUxpbmVhcjoKICAgICAgICAgICAgIGFuaW1hdGlv
bi0+c2V0VGltaW5nRnVuY3Rpb24oTGluZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtNTE4LDIzICs1MTgsMjMgQEAgdm9pZCBDU1NUb1N0eWxlTWFw
OjptYXBBbmltYXRpb25UaW1pbmdGdW5jdGlvbihBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFs
dWUqIHYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICh2YWx1ZS0+aXNDdWJpY0Jl
emllclRpbWluZ0Z1bmN0aW9uVmFsdWUoKSkgewotICAgICAgICBDU1NDdWJpY0JlemllclRpbWlu
Z0Z1bmN0aW9uVmFsdWUqIGN1YmljVGltaW5nRnVuY3Rpb24gPSB0b0NTU0N1YmljQmV6aWVyVGlt
aW5nRnVuY3Rpb25WYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVu
Y3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKGN1YmljVGltaW5nRnVuY3Rp
b24tPngxKCksIGN1YmljVGltaW5nRnVuY3Rpb24tPnkxKCksIGN1YmljVGltaW5nRnVuY3Rpb24t
PngyKCksIGN1YmljVGltaW5nRnVuY3Rpb24tPnkyKCkpKTsKLSAgICB9IGVsc2UgaWYgKHZhbHVl
LT5pc1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZSgpKSB7Ci0gICAgICAgIENTU1N0ZXBzVGltaW5n
RnVuY3Rpb25WYWx1ZSogc3RlcHNUaW1pbmdGdW5jdGlvbiA9IHRvQ1NTU3RlcHNUaW1pbmdGdW5j
dGlvblZhbHVlKHZhbHVlKTsKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihT
dGVwc1RpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoc3RlcHNUaW1pbmdGdW5jdGlvbi0+bnVtYmVyT2ZT
dGVwcygpLCBzdGVwc1RpbWluZ0Z1bmN0aW9uLT5zdGVwQXRTdGFydCgpKSk7CisgICAgaWYgKGlz
PENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICBD
U1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUmIGN1YmljVGltaW5nRnVuY3Rpb24gPSBk
b3duY2FzdDxDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWU+KCp2YWx1ZSk7CisgICAg
ICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
bjo6Y3JlYXRlKGN1YmljVGltaW5nRnVuY3Rpb24ueDEoKSwgY3ViaWNUaW1pbmdGdW5jdGlvbi55
MSgpLCBjdWJpY1RpbWluZ0Z1bmN0aW9uLngyKCksIGN1YmljVGltaW5nRnVuY3Rpb24ueTIoKSkp
OworICAgIH0gZWxzZSBpZiAoaXM8Q1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlPigqdmFsdWUp
KSB7CisgICAgICAgIENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZSYgc3RlcHNUaW1pbmdGdW5j
dGlvbiA9IGRvd25jYXN0PENTU1N0ZXBzVGltaW5nRnVuY3Rpb25WYWx1ZT4oKnZhbHVlKTsKKyAg
ICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihTdGVwc1RpbWluZ0Z1bmN0aW9uOjpj
cmVhdGUoc3RlcHNUaW1pbmdGdW5jdGlvbi5udW1iZXJPZlN0ZXBzKCksIHN0ZXBzVGltaW5nRnVu
Y3Rpb24uc3RlcEF0U3RhcnQoKSkpOwogICAgIH0KIH0KIAogdm9pZCBDU1NUb1N0eWxlTWFwOjpt
YXBOaW5lUGllY2VJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUs
IE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKIHsKICAgICAvLyBJZiB3ZSdyZSBub3QgYSB2YWx1ZSBs
aXN0LCB0aGVuIHdlIGFyZSAibm9uZSIgYW5kIGRvbid0IG5lZWQgdG8gYWx0ZXIgdGhlIGVtcHR5
IGltYWdlIGF0IGFsbC4KLSAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkK
KyAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4odmFsdWUpKQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBSZXRyaWV2ZSB0aGUgYm9yZGVyIGltYWdlIHZhbHVlLgotICAgIENTU1ZhbHVlTGlzdCog
Ym9yZGVySW1hZ2UgPSB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSk7CisgICAgQ1NTVmFsdWVMaXN0JiBi
b3JkZXJJbWFnZSA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKIAogICAgIC8vIFNl
dCB0aGUgaW1hZ2UgKHRoaXMga2lja3Mgb2ZmIHRoZSBsb2FkKS4KICAgICBDU1NQcm9wZXJ0eUlE
IGltYWdlUHJvcGVydHk7CkBAIC01NDUsOCArNTQ1LDggQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjpt
YXBOaW5lUGllY2VJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUs
IE4KICAgICBlbHNlCiAgICAgICAgIGltYWdlUHJvcGVydHkgPSBwcm9wZXJ0eTsKIAotICAgIGZv
ciAodW5zaWduZWQgaSA9IDAgOyBpIDwgYm9yZGVySW1hZ2UtPmxlbmd0aCgpIDsgKytpKSB7Ci0g
ICAgICAgIENTU1ZhbHVlKiBjdXJyZW50ID0gYm9yZGVySW1hZ2UtPml0ZW0oaSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMCA7IGkgPCBib3JkZXJJbWFnZS5sZW5ndGgoKTsgKytpKSB7CisgICAg
ICAgIENTU1ZhbHVlKiBjdXJyZW50ID0gYm9yZGVySW1hZ2UuaXRlbShpKTsKIAogICAgICAgICBp
ZiAoY3VycmVudC0+aXNJbWFnZVZhbHVlKCkgfHwgY3VycmVudC0+aXNJbWFnZUdlbmVyYXRvclZh
bHVlKCkKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKQEAgLTU1NiwxOSArNTU2LDE5IEBAIHZv
aWQgQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgQ1NTVmFsdWUqIHZhbHVlLCBOCiAgICAgICAgICAgICBpbWFnZS5zZXRJbWFnZShzdHlsZUlt
YWdlKGltYWdlUHJvcGVydHksIGN1cnJlbnQpKTsKICAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+
aXNCb3JkZXJJbWFnZVNsaWNlVmFsdWUoKSkKICAgICAgICAgICAgIG1hcE5pbmVQaWVjZUltYWdl
U2xpY2UoY3VycmVudCwgaW1hZ2UpOwotICAgICAgICBlbHNlIGlmIChjdXJyZW50LT5pc1ZhbHVl
TGlzdCgpKSB7Ci0gICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIHNsYXNoTGlzdCA9IHRvQ1NTVmFs
dWVMaXN0KGN1cnJlbnQpOworICAgICAgICBlbHNlIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCpjdXJy
ZW50KSkgeworICAgICAgICAgICAgQ1NTVmFsdWVMaXN0JiBzbGFzaExpc3QgPSBkb3duY2FzdDxD
U1NWYWx1ZUxpc3Q+KCpjdXJyZW50KTsKICAgICAgICAgICAgIC8vIE1hcCBpbiB0aGUgaW1hZ2Ug
c2xpY2VzLgotICAgICAgICAgICAgaWYgKHNsYXNoTGlzdC0+aXRlbSgwKSAmJiBzbGFzaExpc3Qt
Pml0ZW0oMCktPmlzQm9yZGVySW1hZ2VTbGljZVZhbHVlKCkpCi0gICAgICAgICAgICAgICAgbWFw
TmluZVBpZWNlSW1hZ2VTbGljZShzbGFzaExpc3QtPml0ZW0oMCksIGltYWdlKTsKKyAgICAgICAg
ICAgIGlmIChzbGFzaExpc3QuaXRlbSgwKSAmJiBzbGFzaExpc3QuaXRlbSgwKS0+aXNCb3JkZXJJ
bWFnZVNsaWNlVmFsdWUoKSkKKyAgICAgICAgICAgICAgICBtYXBOaW5lUGllY2VJbWFnZVNsaWNl
KHNsYXNoTGlzdC5pdGVtKDApLCBpbWFnZSk7CiAKICAgICAgICAgICAgIC8vIE1hcCBpbiB0aGUg
Ym9yZGVyIHNsaWNlcy4KLSAgICAgICAgICAgIGlmIChzbGFzaExpc3QtPml0ZW0oMSkpCi0gICAg
ICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKG1hcE5pbmVQaWVjZUltYWdlUXVhZChz
bGFzaExpc3QtPml0ZW0oMSkpKTsKKyAgICAgICAgICAgIGlmIChzbGFzaExpc3QuaXRlbSgxKSkK
KyAgICAgICAgICAgICAgICBpbWFnZS5zZXRCb3JkZXJTbGljZXMobWFwTmluZVBpZWNlSW1hZ2VR
dWFkKHNsYXNoTGlzdC5pdGVtKDEpKSk7CiAKICAgICAgICAgICAgIC8vIE1hcCBpbiB0aGUgb3V0
c2V0LgotICAgICAgICAgICAgaWYgKHNsYXNoTGlzdC0+aXRlbSgyKSkKLSAgICAgICAgICAgICAg
ICBpbWFnZS5zZXRPdXRzZXQobWFwTmluZVBpZWNlSW1hZ2VRdWFkKHNsYXNoTGlzdC0+aXRlbSgy
KSkpOworICAgICAgICAgICAgaWYgKHNsYXNoTGlzdC5pdGVtKDIpKQorICAgICAgICAgICAgICAg
IGltYWdlLnNldE91dHNldChtYXBOaW5lUGllY2VJbWFnZVF1YWQoc2xhc2hMaXN0Lml0ZW0oMikp
KTsKICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAg
ICAgICAgICAgIC8vIFNldCB0aGUgYXBwcm9wcmlhdGUgcnVsZXMgZm9yIHN0cmV0Y2gvcm91bmQv
cmVwZWF0IG9mIHRoZSBzbGljZXMuCiAgICAgICAgICAgICBtYXBOaW5lUGllY2VJbWFnZVJlcGVh
dChjdXJyZW50LCBpbWFnZSk7CkBAIC01OTIsMTUgKzU5MiwxNSBAQCB2b2lkIENTU1RvU3R5bGVN
YXA6Om1hcE5pbmVQaWVjZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2
YWx1ZSwgTgogCiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlU2xpY2UoQ1NT
VmFsdWUqIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCiB7Ci0gICAgaWYgKCF2YWx1ZSB8
fCAhdmFsdWUtPmlzQm9yZGVySW1hZ2VTbGljZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NCb3Jk
ZXJJbWFnZVNsaWNlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gUmV0
cmlldmUgdGhlIGJvcmRlciBpbWFnZSB2YWx1ZS4KLSAgICBDU1NCb3JkZXJJbWFnZVNsaWNlVmFs
dWUqIGJvcmRlckltYWdlU2xpY2UgPSB0b0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZSh2YWx1ZSk7
CisgICAgQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlJiBib3JkZXJJbWFnZVNsaWNlID0gZG93bmNh
c3Q8Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlPigqdmFsdWUpOwogCiAgICAgLy8gU2V0IHVwIGEg
bGVuZ3RoIGJveCB0byByZXByZXNlbnQgb3VyIGltYWdlIHNsaWNlcy4KICAgICBMZW5ndGhCb3gg
Ym94OwotICAgIFF1YWQqIHNsaWNlcyA9IGJvcmRlckltYWdlU2xpY2UtPnNsaWNlcygpOworICAg
IFF1YWQqIHNsaWNlcyA9IGJvcmRlckltYWdlU2xpY2Uuc2xpY2VzKCk7CiAgICAgaWYgKHNsaWNl
cy0+dG9wKCktPmlzUGVyY2VudGFnZSgpKQogICAgICAgICBib3gubV90b3AgPSBMZW5ndGgoc2xp
Y2VzLT50b3AoKS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CiAgICAgZWxzZQpAQCAtNjIw
LDIzICs2MjAsMjMgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVNsaWNl
KENTU1ZhbHVlKiB2YWx1ZSwgTmluZVBpZWNlSW1hZ2UmIGltYWcKICAgICBpbWFnZS5zZXRJbWFn
ZVNsaWNlcyhib3gpOwogCiAgICAgLy8gU2V0IG91ciBmaWxsIG1vZGUuCi0gICAgaW1hZ2Uuc2V0
RmlsbChib3JkZXJJbWFnZVNsaWNlLT5tX2ZpbGwpOworICAgIGltYWdlLnNldEZpbGwoYm9yZGVy
SW1hZ2VTbGljZS5tX2ZpbGwpOwogfQogCiBMZW5ndGhCb3ggQ1NTVG9TdHlsZU1hcDo6bWFwTmlu
ZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlKiB2YWx1ZSkKIHsKLSAgICBpZiAoIXZhbHVlIHx8ICF2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhbHVlKSkKICAgICAgICAgcmV0dXJuIExlbmd0aEJveCgpOwogCiAgICAgLy8gR2V0IG91ciB6
b29tIHZhbHVlLgogICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEg
PSB1c2VTVkdab29tUnVsZXMoKSA/IG1fcmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpIDogbV9yZXNvbHZlci0+c3Rh
dGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CiAKICAgICAvLyBSZXRyaWV2ZSB0aGUg
cHJpbWl0aXZlIHZhbHVlLgotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBib3JkZXJXaWR0aHMgPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgYm9yZGVy
V2lkdGhzID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAKICAgICAvLyBT
ZXQgdXAgYSBsZW5ndGggYm94IHRvIHJlcHJlc2VudCBvdXIgaW1hZ2Ugc2xpY2VzLgogICAgIExl
bmd0aEJveCBib3g7IC8vIERlZmF1bHRzIHRvICdhdXRvJyBzbyB3ZSBkb24ndCBoYXZlIHRvIGhh
bmRsZSB0aGF0IGV4cGxpY2l0bHkgYmVsb3cuCi0gICAgUXVhZCogc2xpY2VzID0gYm9yZGVyV2lk
dGhzLT5nZXRRdWFkVmFsdWUoKTsKKyAgICBRdWFkKiBzbGljZXMgPSBib3JkZXJXaWR0aHMuZ2V0
UXVhZFZhbHVlKCk7CiAgICAgaWYgKHNsaWNlcy0+dG9wKCktPmlzTnVtYmVyKCkpCiAgICAgICAg
IGJveC5tX3RvcCA9IExlbmd0aChzbGljZXMtPnRvcCgpLT5nZXRJbnRWYWx1ZSgpLCBSZWxhdGl2
ZSk7CiAgICAgZWxzZSBpZiAoc2xpY2VzLT50b3AoKS0+aXNQZXJjZW50YWdlKCkpCkBAIC02NzAs
MTEgKzY3MCwxMSBAQCBMZW5ndGhCb3ggQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VR
dWFkKENTU1ZhbHVlKiB2YWx1ZSkKIAogdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJ
bWFnZVJlcGVhdChDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkKIHsKLSAg
ICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7
Ci0gICAgUGFpciogcGFpciA9IHByaW1pdGl2ZVZhbHVlLT5nZXRQYWlyVmFsdWUoKTsKKyAgICBD
U1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKTsKKyAgICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUuZ2V0UGFpclZh
bHVlKCk7CiAgICAgaWYgKCFwYWlyIHx8ICFwYWlyLT5maXJzdCgpIHx8ICFwYWlyLT5zZWNvbmQo
KSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VW5pY29kZVJhbmdlVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VW
YWx1ZS5oCmluZGV4IDU5ZGFjOGU1YzA5NzdiMmM2NTE0YjFkZjI3MDY0MzE2MWRhMjkyM2MuLjA2
YzE3NzQwMDg3NTViNjI1NmNhNDQzMTg0MDYyNWE5Yzg3OTk3MjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oCkBAIC01Nyw4ICs1Nyw4IEBAIHByaXZhdGU6CiAg
ICAgVUNoYXIzMiBtX3RvOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVfQ0FTVFMoQ1NTVW5pY29kZVJh
bmdlVmFsdWUsIGlzVW5pY29kZVJhbmdlVmFsdWUoKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NVbmljb2RlUmFuZ2VWYWx1
ZSwgaXNVbmljb2RlUmFuZ2VWYWx1ZSgpKQorCiAjZW5kaWYgLy8gQ1NTVW5pY29kZVJhbmdlVmFs
dWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5jcHAKaW5kZXggYWFjZjY4Njg1M2Q1YjI1YmE1MTA3Nzg1
OTY2MzkzMjA0ZDIwNTRlNi4uZDAyOWVjMTdlZTIzY2IyN2YyYzAwZDI5MGQ3OTMxNTgzZGRlMTFi
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuY3BwCkBAIC05MSw3ICs5MSw3IEBAIHByaXZhdGU6CiAK
IGJvb2wgQ1NTVmFsdWU6OmlzSW1wbGljaXRJbml0aWFsVmFsdWUoKSBjb25zdAogewotICAgIHJl
dHVybiBtX2NsYXNzVHlwZSA9PSBJbml0aWFsQ2xhc3MgJiYgdG9DU1NJbml0aWFsVmFsdWUodGhp
cyktPmlzSW1wbGljaXQoKTsKKyAgICByZXR1cm4gbV9jbGFzc1R5cGUgPT0gSW5pdGlhbENsYXNz
ICYmIGRvd25jYXN0PENTU0luaXRpYWxWYWx1ZT4oKnRoaXMpLmlzSW1wbGljaXQoKTsKIH0KIAog
Q1NTVmFsdWU6OlR5cGUgQ1NTVmFsdWU6OmNzc1ZhbHVlVHlwZSgpIGNvbnN0CkBAIC0xMTIsMTQg
KzExMiwxNCBAQCB2b2lkIENTU1ZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFz
aFNldDxVUkw+JiB1cmxzLCBjb25zdCBTdHlsZVNoZWV0QwogICAgIC8vIFRoaXMgc2hvdWxkIGdl
dCBjYWxsZWQgZm9yIGludGVybmFsIGluc3RhbmNlcyBvbmx5LgogICAgIEFTU0VSVCghaXNDU1NP
TVNhZmUoKSk7CiAKLSAgICBpZiAoaXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICB0b0NTU1By
aW1pdGl2ZVZhbHVlKHRoaXMpLT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBzdHlsZVNo
ZWV0KTsKLSAgICBlbHNlIGlmIChpc1ZhbHVlTGlzdCgpKQotICAgICAgICB0b0NTU1ZhbHVlTGlz
dCh0aGlzKS0+YWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJscywgc3R5bGVTaGVldCk7Ci0gICAg
ZWxzZSBpZiAoY2xhc3NUeXBlKCkgPT0gRm9udEZhY2VTcmNDbGFzcykKLSAgICAgICAgdG9DU1NG
b250RmFjZVNyY1ZhbHVlKHRoaXMpLT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBzdHls
ZVNoZWV0KTsKLSAgICBlbHNlIGlmIChjbGFzc1R5cGUoKSA9PSBSZWZsZWN0Q2xhc3MpCi0gICAg
ICAgIHRvQ1NTUmVmbGVjdFZhbHVlKHRoaXMpLT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxz
LCBzdHlsZVNoZWV0KTsKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0aGlzKSkKKyAg
ICAgICAgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0aGlzKS5hZGRTdWJyZXNvdXJjZVN0
eWxlVVJMcyh1cmxzLCBzdHlsZVNoZWV0KTsKKyAgICBlbHNlIGlmIChpczxDU1NWYWx1ZUxpc3Q+
KCp0aGlzKSkKKyAgICAgICAgZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdGhpcykuYWRkU3VicmVz
b3VyY2VTdHlsZVVSTHModXJscywgc3R5bGVTaGVldCk7CisgICAgZWxzZSBpZiAoaXM8Q1NTRm9u
dEZhY2VTcmNWYWx1ZT4oKnRoaXMpKQorICAgICAgICBkb3duY2FzdDxDU1NGb250RmFjZVNyY1Zh
bHVlPigqdGhpcykuYWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJscywgc3R5bGVTaGVldCk7Cisg
ICAgZWxzZSBpZiAoaXM8Q1NTUmVmbGVjdFZhbHVlPigqdGhpcykpCisgICAgICAgIGRvd25jYXN0
PENTU1JlZmxlY3RWYWx1ZT4oKnRoaXMpLmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKHVybHMsIHN0
eWxlU2hlZXQpOwogfQogCiBib29sIENTU1ZhbHVlOjpoYXNGYWlsZWRPckNhbmNlbGVkU3VicmVz
b3VyY2VzKCkgY29uc3QKQEAgLTEyNywxOSArMTI3LDE5IEBAIGJvb2wgQ1NTVmFsdWU6Omhhc0Zh
aWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoKSBjb25zdAogICAgIC8vIFRoaXMgc2hvdWxkIGdl
dCBjYWxsZWQgZm9yIGludGVybmFsIGluc3RhbmNlcyBvbmx5LgogICAgIEFTU0VSVCghaXNDU1NP
TVNhZmUoKSk7CiAKLSAgICBpZiAoaXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgcmV0dXJuIHRvQ1NT
VmFsdWVMaXN0KHRoaXMpLT5oYXNGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKCk7Ci0gICAg
aWYgKGNsYXNzVHlwZSgpID09IEZvbnRGYWNlU3JjQ2xhc3MpCi0gICAgICAgIHJldHVybiB0b0NT
U0ZvbnRGYWNlU3JjVmFsdWUodGhpcyktPmhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMo
KTsKLSAgICBpZiAoY2xhc3NUeXBlKCkgPT0gSW1hZ2VDbGFzcykKLSAgICAgICAgcmV0dXJuIHRv
Q1NTSW1hZ2VWYWx1ZSh0aGlzKS0+aGFzRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcygpOwot
ICAgIGlmIChjbGFzc1R5cGUoKSA9PSBDcm9zc2ZhZGVDbGFzcykKLSAgICAgICAgcmV0dXJuIHRv
Q1NTQ3Jvc3NmYWRlVmFsdWUodGhpcyktPmhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMo
KTsKLSAgICBpZiAoY2xhc3NUeXBlKCkgPT0gRmlsdGVySW1hZ2VDbGFzcykKLSAgICAgICAgcmV0
dXJuIHRvQ1NTRmlsdGVySW1hZ2VWYWx1ZSh0aGlzKS0+aGFzRmFpbGVkT3JDYW5jZWxlZFN1YnJl
c291cmNlcygpOworICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp0aGlzKSkKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnRoaXMpLmhhc0ZhaWxlZE9yQ2FuY2VsZWRTdWJy
ZXNvdXJjZXMoKTsKKyAgICBpZiAoaXM8Q1NTRm9udEZhY2VTcmNWYWx1ZT4oKnRoaXMpKQorICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTRm9udEZhY2VTcmNWYWx1ZT4oKnRoaXMpLmhhc0ZhaWxl
ZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoKTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oKnRo
aXMpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oKnRoaXMpLmhhc0Zh
aWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoKTsKKyAgICBpZiAoaXM8Q1NTQ3Jvc3NmYWRlVmFs
dWU+KCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPigq
dGhpcykuaGFzRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcygpOworICAgIGlmIChpczxDU1NG
aWx0ZXJJbWFnZVZhbHVlPigqdGhpcykpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NGaWx0
ZXJJbWFnZVZhbHVlPigqdGhpcykuaGFzRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcygpOwog
I2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQotICAgIGlmIChjbGFzc1R5cGUoKSA9PSBJbWFnZVNl
dENsYXNzKQotICAgICAgICByZXR1cm4gdG9DU1NJbWFnZVNldFZhbHVlKHRoaXMpLT5oYXNGYWls
ZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKCk7CisgICAgaWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+
KCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ltYWdlU2V0VmFsdWU+KCp0aGlz
KS5oYXNGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKCk7CiAjZW5kaWYKICAgICByZXR1cm4g
ZmFsc2U7CiB9CkBAIC0yMjksOSArMjI5LDkgQEAgYm9vbCBDU1NWYWx1ZTo6ZXF1YWxzKGNvbnN0
IENTU1ZhbHVlJiBvdGhlcikgY29uc3QKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICht
X2NsYXNzVHlwZSA9PSBWYWx1ZUxpc3RDbGFzcyAmJiBvdGhlci5tX2NsYXNzVHlwZSAhPSBWYWx1
ZUxpc3RDbGFzcykKLSAgICAgICAgcmV0dXJuIHRvQ1NTVmFsdWVMaXN0KHRoaXMpLT5lcXVhbHMo
b3RoZXIpOwotICAgIGVsc2UgaWYgKG1fY2xhc3NUeXBlICE9IFZhbHVlTGlzdENsYXNzICYmIG90
aGVyLm1fY2xhc3NUeXBlID09IFZhbHVlTGlzdENsYXNzKQorICAgIH0gZWxzZSBpZiAoaXM8Q1NT
VmFsdWVMaXN0PigqdGhpcykgJiYgIWlzPENTU1ZhbHVlTGlzdD4ob3RoZXIpKQorICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdGhpcykuZXF1YWxzKG90aGVyKTsKKyAgICBl
bHNlIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqdGhpcykgJiYgaXM8Q1NTVmFsdWVMaXN0PihvdGhl
cikpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDU1NWYWx1ZUxpc3QmPihvdGhl
cikuZXF1YWxzKCp0aGlzKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yNDYsNzEgKzI0Niw3
MSBAQCBTdHJpbmcgQ1NTVmFsdWU6OmNzc1RleHQoKSBjb25zdAogCiAgICAgc3dpdGNoIChjbGFz
c1R5cGUoKSkgewogICAgIGNhc2UgQXNwZWN0UmF0aW9DbGFzczoKLSAgICAgICAgcmV0dXJuIHRv
Q1NTQXNwZWN0UmF0aW9WYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1
cm4gZG93bmNhc3Q8Q1NTQXNwZWN0UmF0aW9WYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsK
ICAgICBjYXNlIEJvcmRlckltYWdlU2xpY2VDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTQm9y
ZGVySW1hZ2VTbGljZVZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVy
biBkb3duY2FzdDxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0
KCk7CiAgICAgY2FzZSBDYW52YXNDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTQ2FudmFzVmFs
dWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0Nh
bnZhc1ZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgQ3Vyc29ySW1hZ2VD
bGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSh0aGlzKS0+Y3VzdG9t
Q1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4o
KnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIEZpbHRlckltYWdlQ2xhc3M6Ci0gICAg
ICAgIHJldHVybiB0b0NTU0ZpbHRlckltYWdlVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KCp0aGlzKS5jdXN0
b21DU1NUZXh0KCk7CiAgICAgY2FzZSBGb250Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0Zv
bnRWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q1NTRm9udFZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgRm9udEZhY2VT
cmNDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTRm9udEZhY2VTcmNWYWx1ZSh0aGlzKS0+Y3Vz
dG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTRm9udEZhY2VTcmNWYWx1
ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIEZvbnRGZWF0dXJlQ2xhc3M6Ci0g
ICAgICAgIHJldHVybiB0b0NTU0ZvbnRGZWF0dXJlVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQo
KTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0ZvbnRGZWF0dXJlVmFsdWU+KCp0aGlzKS5j
dXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBGdW5jdGlvbkNsYXNzOgotICAgICAgICByZXR1cm4g
dG9DU1NGdW5jdGlvblZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVy
biBkb3duY2FzdDxDU1NGdW5jdGlvblZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAg
IGNhc2UgTGluZWFyR3JhZGllbnRDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTTGluZWFyR3Jh
ZGllbnRWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNh
c3Q8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBj
YXNlIFJhZGlhbEdyYWRpZW50Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU1JhZGlhbEdyYWRp
ZW50VmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENTU1JhZGlhbEdyYWRpZW50VmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2Fz
ZSBDcm9zc2ZhZGVDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTQ3Jvc3NmYWRlVmFsdWUodGhp
cyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0Nyb3NzZmFk
ZVZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgSW1hZ2VDbGFzczoKLSAg
ICAgICAgcmV0dXJuIHRvQ1NTSW1hZ2VWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQo
KTsKICAgICBjYXNlIEluaGVyaXRlZENsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NJbmhlcml0
ZWRWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q1NTSW5oZXJpdGVkVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBJbml0
aWFsQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0luaXRpYWxWYWx1ZSh0aGlzKS0+Y3VzdG9t
Q1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTSW5pdGlhbFZhbHVlPigqdGhp
cykuY3VzdG9tQ1NTVGV4dCgpOwogI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCiAgICAgY2Fz
ZSBHcmlkTGluZU5hbWVzQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0dyaWRMaW5lTmFtZXNW
YWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NT
R3JpZExpbmVOYW1lc1ZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgR3Jp
ZFRlbXBsYXRlQXJlYXNDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTR3JpZFRlbXBsYXRlQXJl
YXNWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICNlbmRp
ZgogICAgIGNhc2UgUHJpbWl0aXZlQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU1ByaW1pdGl2
ZVZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIFJlZmxl
Y3RDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTUmVmbGVjdFZhbHVlKHRoaXMpLT5jdXN0b21D
U1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NSZWZsZWN0VmFsdWU+KCp0aGlz
KS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBTaGFkb3dDbGFzczoKLSAgICAgICAgcmV0dXJu
IHRvQ1NTU2hhZG93VmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJu
IGRvd25jYXN0PENTU1NoYWRvd1ZhbHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNh
c2UgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbkNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1ND
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZT4o
KnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICAgICBjYXNlIFN0ZXBzVGltaW5nRnVuY3Rpb25DbGFz
czoKLSAgICAgICAgcmV0dXJuIHRvQ1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlKHRoaXMpLT5j
dXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NTdGVwc1RpbWluZ0Z1
bmN0aW9uVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBVbmljb2RlUmFu
Z2VDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTVW5pY29kZVJhbmdlVmFsdWUodGhpcyktPmN1
c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1VuaWNvZGVSYW5nZVZh
bHVlPigqdGhpcykuY3VzdG9tQ1NTVGV4dCgpOwogICAgIGNhc2UgVmFsdWVMaXN0Q2xhc3M6Ci0g
ICAgICAgIHJldHVybiB0b0NTU1ZhbHVlTGlzdCh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdGhpcykuY3VzdG9tQ1NTVGV4dCgp
OwogICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b1dl
YktpdENTU1RyYW5zZm9ybVZhbHVlKHRoaXMpLT5jdXN0b21DU1NUZXh0KCk7CisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1Rl
eHQoKTsKICAgICBjYXNlIExpbmVCb3hDb250YWluQ2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NT
U0xpbmVCb3hDb250YWluVmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PENTU0xpbmVCb3hDb250YWluVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0
KCk7CiAgICAgY2FzZSBDYWxjdWxhdGlvbkNsYXNzOgotICAgICAgICByZXR1cm4gdG9DU1NDYWxj
VmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENT
U0NhbGNWYWx1ZT4oKnRoaXMpLmN1c3RvbUNTU1RleHQoKTsKICNpZiBFTkFCTEUoQ1NTX0lNQUdF
X1NFVCkKICAgICBjYXNlIEltYWdlU2V0Q2xhc3M6Ci0gICAgICAgIHJldHVybiB0b0NTU0ltYWdl
U2V0VmFsdWUodGhpcyktPmN1c3RvbUNTU1RleHQoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENTU0ltYWdlU2V0VmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAjZW5kaWYKICAgICBj
YXNlIFdlYktpdENTU0ZpbHRlckNsYXNzOgotICAgICAgICByZXR1cm4gdG9XZWJLaXRDU1NGaWx0
ZXJWYWx1ZSh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
V2ViS2l0Q1NTRmlsdGVyVmFsdWU+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgY2FzZSBT
VkdDb2xvckNsYXNzOgotICAgICAgICByZXR1cm4gdG9TVkdDb2xvcih0aGlzKS0+Y3VzdG9tQ1NT
VGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZHQ29sb3I+KCp0aGlzKS5jdXN0b21D
U1NUZXh0KCk7CiAgICAgY2FzZSBTVkdQYWludENsYXNzOgotICAgICAgICByZXR1cm4gdG9TVkdQ
YWludCh0aGlzKS0+Y3VzdG9tQ1NTVGV4dCgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8U1ZH
UGFpbnQ+KCp0aGlzKS5jdXN0b21DU1NUZXh0KCk7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTMyNywxMDEgKzMyNywxMDEgQEAgdm9p
ZCBDU1NWYWx1ZTo6ZGVzdHJveSgpCiAKICAgICBzd2l0Y2ggKGNsYXNzVHlwZSgpKSB7CiAgICAg
Y2FzZSBBc3BlY3RSYXRpb0NsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NBc3BlY3RSYXRpb1Zh
bHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTQXNwZWN0UmF0aW9WYWx1ZT4o
dGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEJvcmRlckltYWdlU2xpY2VDbGFzczoK
LSAgICAgICAgZGVsZXRlIHRvQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlKHRoaXMpOworICAgICAg
ICBkZWxldGUgZG93bmNhc3Q8Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlPih0aGlzKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgQ2FudmFzQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0Nh
bnZhc1ZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTQ2FudmFzVmFsdWU+
KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDdXJzb3JJbWFnZUNsYXNzOgotICAg
ICAgICBkZWxldGUgdG9DU1NDdXJzb3JJbWFnZVZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUg
ZG93bmNhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIEZvbnRDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTRm9udFZhbHVlKHRoaXMpOwor
ICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTRm9udFZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgRm9udEZhY2VTcmNDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTRm9u
dEZhY2VTcmNWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENTU0ZvbnRGYWNl
U3JjVmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBGb250RmVhdHVyZUNs
YXNzOgotICAgICAgICBkZWxldGUgdG9DU1NGb250RmVhdHVyZVZhbHVlKHRoaXMpOworICAgICAg
ICBkZWxldGUgZG93bmNhc3Q8Q1NTRm9udEZlYXR1cmVWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIEZ1bmN0aW9uQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0Z1bmN0
aW9uVmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NGdW5jdGlvblZhbHVl
Pih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgTGluZWFyR3JhZGllbnRDbGFzczoK
LSAgICAgICAgZGVsZXRlIHRvQ1NTTGluZWFyR3JhZGllbnRWYWx1ZSh0aGlzKTsKKyAgICAgICAg
ZGVsZXRlIGRvd25jYXN0PENTU0xpbmVhckdyYWRpZW50VmFsdWU+KHRoaXMpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBSYWRpYWxHcmFkaWVudENsYXNzOgotICAgICAgICBkZWxldGUgdG9D
U1NSYWRpYWxHcmFkaWVudFZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NT
UmFkaWFsR3JhZGllbnRWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENy
b3NzZmFkZUNsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NDcm9zc2ZhZGVWYWx1ZSh0aGlzKTsK
KyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPih0aGlzKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgSW1hZ2VDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTSW1h
Z2VWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KHRo
aXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBJbmhlcml0ZWRDbGFzczoKLSAgICAgICAg
ZGVsZXRlIHRvQ1NTSW5oZXJpdGVkVmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2Fz
dDxDU1NJbmhlcml0ZWRWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIElu
aXRpYWxDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTSW5pdGlhbFZhbHVlKHRoaXMpOworICAg
ICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTSW5pdGlhbFZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0
dXJuOwogI2lmIEVOQUJMRShDU1NfR1JJRF9MQVlPVVQpCiAgICAgY2FzZSBHcmlkTGluZU5hbWVz
Q2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0dyaWRMaW5lTmFtZXNWYWx1ZSh0aGlzKTsKKyAg
ICAgICAgZGVsZXRlIGRvd25jYXN0PENTU0dyaWRMaW5lTmFtZXNWYWx1ZT4odGhpcyk7CiAgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIEdyaWRUZW1wbGF0ZUFyZWFzQ2xhc3M6Ci0gICAgICAgIGRl
bGV0ZSB0b0NTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBk
b3duY2FzdDxDU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJu
OwogI2VuZGlmCiAgICAgY2FzZSBQcmltaXRpdmVDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NT
UHJpbWl0aXZlVmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFJlZmxlY3RDbGFzczoK
LSAgICAgICAgZGVsZXRlIHRvQ1NTUmVmbGVjdFZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUg
ZG93bmNhc3Q8Q1NTUmVmbGVjdFZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgU2hhZG93Q2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b0NTU1NoYWRvd1ZhbHVlKHRoaXMpOwor
ICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTU2hhZG93VmFsdWU+KHRoaXMpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uQ2xhc3M6Ci0gICAgICAg
IGRlbGV0ZSB0b0NTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZSh0aGlzKTsKKyAgICAg
ICAgZGVsZXRlIGRvd25jYXN0PENTU0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb25WYWx1ZT4odGhp
cyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFN0ZXBzVGltaW5nRnVuY3Rpb25DbGFzczoK
LSAgICAgICAgZGVsZXRlIHRvQ1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlKHRoaXMpOworICAg
ICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTU3RlcHNUaW1pbmdGdW5jdGlvblZhbHVlPih0aGlzKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVW5pY29kZVJhbmdlQ2xhc3M6Ci0gICAgICAgIGRl
bGV0ZSB0b0NTU1VuaWNvZGVSYW5nZVZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNh
c3Q8Q1NTVW5pY29kZVJhbmdlVmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBWYWx1ZUxpc3RDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvQ1NTVmFsdWVMaXN0KHRoaXMpOwor
ICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih0aGlzKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtQ2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0
b1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU+KHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBMaW5lQm94Q29udGFpbkNsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NMaW5lQm94Q29udGFp
blZhbHVlKHRoaXMpOworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTTGluZUJveENvbnRhaW5W
YWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENhbGN1bGF0aW9uQ2xhc3M6
Ci0gICAgICAgIGRlbGV0ZSB0b0NTU0NhbGNWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRv
d25jYXN0PENTU0NhbGNWYWx1ZT4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICNpZiBFTkFCTEUo
Q1NTX0lNQUdFX1NFVCkKICAgICBjYXNlIEltYWdlU2V0Q2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0
b0NTU0ltYWdlU2V0VmFsdWUodGhpcyk7CisgICAgICAgIGRlbGV0ZSBkb3duY2FzdDxDU1NJbWFn
ZVNldFZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgY2FzZSBGaWx0
ZXJJbWFnZUNsYXNzOgotICAgICAgICBkZWxldGUgdG9DU1NGaWx0ZXJJbWFnZVZhbHVlKHRoaXMp
OworICAgICAgICBkZWxldGUgZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odGhpcyk7CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIFdlYktpdENTU0ZpbHRlckNsYXNzOgotICAgICAgICBk
ZWxldGUgdG9XZWJLaXRDU1NGaWx0ZXJWYWx1ZSh0aGlzKTsKKyAgICAgICAgZGVsZXRlIGRvd25j
YXN0PFdlYktpdENTU0ZpbHRlclZhbHVlPih0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgU1ZHQ29sb3JDbGFzczoKLSAgICAgICAgZGVsZXRlIHRvU1ZHQ29sb3IodGhpcyk7CisgICAg
ICAgIGRlbGV0ZSBkb3duY2FzdDxTVkdDb2xvcj4odGhpcyk7CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIFNWR1BhaW50Q2xhc3M6Ci0gICAgICAgIGRlbGV0ZSB0b1NWR1BhaW50KHRoaXMpOwor
ICAgICAgICBkZWxldGUgZG93bmNhc3Q8U1ZHUGFpbnQ+KHRoaXMpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDMxLDI0ICs0MzEsMjQgQEAg
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTVmFsdWU6OmNsb25lRm9yQ1NTT00oKSBjb25zdAogewog
ICAgIHN3aXRjaCAoY2xhc3NUeXBlKCkpIHsKICAgICBjYXNlIFByaW1pdGl2ZUNsYXNzOgotICAg
ICAgICByZXR1cm4gdG9DU1NQcmltaXRpdmVWYWx1ZSh0aGlzKS0+Y2xvbmVGb3JDU1NPTSgpOwor
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0aGlzKS5jbG9uZUZv
ckNTU09NKCk7CiAgICAgY2FzZSBWYWx1ZUxpc3RDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NT
VmFsdWVMaXN0KHRoaXMpLT5jbG9uZUZvckNTU09NKCk7CisgICAgICAgIHJldHVybiBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KCp0aGlzKS5jbG9uZUZvckNTU09NKCk7CiAgICAgY2FzZSBJbWFnZUNs
YXNzOgogICAgIGNhc2UgQ3Vyc29ySW1hZ2VDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTSW1h
Z2VWYWx1ZSh0aGlzKS0+Y2xvbmVGb3JDU1NPTSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q1NTSW1hZ2VWYWx1ZT4oKnRoaXMpLmNsb25lRm9yQ1NTT00oKTsKICAgICBjYXNlIFdlYktpdENT
U0ZpbHRlckNsYXNzOgotICAgICAgICByZXR1cm4gdG9XZWJLaXRDU1NGaWx0ZXJWYWx1ZSh0aGlz
KS0+Y2xvbmVGb3JDU1NPTSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8V2ViS2l0Q1NTRmls
dGVyVmFsdWU+KCp0aGlzKS5jbG9uZUZvckNTU09NKCk7CiAgICAgY2FzZSBXZWJLaXRDU1NUcmFu
c2Zvcm1DbGFzczoKLSAgICAgICAgcmV0dXJuIHRvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUodGhp
cyktPmNsb25lRm9yQ1NTT00oKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlPigqdGhpcykuY2xvbmVGb3JDU1NPTSgpOwogI2lmIEVOQUJMRShDU1NfSU1B
R0VfU0VUKQogICAgIGNhc2UgSW1hZ2VTZXRDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvQ1NTSW1h
Z2VTZXRWYWx1ZSh0aGlzKS0+Y2xvbmVGb3JDU1NPTSgpOworICAgICAgICByZXR1cm4gZG93bmNh
c3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4oKnRoaXMpLmNsb25lRm9yQ1NTT00oKTsKICNlbmRpZgogICAg
IGNhc2UgU1ZHQ29sb3JDbGFzczoKLSAgICAgICAgcmV0dXJuIHRvU1ZHQ29sb3IodGhpcyktPmNs
b25lRm9yQ1NTT00oKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFNWR0NvbG9yPigqdGhpcyku
Y2xvbmVGb3JDU1NPTSgpOwogICAgIGNhc2UgU1ZHUGFpbnRDbGFzczoKLSAgICAgICAgcmV0dXJu
IHRvU1ZHUGFpbnQodGhpcyktPmNsb25lRm9yQ1NTT00oKTsKKyAgICAgICAgcmV0dXJuIGRvd25j
YXN0PFNWR1BhaW50PigqdGhpcykuY2xvbmVGb3JDU1NPTSgpOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIEFTU0VSVCghaXNTdWJ0eXBlRXhwb3NlZFRvQ1NTT00oKSk7CiAgICAgICAgIHJldHVybiBU
ZXh0Q2xvbmVDU1NWYWx1ZTo6Y3JlYXRlKGNsYXNzVHlwZSgpLCBjc3NUZXh0KCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTVmFsdWUuaAppbmRleCA4MDQxM2Y4ODIwYTdmNzZkMmJjNGVlMjNiMjhhMWNjMjQ0NGZjMzcx
Li4wZTgxNmMyMmQzYmEyY2JhYjVmMDRiN2FlMjg2ZTBlM2Y5ZDViYmVhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VmFsdWUuaApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9UeXBlQ2FzdHMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0yNDks
OSArMjUwLDExIEBAIGlubGluZSBib29sIGNvbXBhcmVDU1NWYWx1ZShjb25zdCBSZWY8Q1NTVmFs
dWVUeXBlPiYgZmlyc3QsIGNvbnN0IFJlZjxDU1NWYWx1ZVR5CiAgICAgcmV0dXJuIGZpcnN0Lmdl
dCgpLmVxdWFscyhzZWNvbmQuZ2V0KCkpOwogfQogCi0jZGVmaW5lIENTU19WQUxVRV9UWVBFX0NB
U1RTKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCi0gICAgVFlQRV9DQVNUU19CQVNFKFRv
VmFsdWVUeXBlTmFtZSwgQ1NTVmFsdWUsIHZhbHVlLCB2YWx1ZS0+cHJlZGljYXRlLCB2YWx1ZS5w
cmVkaWNhdGUpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorI2RlZmluZSBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0NTU19WQUxVRShUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAg
ICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6Q1NTVmFsdWUmIHZhbHVlKSB7IHJl
dHVybiB2YWx1ZS5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQor
CiAjZW5kaWYgLy8gQ1NTVmFsdWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhbHVlTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oCmluZGV4IDAx
Mjc5MjRiZTRmMWRiZWQ3MjFjZTg2MGFhMjI2ZjQ2ZWRlYzFkZmMuLmYwYWZjM2YyYjcwYTJiOWFj
ZGU0ZDI2NDY1YTViMzc5ZWI3NGQ1YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NWYWx1ZUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKQEAg
LTgxLDggKzgxLDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmPENTU1ZhbHVlPiwgND4gbV92
YWx1ZXM7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhDU1NWYWx1ZUxpc3QsIGlzVmFsdWVM
aXN0KCkpCi0KIGlubGluZSB2b2lkIENTU1ZhbHVlTGlzdDo6YXBwZW5kKFBhc3NSZWY8Q1NTVmFs
dWU+IHZhbHVlKQogewogICAgIG1fdmFsdWVzLmFwcGVuZChXVEY6Om1vdmUodmFsdWUpKTsKQEAg
LTk3LDcgKzk1LDExIEBAIGlubGluZSB2b2lkIENTU1ZhbHVlTGlzdDo6cHJlcGVuZChQYXNzUmVm
PENTU1ZhbHVlPiB2YWx1ZSkKIC8vIFBsZWFzZSB0YWtlIGNhcmUgbm90IHRvIHBhc3MgdGhlc2Ug
YXJvdW5kIGFzIHRoZXkgZG8gaG9sZCBvbnRvIGEgcmF3IHBvaW50ZXIuCiBjbGFzcyBDU1NWYWx1
ZUxpc3RJbnNwZWN0b3IgewogcHVibGljOgotICAgIENTU1ZhbHVlTGlzdEluc3BlY3RvcihDU1NW
YWx1ZSogdmFsdWUpIDogbV9saXN0KCh2YWx1ZSAmJiB2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgPyB0
b0NTU1ZhbHVlTGlzdCh2YWx1ZSkgOiAwKSB7IH0KKyAgICBDU1NWYWx1ZUxpc3RJbnNwZWN0b3Io
Q1NTVmFsdWUqIHZhbHVlKQorICAgICAgICA6IG1fbGlzdChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVl
KSA/IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpIDogbnVsbHB0cikKKyAgICB7CisgICAg
fQorCiAgICAgQ1NTVmFsdWUqIGl0ZW0oc2l6ZV90IGluZGV4KSBjb25zdCB7IEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgbGVuZ3RoKCkpOyByZXR1cm4gbV9saXN0LT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKGluZGV4KTsgfQogICAgIENTU1ZhbHVlKiBmaXJzdCgpIGNv
bnN0IHsgcmV0dXJuIGl0ZW0oMCk7IH0KICAgICBDU1NWYWx1ZSogc2Vjb25kKCkgY29uc3QgeyBy
ZXR1cm4gaXRlbSgxKTsgfQpAQCAtMTIzLDQgKzEyNSw2IEBAIHByaXZhdGU6CiB9OwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NW
YWx1ZUxpc3QsIGlzVmFsdWVMaXN0KCkpCisKICNlbmRpZiAvLyBDU1NWYWx1ZUxpc3RfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRTdHlsZUJ1aWxkZXIuY3BwCmluZGV4IGIyZmY3
YjFhZmU2OGI2NzMxMGFjMzA1MzFkZWRkNmU4OTExM2NiZTYuLjUyOWVhZDdmYmE3ODVmNDMzYjg0
ZDA1OGFmYmYwMjU1ODk4MDMyOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXBy
ZWNhdGVkU3R5bGVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRl
ZFN0eWxlQnVpbGRlci5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDU1NBc3BlY3RS
YXRpb1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgogI2luY2x1ZGUg
IkNTU0N1cnNvckltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NJbWFnZVNldFZhbHVlLmgiCiAj
aW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1
ZU1hcHBpbmdzLmgiCiAjaW5jbHVkZSAiQ1NTVG9TdHlsZU1hcC5oIgpAQCAtMTQ5LDggKzE1MCw4
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUs
IFNldHRlclR5cGUgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQog
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKHZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCAqdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSkpOworICAgICAgICBpZiAoaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCisgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSk7CiAg
ICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpA
QCAtMTY1LDE0ICsxNjYsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJl
bmRlclN0eWxlKiBzdHlsZSwgTnVtYmVyVHlwZSB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5j
dGlvbikodmFsdWUpOyB9CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewot
ICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSh2YWx1ZSk7Ci0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IGlk
TWFwc1RvTWludXNPbmUpCisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1
ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IGlkTWFwc1RvTWludXNPbmUpCiAgICAgICAgICAg
ICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAtMSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVl
LT5nZXRWYWx1ZTxOdW1iZXJUeXBlPihDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwor
ICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgcHJpbWl0aXZlVmFs
dWUuZ2V0VmFsdWU8TnVtYmVyVHlwZT4oQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsK
ICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7
CkBAIC0yMTMsMTYgKzIxNCwxNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBhcHBseVZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkK
KyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5n
ZXRWYWx1ZUlEKCkgPT0gYXV0b0lkZW50aXR5KQorICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYg
cHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAg
ICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBhdXRvSWRlbnRpdHkpCiAg
ICAgICAgICAgICBzZXRBdXRvKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpOwogICAgICAgICBlbHNl
IGlmICh2YWx1ZVR5cGUgPT0gTnVtYmVyKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNv
bHZlci0+c3R5bGUoKSwgKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgZWxzZSBpZiAo
dmFsdWVUeXBlID09IENvbXB1dGVMZW5ndGgpCi0gICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihzdHlsZVJl
c29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSkpOworICAgICAgICAg
ICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUuY29tcHV0
ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoKSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxl
cigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUlu
aXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CkBAIC0yNTIsMTkgKzI1MywxOSBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICgh
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAKLSAgICAgICAgaWYgKFJlY3QqIHJlY3QgPSBwcmltaXRp
dmVWYWx1ZS0+Z2V0UmVjdFZhbHVlKCkpIHsKKyAgICAgICAgaWYgKFJlY3QqIHJlY3QgPSBwcmlt
aXRpdmVWYWx1ZS5nZXRSZWN0VmFsdWUoKSkgewogICAgICAgICAgICAgTGVuZ3RoIHRvcCA9IGNv
bnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0LT50b3AoKSk7CiAgICAgICAgICAgICBM
ZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+cmlnaHQo
KSk7CiAgICAgICAgICAgICBMZW5ndGggYm90dG9tID0gY29udmVydFRvTGVuZ3RoKHN0eWxlUmVz
b2x2ZXIsIHJlY3QtPmJvdHRvbSgpKTsKICAgICAgICAgICAgIExlbmd0aCBsZWZ0ID0gY29udmVy
dFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3QtPmxlZnQoKSk7CiAgICAgICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDbGlwKHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCk7CiAg
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKHRydWUpOwotICAg
ICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVB
dXRvKSB7CisgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09
IENTU1ZhbHVlQXV0bykgewogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0
Q2xpcChMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSk7CiAgICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKGZhbHNlKTsKICAgICAgICAgfQpA
QCAtMjk4LDE3ICsyOTksMTcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICAgICAgaWYgKGluaGVyaXRD
b2xvckZyb21QYXJlbnQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1
ZUN1cnJlbnRjb2xvcikKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgICAgIGlmIChpbmhl
cml0Q29sb3JGcm9tUGFyZW50ICYmIHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NW
YWx1ZUN1cnJlbnRjb2xvcikKICAgICAgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5
SUQsIHN0eWxlUmVzb2x2ZXIpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmIChzdHls
ZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSkKLSAgICAgICAgICAgICAg
ICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVy
LT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1ZSkpOworICAgICAgICAgICAg
ICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2
ZXItPmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKCZwcmltaXRpdmVWYWx1ZSkpOwogICAgICAgICAg
ICAgaWYgKHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSkK
LSAgICAgICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnZpc2l0ZWRMaW5rU2V0
dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2ZXItPmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHByaW1p
dGl2ZVZhbHVlLCAvKiBmb3JWaXNpdGVkTGluayAqLyB0cnVlKSk7CisgICAgICAgICAgICAgICAg
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPip2aXNpdGVkTGlua1NldHRlckZ1bmN0aW9uKShzdHls
ZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZSgmcHJpbWl0aXZlVmFsdWUsIC8qIGZv
clZpc2l0ZWRMaW5rICovIHRydWUpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzU5LDQ2ICsz
NjAsNDYgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBz
dHlsZSwgTGVuZ3RoIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKShXVEY6Om1vdmUo
dmFsdWUpKTsgfQogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAg
ICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFs
dWUpOwotICAgICAgICBpZiAobm9uZUVuYWJsZWQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVl
SUQoKSA9PSBDU1NWYWx1ZU5vbmUpIHsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1p
dGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgICAg
IGlmIChub25lRW5hYmxlZCAmJiBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFs
dWVOb25lKSB7CiAgICAgICAgICAgICBpZiAobm9uZVVuZGVmaW5lZCkKICAgICAgICAgICAgICAg
ICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoVW5kZWZpbmVkKSk7CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgTGVuZ3RoKCkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChsZWdhY3lJbnRyaW5z
aWNFbmFibGVkKSB7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQo
KSA9PSBDU1NWYWx1ZUludHJpbnNpYykKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5n
ZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVJbnRyaW5zaWMpCiAgICAgICAgICAgICAgICAgc2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKEludHJpbnNpYykpOwotICAgICAgICAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU1pbklu
dHJpbnNpYykKKyAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQo
KSA9PSBDU1NWYWx1ZU1pbkludHJpbnNpYykKICAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoTWluSW50cmluc2ljKSk7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKGludHJpbnNpY0VuYWJsZWQpIHsKLSAgICAgICAgICAgIGlmIChwcmltaXRpdmVW
YWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Via2l0TWluQ29udGVudCkKKyAgICAgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRNaW5D
b250ZW50KQogICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCks
IExlbmd0aChNaW5Db250ZW50KSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Via2l0TWF4Q29udGVudCkKKyAgICAgICAgICAg
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdlYmtpdE1h
eENvbnRlbnQpCiAgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgTGVuZ3RoKE1heENvbnRlbnQpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRGaWxsQXZhaWxhYmxlKQorICAgICAg
ICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Vi
a2l0RmlsbEF2YWlsYWJsZSkKICAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCBMZW5ndGgoRmlsbEF2YWlsYWJsZSkpOwotICAgICAgICAgICAgZWxzZSBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdlYmtpdEZpdENvbnRlbnQp
CisgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NT
VmFsdWVXZWJraXRGaXRDb250ZW50KQogICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksIExlbmd0aChGaXRDb250ZW50KSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhID0gc3R5bGVSZXNvbHZl
ci0+dXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCkgPwogICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpv
b20oMS4wZikKICAgICAgICAgICAgIDogc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0
aENvbnZlcnNpb25EYXRhKCk7Ci0gICAgICAgIGlmIChhdXRvRW5hYmxlZCAmJiBwcmltaXRpdmVW
YWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykKKyAgICAgICAgaWYgKGF1dG9FbmFi
bGVkICYmIHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pCiAgICAg
ICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoKSk7Ci0gICAg
ICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7Ci0gICAgICAgICAgICBM
ZW5ndGggbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252
ZXJzaW9uRGF0YSk7Ci0gICAgICAgICAgICBsZW5ndGguc2V0SGFzUXVpcmsocHJpbWl0aXZlVmFs
dWUtPmlzUXVpcmtWYWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNM
ZW5ndGgoKSkgeworICAgICAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLmNv
bXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJzaW9uRGF0YSk7CisgICAgICAgICAgICBsZW5ndGgu
c2V0SGFzUXVpcmsocHJpbWl0aXZlVmFsdWUuaXNRdWlya1ZhbHVlKCkpOwogICAgICAgICAgICAg
c2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgbGVuZ3RoKTsKLSAgICAgICAgfSBlbHNl
IGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgICAgICBzZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJs
ZVZhbHVlKCksIFBlcmNlbnQpKTsKLSAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlz
Q2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgICAgICBzZXRWYWx1ZShz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1
ZSgpLT5jcmVhdGVDYWxjdWxhdGlvblZhbHVlKGNvbnZlcnNpb25EYXRhKSkpOworICAgICAgICB9
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpKQorICAgICAgICAgICAgc2V0
VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLmdldERv
dWJsZVZhbHVlKCksIFBlcmNlbnQpKTsKKyAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUu
aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKKyAgICAgICAgICAgIHNldFZhbHVl
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1ZS5jc3NDYWxjVmFs
dWUoKS0+Y3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShjb252ZXJzaW9uRGF0YSkpKTsKICAgICB9CiAK
ICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtNDE1LDE0ICs0
MTYsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBz
dHlsZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlv
bikodmFsdWUpOyB9CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAg
ICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFs
dWUpOwotICAgICAgICBpZiAoKGlkZW50QmVoYXZpb3IgPT0gTWFwTm9uZVRvTnVsbCAmJiBwcmlt
aXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHx8
IChpZGVudEJlaGF2aW9yID09IE1hcEF1dG9Ub051bGwgJiYgcHJpbWl0aXZlVmFsdWUtPmdldFZh
bHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pKQorICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICAg
ICAgaWYgKChpZGVudEJlaGF2aW9yID09IE1hcE5vbmVUb051bGwgJiYgcHJpbWl0aXZlVmFsdWUu
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKKyAgICAgICAgICAgIHx8IChpZGVudEJlaGF2
aW9yID09IE1hcEF1dG9Ub051bGwgJiYgcHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENT
U1ZhbHVlQXV0bykpCiAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCBudWxsQXRvbSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKKyAgICAg
ICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLmdl
dFN0cmluZ1ZhbHVlKCkpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0
ZUhhbmRsZXIoKQogICAgIHsKQEAgLTQzNywxMSArNDM4LDExIEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIExlbmd0aFNpemUgdmFsdWUpIHsg
KHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKFdURjo6bW92ZSh2YWx1ZSkpOyB9CiAgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIFBhaXIqIHBh
aXIgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UGFpclZhbHVlKCk7CisgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpOworICAgICAgICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUuZ2V0UGFpclZhbHVlKCk7
CiAgICAgICAgIGlmICghcGFpciB8fCAhcGFpci0+Zmlyc3QoKSB8fCAhcGFpci0+c2Vjb25kKCkp
CiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTU1MiwxMyArNTUzLDEzIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIEZpbGxMYXllciogY2hpbGQgPSAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOwogICAgICAgICBGaWxsTGF5ZXIqIHByZXZpb3VzQ2hp
bGQgPSBudWxscHRyOwotICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkKKyAgICAgICAg
aWYgKGlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKQogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQot
ICAgICAgICAmJiAhdmFsdWUtPmlzSW1hZ2VTZXRWYWx1ZSgpCisgICAgICAgICYmICFpczxDU1NJ
bWFnZVNldFZhbHVlPigqdmFsdWUpCiAjZW5kaWYKICAgICAgICAgKSB7CiAgICAgICAgICAgICAv
LyBXYWxrIGVhY2ggdmFsdWUgYW5kIHB1dCBpdCBpbnRvIGEgbGF5ZXIsIGNyZWF0aW5nIG5ldyBs
YXllcnMgYXMgbmVlZGVkLgotICAgICAgICAgICAgQ1NTVmFsdWVMaXN0JiB2YWx1ZUxpc3QgPSB0
b0NTU1ZhbHVlTGlzdCgqdmFsdWUpOworICAgICAgICAgICAgQ1NTVmFsdWVMaXN0JiB2YWx1ZUxp
c3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVMaXN0Lmxlbmd0aCgpOyBpKyspIHsKICAgICAgICAgICAg
ICAgICBpZiAoIWNoaWxkKSB7CiAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzQ2hpbGQtPnNl
dE5leHQoc3RkOjptYWtlX3VuaXF1ZTxGaWxsTGF5ZXI+KGZpbGxMYXllclR5cGUpKTsKQEAgLTU5
NSwxMiArNTk2LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIC8vIG5vdGU6IENTU1Byb3BlcnR5TGV0dGVyL1dvcmRTcGFjaW5nIHJp
Z2h0IG5vdyBzZXRzIHRvIHplcm8gaWYgaXQncyBub3QgYSBwcmltaXRpdmUgdmFsdWUgZm9yIHNv
bWUgcmVhc29uLi4uCi0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAg
ICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NT
U1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1p
dGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAKLSAgICAg
ICAgQ1NTVmFsdWVJRCBpZGVudCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCk7CisgICAg
ICAgIENTU1ZhbHVlSUQgaWRlbnQgPSBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCk7CiAgICAg
ICAgIFQgbGVuZ3RoOwogICAgICAgICBpZiAobm9ybWFsRW5hYmxlZCAmJiBpZGVudCA9PSBDU1NW
YWx1ZU5vcm1hbCkgewogICAgICAgICAgICAgbGVuZ3RoID0gMDsKQEAgLTYxNSw5ICs2MTYsOSBA
QCBwdWJsaWM6CiAKICAgICAgICAgICAgIC8vIEFueSBvcmlnaW5hbCByZXN1bHQgdGhhdCB3YXMg
Pj0gMSBzaG91bGQgbm90IGJlIGFsbG93ZWQgdG8gZmFsbCBiZWxvdyAxLgogICAgICAgICAgICAg
Ly8gVGhpcyBrZWVwcyBib3JkZXIgbGluZXMgZnJvbSB2YW5pc2hpbmcuCi0gICAgICAgICAgICBs
ZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihjb252ZXJzaW9uRGF0YSk7
CisgICAgICAgICAgICBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPFQ+KGNv
bnZlcnNpb25EYXRhKTsKICAgICAgICAgICAgIGlmIChjb252ZXJzaW9uRGF0YS56b29tKCkgPCAx
LjBmICYmIGxlbmd0aCA8IDEuMCkgewotICAgICAgICAgICAgICAgIFQgb3JpZ2luYWxMZW5ndGgg
PSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihjb252ZXJzaW9uRGF0YS5jb3B5V2l0
aEFkanVzdGVkWm9vbSgxLjBmKSk7CisgICAgICAgICAgICAgICAgVCBvcmlnaW5hbExlbmd0aCA9
IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8VD4oY29udmVyc2lvbkRhdGEuY29weVdpdGhB
ZGp1c3RlZFpvb20oMS4wZikpOwogICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbExlbmd0aCA+
PSAxLjApCiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IDEuMDsKICAgICAgICAgICAgIH0K
QEAgLTY1NCwxMSArNjU1LDExIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQor
ICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NT
U1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1p
dGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAg
IEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVz
Y3JpcHRpb24oKTsKLSAgICAgICAgKGZvbnREZXNjcmlwdGlvbi4qc2V0dGVyRnVuY3Rpb24pKCpw
cmltaXRpdmVWYWx1ZSk7CisgICAgICAgIChmb250RGVzY3JpcHRpb24uKnNldHRlckZ1bmN0aW9u
KShwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KIApAQCAtNjk3LDEwICs2OTgsMTAgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBp
ZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4o
KnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBhdXRvJiB2YWx1ZUxpc3Qg
PSB0b0NTU1ZhbHVlTGlzdCgqdmFsdWUpOworICAgICAgICBhdXRvJiB2YWx1ZUxpc3QgPSBkb3du
Y2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CiAKICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZv
bnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigp
OwogICAgICAgICAvLyBCZWZvcmUgbWFwcGluZyBpbiBhIG5ldyBmb250LWZhbWlseSBwcm9wZXJ0
eSwgd2Ugc2hvdWxkIHJlc2V0IHRoZSBnZW5lcmljIGZhbWlseS4KQEAgLTcxMiwxNCArNzEzLDE0
IEBAIHB1YmxpYzoKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVMaXN0
Lmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gdmFsdWVMaXN0
Lml0ZW0oaSk7Ci0gICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAg
ICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBjb250ZW50VmFs
dWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGl0ZW0pOworICAgICAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUmIGNvbnRlbnRWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSk7
CiAgICAgICAgICAgICBBdG9taWNTdHJpbmcgZmFjZTsKLSAgICAgICAgICAgIGlmIChjb250ZW50
VmFsdWUtPmlzU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgZmFjZSA9IGNvbnRlbnRWYWx1ZS0+
Z2V0U3RyaW5nVmFsdWUoKTsKKyAgICAgICAgICAgIGlmIChjb250ZW50VmFsdWUuaXNTdHJpbmco
KSkKKyAgICAgICAgICAgICAgICBmYWNlID0gY29udGVudFZhbHVlLmdldFN0cmluZ1ZhbHVlKCk7
CiAgICAgICAgICAgICBlbHNlIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBzdHlsZVJlc29sdmVy
LT5kb2N1bWVudCgpLnNldHRpbmdzKCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbnRl
bnRWYWx1ZS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChjb250ZW50
VmFsdWUuZ2V0VmFsdWVJRCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtp
dEJvZHk6CiAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSBzZXR0aW5ncy0+c3RhbmRhcmRGb250
RmFtaWx5KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtODQwLDEwICs4NDEsMTAg
QEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsK
LSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWlz
PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFs
dWUodmFsdWUpOworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKIAogICAgICAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZSgwKTsKQEAg
LTg1Niw3ICs4NTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBwYXJlbnRJc0Fic29sdXRlU2l6
ZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmlzQWJz
b2x1dGVTaXplKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoQ1NTVmFsdWVJRCBpZGVudCA9
IHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICAgICAgaWYgKENTU1ZhbHVlSUQg
aWRlbnQgPSBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgICAgIC8vIEtl
eXdvcmRzIGFyZSBiZWluZyB1c2VkLgogICAgICAgICAgICAgc3dpdGNoIChpZGVudCkgewogICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZVh4U21hbGw6CkBAIC04ODYsMTUgKzg4NywxNCBAQCBwdWJs
aWM6CiAKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZShwYXJl
bnRJc0Fic29sdXRlU2l6ZSAmJiAoaWRlbnQgPT0gQ1NTVmFsdWVMYXJnZXIgfHwgaWRlbnQgPT0g
Q1NTVmFsdWVTbWFsbGVyIHx8IGlkZW50ID09IENTU1ZhbHVlV2Via2l0UnVieVRleHQpKTsKICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRl
U2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHx8ICEocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpIHx8IHBy
aW1pdGl2ZVZhbHVlLT5pc0ZvbnRSZWxhdGl2ZUxlbmd0aCgpKSk7Ci0gICAgICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgICAgICBzaXplID0gcHJp
bWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1l
bnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLnJlbmRlclZpZXcoKSwgMS4wZiwg
dHJ1ZSkpOwotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0YXRlKCkuc2V0Rm9udFNp
emVIYXNWaWV3cG9ydFVuaXRzKHByaW1pdGl2ZVZhbHVlLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxl
bmd0aCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2Vu
dGFnZSgpKQotICAgICAgICAgICAgICAgIHNpemUgPSAocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0
VmFsdWUoKSAqIHBhcmVudFNpemUpIC8gMTAwLjBmOwotICAgICAgICAgICAgZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpIHsKLSAgICAg
ICAgICAgICAgICBSZWY8Q2FsY3VsYXRpb25WYWx1ZT4gY2FsY3VsYXRpb25WYWx1ZSB7IHByaW1p
dGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+Y3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShzdHlsZVJl
c29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVz
dGVkWm9vbSgxLjBmKSkgfTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29s
dXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZSB8fCAhKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2Vu
dGFnZSgpIHx8IHByaW1pdGl2ZVZhbHVlLmlzRm9udFJlbGF0aXZlTGVuZ3RoKCkpKTsKKyAgICAg
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAg
c2l6ZSA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+
cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLnJlbmRlclZpZXco
KSwgMS4wZiwgdHJ1ZSkpOworICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0YXRlKCku
c2V0Rm9udFNpemVIYXNWaWV3cG9ydFVuaXRzKHByaW1pdGl2ZVZhbHVlLmlzVmlld3BvcnRQZXJj
ZW50YWdlTGVuZ3RoKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5p
c1BlcmNlbnRhZ2UoKSkKKyAgICAgICAgICAgICAgICBzaXplID0gKHByaW1pdGl2ZVZhbHVlLmdl
dEZsb2F0VmFsdWUoKSAqIHBhcmVudFNpemUpIC8gMTAwLjBmOworICAgICAgICAgICAgZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUuaXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkgewor
ICAgICAgICAgICAgICAgIFJlZjxDYWxjdWxhdGlvblZhbHVlPiBjYWxjdWxhdGlvblZhbHVlIHsg
cHJpbWl0aXZlVmFsdWUuY3NzQ2FsY1ZhbHVlKCktPmNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUoc3R5
bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhB
ZGp1c3RlZFpvb20oMS4wZikpIH07CiAgICAgICAgICAgICAgICAgc2l6ZSA9IGNhbGN1bGF0aW9u
VmFsdWUtPmV2YWx1YXRlKHBhcmVudFNpemUpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtOTE5LDExICs5MTksMTEgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0
eUZvbnRXZWlnaHQgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBp
ZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2
ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24o
KTsKLSAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpKSB7CisgICAg
ICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpKSB7CiAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVJbnZhbGlkOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTkzNCw3ICs5MzQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KGZvbnREZXNjcmlwdGlvbi5saWdodGVyV2VpZ2h0KCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0V2VpZ2h0KCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0V2VpZ2h0KHByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgfQogICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAg
ICB9CkBAIC05NzYsMTMgKzk3NiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIEZvbnREZXNjcmlwdGlv
bjo6TGlnYXR1cmVzU3RhdGUgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2Ny
aXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZTsKICAgICAgICAgRm9udERlc2NyaXB0aW9uOjpM
aWdhdHVyZXNTdGF0ZSBoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRpb246
Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOwogCi0gICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3Qo
KSkgewotICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3QgPSB0b0NTU1ZhbHVlTGlz
dCh2YWx1ZSk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlTGlzdC0+
bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gdmFsdWVM
aXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwotICAgICAgICAgICAgICAgIEFTU0VSVChp
dGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICAgICAgICAgIGlmIChpdGVtLT5pc1By
aW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0b0NTU1ByaW1p
dGl2ZVZhbHVlKGl0ZW0pLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICAgICAgaWYgKGlzPENTU1ZhbHVl
TGlzdD4oKnZhbHVlKSkgeworICAgICAgICAgICAgQ1NTVmFsdWVMaXN0JiB2YWx1ZUxpc3QgPSBk
b3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHZhbHVlTGlzdC5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgQ1NT
VmFsdWUqIGl0ZW0gPSB2YWx1ZUxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppdGVtKSkgeworICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSkuZ2V0
VmFsdWVJRCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb0NvbW1vbkxp
Z2F0dXJlczoKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbkxpZ2F0dXJlc1N0YXRlID0g
Rm9udERlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xMDA5LDEwICsxMDA4LDggQEAgcHVibGljOgogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpOwotICAgICAgICAgICAgQVNTRVJUKHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFs
dWUpLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpOwotICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpOwogI2VuZGlmCiAKICAgICAgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNj
cmlwdGlvbigpOwpAQCAtMTE1OSw5ICsxMTU2LDkgQEAgcHVibGljOgogICAgIH0KICAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGJvb2wgc2V0Q291bnRlcklu
Y3JlbWVudFRvTm9uZSA9IGNvdW50ZXJCZWhhdmlvciA9PSBJbmNyZW1lbnQgJiYgdmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+Z2V0VmFsdWVJ
RCgpID09IENTU1ZhbHVlTm9uZTsKKyAgICAgICAgYm9vbCBzZXRDb3VudGVySW5jcmVtZW50VG9O
b25lID0gY291bnRlckJlaGF2aW9yID09IEluY3JlbWVudCAmJiBpczxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1
ZUlEKCkgPT0gQ1NTVmFsdWVOb25lOwogCi0gICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0
KCkgJiYgIXNldENvdW50ZXJJbmNyZW1lbnRUb05vbmUpCisgICAgICAgIGlmICghaXM8Q1NTVmFs
dWVMaXN0PigqdmFsdWUpICYmICFzZXRDb3VudGVySW5jcmVtZW50VG9Ob25lKQogICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgIENvdW50ZXJEaXJlY3RpdmVNYXAmIG1hcCA9IHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7CkBAIC0xMTc3LDE0ICsx
MTc0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHNldENvdW50ZXJJbmNyZW1lbnRUb05vbmUp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBDU1NWYWx1ZUxpc3QqIGxp
c3QgPSB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSk7Ci0gICAgICAgIGludCBsZW5ndGggPSBsaXN0ID8g
bGlzdC0+bGVuZ3RoKCkgOiAwOworICAgICAgICBDU1NWYWx1ZUxpc3QmIGxpc3QgPSBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CisgICAgICAgIGludCBsZW5ndGggPSBsaXN0Lmxlbmd0
aCgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAg
ICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhp
KTsKLSAgICAgICAgICAgIGlmICghY3VyclZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAg
ICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gbGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KGkpOworICAgICAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKmN1cnJWYWx1ZSkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIFBhaXIqIHBhaXIgPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKGN1cnJWYWx1ZSktPmdldFBhaXJWYWx1ZSgpOworICAgICAgICAg
ICAgUGFpciogcGFpciA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqY3VyclZhbHVlKS5n
ZXRQYWlyVmFsdWUoKTsKICAgICAgICAgICAgIGlmICghcGFpciB8fCAhcGFpci0+Zmlyc3QoKSB8
fCAhcGFpci0+c2Vjb25kKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTEyMTks
MjcgKzEyMTYsMjcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQog
ICAgIHsKICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7
Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewotICAgICAgICAgICAgQ1NTVmFs
dWVMaXN0KiBsaXN0ID0gdG9DU1NWYWx1ZUxpc3QodmFsdWUpOwotICAgICAgICAgICAgaW50IGxl
biA9IGxpc3QtPmxlbmd0aCgpOworICAgICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUp
KSB7CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIGxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxp
c3Q+KCp2YWx1ZSk7CisgICAgICAgICAgICBpbnQgbGVuZ3RoID0gbGlzdC5sZW5ndGgoKTsKICAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcihDdXJzb3JBdXRvKTsK
LSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzQ3Vyc29ySW1hZ2VWYWx1ZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIENTU0N1cnNvckltYWdlVmFsdWUqIGltYWdlID0gdG9DU1NDdXJzb3JJbWFn
ZVZhbHVlKGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPnVwZGF0ZUlmU1ZH
Q3Vyc29ySXNVc2VkKHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKSkpIC8vIEVsZW1lbnRzIHdpdGgg
U1ZHIGN1cnNvcnMgYXJlIG5vdCBhbGxvd2VkIHRvIHNoYXJlIHN0eWxlLgorICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIENTU1Zh
bHVlKiBpdGVtID0gbGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAgICAg
ICAgIGlmIChpczxDU1NDdXJzb3JJbWFnZVZhbHVlPigqaXRlbSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSYgaW1hZ2UgPSBkb3duY2FzdDxDU1NDdXJzb3JJbWFn
ZVZhbHVlPigqaXRlbSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS51cGRhdGVJZlNW
R0N1cnNvcklzVXNlZChzdHlsZVJlc29sdmVyLT5lbGVtZW50KCkpKSAvLyBFbGVtZW50cyB3aXRo
IFNWRyBjdXJzb3JzIGFyZSBub3QgYWxsb3dlZCB0byBzaGFyZSBzdHlsZS4KICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFVuaXF1ZSgpOwotICAgICAg
ICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5hZGRDdXJzb3Ioc3R5bGVSZXNv
bHZlci0+c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUN1cnNvciwgaW1hZ2UpLCBpbWFnZS0+aG90U3Bv
dCgpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUo
KSkgewotICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFs
dWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzVmFsdWVJRCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKCpwcmltaXRpdmVWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmFkZEN1cnNvcihzdHlsZVJlc29s
dmVyLT5zdHlsZUltYWdlKENTU1Byb3BlcnR5Q3Vyc29yLCAmaW1hZ2UpLCBpbWFnZS5ob3RTcG90
KCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCpp
dGVtKSkgeworICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZl
VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pOworICAgICAgICAgICAg
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNWYWx1ZUlEKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDdXJzb3IocHJpbWl0aXZlVmFsdWUp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKLSAgICAgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNWYWx1ZUlEKCkgJiYgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+Y3Vyc29yKCkgIT0gRUN1cnNvcigqcHJpbWl0aXZlVmFsdWUpKQotICAgICAgICAgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOwor
ICAgICAgICB9IGVsc2UgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSB7CisgICAg
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5p
c1ZhbHVlSUQoKSAmJiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5jdXJzb3IoKSAhPSBFQ3Vyc29y
KHByaW1pdGl2ZVZhbHVlKSkKKyAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRDdXJzb3IocHJpbWl0aXZlVmFsdWUpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMjUw
LDE0ICsxMjQ3LDE0IEBAIGNsYXNzIEFwcGx5UHJvcGVydHlUZXh0QWxpZ24gewogcHVibGljOgog
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVl
PigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOwotICAgICAg
ICBBU1NFUlQocHJpbWl0aXZlVmFsdWUtPmlzVmFsdWVJRCgpKTsKKyAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSk7CisgICAgICAgIEFTU0VSVChwcmltaXRpdmVWYWx1ZS5pc1ZhbHVlSUQoKSk7CiAKLSAg
ICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgIT0gQ1NTVmFsdWVXZWJraXRN
YXRjaFBhcmVudCkKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRB
bGlnbigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFs
dWVJRCgpICE9IENTU1ZhbHVlV2Via2l0TWF0Y2hQYXJlbnQpCisgICAgICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0QWxpZ24ocHJpbWl0aXZlVmFsdWUpOwogICAgICAgICBl
bHNlIGlmIChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBUQVNU
QVJUKQogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEFsaWduKHN0
eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IExF
RlQgOiBSSUdIVCk7CiAgICAgICAgIGVsc2UgaWYgKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxl
KCktPnRleHRBbGlnbigpID09IFRBRU5EKQpAQCAtMTI3OSw4ICsxMjc2LDcgQEAgcHVibGljOgog
ICAgICAgICBUZXh0RGVjb3JhdGlvbiB0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RGVjb3Jh
dGlvbigpOwogICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkodmFsdWUpOyBpLmhh
c01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKICAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gaS52
YWx1ZSgpOwotICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXRl
bS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgICAgIHQgfD0gKnRvQ1NTUHJpbWl0aXZl
VmFsdWUoaXRlbSk7CisgICAgICAgICAgICB0IHw9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqaXRlbSk7CiAgICAgICAgIH0KICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0
VGV4dERlY29yYXRpb24odCk7CiAgICAgfQpAQCAtMTMyNCwxNCArMTMyMCwxNCBAQCBjbGFzcyBB
cHBseVByb3BlcnR5VGV4dERlY29yYXRpb25Ta2lwIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RGVj
b3JhdGlvblNraXAodmFsdWVUb0RlY29yYXRpb25Ta2lwKCp0b0NTU1ByaW1pdGl2ZVZhbHVlKHZh
bHVlKSkpOworICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsKKyAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHREZWNvcmF0aW9uU2tpcCh2
YWx1ZVRvRGVjb3JhdGlvblNraXAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIFRleHREZWNvcmF0
aW9uU2tpcCBza2lwID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RGVjb3JhdGlvblNraXAoKTsK
ICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpKHZhbHVlKTsgaS5oYXNNb3JlKCk7
IGkuYWR2YW5jZSgpKQotICAgICAgICAgICAgc2tpcCB8PSB2YWx1ZVRvRGVjb3JhdGlvblNraXAo
KnRvQ1NTUHJpbWl0aXZlVmFsdWUoaS52YWx1ZSgpKSk7CisgICAgICAgICAgICBza2lwIHw9IHZh
bHVlVG9EZWNvcmF0aW9uU2tpcChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmkudmFsdWUo
KSkpOwogICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RGVjb3JhdGlvblNr
aXAoc2tpcCk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxl
cigpCkBAIC0xMzQ1LDEwICsxMzQxLDEwIEBAIGNsYXNzIEFwcGx5UHJvcGVydHlNYXJxdWVlSW5j
cmVtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7
Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFp
czxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKCp2YWx1ZSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogICAgICAgICBMZW5ndGggbWFy
cXVlZUxlbmd0aChVbmRlZmluZWQpOwogICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLmdl
dFZhbHVlSUQoKSkgewogICAgICAgICBjYXNlIENTU1ZhbHVlU21hbGw6CkBAIC0xMzgwLDE0ICsx
Mzc2LDE0IEBAIGNsYXNzIEFwcGx5UHJvcGVydHlNYXJxdWVlUmVwZXRpdGlvbiB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlSW5maW5pdGUp
CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0
VmFsdWVJRCgpID09IENTU1ZhbHVlSW5maW5pdGUpCiAgICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRNYXJxdWVlTG9vcENvdW50KC0xKTsgLy8gLTEgbWVhbnMgcmVwZWF0IGZv
cmV2ZXIuCi0gICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKQotICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFycXVlZUxvb3BDb3VudChwcmlt
aXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSk7CisgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLmlzTnVtYmVyKCkpCisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRN
YXJxdWVlTG9vcENvdW50KHByaW1pdGl2ZVZhbHVlLmdldEludFZhbHVlKCkpOwogICAgIH0KICAg
ICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTE0MDAs
MTEgKzEzOTYsMTEgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eU1hcnF1ZWVTcGVlZCB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAg
ICAgIGlmIChDU1NWYWx1ZUlEIGlkZW50ID0gcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSkg
eworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgaWYgKENTU1ZhbHVlSUQgaWRlbnQg
PSBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgICAgIHN3aXRjaCAoaWRl
bnQpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVTbG93OgogICAgICAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZCg1MDApOyAvLyA1MDAgbXNlYy4K
QEAgLTE0MTgsMTAgKzE0MTQsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS0+aXNUaW1lKCkpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVUaW1lPGludCwgQ1NT
UHJpbWl0aXZlVmFsdWU6Ok1pbGxpc2Vjb25kcz4oKSk7Ci0gICAgICAgIGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLT5pc051bWJlcigpKSAvLyBGb3Igc2Nyb2xsYW1vdW50IHN1cHBvcnQuCi0gICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRNYXJxdWVlU3BlZWQocHJpbWl0aXZl
VmFsdWUtPmdldEludFZhbHVlKCkpOworICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LmlzVGltZSgpKQorICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0TWFycXVl
ZVNwZWVkKHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVUaW1lPGludCwgQ1NTUHJpbWl0aXZlVmFsdWU6
Ok1pbGxpc2Vjb25kcz4oKSk7CisgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTnVt
YmVyKCkpIC8vIEZvciBzY3JvbGxhbW91bnQgc3VwcG9ydC4KKyAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPnNldE1hcnF1ZWVTcGVlZChwcmltaXRpdmVWYWx1ZS5nZXRJbnRWYWx1
ZSgpKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkK
ICAgICB7CkBAIC0xNDM1LDggKzE0MzEsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICAvLyBUaGlzIGlzIHRydWUgaWYgdmFsdWUgaXMg
J2F1dG8nIG9yICdhbHBoYWJldGljJy4KLSAgICAgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZh
bHVlKCkpIHsKLSAgICAgICAgICAgIFRleHRVbmRlcmxpbmVQb3NpdGlvbiB0ID0gKnRvQ1NTUHJp
bWl0aXZlVmFsdWUodmFsdWUpOworICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSkpIHsKKyAgICAgICAgICAgIFRleHRVbmRlcmxpbmVQb3NpdGlvbiB0ID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRUZXh0VW5kZXJsaW5lUG9zaXRpb24odCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KQEAgLTE0NDQsOCArMTQ0MCw3IEBAIHB1YmxpYzoKICAgICAgICAgdW5zaWdu
ZWQgdCA9IDA7CiAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaSh2YWx1ZSk7IGku
aGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewogICAgICAgICAgICAgQ1NTVmFsdWUqIGl0ZW0gPSBp
LnZhbHVlKCk7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihp
dGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICAgICAgVGV4dFVuZGVybGluZVBvc2l0
aW9uIHQyID0gKnRvQ1NTUHJpbWl0aXZlVmFsdWUoaXRlbSk7CisgICAgICAgICAgICBUZXh0VW5k
ZXJsaW5lUG9zaXRpb24gdDIgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pOwog
ICAgICAgICAgICAgdCB8PSB0MjsKICAgICAgICAgfQogICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRUZXh0VW5kZXJsaW5lUG9zaXRpb24oc3RhdGljX2Nhc3Q8VGV4dFVuZGVybGlu
ZVBvc2l0aW9uPih0KSk7CkBAIC0xNDYxLDIyICsxNDU2LDIyIEBAIGNsYXNzIEFwcGx5UHJvcGVy
dHlMaW5lSGVpZ2h0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAg
aWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1p
dGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZh
bHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgIExlbmd0
aCBsaW5lSGVpZ2h0OwogCi0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgp
ID09IENTU1ZhbHVlTm9ybWFsKQorICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJ
RCgpID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICAgICAgbGluZUhlaWdodCA9IFJlbmRlclN0
eWxlOjppbml0aWFsTGluZUhlaWdodCgpOwotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS0+aXNMZW5ndGgoKSkgewotICAgICAgICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVl
LT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0
Wm9vbUZhY3Rvcigqc3R5bGVSZXNvbHZlcikpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2
ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkgeworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS5pc0xlbmd0aCgpKQorICAgICAgICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLmNv
bXB1dGVMZW5ndGg8TGVuZ3RoPihjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29t
RmFjdG9yKCpzdHlsZVJlc29sdmVyKSk7CisgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LmlzUGVyY2VudGFnZSgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogcGVyY2VudGFnZSBzaG91
bGQgbm90IGJlIHJlc3RyaWN0ZWQgdG8gYW4gaW50ZWdlciBoZXJlLgotICAgICAgICAgICAgbGlu
ZUhlaWdodCA9IExlbmd0aCgoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y29tcHV0ZWRGb250U2l6
ZSgpICogcHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpIC8gMTAwLCBGaXhlZCk7Ci0gICAg
ICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAg
IGxpbmVIZWlnaHQgPSBMZW5ndGgoKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmNvbXB1dGVkRm9u
dFNpemUoKSAqIHByaW1pdGl2ZVZhbHVlLmdldEludFZhbHVlKCkpIC8gMTAwLCBGaXhlZCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNOdW1iZXIoKSkgewogICAgICAgICAg
ICAgLy8gRklYTUU6IG51bWJlciBhbmQgcGVyY2VudGFnZSB2YWx1ZXMgc2hvdWxkIHByb2R1Y2Ug
dGhlIHNhbWUgdHlwZSBvZiBMZW5ndGggKGllLiBGaXhlZCBvciBQZXJjZW50KS4KLSAgICAgICAg
ICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCkg
KiAxMDAuMCwgUGVyY2VudCk7CisgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKHByaW1p
dGl2ZVZhbHVlLmdldERvdWJsZVZhbHVlKCkgKiAxMDAuMCwgUGVyY2VudCk7CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRMaW5lSGVpZ2h0KGxpbmVIZWlnaHQpOwpAQCAtMTQ5NCwyNyArMTQ4OSwyNyBAQCBjbGFz
cyBBcHBseVByb3BlcnR5TGluZUhlaWdodEZvcklPU1RleHRBdXRvc2l6aW5nIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgIExlbmd0aCBsaW5lSGVpZ2h0OwogCi0gICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKQorICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKQog
ICAgICAgICAgICAgbGluZUhlaWdodCA9IFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgp
OwotICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewotICAgICAg
ICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4o
Y3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3Rvcigqc3R5bGVSZXNvbHZl
cikpOworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7CisgICAg
ICAgICAgICBsaW5lSGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+
KGNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoKnN0eWxlUmVzb2x2
ZXIpKTsKICAgICAgICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT50ZXh0U2l6ZUFk
anVzdCgpLmlzUGVyY2VudGFnZSgpKQogICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5n
dGgobGluZUhlaWdodC52YWx1ZSgpICogc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+dGV4dFNpemVB
ZGp1c3QoKS5tdWx0aXBsaWVyKCksIEZpeGVkKTsKLSAgICAgICAgfSBlbHNlIGlmIChwcmltaXRp
dmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS5pc1BlcmNlbnRhZ2UoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IHBlcmNlbnRhZ2Ug
c2hvdWxkIG5vdCBiZSByZXN0cmljdGVkIHRvIGFuIGludGVnZXIgaGVyZS4KLSAgICAgICAgICAg
IGxpbmVIZWlnaHQgPSBMZW5ndGgoKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnRTaXplKCkg
KiBwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUoKSkgLyAxMDAsIEZpeGVkKTsKLSAgICAgICAg
fSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkgeworICAgICAgICAgICAgbGlu
ZUhlaWdodCA9IExlbmd0aCgoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Zm9udFNpemUoKSAqIHBy
aW1pdGl2ZVZhbHVlLmdldEludFZhbHVlKCkpIC8gMTAwLCBGaXhlZCk7CisgICAgICAgIH0gZWxz
ZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6
IG51bWJlciBhbmQgcGVyY2VudGFnZSB2YWx1ZXMgc2hvdWxkIHByb2R1Y2UgdGhlIHNhbWUgdHlw
ZSBvZiBMZW5ndGggKGllLiBGaXhlZCBvciBQZXJjZW50KS4KICAgICAgICAgICAgIGlmIChzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT50ZXh0U2l6ZUFkanVzdCgpLmlzUGVyY2VudGFnZSgpKQotICAg
ICAgICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJs
ZVZhbHVlKCkgKiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT50ZXh0U2l6ZUFkanVzdCgpLm11bHRp
cGxpZXIoKSAqIDEwMC4wLCBQZXJjZW50KTsKKyAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0ID0g
TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLmdldERvdWJsZVZhbHVlKCkgKiBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT50ZXh0U2l6ZUFkanVzdCgpLm11bHRpcGxpZXIoKSAqIDEwMC4wLCBQZXJjZW50KTsK
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKHBy
aW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpICogMTAwLjAsIFBlcmNlbnQpOworICAgICAg
ICAgICAgICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUuZ2V0RG91YmxlVmFs
dWUoKSAqIDEwMC4wLCBQZXJjZW50KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldExpbmVIZWlnaHQobGluZUhl
aWdodCk7CkBAIC0xNTQ0LDIwICsxNTM5LDIwIEBAIGNsYXNzIEFwcGx5UHJvcGVydHlXb3JkU3Bh
Y2luZyB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewot
ICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSh2YWx1ZSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogICAgICAgICBMZW5ndGggd29yZFNw
YWNpbmc7CiAKLSAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NT
VmFsdWVOb3JtYWwpCisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVOb3JtYWwpCiAgICAgICAgICAgICB3b3JkU3BhY2luZyA9IFJlbmRlclN0eWxlOjpp
bml0aWFsV29yZFNwYWNpbmcoKTsKLSAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlz
TGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIHdvcmRTcGFjaW5nID0gcHJpbWl0aXZlVmFsdWUtPmNv
bXB1dGVMZW5ndGg8TGVuZ3RoPihjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29t
RmFjdG9yKCpzdHlsZVJlc29sdmVyKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUtPmlzUGVyY2VudGFnZSgpKQotICAgICAgICAgICAgd29yZFNwYWNpbmcgPSBMZW5ndGgocHJp
bWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwotICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHdvcmRTcGFjaW5nID0g
TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBGaXhlZCk7CisgICAgICAg
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHdvcmRT
cGFjaW5nID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNzc3RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoKnN0eWxlUmVzb2x2ZXIpKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSkKKyAgICAgICAgICAg
IHdvcmRTcGFjaW5nID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLmdldERvdWJsZVZhbHVlKCksIFBl
cmNlbnQpOworICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpKQorICAg
ICAgICAgICAgd29yZFNwYWNpbmcgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUuZ2V0RG91YmxlVmFs
dWUoKSwgRml4ZWQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFdvcmRTcGFjaW5nKHdvcmRTcGFjaW5nKTsKQEAg
LTE2NjcsMjEgKzE2NjIsMjEgQEAgcHVibGljOgogICAgICAgICBzd2l0Y2ggKGluc3BlY3Rvci5s
ZW5ndGgoKSkgewogICAgICAgICBjYXNlIDI6IHsKICAgICAgICAgICAgIC8vIDxsZW5ndGg+ezJ9
IHwgPHBhZ2Utc2l6ZT4gPG9yaWVudGF0aW9uPgotICAgICAgICAgICAgaWYgKCFpbnNwZWN0b3Iu
Zmlyc3QoKS0+aXNQcmltaXRpdmVWYWx1ZSgpIHx8ICFpbnNwZWN0b3Iuc2Vjb25kKCktPmlzUHJp
bWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCpp
bnNwZWN0b3IuZmlyc3QoKSkgfHwgIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaW5zcGVjdG9yLnNl
Y29uZCgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogZmlyc3QgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGluc3BlY3Rvci5maXJzdCgpKTsK
LSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmQgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKGluc3BlY3Rvci5zZWNvbmQoKSk7Ci0gICAgICAgICAgICBpZiAoZmlyc3QtPmlzTGVuZ3Ro
KCkpIHsKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBmaXJzdCA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqaW5zcGVjdG9yLmZpcnN0KCkpOworICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUmIHNlY29uZCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaW5zcGVj
dG9yLnNlY29uZCgpKTsKKyAgICAgICAgICAgIGlmIChmaXJzdC5pc0xlbmd0aCgpKSB7CiAgICAg
ICAgICAgICAgICAgLy8gPGxlbmd0aD57Mn0KLSAgICAgICAgICAgICAgICBpZiAoIXNlY29uZC0+
aXNMZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBpZiAoIXNlY29uZC5pc0xlbmd0aCgpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YSA9IHN0eWxlUmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpOwotICAgICAg
ICAgICAgICAgIHdpZHRoID0gZmlyc3QtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJzaW9u
RGF0YSk7Ci0gICAgICAgICAgICAgICAgaGVpZ2h0ID0gc2Vjb25kLT5jb21wdXRlTGVuZ3RoPExl
bmd0aD4oY29udmVyc2lvbkRhdGEpOworICAgICAgICAgICAgICAgIHdpZHRoID0gZmlyc3QuY29t
cHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAgICAgICAgICBoZWln
aHQgPSBzZWNvbmQuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gPHBhZ2Utc2l6ZT4gPG9yaWVudGF0
aW9uPgogICAgICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBvcmRlciBpcyBndWFyYW50ZWVkLiBT
ZWUgQ1NTUGFyc2VyOjpwYXJzZVNpemVQYXJhbWV0ZXIuCi0gICAgICAgICAgICAgICAgaWYgKCFn
ZXRQYWdlU2l6ZUZyb21OYW1lKGZpcnN0LCBzZWNvbmQsIHdpZHRoLCBoZWlnaHQpKQorICAgICAg
ICAgICAgICAgIGlmICghZ2V0UGFnZVNpemVGcm9tTmFtZSgmZmlyc3QsICZzZWNvbmQsIHdpZHRo
LCBoZWlnaHQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfUkVTT0xWRUQ7CkBAIC0xNjg5LDE1
ICsxNjg0LDE1IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICBjYXNlIDE6IHsKICAgICAg
ICAgICAgIC8vIDxsZW5ndGg+IHwgYXV0byB8IDxwYWdlLXNpemU+IHwgWyBwb3J0cmFpdCB8IGxh
bmRzY2FwZV0KLSAgICAgICAgICAgIGlmICghaW5zcGVjdG9yLmZpcnN0KCktPmlzUHJpbWl0aXZl
VmFsdWUoKSkKKyAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCppbnNwZWN0
b3IuZmlyc3QoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZShpbnNwZWN0
b3IuZmlyc3QoKSk7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkp
IHsKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaW5zcGVjdG9yLmZpcnN0KCkpOworICAgICAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICAvLyA8bGVu
Z3RoPgogICAgICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsK
LSAgICAgICAgICAgICAgICB3aWR0aCA9IGhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRl
TGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNp
b25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpOworICAgICAgICAgICAgICAgIHdp
ZHRoID0gaGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxl
UmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRq
dXN0ZWRab29tKDEuMGYpKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
c3dpdGNoIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpKSB7CisgICAgICAgICAgICAgICAg
c3dpdGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgICAgICAgICBj
YXNlIDA6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICBjYXNl
IENTU1ZhbHVlQXV0bzoKQEAgLTE3MTIsNyArMTcwNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAvLyA8cGFnZS1zaXplPgogICAgICAg
ICAgICAgICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfUkVTT0xWRUQ7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghZ2V0UGFnZVNpemVGcm9tTmFtZShwcmltaXRpdmVWYWx1ZSwgMCwg
d2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghZ2V0UGFnZVNpemVGcm9t
TmFtZSgmcHJpbWl0aXZlVmFsdWUsIG51bGxwdHIsIHdpZHRoLCBoZWlnaHQpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
QEAgLTE3NDUsNDUgKzE3NDAsNDUgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKLSAg
ICAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHRvQ1NTVmFsdWVMaXN0KHZhbHVlKTsKLSAg
ICAgICAgICAgIEFTU0VSVChsaXN0LT5sZW5ndGgoKSA9PSAyKTsKLSAgICAgICAgICAgIGlmIChs
aXN0LT5sZW5ndGgoKSAhPSAyKQorICAgICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUp
KSB7CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIGxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxp
c3Q+KCp2YWx1ZSk7CisgICAgICAgICAgICBBU1NFUlQobGlzdC5sZW5ndGgoKSA9PSAyKTsKKyAg
ICAgICAgICAgIGlmIChsaXN0Lmxlbmd0aCgpICE9IDIpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI7ICsraSkgewotICAgICAg
ICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhp
KTsKLSAgICAgICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAg
ICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhp
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSkpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZShpdGVtKTsKLSAgICAgICAgICAg
ICAgICBpZiAodmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUZpbGxlZCB8fCB2YWx1ZS0+
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlT3BlbikKLSAgICAgICAgICAgICAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbCgqdmFsdWUpOworICAgICAgICAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqaXRlbSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmdldFZhbHVlSUQoKSA9PSBD
U1NWYWx1ZUZpbGxlZCB8fCB2YWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVPcGVuKQorICAg
ICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNG
aWxsKHZhbHVlKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoKnZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFy
ayh2YWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
dG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBw
cmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogCi0g
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNTdHJpbmcoKSkgeworICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUuaXNTdHJpbmcoKSkgewogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChUZXh0RW1waGFzaXNGaWxsRmlsbGVkKTsKICAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVt
cGhhc2lzTWFya0N1c3RvbSk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5z
ZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgp
KTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1
c3RvbU1hcmsocHJpbWl0aXZlVmFsdWUuZ2V0U3RyaW5nVmFsdWUoKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRU
ZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKTsKIAotICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUZpbGxlZCB8fCBwcmltaXRpdmVWYWx1ZS0+
Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlT3BlbikgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbCgqcHJpbWl0aXZlVmFsdWUpOworICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlRmlsbGVkIHx8IHBy
aW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU9wZW4pIHsKKyAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwocHJpbWl0aXZlVmFs
dWUpOwogICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lz
TWFyayhUZXh0RW1waGFzaXNNYXJrQXV0byk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNp
c0ZpbGxGaWxsZWQpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4
dEVtcGhhc2lzTWFyaygqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTE4MTUsMTQgKzE4MTAsMTQgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eVRl
eHRFbXBoYXNpc1Bvc2l0aW9uIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0g
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNQb3NpdGlv
bih2YWx1ZVRvRW1waGFzaXNQb3NpdGlvbigqdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSkpKTsK
KyAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSB7CisgICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNQb3NpdGlvbih2YWx1ZVRv
RW1waGFzaXNQb3NpdGlvbihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgVGV4dEVtcGhhc2lzUG9z
aXRpb24gcG9zaXRpb24gPSAwOwogICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGko
dmFsdWUpOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpCi0gICAgICAgICAgICBwb3NpdGlvbiB8
PSB2YWx1ZVRvRW1waGFzaXNQb3NpdGlvbigqdG9DU1NQcmltaXRpdmVWYWx1ZShpLnZhbHVlKCkp
KTsKKyAgICAgICAgICAgIHBvc2l0aW9uIHw9IHZhbHVlVG9FbXBoYXNpc1Bvc2l0aW9uKGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqaS52YWx1ZSgpKSk7CiAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc1Bvc2l0aW9uKHBvc2l0aW9uKTsKICAgICB9CiAg
ICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTE5MzUsMjMgKzE5
MzAsMjMgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eVJlc2l6ZSB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpOwogCi0gICAgICAgIEVSZXNpemUgciA9IFJFU0laRV9OT05FOwotICAgICAgICBzd2l0
Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICAgICAgRVJlc2l6ZSByZXNp
emUgPSBSRVNJWkVfTk9ORTsKKyAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1
ZUlEKCkpIHsKICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBj
YXNlIENTU1ZhbHVlQXV0bzoKICAgICAgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBz
dHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLnNldHRpbmdzKCkpCi0gICAgICAgICAgICAgICAgciA9
IHNldHRpbmdzLT50ZXh0QXJlYXNBcmVSZXNpemFibGUoKSA/IFJFU0laRV9CT1RIIDogUkVTSVpF
X05PTkU7CisgICAgICAgICAgICAgICAgcmVzaXplID0gc2V0dGluZ3MtPnRleHRBcmVhc0FyZVJl
c2l6YWJsZSgpID8gUkVTSVpFX0JPVEggOiBSRVNJWkVfTk9ORTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgciA9ICpwcmltaXRpdmVWYWx1ZTsKKyAg
ICAgICAgICAgIHJlc2l6ZSA9IHByaW1pdGl2ZVZhbHVlOwogICAgICAgICB9Ci0gICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFJlc2l6ZShyKTsKKyAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0UmVzaXplKHJlc2l6ZSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3Bl
cnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTE5NjUsMTUgKzE5NjAsMTUgQEAgY2xhc3Mg
QXBwbHlQcm9wZXJ0eVZlcnRpY2FsQWxpZ24gewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NT
VmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQorICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpOworICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsK
IAotICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSkKLSAgICAgICAgICAg
IHJldHVybiBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFsaWduKCpwcmltaXRp
dmVWYWx1ZSk7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkpCisgICAg
ICAgICAgICByZXR1cm4gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbihw
cmltaXRpdmVWYWx1ZSk7CiAKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VmVy
dGljYWxBbGlnbkxlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50
ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9u
PihzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSkpOwor
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFsaWduTGVuZ3RoKHBy
aW1pdGl2ZVZhbHVlLmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVy
Y2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3R5bGVSZXNvbHZlci0+c3Rh
dGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpKTsKICAgICB9CiAKICAgICBzdGF0aWMg
UHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtMjAwMywyNiArMTk5OCwyNiBAQCBw
dWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAg
ICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSB7CisgICAgICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKTsKIAotICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1
ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKQorICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdl
dFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvVHlwZShBc3BlY3RSYXRpb0F1dG8pOwot
ICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVG
cm9tRGltZW5zaW9ucykKKyAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlE
KCkgPT0gQ1NTVmFsdWVGcm9tRGltZW5zaW9ucykKICAgICAgICAgICAgICAgICByZXR1cm4gc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9UeXBlKEFzcGVjdFJhdGlvRnJvbURp
bWVuc2lvbnMpOwotICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkg
PT0gQ1NTVmFsdWVGcm9tSW50cmluc2ljKQorICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUZyb21JbnRyaW5zaWMpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvVHlwZShBc3BlY3RS
YXRpb0Zyb21JbnRyaW5zaWMpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCF2YWx1ZS0+aXNB
c3BlY3RSYXRpb1ZhbHVlKCkpIHsKKyAgICAgICAgaWYgKCFpczxDU1NBc3BlY3RSYXRpb1ZhbHVl
PigqdmFsdWUpKSB7CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3Bl
Y3RSYXRpb1R5cGUoQXNwZWN0UmF0aW9BdXRvKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIENTU0FzcGVjdFJhdGlvVmFsdWUqIGFzcGVjdFJhdGlvVmFsdWUgPSB0
b0NTU0FzcGVjdFJhdGlvVmFsdWUodmFsdWUpOworICAgICAgICBDU1NBc3BlY3RSYXRpb1ZhbHVl
JiBhc3BlY3RSYXRpb1ZhbHVlID0gZG93bmNhc3Q8Q1NTQXNwZWN0UmF0aW9WYWx1ZT4oKnZhbHVl
KTsKICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9UeXBlKEFz
cGVjdFJhdGlvU3BlY2lmaWVkKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0
QXNwZWN0UmF0aW9EZW5vbWluYXRvcihhc3BlY3RSYXRpb1ZhbHVlLT5kZW5vbWluYXRvclZhbHVl
KCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVy
YXRvcihhc3BlY3RSYXRpb1ZhbHVlLT5udW1lcmF0b3JWYWx1ZSgpKTsKKyAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihhc3BlY3RSYXRpb1Zh
bHVlLmRlbm9taW5hdG9yVmFsdWUoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkt
PnNldEFzcGVjdFJhdGlvTnVtZXJhdG9yKGFzcGVjdFJhdGlvVmFsdWUubnVtZXJhdG9yVmFsdWUo
KSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkK
QEAgLTIwNTQsMjYgKzIwNDksMjUgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgewotICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
Tih2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqdmFsdWUpOwogCi0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgp
ID09IENTU1ZhbHVlTm9ybWFsKSB7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5nZXRWYWx1
ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKICAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9v
bShzdHlsZVJlc29sdmVyKTsKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oUmVu
ZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVSZXNldCkgeworICAgICAgICB9IGVsc2UgaWYg
KHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVJlc2V0KSB7CiAgICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxlOjppbml0aWFs
Wm9vbSgpKTsKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oUmVuZGVyU3R5bGU6
OmluaXRpYWxab29tKCkpOwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRW
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVEb2N1bWVudCkgeworICAgICAgICB9IGVsc2UgaWYgKHByaW1p
dGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZURvY3VtZW50KSB7CiAgICAgICAgICAg
ICBmbG9hdCBkb2Nab29tID0gc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpID8gc3R5
bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLT56b29tKCkgOiBSZW5kZXJTdHlsZTo6aW5p
dGlhbFpvb20oKTsKICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEVmZmVjdGl2ZVpvb20o
ZG9jWm9vbSk7CiAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKGRvY1pvb20pOwot
ICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkgeworICAg
ICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpKSB7CiAgICAgICAg
ICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgICAgICBpZiAo
ZmxvYXQgcGVyY2VudCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpCisgICAgICAg
ICAgICBpZiAoZmxvYXQgcGVyY2VudCA9IHByaW1pdGl2ZVZhbHVlLmdldEZsb2F0VmFsdWUoKSkK
ICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKHBlcmNlbnQgLyAxMDAuMGYp
OwotICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7CisgICAg
ICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAg
cmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICAgICAgaWYgKGZsb2F0
IG51bWJlciA9IHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpCisgICAgICAgICAgICBp
ZiAoZmxvYXQgbnVtYmVyID0gcHJpbWl0aXZlVmFsdWUuZ2V0RmxvYXRWYWx1ZSgpKQogICAgICAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20obnVtYmVyKTsKICAgICAgICAgfQogICAg
IH0KQEAgLTIxMDgsMTAgKzIxMDIsMTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpCisgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgRURpc3BsYXkgZGlzcGxheSA9ICp0b0NTU1ByaW1pdGl2
ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgRURpc3BsYXkgZGlzcGxheSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogCiAgICAgICAgIGlmICghaXNWYWxpZERpc3BsYXlWYWx1
ZShzdHlsZVJlc29sdmVyLCBkaXNwbGF5KSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTIxMzEs
OCArMjEyNSw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHls
ZSogc3R5bGUsIFBhc3NSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IHZhbHVlKSB7IChzdHlsZS0+
KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KICAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAg
ICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVl
KTsKKyAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSB7CisgICAgICAg
ICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpOwogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBD
U1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgMCk7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5wcmltaXRpdmVU
eXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKQEAgLTIxNDMsMTMgKzIxMzcs
MTMgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgIGlmICghaXM8
Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBDU1NC
b3hUeXBlIHJlZmVyZW5jZUJveCA9IEJveE1pc3Npbmc7CiAgICAgICAgIFJlZlB0cjxDbGlwUGF0
aE9wZXJhdGlvbj4gb3BlcmF0aW9uOwotICAgICAgICBhdXRvJiB2YWx1ZUxpc3QgPSB0b0NTU1Zh
bHVlTGlzdCgqdmFsdWUpOworICAgICAgICBhdXRvJiB2YWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NW
YWx1ZUxpc3Q+KCp2YWx1ZSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1
ZUxpc3QubGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUg
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZUxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhp
KSk7CisgICAgICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPigqdmFsdWVMaXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOwogICAgICAg
ICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzU2hhcGUoKSAmJiAhb3BlcmF0aW9uKQogICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbiA9IFNoYXBlQ2xpcFBhdGhPcGVyYXRpb246OmNyZWF0ZShiYXNp
Y1NoYXBlRm9yVmFsdWUoc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNp
b25EYXRhKCksIHByaW1pdGl2ZVZhbHVlLmdldFNoYXBlVmFsdWUoKSkpOwogICAgICAgICAgICAg
ZWxzZSBpZiAoKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUNvbnRlbnRC
b3gKQEAgLTIxODYsMjYgKzIxODAsMjYgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZh
bHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgUGFzc1JlZlB0cjxTaGFwZVZhbHVlPiB2YWx1ZSkgeyAo
c3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9CiAgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkgewotICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pCisgICAgICAgIGlmIChpczxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUm
IHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7Cisg
ICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlQXV0
bykKICAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAwKTsK
ICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNJbWFnZVZhbHVlKCkgfHwgdmFsdWUtPmlzSW1h
Z2VHZW5lcmF0b3JWYWx1ZSgpIHx8IHZhbHVlLT5pc0ltYWdlU2V0VmFsdWUoKSkgewogICAgICAg
ICAgICAgUmVmUHRyPFNoYXBlVmFsdWU+IHNoYXBlID0gU2hhcGVWYWx1ZTo6Y3JlYXRlSW1hZ2VW
YWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZUltYWdlKHByb3BlcnR5LCB2YWx1ZSkpOwogICAgICAg
ICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc2hhcGUucmVsZWFzZSgpKTsK
LSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgeworICAgICAgICB9IGVs
c2UgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkgewogICAgICAgICAgICAgUmVmUHRyPEJh
c2ljU2hhcGU+IHNoYXBlOwogICAgICAgICAgICAgQ1NTQm94VHlwZSByZWZlcmVuY2VCb3ggPSBC
b3hNaXNzaW5nOwotICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3QgPSB0b0NTU1Zh
bHVlTGlzdCh2YWx1ZSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFs
dWVMaXN0LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZUxpc3QtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soaSkpOwotICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+aXNTaGFwZSgpKQotICAgICAgICAgICAgICAgICAgICBzaGFwZSA9IGJhc2ljU2hhcGVGb3JW
YWx1ZShzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSwg
cHJpbWl0aXZlVmFsdWUtPmdldFNoYXBlVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUNvbnRlbnRCb3gKLSAg
ICAgICAgICAgICAgICAgICAgfHwgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NW
YWx1ZUJvcmRlckJveAotICAgICAgICAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0
VmFsdWVJRCgpID09IENTU1ZhbHVlUGFkZGluZ0JveAotICAgICAgICAgICAgICAgICAgICB8fCBw
cmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTWFyZ2luQm94KQotICAgICAg
ICAgICAgICAgICAgICByZWZlcmVuY2VCb3ggPSBDU1NCb3hUeXBlKCpwcmltaXRpdmVWYWx1ZSk7
CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIHZhbHVlTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVl
TGlzdD4oKnZhbHVlKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1
ZUxpc3QubGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
JiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWVMaXN0
Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOworICAgICAgICAgICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZS5pc1NoYXBlKCkpCisgICAgICAgICAgICAgICAgICAgIHNoYXBlID0gYmFzaWNTaGFw
ZUZvclZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSgpLCBwcmltaXRpdmVWYWx1ZS5nZXRTaGFwZVZhbHVlKCkpOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUNvbnRlbnRCb3gK
KyAgICAgICAgICAgICAgICAgICAgfHwgcHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENT
U1ZhbHVlQm9yZGVyQm94CisgICAgICAgICAgICAgICAgICAgIHx8IHByaW1pdGl2ZVZhbHVlLmdl
dFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVBhZGRpbmdCb3gKKyAgICAgICAgICAgICAgICAgICAgfHwg
cHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTWFyZ2luQm94KQorICAgICAg
ICAgICAgICAgICAgICByZWZlcmVuY2VCb3ggPSBDU1NCb3hUeXBlKHByaW1pdGl2ZVZhbHVlKTsK
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KQEAgLTIyNDUsMjMgKzIyMzksMjMgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlz
dCgpKQorICAgICAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4oKnZhbHVlKSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3QgPSB0b0NTU1ZhbHVlTGlz
dCh2YWx1ZSk7CisgICAgICAgIENTU1ZhbHVlTGlzdCYgdmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NT
VmFsdWVMaXN0PigqdmFsdWUpOwogICAgICAgICBJbWFnZVJlc29sdXRpb25Tb3VyY2Ugc291cmNl
ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25Tb3VyY2UoKTsKICAgICAgICAg
SW1hZ2VSZXNvbHV0aW9uU25hcCBzbmFwID0gUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29s
dXRpb25TbmFwKCk7CiAgICAgICAgIGRvdWJsZSByZXNvbHV0aW9uID0gUmVuZGVyU3R5bGU6Omlu
aXRpYWxJbWFnZVJlc29sdXRpb24oKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2
YWx1ZUxpc3QtPmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0g
dmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOwotICAgICAgICAgICAgaWYgKCFp
dGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dmFsdWVMaXN0Lmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIENTU1ZhbHVlJiBpdGVtID0g
KnZhbHVlTGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAgICAgaWYgKCFp
czxDU1NQcmltaXRpdmVWYWx1ZT4oaXRlbSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1p
dGl2ZVZhbHVlKGl0ZW0pOwotICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1
ZUlEKCkgPT0gQ1NTVmFsdWVGcm9tSW1hZ2UpCisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXRlbSk7Cisg
ICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlRnJv
bUltYWdlKQogICAgICAgICAgICAgICAgIHNvdXJjZSA9IEltYWdlUmVzb2x1dGlvbkZyb21JbWFn
ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0g
Q1NTVmFsdWVTbmFwKQorICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFs
dWVJRCgpID09IENTU1ZhbHVlU25hcCkKICAgICAgICAgICAgICAgICBzbmFwID0gSW1hZ2VSZXNv
bHV0aW9uU25hcFBpeGVsczsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXNv
bHV0aW9uID0gcHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfRFBQWCk7CisgICAgICAgICAgICAgICAgcmVzb2x1dGlvbiA9IHByaW1pdGl2ZVZhbHVl
LmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQWCk7CiAgICAgICAgIH0K
ICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNl
KHNvdXJjZSk7CiAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEltYWdlUmVzb2x1
dGlvblNuYXAoc25hcCk7CkBAIC0yMjk3LDcgKzIyOTEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzVmFs
dWVMaXN0KCkpCisgICAgICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIExlbmd0aCBsZW5ndGhPclBlcmNlbnRhZ2VWYWx1ZTsK
QEAgLTIzMDUsMTkgKzIyOTksMTkgQEAgcHVibGljOgogICAgICAgICBUZXh0SW5kZW50TGluZSB0
ZXh0SW5kZW50TGluZVZhbHVlID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5kZW50TGluZSgp
OwogICAgICAgICBUZXh0SW5kZW50VHlwZSB0ZXh0SW5kZW50VHlwZVZhbHVlID0gUmVuZGVyU3R5
bGU6OmluaXRpYWxUZXh0SW5kZW50VHlwZSgpOwogI2VuZGlmCi0gICAgICAgIENTU1ZhbHVlTGlz
dCogdmFsdWVMaXN0ID0gdG9DU1NWYWx1ZUxpc3QodmFsdWUpOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHZhbHVlTGlzdC0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgQ1NT
VmFsdWUqIGl0ZW0gPSB2YWx1ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7Ci0gICAg
ICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgQ1NTVmFsdWVM
aXN0JiB2YWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVMaXN0Lmxlbmd0aCgpOyArK2kpIHsKKyAgICAg
ICAgICAgIENTU1ZhbHVlKiBpdGVtID0gdmFsdWVMaXN0Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
aSk7CisgICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoaXRlbSk7Ci0gICAgICAgICAgICBp
ZiAoIXByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpCi0gICAgICAgICAgICAgICAgbGVuZ3Ro
T3JQZXJjZW50YWdlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVk
SW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJz
aW9uPihzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7
CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oKml0ZW0pOworICAgICAgICAgICAgaWYgKCFwcmltaXRpdmVW
YWx1ZS5nZXRWYWx1ZUlEKCkpCisgICAgICAgICAgICAgICAgbGVuZ3RoT3JQZXJjZW50YWdlVmFs
dWUgPSBwcmltaXRpdmVWYWx1ZS5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lv
biB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0eWxlUmVzb2x2
ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKICNpZiBFTkFCTEUoQ1NT
M19URVhUKQotICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQo
KSA9PSBDU1NWYWx1ZVdlYmtpdEVhY2hMaW5lKQorICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0
aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlV2Via2l0RWFjaExpbmUpCiAgICAgICAg
ICAgICAgICAgdGV4dEluZGVudExpbmVWYWx1ZSA9IFRleHRJbmRlbnRFYWNoTGluZTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVX
ZWJraXRIYW5naW5nKQorICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFs
dWVJRCgpID09IENTU1ZhbHVlV2Via2l0SGFuZ2luZykKICAgICAgICAgICAgICAgICB0ZXh0SW5k
ZW50VHlwZVZhbHVlID0gVGV4dEluZGVudEhhbmdpbmc7CiAjZW5kaWYKICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvTWVkaWFMaXN0LmNwcAppbmRleCA5NDQ1MDg2M2YxYjkzYWM2YTczNTg5NmIyY2E5MmIx
ZmZiZGVhNGFmLi5lZTY2NzEyMDQyNDI2MGU4ZGIzNWY1MjI4YTNlNDVlYWMxMzIzMjAxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvTWVkaWFMaXN0LmNwcApAQCAtMzMyLDEwICszMzIsMTAgQEAgdm9pZCByZXBvcnRN
ZWRpYVF1ZXJ5V2FybmluZ0lmTmVlZGVkKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgTWVkaWFR
dWVyeVNldCogbWUKICAgICAgICAgICAgICAgICBjb25zdCBNZWRpYVF1ZXJ5RXhwKiBleHAgPSBl
eHByZXNzaW9ucy5hdChqKS5nZXQoKTsKICAgICAgICAgICAgICAgICBpZiAoZXhwLT5tZWRpYUZl
YXR1cmUoKSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6cmVzb2x1dGlvbk1lZGlhRmVhdHVyZSB8fCBl
eHAtPm1lZGlhRmVhdHVyZSgpID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhfcmVzb2x1dGlvbk1l
ZGlhRmVhdHVyZSB8fCBleHAtPm1lZGlhRmVhdHVyZSgpID09IE1lZGlhRmVhdHVyZU5hbWVzOjpt
aW5fcmVzb2x1dGlvbk1lZGlhRmVhdHVyZSkgewogICAgICAgICAgICAgICAgICAgICBDU1NWYWx1
ZSogY3NzVmFsdWUgPSAgZXhwLT52YWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY3Nz
VmFsdWUgJiYgY3NzVmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRp
dmVWYWx1ZShjc3NWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmlzRG90c1BlckluY2goKSB8fCBwcmltaXRpdmVWYWx1ZS0+aXNEb3RzUGVyQ2VudGlt
ZXRlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJlc29sdXRpb25XYXJuaW5n
TWVzc2FnZVRvQ29uc29sZShkb2N1bWVudCwgbWVkaWFRdWVyeVNldC0+bWVkaWFUZXh0KCksIHBy
aW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZh
bHVlPihjc3NWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqY3NzVmFs
dWUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzRG90c1Bl
ckluY2goKSB8fCBwcmltaXRpdmVWYWx1ZS5pc0RvdHNQZXJDZW50aW1ldGVyKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkUmVzb2x1dGlvbldhcm5pbmdNZXNzYWdlVG9Db25zb2xl
KGRvY3VtZW50LCBtZWRpYVF1ZXJ5U2V0LT5tZWRpYVRleHQoKSwgJnByaW1pdGl2ZVZhbHVlKTsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAppbmRleCBlMThiOTEx
NDA1ZmE2N2Q4YmY2NmUxMTE3OWIxNWJkYmE2YmQ0NDVmLi4zOGVkMzBiYzBiNWY0YjYzODljOGMy
NGQ4NGJmYTRmZDQ5ZjNjZGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFR
dWVyeUV2YWx1YXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFs
dWF0b3IuY3BwCkBAIC0xODYsOSArMTg2LDkgQEAgYm9vbCBjb21wYXJlVmFsdWUoVCBhLCBUIGIs
IE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIAogc3RhdGljIGJvb2wgY29tcGFyZUFzcGVjdFJhdGlv
VmFsdWUoQ1NTVmFsdWUqIHZhbHVlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIE1lZGlhRmVhdHVy
ZVByZWZpeCBvcCkKIHsKLSAgICBpZiAodmFsdWUtPmlzQXNwZWN0UmF0aW9WYWx1ZSgpKSB7Ci0g
ICAgICAgIENTU0FzcGVjdFJhdGlvVmFsdWUqIGFzcGVjdFJhdGlvID0gdG9DU1NBc3BlY3RSYXRp
b1ZhbHVlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVWYWx1ZSh3aWR0aCAqIHN0YXRp
Y19jYXN0PGludD4oYXNwZWN0UmF0aW8tPmRlbm9taW5hdG9yVmFsdWUoKSksIGhlaWdodCAqIHN0
YXRpY19jYXN0PGludD4oYXNwZWN0UmF0aW8tPm51bWVyYXRvclZhbHVlKCkpLCBvcCk7CisgICAg
aWYgKGlzPENTU0FzcGVjdFJhdGlvVmFsdWU+KCp2YWx1ZSkpIHsKKyAgICAgICAgQ1NTQXNwZWN0
UmF0aW9WYWx1ZSYgYXNwZWN0UmF0aW8gPSBkb3duY2FzdDxDU1NBc3BlY3RSYXRpb1ZhbHVlPigq
dmFsdWUpOworICAgICAgICByZXR1cm4gY29tcGFyZVZhbHVlKHdpZHRoICogc3RhdGljX2Nhc3Q8
aW50Pihhc3BlY3RSYXRpby5kZW5vbWluYXRvclZhbHVlKCkpLCBoZWlnaHQgKiBzdGF0aWNfY2Fz
dDxpbnQ+KGFzcGVjdFJhdGlvLm51bWVyYXRvclZhbHVlKCkpLCBvcCk7CiAgICAgfQogCiAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTk2LDkgKzE5Niw4IEBAIHN0YXRpYyBib29sIGNvbXBhcmVBc3Bl
Y3RSYXRpb1ZhbHVlKENTU1ZhbHVlKiB2YWx1ZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBNZWRp
CiAKIHN0YXRpYyBib29sIG51bWJlclZhbHVlKENTU1ZhbHVlKiB2YWx1ZSwgZmxvYXQmIHJlc3Vs
dCkKIHsKLSAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKQotICAgICAgICAmJiB0b0NT
U1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+aXNOdW1iZXIoKSkgewotICAgICAgICByZXN1bHQgPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+Z2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUik7CisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpICYm
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzTnVtYmVyKCkpIHsKKyAgICAg
ICAgcmVzdWx0ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0RmxvYXRW
YWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNDYsOCArMjQ1LDggQEAgc3RhdGljIGJv
b2wgb3JpZW50YXRpb25NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXIKIAogICAgIGludCB3aWR0aCA9IHZpZXctPmxheW91dFdpZHRoKCk7CiAg
ICAgaW50IGhlaWdodCA9IHZpZXctPmxheW91dEhlaWdodCgpOwotICAgIGlmICh2YWx1ZSAmJiB2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgIGNvbnN0IENTU1ZhbHVlSUQgaWQg
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS0+Z2V0VmFsdWVJRCgpOworICAgIGlmIChpczxD
U1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CisgICAgICAgIGNvbnN0IENTU1ZhbHVlSUQgaWQg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCk7CiAgICAg
ICAgIGlmICh3aWR0aCA+IGhlaWdodCkgLy8gU3F1YXJlIHZpZXdwb3J0IGlzIHBvcnRyYWl0Lgog
ICAgICAgICAgICAgcmV0dXJuIENTU1ZhbHVlTGFuZHNjYXBlID09IGlkOwogICAgICAgICByZXR1
cm4gQ1NTVmFsdWVQb3J0cmFpdCA9PSBpZDsKQEAgLTMwOCwyMiArMzA3LDIyIEBAIHN0YXRpYyBi
b29sIGV2YWxSZXNvbHV0aW9uKENTU1ZhbHVlKiB2YWx1ZSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZl
YXR1cmVQcmVmaXggb3ApCiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuICEhZGV2aWNl
U2NhbGVGYWN0b3I7CiAKLSAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAg
aWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHJlc29sdXRpb24gPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKHZhbHVlKTsKLSAgICByZXR1cm4gY29tcGFyZVZhbHVlKGRldmljZVNjYWxlRmFjdG9yLCBy
ZXNvbHV0aW9uLT5pc051bWJlcigpID8gcmVzb2x1dGlvbi0+Z2V0RmxvYXRWYWx1ZSgpIDogcmVz
b2x1dGlvbi0+Z2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQUFgpLCBvcCk7
CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHJlc29sdXRpb24gPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKTsKKyAgICByZXR1cm4gY29tcGFyZVZhbHVlKGRldmljZVNjYWxlRmFj
dG9yLCByZXNvbHV0aW9uLmlzTnVtYmVyKCkgPyByZXNvbHV0aW9uLmdldEZsb2F0VmFsdWUoKSA6
IHJlc29sdXRpb24uZ2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQUFgpLCBv
cCk7CiB9CiAKIHN0YXRpYyBib29sIGRldmljZV9waXhlbF9yYXRpb01lZGlhRmVhdHVyZUV2YWwo
Q1NTVmFsdWUgKnZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUq
IGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0gICAgcmV0dXJuICghdmFsdWUgfHwg
dG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSktPmlzTnVtYmVyKCkpICYmIGV2YWxSZXNvbHV0aW9u
KHZhbHVlLCBmcmFtZSwgb3ApOworICAgIHJldHVybiAoIXZhbHVlIHx8IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzTnVtYmVyKCkpICYmIGV2YWxSZXNvbHV0aW9uKHZhbHVl
LCBmcmFtZSwgb3ApOwogfQogCiBzdGF0aWMgYm9vbCByZXNvbHV0aW9uTWVkaWFGZWF0dXJlRXZh
bChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFt
ZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKICNpZiBFTkFCTEUoUkVTT0xVVElP
Tl9NRURJQV9RVUVSWSkKLSAgICByZXR1cm4gKCF2YWx1ZSB8fCB0b0NTU1ByaW1pdGl2ZVZhbHVl
KHZhbHVlKS0+aXNSZXNvbHV0aW9uKCkpICYmIGV2YWxSZXNvbHV0aW9uKHZhbHVlLCBmcmFtZSwg
b3ApOworICAgIHJldHVybiAoIXZhbHVlIHx8IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpLmlzUmVzb2x1dGlvbigpKSAmJiBldmFsUmVzb2x1dGlvbih2YWx1ZSwgZnJhbWUsIG9w
KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0oZnJh
bWUpOwpAQCAtMzQ0LDE4ICszNDMsMTggQEAgc3RhdGljIGJvb2wgZ3JpZE1lZGlhRmVhdHVyZUV2
YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXQKIAogc3Rh
dGljIGJvb2wgY29tcHV0ZUxlbmd0aChDU1NWYWx1ZSogdmFsdWUsIGJvb2wgc3RyaWN0LCBjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgaW50JiByZXN1bHQp
CiB7Ci0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFs
dWUpOworICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogCi0gICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051
bWJlcigpKSB7Ci0gICAgICAgIHJlc3VsdCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRJbnRWYWx1ZSgp
OworICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpKSB7CisgICAgICAgIHJlc3VsdCA9
IHByaW1pdGl2ZVZhbHVlLmdldEludFZhbHVlKCk7CiAgICAgICAgIHJldHVybiAhc3RyaWN0IHx8
ICFyZXN1bHQ7CiAgICAgfQogCi0gICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7
Ci0gICAgICAgIHJlc3VsdCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGludD4oY29u
dmVyc2lvbkRhdGEpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7CisgICAg
ICAgIHJlc3VsdCA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8aW50Pihjb252ZXJzaW9u
RGF0YSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNTkzLDcgKzU5Miw3IEBA
IHN0YXRpYyBib29sIHZpZXdfbW9kZU1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBj
b25zdCBDU1NUb0xlbmd0aENvbnZlcnNpCiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICBjb25zdCBpbnQgdmlld01vZGVDU1NLZXl3b3JkSUQgPSB0b0NTU1ByaW1p
dGl2ZVZhbHVlKHZhbHVlKS0+Z2V0VmFsdWVJRCgpOworICAgIGNvbnN0IGludCB2aWV3TW9kZUNT
U0tleXdvcmRJRCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVl
SUQoKTsKICAgICBjb25zdCBQYWdlOjpWaWV3TW9kZSB2aWV3TW9kZSA9IGZyYW1lLT5wYWdlKCkt
PnZpZXdNb2RlKCk7CiAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKICAgICBzd2l0Y2ggKHZpZXdN
b2RlKSB7CkBAIC02ODgsMTAgKzY4NywxMCBAQCBzdGF0aWMgYm9vbCBwb2ludGVyTWVkaWFGZWF0
dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbgogICAg
IGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBwb2ludGVyICE9IE5vUG9pbnRlcjsKIAotICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2
ZVZhbHVlPigqdmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCBDU1NW
YWx1ZUlEIGlkID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSktPmdldFZhbHVlSUQoKTsKKyAg
ICBjb25zdCBDU1NWYWx1ZUlEIGlkID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSkuZ2V0VmFsdWVJRCgpOwogICAgIHJldHVybiAocG9pbnRlciA9PSBOb1BvaW50ZXIgJiYgaWQg
PT0gQ1NTVmFsdWVOb25lKQogICAgICAgICB8fCAocG9pbnRlciA9PSBUb3VjaFBvaW50ZXIgJiYg
aWQgPT0gQ1NTVmFsdWVDb2Fyc2UpCiAgICAgICAgIHx8IChwb2ludGVyID09IE1vdXNlUG9pbnRl
ciAmJiBpZCA9PSBDU1NWYWx1ZUZpbmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxl
U2VsZWN0b3IuY3BwCmluZGV4IGZhNDMyMWU4YjdiYjQ0YjlhN2I2ZTE0N2FlMjIyMWIzNDkwYTdl
MjIuLjY4NTQ5NDU5MTdjNmU0OTE2OGU0ZDJjZmFjZGUwZmRlYzc2ZGYzMjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTEwMyw5ICsxMDMsOSBAQCBz
dGF0aWMgQ29sb3IgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShTVkdDb2xvciogc3ZnQ29sb3Is
IGNvbnN0IENvbG9yJiBmZ0NvbG9yKQogdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBBU1NFUlQodmFs
dWUpOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IDA7Ci0gICAgaWYg
KHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHByaW1pdGl2ZVZhbHVlID0gdG9D
U1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSk7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2
ZVZhbHVlID0gbnVsbHB0cjsKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkp
CisgICAgICAgIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKTsKIAogICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgU1ZHUmVuZGVy
U3R5bGUmIHN2Z1N0eWxlID0gc3RhdGUuc3R5bGUoKS0+YWNjZXNzU1ZHU3R5bGUoKTsKQEAgLTIw
OCwxMyArMjA4LDEzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAvLyAnbm9ybWFsJyBp
cyB0aGUgb25seSBwcmltaXRpdmVWYWx1ZQogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
KQogICAgICAgICAgICAgICAgIHN2Z1N0eWxlLnNldFBhaW50T3JkZXIoUGFpbnRPcmRlck5vcm1h
bCk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQorICAgICAgICAgICAg
aWYgKCFpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIG9yZGVyVHlwZUxpc3QgPSB0b0NTU1ZhbHVlTGlzdCh2
YWx1ZSk7CisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIG9yZGVyVHlwZUxpc3QgPSBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CiAKICAgICAgICAgICAgIC8vIFNlcmlhbGl6YXRpb24g
aGFwcGVuZWQgZHVyaW5nIHBhcnNpbmcuIE5vIGFkZGl0aW9uYWwgY2hlY2tpbmcgbmVlZGVkLgot
ICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gb3JkZXJUeXBlTGlzdC0+bGVuZ3RoKCk7Ci0g
ICAgICAgICAgICBwcmltaXRpdmVWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUob3JkZXJUeXBl
TGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7CisgICAgICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBvcmRlclR5cGVMaXN0Lmxlbmd0aCgpOworICAgICAgICAgICAgcHJpbWl0aXZlVmFs
dWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4ob3JkZXJUeXBlTGlzdC5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDApKTsKICAgICAgICAgICAgIFBhaW50T3JkZXIgcGFpbnRPcmRlcjsKICAg
ICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSkgewogICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZUZpbGw6CkBAIC0yNjYsOSArMjY2LDkgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICAgICAgICAgICAgICBzdmdTdHlsZS5zZXRGaWxsUGFpbnQoU1ZHUmVuZGVyU3R5bGU6
OmluaXRpYWxGaWxsUGFpbnRUeXBlKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50
Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRVcmkoKSwgYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KHZhbHVlLT5pc1NWR1BhaW50KCkpIHsKLSAgICAgICAgICAgICAgICBTVkdQYWludCogc3ZnUGFp
bnQgPSB0b1NWR1BhaW50KHZhbHVlKTsKLSAgICAgICAgICAgICAgICBzdmdTdHlsZS5zZXRGaWxs
UGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2
Z1BhaW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBhcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgp
KTsKKyAgICAgICAgICAgIGlmIChpczxTVkdQYWludD4oKnZhbHVlKSkgeworICAgICAgICAgICAg
ICAgIFNWR1BhaW50JiBzdmdQYWludCA9IGRvd25jYXN0PFNWR1BhaW50PigqdmFsdWUpOworICAg
ICAgICAgICAgICAgIHN2Z1N0eWxlLnNldEZpbGxQYWludChzdmdQYWludC5wYWludFR5cGUoKSwg
Y29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZSgmc3ZnUGFpbnQsIHN0YXRlLnN0eWxlKCktPmNvbG9y
KCkpLCBzdmdQYWludC51cmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5
UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtMjgzLDMwICsyODMsMzAgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICAgICAgICAgICAgICBzdmdTdHlsZS5zZXRTdHJva2VQYWludChTVkdSZW5kZXJTdHlsZTo6
aW5pdGlhbFN0cm9rZVBhaW50VHlwZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBh
aW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFVyaSgpLCBhcHBs
eVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkgewotICAgICAgICAgICAgICAgIFNWR1BhaW50KiBz
dmdQYWludCA9IHRvU1ZHUGFpbnQodmFsdWUpOwotICAgICAgICAgICAgICAgIHN2Z1N0eWxlLnNl
dFN0cm9rZVBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NW
YWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSksIHN2Z1BhaW50LT51cmkoKSwg
YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5r
U3R5bGUoKSk7CisgICAgICAgICAgICBpZiAoaXM8U1ZHUGFpbnQ+KCp2YWx1ZSkpIHsKKyAgICAg
ICAgICAgICAgICBTVkdQYWludCYgc3ZnUGFpbnQgPSBkb3duY2FzdDxTVkdQYWludD4oKnZhbHVl
KTsKKyAgICAgICAgICAgICAgICBzdmdTdHlsZS5zZXRTdHJva2VQYWludChzdmdQYWludC5wYWlu
dFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZSgmc3ZnUGFpbnQsIHN0YXRlLnN0eWxl
KCktPmNvbG9yKCkpLCBzdmdQYWludC51cmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxl
KCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3Ry
b2tlRGFzaGFycmF5OgogICAgICAgICB7CiAgICAgICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRf
SU5JVElBTChzdHJva2VEYXNoQXJyYXksIFN0cm9rZURhc2hBcnJheSkKLSAgICAgICAgICAgIGlm
ICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKKyAgICAgICAgICAgIGlmICghaXM8Q1NTVmFsdWVM
aXN0PigqdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgc3ZnU3R5bGUuc2V0U3Ryb2tlRGFzaEFy
cmF5KFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlRGFzaEFycmF5KCkpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBDU1NWYWx1ZUxpc3Qq
IGRhc2hlcyA9IHRvQ1NTVmFsdWVMaXN0KHZhbHVlKTsKKyAgICAgICAgICAgIENTU1ZhbHVlTGlz
dCYgZGFzaGVzID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWUpOwogCiAgICAgICAgICAg
ICBWZWN0b3I8U1ZHTGVuZ3RoPiBhcnJheTsKLSAgICAgICAgICAgIHNpemVfdCBsZW5ndGggPSBk
YXNoZXMtPmxlbmd0aCgpOworICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IGRhc2hlcy5sZW5n
dGgoKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gZGFzaGVzLT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKGkpOwotICAgICAgICAgICAgICAgIGlmICghY3VyclZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCisgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGRhc2hl
cy5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpOworICAgICAgICAgICAgICAgIGlmICghaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KCpjdXJyVmFsdWUpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBkYXNoID0gdG9DU1NQcmlt
aXRpdmVWYWx1ZShkYXNoZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOworICAgICAgICAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBkYXNoID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KGRhc2hlcy5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKICAgICAgICAgICAgICAgICBh
cnJheS5hcHBlbmQoU1ZHTGVuZ3RoOjpmcm9tQ1NTUHJpbWl0aXZlVmFsdWUoZGFzaCkpOwogICAg
ICAgICAgICAgfQogCkBAIC00OTEsMTUgKzQ5MSwxNSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5U3RvcENvbG9yOgogICAgICAgICB7CiAgICAgICAgICAgICBIQU5E
TEVfSU5IRVJJVF9BTkRfSU5JVElBTChzdG9wQ29sb3IsIFN0b3BDb2xvcik7Ci0gICAgICAgICAg
ICBpZiAodmFsdWUtPmlzU1ZHQ29sb3IoKSkKLSAgICAgICAgICAgICAgICBzdmdTdHlsZS5zZXRT
dG9wQ29sb3IoY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZSh0b1NWR0NvbG9yKHZhbHVlKSwgc3Rh
dGUuc3R5bGUoKS0+Y29sb3IoKSkpOworICAgICAgICAgICAgaWYgKGlzPFNWR0NvbG9yPigqdmFs
dWUpKQorICAgICAgICAgICAgICAgIHN2Z1N0eWxlLnNldFN0b3BDb2xvcihjb2xvckZyb21TVkdD
b2xvckNTU1ZhbHVlKGRvd25jYXN0PFNWR0NvbG9yPih2YWx1ZSksIHN0YXRlLnN0eWxlKCktPmNv
bG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUxpZ2h0aW5nQ29sb3I6CiAgICAgICAgIHsKICAgICAgICAgICAgIEhBTkRMRV9JTkhF
UklUX0FORF9JTklUSUFMKGxpZ2h0aW5nQ29sb3IsIExpZ2h0aW5nQ29sb3IpOwotICAgICAgICAg
ICAgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAgICAgICAgICAgICAgc3ZnU3R5bGUuc2V0
TGlnaHRpbmdDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHRvU1ZHQ29sb3IodmFsdWUp
LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSk7CisgICAgICAgICAgICBpZiAoaXM8U1ZHQ29sb3I+
KCp2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3ZnU3R5bGUuc2V0TGlnaHRpbmdDb2xvcihjb2xv
ckZyb21TVkdDb2xvckNTU1ZhbHVlKGRvd25jYXN0PFNWR0NvbG9yPih2YWx1ZSksIHN0YXRlLnN0
eWxlKCktPmNvbG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlGbG9vZE9wYWNpdHk6CkBAIC01MjMsOCArNTIzLDggQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVl
KiB2YWx1ZSkKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZsb29kQ29sb3I6CiAgICAgICAgIHsK
ICAgICAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKGZsb29kQ29sb3IsIEZsb29k
Q29sb3IpOwotICAgICAgICAgICAgaWYgKHZhbHVlLT5pc1NWR0NvbG9yKCkpCi0gICAgICAgICAg
ICAgICAgc3ZnU3R5bGUuc2V0Rmxvb2RDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHRv
U1ZHQ29sb3IodmFsdWUpLCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSk7CisgICAgICAgICAgICBp
ZiAoaXM8U1ZHQ29sb3I+KCp2YWx1ZSkpCisgICAgICAgICAgICAgICAgc3ZnU3R5bGUuc2V0Rmxv
b2RDb2xvcihjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKGRvd25jYXN0PFNWR0NvbG9yPih2YWx1
ZSksIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlHbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbDoK
QEAgLTU3MSwyNyArNTcxLDI3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAoaXNJ
bml0aWFsIHx8IHByaW1pdGl2ZVZhbHVlKSAvLyBpbml0aWFsIHwgbm9uZQogICAgICAgICAgICAg
ICAgIHJldHVybiBzdmdTdHlsZS5zZXRTaGFkb3cobnVsbHB0cik7CiAKLSAgICAgICAgICAgIGlm
ICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgICAgICBpZiAoIWlzPENTU1ZhbHVlTGlz
dD4oKnZhbHVlKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIENTU1Zh
bHVlTGlzdCogbGlzdCA9IHRvQ1NTVmFsdWVMaXN0KHZhbHVlKTsKLSAgICAgICAgICAgIGlmICgh
bGlzdC0+bGVuZ3RoKCkpCisgICAgICAgICAgICBDU1NWYWx1ZUxpc3QmIGxpc3QgPSBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIWxpc3QubGVuZ3RoKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBDU1NWYWx1ZSogZmlyc3RW
YWx1ZSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCk7Ci0gICAgICAgICAgICBpZiAo
IWZpcnN0VmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKKyAgICAgICAgICAgIENTU1ZhbHVlKiBmaXJz
dFZhbHVlID0gbGlzdC5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApOworICAgICAgICAgICAgaWYg
KCFpczxDU1NTaGFkb3dWYWx1ZT4oKmZpcnN0VmFsdWUpKQogICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIENTU1NoYWRvd1ZhbHVlKiBpdGVtID0gdG9DU1NTaGFkb3dWYWx1ZShm
aXJzdFZhbHVlKTsKLSAgICAgICAgICAgIEludFBvaW50IGxvY2F0aW9uKGl0ZW0tPngtPmNvbXB1
dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhB
ZGp1c3RlZFpvb20oMS4wZikpLAotICAgICAgICAgICAgICAgIGl0ZW0tPnktPmNvbXB1dGVMZW5n
dGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3Rl
ZFpvb20oMS4wZikpKTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0t
PmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRh
KCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpIDogMDsKKyAgICAgICAgICAgIENTU1NoYWRv
d1ZhbHVlJiBpdGVtID0gZG93bmNhc3Q8Q1NTU2hhZG93VmFsdWU+KCpmaXJzdFZhbHVlKTsKKyAg
ICAgICAgICAgIEludFBvaW50IGxvY2F0aW9uKGl0ZW0ueC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0
YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBm
KSksCisgICAgICAgICAgICAgICAgaXRlbS55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3Nz
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpKSk7Cisg
ICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0uYmx1ciA/IGl0ZW0uYmx1ci0+Y29tcHV0ZUxlbmd0
aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVk
Wm9vbSgxLjBmKSkgOiAwOwogICAgICAgICAgICAgQ29sb3IgY29sb3I7Ci0gICAgICAgICAgICBp
ZiAoaXRlbS0+Y29sb3IpCi0gICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21QcmltaXRp
dmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CisgICAgICAgICAgICBpZiAoaXRlbS5jb2xvcikK
KyAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGl0ZW0uY29s
b3IuZ2V0KCkpOwogCiAgICAgICAgICAgICAvLyAtd2Via2l0LXN2Zy1zaGFkb3cgZG9lcyBzaG91
bGQgbm90IGhhdmUgYSBzcHJlYWQgb3Igc3R5bGUKLSAgICAgICAgICAgIEFTU0VSVCghaXRlbS0+
c3ByZWFkKTsKLSAgICAgICAgICAgIEFTU0VSVCghaXRlbS0+c3R5bGUpOworICAgICAgICAgICAg
QVNTRVJUKCFpdGVtLnNwcmVhZCk7CisgICAgICAgICAgICBBU1NFUlQoIWl0ZW0uc3R5bGUpOwog
CiAgICAgICAgICAgICBhdXRvIHNoYWRvd0RhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFNoYWRvd0Rh
dGE+KGxvY2F0aW9uLCBibHVyLCAwLCBOb3JtYWwsIGZhbHNlLCBjb2xvci5pc1ZhbGlkKCkgPyBj
b2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCk7CiAgICAgICAgICAgICBzdmdTdHlsZS5zZXRTaGFk
b3coV1RGOjptb3ZlKHNoYWRvd0RhdGEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9Tb3VyY2VTaXplTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU291cmNlU2l6ZUxpc3Qu
Y3BwCmluZGV4IDdkODYyZTFkNTg0MzhkNWIwOGU0ZWMwZWU3OGQyYWU1NGRlNTMyZTguLjg4ODdi
Y2VkOGRjYmY0Y2JmNjJiMTAwYWRmOTJlODI2YWY0N2RmYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1Nv
dXJjZVNpemVMaXN0LmNwcApAQCAtNjAsNyArNjAsNyBAQCBzdGF0aWMgdW5zaWduZWQgY29tcHV0
ZUxlbmd0aChDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIFJlbmRlclN0eWxlJiBzdHlsZSwgUmVuZGVy
VgogICAgICAgICB9CiAgICAgfQogICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSB2YWx1
ZS5jcmVhdGVDU1NWYWx1ZSgpOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcHJpbWl0
aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGNzc1ZhbHVlLmdldCgpKTsKKyAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KGNzc1ZhbHVlLmdldCgpKTsKICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWUtPmNv
bXB1dGVMZW5ndGg8dW5zaWduZWQ+KGNvbnZlcnNpb25EYXRhKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVQcm9wZXJ0aWVzLmNwcAppbmRleCA2ZDJmZGNlMjFkZjE2ZWVjMWQ1MGQyNjU1ZWI0
MGM0NTA5OWJkMmIyLi5mOGVhNDBkNDlhZDBlNTY0OTRhODBhZDFjYWNkZjBlZjBkNTE0ODI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcApAQCAtMzYzLDcgKzM2Myw3IEBA
IFN0cmluZyBTdHlsZVByb3BlcnRpZXM6OmdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShjb25zdCBT
dHlsZVByb3BlcnR5U2hvcnRoYW5kJiBzCiAgICAgICAgIHZhbHVlc1tpXSA9IGdldFByb3BlcnR5
Q1NTVmFsdWUoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtpXSk7CiAgICAgICAgIGlmICh2YWx1ZXNb
aV0pIHsKICAgICAgICAgICAgIGlmICh2YWx1ZXNbaV0tPmlzQmFzZVZhbHVlTGlzdCgpKQotICAg
ICAgICAgICAgICAgIG51bUxheWVycyA9IHN0ZDo6bWF4KHRvQ1NTVmFsdWVMaXN0KHZhbHVlc1tp
XS5nZXQoKSktPmxlbmd0aCgpLCBudW1MYXllcnMpOworICAgICAgICAgICAgICAgIG51bUxheWVy
cyA9IHN0ZDo6bWF4KGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlc1tpXSkubGVuZ3RoKCks
IG51bUxheWVycyk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbnVtTGF5ZXJz
ID0gc3RkOjptYXg8c2l6ZV90PigxVSwgbnVtTGF5ZXJzKTsKICAgICAgICAgfQpAQCAtMzg0LDcg
KzM4NCw3IEBAIFN0cmluZyBTdHlsZVByb3BlcnRpZXM6OmdldExheWVyZWRTaG9ydGhhbmRWYWx1
ZShjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiBzCiAgICAgICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IHZhbHVlOwogICAgICAgICAgICAgaWYgKHZhbHVlc1tqXSkgewogICAgICAgICAgICAg
ICAgIGlmICh2YWx1ZXNbal0tPmlzQmFzZVZhbHVlTGlzdCgpKQotICAgICAgICAgICAgICAgICAg
ICB2YWx1ZSA9IHRvQ1NTVmFsdWVMaXN0KHZhbHVlc1tqXS5nZXQoKSktPml0ZW0oaSk7CisgICAg
ICAgICAgICAgICAgICAgIHZhbHVlID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqdmFsdWVzW2pd
KS5pdGVtKGkpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICB2
YWx1ZSA9IHZhbHVlc1tqXTsKIApAQCAtNDA4LDE2ICs0MDgsMTYgQEAgU3RyaW5nIFN0eWxlUHJv
cGVydGllczo6Z2V0TGF5ZXJlZFNob3J0aGFuZFZhbHVlKGNvbnN0IFN0eWxlUHJvcGVydHlTaG9y
dGhhbmQmIHMKICAgICAgICAgICAgICAgICAgICAgfHwgKGogPCBzaXplIC0gMSAmJiBzaG9ydGhh
bmQucHJvcGVydGllcygpW2ogKyAxXSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXRZICYm
IHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHlWYWx1ZTsK
ICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBuZXh0VmFsdWUgPSB2YWx1ZXNb
aiArIDFdOwotICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFZhbHVlLT5pc1ZhbHVlTGlzdCgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgeVZhbHVlID0gdG9DU1NWYWx1ZUxpc3QobmV4dFZh
bHVlLmdldCgpKS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4oKm5leHRWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICB5VmFsdWUgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCpuZXh0VmFsdWUpLml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soaSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgICAgIHlWYWx1ZSA9IG5leHRWYWx1ZTsKIAotICAgICAgICAgICAgICAgICAgICBp
ZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkgfHwgIXlWYWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpIHx8ICFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnlWYWx1ZSkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAgICAgICBDU1NWYWx1ZUlEIHhJZCA9
IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUuZ2V0KCkpLT5nZXRWYWx1ZUlEKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIENTU1ZhbHVlSUQgeUlkID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh5VmFsdWUu
Z2V0KCkpLT5nZXRWYWx1ZUlEKCk7CisgICAgICAgICAgICAgICAgICAgIENTU1ZhbHVlSUQgeElk
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpOworICAg
ICAgICAgICAgICAgICAgICBDU1NWYWx1ZUlEIHlJZCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqeVZhbHVlKS5nZXRWYWx1ZUlEKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh4SWQg
IT0geUlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeElkID09IENTU1ZhbHVlUmVw
ZWF0ICYmIHlJZCA9PSBDU1NWYWx1ZU5vUmVwZWF0KSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXNlUmVwZWF0WFNob3J0aGFuZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAKaW5kZXggMmYyZGZjNjE3YmQxYzQxNWQxZjQwNzFhNGRmMTQ5NzE3Yzk4YTAyOC4u
Njk2YzQzYzIzMjliMzQ3YmFiMzllNTczMjU3MjI0YmIxMmMyMzVmOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMTY0MywxMyArMTY0MywxMyBAQCB2b2lkIGV4dHJhY3RE
aXJlY3Rpb25BbmRXcml0aW5nTW9kZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFN0
eWxlUmVzb2x2ZQogICAgICAgICAgICAgc3dpdGNoIChwcm9wZXJ0eS5pZCgpKSB7CiAgICAgICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0V3JpdGluZ01vZGU6CiAgICAgICAgICAgICAgICAg
aWYgKCFoYWRJbXBvcnRhbnRXZWJraXRXcml0aW5nTW9kZSB8fCBwcm9wZXJ0eS5pc0ltcG9ydGFu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRpbmdNb2RlID0gdG9DU1NQcmltaXRpdmVW
YWx1ZSgqcHJvcGVydHkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIHdyaXRpbmdNb2Rl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpwcm9wZXJ0eS52YWx1ZSgpKTsKICAgICAg
ICAgICAgICAgICAgICAgaGFkSW1wb3J0YW50V2Via2l0V3JpdGluZ01vZGUgPSBwcm9wZXJ0eS5p
c0ltcG9ydGFudCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlEaXJlY3Rpb246CiAgICAgICAgICAgICAgICAg
aWYgKCFoYWRJbXBvcnRhbnREaXJlY3Rpb24gfHwgcHJvcGVydHkuaXNJbXBvcnRhbnQoKSkgewot
ICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKCpwcm9w
ZXJ0eS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCpwcm9wZXJ0eS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAg
ICAgaGFkSW1wb3J0YW50RGlyZWN0aW9uID0gcHJvcGVydHkuaXNJbXBvcnRhbnQoKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTMxLDIyICsxOTMxLDIy
IEBAIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlLCBjb25zdCBTdHlsCiAKIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFj
a1NpemUoQ1NTVmFsdWUqIHZhbHVlLCBHcmlkVHJhY2tTaXplJiB0cmFja1NpemUsIGNvbnN0IFN0
eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKIHsKLSAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkgewotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKKyAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSkpIHsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgIEdyaWRMZW5ndGgg
d29ya2luZ0xlbmd0aDsKLSAgICAgICAgaWYgKCFjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKHByaW1p
dGl2ZVZhbHVlLCBzdGF0ZSwgd29ya2luZ0xlbmd0aCkpCisgICAgICAgIGlmICghY3JlYXRlR3Jp
ZFRyYWNrQnJlYWR0aCgmcHJpbWl0aXZlVmFsdWUsIHN0YXRlLCB3b3JraW5nTGVuZ3RoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICB0cmFja1NpemUuc2V0TGVuZ3RoKHdv
cmtpbmdMZW5ndGgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBDU1NGdW5j
dGlvblZhbHVlKiBtaW5tYXhGdW5jdGlvbiA9IHRvQ1NTRnVuY3Rpb25WYWx1ZSh2YWx1ZSk7Ci0g
ICAgQ1NTVmFsdWVMaXN0KiBhcmd1bWVudHMgPSBtaW5tYXhGdW5jdGlvbi0+YXJndW1lbnRzKCk7
CisgICAgQ1NTRnVuY3Rpb25WYWx1ZSYgbWlubWF4RnVuY3Rpb24gPSBkb3duY2FzdDxDU1NGdW5j
dGlvblZhbHVlPigqdmFsdWUpOworICAgIENTU1ZhbHVlTGlzdCogYXJndW1lbnRzID0gbWlubWF4
RnVuY3Rpb24uYXJndW1lbnRzKCk7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oYXJndW1lbnRzLT5sZW5ndGgoKSA9PSAyKTsKICAgICBHcmlkTGVuZ3RoIG1pblRyYWNrQnJl
YWR0aDsKICAgICBHcmlkTGVuZ3RoIG1heFRyYWNrQnJlYWR0aDsKLSAgICBpZiAoIWNyZWF0ZUdy
aWRUcmFja0JyZWFkdGgodG9DU1NQcmltaXRpdmVWYWx1ZShhcmd1bWVudHMtPml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soMCkpLCBzdGF0ZSwgbWluVHJhY2tCcmVhZHRoKSB8fCAhY3JlYXRlR3JpZFRy
YWNrQnJlYWR0aCh0b0NTU1ByaW1pdGl2ZVZhbHVlKGFyZ3VtZW50cy0+aXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjaygxKSksIHN0YXRlLCBtYXhUcmFja0JyZWFkdGgpKQorICAgIGlmICghY3JlYXRlR3Jp
ZFRyYWNrQnJlYWR0aChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oYXJndW1lbnRzLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDApKSwgc3RhdGUsIG1pblRyYWNrQnJlYWR0aCkgfHwgIWNyZWF0
ZUdyaWRUcmFja0JyZWFkdGgoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGFyZ3VtZW50cy0+
aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSksIHN0YXRlLCBtYXhUcmFja0JyZWFkdGgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB0cmFja1NpemUuc2V0TWluTWF4KG1pblRyYWNrQnJl
YWR0aCwgbWF4VHJhY2tCcmVhZHRoKTsKQEAgLTE5NTYsOSArMTk1Niw5IEBAIHN0YXRpYyBib29s
IGNyZWF0ZUdyaWRUcmFja1NpemUoQ1NTVmFsdWUqIHZhbHVlLCBHcmlkVHJhY2tTaXplJiB0cmFj
a1NpemUsIGNvbnN0CiBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tMaXN0KENTU1ZhbHVlKiB2
YWx1ZSwgVmVjdG9yPEdyaWRUcmFja1NpemU+JiB0cmFja1NpemVzLCBOYW1lZEdyaWRMaW5lc01h
cCYgbmFtZWRHcmlkTGluZXMsIE9yZGVyZWROYW1lZEdyaWRMaW5lc01hcCYgb3JkZXJlZE5hbWVk
R3JpZExpbmVzLCBjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCiB7CiAgICAgLy8g
SGFuZGxlICdub25lJy4KLSAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewotICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkg
PT0gQ1NTVmFsdWVOb25lOworICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkg
eworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVl
LmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmU7CiAgICAgfQogCiAgICAgaWYgKCF2YWx1ZS0+
aXNWYWx1ZUxpc3QoKSkKQEAgLTE5NjcsMTAgKzE5NjcsMTAgQEAgc3RhdGljIGJvb2wgY3JlYXRl
R3JpZFRyYWNrTGlzdChDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxHcmlkVHJhY2tTaXplPiYgdHJh
Y2tTaXoKICAgICBzaXplX3QgY3VycmVudE5hbWVkR3JpZExpbmUgPSAwOwogICAgIGZvciAoQ1NT
VmFsdWVMaXN0SXRlcmF0b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsK
ICAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUoKTsKLSAgICAgICAgaWYgKGN1
cnJWYWx1ZS0+aXNHcmlkTGluZU5hbWVzVmFsdWUoKSkgewotICAgICAgICAgICAgQ1NTR3JpZExp
bmVOYW1lc1ZhbHVlKiBsaW5lTmFtZXNWYWx1ZSA9IHRvQ1NTR3JpZExpbmVOYW1lc1ZhbHVlKGN1
cnJWYWx1ZSk7Ci0gICAgICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGogPSBsaW5l
TmFtZXNWYWx1ZTsgai5oYXNNb3JlKCk7IGouYWR2YW5jZSgpKSB7Ci0gICAgICAgICAgICAgICAg
U3RyaW5nIG5hbWVkR3JpZExpbmUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGoudmFsdWUoKSktPmdl
dFN0cmluZ1ZhbHVlKCk7CisgICAgICAgIGlmIChpczxDU1NHcmlkTGluZU5hbWVzVmFsdWU+KCpj
dXJyVmFsdWUpKSB7CisgICAgICAgICAgICBDU1NHcmlkTGluZU5hbWVzVmFsdWUmIGxpbmVOYW1l
c1ZhbHVlID0gZG93bmNhc3Q8Q1NTR3JpZExpbmVOYW1lc1ZhbHVlPigqY3VyclZhbHVlKTsKKyAg
ICAgICAgICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaiA9ICZsaW5lTmFtZXNWYWx1ZTsg
ai5oYXNNb3JlKCk7IGouYWR2YW5jZSgpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWVk
R3JpZExpbmUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oai52YWx1ZSgpKS0+Z2V0U3Ry
aW5nVmFsdWUoKTsKICAgICAgICAgICAgICAgICBOYW1lZEdyaWRMaW5lc01hcDo6QWRkUmVzdWx0
IHJlc3VsdCA9IG5hbWVkR3JpZExpbmVzLmFkZChuYW1lZEdyaWRMaW5lLCBWZWN0b3I8c2l6ZV90
PigpKTsKICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChjdXJy
ZW50TmFtZWRHcmlkTGluZSk7CiAgICAgICAgICAgICAgICAgT3JkZXJlZE5hbWVkR3JpZExpbmVz
TWFwOjpBZGRSZXN1bHQgb3JkZXJlZFJlc3VsdCA9IG9yZGVyZWROYW1lZEdyaWRMaW5lcy5hZGQo
Y3VycmVudE5hbWVkR3JpZExpbmUsIFZlY3RvcjxTdHJpbmc+KCkpOwpAQCAtMTk5OCwzNyArMTk5
OCwzNyBAQCBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkUG9zaXRpb24oQ1NTVmFsdWUqIHZhbHVlLCBH
cmlkUG9zaXRpb24mIHBvc2l0aW9uKQogewogICAgIC8vIFdlIGFjY2VwdCB0aGUgc3BlY2lmaWNh
dGlvbidzIGdyYW1tYXI6CiAgICAgLy8gYXV0byB8IDxjdXN0b20taWRlbnQ+IHwgWyA8aW50ZWdl
cj4gJiYgPGN1c3RvbS1pZGVudD4/IF0gfCBbIHNwYW4gJiYgWyA8aW50ZWdlcj4gfHwgPGN1c3Rv
bS1pZGVudD4gXSBdCi0gICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSh2YWx1ZSk7CisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSB7CisgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPigqdmFsdWUpOwogICAgICAgICAvLyBXZSB0cmFuc2xhdGUgPGlkZW50PiB0byA8
c3RyaW5nPiBkdXJpbmcgcGFyc2luZyBhcyBpdCBtYWtlcyBoYW5kbGluZyBpdCBzaW1wbGVyLgot
ICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIHBv
c2l0aW9uLnNldE5hbWVkR3JpZEFyZWEocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkp
OworICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNTdHJpbmcoKSkgeworICAgICAgICAgICAg
cG9zaXRpb24uc2V0TmFtZWRHcmlkQXJlYShwcmltaXRpdmVWYWx1ZS5nZXRTdHJpbmdWYWx1ZSgp
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgQVNTRVJU
KHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKTsKKyAgICAgICAg
QVNTRVJUKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlcyA9IHRv
Q1NTVmFsdWVMaXN0KHZhbHVlKTsKLSAgICBBU1NFUlQodmFsdWVzLT5sZW5ndGgoKSk7CisgICAg
Q1NTVmFsdWVMaXN0JiB2YWx1ZXMgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7Cisg
ICAgQVNTRVJUKHZhbHVlcy5sZW5ndGgoKSk7CiAKICAgICBib29sIGlzU3BhblBvc2l0aW9uID0g
ZmFsc2U7CiAgICAgaW50IGdyaWRMaW5lTnVtYmVyID0gMDsKICAgICBTdHJpbmcgZ3JpZExpbmVO
YW1lOwogCi0gICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXQgPSB2YWx1ZXM7Ci0gICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIGN1cnJlbnRWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoaXQudmFsdWUo
KSk7CisgICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXQgPSAmdmFsdWVzOworICAgIENTU1ByaW1p
dGl2ZVZhbHVlKiBjdXJyZW50VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXQu
dmFsdWUoKSk7CiAgICAgaWYgKGN1cnJlbnRWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVl
U3BhbikgewogICAgICAgICBpc1NwYW5Qb3NpdGlvbiA9IHRydWU7CiAgICAgICAgIGl0LmFkdmFu
Y2UoKTsKLSAgICAgICAgY3VycmVudFZhbHVlID0gaXQuaGFzTW9yZSgpID8gdG9DU1NQcmltaXRp
dmVWYWx1ZShpdC52YWx1ZSgpKSA6IDA7CisgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGl0Lmhhc01v
cmUoKSA/IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdC52YWx1ZSgpKSA6IG51bGxwdHI7
CiAgICAgfQogCiAgICAgaWYgKGN1cnJlbnRWYWx1ZSAmJiBjdXJyZW50VmFsdWUtPmlzTnVtYmVy
KCkpIHsKICAgICAgICAgZ3JpZExpbmVOdW1iZXIgPSBjdXJyZW50VmFsdWUtPmdldEludFZhbHVl
KCk7CiAgICAgICAgIGl0LmFkdmFuY2UoKTsKLSAgICAgICAgY3VycmVudFZhbHVlID0gaXQuaGFz
TW9yZSgpID8gdG9DU1NQcmltaXRpdmVWYWx1ZShpdC52YWx1ZSgpKSA6IDA7CisgICAgICAgIGN1
cnJlbnRWYWx1ZSA9IGl0Lmhhc01vcmUoKSA/IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihp
dC52YWx1ZSgpKSA6IG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKGN1cnJlbnRWYWx1ZSAmJiBj
dXJyZW50VmFsdWUtPmlzU3RyaW5nKCkpIHsKQEAgLTIwNTUsNyArMjA1NSw3IEBAIExlbmd0aCBT
dHlsZVJlc29sdmVyOjpwYXJzZVNuYXBDb29yZGluYXRlKENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1
ZSkKIAogTGVuZ3RoIFN0eWxlUmVzb2x2ZXI6OnBhcnNlU25hcENvb3JkaW5hdGUoQ1NTVmFsdWVM
aXN0JiB2YWx1ZUxpc3QsIHVuc2lnbmVkIG9mZnNldCkKIHsKLSAgICByZXR1cm4gcGFyc2VTbmFw
Q29vcmRpbmF0ZSh0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZUxpc3QuaXRlbShvZmZzZXQpKSk7
CisgICAgcmV0dXJuIHBhcnNlU25hcENvb3JkaW5hdGUoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZUxpc3QuaXRlbShvZmZzZXQpKSk7CiB9CiAKIExlbmd0aFNpemUgU3R5bGVSZXNv
bHZlcjo6cGFyc2VTbmFwQ29vcmRpbmF0ZVBhaXIoQ1NTVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIHVu
c2lnbmVkIG9mZnNldCkKQEAgLTIwNjcsMTQgKzIwNjcsMTQgQEAgU2Nyb2xsU25hcFBvaW50cyBT
dHlsZVJlc29sdmVyOjpwYXJzZVNuYXBQb2ludHMoQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIFNj
cm9sbFNuYXBQb2ludHMgcG9pbnRzOwogCi0gICAgaWYgKHZhbHVlLmlzUHJpbWl0aXZlVmFsdWUo
KSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVF
bGVtZW50cykgeworICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpICYmIGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlRWxl
bWVudHMpIHsKICAgICAgICAgcG9pbnRzLnVzZXNFbGVtZW50cyA9IHRydWU7CiAgICAgICAgIHJl
dHVybiBwb2ludHM7CiAgICAgfQogCiAgICAgcG9pbnRzLmhhc1JlcGVhdCA9IGZhbHNlOwogICAg
IGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXQoJnZhbHVlKTsgaXQuaGFzTW9yZSgpOyBpdC5h
ZHZhbmNlKCkpIHsKLSAgICAgICAgYXV0byYgaXRlbVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSgqaXQudmFsdWUoKSk7CisgICAgICAgIGF1dG8mIGl0ZW1WYWx1ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqaXQudmFsdWUoKSk7CiAgICAgICAgIGlmIChhdXRvKiBsZW5ndGhSZXBl
YXQgPSBpdGVtVmFsdWUuZ2V0TGVuZ3RoUmVwZWF0VmFsdWUoKSkgewogICAgICAgICAgICAgaWYg
KGF1dG8qIGludGVydmFsID0gbGVuZ3RoUmVwZWF0LT5pbnRlcnZhbCgpKSB7CiAgICAgICAgICAg
ICAgICAgcG9pbnRzLnJlcGVhdE9mZnNldCA9IHBhcnNlU25hcENvb3JkaW5hdGUoKmludGVydmFs
KTsKQEAgLTIxMjcsNyArMjEyNyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpID8gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSkgOiAwOworICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IGlzPENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpID8gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSA6IG51bGxwdHI7CiAK
ICAgICAvLyBXaGF0IGZvbGxvd3MgaXMgYSBsaXN0IHRoYXQgbWFwcyB0aGUgQ1NTIHByb3BlcnRp
ZXMgaW50byB0aGVpciBjb3JyZXNwb25kaW5nIGZyb250LWVuZAogICAgIC8vIFJlbmRlclN0eWxl
IHZhbHVlcy4KQEAgLTIxNTAsNDggKzIxNTAsNDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBs
eVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAg
IGJvb2wgZGlkU2V0ID0gZmFsc2U7CiAgICAgICAgICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJh
dG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7CiAgICAgICAgICAgICAg
ICAgQ1NTVmFsdWUqIGl0ZW0gPSBpLnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZW0t
PmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdGVt
LT5pc0dyYWRpZW50VmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKCp0b0NTU0dyYWRpZW50
VmFsdWUoaXRlbSktPmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpKSwgZGlkU2V0KTsK
KyAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oKml0ZW0pKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChpczxDU1NHcmFkaWVudFZhbHVlPigqaXRlbSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2Vu
ZXJhdGVkSW1hZ2U6OmNyZWF0ZSgqZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1ZT4oKml0ZW0pLmdy
YWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpKSwgZGlkU2V0KTsKICAgICAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29u
dGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoKnRvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZShpdGVtKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlPigqaXRlbSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBk
aWRTZXQgPSB0cnVlOwogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQotICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoaXRlbS0+aXNJbWFnZVNldFZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJv
cGVydHlDb250ZW50LCB0b0NTU0ltYWdlU2V0VmFsdWUoaXRlbSkpLCBkaWRTZXQpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4oKml0ZW0pKSB7CisgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoc2V0T3JQZW5kaW5nRnJv
bVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgZG93bmNhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZT4oaXRl
bSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogI2VuZGlm
CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzSW1hZ2VW
YWx1ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQo
Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgdG9DU1NJbWFnZVZh
bHVlKGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1
ZT4oKml0ZW0pKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRl
bnQoY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5Q29udGVudCwgZG93bmNhc3Q8
Q1NTSW1hZ2VWYWx1ZT4oaXRlbSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRT
ZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoIWl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAg
ICAgICAgICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqaXRlbSkpCiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIGNvbnRlbnRWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoaXRlbSk7CisgICAgICAgICAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGNvbnRlbnRWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPigqaXRlbSk7CiAKLSAgICAgICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLT5p
c1N0cmluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRl
bnQoY29udGVudFZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpLmltcGwoKSwgZGlkU2V0KTsKKyAgICAg
ICAgICAgICAgICBpZiAoY29udGVudFZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChjb250ZW50VmFsdWUuZ2V0U3RyaW5nVmFs
dWUoKS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUtPmlzQXR0cigpKSB7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUuaXNBdHRyKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IENhbiBhIG5hbWVzcGFjZSBiZSBzcGVjaWZpZWQgZm9y
IGFuIGF0dHIoZm9vKT8KICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLnN0eWxlKCktPnN0
eWxlVHlwZSgpID09IE5PUFNFVURPKQogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0VW5pcXVlKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLnBhcmVudFN0eWxlKCktPnNldFVuaXF1ZSgpOwotICAgICAgICAg
ICAgICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0b20sIGNvbnRlbnRWYWx1ZS0+Z2V0
U3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKTsKKyAgICAgICAgICAgICAgICAgICAgUXVh
bGlmaWVkTmFtZSBhdHRyKG51bGxBdG9tLCBjb250ZW50VmFsdWUuZ2V0U3RyaW5nVmFsdWUoKS5p
bXBsKCksIG51bGxBdG9tKTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSA9IHN0YXRlLmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGF0dHIpOwogICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1w
dHlBdG9tIDogdmFsdWUuaW1wbCgpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRT
ZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAvLyBSZWdpc3RlciB0aGUgZmFjdCB0aGF0
IHRoZSBhdHRyaWJ1dGUgdmFsdWUgYWZmZWN0cyB0aGUgc3R5bGUuCiAgICAgICAgICAgICAgICAg
ICAgIG1fcnVsZVNldHMuZmVhdHVyZXMoKS5hdHRyaWJ1dGVDYW5vbmljYWxMb2NhbE5hbWVzSW5S
dWxlcy5hZGQoYXR0ci5sb2NhbE5hbWUoKS5pbXBsKCkpOwogICAgICAgICAgICAgICAgICAgICBt
X3J1bGVTZXRzLmZlYXR1cmVzKCkuYXR0cmlidXRlTG9jYWxOYW1lc0luUnVsZXMuYWRkKGF0dHIu
bG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnRW
YWx1ZS0+aXNDb3VudGVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQ291bnRlciogY291bnRl
clZhbHVlID0gY29udGVudFZhbHVlLT5nZXRDb3VudGVyVmFsdWUoKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS5pc0NvdW50ZXIoKSkgeworICAgICAgICAgICAgICAg
ICAgICBDb3VudGVyKiBjb3VudGVyVmFsdWUgPSBjb250ZW50VmFsdWUuZ2V0Q291bnRlclZhbHVl
KCk7CiAgICAgICAgICAgICAgICAgICAgIEVMaXN0U3R5bGVUeXBlIGxpc3RTdHlsZVR5cGUgPSBO
b25lTGlzdFN0eWxlOwogICAgICAgICAgICAgICAgICAgICBDU1NWYWx1ZUlEIGxpc3RTdHlsZUlk
ZW50ID0gY291bnRlclZhbHVlLT5saXN0U3R5bGVJZGVudCgpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAobGlzdFN0eWxlSWRlbnQgIT0gQ1NTVmFsdWVOb25lKQpAQCAtMjIwMCw3ICsyMjAwLDcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29u
dGVudChXVEY6Om1vdmUoY291bnRlciksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRp
ZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoIChjb250ZW50VmFsdWUtPmdldFZhbHVlSUQoKSkgeworICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGNvbnRlbnRWYWx1ZS5nZXRWYWx1ZUlEKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZU9wZW5RdW90ZToKICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldENvbnRlbnQoT1BFTl9RVU9URSwgZGlkU2V0KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CkBAIC0yMjU4LDIyICsyMjU4LDIwIEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzSW5p
dGlhbCkgewotICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UXVvdGVzKDApOworICAgICAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UXVvdGVzKG51bGxwdHIpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewotICAg
ICAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gdG9DU1NWYWx1ZUxpc3QodmFsdWUpOworICAg
ICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKSB7CisgICAgICAgICAgICBDU1NWYWx1
ZUxpc3QmIGxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CiAgICAgICAgICAg
ICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gcXVvdGVzOwotICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5sZW5ndGgoKTsgaSArPSAyKSB7Ci0gICAgICAg
ICAgICAgICAgQ1NTVmFsdWUqIGZpcnN0ID0gbGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhp
KTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGgoKTsgaSAr
PSAyKSB7CisgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGZpcnN0ID0gbGlzdC5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKGkpOwogICAgICAgICAgICAgICAgIC8vIGl0ZW0oKSByZXR1cm5zIG51bGwg
aWYgb3V0IG9mIGJvdW5kcyBzbyB0aGlzIGlzIHNhZmUuCi0gICAgICAgICAgICAgICAgQ1NTVmFs
dWUqIHNlY29uZCA9IGxpc3QtPml0ZW0oaSArIDEpOworICAgICAgICAgICAgICAgIENTU1ZhbHVl
KiBzZWNvbmQgPSBsaXN0Lml0ZW0oaSArIDEpOwogICAgICAgICAgICAgICAgIGlmICghc2Vjb25k
KQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihmaXJzdC0+aXNQcmltaXRpdmVWYWx1ZSgpKTsKLSAg
ICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzZWNvbmQtPmlz
UHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHN0YXJ0UXVvdGUgPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKGZpcnN0KS0+Z2V0U3RyaW5nVmFsdWUoKTsKLSAgICAgICAgICAg
ICAgICBTdHJpbmcgZW5kUXVvdGUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHNlY29uZCktPmdldFN0
cmluZ1ZhbHVlKCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHN0YXJ0UXVvdGUgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4oKmZpcnN0KS5nZXRTdHJpbmdWYWx1ZSgpOworICAgICAgICAg
ICAgICAgIFN0cmluZyBlbmRRdW90ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqc2Vj
b25kKS5nZXRTdHJpbmdWYWx1ZSgpOwogICAgICAgICAgICAgICAgIHF1b3Rlcy5hcHBlbmQoc3Rk
OjptYWtlX3BhaXIoc3RhcnRRdW90ZSwgZW5kUXVvdGUpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFF1b3RlcyhRdW90ZXNEYXRhOjpjcmVhdGUocXVvdGVz
KSk7CkBAIC0yMzE4LDI0ICsyMzE2LDI0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZUZy
b21TcGVjaWZpZWRTaXplKGZvbnREZXNjcmlwdGlvbi5zcGVjaWZpZWRTaXplKCksIGZvbnREZXNj
cmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSwgc3RhdGUuc3R5bGUo
KSwgZG9jdW1lbnQoKSkpOwogICAgICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250
RGVzY3JpcHRpb24pOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5p
c0ZvbnRWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBDU1NGb250VmFsdWUqIGZvbnQgPSB0b0NTU0Zv
bnRWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIWZvbnQtPnN0eWxlIHx8ICFmb250LT52
YXJpYW50IHx8ICFmb250LT53ZWlnaHQKLSAgICAgICAgICAgICAgICB8fCAhZm9udC0+c2l6ZSB8
fCAhZm9udC0+bGluZUhlaWdodCB8fCAhZm9udC0+ZmFtaWx5KQorICAgICAgICB9IGVsc2UgaWYg
KGlzPENTU0ZvbnRWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICAgICAgQ1NTRm9udFZhbHVlJiBm
b250ID0gZG93bmNhc3Q8Q1NTRm9udFZhbHVlPigqdmFsdWUpOworICAgICAgICAgICAgaWYgKCFm
b250LnN0eWxlIHx8ICFmb250LnZhcmlhbnQgfHwgIWZvbnQud2VpZ2h0CisgICAgICAgICAgICAg
ICAgfHwgIWZvbnQuc2l6ZSB8fCAhZm9udC5saW5lSGVpZ2h0IHx8ICFmb250LmZhbWlseSkKICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5Rm9udFN0eWxlLCBmb250LT5zdHlsZS5nZXQoKSk7Ci0gICAgICAgICAgICBhcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5Rm9udFZhcmlhbnQsIGZvbnQtPnZhcmlhbnQuZ2V0KCkpOwotICAgICAg
ICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGZvbnQtPndlaWdodC5n
ZXQoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlLCBm
b250LnN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlG
b250VmFyaWFudCwgZm9udC52YXJpYW50LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCBmb250LndlaWdodC5nZXQoKSk7CiAgICAgICAgICAg
ICAvLyBUaGUgcHJldmlvdXMgcHJvcGVydGllcyBjYW4gZGlydHkgb3VyIGZvbnQgYnV0IHRoZXkg
ZG9uJ3QgdHJ5IHRvIHJlYWQgdGhlIGZvbnQncwogICAgICAgICAgICAgLy8gcHJvcGVydGllcyBi
YWNrLCB3aGljaCBpcyBzYWZlLiBIb3dldmVyIGlmIGZvbnQtc2l6ZSBpcyB1c2luZyB0aGUgJ2V4
JyB1bml0LCBpdCB3aWxsCiAgICAgICAgICAgICAvLyBuZWVkIHF1ZXJ5IHRoZSBkaXJ0aWVkIGZv
bnQncyB4LWhlaWdodCB0byBnZXQgdGhlIGNvbXB1dGVkIHNpemUuIFRvIGJlIHNhZmUgaW4gdGhp
cwogICAgICAgICAgICAgLy8gY2FzZSwgbGV0J3MganVzdCB1cGRhdGUgdGhlIGZvbnQgbm93Lgog
ICAgICAgICAgICAgdXBkYXRlRm9udCgpOwotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUZvbnRTaXplLCBmb250LT5zaXplLmdldCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgZm9udC5zaXplLmdldCgpKTsKIAotICAgICAgICAg
ICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKGZvbnQtPmxpbmVIZWlnaHQuZ2V0KCkpOworICAg
ICAgICAgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKGZvbnQubGluZUhlaWdodC5nZXQoKSk7
CiAKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5LCBmb250
LT5mYW1pbHkuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZv
bnRGYW1pbHksIGZvbnQuZmFtaWx5LmdldCgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47
CiAKQEAgLTI0MDUsMTcgKzI0MDMsMTcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIAogICAgICAgICBmb3IgKENT
U1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7
CiAgICAgICAgICAgICBDU1NWYWx1ZSogY3VyclZhbHVlID0gaS52YWx1ZSgpOwotICAgICAgICAg
ICAgaWYgKCFjdXJyVmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKKyAgICAgICAgICAgIGlmICghaXM8
Q1NTU2hhZG93VmFsdWU+KCpjdXJyVmFsdWUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgQ1NTU2hhZG93VmFsdWUqIGl0ZW0gPSB0b0NTU1NoYWRvd1ZhbHVlKGN1cnJW
YWx1ZSk7Ci0gICAgICAgICAgICBpbnQgeCA9IGl0ZW0tPngtPmNvbXB1dGVMZW5ndGg8aW50Pihz
dGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwotICAgICAgICAgICAgaW50IHkgPSBp
dGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSgpKTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNv
bXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpIDogMDsK
LSAgICAgICAgICAgIGludCBzcHJlYWQgPSBpdGVtLT5zcHJlYWQgPyBpdGVtLT5zcHJlYWQtPmNv
bXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpIDogMDsK
LSAgICAgICAgICAgIFNoYWRvd1N0eWxlIHNoYWRvd1N0eWxlID0gaXRlbS0+c3R5bGUgJiYgaXRl
bS0+c3R5bGUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUluc2V0ID8gSW5zZXQgOiBOb3JtYWw7
CisgICAgICAgICAgICBDU1NTaGFkb3dWYWx1ZSYgaXRlbSA9IGRvd25jYXN0PENTU1NoYWRvd1Zh
bHVlPigqY3VyclZhbHVlKTsKKyAgICAgICAgICAgIGludCB4ID0gaXRlbS54LT5jb21wdXRlTGVu
Z3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKKyAgICAgICAgICAg
IGludCB5ID0gaXRlbS55LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSgpKTsKKyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS5ibHVyID8gaXRlbS5i
bHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgp
KSA6IDA7CisgICAgICAgICAgICBpbnQgc3ByZWFkID0gaXRlbS5zcHJlYWQgPyBpdGVtLnNwcmVh
ZC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSkg
OiAwOworICAgICAgICAgICAgU2hhZG93U3R5bGUgc2hhZG93U3R5bGUgPSBpdGVtLnN0eWxlICYm
IGl0ZW0uc3R5bGUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUluc2V0ID8gSW5zZXQgOiBOb3Jt
YWw7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKLSAgICAgICAgICAgIGlmIChpdGVtLT5jb2xv
cikKLSAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGl0ZW0t
PmNvbG9yLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChpdGVtLmNvbG9yKQorICAgICAgICAgICAg
ICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS5jb2xvci5nZXQoKSk7CiAg
ICAgICAgICAgICBlbHNlIGlmIChzdGF0ZS5zdHlsZSgpKQogICAgICAgICAgICAgICAgIGNvbG9y
ID0gc3RhdGUuc3R5bGUoKS0+Y29sb3IoKTsKIApAQCAtMjQzNCwxNyArMjQzMiwxNyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCF2
YWx1ZS0+aXNSZWZsZWN0VmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NSZWZsZWN0VmFsdWU+
KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQ1NTUmVmbGVjdFZhbHVl
KiByZWZsZWN0VmFsdWUgPSB0b0NTU1JlZmxlY3RWYWx1ZSh2YWx1ZSk7CisgICAgICAgIENTU1Jl
ZmxlY3RWYWx1ZSYgcmVmbGVjdFZhbHVlID0gZG93bmNhc3Q8Q1NTUmVmbGVjdFZhbHVlPigqdmFs
dWUpOwogICAgICAgICBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiByZWZsZWN0aW9uID0gU3R5bGVS
ZWZsZWN0aW9uOjpjcmVhdGUoKTsKLSAgICAgICAgcmVmbGVjdGlvbi0+c2V0RGlyZWN0aW9uKCpy
ZWZsZWN0VmFsdWUtPmRpcmVjdGlvbigpKTsKLSAgICAgICAgaWYgKHJlZmxlY3RWYWx1ZS0+b2Zm
c2V0KCkpCi0gICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVjdFZhbHVlLT5v
ZmZzZXQoKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50
Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdGF0ZS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCkpKTsKKyAgICAgICAgcmVmbGVjdGlvbi0+c2V0RGlyZWN0aW9uKCpyZWZsZWN0
VmFsdWUuZGlyZWN0aW9uKCkpOworICAgICAgICBpZiAocmVmbGVjdFZhbHVlLm9mZnNldCgpKQor
ICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RWYWx1ZS5vZmZzZXQoKS0+
Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lv
biB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRh
KCkpKTsKICAgICAgICAgTmluZVBpZWNlSW1hZ2UgbWFzazsKICAgICAgICAgbWFzay5zZXRNYXNr
RGVmYXVsdHMoKTsKLSAgICAgICAgbV9zdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZShpZCwgcmVm
bGVjdFZhbHVlLT5tYXNrKCksIG1hc2spOworICAgICAgICBtX3N0eWxlTWFwLm1hcE5pbmVQaWVj
ZUltYWdlKGlkLCByZWZsZWN0VmFsdWUubWFzaygpLCBtYXNrKTsKICAgICAgICAgcmVmbGVjdGlv
bi0+c2V0TWFzayhtYXNrKTsKIAogICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRCb3hSZWZsZWN0
KHJlZmxlY3Rpb24ucmVsZWFzZSgpKTsKQEAgLTI2NjUsMTAgKzI2NjMsMTAgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghdmFsdWUt
PmlzTGluZUJveENvbnRhaW5WYWx1ZSgpKQorICAgICAgICBpZiAoIWlzPENTU0xpbmVCb3hDb250
YWluVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0TGluZUJveENvbnRhaW4odG9DU1NMaW5lQm94Q29udGFpblZhbHVlKHZhbHVl
KS0+dmFsdWUoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVCb3hDb250YWluKGRv
d25jYXN0PENTU0xpbmVCb3hDb250YWluVmFsdWU+KCp2YWx1ZSkudmFsdWUoKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTI2NzksMTkgKzI2NzcsMTkgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghdmFsdWUtPmlzVmFs
dWVMaXN0KCkpCisgICAgICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24g
PSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgQ1NTVmFsdWVMaXN0
KiBsaXN0ID0gdG9DU1NWYWx1ZUxpc3QodmFsdWUpOworICAgICAgICBDU1NWYWx1ZUxpc3QmIGxp
c3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSk7CiAgICAgICAgIFJlZlB0cjxGb250
RmVhdHVyZVNldHRpbmdzPiBzZXR0aW5ncyA9IEZvbnRGZWF0dXJlU2V0dGluZ3M6OmNyZWF0ZSgp
OwotICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7Ci0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlKiBpdGVtID0gbGlzdC0+
aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKLSAgICAgICAgICAgIGlmICghaXRlbS0+aXNGb250
RmVhdHVyZVZhbHVlKCkpCisgICAgICAgIGludCBsZW5ndGggPSBsaXN0Lmxlbmd0aCgpOworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBDU1NW
YWx1ZSogaXRlbSA9IGxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKTsKKyAgICAgICAgICAg
IGlmICghaXM8Q1NTRm9udEZlYXR1cmVWYWx1ZT4oKml0ZW0pKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgQ1NTRm9udEZlYXR1cmVWYWx1ZSogZmVhdHVyZSA9IHRvQ1NT
Rm9udEZlYXR1cmVWYWx1ZShpdGVtKTsKLSAgICAgICAgICAgIHNldHRpbmdzLT5hcHBlbmQoRm9u
dEZlYXR1cmUoZmVhdHVyZS0+dGFnKCksIGZlYXR1cmUtPnZhbHVlKCkpKTsKKyAgICAgICAgICAg
IENTU0ZvbnRGZWF0dXJlVmFsdWUmIGZlYXR1cmUgPSBkb3duY2FzdDxDU1NGb250RmVhdHVyZVZh
bHVlPigqaXRlbSk7CisgICAgICAgICAgICBzZXR0aW5ncy0+YXBwZW5kKEZvbnRGZWF0dXJlKGZl
YXR1cmUudGFnKCksIGZlYXR1cmUudmFsdWUoKSkpOwogICAgICAgICB9CiAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRGZWF0dXJlU2V0dGluZ3Moc2V0dGluZ3MucmVsZWFzZSgpKTsKICAgICAg
ICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CkBAIC0yODMwLDggKzI4Mjgs
OCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAg
ICAgQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSogZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSA9IHRv
Q1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGNvbnN0IE5hbWVkR3Jp
ZEFyZWFNYXAmIG5ld05hbWVkR3JpZEFyZWFzID0gZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS0+Z3Jp
ZEFyZWFNYXAoKTsKKyAgICAgICAgQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSYgZ3JpZFRlbXBs
YXRlQXJlYXNWYWx1ZSA9IGRvd25jYXN0PENTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWU+KCp2YWx1
ZSk7CisgICAgICAgIGNvbnN0IE5hbWVkR3JpZEFyZWFNYXAmIG5ld05hbWVkR3JpZEFyZWFzID0g
Z3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5ncmlkQXJlYU1hcCgpOwogCiAgICAgICAgIE5hbWVkR3Jp
ZExpbmVzTWFwIG5hbWVkR3JpZENvbHVtbkxpbmVzID0gc3RhdGUuc3R5bGUoKS0+bmFtZWRHcmlk
Q29sdW1uTGluZXMoKTsKICAgICAgICAgTmFtZWRHcmlkTGluZXNNYXAgbmFtZWRHcmlkUm93TGlu
ZXMgPSBzdGF0ZS5zdHlsZSgpLT5uYW1lZEdyaWRSb3dMaW5lcygpOwpAQCAtMjg0MCwyNyArMjgz
OCwyNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBp
ZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXROYW1lZEdyaWRD
b2x1bW5MaW5lcyhuYW1lZEdyaWRDb2x1bW5MaW5lcyk7CiAgICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldE5hbWVkR3JpZFJvd0xpbmVzKG5hbWVkR3JpZFJvd0xpbmVzKTsKIAotICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhKGdyaWRUZW1wbGF0ZUFyZWFzVmFsdWUtPmdyaWRB
cmVhTWFwKCkpOwotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhUm93Q291
bnQoZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS0+cm93Q291bnQoKSk7Ci0gICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldE5hbWVkR3JpZEFyZWFDb2x1bW5Db3VudChncmlkVGVtcGxhdGVBcmVhc1ZhbHVl
LT5jb2x1bW5Db3VudCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQXJl
YShncmlkVGVtcGxhdGVBcmVhc1ZhbHVlLmdyaWRBcmVhTWFwKCkpOworICAgICAgICBzdGF0ZS5z
dHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhUm93Q291bnQoZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5y
b3dDb3VudCgpKTsKKyAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQXJlYUNvbHVt
bkNvdW50KGdyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuY29sdW1uQ291bnQoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdyaWRBdXRvRmxvdzogewog
ICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChncmlkQXV0b0Zsb3csIEdyaWRBdXRv
Rmxvdyk7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgIGlmICgh
aXM8Q1NTVmFsdWVMaXN0PigqdmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBD
U1NWYWx1ZUxpc3QqIGxpc3QgPSB0b0NTU1ZhbHVlTGlzdCh2YWx1ZSk7CisgICAgICAgIENTU1Zh
bHVlTGlzdCYgbGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKIAotICAgICAg
ICBpZiAoIWxpc3QtPmxlbmd0aCgpKSB7CisgICAgICAgIGlmICghbGlzdC5sZW5ndGgoKSkgewog
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0R3JpZEF1dG9GbG93KFJlbmRlclN0eWxlOjpp
bml0aWFsR3JpZEF1dG9GbG93KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
LSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0ID0gdG9DU1NQcmltaXRpdmVWYWx1ZShs
aXN0LT5pdGVtKDApKTsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZCA9IGxpc3Qt
Pmxlbmd0aCgpID09IDIgPyB0b0NTU1ByaW1pdGl2ZVZhbHVlKGxpc3QtPml0ZW0oMSkpIDogbnVs
bHB0cjsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGZpcnN0ID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCpsaXN0Lml0ZW0oMCkpOworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
c2Vjb25kID0gbGlzdC5sZW5ndGgoKSA9PSAyID8gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KGxpc3QuaXRlbSgxKSkgOiBudWxscHRyOwogCiAgICAgICAgIEdyaWRBdXRvRmxvdyBhdXRvRmxv
dyA9IFJlbmRlclN0eWxlOjppbml0aWFsR3JpZEF1dG9GbG93KCk7Ci0gICAgICAgIHN3aXRjaCAo
Zmlyc3QtPmdldFZhbHVlSUQoKSkgeworICAgICAgICBzd2l0Y2ggKGZpcnN0LmdldFZhbHVlSUQo
KSkgewogICAgICAgICBjYXNlIENTU1ZhbHVlUm93OgogICAgICAgICAgICAgaWYgKHNlY29uZCkK
ICAgICAgICAgICAgICAgICBhdXRvRmxvdyA9IHNlY29uZC0+Z2V0VmFsdWVJRCgpID09IENTU1Zh
bHVlRGVuc2UgPyBBdXRvRmxvd1Jvd0RlbnNlIDogQXV0b0Zsb3dTdGFja1JvdzsKQEAgLTI5MDcs
MTIgKzI5MDUsMTIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFNjcm9sbFNuYXBEZXN0aW5hdGlvbjogewogICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChzY3JvbGxTbmFwRGVzdGluYXRpb24sIFNjcm9sbFNuYXBEZXN0aW5h
dGlvbikKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0U2Nyb2xsU25hcERlc3RpbmF0aW9uKHBh
cnNlU25hcENvb3JkaW5hdGVQYWlyKHRvQ1NTVmFsdWVMaXN0KCp2YWx1ZSksIDApKTsKKyAgICAg
ICAgc3RhdGUuc3R5bGUoKS0+c2V0U2Nyb2xsU25hcERlc3RpbmF0aW9uKHBhcnNlU25hcENvb3Jk
aW5hdGVQYWlyKGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKSwgMCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRTY3JvbGxTbmFwQ29vcmRp
bmF0ZTogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChzY3JvbGxTbmFwQ29v
cmRpbmF0ZXMsIFNjcm9sbFNuYXBDb29yZGluYXRlcykKLSAgICAgICAgQ1NTVmFsdWVMaXN0JiB2
YWx1ZUxpc3QgPSB0b0NTU1ZhbHVlTGlzdCgqdmFsdWUpOworICAgICAgICBDU1NWYWx1ZUxpc3Qm
IHZhbHVlTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnZhbHVlKTsKICAgICAgICAgQVNT
RVJUKCEodmFsdWVMaXN0Lmxlbmd0aCgpICUgMikpOwogICAgICAgICBzaXplX3QgcG9pbnRDb3Vu
dCA9IHZhbHVlTGlzdC5sZW5ndGgoKSAvIDI7CiAgICAgICAgIFZlY3RvcjxMZW5ndGhTaXplPiBj
b29yZGluYXRlczsKQEAgLTMyMjAsMjQgKzMyMTgsMjQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKIAogUGFzc1Jl
ZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSkKIHsKLSAgICBpZiAodmFsdWUtPmlzSW1hZ2VWYWx1
ZSgpKQotICAgICAgICByZXR1cm4gY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCB0
b0NTU0ltYWdlVmFsdWUodmFsdWUpKTsKKyAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oKnZhbHVl
KSkKKyAgICAgICAgcmV0dXJuIGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgZG93
bmNhc3Q8Q1NTSW1hZ2VWYWx1ZT4odmFsdWUpKTsKIAotICAgIGlmICh2YWx1ZS0+aXNJbWFnZUdl
bmVyYXRvclZhbHVlKCkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT5pc0dyYWRpZW50VmFsdWUoKSkK
LSAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHks
ICp0b0NTU0dyYWRpZW50VmFsdWUodmFsdWUpLT5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCh0
aGlzKSk7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVy
dHksIHRvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSgqdmFsdWUpKTsKKyAgICBpZiAoaXM8Q1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZT4oKnZhbHVlKSkgeworICAgICAgICBpZiAoaXM8Q1NTR3JhZGllbnRW
YWx1ZT4oKnZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9t
VmFsdWUocHJvcGVydHksICpkb3duY2FzdDxDU1NHcmFkaWVudFZhbHVlPigqdmFsdWUpLmdyYWRp
ZW50V2l0aFN0eWxlc1Jlc29sdmVkKHRoaXMpKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9y
UGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZT4oKnZhbHVlKSk7CiAgICAgfQogCiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAgaWYg
KHZhbHVlLT5pc0ltYWdlU2V0VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIHNldE9yUGVuZGluZ0Zy
b21WYWx1ZShwcm9wZXJ0eSwgdG9DU1NJbWFnZVNldFZhbHVlKHZhbHVlKSk7CisgICAgaWYgKGlz
PENTU0ltYWdlU2V0VmFsdWU+KCp2YWx1ZSkpCisgICAgICAgIHJldHVybiBzZXRPclBlbmRpbmdG
cm9tVmFsdWUocHJvcGVydHksIGRvd25jYXN0PENTU0ltYWdlU2V0VmFsdWU+KHZhbHVlKSk7CiAj
ZW5kaWYKIAotICAgIGlmICh2YWx1ZS0+aXNDdXJzb3JJbWFnZVZhbHVlKCkpCi0gICAgICAgIHJl
dHVybiBjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHRvQ1NTQ3Vyc29ySW1hZ2VW
YWx1ZSh2YWx1ZSkpOworICAgIGlmIChpczxDU1NDdXJzb3JJbWFnZVZhbHVlPigqdmFsdWUpKQor
ICAgICAgICByZXR1cm4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBkb3duY2Fz
dDxDU1NDdXJzb3JJbWFnZVZhbHVlPih2YWx1ZSkpOwogCi0gICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6
Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdl
VmFsdWUqIHZhbHVlKQpAQCAtMzI1MCw5ICszMjQ4LDkgQEAgUGFzc1JlZlB0cjxTdHlsZUltYWdl
PiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBw
cm8KIAogUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBl
bmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKHZhbHVlLmlzRmlsdGVySW1hZ2VWYWx1ZSgpKSB7Cisg
ICAgaWYgKGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICAvLyBGaWx0
ZXJJbWFnZSBuZWVkcyB0byBjYWxjdWxhdGUgRmlsdGVyT3BlcmF0aW9ucy4KLSAgICAgICAgdG9D
U1NGaWx0ZXJJbWFnZVZhbHVlKHZhbHVlKS5jcmVhdGVGaWx0ZXJPcGVyYXRpb25zKHRoaXMpOwor
ICAgICAgICBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPih2YWx1ZSkuY3JlYXRlRmlsdGVy
T3BlcmF0aW9ucyh0aGlzKTsKICAgICB9CiAKICAgICBpZiAodmFsdWUuaXNQZW5kaW5nKCkpIHsK
QEAgLTM1MTcsOSArMzUxNSw5IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3Bl
cmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgRmlsdGVyT3BlcmF0aW9ucyYKICAgICBpZiAoIWlu
VmFsdWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoaW5WYWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUoaW5WYWx1ZSk7Ci0gICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKKyAgICBpZiAoaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KCppblZhbHVlKSkgeworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmluVmFsdWUpOworICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTM1MjksMjEgKzM1MjcsMjEg
QEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBp
blZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJgogICAgIEZpbHRlck9wZXJhdGlvbnMgb3BlcmF0aW9u
czsKICAgICBmb3IgKENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSBpblZhbHVlOyBpLmhhc01vcmUo
KTsgaS5hZHZhbmNlKCkpIHsKICAgICAgICAgQ1NTVmFsdWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUo
KTsKLSAgICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzV2ViS2l0Q1NTRmlsdGVyVmFsdWUoKSkKKyAg
ICAgICAgaWYgKCFpczxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4oKmN1cnJWYWx1ZSkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICBXZWJLaXRDU1NGaWx0ZXJWYWx1ZSogZmlsdGVyVmFs
dWUgPSB0b1dlYktpdENTU0ZpbHRlclZhbHVlKGkudmFsdWUoKSk7Ci0gICAgICAgIEZpbHRlck9w
ZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBlID0gZmlsdGVyT3BlcmF0aW9uRm9y
VHlwZShmaWx0ZXJWYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKTsKKyAgICAgICAgV2ViS2l0Q1NTRmls
dGVyVmFsdWUmIGZpbHRlclZhbHVlID0gZG93bmNhc3Q8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+KCpp
LnZhbHVlKCkpOworICAgICAgICBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgb3BlcmF0
aW9uVHlwZSA9IGZpbHRlck9wZXJhdGlvbkZvclR5cGUoZmlsdGVyVmFsdWUub3BlcmF0aW9uVHlw
ZSgpKTsKIAogICAgICAgICBpZiAob3BlcmF0aW9uVHlwZSA9PSBGaWx0ZXJPcGVyYXRpb246OlJF
RkVSRU5DRSkgewotICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSAhPSAxKQor
ICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLmxlbmd0aCgpICE9IDEpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogYXJndW1lbnQgPSBmaWx0ZXJWYWx1
ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKTsKKyAgICAgICAgICAgIENTU1ZhbHVlJiBhcmd1
bWVudCA9ICpmaWx0ZXJWYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApOwogCi0gICAgICAg
ICAgICBpZiAoIWFyZ3VtZW50LT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgICAgICBpZiAo
IWlzPENTU1ByaW1pdGl2ZVZhbHVlPihhcmd1bWVudCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUoKmFyZ3VtZW50KTsKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihhcmd1bWVu
dCk7CiAgICAgICAgICAgICBTdHJpbmcgY3NzVXJsID0gcHJpbWl0aXZlVmFsdWUuZ2V0U3RyaW5n
VmFsdWUoKTsKICAgICAgICAgICAgIFVSTCB1cmwgPSBtX3N0YXRlLmRvY3VtZW50KCkuY29tcGxl
dGVVUkwoY3NzVXJsKTsKIApAQCAtMzU2MCwyNCArMzU1OCwyNCBAQCBib29sIFN0eWxlUmVzb2x2
ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIEZpbHRlck9wZXJh
dGlvbnMmCiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdFZhbHVlID0gbnVsbHB0cjsK
ICAgICAgICAgaWYgKG9wZXJhdGlvblR5cGUgIT0gRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURP
VykgewogICAgICAgICAgICAgYm9vbCBoYXZlTm9uUHJpbWl0aXZlVmFsdWUgPSBmYWxzZTsKLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBmaWx0ZXJWYWx1ZS0+bGVuZ3RoKCk7
ICsraikgewotICAgICAgICAgICAgICAgIGlmICghZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soaiktPmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IGZpbHRlclZhbHVlLmxlbmd0aCgpOyArK2opIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqZmlsdGVyVmFsdWUuaXRlbVdpdGhvdXRC
b3VuZHNDaGVjayhqKSkpIHsKICAgICAgICAgICAgICAgICAgICAgaGF2ZU5vblByaW1pdGl2ZVZh
bHVlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGhhdmVOb25QcmltaXRpdmVWYWx1ZSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS0+
bGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgZmlyc3RWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFs
dWUoZmlsdGVyVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOworICAgICAgICAgICAg
aWYgKGZpbHRlclZhbHVlLmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIGZpcnN0VmFsdWUgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oZmlsdGVyVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHND
aGVjaygwKSk7CiAgICAgICAgIH0KIAotICAgICAgICBzd2l0Y2ggKGZpbHRlclZhbHVlLT5vcGVy
YXRpb25UeXBlKCkpIHsKKyAgICAgICAgc3dpdGNoIChmaWx0ZXJWYWx1ZS5vcGVyYXRpb25UeXBl
KCkpIHsKICAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6R3JheXNjYWxlRmlsdGVy
T3BlcmF0aW9uOgogICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpTZXBpYUZpbHRl
ck9wZXJhdGlvbjoKICAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6U2F0dXJhdGVG
aWx0ZXJPcGVyYXRpb246IHsKICAgICAgICAgICAgIGRvdWJsZSBhbW91bnQgPSAxOwotICAgICAg
ICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA9PSAxKSB7CisgICAgICAgICAgICBpZiAo
ZmlsdGVyVmFsdWUubGVuZ3RoKCkgPT0gMSkgewogICAgICAgICAgICAgICAgIGFtb3VudCA9IGZp
cnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CiAgICAgICAgICAgICAgICAgaWYgKGZpcnN0VmFs
dWUtPmlzUGVyY2VudGFnZSgpKQogICAgICAgICAgICAgICAgICAgICBhbW91bnQgLz0gMTAwOwpA
QCAtMzU4OCw3ICszNTg2LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVy
YXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJgogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Okh1ZVJvdGF0ZUZpbHRlck9wZXJhdGlv
bjogewogICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gMDsKLSAgICAgICAgICAgIGlmIChmaWx0
ZXJWYWx1ZS0+bGVuZ3RoKCkgPT0gMSkKKyAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5sZW5n
dGgoKSA9PSAxKQogICAgICAgICAgICAgICAgIGFuZ2xlID0gZmlyc3RWYWx1ZS0+Y29tcHV0ZURl
Z3JlZXMoKTsKIAogICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKEJh
c2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZShhbmdsZSwgb3BlcmF0aW9uVHlw
ZSkpOwpAQCAtMzU5OCw4ICszNTk2LDggQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0
ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJgogICAgICAg
ICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpCcmlnaHRuZXNzRmlsdGVyT3BlcmF0aW9uOgog
ICAgICAgICBjYXNlIFdlYktpdENTU0ZpbHRlclZhbHVlOjpDb250cmFzdEZpbHRlck9wZXJhdGlv
bjoKICAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6T3BhY2l0eUZpbHRlck9wZXJh
dGlvbjogewotICAgICAgICAgICAgZG91YmxlIGFtb3VudCA9IChmaWx0ZXJWYWx1ZS0+b3BlcmF0
aW9uVHlwZSgpID09IFdlYktpdENTU0ZpbHRlclZhbHVlOjpCcmlnaHRuZXNzRmlsdGVyT3BlcmF0
aW9uKSA/IDAgOiAxOwotICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA9PSAx
KSB7CisgICAgICAgICAgICBkb3VibGUgYW1vdW50ID0gKGZpbHRlclZhbHVlLm9wZXJhdGlvblR5
cGUoKSA9PSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6QnJpZ2h0bmVzc0ZpbHRlck9wZXJhdGlvbikg
PyAwIDogMTsKKyAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5sZW5ndGgoKSA9PSAxKSB7CiAg
ICAgICAgICAgICAgICAgYW1vdW50ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKICAg
ICAgICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCiAgICAgICAgICAg
ICAgICAgICAgIGFtb3VudCAvPSAxMDA7CkBAIC0zNjEwLDcgKzM2MDgsNyBAQCBib29sIFN0eWxl
UmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIEZpbHRl
ck9wZXJhdGlvbnMmCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZTo6Qmx1ckZpbHRlck9wZXJhdGlvbjogewogICAgICAgICAgICAgTGVuZ3RoIHN0ZERldmlhdGlv
biA9IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUtPmxlbmd0
aCgpID49IDEpCisgICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUubGVuZ3RoKCkgPj0gMSkKICAg
ICAgICAgICAgICAgICBzdGREZXZpYXRpb24gPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZh
bHVlLCBzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwogICAgICAgICAgICAgaWYg
KHN0ZERldmlhdGlvbi5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTM2MTksMjEgKzM2MTcsMjEgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0
ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZTo6RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjogewotICAgICAgICAgICAgaWYgKGZpbHRlclZh
bHVlLT5sZW5ndGgoKSAhPSAxKQorICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlLmxlbmd0aCgp
ICE9IDEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBDU1NW
YWx1ZSogY3NzVmFsdWUgPSBmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKTsK
LSAgICAgICAgICAgIGlmICghY3NzVmFsdWUtPmlzU2hhZG93VmFsdWUoKSkKKyAgICAgICAgICAg
IENTU1ZhbHVlJiBjc3NWYWx1ZSA9ICpmaWx0ZXJWYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDApOworICAgICAgICAgICAgaWYgKCFpczxDU1NTaGFkb3dWYWx1ZT4oY3NzVmFsdWUpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBDU1NTaGFkb3dWYWx1ZSogaXRl
bSA9IHRvQ1NTU2hhZG93VmFsdWUoY3NzVmFsdWUpOwotICAgICAgICAgICAgaW50IHggPSBpdGVt
LT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgp
KTsKLSAgICAgICAgICAgIGludCB5ID0gaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRl
LmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CisgICAgICAgICAgICBDU1NTaGFkb3dWYWx1
ZSYgaXRlbSA9IGRvd25jYXN0PENTU1NoYWRvd1ZhbHVlPihjc3NWYWx1ZSk7CisgICAgICAgICAg
ICBpbnQgeCA9IGl0ZW0ueC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEoKSk7CisgICAgICAgICAgICBpbnQgeSA9IGl0ZW0ueS0+Y29tcHV0ZUxlbmd0
aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CiAgICAgICAgICAgICBJ
bnRQb2ludCBsb2NhdGlvbih4LCB5KTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1
ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCkpIDogMDsKKyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS5ibHVyID8gaXRl
bS5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSgpKSA6IDA7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKLSAgICAgICAgICAgIGlmIChpdGVt
LT5jb2xvcikKLSAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
KGl0ZW0tPmNvbG9yLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChpdGVtLmNvbG9yKQorICAgICAg
ICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS5jb2xvci5nZXQo
KSk7CiAKICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChEcm9wU2hh
ZG93RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUobG9jYXRpb24sIGJsdXIsIGNvbG9yLmlzVmFsaWQo
KSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFyZW50KSk7CiAgICAgICAgICAgICBicmVhazsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9UcmFuc2Zvcm1GdW5jdGlvbnMuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL1RyYW5zZm9ybUZ1bmN0aW9ucy5jcHAKaW5kZXggMDY2M2MzMTE5NTgx
MjdlMjg4OGE3ZDkwNDI2NTNlOWIxYWFhZWFlYy4uNjY4YjE0ODliYmViMWM0ODc5ZTRhYjIyOTI0
ZWQ3ZDY1ODYwYjU2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1RyYW5zZm9ybUZ1
bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1RyYW5zZm9ybUZ1bmN0aW9ucy5j
cHAKQEAgLTkwLDE4ICs5MCwxOCBAQCBib29sIHRyYW5zZm9ybXNGb3JWYWx1ZShDU1NWYWx1ZSog
dmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcgogCiAgICAgVHJh
bnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwogICAgIGZvciAoQ1NTVmFsdWVMaXN0SXRlcmF0
b3IgaSA9IHZhbHVlOyBpLmhhc01vcmUoKTsgaS5hZHZhbmNlKCkpIHsKLSAgICAgICAgQ1NTVmFs
dWUqIGN1cnJWYWx1ZSA9IGkudmFsdWUoKTsKKyAgICAgICAgQ1NTVmFsdWUmIGN1cnJWYWx1ZSA9
ICppLnZhbHVlKCk7CiAKLSAgICAgICAgaWYgKCFjdXJyVmFsdWUtPmlzV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZT4oY3Vy
clZhbHVlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlKiB0cmFuc2Zvcm1WYWx1ZSA9IHRvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoaS52
YWx1ZSgpKTsKLSAgICAgICAgaWYgKCF0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkpCisgICAgICAg
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlJiB0cmFuc2Zvcm1WYWx1ZSA9IGRvd25jYXN0PFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlPihjdXJyVmFsdWUpOworICAgICAgICBpZiAoIXRyYW5zZm9ybVZh
bHVlLmxlbmd0aCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgYm9vbCBoYXZl
Tm9uUHJpbWl0aXZlVmFsdWUgPSBmYWxzZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsg
aiA8IHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKTsgKytqKSB7Ci0gICAgICAgICAgICBpZiAoIXRy
YW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGopLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHRyYW5zZm9ybVZhbHVlLmxl
bmd0aCgpOyArK2opIHsKKyAgICAgICAgICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0
cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGopKSkgewogICAgICAgICAgICAg
ICAgIGhhdmVOb25QcmltaXRpdmVWYWx1ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CkBAIC0xMDksMjcgKzEwOSwyNyBAQCBib29sIHRyYW5zZm9ybXNGb3JW
YWx1ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNv
bnZlcgogICAgICAgICBpZiAoaGF2ZU5vblByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0VmFsdWUgPSB0b0NTU1By
aW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsK
KyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIGZpcnN0VmFsdWUgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOwog
Ci0gICAgICAgIHN3aXRjaCAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkgeworICAg
ICAgICBzd2l0Y2ggKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSkgewogICAgICAgICBj
YXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjoKICAg
ICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0
aW9uOgogICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zv
cm1PcGVyYXRpb246IHsKICAgICAgICAgICAgIGRvdWJsZSBzeCA9IDEuMDsKICAgICAgICAgICAg
IGRvdWJsZSBzeSA9IDEuMDsKLSAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0
aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVy
YXRpb24pCi0gICAgICAgICAgICAgICAgc3kgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgp
OworICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSA9PSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAg
ICAgICAgIHN5ID0gZmlyc3RWYWx1ZS5nZXREb3VibGVWYWx1ZSgpOwogICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgc3ggPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwot
ICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpICE9IFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHRvQ1NT
UHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91YmxlVmFs
dWUoKTsKKyAgICAgICAgICAgICAgICBzeCA9IGZpcnN0VmFsdWUuZ2V0RG91YmxlVmFsdWUoKTsK
KyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9uVHlwZSgpICE9IFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLmxlbmd0aCgpID4gMSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHNlY29uZFZhbHVlID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc2Vjb25kVmFsdWUuZ2V0RG91
YmxlVmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgICAgICBzeSA9IHN4OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTY2FsZVRyYW5zZm9ybU9wZXJh
dGlvbjo6Y3JlYXRlKHN4LCBzeSwgMS4wLCB0cmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9y
bVZhbHVlLT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJh
dGlvbnMoKS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShzeCwgc3ksIDEu
MCwgdHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpTY2FsZVpUcmFuc2Zvcm1PcGVyYXRpb246CkBAIC0xMzcsMjUgKzEz
NywyNSBAQCBib29sIHRyYW5zZm9ybXNGb3JWYWx1ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcgogICAgICAgICAgICAgZG91YmxlIHN4ID0g
MS4wOwogICAgICAgICAgICAgZG91YmxlIHN5ID0gMS4wOwogICAgICAgICAgICAgZG91YmxlIHN6
ID0gMS4wOwotICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25UeXBlKCkg
PT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWlRyYW5zZm9ybU9wZXJhdGlvbikKLSAg
ICAgICAgICAgICAgICBzeiA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAg
ICAgICBlbHNlIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRpb24pCi0gICAgICAgICAgICAg
ICAgc3kgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgaWYgKHRy
YW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
U2NhbGVaVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIHN6ID0gZmlyc3RWYWx1
ZS5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUu
b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zv
cm1PcGVyYXRpb24pCisgICAgICAgICAgICAgICAgc3kgPSBmaXJzdFZhbHVlLmdldERvdWJsZVZh
bHVlKCk7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzeCA9IGZpcnN0VmFs
dWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVl
LT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWFRyYW5z
Zm9ybU9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUt
Pmxlbmd0aCgpID4gMikgewotICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHRoaXJkVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN6ID0gdGhp
cmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBzeCA9IGZpcnN0VmFs
dWUuZ2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUu
b3BlcmF0aW9uVHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zv
cm1PcGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLmxl
bmd0aCgpID4gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUm
IHRoaXJkVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVl
Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpOworICAgICAgICAgICAgICAgICAgICAgICAgc3og
PSB0aGlyZFZhbHVlLmdldERvdWJsZVZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91Ymxl
VmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLmxlbmd0aCgp
ID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHNlY29u
ZFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc2Vj
b25kVmFsdWUuZ2V0RG91YmxlVmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgICAgICBzeSA9IHN4OwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTY2Fs
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHN4LCBzeSwgc3osIHRyYW5zZm9ybU9wZXJhdGlv
blR5cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAgICAgICAgICAgIG9w
ZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3Jl
YXRlKHN4LCBzeSwgc3osIHRyYW5zZm9ybU9wZXJhdGlvblR5cGUodHJhbnNmb3JtVmFsdWUub3Bl
cmF0aW9uVHlwZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
OgpAQCAtMTYzLDE0ICsxNjMsMTQgQEAgYm9vbCB0cmFuc2Zvcm1zRm9yVmFsdWUoQ1NTVmFsdWUq
IHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXIKICAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlv
bjogewogICAgICAgICAgICAgTGVuZ3RoIHR4ID0gTGVuZ3RoKDAsIEZpeGVkKTsKICAgICAgICAg
ICAgIExlbmd0aCB0eSA9IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICBpZiAodHJhbnNm
b3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJh
bnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRU
b0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAgICAgIGlm
ICh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAgICAgICAgICAgdHkgPSBj
b252ZXJ0VG9GbG9hdExlbmd0aCgmZmlyc3RWYWx1ZSwgY29udmVyc2lvbkRhdGEpOwogICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdHggPSBjb252ZXJ0VG9GbG9hdExlbmd0aChm
aXJzdFZhbHVlLCBjb252ZXJzaW9uRGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9y
bVZhbHVlLT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5z
bGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5z
Zm9ybVZhbHVlLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3Jt
VmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgdHkgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChzZWNvbmRWYWx1ZSwgY29udmVyc2lvbkRhdGEp
OworICAgICAgICAgICAgICAgIHR4ID0gY29udmVydFRvRmxvYXRMZW5ndGgoJmZpcnN0VmFsdWUs
IGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUub3Bl
cmF0aW9uVHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNm
b3JtT3BlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5s
ZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
JiBzZWNvbmRWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFs
dWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0
eSA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKCZzZWNvbmRWYWx1ZSwgY29udmVyc2lvbkRhdGEpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpA
QCAtMTc4LDcgKzE3OCw3IEBAIGJvb2wgdHJhbnNmb3Jtc0ZvclZhbHVlKENTU1ZhbHVlKiB2YWx1
ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyCiAgICAgICAgICAgICBp
ZiAodHguaXNVbmRlZmluZWQoKSB8fCB0eS5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBw
ZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgTGVuZ3RoKDAs
IEZpeGVkKSwgdHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9u
VHlwZSgpKSkpOworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgTGVuZ3RoKDAsIEZpeGVk
KSwgdHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9uOgpAQCAtMTg2LDIw
ICsxODYsMjAgQEAgYm9vbCB0cmFuc2Zvcm1zRm9yVmFsdWUoQ1NTVmFsdWUqIHZhbHVlLCBjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXIKICAgICAgICAgICAgIExlbmd0aCB0
eCA9IExlbmd0aCgwLCBGaXhlZCk7CiAgICAgICAgICAgICBMZW5ndGggdHkgPSBMZW5ndGgoMCwg
Rml4ZWQpOwogICAgICAgICAgICAgTGVuZ3RoIHR6ID0gTGVuZ3RoKDAsIEZpeGVkKTsKLSAgICAg
ICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9uKQotICAgICAgICAgICAg
ICAgIHR6ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgY29udmVyc2lvbkRhdGEp
OwotICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9
PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbikK
LSAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIGNv
bnZlcnNpb25EYXRhKTsKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25U
eXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVy
YXRpb24pCisgICAgICAgICAgICAgICAgdHogPSBjb252ZXJ0VG9GbG9hdExlbmd0aCgmZmlyc3RW
YWx1ZSwgY29udmVyc2lvbkRhdGEpOworICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFs
dWUub3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZ
VHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRM
ZW5ndGgoJmZpcnN0VmFsdWUsIGNvbnZlcnNpb25EYXRhKTsKICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIHR4ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgY29u
dmVyc2lvbkRhdGEpOwotICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0
aW9uVHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3Jt
T3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVu
Z3RoKCkgPiAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
dGhpcmRWYWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soMikpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHogPSBjb252ZXJ0
VG9GbG9hdExlbmd0aCh0aGlyZFZhbHVlLCBjb252ZXJzaW9uRGF0YSk7CisgICAgICAgICAgICAg
ICAgdHggPSBjb252ZXJ0VG9GbG9hdExlbmd0aCgmZmlyc3RWYWx1ZSwgY29udmVyc2lvbkRhdGEp
OworICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkgIT0g
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLmxlbmd0aCgpID4gMikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHRoaXJkVmFsdWUgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMikpOworICAgICAgICAgICAgICAgICAgICAgICAgdHogPSBjb252ZXJ0VG9GbG9h
dExlbmd0aCgmdGhpcmRWYWx1ZSwgY29udmVyc2lvbkRhdGEpOwogICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAx
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFs
dWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRM
ZW5ndGgoc2Vjb25kVmFsdWUsIGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHRyYW5zZm9ybVZhbHVlLmxlbmd0aCgpID4gMSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHNlY29uZFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRMZW5ndGgoJnNlY29uZFZhbHVl
LCBjb252ZXJzaW9uRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CkBAIC0yMDcsMTIgKzIwNywxMiBAQCBib29sIHRyYW5zZm9ybXNG
b3JWYWx1ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEm
IGNvbnZlcgogICAgICAgICAgICAgaWYgKHR4LmlzVW5kZWZpbmVkKCkgfHwgdHkuaXNVbmRlZmlu
ZWQoKSB8fCB0ei5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgdHosIHRyYW5zZm9ybU9wZXJhdGlvblR5
cGUodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAgICAgICAgICAgIG9wZXJh
dGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNy
ZWF0ZSh0eCwgdHksIHR6LCB0cmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9ybVZhbHVlLm9w
ZXJhdGlvblR5cGUoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjog
ewotICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMo
KTsKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3RhdGVUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgwLCAwLCAxLCBhbmdsZSwgdHJhbnNmb3JtT3BlcmF0aW9u
VHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgZG91
YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS5jb21wdXRlRGVncmVlcygpOworICAgICAgICAgICAgb3Bl
cmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3Jl
YXRlKDAsIDAsIDEsIGFuZ2xlLCB0cmFuc2Zvcm1PcGVyYXRpb25UeXBlKHRyYW5zZm9ybVZhbHVl
Lm9wZXJhdGlvblR5cGUoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zvcm1PcGVyYXRp
b246CkBAIC0yMjEsMjggKzIyMSwyOCBAQCBib29sIHRyYW5zZm9ybXNGb3JWYWx1ZShDU1NWYWx1
ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcgogICAgICAg
ICAgICAgZG91YmxlIHggPSAwOwogICAgICAgICAgICAgZG91YmxlIHkgPSAwOwogICAgICAgICAg
ICAgZG91YmxlIHogPSAwOwotICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS0+
Y29tcHV0ZURlZ3JlZXMoKTsKKyAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGZpcnN0VmFsdWUu
Y29tcHV0ZURlZ3JlZXMoKTsKIAotICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVy
YXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zvcm1P
cGVyYXRpb24pCisgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUub3BlcmF0aW9uVHlwZSgp
ID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVYVHJhbnNmb3JtT3BlcmF0aW9uKQog
ICAgICAgICAgICAgICAgIHggPSAxOwotICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFs
dWUtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRy
YW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAgIGVsc2UgaWYgKHRyYW5zZm9ybVZhbHVlLm9w
ZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9y
bU9wZXJhdGlvbikKICAgICAgICAgICAgICAgICB5ID0gMTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICB6ID0gMTsKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygp
LmFwcGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBhbmdsZSwg
dHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkp
OworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHgsIHksIHosIGFuZ2xlLCB0cmFuc2Zvcm1PcGVyYXRpb25U
eXBlKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSkpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0
ZTNEVHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUt
Pmxlbmd0aCgpIDwgNCkKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS5sZW5ndGgoKSA8
IDQpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogc2Vjb25kVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0
aGlyZFZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjaygyKSk7Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZm91cnRo
VmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDMpKTsKLSAgICAgICAgICAgIGRvdWJsZSB4ID0gZmlyc3RWYWx1ZS0+Z2V0RG91
YmxlVmFsdWUoKTsKLSAgICAgICAgICAgIGRvdWJsZSB5ID0gc2Vjb25kVmFsdWUtPmdldERvdWJs
ZVZhbHVlKCk7Ci0gICAgICAgICAgICBkb3VibGUgeiA9IHRoaXJkVmFsdWUtPmdldERvdWJsZVZh
bHVlKCk7Ci0gICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmb3VydGhWYWx1ZS0+Y29tcHV0ZURl
Z3JlZXMoKTsKLSAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3Rh
dGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBhbmdsZSwgdHJhbnNmb3JtT3Bl
cmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHNlY29uZFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKKyAgICAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiB0aGlyZFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKTsKKyAg
ICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBmb3VydGhWYWx1ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygzKSk7
CisgICAgICAgICAgICBkb3VibGUgeCA9IGZpcnN0VmFsdWUuZ2V0RG91YmxlVmFsdWUoKTsKKyAg
ICAgICAgICAgIGRvdWJsZSB5ID0gc2Vjb25kVmFsdWUuZ2V0RG91YmxlVmFsdWUoKTsKKyAgICAg
ICAgICAgIGRvdWJsZSB6ID0gdGhpcmRWYWx1ZS5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAg
ICAgZG91YmxlIGFuZ2xlID0gZm91cnRoVmFsdWUuY29tcHV0ZURlZ3JlZXMoKTsKKyAgICAgICAg
ICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVyYXRp
b246OmNyZWF0ZSh4LCB5LCB6LCBhbmdsZSwgdHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zv
cm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJhbnNmb3JtT3Bl
cmF0aW9uOgpAQCAtMjUwLDYyICsyNTAsNjIgQEAgYm9vbCB0cmFuc2Zvcm1zRm9yVmFsdWUoQ1NT
VmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXIKICAg
ICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRp
b246IHsKICAgICAgICAgICAgIGRvdWJsZSBhbmdsZVggPSAwOwogICAgICAgICAgICAgZG91Ymxl
IGFuZ2xlWSA9IDA7Ci0gICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmaXJzdFZhbHVlLT5jb21w
dXRlRGVncmVlcygpOwotICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLT5vcGVyYXRpb25U
eXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdZVHJhbnNmb3JtT3BlcmF0aW9u
KQorICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS5jb21wdXRlRGVncmVlcygp
OworICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlLm9wZXJhdGlvblR5cGUoKSA9PSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb24pCiAgICAgICAgICAg
ICAgICAgYW5nbGVZID0gYW5nbGU7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAg
ICBhbmdsZVggPSBhbmdsZTsKLSAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9w
ZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1RyYW5zZm9ybU9w
ZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0
aCgpID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNl
Y29uZFZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjaygxKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVkgPSBzZWNv
bmRWYWx1ZS0+Y29tcHV0ZURlZ3JlZXMoKTsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3Jt
VmFsdWUub3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJh
bnNmb3JtT3BlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1
ZS5sZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlJiBzZWNvbmRWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3Jt
VmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhbmdsZVkgPSBzZWNvbmRWYWx1ZS5jb21wdXRlRGVncmVlcygpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgb3Bl
cmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0
ZShhbmdsZVgsIGFuZ2xlWSwgdHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS0+
b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCku
YXBwZW5kKFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShhbmdsZVgsIGFuZ2xlWSwgdHJh
bnNmb3JtT3BlcmF0aW9uVHlwZSh0cmFuc2Zvcm1WYWx1ZS5vcGVyYXRpb25UeXBlKCkpKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAgIGlmICh0
cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPCA2KQorICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVZh
bHVlLmxlbmd0aCgpIDwgNikKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRv
dWJsZSBhID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgIGRvdWJs
ZSBiID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjaygxKSktPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICBkb3VibGUgYyA9IHRv
Q1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MikpLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgZG91YmxlIGQgPSB0b0NTU1ByaW1p
dGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+Z2V0
RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgIGRvdWJsZSBlID0gY29udmVyc2lvbkRhdGEuem9v
bSgpICogdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjayg0KSktPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICBkb3VibGUgZiA9IGNv
bnZlcnNpb25EYXRhLnpvb20oKSAqIHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUt
Pml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNSkpLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAg
ICAgZG91YmxlIGEgPSBmaXJzdFZhbHVlLmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBk
b3VibGUgYiA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRl
bVdpdGhvdXRCb3VuZHNDaGVjaygxKSkuZ2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIGRv
dWJsZSBjID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDIpKS5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgZG91
YmxlIGQgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soMykpLmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICBkb3Vi
bGUgZSA9IGNvbnZlcnNpb25EYXRhLnpvb20oKSAqIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayg0KSkuZ2V0RG91YmxlVmFs
dWUoKTsKKyAgICAgICAgICAgIGRvdWJsZSBmID0gY29udmVyc2lvbkRhdGEuem9vbSgpICogZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDUpKS5nZXREb3VibGVWYWx1ZSgpOwogICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVy
YXRpb25zKCkuYXBwZW5kKE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGEsIGIsIGMs
IGQsIGUsIGYpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6Ok1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0g
ICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpIDwgMTYpCisgICAgICAgICAg
ICBpZiAodHJhbnNmb3JtVmFsdWUubGVuZ3RoKCkgPCAxNikKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCh0b0NTU1ByaW1pdGl2
ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKS0+Z2V0RG91
YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9y
bVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAg
ICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDIpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDMpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZh
bHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDQpKS0+Z2V0RG91Ymxl
VmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZh
bHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDUpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAg
ICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDYpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0b0NT
U1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDcp
KS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVl
KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDgpKS0+Z2V0RG91YmxlVmFs
dWUoKSwKLSAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVl
LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDkpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAg
ICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDEwKSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgdG9DU1NQ
cmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMSkp
LT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgIGNvbnZlcnNpb25EYXRhLnpvb20o
KSAqIHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soMTIpKS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICBjb252ZXJzaW9u
RGF0YS56b29tKCkgKiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDEzKSktPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAg
dG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVj
aygxNCkpLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgIHRvQ1NTUHJpbWl0aXZl
VmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTUpKS0+Z2V0RG91
YmxlVmFsdWUoKSk7CisgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXgoZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDApKS5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgIGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygx
KSkuZ2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpLmdldERv
dWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS5nZXREb3VibGVWYWx1
ZSgpLAorICAgICAgICAgICAgICAgIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNm
b3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayg0KSkuZ2V0RG91YmxlVmFsdWUoKSwKKyAg
ICAgICAgICAgICAgICBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVl
Lml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNSkpLmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAg
ICAgICAgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDYpKS5nZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgIGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjayg3KSkuZ2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
OCkpLmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDkpKS5nZXRE
b3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMCkpLmdldERvdWJsZVZh
bHVlKCksCisgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFu
c2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDExKSkuZ2V0RG91YmxlVmFsdWUoKSwK
KyAgICAgICAgICAgICAgICBjb252ZXJzaW9uRGF0YS56b29tKCkgKiBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTIpKS5n
ZXREb3VibGVWYWx1ZSgpLAorICAgICAgICAgICAgICAgIGNvbnZlcnNpb25EYXRhLnpvb20oKSAq
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdHJhbnNmb3JtVmFsdWUuaXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygxMykpLmdldERvdWJsZVZhbHVlKCksCisgICAgICAgICAgICAgICAgZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp0cmFuc2Zvcm1WYWx1ZS5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKDE0KSkuZ2V0RG91YmxlVmFsdWUoKSwKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oKnRyYW5zZm9ybVZhbHVlLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTUp
KS5nZXREb3VibGVWYWx1ZSgpKTsKICAgICAgICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygp
LmFwcGVuZChNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1hdHJpeCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246IHsKICAgICAgICAgICAgIExl
bmd0aCBwID0gTGVuZ3RoKDAsIEZpeGVkKTsKLSAgICAgICAgICAgIGlmIChmaXJzdFZhbHVlLT5p
c0xlbmd0aCgpKQotICAgICAgICAgICAgICAgIHAgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJz
dFZhbHVlLCBjb252ZXJzaW9uRGF0YSk7CisgICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZS5pc0xl
bmd0aCgpKQorICAgICAgICAgICAgICAgIHAgPSBjb252ZXJ0VG9GbG9hdExlbmd0aCgmZmlyc3RW
YWx1ZSwgY29udmVyc2lvbkRhdGEpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAg
ICAgLy8gVGhpcyBpcyBhIHF1aXJrIHRoYXQgc2hvdWxkIGdvIGF3YXkgd2hlbiAzZCB0cmFuc2Zv
cm1zIGFyZSBmaW5hbGl6ZWQuCi0gICAgICAgICAgICAgICAgZG91YmxlIHZhbCA9IGZpcnN0VmFs
dWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgZG91YmxlIHZhbCA9IGZpcnN0
VmFsdWUuZ2V0RG91YmxlVmFsdWUoKTsKICAgICAgICAgICAgICAgICBwID0gdmFsID49IDAgPyBM
ZW5ndGgoY2xhbXBUb1Bvc2l0aXZlSW50ZWdlcih2YWwpLCBGaXhlZCkgOiBMZW5ndGgoVW5kZWZp
bmVkKTsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1Zp
ZXdwb3J0U3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvVmlld3BvcnRTdHls
ZVJlc29sdmVyLmNwcAppbmRleCA4ZDQxMjlhMGNmOWFkOTZiOWJhNmUyMTc5OTAwNWUzNWQzYzM4
MmJiLi5mODllZmYwMDg2M2FjODlkYjc3OGRiMzIzZmU3ODUwMTU2NmFkZjA5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvVmlld3BvcnRTdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvVmlld3BvcnRTdHlsZVJlc29sdmVyLmNwcApAQCAtMTA4LDE5ICsxMDgs
MTkgQEAgZmxvYXQgVmlld3BvcnRTdHlsZVJlc29sdmVyOjpnZXRWaWV3cG9ydEFyZ3VtZW50VmFs
dWUoQ1NTUHJvcGVydHlJRCBpZCkgY29uc3QKICAgICAgICAgZGVmYXVsdFZhbHVlID0gMTsKIAog
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBtX3Byb3BlcnR5U2V0LT5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKGlkKTsKLSAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlLmdldCgpKSkKICAgICAgICAg
cmV0dXJuIGRlZmF1bHRWYWx1ZTsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUuZ2V0KCkpOworICAgIENTU1ByaW1pdGl2
ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpOwogCi0gICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpIHx8IHByaW1pdGl2ZVZh
bHVlLT5pc1B4KCkpCi0gICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1
ZSgpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpIHx8IHByaW1pdGl2ZVZhbHVl
LmlzUHgoKSkKKyAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlLmdldEZsb2F0VmFsdWUoKTsK
IAotICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNGb250UmVsYXRpdmVMZW5ndGgoKSkKLSAgICAg
ICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkgKiBtX2RvY3VtZW50LT5k
b2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0
ZWRTaXplKCk7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzRm9udFJlbGF0aXZlTGVuZ3RoKCkp
CisgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKCkgKiBtX2RvY3Vt
ZW50LT5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCku
Y29tcHV0ZWRTaXplKCk7CiAKLSAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgp
KSB7Ci0gICAgICAgIGZsb2F0IHBlcmNlbnRWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9h
dFZhbHVlKCkgLyAxMDAuMGY7CisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgp
KSB7CisgICAgICAgIGZsb2F0IHBlcmNlbnRWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLmdldEZsb2F0
VmFsdWUoKSAvIDEwMC4wZjsKICAgICAgICAgc3dpdGNoIChpZCkgewogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5TWF4SGVpZ2h0OgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWluSGVpZ2h0OgpA
QCAtMTQwLDcgKzE0MCw3IEBAIGZsb2F0IFZpZXdwb3J0U3R5bGVSZXNvbHZlcjo6Z2V0Vmlld3Bv
cnRBcmd1bWVudFZhbHVlKENTU1Byb3BlcnR5SUQgaWQpIGNvbnN0CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICBzd2l0
Y2ggKHByaW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSkgewogICAgIGNhc2UgQ1NTVmFsdWVBdXRv
OgogICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwogICAgIGNhc2UgQ1NTVmFsdWVEZXZpY2VI
ZWlnaHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTRmlsdGVyVmFs
dWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oCmluZGV4IDRm
OWQ5MTU4NjY5ZjUxYTBiYzFkMmQwNjdmZjYyYTgzMGZmZTQxMDQuLmRhZjNhZmJiZDE0YjRiYTIw
Y2UzZjkzMjg0OTZiNzhlMDY5YTYyYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9X
ZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NG
aWx0ZXJWYWx1ZS5oCkBAIC03MCw4ICs3MCw4IEBAIHByaXZhdGU6CiAgICAgRmlsdGVyT3BlcmF0
aW9uVHlwZSBtX3R5cGU7CiB9OwogCi1DU1NfVkFMVUVfVFlQRV9DQVNUUyhXZWJLaXRDU1NGaWx0
ZXJWYWx1ZSwgaXNXZWJLaXRDU1NGaWx0ZXJWYWx1ZSgpKQorfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCi19CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShXZWJLaXRDU1NGaWx0ZXJW
YWx1ZSwgaXNXZWJLaXRDU1NGaWx0ZXJWYWx1ZSgpKQogCi0jZW5kaWYKKyNlbmRpZiAvLyBXZWJL
aXRDU1NGaWx0ZXJWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0
Q1NTTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCmlu
ZGV4IDQzYmJkMWMzMWM2ZDlmMjRmMTY4YmIwYzE5YzYyZjBjNzU4OWIzMzYuLmM2ZDU5OTk3MjA4
ZjIxNWExMTQyMTE2N2ZkMzkwMWY4ODgzMjhiNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRD
U1NNYXRyaXguY3BwCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgV2ViS2l0Q1NTTWF0cml4OjpzZXRN
YXRyaXhWYWx1ZShjb25zdCBTdHJpbmcmIHN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAg
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBzdHlsZURlY2xhcmF0aW9uLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKIAogICAgICAgICAvLyBDaGVj
ayBmb3IgYSAibm9uZSIgb3IgZW1wdHkgdHJhbnNmb3JtLiBJbiB0aGVzZSBjYXNlcyB3ZSBjYW4g
dXNlIHRoZSBkZWZhdWx0IGlkZW50aXR5IG1hdHJpeC4KLSAgICAgICAgaWYgKCF2YWx1ZSB8fCAo
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiAodG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS5n
ZXQoKSkpLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKSkKKyAgICAgICAgaWYgKCF2YWx1
ZSB8fCAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaAppbmRleCAxOTVm
OTZhNTFkM2E5NmRkZWMyZGE2MmRiYjY4OThiZDc3NjZjOTdlLi45ZGVjOTU2Y2YxMWQyYzViMGRh
ZTA5NmUzOGQ2MDQ4NDAxY2U5MjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWUuaApAQCAtNzksMTggKzc5LDggQEAgcHJpdmF0ZToKICAgICBUcmFuc2Zv
cm1PcGVyYXRpb25UeXBlIG1fdHlwZTsKIH07CiAKLWlubGluZSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZSogdG9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZShDU1NWYWx1ZSogdmFsdWUpCi17Ci0gICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIXZhbHVlIHx8IHZhbHVlLT5pc1dlYktp
dENTU1RyYW5zZm9ybVZhbHVlKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZSo+KHZhbHVlKTsKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotaW5s
aW5lIGNvbnN0IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKiB0b1dlYktpdENTU1RyYW5zZm9ybVZh
bHVlKGNvbnN0IENTU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTighdmFsdWUgfHwgdmFsdWUtPmlzV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoKSk7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKj4o
dmFsdWUpOwotfQotCi19CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZSwgaXNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSgpKQogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKaW5kZXggNjZi
ZWZmNDE3NWQwN2EwY2M3MWUyYTc4ODg3ZGE2MDlkZDRjYTQ3OC4uZTMxMGRhNDIxMjQzNWNmN2E5
ZjM4MjhmYmQ5MzJlNDBkMmZlYjkzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBs
eVN0eWxlQ29tbWFuZC5jcHAKQEAgLTE1MTAsOCArMTUxMCw3IEBAIGZsb2F0IEFwcGx5U3R5bGVD
b21tYW5kOjpjb21wdXRlZEZvbnRTaXplKE5vZGUqIG5vZGUpCiAgICAgICAgIHJldHVybiAwOwog
CiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3Iobm9k
ZSkucHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXplKTsKLSAgICBBU1NFUlQodmFsdWUg
JiYgdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgcmV0dXJuIHRvQ1NTUHJpbWl0aXZl
VmFsdWUodmFsdWUuZ2V0KCkpLT5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UFgpOworICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRG
bG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwogfQogCiB2b2lkIEFwcGx5U3R5
bGVDb21tYW5kOjpqb2luQ2hpbGRUZXh0Tm9kZXMoTm9kZSogbm9kZSwgY29uc3QgUG9zaXRpb24m
IHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
U3R5bGUuY3BwCmluZGV4IDc4MGQ4NDcxODgxYmY0ZmEzMGFkMWQ4NjFhYWY5ZTU5ZTg3ZGEyNzEu
LjdmNjFkM2Y5ODZlNDI5NzBlMDcxYWE5YmYxZGQwYzA2NzY2Nzk1MDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKQEAgLTE0Miw5ICsxNDIsOSBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgogaW50IGlkZW50aWZpZXJGb3JTdHlsZVByb3BlcnR5KFQqIHN0eWxlLCBDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SUQpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGV4
dHJhY3RQcm9wZXJ0eVZhbHVlKHN0eWxlLCBwcm9wZXJ0eUlEKTsKLSAgICBpZiAoIXZhbHVlIHx8
ICF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlLmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHRvQ1NTUHJp
bWl0aXZlVmFsdWUodmFsdWUuZ2V0KCkpLT5nZXRWYWx1ZUlEKCk7CisgICAgcmV0dXJuIGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gUGFzc1JlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBnZXRQcm9w
ZXJ0aWVzTm90SW4oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVz
LCBUKiBiYXNlU3R5bGUpOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIEhUTUxFbGVtZW50RXF1aXZhbGVu
dDo6SFRNTEVsZW1lbnRFcXVpdmFsZW50KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlSUQgcHJp
bWl0CiBib29sIEhUTUxFbGVtZW50RXF1aXZhbGVudDo6dmFsdWVJc1ByZXNlbnRJblN0eWxlKEVs
ZW1lbnQqIGVsZW1lbnQsIFN0eWxlUHJvcGVydGllcyogc3R5bGUpIGNvbnN0CiB7CiAgICAgUmVm
UHRyPENTU1ZhbHVlPiB2YWx1ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKG1fcHJvcGVy
dHlJRCk7Ci0gICAgcmV0dXJuIG1hdGNoZXMoZWxlbWVudCkgJiYgdmFsdWUgJiYgdmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLmdldCgpKS0+Z2V0
VmFsdWVJRCgpID09IG1fcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKTsKKyAgICByZXR1cm4g
bWF0Y2hlcyhlbGVtZW50KSAmJiBpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUuZ2V0KCkpICYm
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKSA9PSBtX3By
aW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCk7CiB9CiAKIHZvaWQgSFRNTEVsZW1lbnRFcXVpdmFs
ZW50OjphZGRUb1N0eWxlKEVsZW1lbnQqLCBFZGl0aW5nU3R5bGUqIHN0eWxlKSBjb25zdApAQCAt
MjI5LDcgKzIyOSw3IEBAIGJvb2wgSFRNTFRleHREZWNvcmF0aW9uRXF1aXZhbGVudDo6dmFsdWVJ
c1ByZXNlbnRJblN0eWxlKEVsZW1lbnQqIGVsZW1lbnQsIFN0eWxlCiAgICAgUmVmUHRyPENTU1Zh
bHVlPiBzdHlsZVZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlX
ZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCk7CiAgICAgaWYgKCFzdHlsZVZhbHVlKQogICAg
ICAgICBzdHlsZVZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlU
ZXh0RGVjb3JhdGlvbik7Ci0gICAgcmV0dXJuIG1hdGNoZXMoZWxlbWVudCkgJiYgc3R5bGVWYWx1
ZSAmJiBzdHlsZVZhbHVlLT5pc1ZhbHVlTGlzdCgpICYmIHRvQ1NTVmFsdWVMaXN0KHN0eWxlVmFs
dWUuZ2V0KCkpLT5oYXNWYWx1ZShtX3ByaW1pdGl2ZVZhbHVlLmdldCgpKTsKKyAgICByZXR1cm4g
bWF0Y2hlcyhlbGVtZW50KSAmJiBpczxDU1NWYWx1ZUxpc3Q+KHN0eWxlVmFsdWUuZ2V0KCkpICYm
IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4oKnN0eWxlVmFsdWUpLmhhc1ZhbHVlKG1fcHJpbWl0aXZl
VmFsdWUuZ2V0KCkpOwogfQogCiBjbGFzcyBIVE1MQXR0cmlidXRlRXF1aXZhbGVudCA6IHB1Ymxp
YyBIVE1MRWxlbWVudEVxdWl2YWxlbnQgewpAQCAtMzU2LDEyICszNTYsMTIgQEAgRWRpdGluZ1N0
eWxlOjp+RWRpdGluZ1N0eWxlKCkKIAogc3RhdGljIFJHQkEzMiBjc3NWYWx1ZVRvUkdCQShDU1NW
YWx1ZSogY29sb3JWYWx1ZSkKIHsKLSAgICBpZiAoIWNvbG9yVmFsdWUgfHwgIWNvbG9yVmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPihjb2xv
clZhbHVlKSkKICAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudDsKICAgICAKLSAgICBD
U1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlQ29sb3IgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKGNv
bG9yVmFsdWUpOwotICAgIGlmIChwcmltaXRpdmVDb2xvci0+aXNSR0JDb2xvcigpKQotICAgICAg
ICByZXR1cm4gcHJpbWl0aXZlQ29sb3ItPmdldFJHQkEzMlZhbHVlKCk7CisgICAgQ1NTUHJpbWl0
aXZlVmFsdWUmIHByaW1pdGl2ZUNvbG9yID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpj
b2xvclZhbHVlKTsKKyAgICBpZiAocHJpbWl0aXZlQ29sb3IuaXNSR0JDb2xvcigpKQorICAgICAg
ICByZXR1cm4gcHJpbWl0aXZlQ29sb3IuZ2V0UkdCQTMyVmFsdWUoKTsKICAgICAKICAgICBSR0JB
MzIgcmdiYSA9IDA7CiAgICAgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKHJnYmEsIGNvbG9yVmFsdWUt
PmNzc1RleHQoKSk7CkBAIC00NzYsMTcgKzQ3NiwxNyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6ZXh0
cmFjdEZvbnRTaXplRGVsdGEoKQogCiAgICAgLy8gR2V0IHRoZSBhZGp1c3RtZW50IGFtb3VudCBv
dXQgb2YgdGhlIHN0eWxlLgogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBtX211dGFibGVT
dHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTaXplRGVsdGEp
OwotICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgaWYg
KCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKHZhbHVlLmdldCgpKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKIAogICAgIC8vIE9ubHkgUFgg
aGFuZGxlZCBub3cuIElmIHdlIGhhbmRsZSBtb3JlIHR5cGVzIGluIHRoZSBmdXR1cmUsIHBlcmhh
cHMKICAgICAvLyBhIHN3aXRjaCBzdGF0ZW1lbnQgaGVyZSB3b3VsZCBiZSBtb3JlIGFwcHJvcHJp
YXRlLgotICAgIGlmICghcHJpbWl0aXZlVmFsdWUtPmlzUHgoKSkKKyAgICBpZiAoIXByaW1pdGl2
ZVZhbHVlLmlzUHgoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9mb250U2l6ZURlbHRhID0g
cHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKTsKKyAgICBtX2ZvbnRTaXplRGVsdGEgPSBw
cmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKCk7CiAgICAgbV9tdXRhYmxlU3R5bGUtPnJlbW92
ZVByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0Rm9udFNpemVEZWx0YSk7CiB9CiAKQEAgLTUwMSwx
NiArNTAxLDE2IEBAIGJvb2wgRWRpdGluZ1N0eWxlOjp0ZXh0RGlyZWN0aW9uKFdyaXRpbmdEaXJl
Y3Rpb24mIHdyaXRpbmdEaXJlY3Rpb24pIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5pY29kZUJpZGkgPSBtX211dGFibGVTdHlsZS0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpKTsKLSAgICBpZiAoIXVuaWNvZGVC
aWRpIHx8ICF1bmljb2RlQmlkaS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KHVuaWNvZGVCaWRpLmdldCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgQ1NTVmFsdWVJRCB1bmljb2RlQmlkaVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSh1bmljb2RlQmlkaS5nZXQoKSktPmdldFZhbHVlSUQoKTsKKyAgICBDU1NWYWx1ZUlEIHVuaWNv
ZGVCaWRpVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnVuaWNvZGVCaWRpKS5n
ZXRWYWx1ZUlEKCk7CiAgICAgaWYgKHVuaWNvZGVCaWRpVmFsdWUgPT0gQ1NTVmFsdWVFbWJlZCkg
ewogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGRpcmVjdGlvbiA9IG1fbXV0YWJsZVN0eWxlLT5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5RGlyZWN0aW9uKTsKLSAgICAgICAgaWYgKCFk
aXJlY3Rpb24gfHwgIWRpcmVjdGlvbi0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICBpZiAo
IWlzPENTU1ByaW1pdGl2ZVZhbHVlPihkaXJlY3Rpb24uZ2V0KCkpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgIHdyaXRpbmdEaXJlY3Rpb24gPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKGRpcmVjdGlvbi5nZXQoKSktPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUx0ciA/IExlZnRU
b1JpZ2h0V3JpdGluZ0RpcmVjdGlvbiA6IFJpZ2h0VG9MZWZ0V3JpdGluZ0RpcmVjdGlvbjsKKyAg
ICAgICAgd3JpdGluZ0RpcmVjdGlvbiA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZGly
ZWN0aW9uKS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVMdHIgPyBMZWZ0VG9SaWdodFdyaXRpbmdE
aXJlY3Rpb24gOiBSaWdodFRvTGVmdFdyaXRpbmdEaXJlY3Rpb247CiAKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQpAQCAtOTMwLDEwICs5MzAsMTAgQEAgdm9pZCBFZGl0aW5nU3R5bGU6OnBy
ZXBhcmVUb0FwcGx5QXQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uLCBTaG91bGRQcmVzZXJ2ZVdy
aXQKICAgICAgICAgfHwgY3NzVmFsdWVUb1JHQkEobV9tdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5
Q1NTVmFsdWUoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLmdldCgpKSA9PSByZ2JhQmFja2dy
b3VuZENvbG9ySW5FZmZlY3QocG9zaXRpb24uY29udGFpbmVyTm9kZSgpKSkKICAgICAgICAgbV9t
dXRhYmxlU3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsK
IAotICAgIGlmICh1bmljb2RlQmlkaSAmJiB1bmljb2RlQmlkaS0+aXNQcmltaXRpdmVWYWx1ZSgp
KSB7Ci0gICAgICAgIG1fbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNv
ZGVCaWRpLCBzdGF0aWNfY2FzdDxDU1NWYWx1ZUlEPih0b0NTU1ByaW1pdGl2ZVZhbHVlKHVuaWNv
ZGVCaWRpLmdldCgpKS0+Z2V0VmFsdWVJRCgpKSk7Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gJiYg
ZGlyZWN0aW9uLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgICAgICBtX211dGFibGVTdHls
ZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIHN0YXRpY19jYXN0PENTU1ZhbHVl
SUQ+KHRvQ1NTUHJpbWl0aXZlVmFsdWUoZGlyZWN0aW9uLmdldCgpKS0+Z2V0VmFsdWVJRCgpKSk7
CisgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih1bmljb2RlQmlkaS5nZXQoKSkpIHsKKyAg
ICAgICAgbV9tdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5VW5pY29kZUJpZGks
IHN0YXRpY19jYXN0PENTU1ZhbHVlSUQ+KGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdW5p
Y29kZUJpZGkpLmdldFZhbHVlSUQoKSkpOworICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KGRpcmVjdGlvbi5nZXQoKSkpCisgICAgICAgICAgICBtX211dGFibGVTdHlsZS0+c2V0UHJv
cGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIHN0YXRpY19jYXN0PENTU1ZhbHVlSUQ+KGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZGlyZWN0aW9uKS5nZXRWYWx1ZUlEKCkpKTsKICAgICB9
CiB9CiAKQEAgLTEwNzMsMTMgKzEwNzMsMTMgQEAgdm9pZCBFZGl0aW5nU3R5bGU6Om1lcmdlU3R5
bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgQ1NTUHJvcGVydHlPdmVycmlkZU0KICAg
ICAgICAgU3R5bGVQcm9wZXJ0aWVzOjpQcm9wZXJ0eVJlZmVyZW5jZSBwcm9wZXJ0eSA9IHN0eWxl
LT5wcm9wZXJ0eUF0KGkpOwogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gbV9tdXRh
YmxlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHkuaWQoKSk7CiAKLSAgICAgICAg
Ly8gdGV4dCBkZWNvcmF0aW9ucyBuZXZlciBvdmVycmlkZSB2YWx1ZXMKKyAgICAgICAgLy8gdGV4
dCBkZWNvcmF0aW9ucyBuZXZlciBvdmVycmlkZSB2YWx1ZXMuCiAgICAgICAgIGlmICgocHJvcGVy
dHkuaWQoKSA9PSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uIHx8IHByb3BlcnR5LmlkKCkgPT0g
Q1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCkgJiYgcHJvcGVydHkudmFs
dWUoKS0+aXNWYWx1ZUxpc3QoKSAmJiB2YWx1ZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLT5p
c1ZhbHVlTGlzdCgpKSB7Ci0gICAgICAgICAgICAgICAgbWVyZ2VUZXh0RGVjb3JhdGlvblZhbHVl
cyh0b0NTU1ZhbHVlTGlzdCh2YWx1ZS5nZXQoKSksIHRvQ1NTVmFsdWVMaXN0KHByb3BlcnR5LnZh
bHVlKCkpKTsKKyAgICAgICAgICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KCp2YWx1ZSkpIHsKKyAg
ICAgICAgICAgICAgICBtZXJnZVRleHREZWNvcmF0aW9uVmFsdWVzKGRvd25jYXN0PENTU1ZhbHVl
TGlzdD4odmFsdWUuZ2V0KCkpLCBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHByb3BlcnR5LnZhbHVl
KCkpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHZhbHVlID0gMDsgLy8gdGV4dC1kZWNvcmF0aW9uOiBub25lIGlzIGVxdWl2YWxlbnQgdG8g
bm90IGhhdmluZyB0aGUgcHJvcGVydHkKKyAgICAgICAgICAgIHZhbHVlID0gbnVsbHB0cjsgLy8g
dGV4dC1kZWNvcmF0aW9uOiBub25lIGlzIGVxdWl2YWxlbnQgdG8gbm90IGhhdmluZyB0aGUgcHJv
cGVydHkuCiAgICAgICAgIH0KIAogICAgICAgICBpZiAobW9kZSA9PSBPdmVycmlkZVZhbHVlcyB8
fCAobW9kZSA9PSBEb05vdE92ZXJyaWRlVmFsdWVzICYmICF2YWx1ZSkpCkBAIC0xMTMxLDkgKzEx
MzEsOSBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6bWVyZ2VTdHlsZUZyb21SdWxlc0ZvclNlcmlhbGl6
YXRpb24oU3R5bGVkRWxlbWVudCogZWxlbWVudCkKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHByb3BlcnR5Q291bnQ7ICsraSkgewogICAgICAgICAgICAgU3R5bGVQcm9wZXJ0aWVz
OjpQcm9wZXJ0eVJlZmVyZW5jZSBwcm9wZXJ0eSA9IG1fbXV0YWJsZVN0eWxlLT5wcm9wZXJ0eUF0
KGkpOwogICAgICAgICAgICAgQ1NTVmFsdWUqIHZhbHVlID0gcHJvcGVydHkudmFsdWUoKTsKLSAg
ICAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgICAgIGlm
ICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBpZiAodG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSktPmlzUGVyY2Vu
dGFnZSgpKSB7CisgICAgICAgICAgICBpZiAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2
YWx1ZSkuaXNQZXJjZW50YWdlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoUmVmUHRyPENTU1Zh
bHVlPiBjb21wdXRlZFByb3BlcnR5VmFsdWUgPSBjb21wdXRlZFN0eWxlLnByb3BlcnR5VmFsdWUo
cHJvcGVydHkuaWQoKSkpCiAgICAgICAgICAgICAgICAgICAgIGZyb21Db21wdXRlZFN0eWxlLT5h
ZGRQYXJzZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0eS5pZCgpLCBjb21wdXRlZFByb3Bl
cnR5VmFsdWUucmVsZWFzZSgpKSk7CiAgICAgICAgICAgICB9CkBAIC0xMjQ1LDkgKzEyNDUsOSBA
QCBib29sIEVkaXRpbmdTdHlsZTo6aXNGbG9hdGluZygpCiBpbnQgRWRpdGluZ1N0eWxlOjpsZWdh
Y3lGb250U2l6ZShEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0CiB7CiAgICAgUmVmUHRyPENTU1Zh
bHVlPiBjc3NWYWx1ZSA9IG1fbXV0YWJsZVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1By
b3BlcnR5Rm9udFNpemUpOwotICAgIGlmICghY3NzVmFsdWUgfHwgIWNzc1ZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCisgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oY3NzVmFsdWUuZ2V0
KCkpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbGVnYWN5Rm9udFNpemVGcm9tQ1NT
VmFsdWUoZG9jdW1lbnQsIHRvQ1NTUHJpbWl0aXZlVmFsdWUoY3NzVmFsdWUuZ2V0KCkpLAorICAg
IHJldHVybiBsZWdhY3lGb250U2l6ZUZyb21DU1NWYWx1ZShkb2N1bWVudCwgZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KGNzc1ZhbHVlLmdldCgpKSwKICAgICAgICAgbV9zaG91bGRVc2VGaXhl
ZERlZmF1bHRGb250U2l6ZSwgQWx3YXlzVXNlTGVnYWN5Rm9udFNpemUpOwogfQogCkBAIC0xMzA4
LDEwICsxMzA4LDEwIEBAIFdyaXRpbmdEaXJlY3Rpb24gRWRpdGluZ1N0eWxlOjp0ZXh0RGlyZWN0
aW9uRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5pY29kZUJpZGkgPSBD
b21wdXRlZFN0eWxlRXh0cmFjdG9yKG4pLnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlVbmljb2Rl
QmlkaSk7Ci0gICAgICAgICAgICBpZiAoIXVuaWNvZGVCaWRpIHx8ICF1bmljb2RlQmlkaS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4o
dW5pY29kZUJpZGkuZ2V0KCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
ICAgICBDU1NWYWx1ZUlEIHVuaWNvZGVCaWRpVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHVu
aWNvZGVCaWRpLmdldCgpKS0+Z2V0VmFsdWVJRCgpOworICAgICAgICAgICAgQ1NTVmFsdWVJRCB1
bmljb2RlQmlkaVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp1bmljb2RlQmlk
aSkuZ2V0VmFsdWVJRCgpOwogICAgICAgICAgICAgaWYgKHVuaWNvZGVCaWRpVmFsdWUgPT0gQ1NT
VmFsdWVFbWJlZCB8fCB1bmljb2RlQmlkaVZhbHVlID09IENTU1ZhbHVlQmlkaU92ZXJyaWRlKQog
ICAgICAgICAgICAgICAgIHJldHVybiBOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbjsKICAgICAgICAg
fQpAQCAtMTMzNywxMCArMTMzNywxMCBAQCBXcml0aW5nRGlyZWN0aW9uIEVkaXRpbmdTdHlsZTo6
dGV4dERpcmVjdGlvbkZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJgogCiAgICAg
ICAgIENvbXB1dGVkU3R5bGVFeHRyYWN0b3IgY29tcHV0ZWRTdHlsZShub2RlKTsKICAgICAgICAg
UmVmUHRyPENTU1ZhbHVlPiB1bmljb2RlQmlkaSA9IGNvbXB1dGVkU3R5bGUucHJvcGVydHlWYWx1
ZShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpKTsKLSAgICAgICAgaWYgKCF1bmljb2RlQmlkaSB8fCAh
dW5pY29kZUJpZGktPmlzUHJpbWl0aXZlVmFsdWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NQcmlt
aXRpdmVWYWx1ZT4odW5pY29kZUJpZGkuZ2V0KCkpKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgQ1NTVmFsdWVJRCB1bmljb2RlQmlkaVZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1
ZSh1bmljb2RlQmlkaS5nZXQoKSktPmdldFZhbHVlSUQoKTsKKyAgICAgICAgQ1NTVmFsdWVJRCB1
bmljb2RlQmlkaVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp1bmljb2RlQmlk
aSkuZ2V0VmFsdWVJRCgpOwogICAgICAgICBpZiAodW5pY29kZUJpZGlWYWx1ZSA9PSBDU1NWYWx1
ZU5vcm1hbCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMzQ5LDEwICsxMzQ5LDEwIEBA
IFdyaXRpbmdEaXJlY3Rpb24gRWRpdGluZ1N0eWxlOjp0ZXh0RGlyZWN0aW9uRm9yU2VsZWN0aW9u
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mCiAKICAgICAgICAgQVNTRVJUKHVuaWNvZGVCaWRpVmFs
dWUgPT0gQ1NTVmFsdWVFbWJlZCk7CiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gZGlyZWN0aW9u
ID0gY29tcHV0ZWRTdHlsZS5wcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5RGlyZWN0aW9uKTsKLSAg
ICAgICAgaWYgKCFkaXJlY3Rpb24gfHwgIWRpcmVjdGlvbi0+aXNQcmltaXRpdmVWYWx1ZSgpKQor
ICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPihkaXJlY3Rpb24uZ2V0KCkpKQogICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgQ1NTVmFsdWVJRCBkaXJlY3Rpb25WYWx1ZSA9
IHRvQ1NTUHJpbWl0aXZlVmFsdWUoZGlyZWN0aW9uLmdldCgpKS0+Z2V0VmFsdWVJRCgpOworICAg
ICAgICBDU1NWYWx1ZUlEIGRpcmVjdGlvblZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KCpkaXJlY3Rpb24pLmdldFZhbHVlSUQoKTsKICAgICAgICAgaWYgKGRpcmVjdGlvblZhbHVl
ICE9IENTU1ZhbHVlTHRyICYmIGRpcmVjdGlvblZhbHVlICE9IENTU1ZhbHVlUnRsKQogICAgICAg
ICAgICAgY29udGludWU7CiAKQEAgLTE0NTIsMTEgKzE0NTIsMTEgQEAgdm9pZCBTdHlsZUNoYW5n
ZTo6ZXh0cmFjdFRleHRTdHlsZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzKgogICAgIC8vIEFzc3VtaW5nIHJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJvcGVydGll
cyBoYXMgYmVlbiBjYWxsZWQsIHRoZXJlIHNob3VsZCBub3QgYmUgLXdlYmtpdC10ZXh0LWRlY29y
YXRpb25zLWluLWVmZmVjdAogICAgIC8vIEZ1cnRoZXJtb3JlLCB0ZXh0LWRlY29yYXRpb246IG5v
bmUgaGFzIGJlZW4gdHJpbW1lZCBzbyB0aGF0IHRleHQtZGVjb3JhdGlvbiBwcm9wZXJ0eSBpcyBh
bHdheXMgYSBDU1NWYWx1ZUxpc3QuCiAgICAgUmVmUHRyPENTU1ZhbHVlPiB0ZXh0RGVjb3JhdGlv
biA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24p
OwotICAgIGlmICh0ZXh0RGVjb3JhdGlvbiAmJiB0ZXh0RGVjb3JhdGlvbi0+aXNWYWx1ZUxpc3Qo
KSkgeworICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KHRleHREZWNvcmF0aW9uLmdldCgpKSkgewog
ICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHVuZGVybGluZSA9IGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVVuZGVybGluZSk7CiAgICAgICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGluZVRocm91Z2ggPSBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVMaW5lVGhyb3VnaCk7CiAKLSAgICAgICAgUmVmUHRy
PENTU1ZhbHVlTGlzdD4gbmV3VGV4dERlY29yYXRpb24gPSB0b0NTU1ZhbHVlTGlzdCh0ZXh0RGVj
b3JhdGlvbi5nZXQoKSktPmNvcHkoKTsKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbmV3
VGV4dERlY29yYXRpb24gPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KCp0ZXh0RGVjb3JhdGlvbiku
Y29weSgpOwogICAgICAgICBpZiAobmV3VGV4dERlY29yYXRpb24tPnJlbW92ZUFsbCh1bmRlcmxp
bmUuZ2V0KCkpKQogICAgICAgICAgICAgbV9hcHBseVVuZGVybGluZSA9IHRydWU7CiAgICAgICAg
IGlmIChuZXdUZXh0RGVjb3JhdGlvbi0+cmVtb3ZlQWxsKGxpbmVUaHJvdWdoLmdldCgpKSkKQEAg
LTE0ODksOSArMTQ4OSw5IEBAIHZvaWQgU3R5bGVDaGFuZ2U6OmV4dHJhY3RUZXh0U3R5bGVzKERv
Y3VtZW50KiBkb2N1bWVudCwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyoKICAgICBzdHlsZS0+cmVt
b3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5KTsKIAogICAgIGlmIChSZWZQdHI8Q1NT
VmFsdWU+IGZvbnRTaXplID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlG
b250U2l6ZSkpIHsKLSAgICAgICAgaWYgKCFmb250U2l6ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQor
ICAgICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqZm9udFNpemUpKQogICAgICAgICAg
ICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUpOyAvLyBDYW4ndCBt
YWtlIHNlbnNlIG9mIHRoZSBudW1iZXIuIFB1dCBubyBmb250IHNpemUuCi0gICAgICAgIGVsc2Ug
aWYgKGludCBsZWdhY3lGb250U2l6ZSA9IGxlZ2FjeUZvbnRTaXplRnJvbUNTU1ZhbHVlKGRvY3Vt
ZW50LCB0b0NTU1ByaW1pdGl2ZVZhbHVlKGZvbnRTaXplLmdldCgpKSwKKyAgICAgICAgZWxzZSBp
ZiAoaW50IGxlZ2FjeUZvbnRTaXplID0gbGVnYWN5Rm9udFNpemVGcm9tQ1NTVmFsdWUoZG9jdW1l
bnQsIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihmb250U2l6ZS5nZXQoKSksCiAgICAgICAg
ICAgICAgICAgc2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUsIFVzZUxlZ2FjeUZvbnRTaXpl
T25seUlmUGl4ZWxWYWx1ZXNNYXRjaCkpIHsKICAgICAgICAgICAgIG1fYXBwbHlGb250U2l6ZSA9
IFN0cmluZzo6bnVtYmVyKGxlZ2FjeUZvbnRTaXplKTsKICAgICAgICAgICAgIHN0eWxlLT5yZW1v
dmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplKTsKQEAgLTE1MDIsMjggKzE1MDIsMjYgQEAg
dm9pZCBTdHlsZUNoYW5nZTo6ZXh0cmFjdFRleHRTdHlsZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzKgogc3RhdGljIHZvaWQgZGlmZlRleHREZWNvcmF0aW9ucyhN
dXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0SUQsIENT
U1ZhbHVlKiByZWZUZXh0RGVjb3JhdGlvbikKIHsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHRE
ZWNvcmF0aW9uID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydElEKTsKLSAgICBp
ZiAoIXRleHREZWNvcmF0aW9uIHx8ICF0ZXh0RGVjb3JhdGlvbi0+aXNWYWx1ZUxpc3QoKSB8fCAh
cmVmVGV4dERlY29yYXRpb24gfHwgIXJlZlRleHREZWNvcmF0aW9uLT5pc1ZhbHVlTGlzdCgpKQor
ICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0Pih0ZXh0RGVjb3JhdGlvbi5nZXQoKSkgfHwgIWlzPENT
U1ZhbHVlTGlzdD4ocmVmVGV4dERlY29yYXRpb24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBS
ZWZQdHI8Q1NTVmFsdWVMaXN0PiBuZXdUZXh0RGVjb3JhdGlvbiA9IHRvQ1NTVmFsdWVMaXN0KHRl
eHREZWNvcmF0aW9uLmdldCgpKS0+Y29weSgpOwotICAgIENTU1ZhbHVlTGlzdCogdmFsdWVzSW5S
ZWZUZXh0RGVjb3JhdGlvbiA9IHRvQ1NTVmFsdWVMaXN0KHJlZlRleHREZWNvcmF0aW9uKTsKKyAg
ICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBuZXdUZXh0RGVjb3JhdGlvbiA9IGRvd25jYXN0PENTU1Zh
bHVlTGlzdD4oKnRleHREZWNvcmF0aW9uKS5jb3B5KCk7CisgICAgQ1NTVmFsdWVMaXN0JiB2YWx1
ZXNJblJlZlRleHREZWNvcmF0aW9uID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0PigqcmVmVGV4dERl
Y29yYXRpb24pOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXNJblJlZlRleHRE
ZWNvcmF0aW9uLT5sZW5ndGgoKTsgaSsrKQotICAgICAgICBuZXdUZXh0RGVjb3JhdGlvbi0+cmVt
b3ZlQWxsKHZhbHVlc0luUmVmVGV4dERlY29yYXRpb24tPml0ZW0oaSkpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdmFsdWVzSW5SZWZUZXh0RGVjb3JhdGlvbi5sZW5ndGgoKTsgKytpKQor
ICAgICAgICBuZXdUZXh0RGVjb3JhdGlvbi0+cmVtb3ZlQWxsKHZhbHVlc0luUmVmVGV4dERlY29y
YXRpb24uaXRlbShpKSk7CiAKICAgICBzZXRUZXh0RGVjb3JhdGlvblByb3BlcnR5KHN0eWxlLCBu
ZXdUZXh0RGVjb3JhdGlvbi5nZXQoKSwgcHJvcGVydElEKTsKIH0KIAogc3RhdGljIGJvb2wgZm9u
dFdlaWdodElzQm9sZChDU1NWYWx1ZSogZm9udFdlaWdodCkKIHsKLSAgICBpZiAoIWZvbnRXZWln
aHQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWZvbnRXZWlnaHQtPmlzUHJpbWl0
aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPihmb250V2VpZ2h0KSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQmVjYXVzZSBiIHRhZyBjYW4gb25seSBi
b2xkIHRleHQsIHRoZXJlIGFyZSBvbmx5IHR3byBzdGF0ZXMgaW4gcGxhaW4gaHRtbDogYm9sZCBh
bmQgbm90IGJvbGQuCiAgICAgLy8gQ29sbGFwc2UgYWxsIG90aGVyIHZhbHVlcyB0byBlaXRoZXIg
b25lIG9mIHRoZXNlIHR3byBzdGF0ZXMgZm9yIGVkaXRpbmcgcHVycG9zZXMuCi0gICAgc3dpdGNo
ICh0b0NTU1ByaW1pdGl2ZVZhbHVlKGZvbnRXZWlnaHQpLT5nZXRWYWx1ZUlEKCkpIHsKKyAgICBz
d2l0Y2ggKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZm9udFdlaWdodCkuZ2V0VmFsdWVJ
RCgpKSB7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWUxMDA6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWUy
MDA6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWUzMDA6CkBAIC0xNjE1LDEyICsxNjEzLDEyIEBAIGJv
b2wgaXNUcmFuc3BhcmVudENvbG9yVmFsdWUoQ1NTVmFsdWUqIGNzc1ZhbHVlKQogewogICAgIGlm
ICghY3NzVmFsdWUpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICghY3NzVmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqY3NzVmFs
dWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVl
ID0gdG9DU1NQcmltaXRpdmVWYWx1ZShjc3NWYWx1ZSk7ICAgIAotICAgIGlmICh2YWx1ZS0+aXNS
R0JDb2xvcigpKQotICAgICAgICByZXR1cm4gIWFscGhhQ2hhbm5lbCh2YWx1ZS0+Z2V0UkdCQTMy
VmFsdWUoKSk7ICAgIAotICAgIHJldHVybiB2YWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVl
VHJhbnNwYXJlbnQ7CisgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlID0gZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KCpjc3NWYWx1ZSk7CisgICAgaWYgKHZhbHVlLmlzUkdCQ29sb3IoKSkK
KyAgICAgICAgcmV0dXJuICFhbHBoYUNoYW5uZWwodmFsdWUuZ2V0UkdCQTMyVmFsdWUoKSk7Cisg
ICAgcmV0dXJuIHZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZVRyYW5zcGFyZW50OwogfQog
CiBib29sIGhhc1RyYW5zcGFyZW50QmFja2dyb3VuZENvbG9yKFN0eWxlUHJvcGVydGllcyogc3R5
bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAppbmRleCA3ZGI2MzY0
ZGJhNGYzNTZlMjQxODlkNzE0ZWUyZGNkYzIwNTQwNGFhLi5jMGMxMjg3ZWQyNzA3M2JkMmQzNzBl
NTA3NjljZDgzNDRiOTk2YzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHAKQEAgLTEzOSw4ICsxMzksOCBAQCBzdGF0aWMgYm9vbCBleGVjdXRlVG9nZ2xlU3R5bGVJ
bkxpc3QoRnJhbWUmIGZyYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRQogCiAgICAg
UmVmUHRyPENTU1ZhbHVlPiBzZWxlY3RlZENTU1ZhbHVlID0gc2VsZWN0aW9uU3R5bGUtPnN0eWxl
KCktPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7CiAgICAgU3RyaW5nIG5ld1N0eWxl
ID0gQVNDSUlMaXRlcmFsKCJub25lIik7Ci0gICAgaWYgKHNlbGVjdGVkQ1NTVmFsdWUtPmlzVmFs
dWVMaXN0KCkpIHsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gc2VsZWN0ZWRDU1NWYWx1
ZUxpc3QgPSB0b0NTU1ZhbHVlTGlzdChzZWxlY3RlZENTU1ZhbHVlLmdldCgpKTsKKyAgICBpZiAo
aXM8Q1NTVmFsdWVMaXN0Pigqc2VsZWN0ZWRDU1NWYWx1ZSkpIHsKKyAgICAgICAgUmVmUHRyPENT
U1ZhbHVlTGlzdD4gc2VsZWN0ZWRDU1NWYWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+
KHNlbGVjdGVkQ1NTVmFsdWUuZ2V0KCkpOwogICAgICAgICBpZiAoIXNlbGVjdGVkQ1NTVmFsdWVM
aXN0LT5yZW1vdmVBbGwodmFsdWUpKQogICAgICAgICAgICAgc2VsZWN0ZWRDU1NWYWx1ZUxpc3Qt
PmFwcGVuZCgqdmFsdWUpOwogICAgICAgICBpZiAoc2VsZWN0ZWRDU1NWYWx1ZUxpc3QtPmxlbmd0
aCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVy
dGVyLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCmlu
ZGV4IDBkNWQzZmUwZjc5YTFiYjAxMTRjZDcxZjI3YzcxOWVjODRmYzAzOTguLjQyNjEyZTRlOWRj
MGU2MWVhMDZmODExZmUyODg0OGY1NzZmYTYxZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KQEAgLTcyMCw4ICs3MjAsOCBAQCBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBIVE1MQ29udmVydGVyQ2FjaGVzOjppbmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxl
bWVudChFbGVtZW50JgogCiBzdGF0aWMgYm9vbCBzdHJpbmdGcm9tQ1NTVmFsdWUoQ1NTVmFsdWUm
IHZhbHVlLCBTdHJpbmcmIHJlc3VsdCkKIHsKLSAgICBpZiAodmFsdWUuaXNQcmltaXRpdmVWYWx1
ZSgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IHByaW1pdGl2ZVR5cGUgPSB0b0NTU1ByaW1p
dGl2ZVZhbHVlKHZhbHVlKS5wcmltaXRpdmVUeXBlKCk7CisgICAgaWYgKGlzPENTU1ByaW1pdGl2
ZVZhbHVlPih2YWx1ZSkpIHsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgcHJpbWl0aXZlVHlwZSA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkucHJpbWl0aXZlVHlwZSgpOwogICAg
ICAgICBpZiAocHJpbWl0aXZlVHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyB8
fCBwcmltaXRpdmVUeXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJIHx8CiAgICAgICAg
ICAgICBwcmltaXRpdmVUeXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQgfHwgcHJp
bWl0aXZlVHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0FUVFIpIHsKICAgICAgICAgICAg
IFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLmNzc1RleHQoKTsKQEAgLTg5MiwxMyArODkyLDEz
IEBAIGJvb2wgSFRNTENvbnZlcnRlckNhY2hlczo6ZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9kZShO
b2RlJiBub2RlLCBDU1NQcm9wZXJ0eUlEIHByCiAKICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93
bmNhc3Q8RWxlbWVudD4obm9kZSk7CiAgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBj
b21wdXRlZFN0eWxlUHJvcGVydHlGb3JFbGVtZW50KGVsZW1lbnQsIHByb3BlcnR5SWQpKSB7Ci0g
ICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpICYmIGZsb2F0VmFsdWVGcm9tUHJp
bWl0aXZlVmFsdWUodG9DU1NQcmltaXRpdmVWYWx1ZSgqdmFsdWUpLCByZXN1bHQpKQorICAgICAg
ICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgZmxvYXRWYWx1ZUZyb21Qcmlt
aXRpdmVWYWx1ZShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSwgcmVzdWx0KSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGJvb2wgaW5oZXJpdCA9IGZh
bHNlOwogICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gaW5saW5lU3R5bGVQcm9wZXJ0
eUZvckVsZW1lbnQoZWxlbWVudCwgcHJvcGVydHlJZCkpIHsKLSAgICAgICAgaWYgKHZhbHVlLT5p
c1ByaW1pdGl2ZVZhbHVlKCkgJiYgZmxvYXRWYWx1ZUZyb21QcmltaXRpdmVWYWx1ZSh0b0NTU1By
aW1pdGl2ZVZhbHVlKCp2YWx1ZSksIHJlc3VsdCkpCisgICAgICAgIGlmIChpczxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKSAmJiBmbG9hdFZhbHVlRnJvbVByaW1pdGl2ZVZhbHVlKGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLCByZXN1bHQpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKQogICAgICAgICAg
ICAgaW5oZXJpdCA9IHRydWU7CkBAIC0xMDYxLDE0ICsxMDYxLDE0IEBAIENvbG9yIEhUTUxDb252
ZXJ0ZXJDYWNoZXM6OmNvbG9yUHJvcGVydHlWYWx1ZUZvck5vZGUoTm9kZSYgbm9kZSwgQ1NTUHJv
cGVydHlJRCBwCiAKICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4obm9k
ZSk7CiAgICAgaWYgKFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBjb21wdXRlZFN0eWxlUHJvcGVy
dHlGb3JFbGVtZW50KGVsZW1lbnQsIHByb3BlcnR5SWQpKSB7Ci0gICAgICAgIGlmICh2YWx1ZS0+
aXNQcmltaXRpdmVWYWx1ZSgpICYmIHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVlKS5pc1JHQkNv
bG9yKCkpCi0gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZENvbG9yKENvbG9yKHRvQ1NTUHJp
bWl0aXZlVmFsdWUoKnZhbHVlKS5nZXRSR0JBMzJWYWx1ZSgpKSwgcHJvcGVydHlJZCA9PSBDU1NQ
cm9wZXJ0eUNvbG9yKTsKKyAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUp
ICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzUkdCQ29sb3IoKSkKKyAg
ICAgICAgICAgIHJldHVybiBub3JtYWxpemVkQ29sb3IoQ29sb3IoZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0UkdCQTMyVmFsdWUoKSksIHByb3BlcnR5SWQgPT0gQ1NTUHJv
cGVydHlDb2xvcik7CiAgICAgfQogCiAgICAgYm9vbCBpbmhlcml0ID0gZmFsc2U7CiAgICAgaWYg
KFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBpbmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChl
bGVtZW50LCBwcm9wZXJ0eUlkKSkgewotICAgICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFs
dWUoKSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSkuaXNSR0JDb2xvcigpKQotICAgICAg
ICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRDb2xvcihDb2xvcih0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2
YWx1ZSkuZ2V0UkdCQTMyVmFsdWUoKSksIHByb3BlcnR5SWQgPT0gQ1NTUHJvcGVydHlDb2xvcik7
CisgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5pc1JHQkNvbG9yKCkpCisgICAgICAgICAgICByZXR1
cm4gbm9ybWFsaXplZENvbG9yKENvbG9yKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpLmdldFJHQkEzMlZhbHVlKCkpLCBwcm9wZXJ0eUlkID09IENTU1Byb3BlcnR5Q29sb3IpOwog
ICAgICAgICBpZiAodmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKSkKICAgICAgICAgICAgIGluaGVy
aXQgPSB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFy
a3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAppbmRleCA5MGY0NTVi
NmMxNjk4NmE3YWJlMTM4YzhjNTk4MjNlMDI2MTkxZjA5Li4wZThmZjgzN2ZlZTQwYmZjMDIxZDlm
YzJmOTllYjEyM2QzYjQyZGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
cmt1cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCkBAIC00NzYs
OSArNDc2LDkgQEAgc3RhdGljIGJvb2wgcHJvcGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZShTdHls
ZVByb3BlcnRpZXMqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHAKICAgICBSZWZQdHI8Q1NTVmFsdWU+
IHZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlJRCk7CiAgICAgaWYg
KCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRp
dmVWYWx1ZSgpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS5n
ZXQoKSktPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmU7CisgICAgcmV0dXJuIGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmU7
CiB9CiAKIHN0YXRpYyBib29sIG5lZWRJbnRlcmNoYW5nZU5ld2xpbmVBZnRlcihjb25zdCBWaXNp
YmxlUG9zaXRpb24mIHYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJp
YWxpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4
IGJhYzRmMjEzY2MyOTliZGRlZjc0MjE0ZWZkNDM4YTNiMzNkMTQwZDMuLjE5NDZiOTM2YjNhNzMy
ZDNkMzFiMjkwYjAxZTRiYzUxMzE5ZDRmMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlh
bGl6ZXIuY3BwCkBAIC0zMjgsMTAgKzMyOCwxMCBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpyZXRy
aWV2ZVJlc291cmNlc0ZvclByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZQog
ICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBzdHlsZURlY2xhcmF0aW9uLT5wcm9wZXJ0eUNv
dW50KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7ICsraSkg
ewogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0gc3R5bGVEZWNsYXJhdGlvbi0+
cHJvcGVydHlBdChpKS52YWx1ZSgpOwotICAgICAgICBpZiAoIWNzc1ZhbHVlLT5pc0ltYWdlVmFs
dWUoKSkKKyAgICAgICAgaWYgKCFpczxDU1NJbWFnZVZhbHVlPigqY3NzVmFsdWUpKQogICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgU3R5bGVJbWFnZSogc3R5bGVJbWFnZSA9IHRvQ1NT
SW1hZ2VWYWx1ZShjc3NWYWx1ZS5nZXQoKSktPmNhY2hlZE9yUGVuZGluZ0ltYWdlKCk7CisgICAg
ICAgIFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2UgPSBkb3duY2FzdDxDU1NJbWFnZVZhbHVlPigqY3Nz
VmFsdWUpLmNhY2hlZE9yUGVuZGluZ0ltYWdlKCk7CiAgICAgICAgIC8vIE5vbiBjYWNoZWQtaW1h
Z2VzIGFyZSBqdXN0IHBsYWNlLWhvbGRlcnMgYW5kIGRvIG5vdCBjb250YWluIGRhdGEuCiAgICAg
ICAgIGlmICghc3R5bGVJbWFnZSB8fCAhc3R5bGVJbWFnZS0+aXNDYWNoZWRJbWFnZSgpKQogICAg
ICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKaW5kZXggN2YwNmNmZTA1ZWVlZGY0NDA0Nzk5
OGE4OWUwNTFlY2YzMWFkZTMzZC4uYmVhODUzZWU5ZTk0MTdlODA5NjY0MDMxMjFjNTMxYTI5MDkw
N2Y4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVy
dHlBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1By
b3BlcnR5QW5pbWF0aW9uLmNwcApAQCAtMjk3LDE4ICsyOTcsMTggQEAgc3RhdGljIGlubGluZSBQ
YXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRnVuYyhjb25zdCBBbmltYXRpb25CYXNlKiBhbmlt
LCBTdHlsZUkKICAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVyYXRlZCA9
IHRvU3R5bGVHZW5lcmF0ZWRJbWFnZShmcm9tKS0+aW1hZ2VWYWx1ZSgpOwogICAgICAgICBDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlJiB0b0dlbmVyYXRlZCA9IHRvU3R5bGVHZW5lcmF0ZWRJbWFnZSh0
byktPmltYWdlVmFsdWUoKTsKIAotICAgICAgICBpZiAoZnJvbUdlbmVyYXRlZC5pc0ZpbHRlcklt
YWdlVmFsdWUoKSAmJiB0b0dlbmVyYXRlZC5pc0ZpbHRlckltYWdlVmFsdWUoKSkgeworICAgICAg
ICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oZnJvbUdlbmVyYXRlZCkgJiYgaXM8Q1NTRmls
dGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0ZWQpKSB7CiAgICAgICAgICAgICAvLyBBbmltYXRpb24g
b2YgZ2VuZXJhdGVkIGltYWdlcyBqdXN0IHBvc3NpYmxlIGlmIGlucHV0IGltYWdlcyBhcmUgZXF1
YWwuCiAgICAgICAgICAgICAvLyBPdGhlcndpc2UgZmFsbCBiYWNrIHRvIGNyb3NzIGZhZGUgYW5p
bWF0aW9uLgotICAgICAgICAgICAgQ1NTRmlsdGVySW1hZ2VWYWx1ZSYgZnJvbUZpbHRlciA9IHRv
Q1NTRmlsdGVySW1hZ2VWYWx1ZShmcm9tR2VuZXJhdGVkKTsKLSAgICAgICAgICAgIENTU0ZpbHRl
ckltYWdlVmFsdWUmIHRvRmlsdGVyID0gdG9DU1NGaWx0ZXJJbWFnZVZhbHVlKHRvR2VuZXJhdGVk
KTsKKyAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSBkb3duY2Fz
dDxDU1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKTsKKyAgICAgICAgICAgIENTU0Zp
bHRlckltYWdlVmFsdWUmIHRvRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4o
dG9HZW5lcmF0ZWQpOwogICAgICAgICAgICAgaWYgKGZyb21GaWx0ZXIuZXF1YWxJbnB1dEltYWdl
cyh0b0ZpbHRlcikgJiYgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpKQogICAgICAgICAgICAgICAg
IHJldHVybiBibGVuZEZpbHRlcihhbmltLCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21G
aWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIHBy
b2dyZXNzKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChmcm9tR2VuZXJhdGVkLmlzQ3Jvc3Nm
YWRlVmFsdWUoKSAmJiB0b0dlbmVyYXRlZC5pc0Nyb3NzZmFkZVZhbHVlKCkpIHsKLSAgICAgICAg
ICAgIENTU0Nyb3NzZmFkZVZhbHVlJiBmcm9tQ3Jvc3NmYWRlID0gdG9DU1NDcm9zc2ZhZGVWYWx1
ZShmcm9tR2VuZXJhdGVkKTsKLSAgICAgICAgICAgIENTU0Nyb3NzZmFkZVZhbHVlJiB0b0Nyb3Nz
ZmFkZSA9IHRvQ1NTQ3Jvc3NmYWRlVmFsdWUodG9HZW5lcmF0ZWQpOworICAgICAgICBpZiAoaXM8
Q1NTQ3Jvc3NmYWRlVmFsdWU+KGZyb21HZW5lcmF0ZWQpICYmIGlzPENTU0Nyb3NzZmFkZVZhbHVl
Pih0b0dlbmVyYXRlZCkpIHsKKyAgICAgICAgICAgIENTU0Nyb3NzZmFkZVZhbHVlJiBmcm9tQ3Jv
c3NmYWRlID0gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KGZyb21HZW5lcmF0ZWQpOworICAg
ICAgICAgICAgQ1NTQ3Jvc3NmYWRlVmFsdWUmIHRvQ3Jvc3NmYWRlID0gZG93bmNhc3Q8Q1NTQ3Jv
c3NmYWRlVmFsdWU+KHRvR2VuZXJhdGVkKTsKICAgICAgICAgICAgIGlmIChmcm9tQ3Jvc3NmYWRl
LmVxdWFsSW5wdXRJbWFnZXModG9Dcm9zc2ZhZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBT
dHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoKnRvQ3Jvc3NmYWRlLmJsZW5kKGZyb21Dcm9zc2Zh
ZGUsIHByb2dyZXNzKSk7CiAgICAgICAgIH0KQEAgLTMxNywxNiArMzE3LDE2IEBAIHN0YXRpYyBp
bmxpbmUgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBibGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9uQmFz
ZSogYW5pbSwgU3R5bGVJCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTk5NTYKICAgICB9IGVsc2UgaWYgKGZyb20tPmlzR2VuZXJhdGVkSW1hZ2Uo
KSAmJiB0by0+aXNDYWNoZWRJbWFnZSgpKSB7CiAgICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFs
dWUmIGZyb21HZW5lcmF0ZWQgPSB0b1N0eWxlR2VuZXJhdGVkSW1hZ2UoZnJvbSktPmltYWdlVmFs
dWUoKTsKLSAgICAgICAgaWYgKGZyb21HZW5lcmF0ZWQuaXNGaWx0ZXJJbWFnZVZhbHVlKCkpIHsK
LSAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSB0b0NTU0ZpbHRl
ckltYWdlVmFsdWUoZnJvbUdlbmVyYXRlZCk7CisgICAgICAgIGlmIChpczxDU1NGaWx0ZXJJbWFn
ZVZhbHVlPihmcm9tR2VuZXJhdGVkKSkgeworICAgICAgICAgICAgQ1NTRmlsdGVySW1hZ2VWYWx1
ZSYgZnJvbUZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0
ZWQpOwogICAgICAgICAgICAgaWYgKGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSAmJiB0b1N0eWxl
Q2FjaGVkSW1hZ2UodG8pLT5jYWNoZWRJbWFnZSgpID09IGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2Uo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0ZXIoYW5pbSwgZnJvbUZpbHRlci5j
YWNoZWRJbWFnZSgpLCBmcm9tRmlsdGVyLmZpbHRlck9wZXJhdGlvbnMoKSwgRmlsdGVyT3BlcmF0
aW9ucygpLCBwcm9ncmVzcyk7CiAgICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IEFkZCBpbnRl
cnBvbGF0aW9uIGJldHdlZW4gY3Jvc3MtZmFkZSBhbmQgaW1hZ2Ugc291cmNlLgogICAgIH0gZWxz
ZSBpZiAoZnJvbS0+aXNDYWNoZWRJbWFnZSgpICYmIHRvLT5pc0dlbmVyYXRlZEltYWdlKCkpIHsK
ICAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgdG9HZW5lcmF0ZWQgPSB0b1N0eWxlR2Vu
ZXJhdGVkSW1hZ2UodG8pLT5pbWFnZVZhbHVlKCk7Ci0gICAgICAgIGlmICh0b0dlbmVyYXRlZC5p
c0ZpbHRlckltYWdlVmFsdWUoKSkgewotICAgICAgICAgICAgQ1NTRmlsdGVySW1hZ2VWYWx1ZSYg
dG9GaWx0ZXIgPSB0b0NTU0ZpbHRlckltYWdlVmFsdWUodG9HZW5lcmF0ZWQpOworICAgICAgICBp
ZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0ZWQpKSB7CisgICAgICAgICAgICBD
U1NGaWx0ZXJJbWFnZVZhbHVlJiB0b0ZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFs
dWU+KHRvR2VuZXJhdGVkKTsKICAgICAgICAgICAgIGlmICh0b0ZpbHRlci5jYWNoZWRJbWFnZSgp
ICYmIHRvU3R5bGVDYWNoZWRJbWFnZShmcm9tKS0+Y2FjaGVkSW1hZ2UoKSA9PSB0b0ZpbHRlci5j
YWNoZWRJbWFnZSgpKSAgICAgCiAgICAgICAgICAgICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGFu
aW0sIHRvRmlsdGVyLmNhY2hlZEltYWdlKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgdG9GaWx0ZXIu
ZmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCmluZGV4IDQwMzVmNjYwNDE5ZWFm
NTA4M2FkYjNkM2ViODFjMmQ5YTE5ODc3OTMuLmY0MmVjZTc2NjZjM2VkNzFmMGQ1ZDE1NjdkNmJl
MTYwOTU1Y2Q3ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sLmNwcApAQCAtODQsOCArODQsOCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjphZGp1
c3RJbm5lclRleHRTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRTdHlsZSwgUmVuZAogICAg
IGlmIChIVE1MRWxlbWVudCogaW5uZXJUZXh0ID0gY29udHJvbC5pbm5lclRleHRFbGVtZW50KCkp
IHsKICAgICAgICAgaWYgKGNvbnN0IFN0eWxlUHJvcGVydGllcyogcHJvcGVydGllcyA9IGlubmVy
VGV4dC0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkgewogICAgICAgICAgICAgUmVmUHRy
PENTU1ZhbHVlPiB2YWx1ZSA9IHByb3BlcnRpZXMtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJv
cGVydHlXZWJraXRVc2VyTW9kaWZ5KTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+
aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgICAgIHRleHRCbG9ja1N0eWxlLT5zZXRV
c2VyTW9kaWZ5KHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVlKSk7CisgICAgICAgICAgICBpZiAo
aXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlLmdldCgpKSkKKyAgICAgICAgICAgICAgICB0ZXh0
QmxvY2tTdHlsZS0+c2V0VXNlck1vZGlmeShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TdHlsZVBlbmRpbmdJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1N0eWxlUGVuZGluZ0ltYWdlLmgKaW5kZXggYjk1NDg2ODU0YWExYzlhY2I2YTFh
YjkyMjAzZDc5NDE0MTYwNmIwNS4uNTk5ZGEwNDdhYjYzZDY0ODJiYWE0NTZlYmNkYjAyOGQyOTNk
ZWVhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUGVu
ZGluZ0ltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUGVu
ZGluZ0ltYWdlLmgKQEAgLTQ1LDEyICs0NSwxMiBAQCBjbGFzcyBTdHlsZVBlbmRpbmdJbWFnZSA6
IHB1YmxpYyBTdHlsZUltYWdlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHls
ZVBlbmRpbmdJbWFnZT4gY3JlYXRlKENTU1ZhbHVlKiB2YWx1ZSkgeyByZXR1cm4gYWRvcHRSZWYo
bmV3IFN0eWxlUGVuZGluZ0ltYWdlKHZhbHVlKSk7IH0KIAotICAgIENTU0ltYWdlVmFsdWUqIGNz
c0ltYWdlVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlICYmIG1fdmFsdWUtPmlzSW1hZ2VW
YWx1ZSgpID8gdG9DU1NJbWFnZVZhbHVlKG1fdmFsdWUpIDogbnVsbHB0cjsgfQorICAgIENTU0lt
YWdlVmFsdWUqIGNzc0ltYWdlVmFsdWUoKSBjb25zdCB7IHJldHVybiBpczxDU1NJbWFnZVZhbHVl
PihtX3ZhbHVlKSA/IGRvd25jYXN0PENTU0ltYWdlVmFsdWU+KG1fdmFsdWUpIDogbnVsbHB0cjsg
fQogICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqIGNzc0ltYWdlR2VuZXJhdG9yVmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlICYmIG1fdmFsdWUtPmlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgp
ID8gc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KG1fdmFsdWUpIDogbnVsbHB0
cjsgfQotICAgIENTU0N1cnNvckltYWdlVmFsdWUqIGNzc0N1cnNvckltYWdlVmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlICYmIG1fdmFsdWUtPmlzQ3Vyc29ySW1hZ2VWYWx1ZSgpID8gdG9D
U1NDdXJzb3JJbWFnZVZhbHVlKG1fdmFsdWUpIDogbnVsbHB0cjsgfQorICAgIENTU0N1cnNvcklt
YWdlVmFsdWUqIGNzc0N1cnNvckltYWdlVmFsdWUoKSBjb25zdCB7IHJldHVybiBpczxDU1NDdXJz
b3JJbWFnZVZhbHVlPihtX3ZhbHVlKSA/IGRvd25jYXN0PENTU0N1cnNvckltYWdlVmFsdWU+KG1f
dmFsdWUpIDogbnVsbHB0cjsgfQogCiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi0gICAgQ1NT
SW1hZ2VTZXRWYWx1ZSogY3NzSW1hZ2VTZXRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUg
JiYgbV92YWx1ZS0+aXNJbWFnZVNldFZhbHVlKCkgPyB0b0NTU0ltYWdlU2V0VmFsdWUobV92YWx1
ZSkgOiBudWxscHRyOyB9CisgICAgQ1NTSW1hZ2VTZXRWYWx1ZSogY3NzSW1hZ2VTZXRWYWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIGlzPENTU0ltYWdlU2V0VmFsdWU+KG1fdmFsdWUpID8gZG93bmNhc3Q8
Q1NTSW1hZ2VTZXRWYWx1ZT4obV92YWx1ZSkgOiBudWxscHRyOyB9CiAjZW5kaWYKIAogICAgIHZv
aWQgZGV0YWNoRnJvbUNTU1ZhbHVlKCkgeyBtX3ZhbHVlID0gbnVsbHB0cjsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NvbG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Q29sb3IuaAppbmRleCA0NjBjZjAyOThjOGE0ZjM2MDY5MTJhMTIzNTI1ZTIwN2I5NTgzNWVhLi4w
MDc1ZWRlY2FkN2Y2NWViYjk0OWNkMzAwNTAwMDM3YmFlMmM0NzI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQ29sb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ29s
b3IuaApAQCAtOTIsOCArOTIsOCBAQCBwcml2YXRlOgogICAgIFNWR0NvbG9yVHlwZSBtX2NvbG9y
VHlwZTsKIH07CiAKLUNTU19WQUxVRV9UWVBFX0NBU1RTKFNWR0NvbG9yLCBpc1NWR0NvbG9yKCkp
OwotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NT
X1ZBTFVFKFNWR0NvbG9yLCBpc1NWR0NvbG9yKCkpCisKICNlbmRpZiAvLyBTVkdDb2xvcl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCmluZGV4IDA2ZGQyNDgwNGIy
NDdlNWQ5MzZmNTU0MWQ4MGJkY2I1NjY2MDUzMGIuLjY5MGVmN2EyMjgzNWNhNDQ4ZTMxYWY4Yjhi
N2NhMWRjZDNhYWEzYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFj
ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQu
Y3BwCkBAIC0yNTMsMTEgKzI1MywxMSBAQCB2b2lkIFNWR0ZvbnRGYWNlRWxlbWVudDo6cmVidWls
ZEZvbnRGYWNlKCkKICAgICBpZiAoZGVzY3JpYmVzUGFyZW50Rm9udCkgeyAgICAKICAgICAgICAg
Ly8gVHJhdmVyc2UgcGFyc2VkIENTUyB2YWx1ZXMgYW5kIGFzc29jaWF0ZSBDU1NGb250RmFjZVNy
Y1ZhbHVlIGVsZW1lbnRzIHdpdGggb3Vyc2VsdmVzLgogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+
IHNyYyA9IG1fZm9udEZhY2VSdWxlLT5wcm9wZXJ0aWVzKCkuZ2V0UHJvcGVydHlDU1NWYWx1ZShD
U1NQcm9wZXJ0eVNyYyk7Ci0gICAgICAgIENTU1ZhbHVlTGlzdCogc3JjTGlzdCA9IHRvQ1NTVmFs
dWVMaXN0KHNyYy5nZXQoKSk7CisgICAgICAgIENTU1ZhbHVlTGlzdCogc3JjTGlzdCA9IGRvd25j
YXN0PENTU1ZhbHVlTGlzdD4oc3JjLmdldCgpKTsKIAogICAgICAgICB1bnNpZ25lZCBzcmNMZW5n
dGggPSBzcmNMaXN0ID8gc3JjTGlzdC0+bGVuZ3RoKCkgOiAwOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc3JjTGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChDU1NGb250
RmFjZVNyY1ZhbHVlKiBpdGVtID0gdG9DU1NGb250RmFjZVNyY1ZhbHVlKHNyY0xpc3QtPml0ZW1X
aXRob3V0Qm91bmRzQ2hlY2soaSkpKQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c3JjTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChDU1NGb250RmFjZVNyY1ZhbHVlKiBp
dGVtID0gZG93bmNhc3Q8Q1NTRm9udEZhY2VTcmNWYWx1ZT4oc3JjTGlzdC0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjayhpKSkpCiAgICAgICAgICAgICAgICAgaXRlbS0+c2V0U1ZHRm9udEZhY2VFbGVt
ZW50KHRoaXMpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFpbnQuaAppbmRleCBkMzA5
M2FmYjJhZTM4ZjlhNzcxNTU4ZGM4Yzc4MmRiMjkyNzMwZDA4Li5hYTM5YzdlMGI5OTc3MTNjYmM5
MTYxZWRkNTY0NDBmNTAzMGQwM2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UGFpbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFpbnQuaApAQCAtMTEyLDggKzEx
Miw4IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdXJpOwogfTsKIAotQ1NTX1ZBTFVFX1RZUEVf
Q0FTVFMoU1ZHUGFpbnQsIGlzU1ZHUGFpbnQoKSk7Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoU1ZHUGFpbnQsIGlzU1ZHUGFpbnQo
KSkKKwogI2VuZGlmIC8vIFNWR1BhaW50X2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>