<?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>212512</bug_id>
          
          <creation_ts>2020-05-28 23:40:47 -0700</creation_ts>
          <short_desc>[JSC] JSBigInt allocation should be graceful for OOM</short_desc>
          <delta_ts>2020-05-30 20:01:14 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jsbell</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1657165</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-28 23:40:47 -0700</bug_when>
    <thetext>&lt;rdar://problem/63600600&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657167</commentid>
    <comment_count>1</comment_count>
      <attachid>400553</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-28 23:57:40 -0700</bug_when>
    <thetext>Created attachment 400553
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657170</commentid>
    <comment_count>2</comment_count>
      <attachid>400554</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-29 00:06:55 -0700</bug_when>
    <thetext>Created attachment 400554
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657171</commentid>
    <comment_count>3</comment_count>
      <attachid>400555</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-29 00:12:53 -0700</bug_when>
    <thetext>Created attachment 400555
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657172</commentid>
    <comment_count>4</comment_count>
      <attachid>400556</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-29 00:22:41 -0700</bug_when>
    <thetext>Created attachment 400556
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657174</commentid>
    <comment_count>5</comment_count>
      <attachid>400557</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-29 00:33:03 -0700</bug_when>
    <thetext>Created attachment 400557
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657175</commentid>
    <comment_count>6</comment_count>
      <attachid>400554</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-29 00:35:46 -0700</bug_when>
    <thetext>Comment on attachment 400554
Patch

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

&gt; Source/JavaScriptCore/runtime/JSBigInt.cpp:85
&gt; +inline JSBigInt* JSBigInt::createZero(JSGlobalObject* nullOrGlobalObjectForOOM, VM&amp; vm)

Use Optional?

&gt; Source/JavaScriptCore/runtime/JSBigInt.cpp:95
&gt; +inline JSBigInt* JSBigInt::createWithLength(JSGlobalObject* nullOrGlobalObjectForOOM, VM&amp; vm, unsigned length)

Is there a good reason to not use Optional&lt;JSGlobalObject&gt; here?

&gt; Source/JavaScriptCore/runtime/JSBigInt.cpp:126
&gt; +inline JSBigInt* JSBigInt::createFrom(JSGlobalObject* nullOrGlobalObjectForOOM, VM&amp; vm, int32_t value)

Ditto: use Optional here?

&gt; Source/JavaScriptCore/runtime/JSBigInt.cpp:318
&gt; +JSValue JSBigInt::parseInt(JSGlobalObject* nullOrGlobalObjectForOOM, VM&amp; vm, StringView s, uint8_t radix, ErrorParseMode parserMode, ParseIntSign sign)

Ditto.

&gt; Source/JavaScriptCore/runtime/JSBigInt.cpp:1541
&gt; +bool JSBigInt::absoluteDivWithDigitDivisor(JSGlobalObject* nullOrGlobalObjectForOOM, VM&amp; vm, BigIntImpl x, Digit divisor, JSBigInt** quotient, Digit&amp; remainder)

Ditto.

&gt; Source/JavaScriptCore/runtime/JSBigInt.cpp:2155
&gt; +String JSBigInt::toStringBasePowerOfTwo(VM&amp; vm, JSGlobalObject* nullOrGlobalObjectForOOM, JSBigInt* x, unsigned radix)

Ditto.

&gt; Source/JavaScriptCore/runtime/JSBigInt.cpp:2304
&gt; +JSBigInt* JSBigInt::rightTrim(JSGlobalObject* nullOrGlobalObjectForOOM, VM&amp; vm)

Ditto.

&gt; Source/JavaScriptCore/runtime/JSBigInt.cpp:2345
&gt; +JSBigInt* JSBigInt::allocateFor(JSGlobalObject* nullOrGlobalObjectForOOM, VM&amp; vm, unsigned radix, unsigned charcount)

Ditto.

&gt; Source/JavaScriptCore/runtime/JSBigInt.cpp:2427
&gt; +JSValue JSBigInt::parseInt(JSGlobalObject* nullOrGlobalObjectForOOM, VM&amp; vm, CharType* data, unsigned length, unsigned startIndex, unsigned radix, ErrorParseMode errorParseMode, ParseIntSign sign, ParseIntMode parseMode)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657176</commentid>
    <comment_count>7</comment_count>
      <attachid>400557</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-29 00:38:07 -0700</bug_when>
    <thetext>Comment on attachment 400557
Patch

r=me if EWS bots are green.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657181</commentid>
    <comment_count>8</comment_count>
      <attachid>400554</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-29 01:48:39 -0700</bug_when>
    <thetext>Comment on attachment 400554
Patch

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

&gt;&gt; Source/JavaScriptCore/runtime/JSBigInt.cpp:85
&gt;&gt; +inline JSBigInt* JSBigInt::createZero(JSGlobalObject* nullOrGlobalObjectForOOM, VM&amp; vm)
&gt; 
&gt; Use Optional?

For now, I would like to keep the consistency with JSString&apos;s `JSGlobalObject* nullOrGlobalObjectForOOM`. We should consider introducing this, but I would like to do that at once.

&gt;&gt; Source/JavaScriptCore/runtime/JSBigInt.cpp:95
&gt;&gt; +inline JSBigInt* JSBigInt::createWithLength(JSGlobalObject* nullOrGlobalObjectForOOM, VM&amp; vm, unsigned length)
&gt; 
&gt; Is there a good reason to not use Optional&lt;JSGlobalObject&gt; here?

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657182</commentid>
    <comment_count>9</comment_count>
      <attachid>400559</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-29 01:50:14 -0700</bug_when>
    <thetext>Created attachment 400559
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657196</commentid>
    <comment_count>10</comment_count>
      <attachid>400563</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-29 03:07:29 -0700</bug_when>
    <thetext>Created attachment 400563
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657271</commentid>
    <comment_count>11</comment_count>
      <attachid>400563</attachid>
    <who name="Caio Lima">ticaiolima</who>
    <bug_when>2020-05-29 08:43:40 -0700</bug_when>
    <thetext>Comment on attachment 400563
Patch

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

LGTM as well. I pointed out the issue breaking on 32-bits.

&gt; Source/JavaScriptCore/runtime/JSBigInt.cpp:2558
&gt; +                    RELEASE_AND_RETURN(scope, JSBigInt::createFrom(nullOrGlobalObjectForOOM, static_cast&lt;int32_t&gt;(maybeResult)));

This call will cause segfault when globalObject is `nullptr`. This happens when `parseInt` is called  from `BytecodeGenerator.cpp`, for instance. This is one of the reasons of failures on ARMv7 and MIPS bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657519</commentid>
    <comment_count>12</comment_count>
      <attachid>400563</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-29 17:13:35 -0700</bug_when>
    <thetext>Comment on attachment 400563
Patch

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

&gt;&gt; Source/JavaScriptCore/runtime/JSBigInt.cpp:2558
&gt;&gt; +                    RELEASE_AND_RETURN(scope, JSBigInt::createFrom(nullOrGlobalObjectForOOM, static_cast&lt;int32_t&gt;(maybeResult)));
&gt; 
&gt; This call will cause segfault when globalObject is `nullptr`. This happens when `parseInt` is called  from `BytecodeGenerator.cpp`, for instance. This is one of the reasons of failures on ARMv7 and MIPS bots.

Nice catch. We should call `JSBigInt::createFrom(nullOrGlobalObjectForOOM, vm, static_cast&lt;int32_t&gt;(maybeResult))` instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657524</commentid>
    <comment_count>13</comment_count>
      <attachid>400639</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-29 17:27:38 -0700</bug_when>
    <thetext>Created attachment 400639
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657595</commentid>
    <comment_count>14</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-30 00:46:59 -0700</bug_when>
    <thetext>Committed r262342: &lt;https://trac.webkit.org/changeset/262342&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657724</commentid>
    <comment_count>15</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-30 20:01:14 -0700</bug_when>
    <thetext>Committed r262353: &lt;https://trac.webkit.org/changeset/262353&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400553</attachid>
            <date>2020-05-28 23:57:40 -0700</date>
            <delta_ts>2020-05-29 00:06:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212512-20200528235739.patch</filename>
            <type>text/plain</type>
            <size>91814</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMjc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MjI3NWIxOGQwNzg3ZGViOTNiMDA2ZjM3NWIxZjM1NzlhNGEyNDZkLi42MzVjM2JhMTFhODAzNGVl
YzE0MjBlMTI4ZjMwMWQ5OTlkMTI1N2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MSBAQAorMjAyMC0wNS0yOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEpTQmlnSW50IGFsbG9jYXRpb24gc2hvdWxkIGJlIGdyYWNlZnVs
IGZvciBPT00KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMjUxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggYWxsb3dzIEpTQmlnSW50J3Mgc3RvcmFnZSBhbGxvY2F0aW9uIHRvIGZhaWwg
Z3JhY2VmdWxseSBpZiBPT00gY29uZGl0aW9uIGhhcHBlbnMuCisgICAgICAgIFdlIHRocmVhZCBK
U0dsb2JhbE9iamVjdCogaW5zdGVhZCBvZiBWTSYgYW5kIHRocm93IE9PTSBlcnJvciBpZiBzdG9y
YWdlIGFsbG9jYXRpb24gZmFpbGVkLgorICAgICAgICBXZSBhbHNvIHJlbmFtZSBgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdGAgcGFyYW1ldGVyIHRvIGBKU0dsb2JhbE9iamVjdCogbnVsbE9y
R2xvYmFsT2JqZWN0Rm9yT09NYAorICAgICAgICBpZiBpdCBjYW4gYmUgbnVsbHB0ci4KKworICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAg
ICAoZnVuY3Rpb25DcmVhdGVIZWFwQmlnSW50KToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyQXJl
bmEuY3BwOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyQXJlbmE6Om1ha2VCaWdJbnREZWNpbWFs
SWRlbnRpZmllcik6CisgICAgICAgICogcnVudGltZS9CaWdJbnRDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OnRvQmlnSW50KToKKyAgICAgICAgKEpTQzo6Y2FsbEJpZ0ludENvbnN0cnVj
dG9yKToKKyAgICAgICAgKiBydW50aW1lL0JpZ0ludFByb3RvdHlwZS5jcHA6CisgICAgICAgIChK
U0M6OnRvVGhpc0JpZ0ludFZhbHVlKToKKyAgICAgICAgKEpTQzo6YmlnSW50UHJvdG9GdW5jVG9T
dHJpbmcpOgorICAgICAgICAoSlNDOjpiaWdJbnRQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6Cisg
ICAgICAgIChKU0M6OmJpZ0ludFByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAqIHJ1bnRpbWUv
Q2FjaGVkVHlwZXMuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZWRCaWdJbnQ6OmRlY29kZSBjb25z
dCk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdEZ1bmNGb3JtYXQpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3BwOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
dHJ5Q3JlYXRlWmVybyk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpjcmVhdGVaZXJvKToKKyAg
ICAgICAgKEpTQzo6SlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGgpOgorICAgICAgICAoSlNDOjpK
U0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojpj
cmVhdGVGcm9tKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnRyeUNyZWF0ZUZyb20pOgorICAg
ICAgICAoSlNDOjpKU0JpZ0ludDo6Y3JlYXRlRnJvbUltcGwpOgorICAgICAgICAoSlNDOjpKU0Jp
Z0ludDo6cGFyc2VJbnQpOgorICAgICAgICAoSlNDOjpIZWFwQmlnSW50SW1wbDo6dHJ5VG9IZWFw
QmlnSW50KToKKyAgICAgICAgKEpTQzo6SGVhcEJpZ0ludEltcGw6OnRvSGVhcEJpZ0ludCk6Cisg
ICAgICAgIChKU0M6OkludDMyQmlnSW50SW1wbDo6dHJ5VG9IZWFwQmlnSW50KToKKyAgICAgICAg
KEpTQzo6SW50MzJCaWdJbnRJbXBsOjp0b0hlYXBCaWdJbnQpOgorICAgICAgICAoSlNDOjp6ZXJv
SW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpleHBvbmVudGlhdGVJbXBsKToKKyAgICAg
ICAgKEpTQzo6SlNCaWdJbnQ6Om11bHRpcGx5SW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50
OjpkaXZpZGVJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmNvcHkpOgorICAgICAgICAo
SlNDOjpKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
dW5hcnlNaW51cyk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpyZW1haW5kZXJJbXBsKToKKyAg
ICAgICAgKEpTQzo6SlNCaWdJbnQ6OmluY0ltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
YWRkSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpzdWJJbXBsKToKKyAgICAgICAgKEpT
Qzo6SlNCaWdJbnQ6OmJpdHdpc2VBbmRJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmJp
dHdpc2VPckltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0d2lzZVhvckltcGwpOgor
ICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVBZGQpOgorICAgICAgICAoSlNDOjpKU0Jp
Z0ludDo6YWJzb2x1dGVTdWIpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVEaXZX
aXRoRGlnaXREaXZpc29yKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlRGl2V2l0
aEJpZ0ludERpdmlzb3IpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVMZWZ0U2hp
ZnRBbHdheXNDb3B5KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlQml0d2lzZU9w
KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlQW5kKToKKyAgICAgICAgKEpTQzo6
SlNCaWdJbnQ6OmFic29sdXRlT3IpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVB
bmROb3QpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVYb3IpOgorICAgICAgICAo
SlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVBZGRPbmUpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
YWJzb2x1dGVTdWJPbmUpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6bGVmdFNoaWZ0QnlBYnNv
bHV0ZSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpyaWdodFNoaWZ0QnlBYnNvbHV0ZSk6Cisg
ICAgICAgIChKU0M6OkpTQmlnSW50OjpyaWdodFNoaWZ0QnlNYXhpbXVtKToKKyAgICAgICAgKEpT
Qzo6SlNCaWdJbnQ6OnRvU3RyaW5nQmFzZVBvd2VyT2ZUd28pOgorICAgICAgICAoSlNDOjpKU0Jp
Z0ludDo6dG9TdHJpbmdHZW5lcmljKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnJpZ2h0VHJp
bSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphbGxvY2F0ZUZvcik6CisgICAgICAgIChKU0M6
OkpTQmlnSW50Ojphc0ludE5JbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFzVWludE5J
bXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnRydW5jYXRlVG9OQml0cyk6CisgICAgICAg
IChKU0M6OkpTQmlnSW50Ojp0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKToKKyAgICAgICAg
KEpTQzo6SlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQpOiBEZWxldGVkLgorICAg
ICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUu
Y3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjp0b1RoaXNTbG93Q2FzZSBjb25zdCk6CisgICAg
ICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisKIDIwMjAtMDUt
MjggIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IGFkZCBtaXNzaW5nIGNvbmRpdGlvbiBndWFyZHMgd2hlbiBnZW5lcmF0aW5nIG9iamMg
cHJvdG9jb2wgZmlsZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwYzY2NjhhNmYzYTNhM2NjZjJjMzg5YTU3ZTky
ZGIzZmExNzA4NTU1Li43ZWE3YWUzZmZkNTJkYzZkNjkyOTJlNjVjY2Y2MTZjM2Q0M2ZiMTY3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjAtMDUtMjggIFl1c3VrZSBTdXp1a2kgIDx5
c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBKU0JpZ0ludCBhbGxvY2F0aW9uIHNo
b3VsZCBiZSBncmFjZWZ1bCBmb3IgT09NCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTI1MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZEJpZ0ludCk6CisKIDIw
MjAtMDUtMjggIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtBcHBs
ZSBQYXldIEJ1dHRvbnMgcmVuZGVyIHdpdGggYSBjb3JuZXIgcmFkaXVzIG9mIFBLQXBwbGVQYXlC
dXR0b25EZWZhdWx0Q29ybmVyUmFkaXVzIGV2ZW4gd2hlbiBleHBsaWNpdGx5IHNwZWNpZnlpbmcg
ImJvcmRlci1yYWRpdXM6IDBweCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCmluZGV4IDNhNDFlNzYyZWM4ZDgzY2M0MmFjZTFkMTNiMmQ0Nzk2MmI0Njc1NzUu
LmQwMGVhMjk2MzYwMGM1MTEzYTg3OGIyY2VhZGNmNzU4MDlhYTFhYWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtMjg0MiwxMCArMjg0MiwxMCBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoTmVnYXRlKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgaWYgKHBy
aW1WYWx1ZS5pc0JpZ0ludDMyKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNC
aWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSkpOworICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6
dW5hcnlNaW51cyhnbG9iYWxPYmplY3QsIHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSkpKTsK
ICNlbmRpZgogICAgIGlmIChwcmltVmFsdWUuaXNIZWFwQmlnSW50KCkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5hc0hl
YXBCaWdJbnQoKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6
OmVuY29kZShKU0JpZ0ludDo6dW5hcnlNaW51cyhnbG9iYWxPYmplY3QsIHByaW1WYWx1ZS5hc0hl
YXBCaWdJbnQoKSkpKTsKIAogICAgIGRvdWJsZSBudW1iZXIgPSBwcmltVmFsdWUudG9OdW1iZXIo
Z2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKQEAgLTI4NzAsMTMgKzI4NzAsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwK
IAogI2lmIFVTRShCSUdJTlQzMikKICAgICBpZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkgewot
ICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFs
dWUuYmlnSW50MzJBc0ludDMyKCkpOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50
Ojp1bmFyeU1pbnVzKGdsb2JhbE9iamVjdCwgcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpKTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgYXJpdGhQ
cm9maWxlLT5vYnNlcnZlUmVzdWx0KHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKICAgICB9CiAjZW5kaWYKICAgICBpZiAocHJpbVZhbHVlLmlzSGVhcEJp
Z0ludCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXMo
dm0sIHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0g
SlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFsdWUuYXNIZWFwQmlnSW50
KCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBh
cml0aFByb2ZpbGUtPm9ic2VydmVSZXN1bHQocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KQEAgLTI5MTIsMTMgKzI5MTQsMTUgQEAgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1p
emUoSlNHbG9iYWxPYmplY3QKIAogI2lmIFVTRShCSUdJTlQzMikKICAgICBpZiAocHJpbVZhbHVl
LmlzQmlnSW50MzIoKSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFy
eU1pbnVzKHZtLCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpOworICAgICAgICBKU1ZhbHVl
IHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKGdsb2JhbE9iamVjdCwgcHJpbVZhbHVlLmJp
Z0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlUmVzdWx0KHJlc3VsdCk7CiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAjZW5kaWYKICAgICBpZiAo
cHJpbVZhbHVlLmlzSGVhcEJpZ0ludCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNC
aWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSk7CisgICAgICAg
IEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmlt
VmFsdWUuYXNIZWFwQmlnSW50KCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVSZXN1bHQocmVzdWx0KTsKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KQEAgLTI5NTQsMTAg
KzI5NTgsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5l
Z2F0ZU9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKICNpZiBVU0UoQklHSU5UMzIpCiAg
ICAgLy8gRklYTUU6IHdoeSBkb2VzIHRoaXMgZnVuY3Rpb24gcHJvZmlsZSB0aGUgYXJndW1lbnQg
YnV0IG5vdCB0aGUgcmVzdWx0PwogICAgIGlmIChwcmltVmFsdWUuaXNCaWdJbnQzMigpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmlt
VmFsdWUuYmlnSW50MzJBc0ludDMyKCkpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBw
cmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpKSk7CiAjZW5kaWYKICAgICBpZiAocHJpbVZhbHVl
LmlzSGVhcEJpZ0ludCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50
Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpKTsKKyAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWlu
dXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpKSk7CiAKICAgICBkb3Vi
bGUgbnVtYmVyID0gcHJpbVZhbHVlLnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CmluZGV4IGY2M2ZkNzAyNzJhN2FkMDc1N2ViMGJjYmE3OTQxZWExYjdjZjcxYWUuLmI4YzkyZjMw
OWYxNzNmNWI5ZmFlY2QyYzU2MzRmYWQ4NzJmY2RkN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBA
IC0yMjUyLDcgKzIyNTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
Q3JlYXRlSGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGJpZ0ludCk7CiAgICAgQVNTRVJUKGJpZ0ludC5pc0JpZ0ludDMy
KCkpOwogICAgIGludDMyX3QgdmFsdWUgPSBiaWdJbnQuYmlnSW50MzJBc0ludDMyKCk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgdmFsdWUpKTsK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6
Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIHZhbHVlKSkpOwogI2Vsc2UKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGJpZ0ludCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXJBcmVuYS5jcHAKaW5kZXggYWFjMDU2NjkwZTQxZWVkMGZiNjU5ZWFhNDQyYzk1
MmY2NTUzNzM4MC4uYzcxOTg4NjI0MWQzNTdiZjBlMzdhYTliYTcwODQ3ODQwZjEyM2Y0MyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5jcHAKQEAgLTk2LDkg
Kzk2LDEwIEBAIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUJpZ0ludERl
Y2ltYWxJZGVudGlmaWVyKFZNJiB2bSwgY29uc3QgSWRlCiAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzYyNwogICAgIEpTQmlnSW50KiBoZWFwQmlnSW50
OwogI2lmIFVTRShCSUdJTlQzMikKLSAgICBpZiAoYmlnSW50LmlzQmlnSW50MzIoKSkKLSAgICAg
ICAgaGVhcEJpZ0ludCA9IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCBiaWdJbnQuYmlnSW50MzJB
c0ludDMyKCkpOwotICAgIGVsc2UKKyAgICBpZiAoYmlnSW50LmlzQmlnSW50MzIoKSkgeworICAg
ICAgICBoZWFwQmlnSW50ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZUZyb20odm0sIGJpZ0ludC5iaWdJ
bnQzMkFzSW50MzIoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGhlYXBCaWdJbnQpOworICAg
IH0gZWxzZQogI2VuZGlmCiAgICAgICAgIGhlYXBCaWdJbnQgPSBiaWdJbnQuYXNIZWFwQmlnSW50
KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludENv
bnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludENvbnN0
cnVjdG9yLmNwcAppbmRleCA0ZmZiZmJiOTZkZDE3ZmFlMTk0N2I0NmJiYzgxZDk4NDJkYmMwZDA5
Li43ZTNkZTVlZWFkYjE2YzkxMjE2MTYyMWZkNGMyZWZiYTlhYmYzMDk3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50Q29uc3RydWN0b3IuY3BwCkBAIC04
Nyw3ICs4Nyw3IEBAIEpTVmFsdWUgdG9CaWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBhcmd1bWVudCkKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgICAgIHJldHVybiBq
c0JpZ0ludDMyKHByaW1pdGl2ZS5hc0Jvb2xlYW4oKSk7CiAjZWxzZQotICAgICAgICByZXR1cm4g
SlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIHByaW1pdGl2ZS5hc0Jvb2xlYW4oKSk7CisgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2Jq
ZWN0LCBwcmltaXRpdmUuYXNCb29sZWFuKCkpKTsKICNlbmRpZgogICAgIH0KIApAQCAtMTE2LDcg
KzExNiw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxCaWdJbnRD
b25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAjaWYgVVNFKEJJR0lOVDMyKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQmlnSW50MzIocHJpbWl0aXZlLmFzSW50MzIo
KSkpOwogI2Vsc2UKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6Y3Jl
YXRlRnJvbSh2bSwgcHJpbWl0aXZlLmFzSW50MzIoKSkpOworICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxP
YmplY3QsIHByaW1pdGl2ZS5hc0ludDMyKCkpKSk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTEyNCw3
ICsxMjQsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsQmlnSW50
Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbAogICAgICAgICBkb3VibGUgbnVtYmVy
ID0gcHJpbWl0aXZlLmFzRG91YmxlKCk7CiAgICAgICAgIGlmICghaXNJbnRlZ2VyKG51bWJlcikp
CiAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNy
ZWF0ZVJhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiTm90IGFuIGludGVnZXIiX3MpKTsKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6bWFrZUhlYXBCaWdJbnRPckJpZ0lu
dDMyKHZtLCBwcmltaXRpdmUuYXNEb3VibGUoKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6bWFrZUhlYXBCaWdJbnRPckJpZ0lu
dDMyKGdsb2JhbE9iamVjdCwgcHJpbWl0aXZlLmFzRG91YmxlKCkpKSk7CiAgICAgfQogCiAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9CaWdJbnQoZ2xvYmFs
T2JqZWN0LCBwcmltaXRpdmUpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9CaWdJbnRQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQmlnSW50UHJvdG90eXBlLmNwcAppbmRleCA0YTRiNmUyZTk4MmUwMjgzMWQ5ZTE2YWNiOTFk
YWVkYjQ2MzczMzdjLi4xZDhmYzAwMjRhMTk3ODFlM2JiZjdkZDMyYjJiMTRmYzAwYjEwOWM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRQcm90b3R5cGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludFByb3RvdHlwZS5j
cHAKQEAgLTc0LDEyICs3NCwxNSBAQCB2b2lkIEJpZ0ludFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCopCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyBB
TFdBWVNfSU5MSU5FIEpTQmlnSW50KiB0b1RoaXNCaWdJbnRWYWx1ZShWTSYgdm0sIEpTVmFsdWUg
dGhpc1ZhbHVlKQorc3RhdGljIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQqIHRvVGhpc0JpZ0ludFZh
bHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgLy8gRklYTUU6IGhl
YXAtYWxsb2NhdGluZyBhbGwgYmlnIGludHMgaXMgaW5uZWZpY2llbnQsIGJ1dCByZS1pbXBsZW1l
bnRpbmcgdG9TdHJpbmcgZm9yIHNtYWxsIEJpZ0ludHMgaXMgZW5vdWdoIHdvcmsgdGhhdCBJJ20g
ZGVmZXJyaW5nIGl0IHRvIGEgbGF0ZXIgcGF0Y2guCiAgICAgaWYgKHRoaXNWYWx1ZS5pc0JpZ0lu
dDMyKCkpCi0gICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgdGhpc1ZhbHVl
LmJpZ0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBK
U0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIHRoaXNWYWx1ZS5iaWdJbnQzMkFzSW50
MzIoKSkpOwogI2VuZGlmCiAKICAgICBpZiAodGhpc1ZhbHVlLmlzQ2VsbCgpKSB7CkBAIC05MCwx
MiArOTMsMTMgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQqIHRvVGhpc0JpZ0ludFZh
bHVlKFZNJiB2bSwgSlNWYWx1ZSB0aGlzVmFsdWUpCiAgICAgICAgICAgICBKU1ZhbHVlIGJpZ0lu
dCA9IGJpZ0ludE9iamVjdC0+aW50ZXJuYWxWYWx1ZSgpOwogI2lmIFVTRShCSUdJTlQzMikKICAg
ICAgICAgICAgIGlmIChiaWdJbnQuaXNCaWdJbnQzMigpKQotICAgICAgICAgICAgICAgIHJldHVy
biBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgYmlnSW50LmJpZ0ludDMyQXNJbnQzMigpKTsKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTQmlnSW50OjpjcmVhdGVG
cm9tKGdsb2JhbE9iamVjdCwgYmlnSW50LmJpZ0ludDMyQXNJbnQzMigpKSk7CiAjZW5kaWYKICAg
ICAgICAgICAgIHJldHVybiBiaWdJbnQuYXNIZWFwQmlnSW50KCk7CiAgICAgICAgIH0KICAgICB9
CiAKKyAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiJ3RoaXMnIHZhbHVl
IG11c3QgYmUgYSBCaWdJbnQgb3IgQmlnSW50T2JqZWN0Il9zKTsKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIApAQCAtMTA0LDkgKzEwOCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YmlnSW50UHJvdG9GdW5jVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAotICAgIEpTQmlnSW50KiB2YWx1ZSA9IHRvVGhpc0JpZ0ludFZhbHVl
KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiJ3RoaXMnIHZhbHVl
IG11c3QgYmUgYSBCaWdJbnQgb3IgQmlnSW50T2JqZWN0Il9zKTsKKyAgICBKU0JpZ0ludCogdmFs
dWUgPSB0b1RoaXNCaWdJbnRWYWx1ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBBU1NFUlQo
dmFsdWUpOwogCkBAIC0xMjksOSArMTMyLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBiaWdJbnRQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmEKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNCaWdJbnQqIHZhbHVlID0gdG9UaGlzQmlnSW50VmFs
dWUodm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICIndGhpcycgdmFs
dWUgbXVzdCBiZSBhIEJpZ0ludCBvciBCaWdJbnRPYmplY3QiX3MpOworICAgIEpTQmlnSW50KiB2
YWx1ZSA9IHRvVGhpc0JpZ0ludFZhbHVlKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT50aGlzVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGF1dG8q
IG51bWJlckZvcm1hdCA9IEludGxOdW1iZXJGb3JtYXQ6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LT5udW1iZXJGb3JtYXRTdHJ1Y3R1cmUoKSk7CiAgICAgbnVtYmVyRm9ybWF0LT5pbml0aWFsaXpl
TnVtYmVyRm9ybWF0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgY2FsbEZy
YW1lLT5hcmd1bWVudCgxKSk7CkBAIC0xNDQsOSArMTQ2LDggQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBiaWdJbnRQcm90b0Z1bmNWYWx1ZU9mKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNCaWdJbnQqIHZhbHVlID0gdG9UaGlz
QmlnSW50VmFsdWUodm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghdmFsdWUp
Ci0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICIn
dGhpcycgdmFsdWUgbXVzdCBiZSBhIEJpZ0ludCBvciBCaWdJbnRPYmplY3QiX3MpOworICAgIEpT
QmlnSW50KiB2YWx1ZSA9IHRvVGhpc0JpZ0ludFZhbHVlKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LT50aGlzVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAog
ICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2bSwgdmFsdWUtPnN0cnVjdHVyZUlEKCkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCmluZGV4IDYwMWQwMTlkZjkzZjhmMmY4Y2M2
YzFmNTkxYTk0MTU0OGRjMDdmY2IuLmY5ZjYyNGI0NmU5NzUwYmY0OTc4MTFmMzkxYWU0YTc2MjQ0
N2Q1MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5
cGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5j
cHAKQEAgLTEyNzksNyArMTI3OSw4IEBAIGNsYXNzIENhY2hlZEJpZ0ludCA6IHB1YmxpYyBWYXJp
YWJsZUxlbmd0aE9iamVjdDxKU0JpZ0ludD4gewogCiAgICAgSlNCaWdJbnQqIGRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgSlNCaWdJbnQqIGJpZ0ludCA9IEpT
QmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKGRlY29kZXIudm0oKSwgbV9sZW5ndGgp
OworICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5n
dGgoZGVjb2Rlci52bSgpLCBtX2xlbmd0aCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJpZ0lu
dCk7CiAgICAgICAgIGJpZ0ludC0+c2V0U2lnbihtX3NpZ24pOwogICAgICAgICBpZiAobV9sZW5n
dGgpCiAgICAgICAgICAgICBtZW1jcHkoYmlnSW50LT5kYXRhU3RvcmFnZSgpLCB0aGlzLT5idWZm
ZXIoKSwgc2l6ZW9mKEpTQmlnSW50OjpEaWdpdCkgKiBtX2xlbmd0aCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAppbmRleCBhMzljMTM3
NTc1NmZjZDU5ZjI2NDViMDA4MTRhNjBhODY4ZmIxOWFjLi4zMDM0NGMxMjBlMmRiMzczYzNlMDRk
NGI2Zjg2OGI3NTY4MDIwOGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKQEAgLTUzMCw3ICs1MzAsOCBAQCBTTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfbmVnYXRlKQogCiAjaWYgVVNFKEJJR0lOVDMyKQogICAgIGlmIChwcmltVmFs
dWUuaXNCaWdJbnQzMigpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVu
YXJ5TWludXModm0sIHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSk7CisgICAgICAgIEpTVmFs
dWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFsdWUu
YmlnSW50MzJBc0ludDMyKCkpOworICAgICAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICAgICAg
UkVUVVJOX1dJVEhfUFJPRklMSU5HKHJlc3VsdCwgewogICAgICAgICAgICAgdXBkYXRlQXJpdGhQ
cm9maWxlRm9yVW5hcnlBcml0aE9wKG1ldGFkYXRhLCByZXN1bHQsIG9wZXJhbmQpOwogICAgICAg
ICB9KTsKQEAgLTUzOCw3ICs1MzksOCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmVnYXRl
KQogI2VuZGlmCiAKICAgICBpZiAocHJpbVZhbHVlLmlzSGVhcEJpZ0ludCgpKSB7Ci0gICAgICAg
IEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5hc0hl
YXBCaWdJbnQoKSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWlu
dXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpOworICAgICAgICBDSEVD
S19FWENFUFRJT04oKTsKICAgICAgICAgUkVUVVJOX1dJVEhfUFJPRklMSU5HKHJlc3VsdCwgewog
ICAgICAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKG1ldGFkYXRhLCBy
ZXN1bHQsIG9wZXJhbmQpOwogICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHAKaW5kZXgg
YWFiYWU3YmU5YmYxM2MzNTY2MWIyMjk0NWIxYjNiZDQ5MmVkNGU2ZC4uNmRhYTg2YTkwYTE4YzM0
YWI5MDQzMDUxOWVkMmFiMmM4MTY0MWJjMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHAKQEAgLTk2
LDggKzk2LDkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJl
ckZvcm1hdEZ1bmNGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGcKIAogI2lmIFVTRShCSUdJTlQzMikK
ICAgICBpZiAoYmlnSW50T3JOdW1iZXIuaXNCaWdJbnQzMigpKSB7Ci0gICAgICAgIEpTQmlnSW50
KiB2YWx1ZSA9IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCBiaWdJbnRPck51bWJlci5iaWdJbnQz
MkFzSW50MzIoKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobnVtYmVyRm9ybWF0
LT5mb3JtYXQoZ2xvYmFsT2JqZWN0LCB2YWx1ZSkpOworICAgICAgICBKU0JpZ0ludCogdmFsdWUg
PSBKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIGJpZ0ludE9yTnVtYmVyLmJpZ0lu
dDMyQXNJbnQzMigpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUobnVtYmVy
Rm9ybWF0LT5mb3JtYXQoZ2xvYmFsT2JqZWN0LCB2YWx1ZSkpKTsKICAgICB9CiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCmluZGV4IDkwNDMyOWE3
MjEwY2ZlZWU3YjVlYWI3NmMxNGVjMDA3ZGNhZjEyYjkuLmJmNWNiMGQ5MjRmN2RjOTU4MDU1OTIx
ZTMyNGViN2RmZmNmYWIyNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQmlnSW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jp
Z0ludC5jcHAKQEAgLTgyLDQyICs4Miw1OCBAQCBTdHJ1Y3R1cmUqIEpTQmlnSW50OjpjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbAogICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKEhlYXBCaWdJbnRUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLUpT
QmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlWmVybyhWTSYgdm0pCitKU0JpZ0ludCogSlNCaWdJbnQ6
OnRyeUNyZWF0ZVplcm8oVk0mIHZtKQogewotICAgIEpTQmlnSW50KiB6ZXJvQmlnSW50ID0gY3Jl
YXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgMCk7Ci0gICAgcmV0dXJuIHplcm9CaWdJbnQ7Cisg
ICAgcmV0dXJuIHRyeUNyZWF0ZVdpdGhMZW5ndGgodm0sIDApOwogfQogCi1KU0JpZ0ludCogSlNC
aWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
dW5zaWduZWQgbGVuZ3RoKQorSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVaZXJvKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4g
Y3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIDApOworfQogCitpbmxpbmUgSlNCaWdJbnQq
IEpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiBudWxsT3JHbG9iYWxP
YmplY3RGb3JPT00sIFZNJiB2bSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoVU5MSUtFTFkobGVuZ3RoID4gbWF4
TGVuZ3RoKSkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgIkJpZ0ludCBnZW5lcmF0ZWQgZnJvbSB0aGlzIG9wZXJhdGlvbiBpcyB0b28gYmlnIl9z
KTsKKyAgICAgICAgaWYgKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSkKKyAgICAgICAgICAgIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHNjb3BlLCAiQmln
SW50IGdlbmVyYXRlZCBmcm9tIHRoaXMgb3BlcmF0aW9uIGlzIHRvbyBiaWciX3MpOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBzY29wZS5yZWxlYXNlKCk7Ci0KLSAgICBy
ZXR1cm4gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgbGVuZ3RoKTsKLX0KLQotSlNCaWdJ
bnQqIEpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKFZNJiB2bSwgdW5zaWduZWQg
bGVuZ3RoKQotewogICAgIEFTU0VSVChsZW5ndGggPD0gbWF4TGVuZ3RoKTsKLSAgICB2b2lkKiBk
YXRhID0gR2lnYWNhZ2U6Om1hbGxvYyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBsZW5ndGggKiBzaXpl
b2YoRGlnaXQpKTsKKyAgICB2b2lkKiBkYXRhID0gR2lnYWNhZ2U6OnRyeU1hbGxvYyhHaWdhY2Fn
ZTo6UHJpbWl0aXZlLCBsZW5ndGggKiBzaXplb2YoRGlnaXQpKTsKKyAgICBpZiAoVU5MSUtFTFko
IWRhdGEpKSB7CisgICAgICAgIGlmIChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00pCisgICAgICAg
ICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBzY29w
ZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KICAgICBKU0JpZ0ludCogYmlnSW50
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNCaWdJbnQ+KHZtLmhlYXApKSBKU0JpZ0lu
dCh2bSwgdm0uYmlnSW50U3RydWN0dXJlLmdldCgpLCByZWludGVycHJldF9jYXN0PERpZ2l0Kj4o
ZGF0YSksIGxlbmd0aCk7CiAgICAgYmlnSW50LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0
dXJuIGJpZ0ludDsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKFZNJiB2bSwg
aW50MzJfdCB2YWx1ZSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aChW
TSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gY3JlYXRlV2l0aExlbmd0aChu
dWxscHRyLCB2bSwgbGVuZ3RoKTsKK30KKworSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVXaXRo
TGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGxlbmd0aCkKIHsK
KyAgICByZXR1cm4gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+
dm0oKSwgbGVuZ3RoKTsKK30KKworSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgdmFsdWUpCit7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKwogICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBjcmVhdGVaZXJvKHZtKTsK
KyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjcmVhdGVaZXJvKGdsb2JhbE9iamVj
dCkpOwogICAgIAotICAgIEpTQmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVj
a2VkKHZtLCAxKTsKKyAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aChnbG9i
YWxPYmplY3QsIDEpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwor
CiAgICAgaWYgKHZhbHVlIDwgMCkgewogICAgICAgICBiaWdJbnQtPnNldERpZ2l0KDAsIHN0YXRp
Y19jYXN0PERpZ2l0PigtMSAqIHN0YXRpY19jYXN0PGludDY0X3Q+KHZhbHVlKSkpOwogICAgICAg
ICBiaWdJbnQtPnNldFNpZ24odHJ1ZSk7CkBAIC0xMjcsMzIgKzE0Myw1OSBAQCBKU0JpZ0ludCog
SlNCaWdJbnQ6OmNyZWF0ZUZyb20oVk0mIHZtLCBpbnQzMl90IHZhbHVlKQogICAgIHJldHVybiBi
aWdJbnQ7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShWTSYgdm0sIHVpbnQz
Ml90IHZhbHVlKQorSlNCaWdJbnQqIEpTQmlnSW50Ojp0cnlDcmVhdGVGcm9tKFZNJiB2bSwgaW50
MzJfdCB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gY3JlYXRlWmVy
byh2bSk7CisgICAgICAgIHJldHVybiB0cnlDcmVhdGVaZXJvKHZtKTsKKworICAgIEpTQmlnSW50
KiBiaWdJbnQgPSB0cnlDcmVhdGVXaXRoTGVuZ3RoKHZtLCAxKTsKKyAgICBpZiAoVU5MSUtFTFko
IWJpZ0ludCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKHZhbHVlIDwgMCkg
eworICAgICAgICBiaWdJbnQtPnNldERpZ2l0KDAsIHN0YXRpY19jYXN0PERpZ2l0PigtMSAqIHN0
YXRpY19jYXN0PGludDY0X3Q+KHZhbHVlKSkpOworICAgICAgICBiaWdJbnQtPnNldFNpZ24odHJ1
ZSk7CisgICAgfSBlbHNlCisgICAgICAgIGJpZ0ludC0+c2V0RGlnaXQoMCwgc3RhdGljX2Nhc3Q8
RGlnaXQ+KHZhbHVlKSk7CisKKyAgICByZXR1cm4gYmlnSW50OworfQorCitKU0JpZ0ludCogSlNC
aWdJbnQ6OmNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDMyX3Qg
dmFsdWUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICghdmFsdWUpCisgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY3JlYXRlWmVybyhnbG9iYWxPYmplY3QpKTsKICAg
ICAKLSAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwg
MSk7CisgICAgSlNCaWdJbnQqIGJpZ0ludCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0
LCAxKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBiaWdJ
bnQtPnNldERpZ2l0KDAsIHN0YXRpY19jYXN0PERpZ2l0Pih2YWx1ZSkpOwogICAgIHJldHVybiBi
aWdJbnQ7CiB9CiAKLWlubGluZSBKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb21JbXBsKFZN
JiB2bSwgdWludDY0X3QgdmFsdWUsIGJvb2wgc2lnbikKK2lubGluZSBKU0JpZ0ludCogSlNCaWdJ
bnQ6OmNyZWF0ZUZyb21JbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF90
IHZhbHVlLCBib29sIHNpZ24pCiB7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICghdmFs
dWUpCi0gICAgICAgIHJldHVybiBjcmVhdGVaZXJvKHZtKTsKKyAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBjcmVhdGVaZXJvKGdsb2JhbE9iamVjdCkpOwogCiAgICAgLy8gVGhpcyBw
YXRoIGlzIG5vdCBqdXN0IGFuIG9wdGltaXphdGlvbjogYmVjYXVzZSB3ZSBkbyBub3QgY2FsbCBy
aWdodFRyaW0gYXQgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLAogICAgIC8vIGl0IHdvdWxkIGJl
IGEgYnVnIHRvIGNyZWF0ZSBhIEJpZ0ludCB3aXRoIGxlbmd0aD0yIGluIHRoaXMgY2FzZS4KICAg
ICBpZiAoc2l6ZW9mKERpZ2l0KSA9PSA4IHx8IHZhbHVlIDw9IFVJTlQzMl9NQVgpIHsKLSAgICAg
ICAgSlNCaWdJbnQqIGJpZ0ludCA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIDEpOwor
ICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3Qs
IDEpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAg
ICAgYmlnSW50LT5zZXREaWdpdCgwLCBzdGF0aWNfY2FzdDxEaWdpdD4odmFsdWUpKTsKICAgICAg
ICAgYmlnSW50LT5zZXRTaWduKHNpZ24pOwogICAgICAgICByZXR1cm4gYmlnSW50OwogICAgIH0K
IAogICAgIEFTU0VSVChzaXplb2YoRGlnaXQpID09IDQpOwotICAgIEpTQmlnSW50KiBiaWdJbnQg
PSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCAyKTsKKyAgICBKU0JpZ0ludCogYmlnSW50
ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIDIpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIERpZ2l0IGxvd0JpdHMgID0gc3RhdGljX2Nhc3Q8
RGlnaXQ+KHZhbHVlICYgMHhmZmZmZmZmZik7CiAgICAgRGlnaXQgaGlnaEJpdHMgPSBzdGF0aWNf
Y2FzdDxEaWdpdD4oKHZhbHVlID4+IDMyKSAmIDB4ZmZmZmZmZmYpOwogCkBAIC0xNjUsMTIgKzIw
OCwxMiBAQCBpbmxpbmUgSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tSW1wbChWTSYgdm0s
IHVpbnQ2NF90IHZhbHVlLCBib29sIHNpZ24pCiAgICAgcmV0dXJuIGJpZ0ludDsKIH0KIAotSlNC
aWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKFZNJiB2bSwgdWludDY0X3QgdmFsdWUpCitKU0Jp
Z0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
dWludDY0X3QgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUZyb21JbXBsKHZtLCB2YWx1ZSwg
ZmFsc2UpOworICAgIHJldHVybiBjcmVhdGVGcm9tSW1wbChnbG9iYWxPYmplY3QsIHZhbHVlLCBm
YWxzZSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShWTSYgdm0sIGludDY0
X3QgdmFsdWUpCitKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgaW50NjRfdCB2YWx1ZSkKIHsKICAgICB1aW50NjRfdCB1bnNpZ25lZFZh
bHVlOwogICAgIGJvb2wgc2lnbiA9IGZhbHNlOwpAQCAtMTc5LDI0ICsyMjIsMzEgQEAgSlNCaWdJ
bnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKFZNJiB2bSwgaW50NjRfdCB2YWx1ZSkKICAgICAgICAg
c2lnbiA9IHRydWU7CiAgICAgfSBlbHNlCiAgICAgICAgIHVuc2lnbmVkVmFsdWUgPSB2YWx1ZTsK
LSAgICByZXR1cm4gY3JlYXRlRnJvbUltcGwodm0sIHVuc2lnbmVkVmFsdWUsIHNpZ24pOworICAg
IHJldHVybiBjcmVhdGVGcm9tSW1wbChnbG9iYWxPYmplY3QsIHVuc2lnbmVkVmFsdWUsIHNpZ24p
OwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oVk0mIHZtLCBib29sIHZhbHVl
KQorSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGJvb2wgdmFsdWUpCiB7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICghdmFs
dWUpCi0gICAgICAgIHJldHVybiBjcmVhdGVaZXJvKHZtKTsKLSAgICAKLSAgICBKU0JpZ0ludCog
YmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgMSk7CisgICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgY3JlYXRlWmVybyhnbG9iYWxPYmplY3QpKTsKKworICAgIEpT
QmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgMSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgYmlnSW50LT5zZXREaWdp
dCgwLCBzdGF0aWNfY2FzdDxEaWdpdD4odmFsdWUpKTsKICAgICByZXR1cm4gYmlnSW50OwogfQog
Ci1KU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oVk0mIHZtLCBkb3VibGUgdmFsdWUpCitK
U0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgZG91YmxlIHZhbHVlKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBBU1NFUlQoaXNJ
bnRlZ2VyKHZhbHVlKSk7CiAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVpl
cm8odm0pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNyZWF0ZVplcm8oZ2xv
YmFsT2JqZWN0KSk7CiAKICAgICBib29sIHNpZ24gPSB2YWx1ZSA8IDA7IC8vIC0wIHdhcyBhbHJl
YWR5IGhhbmRsZWQgYWJvdmUuCiAgICAgdWludDY0X3QgZG91YmxlQml0cyA9IGJpdHdpc2VfY2Fz
dDx1aW50NjRfdD4odmFsdWUpOwpAQCAtMjA1LDcgKzI1NSw4IEBAIEpTQmlnSW50KiBKU0JpZ0lu
dDo6Y3JlYXRlRnJvbShWTSYgdm0sIGRvdWJsZSB2YWx1ZSkKICAgICBBU1NFUlQocmF3RXhwb25l
bnQgPj0gMHgzZmYpOyAvLyBTaW5jZSB2YWx1ZSBpcyBpbnRlZ2VyLCBleHBvbmVudCBzaG91bGQg
YmUgPj0gMCArIGJpYXMgKDB4M2ZmKS4KICAgICBpbnQzMl90IGV4cG9uZW50ID0gcmF3RXhwb25l
bnQgLSAweDNmZjsKICAgICBpbnQzMl90IGRpZ2l0cyA9IGV4cG9uZW50IC8gZGlnaXRCaXRzICsg
MTsKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwg
ZGlnaXRzKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxP
YmplY3QsIGRpZ2l0cyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7
CiAgICAgQVNTRVJUKHJlc3VsdCk7CiAgICAgcmVzdWx0LT5pbml0aWFsaXplKEluaXRpYWxpemF0
aW9uVHlwZTo6V2l0aFplcm8pOwogICAgIHJlc3VsdC0+c2V0U2lnbihzaWduKTsKQEAgLTI1OSw3
ICszMTAsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oVk0mIHZtLCBkb3VibGUg
dmFsdWUpCiAgICAgICAgICAgICBkaWdpdCA9IDA7CiAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQo
ZGlnaXRJbmRleCwgZGlnaXQpOwogICAgIH0KLSAgICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0o
dm0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0LT5yaWdodFRyaW0oZ2xv
YmFsT2JqZWN0KSk7CiB9CiAKIEpTVmFsdWUgSlNCaWdJbnQ6OnRvUHJpbWl0aXZlKEpTR2xvYmFs
T2JqZWN0KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3QKQEAgLTI3NCwxMSArMzI1LDEx
IEBAIEpTVmFsdWUgSlNCaWdJbnQ6OnBhcnNlSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cmluZ1ZpZXcgcywgRXJyb3JQYXJzCiAgICAgcmV0dXJuIHBhcnNlSW50KGdsb2JhbE9i
amVjdCwgcy5jaGFyYWN0ZXJzMTYoKSwgcy5sZW5ndGgoKSwgcGFyc2VyTW9kZSk7CiB9CiAKLUpT
VmFsdWUgSlNCaWdJbnQ6OnBhcnNlSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZN
JiB2bSwgU3RyaW5nVmlldyBzLCB1aW50OF90IHJhZGl4LCBFcnJvclBhcnNlTW9kZSBwYXJzZXJN
b2RlLCBQYXJzZUludFNpZ24gc2lnbikKK0pTVmFsdWUgSlNCaWdJbnQ6OnBhcnNlSW50KEpTR2xv
YmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIFZNJiB2bSwgU3RyaW5nVmlldyBz
LCB1aW50OF90IHJhZGl4LCBFcnJvclBhcnNlTW9kZSBwYXJzZXJNb2RlLCBQYXJzZUludFNpZ24g
c2lnbikKIHsKICAgICBpZiAocy5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIHBhcnNlSW50KGds
b2JhbE9iamVjdCwgdm0sIHMuY2hhcmFjdGVyczgoKSwgcy5sZW5ndGgoKSwgMCwgcmFkaXgsIHBh
cnNlck1vZGUsIHNpZ24sIFBhcnNlSW50TW9kZTo6RGlzYWxsb3dFbXB0eVN0cmluZyk7Ci0gICAg
cmV0dXJuIHBhcnNlSW50KGdsb2JhbE9iamVjdCwgdm0sIHMuY2hhcmFjdGVyczE2KCksIHMubGVu
Z3RoKCksIDAsIHJhZGl4LCBwYXJzZXJNb2RlLCBzaWduLCBQYXJzZUludE1vZGU6OkRpc2FsbG93
RW1wdHlTdHJpbmcpOworICAgICAgICByZXR1cm4gcGFyc2VJbnQobnVsbE9yR2xvYmFsT2JqZWN0
Rm9yT09NLCB2bSwgcy5jaGFyYWN0ZXJzOCgpLCBzLmxlbmd0aCgpLCAwLCByYWRpeCwgcGFyc2Vy
TW9kZSwgc2lnbiwgUGFyc2VJbnRNb2RlOjpEaXNhbGxvd0VtcHR5U3RyaW5nKTsKKyAgICByZXR1
cm4gcGFyc2VJbnQobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCB2bSwgcy5jaGFyYWN0ZXJzMTYo
KSwgcy5sZW5ndGgoKSwgMCwgcmFkaXgsIHBhcnNlck1vZGUsIHNpZ24sIFBhcnNlSW50TW9kZTo6
RGlzYWxsb3dFbXB0eVN0cmluZyk7CiB9CiAKIEpTVmFsdWUgSlNCaWdJbnQ6OnN0cmluZ1RvQmln
SW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cmluZ1ZpZXcgcykKQEAgLTMxOCw3
ICszNjksOCBAQCBjbGFzcyBIZWFwQmlnSW50SW1wbCB7CiAgICAgQUxXQVlTX0lOTElORSBib29s
IHNpZ24oKSB7IHJldHVybiBtX2JpZ0ludC0+c2lnbigpOyB9CiAgICAgQUxXQVlTX0lOTElORSB1
bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2JpZ0ludC0+bGVuZ3RoKCk7IH0KICAgICBBTFdB
WVNfSU5MSU5FIEpTQmlnSW50OjpEaWdpdCBkaWdpdCh1bnNpZ25lZCBpKSB7IHJldHVybiBtX2Jp
Z0ludC0+ZGlnaXQoaSk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIEpTQmlnSW50KiB0b0hlYXBCaWdJ
bnQoVk0mKSB7IHJldHVybiBtX2JpZ0ludDsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQq
IHRyeVRvSGVhcEJpZ0ludChWTSYpIHsgcmV0dXJuIG1fYmlnSW50OyB9CisgICAgQUxXQVlTX0lO
TElORSBKU0JpZ0ludCogdG9IZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KikgeyByZXR1cm4gbV9i
aWdJbnQ7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgc3RydWN0IEpTQmlnSW50OjpJbXBsUmVz
dWx0OwpAQCAtMzQzLDcgKzM5NSwxNSBAQCBjbGFzcyBJbnQzMkJpZ0ludEltcGwgewogICAgICAg
ICByZXR1cm4gbV92YWx1ZTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIEpTQmlnSW50KiB0
b0hlYXBCaWdJbnQoVk0mIHZtKSB7IHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgbV92
YWx1ZSk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTQmlnSW50KiB0cnlUb0hlYXBCaWdJbnQoVk0m
IHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQmlnSW50Ojp0cnlDcmVhdGVGcm9tKHZtLCBt
X3ZhbHVlKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTQmlnSW50KiB0b0hlYXBCaWdJ
bnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIG1fdmFsdWUpOworICAgIH0KIAogcHJp
dmF0ZToKICAgICBmcmllbmQgc3RydWN0IEpTQmlnSW50OjpJbXBsUmVzdWx0OwpAQCAtNDAyLDEz
ICs0NjIsMTMgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSB0cnlDb252ZXJ0VG9CaWdJ
bnQzMihKU0JpZ0ludDo6SW1wbFJlc3VsdCBpbXBsUmVzdWwKICAgICByZXR1cm4gdHJ5Q29udmVy
dFRvQmlnSW50MzIoaW1wbFJlc3VsdC5wYXlsb2FkLmFzSGVhcEJpZ0ludCgpKTsKIH0KIAotc3Rh
dGljIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQ6OkltcGxSZXN1bHQgemVyb0ltcGwoVk0mIHZtKQor
c3RhdGljIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQ6OkltcGxSZXN1bHQgemVyb0ltcGwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICNpZiBVU0UoQklHSU5UMzIpCi0gICAgVU5VU0VE
X1BBUkFNKHZtKTsKKyAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4g
anNCaWdJbnQzMigwKTsKICNlbHNlCi0gICAgcmV0dXJuIEpTQmlnSW50OjpjcmVhdGVaZXJvKHZt
KTsKKyAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZVplcm8oZ2xvYmFsT2JqZWN0KTsKICNlbmRp
ZgogfQogCkBAIC00MzEsNyArNDkxLDcgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6
OmV4cG9uZW50aWF0ZUltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmkKIAogICAg
IC8vIDIuIElmIGJhc2UgaXMgMG4gYW5kIGV4cG9uZW50IGlzIDBuLCByZXR1cm4gMW4uCiAgICAg
aWYgKGV4cG9uZW50LmlzWmVybygpKQotICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZy
b20odm0sIDEpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTQmlnSW50Ojpj
cmVhdGVGcm9tKGdsb2JhbE9iamVjdCwgMSkpOwogICAgIAogICAgIC8vIDMuIFJldHVybiBhIEJp
Z0ludCByZXByZXNlbnRpbmcgdGhlIG1hdGhlbWF0aWNhbCB2YWx1ZSBvZiBiYXNlIHJhaXNlZAog
ICAgIC8vICAgIHRvIHRoZSBwb3dlciBleHBvbmVudC4KQEAgLTQ0MSw3ICs1MDEsNyBAQCBKU0Jp
Z0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6ZXhwb25lbnRpYXRlSW1wbChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBCaQogICAgIGlmIChiYXNlLmxlbmd0aCgpID09IDEgJiYgYmFzZS5k
aWdpdCgwKSA9PSAxKSB7CiAgICAgICAgIC8vICgtMSkgKiogZXZlbl9udW1iZXIgPT0gMS4KICAg
ICAgICAgaWYgKGJhc2Uuc2lnbigpICYmICEoZXhwb25lbnQuZGlnaXQoMCkgJiAxKSkKLSAgICAg
ICAgICAgIHJldHVybiBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwodm0sIGJhc2UpOworICAgICAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwo
Z2xvYmFsT2JqZWN0LCBiYXNlKSk7CiAKICAgICAgICAgLy8gKC0xKSAqKiBvZGRfbnVtYmVyID09
IC0xOyAxICoqIGFueXRoaW5nID09IDEuCiAgICAgICAgIHJldHVybiBiYXNlOwpAQCAtNDY4LDcg
KzUyOCw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpleHBvbmVudGlhdGVJbXBs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpCiAgICAgaWYgKGJhc2UubGVuZ3RoKCkg
PT0gMSAmJiBiYXNlLmRpZ2l0KDApID09IDIpIHsKICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciAy
Xm4uCiAgICAgICAgIGludCBuZWVkZWREaWdpdHMgPSAxICsgKG4gLyBkaWdpdEJpdHMpOwotICAg
ICAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgoZ2xv
YmFsT2JqZWN0LCBuZWVkZWREaWdpdHMpOworICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNC
aWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCBuZWVkZWREaWdpdHMpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgICAgICByZXN1
bHQtPmluaXRpYWxpemUoSW5pdGlhbGl6YXRpb25UeXBlOjpXaXRoWmVybyk7CkBAIC00ODMsMTEg
KzU0MywxNCBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6ZXhwb25lbnRpYXRlSW1w
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaQogICAgIH0KIAogICAgIEpTQmlnSW50
KiByZXN1bHQgPSBudWxscHRyOwotICAgIEpTQmlnSW50KiBydW5uaW5nU3F1YXJlID0gYmFzZS50
b0hlYXBCaWdJbnQodm0pOworICAgIEpTQmlnSW50KiBydW5uaW5nU3F1YXJlID0gYmFzZS50b0hl
YXBCaWdJbnQoZ2xvYmFsT2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBu
dWxscHRyKTsKIAogICAgIC8vIFRoaXMgaW1wbGljaXRseSBzZXRzIHRoZSByZXN1bHQncyBzaWdu
IGNvcnJlY3RseS4KLSAgICBpZiAobiAmIDEpCi0gICAgICAgIHJlc3VsdCA9IGJhc2UudG9IZWFw
QmlnSW50KHZtKTsKKyAgICBpZiAobiAmIDEpIHsKKyAgICAgICAgcmVzdWx0ID0gYmFzZS50b0hl
YXBCaWdJbnQoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgbnVsbHB0cik7CisgICAgfQogCiAgICAgbiA+Pj0gMTsKICAgICBmb3IgKDsgbjsgbiA+Pj0g
MSkgewpAQCAtNTQ4LDcgKzYxMSw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojpt
dWx0aXBseUltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50CiAgICAgICAg
IHJldHVybiB5OwogCiAgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0geC5sZW5ndGgoKSArIHku
bGVuZ3RoKCk7Ci0gICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVXaXRo
TGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0
ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIHJlc3VsdC0+
aW5pdGlhbGl6ZShJbml0aWFsaXphdGlvblR5cGU6OldpdGhaZXJvKTsKIApAQCAtNTU2LDcgKzYx
OSw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjptdWx0aXBseUltcGwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50CiAgICAgICAgIG11bHRpcGx5QWNjdW11bGF0
ZSh5LCB4LmRpZ2l0KGkpLCByZXN1bHQsIGkpOwogCiAgICAgcmVzdWx0LT5zZXRTaWduKHguc2ln
bigpICE9IHkuc2lnbigpKTsKLSAgICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0odm0pOworICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0
KSk7CiB9CiAKIEpTVmFsdWUgSlNCaWdJbnQ6Om11bHRpcGx5KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKQEAgLTU5MCwyNCArNjUzLDMwIEBA
IEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpkaXZpZGVJbXBsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltCiAgICAgLy8gMy4gUmV0dXJuIGEgQmlnSW50IHJlcHJl
c2VudGluZyBxdW90aWVudCByb3VuZGVkIHRvd2FyZHMgMCB0byB0aGUgbmV4dAogICAgIC8vICAg
IGludGVncmFsIHZhbHVlLgogICAgIGlmIChhYnNvbHV0ZUNvbXBhcmUoeCwgeSkgPT0gQ29tcGFy
aXNvblJlc3VsdDo6TGVzc1RoYW4pCi0gICAgICAgIHJldHVybiB6ZXJvSW1wbCh2bSk7CisgICAg
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgemVyb0ltcGwoZ2xvYmFsT2JqZWN0KSk7CiAK
ICAgICBKU0JpZ0ludCogcXVvdGllbnQgPSBudWxscHRyOwogICAgIGJvb2wgcmVzdWx0U2lnbiA9
IHguc2lnbigpICE9IHkuc2lnbigpOwogICAgIGlmICh5Lmxlbmd0aCgpID09IDEpIHsKICAgICAg
ICAgRGlnaXQgZGl2aXNvciA9IHkuZGlnaXQoMCk7Ci0gICAgICAgIGlmIChkaXZpc29yID09IDEp
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0U2lnbiA9PSB4LnNpZ24oKSA/IEpTQmlnSW50OjpJ
bXBsUmVzdWx0IHsgeCB9IDogSlNCaWdJbnQ6OnVuYXJ5TWludXNJbXBsKHZtLCB4KTsKKyAgICAg
ICAgaWYgKGRpdmlzb3IgPT0gMSkgeworICAgICAgICAgICAgaWYgKHJlc3VsdFNpZ24gPT0geC5z
aWduKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpJbXBsUmVzdWx0IHsgeCB9
OworICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6dW5hcnlN
aW51c0ltcGwoZ2xvYmFsT2JqZWN0LCB4KSk7CisgICAgICAgIH0KIAogICAgICAgICBEaWdpdCBy
ZW1haW5kZXI7Ci0gICAgICAgIGFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcih2bSwgeCwgZGl2
aXNvciwgJnF1b3RpZW50LCByZW1haW5kZXIpOworICAgICAgICBhYnNvbHV0ZURpdldpdGhEaWdp
dERpdmlzb3IoZ2xvYmFsT2JqZWN0LCB2bSwgeCwgZGl2aXNvciwgJnF1b3RpZW50LCByZW1haW5k
ZXIpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICB9
IGVsc2UgewotICAgICAgICBhYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKGdsb2JhbE9iamVj
dCwgeCwgeS50b0hlYXBCaWdJbnQodm0pLCAmcXVvdGllbnQsIG51bGxwdHIpOworICAgICAgICBK
U0JpZ0ludCogeUJpZ0ludCA9IHkudG9IZWFwQmlnSW50KGdsb2JhbE9iamVjdCk7CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAgICAgICBhYnNvbHV0ZURp
dldpdGhCaWdJbnREaXZpc29yKGdsb2JhbE9iamVjdCwgeCwgeUJpZ0ludCwgJnF1b3RpZW50LCBu
dWxscHRyKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAg
ICAgfQogCiAgICAgcXVvdGllbnQtPnNldFNpZ24ocmVzdWx0U2lnbik7Ci0gICAgcmV0dXJuIHF1
b3RpZW50LT5yaWdodFRyaW0odm0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcXVv
dGllbnQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0KIAogSlNWYWx1ZSBKU0JpZ0ludDo6
ZGl2aWRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0lu
dCogeSkKQEAgLTYyNiwxMSArNjk1LDE2IEBAIEpTVmFsdWUgSlNCaWdJbnQ6OmRpdmlkZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KQogI2VuZGlm
CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgotSlNCaWdJbnQqIEpTQmlnSW50Ojpj
b3B5KFZNJiB2bSwgQmlnSW50SW1wbCB4KQorSlNCaWdJbnQqIEpTQmlnSW50Ojpjb3B5KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCkKIHsKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCiAgICAgQVNTRVJUKCF4LmlzWmVybygpKTsKIAotICAgIEpTQmlnSW50KiByZXN1bHQg
PSBKU0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgeC5sZW5ndGgoKSk7Cisg
ICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCB4Lmxl
bmd0aCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHQtPmxlbmd0aCgpOyArK2kpCiAgICAgICAg
IHJlc3VsdC0+c2V0RGlnaXQoaSwgeC5kaWdpdChpKSk7CiAgICAgcmVzdWx0LT5zZXRTaWduKHgu
c2lnbigpKTsKQEAgLTYzOCwxOSArNzEyLDI0IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6Y29weShW
TSYgdm0sIEJpZ0ludEltcGwgeCkKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+
Ci1KU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwoVk0mIHZtLCBC
aWdJbnRJbXBsIHgpCitKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6dW5hcnlNaW51c0lt
cGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbCB4KQogeworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKICAgICBpZiAoeC5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuIHplcm9J
bXBsKHZtKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB6ZXJvSW1wbChnbG9i
YWxPYmplY3QpKTsKKworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjb3B5KGdsb2JhbE9iamVjdCwg
eCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKLSAgICBKU0Jp
Z0ludCogcmVzdWx0ID0gY29weSh2bSwgeCk7CiAgICAgcmVzdWx0LT5zZXRTaWduKCF4LnNpZ24o
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSBKU0JpZ0ludDo6dW5hcnlNaW51
cyhWTSYgdm0sIEpTQmlnSW50KiB4KQorSlNWYWx1ZSBKU0JpZ0ludDo6dW5hcnlNaW51cyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCkKIHsKLSAgICByZXR1cm4gdHJ5
Q29udmVydFRvQmlnSW50MzIodW5hcnlNaW51c0ltcGwodm0sIEhlYXBCaWdJbnRJbXBsIHsgeCB9
KSk7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKHVuYXJ5TWludXNJbXBsKGdsb2Jh
bE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0pKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1l
IEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KQEAgLTY3NCwyMiArNzUzLDI3IEBA
IEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpyZW1haW5kZXJJbXBsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0luCiAgICAgaWYgKHkubGVuZ3RoKCkgPT0gMSkgewogICAg
ICAgICBEaWdpdCBkaXZpc29yID0geS5kaWdpdCgwKTsKICAgICAgICAgaWYgKGRpdmlzb3IgPT0g
MSkKLSAgICAgICAgICAgIHJldHVybiB6ZXJvSW1wbCh2bSk7CisgICAgICAgICAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIHplcm9JbXBsKGdsb2JhbE9iamVjdCkpOwogCiAgICAgICAgIERp
Z2l0IHJlbWFpbmRlckRpZ2l0OwotICAgICAgICBhYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3Io
dm0sIHgsIGRpdmlzb3IsIG51bGxwdHIsIHJlbWFpbmRlckRpZ2l0KTsKKyAgICAgICAgYWJzb2x1
dGVEaXZXaXRoRGlnaXREaXZpc29yKGdsb2JhbE9iamVjdCwgdm0sIHgsIGRpdmlzb3IsIG51bGxw
dHIsIHJlbWFpbmRlckRpZ2l0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
bnVsbHB0cik7CisKICAgICAgICAgaWYgKCFyZW1haW5kZXJEaWdpdCkKLSAgICAgICAgICAgIHJl
dHVybiB6ZXJvSW1wbCh2bSk7CisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IHplcm9JbXBsKGdsb2JhbE9iamVjdCkpOwogCi0gICAgICAgIHJlbWFpbmRlciA9IGNyZWF0ZVdp
dGhMZW5ndGhVbmNoZWNrZWQodm0sIDEpOworICAgICAgICByZW1haW5kZXIgPSBjcmVhdGVXaXRo
TGVuZ3RoKGdsb2JhbE9iamVjdCwgMSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIG51bGxwdHIpOwogICAgICAgICByZW1haW5kZXItPnNldERpZ2l0KDAsIHJlbWFpbmRlckRp
Z2l0KTsKICAgICB9IGVsc2UgewotICAgICAgICBhYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29y
KGdsb2JhbE9iamVjdCwgeCwgeS50b0hlYXBCaWdJbnQodm0pLCBudWxscHRyLCAmcmVtYWluZGVy
KTsKKyAgICAgICAgSlNCaWdJbnQqIHlCaWdJbnQgPSB5LnRvSGVhcEJpZ0ludChnbG9iYWxPYmpl
Y3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKyAgICAg
ICAgYWJzb2x1dGVEaXZXaXRoQmlnSW50RGl2aXNvcihnbG9iYWxPYmplY3QsIHgsIHlCaWdJbnQs
IG51bGxwdHIsICZyZW1haW5kZXIpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKICAgICB9CiAKICAgICByZW1haW5kZXItPnNldFNpZ24oeC5zaWduKCkpOwot
ICAgIHJldHVybiByZW1haW5kZXItPnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCByZW1haW5kZXItPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0KIEpTVmFs
dWUgSlNCaWdJbnQ6OnJlbWFpbmRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0Jp
Z0ludCogeCwgSlNCaWdJbnQqIHkpCiB7CkBAIC03MDksOSArNzkzLDEzIEBAIEpTVmFsdWUgSlNC
aWdJbnQ6OnJlbWFpbmRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgs
IEpTQmlnSW50KiB5CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KIEpTQmlnSW50OjpJ
bXBsUmVzdWx0IEpTQmlnSW50OjppbmNJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEJpZ0ludEltcGwgeCkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKCF4LnNpZ24o
KSkKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgeCwgU2lnbk9w
dGlvbjo6VW5zaWduZWQpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGFic29s
dXRlQWRkT25lKGdsb2JhbE9iamVjdCwgeCwgU2lnbk9wdGlvbjo6VW5zaWduZWQpKTsKICAgICBK
U0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB4LCB4Lmxlbmd0
aCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBpZiAo
cmVzdWx0LT5pc1plcm8oKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICByZXN1bHQtPnNl
dFNpZ24odHJ1ZSk7CkBAIC03NDYsNyArODM0LDYgQEAgSlNWYWx1ZSBKU0JpZ0ludDo6ZGVjKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4KQogdGVtcGxhdGUgPHR5cGVu
YW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KIEpTQmlnSW50OjpJbXBsUmVz
dWx0IEpTQmlnSW50OjphZGRJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0lu
dEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIGJvb2wgeFNpZ24gPSB4LnNpZ24oKTsKIAogICAgIC8vIHggKyB5ID09IHggKyB5
CkBAIC03NTgsOSArODQ1LDkgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFkZElt
cGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEKICAgICAvLyAteCAr
IHkgPT0geSAtIHggPT0gLSh4IC0geSkKICAgICBDb21wYXJpc29uUmVzdWx0IGNvbXBhcmlzb25S
ZXN1bHQgPSBhYnNvbHV0ZUNvbXBhcmUoeCwgeSk7CiAgICAgaWYgKGNvbXBhcmlzb25SZXN1bHQg
PT0gQ29tcGFyaXNvblJlc3VsdDo6R3JlYXRlclRoYW4gfHwgY29tcGFyaXNvblJlc3VsdCA9PSBD
b21wYXJpc29uUmVzdWx0OjpFcXVhbCkKLSAgICAgICAgcmV0dXJuIGFic29sdXRlU3ViKHZtLCB4
LCB5LCB4U2lnbik7CisgICAgICAgIHJldHVybiBhYnNvbHV0ZVN1YihnbG9iYWxPYmplY3QsIHgs
IHksIHhTaWduKTsKIAotICAgIHJldHVybiBhYnNvbHV0ZVN1Yih2bSwgeSwgeCwgIXhTaWduKTsK
KyAgICByZXR1cm4gYWJzb2x1dGVTdWIoZ2xvYmFsT2JqZWN0LCB5LCB4LCAheFNpZ24pOwogfQog
SlNWYWx1ZSBKU0JpZ0ludDo6YWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmln
SW50KiB4LCBKU0JpZ0ludCogeSkKIHsKQEAgLTc4MCw3ICs4NjcsNiBAQCBKU1ZhbHVlIEpTQmln
SW50OjphZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBKU0JpZ0lu
dCogeSkKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1w
bDI+CiBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6c3ViSW1wbChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewotICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBib29sIHhTaWduID0geC5zaWduKCk7CiAg
ICAgaWYgKHhTaWduICE9IHkuc2lnbigpKSB7CiAgICAgICAgIC8vIHggLSAoLXkpID09IHggKyB5
CkBAIC03OTEsOSArODc3LDkgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnN1Yklt
cGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEKICAgICAvLyAoLXgp
IC0gKC15KSA9PSB5IC0geCA9PSAtKHggLSB5KQogICAgIENvbXBhcmlzb25SZXN1bHQgY29tcGFy
aXNvblJlc3VsdCA9IGFic29sdXRlQ29tcGFyZSh4LCB5KTsKICAgICBpZiAoY29tcGFyaXNvblJl
c3VsdCA9PSBDb21wYXJpc29uUmVzdWx0OjpHcmVhdGVyVGhhbiB8fCBjb21wYXJpc29uUmVzdWx0
ID09IENvbXBhcmlzb25SZXN1bHQ6OkVxdWFsKQotICAgICAgICByZXR1cm4gYWJzb2x1dGVTdWIo
dm0sIHgsIHksIHhTaWduKTsKKyAgICAgICAgcmV0dXJuIGFic29sdXRlU3ViKGdsb2JhbE9iamVj
dCwgeCwgeSwgeFNpZ24pOwogCi0gICAgcmV0dXJuIGFic29sdXRlU3ViKHZtLCB5LCB4LCAheFNp
Z24pOworICAgIHJldHVybiBhYnNvbHV0ZVN1YihnbG9iYWxPYmplY3QsIHksIHgsICF4U2lnbik7
CiB9CiAKIEpTVmFsdWUgSlNCaWdJbnQ6OnN1YihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCkBAIC04MTcsMTAgKzkwMyw4IEBAIEpTQmlnSW50
OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpiaXR3aXNlQW5kSW1wbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBCaWdJCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmICgheC5zaWduKCkg
JiYgIXkuc2lnbigpKSB7Ci0gICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJu
IGFic29sdXRlQW5kKHZtLCB4LCB5KTsKLSAgICB9CisgICAgaWYgKCF4LnNpZ24oKSAmJiAheS5z
aWduKCkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVBbmQoZ2xv
YmFsT2JqZWN0LCB4LCB5KSk7CiAgICAgCiAgICAgaWYgKHguc2lnbigpICYmIHkuc2lnbigpKSB7
CiAgICAgICAgIGludCByZXN1bHRMZW5ndGggPSBzdGQ6Om1heCh4Lmxlbmd0aCgpLCB5Lmxlbmd0
aCgpKSArIDE7CkBAIC04MzEsOSArOTE1LDkgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJ
bnQ6OmJpdHdpc2VBbmRJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0kKIAog
ICAgICAgICBKU0JpZ0ludCogeTEgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHksIHku
bGVuZ3RoKCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsK
LSAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVPcih2bSwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQg
fSwgSGVhcEJpZ0ludEltcGwgeyB5MSB9KTsKLSAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAg
ICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7
IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpOworICAgICAgICByZXN1bHQgPSBhYnNvbHV0
ZU9yKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgSGVhcEJpZ0ludElt
cGwgeyB5MSB9KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7
CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVBZGRPbmUoZ2xvYmFs
T2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpKTsK
ICAgICB9CiAKICAgICBBU1NFUlQoeC5zaWduKCkgIT0geS5zaWduKCkpOwpAQCAtODQzLDcgKzky
Nyw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpiaXR3aXNlQW5kSW1wbChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJCiAgICAgICAgIEFTU0VSVCh5LnNpZ24oKSk7
IAogICAgICAgICBKU0JpZ0ludCogeTEgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHks
IHkubGVuZ3RoKCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRy
KTsKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQW5kTm90KHZtLCB4LCBIZWFwQmlnSW50SW1wbCB7
IHkxIH0pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGFic29sdXRlQW5kTm90
KGdsb2JhbE9iamVjdCwgeCwgSGVhcEJpZ0ludEltcGwgeyB5MSB9KSk7CiAgICAgfTsKICAgICBp
ZiAoeC5zaWduKCkpCiAgICAgICAgIHJldHVybiBjb21wdXRlUmVzdWx0KHksIHgpOwpAQCAtODcz
LDEwICs5NTcsOCBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6Yml0d2lzZU9ySW1w
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbgogCiAgICAgdW5zaWduZWQgcmVz
dWx0TGVuZ3RoID0gc3RkOjptYXgoeC5sZW5ndGgoKSwgeS5sZW5ndGgoKSk7CiAKLSAgICBpZiAo
IXguc2lnbigpICYmICF5LnNpZ24oKSkgewotICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAg
ICAgIHJldHVybiBhYnNvbHV0ZU9yKHZtLCB4LCB5KTsKLSAgICB9CisgICAgaWYgKCF4LnNpZ24o
KSAmJiAheS5zaWduKCkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1
dGVPcihnbG9iYWxPYmplY3QsIHgsIHkpKTsKICAgICAKICAgICBpZiAoeC5zaWduKCkgJiYgeS5z
aWduKCkpIHsKICAgICAgICAgLy8gKC14KSB8ICgteSkgPT0gfih4LTEpIHwgfih5LTEpID09IH4o
KHgtMSkgJiAoeS0xKSkKQEAgLTg4NSwxMSArOTY3LDkgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQg
SlNCaWdJbnQ6OmJpdHdpc2VPckltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmln
SW4KICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAg
IEpTQmlnSW50KiB5MSA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeSwgeS5sZW5ndGgo
KSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotICAgICAg
ICByZXN1bHQgPSBhYnNvbHV0ZUFuZCh2bSwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgSGVh
cEJpZ0ludEltcGwgeyB5MSB9KTsKKyAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVBbmQoZ2xvYmFs
T2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBIZWFwQmlnSW50SW1wbCB7IHkxIH0p
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLQotICAgICAg
ICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShnbG9iYWxP
YmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIFNpZ25PcHRpb246OlNpZ25lZCk7Cisg
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2Jq
ZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpKTsKICAg
ICB9CiAgICAgCiAgICAgQVNTRVJUKHguc2lnbigpICE9IHkuc2lnbigpKTsKQEAgLTkwMSwxMCAr
OTgxLDkgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VPckltcGwoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW4KIAogICAgICAgICBKU0JpZ0ludCogcmVz
dWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCByZXN1bHRMZW5ndGgpOwogICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICAgICAgcmVzdWx0
ID0gYWJzb2x1dGVBbmROb3Qodm0sIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIHgpOwotCi0g
ICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGds
b2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgU2lnbk9wdGlvbjo6U2lnbmVk
KTsKKyAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVBbmROb3QoZ2xvYmFsT2JqZWN0LCBIZWFwQmln
SW50SW1wbCB7IHJlc3VsdCB9LCB4KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgbnVsbHB0cik7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVB
ZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9u
OjpTaWduZWQpKTsKICAgICB9OwogCiAgICAgaWYgKHguc2lnbigpKQpAQCAtOTMzLDEwICsxMDEy
LDggQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VYb3JJbXBsKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0kKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAg
aWYgKCF4LnNpZ24oKSAmJiAheS5zaWduKCkpIHsKLSAgICAgICAgc2NvcGUucmVsZWFzZSgpOwot
ICAgICAgICByZXR1cm4gYWJzb2x1dGVYb3Iodm0sIHgsIHkpOwotICAgIH0KKyAgICBpZiAoIXgu
c2lnbigpICYmICF5LnNpZ24oKSkKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBh
YnNvbHV0ZVhvcihnbG9iYWxPYmplY3QsIHgsIHkpKTsKICAgICAKICAgICBpZiAoeC5zaWduKCkg
JiYgeS5zaWduKCkpIHsKICAgICAgICAgaW50IHJlc3VsdExlbmd0aCA9IHN0ZDo6bWF4KHgubGVu
Z3RoKCksIHkubGVuZ3RoKCkpOwpAQCAtOTQ2LDkgKzEwMjMsNyBAQCBKU0JpZ0ludDo6SW1wbFJl
c3VsdCBKU0JpZ0ludDo6Yml0d2lzZVhvckltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQmlnSQogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAg
ICAgICAgSlNCaWdJbnQqIHkxID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCB5Lmxl
bmd0aCgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0K
LSAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gYWJzb2x1dGVYb3Iodm0s
IEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIEhlYXBCaWdJbnRJbXBsIHsgeTEgfSk7CisgICAg
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVYb3IoZ2xvYmFsT2JqZWN0LCBI
ZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBIZWFwQmlnSW50SW1wbCB7IHkxIH0pKTsKICAgICB9
CiAgICAgQVNTRVJUKHguc2lnbigpICE9IHkuc2lnbigpKTsKICAgICBpbnQgcmVzdWx0TGVuZ3Ro
ID0gc3RkOjptYXgoeC5sZW5ndGgoKSwgeS5sZW5ndGgoKSkgKyAxOwpAQCAtOTYwLDkgKzEwMzUs
OSBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6Yml0d2lzZVhvckltcGwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSQogICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0g
YWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCByZXN1bHRMZW5ndGgpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAotICAgICAgICByZXN1bHQgPSBh
YnNvbHV0ZVhvcih2bSwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgeCk7Ci0gICAgICAgIHNj
b3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVj
dCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKKyAgICAg
ICAgcmVzdWx0ID0gYWJzb2x1dGVYb3IoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJl
c3VsdCB9LCB4KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7
CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVBZGRPbmUoZ2xvYmFs
T2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpKTsK
ICAgICB9OwogICAgIAogICAgIC8vIEFzc3VtZSB0aGF0IHggaXMgdGhlIHBvc2l0aXZlIEJpZ0lu
dC4KQEAgLTEzNzQsMjEgKzE0NDksMjUgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwx
LCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojph
YnNvbHV0ZUFkZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBC
aWdJbnRJbXBsMiB5LCBib29sIHJlc3VsdFNpZ24pCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgIGlmICh4Lmxlbmd0aCgpIDwgeS5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGFic29sdXRl
QWRkKGdsb2JhbE9iamVjdCwgeSwgeCwgcmVzdWx0U2lnbik7CisgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgYWJzb2x1dGVBZGQoZ2xvYmFsT2JqZWN0LCB5LCB4LCByZXN1bHRTaWdu
KSk7CiAKICAgICBpZiAoeC5pc1plcm8oKSkgewogICAgICAgICBBU1NFUlQoeS5pc1plcm8oKSk7
CiAgICAgICAgIHJldHVybiB4OwogICAgIH0KIAotICAgIGlmICh5LmlzWmVybygpKQotICAgICAg
ICByZXR1cm4gcmVzdWx0U2lnbiA9PSB4LnNpZ24oKSA/IHggOiB1bmFyeU1pbnVzSW1wbCh2bSwg
eCk7CisgICAgaWYgKHkuaXNaZXJvKCkpIHsKKyAgICAgICAgaWYgKHJlc3VsdFNpZ24gPT0geC5z
aWduKCkpCisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCB1bmFyeU1pbnVzSW1wbChnbG9iYWxPYmplY3QsIHgpKTsKKyAgICB9CiAKLSAgICBK
U0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2Jq
ZWN0LCB4Lmxlbmd0aCgpICsgMSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9i
amVjdCwgeC5sZW5ndGgoKSArIDEpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51
bGxwdHIpOworICAgIEFTU0VSVChyZXN1bHQpOwogICAgIERpZ2l0IGNhcnJ5ID0gMDsKICAgICB1
bnNpZ25lZCBpID0gMDsKICAgICBmb3IgKDsgaSA8IHkubGVuZ3RoKCk7IGkrKykgewpAQCAtMTQw
OSwxMiArMTQ4OCwxNSBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YWJzb2x1dGVB
ZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SQogICAgIHJlc3VsdC0+c2V0
RGlnaXQoaSwgY2FycnkpOwogICAgIHJlc3VsdC0+c2V0U2lnbihyZXN1bHRTaWduKTsKIAotICAg
IHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KLUpTQmlnSW50OjpJbXBs
UmVzdWx0IEpTQmlnSW50OjphYnNvbHV0ZVN1YihWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0lu
dEltcGwyIHksIGJvb2wgcmVzdWx0U2lnbikKK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50
OjphYnNvbHV0ZVN1YihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4
LCBCaWdJbnRJbXBsMiB5LCBib29sIHJlc3VsdFNpZ24pCiB7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KwogICAgIENvbXBhcmlzb25SZXN1bHQgY29tcGFyaXNvblJlc3VsdCA9IGFic29sdXRlQ29tcGFy
ZSh4LCB5KTsKICAgICBBU1NFUlQoeC5sZW5ndGgoKSA+PSB5Lmxlbmd0aCgpKTsKICAgICBBU1NF
UlQoY29tcGFyaXNvblJlc3VsdCA9PSBDb21wYXJpc29uUmVzdWx0OjpHcmVhdGVyVGhhbiB8fCBj
b21wYXJpc29uUmVzdWx0ID09IENvbXBhcmlzb25SZXN1bHQ6OkVxdWFsKTsKQEAgLTE0MjQsMTMg
KzE1MDYsMTcgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFic29sdXRlU3ViKFZN
JiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwKICAgICAgICAgcmV0dXJuIHg7CiAg
ICAgfQogCi0gICAgaWYgKHkuaXNaZXJvKCkpCi0gICAgICAgIHJldHVybiByZXN1bHRTaWduID09
IHguc2lnbigpID8gSW1wbFJlc3VsdCB7IHggfSA6IEpTQmlnSW50Ojp1bmFyeU1pbnVzSW1wbCh2
bSwgeCk7CisgICAgaWYgKHkuaXNaZXJvKCkpIHsKKyAgICAgICAgaWYgKHJlc3VsdFNpZ24gPT0g
eC5zaWduKCkpCisgICAgICAgICAgICByZXR1cm4gSW1wbFJlc3VsdCB7IHggfTsKKyAgICAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwoZ2xvYmFs
T2JqZWN0LCB4KSk7CisgICAgfQogCiAgICAgaWYgKGNvbXBhcmlzb25SZXN1bHQgPT0gQ29tcGFy
aXNvblJlc3VsdDo6RXF1YWwpCi0gICAgICAgIHJldHVybiB6ZXJvSW1wbCh2bSk7CisgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgemVyb0ltcGwoZ2xvYmFsT2JqZWN0KSk7CiAKLSAg
ICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQo
dm0sIHgubGVuZ3RoKCkpOworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3Ro
KGdsb2JhbE9iamVjdCwgeC5sZW5ndGgoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgbnVsbHB0cik7CiAKICAgICBEaWdpdCBib3Jyb3cgPSAwOwogICAgIHVuc2lnbmVkIGkgPSAw
OwpAQCAtMTQ1MSw3ICsxNTM3LDcgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFi
c29sdXRlU3ViKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwKIAogICAgIEFT
U0VSVCghYm9ycm93KTsKICAgICByZXN1bHQtPnNldFNpZ24ocmVzdWx0U2lnbik7Ci0gICAgcmV0
dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdCkpOwogfQogCiAvLyBEaXZpZGVzIHt4fSBi
eSB7ZGl2aXNvcn0sIHJldHVybmluZyB0aGUgcmVzdWx0IGluIHtxdW90aWVudH0gYW5kIHtyZW1h
aW5kZXJ9LgpAQCAtMTQ2MiwyMiArMTU0OCw0NCBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0Jp
Z0ludDo6YWJzb2x1dGVTdWIoVk0mIHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LAog
Ly8ge3F1b3RpZW50fSBjYW4gYmUgdGhlIHNhbWUgYXMge3h9IGZvciBhbiBpbi1wbGFjZSBkaXZp
c2lvbi4ge3F1b3RpZW50fSBjYW4KIC8vIGFsc28gYmUgbnVsbHB0ciBpZiB0aGUgY2FsbGVyIGlz
IG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgcmVtYWluZGVyLgogdGVtcGxhdGUgPHR5cGVuYW1lIEJp
Z0ludEltcGw+Ci12b2lkIEpTQmlnSW50OjphYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3IoVk0m
IHZtLCBCaWdJbnRJbXBsIHgsIERpZ2l0IGRpdmlzb3IsIEpTQmlnSW50KiogcXVvdGllbnQsIERp
Z2l0JiByZW1haW5kZXIpCitib29sIEpTQmlnSW50OjphYnNvbHV0ZURpdldpdGhEaWdpdERpdmlz
b3IoSlNHbG9iYWxPYmplY3QqIG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgVk0mIHZtLCBCaWdJ
bnRJbXBsIHgsIERpZ2l0IGRpdmlzb3IsIEpTQmlnSW50KiogcXVvdGllbnQsIERpZ2l0JiByZW1h
aW5kZXIpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAg
ICAgQVNTRVJUKGRpdmlzb3IpOwogCiAgICAgQVNTRVJUKCF4LmlzWmVybygpKTsKICAgICByZW1h
aW5kZXIgPSAwOwogICAgIGlmIChkaXZpc29yID09IDEpIHsKLSAgICAgICAgaWYgKHF1b3RpZW50
KQotICAgICAgICAgICAgKnF1b3RpZW50ID0geC50b0hlYXBCaWdJbnQodm0pOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgIGlmIChxdW90aWVudCkgeworICAgICAgICAgICAgSlNCaWdJbnQqIHJl
c3VsdCA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09N
KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0geC50b0hlYXBCaWdJbnQobnVsbE9yR2xvYmFs
T2JqZWN0Rm9yT09NKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBmYWxzZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHgudHJ5VG9IZWFwQmlnSW50KHZtKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXJl
c3VsdCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICpxdW90aWVudCA9IHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSB4Lmxlbmd0aCgpOwogICAg
IGlmIChxdW90aWVudCkgewotICAgICAgICBpZiAoKnF1b3RpZW50ID09IG51bGxwdHIpCi0gICAg
ICAgICAgICAqcXVvdGllbnQgPSBKU0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2
bSwgbGVuZ3RoKTsKKyAgICAgICAgaWYgKCpxdW90aWVudCA9PSBudWxscHRyKSB7CisgICAgICAg
ICAgICBKU0JpZ0ludCogcmVzdWx0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGlmIChudWxsT3JH
bG9iYWxPYmplY3RGb3JPT00pIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjcmVhdGVXaXRo
TGVuZ3RoKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRyeUNyZWF0ZVdpdGhMZW5ndGgodm0sIGxlbmd0
aCk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqcXVvdGll
bnQgPSByZXN1bHQ7CisgICAgICAgIH0KIAogICAgICAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0g
MTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgIERpZ2l0IHEgPSBkaWdpdERpdihyZW1haW5k
ZXIsIHguZGlnaXQoaSksIGRpdmlzb3IsIHJlbWFpbmRlcik7CkBAIC0xNDg3LDYgKzE1OTUsNyBA
QCB2b2lkIEpTQmlnSW50OjphYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3IoVk0mIHZtLCBCaWdJ
bnRJbXBsIHgsIERpZ2l0IGRpdmlzb3IsCiAgICAgICAgIGZvciAoaW50IGkgPSBsZW5ndGggLSAx
OyBpID49IDA7IGktLSkKICAgICAgICAgICAgIGRpZ2l0RGl2KHJlbWFpbmRlciwgeC5kaWdpdChp
KSwgZGl2aXNvciwgcmVtYWluZGVyKTsKICAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8v
IERpdmlkZXMge2RpdmlkZW5kfSBieSB7ZGl2aXNvcn0sIHJldHVybmluZyB0aGUgcmVzdWx0IGlu
IHtxdW90aWVudH0gYW5kCkBAIC0xNTEyLDEyICsxNjIxLDE0IEBAIHZvaWQgSlNCaWdJbnQ6OmFi
c29sdXRlRGl2V2l0aEJpZ0ludERpdmlzb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
QmlnSW50CiAgICAgCiAgICAgLy8gVGhlIHF1b3RpZW50IHRvIGJlIGNvbXB1dGVkLgogICAgIEpT
QmlnSW50KiBxID0gbnVsbHB0cjsKLSAgICBpZiAocXVvdGllbnQgIT0gbnVsbHB0cikKLSAgICAg
ICAgcSA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQoZ2xvYmFsT2JqZWN0LT52bSgpLCBtICsg
MSk7CisgICAgaWYgKHF1b3RpZW50ICE9IG51bGxwdHIpIHsKKyAgICAgICAgcSA9IGNyZWF0ZVdp
dGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCBtICsgMSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHZvaWQoKSk7CisgICAgfQogICAgIAogICAgIC8vIEluIGVhY2ggaXRlcmF0aW9u
LCB7cWhhdHZ9IGhvbGRzIHtkaXZpc29yfSAqIHtjdXJyZW50IHF1b3RpZW50IGRpZ2l0fS4KICAg
ICAvLyAidiIgaXMgdGhlIGJvb2sncyBuYW1lIGZvciB7ZGl2aXNvcn0sICJxaGF0IiB0aGUgY3Vy
cmVudCBxdW90aWVudCBkaWdpdC4KLSAgICBKU0JpZ0ludCogcWhhdHYgPSB0cnlDcmVhdGVXaXRo
TGVuZ3RoKGdsb2JhbE9iamVjdCwgbiArIDEpOworICAgIEpTQmlnSW50KiBxaGF0diA9IGNyZWF0
ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCBuICsgMSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgdm9pZCgpKTsKICAgICAKICAgICAvLyBEMS4KQEAgLTE2NjcsMTQgKzE3NzgsMTYg
QEAgdm9pZCBKU0JpZ0ludDo6aW5wbGFjZVJpZ2h0U2hpZnQodW5zaWduZWQgc2hpZnQpCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVM
ZWZ0U2hpZnRBbHdheXNDb3B5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludElt
cGwgeCwgdW5zaWduZWQgc2hpZnQsIExlZnRTaGlmdE1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCiAgICAgQVNTRVJUKHNoaWZ0IDwgZGlnaXRCaXRzKTsKICAgICBBU1NFUlQoIXgu
aXNaZXJvKCkpOwogCiAgICAgdW5zaWduZWQgbiA9IHgubGVuZ3RoKCk7CiAgICAgdW5zaWduZWQg
cmVzdWx0TGVuZ3RoID0gbW9kZSA9PSBMZWZ0U2hpZnRNb2RlOjpBbHdheXNBZGRPbmVEaWdpdCA/
IG4gKyAxIDogbjsKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gdHJ5Q3JlYXRlV2l0aExlbmd0aChn
bG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGds
b2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogCiAgICAgaWYgKCFzaGlmdCkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbjsgaSsrKQpAQCAtMTcxNiw4ICsxODI5LDExIEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6
YWJzb2x1dGVMZWZ0U2hpZnRBbHdheXNDb3B5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEJpCiAvLyAgICAgICAgICAgICAgICAgICB2ICAgICB2ICAgICB2ICAgICB2CiAvLyByZXN1bHQ6
IFsgIDAgXVsgeDMgXVsgcjIgXVsgcjEgXVsgcjAgXQogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0lu
dEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMiwgdHlwZW5hbWUgQml0d2lzZU9wPgotaW5saW5l
IEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVCaXR3aXNlT3AoVk0mIHZtLCBCaWdJbnRJbXBs
MSB4LCBCaWdJbnRJbXBsMiB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nIGV4dHJhRGlnaXRzLCBCaXR3
aXNlT3AmJiBvcCkKK2lubGluZSBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQml0d2lzZU9w
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwy
IHksIEV4dHJhRGlnaXRzSGFuZGxpbmcgZXh0cmFEaWdpdHMsIEJpdHdpc2VPcCYmIG9wKQogewor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICB1bnNpZ25lZCB4TGVuZ3RoID0geC5sZW5ndGgoKTsK
ICAgICB1bnNpZ25lZCB5TGVuZ3RoID0geS5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCBudW1QYWly
cyA9IHlMZW5ndGg7CkBAIC0xNzMwLDcgKzE4NDYsOCBAQCBpbmxpbmUgSlNCaWdJbnQqIEpTQmln
SW50OjphYnNvbHV0ZUJpdHdpc2VPcChWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwy
CiAgICAgQVNTRVJUKG51bVBhaXJzID09IHN0ZDo6bWluKHhMZW5ndGgsIHlMZW5ndGgpKTsKICAg
ICBBU1NFUlQobWF4TGVuZ3RoID09IHN0ZDo6bWF4KHhMZW5ndGgsIHlMZW5ndGgpKTsKICAgICB1
bnNpZ25lZCByZXN1bHRMZW5ndGggPSBleHRyYURpZ2l0cyA9PSBFeHRyYURpZ2l0c0hhbmRsaW5n
OjpDb3B5ID8gbWF4TGVuZ3RoIDogbnVtUGFpcnM7Ci0gICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNy
ZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIHJlc3VsdExlbmd0aCk7CisgICAgSlNCaWdJbnQq
IHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIHVuc2lnbmVkIGkg
PSAwOwogICAgIGZvciAoOyBpIDwgbnVtUGFpcnM7IGkrKykKICAgICAgICAgcmVzdWx0LT5zZXRE
aWdpdChpLCBvcCh4LmRpZ2l0KGkpLCB5LmRpZ2l0KGkpKSk7CkBAIC0xNzQ4LDU4ICsxODY1LDY1
IEBAIGlubGluZSBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQml0d2lzZU9wKFZNJiB2bSwg
QmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIKICAgICBmb3IgKDsgaSA8IHJlc3VsdExlbmd0aDsg
aSsrKQogICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIDApOwogCi0gICAgcmV0dXJuIHJlc3Vs
dC0+cmlnaHRUcmltKHZtKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdC0+
cmlnaHRUcmltKGdsb2JhbE9iamVjdCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50
SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgotSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0
ZUFuZChWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCitKU0JpZ0ludCogSlNC
aWdJbnQ6OmFic29sdXRlQW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludElt
cGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgYXV0byBkaWdpdE9wZXJhdGlvbiA9IFtdKERp
Z2l0IGEsIERpZ2l0IGIpIHsKICAgICAgICAgcmV0dXJuIGEgJiBiOwogICAgIH07Ci0gICAgcmV0
dXJuIGFic29sdXRlQml0d2lzZU9wKHZtLCB4LCB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nOjpTa2lw
LCBkaWdpdE9wZXJhdGlvbik7CisgICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9wKGdsb2JhbE9i
amVjdCwgeCwgeSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6U2tpcCwgZGlnaXRPcGVyYXRpb24pOwog
fQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwy
PgotSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZU9yKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwg
QmlnSW50SW1wbDIgeSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVPcihKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewogICAg
IGF1dG8gZGlnaXRPcGVyYXRpb24gPSBbXShEaWdpdCBhLCBEaWdpdCBiKSB7CiAgICAgICAgIHJl
dHVybiBhIHwgYjsKICAgICB9OwotICAgIHJldHVybiBhYnNvbHV0ZUJpdHdpc2VPcCh2bSwgeCwg
eSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6Q29weSwgZGlnaXRPcGVyYXRpb24pOworICAgIHJldHVy
biBhYnNvbHV0ZUJpdHdpc2VPcChnbG9iYWxPYmplY3QsIHgsIHksIEV4dHJhRGlnaXRzSGFuZGxp
bmc6OkNvcHksIGRpZ2l0T3BlcmF0aW9uKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0lu
dEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KLUpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1
dGVBbmROb3QoVk0mIHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQorSlNCaWdJbnQq
IEpTQmlnSW50OjphYnNvbHV0ZUFuZE5vdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBC
aWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewogICAgIC8vIHggJiB+eQogCisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKwogICAgIHVuc2lnbmVkIHhMZW5ndGggPSB4Lmxlbmd0aCgpOwogICAgIHVu
c2lnbmVkIHlMZW5ndGggPSB5Lmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9
IHhMZW5ndGg7CiAKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hl
Y2tlZCh2bSwgcmVzdWx0TGVuZ3RoKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0
aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgdW5zaWduZWQgaSA9IDA7CiAgICAgZm9yICg7IGkg
PCBzdGQ6Om1pbih4TGVuZ3RoLCB5TGVuZ3RoKTsgaSsrKQogICAgICAgICByZXN1bHQtPnNldERp
Z2l0KGksIHguZGlnaXQoaSkgJiB+eS5kaWdpdChpKSk7CiAgICAgZm9yICg7IGkgPCByZXN1bHRM
ZW5ndGg7ICsraSkKICAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCB4LmRpZ2l0KGkpKTsKIAot
ICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0KIAogdGVtcGxhdGUg
PHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KLUpTQmlnSW50KiBK
U0JpZ0ludDo6YWJzb2x1dGVYb3IoVk0mIHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5
KQorSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZVhvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewogICAgIGF1dG8gZGlnaXRP
cGVyYXRpb24gPSBbXShEaWdpdCBhLCBEaWdpdCBiKSB7CiAgICAgICAgIHJldHVybiBhIF4gYjsK
ICAgICB9OwotICAgIHJldHVybiBhYnNvbHV0ZUJpdHdpc2VPcCh2bSwgeCwgeSwgRXh0cmFEaWdp
dHNIYW5kbGluZzo6Q29weSwgZGlnaXRPcGVyYXRpb24pOworICAgIHJldHVybiBhYnNvbHV0ZUJp
dHdpc2VPcChnbG9iYWxPYmplY3QsIHgsIHksIEV4dHJhRGlnaXRzSGFuZGxpbmc6OkNvcHksIGRp
Z2l0T3BlcmF0aW9uKTsKIH0KICAgICAKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgog
SlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUFkZE9uZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBCaWdJbnRJbXBsIHgsIFNpZ25PcHRpb24gc2lnbk9wdGlvbikKIHsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCiAgICAgdW5zaWduZWQgaW5wdXRMZW5ndGggPSB4Lmxlbmd0aCgpOwogICAg
IC8vIFRoZSBhZGRpdGlvbiB3aWxsIG92ZXJmbG93IGludG8gYSBuZXcgZGlnaXQgaWYgYWxsIGV4
aXN0aW5nIGRpZ2l0cyBhcmUKICAgICAvLyBhdCBtYXhpbXVtLgpAQCAtMTgxMiw5ICsxOTM2LDgg
QEAgSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUFkZE9uZShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBCaWdJbnRJbXBsIHgsIFMKICAgICB9CiAKICAgICB1bnNpZ25lZCByZXN1bHRM
ZW5ndGggPSBpbnB1dExlbmd0aCArIHdpbGxPdmVyZmxvdzsKLSAgICBKU0JpZ0ludCogcmVzdWx0
ID0gdHJ5Q3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7Ci0gICAg
aWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIEpTQmlnSW50KiByZXN1
bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIERpZ2l0IGNhcnJ5ID0g
MTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5wdXRMZW5ndGg7IGkrKykgewpAQCAt
MTgyOCw3ICsxOTUxLDcgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUFkZE9uZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsIHgsIFMKICAgICAgICAgQVNTRVJU
KCFjYXJyeSk7CiAKICAgICByZXN1bHQtPnNldFNpZ24oc2lnbk9wdGlvbiA9PSBTaWduT3B0aW9u
OjpTaWduZWQpOwotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QtPnZt
KCkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0LT5yaWdodFRyaW0oZ2xv
YmFsT2JqZWN0KSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgpAQCAtMTgz
OSw3ICsxOTYyLDcgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZVN1Yk9uZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsIHgsIHUKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCi0gICAgSlNCaWdJbnQqIHJlc3VsdCA9IHRyeUNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2Jq
ZWN0LCByZXN1bHRMZW5ndGgpOworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVu
Z3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBudWxscHRyKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHgubGVuZ3RoKCk7CkBA
IC0xODUzLDcgKzE5NzYsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlU3ViT25lKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCwgdQogICAgIGZvciAodW5z
aWduZWQgaSA9IGxlbmd0aDsgaSA8IHJlc3VsdExlbmd0aDsgaSsrKQogICAgICAgICByZXN1bHQt
PnNldERpZ2l0KGksIGJvcnJvdyk7CiAKLSAgICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0odm0p
OworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFs
T2JqZWN0KSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUg
QmlnSW50SW1wbDI+CkBAIC0xODc5LDcgKzIwMDIsNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBK
U0JpZ0ludDo6bGVmdFNoaWZ0QnlBYnNvbHV0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBKU0JpZ0ludCogcmVzdWx0
ID0gdHJ5Q3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7CisgICAg
SlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXN1bHRM
ZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIGlm
ICghYml0c1NoaWZ0KSB7CiAgICAgICAgIHVuc2lnbmVkIGkgPSAwOwpAQCAtMTkwNiwyNSArMjAy
OSwyNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6bGVmdFNoaWZ0QnlBYnNvbHV0
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgIH0KIAogICAgIHJlc3VsdC0+c2V0
U2lnbih4LnNpZ24oKSk7Ci0gICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKKyAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdCkp
OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludElt
cGwyPgogSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeUFic29sdXRl
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwy
IHkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHgubGVu
Z3RoKCk7CiAgICAgYm9vbCBzaWduID0geC5zaWduKCk7CiAgICAgYXV0byBvcHRpb25hbFNoaWZ0
ID0gdG9TaGlmdEFtb3VudCh5KTsKICAgICBpZiAoIW9wdGlvbmFsU2hpZnQpCi0gICAgICAgIHJl
dHVybiByaWdodFNoaWZ0QnlNYXhpbXVtKHZtLCBzaWduKTsKKyAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCByaWdodFNoaWZ0QnlNYXhpbXVtKGdsb2JhbE9iamVjdCwgc2lnbikpOwog
CiAgICAgRGlnaXQgc2hpZnQgPSAqb3B0aW9uYWxTaGlmdDsKICAgICB1bnNpZ25lZCBkaWdpdGFs
U2hpZnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2hpZnQgLyBkaWdpdEJpdHMpOwogICAgIHVu
c2lnbmVkIGJpdHNTaGlmdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaGlmdCAlIGRpZ2l0Qml0
cyk7CiAgICAgaW50IHJlc3VsdExlbmd0aCA9IGxlbmd0aCAtIGRpZ2l0YWxTaGlmdDsKICAgICBp
ZiAocmVzdWx0TGVuZ3RoIDw9IDApCi0gICAgICAgIHJldHVybiByaWdodFNoaWZ0QnlNYXhpbXVt
KHZtLCBzaWduKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByaWdodFNoaWZ0
QnlNYXhpbXVtKGdsb2JhbE9iamVjdCwgc2lnbikpOwogCiAgICAgLy8gRm9yIG5lZ2F0aXZlIG51
bWJlcnMsIHJvdW5kIGRvd24gaWYgYW55IGJpdCB3YXMgc2hpZnRlZCBvdXQgKHNvIHRoYXQgZS5n
LgogICAgIC8vIC01biA+PiAxbiA9PSAtM24gYW5kIG5vdCAtMm4pLiBDaGVjayBub3cgd2hldGhl
ciB0aGlzIHdpbGwgaGFwcGVuIGFuZApAQCAtMTk1NSw3ICsyMDgwLDkgQEAgSlNCaWdJbnQ6Oklt
cGxSZXN1bHQgSlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QKICAgICB9CiAKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJl
c3VsdExlbmd0aCkgPD0gbGVuZ3RoKTsKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0
aExlbmd0aFVuY2hlY2tlZCh2bSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdExlbmd0aCkp
OworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdExlbmd0aCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIG51bGxwdHIpOworCiAgICAgaWYgKCFiaXRzU2hpZnQpIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gZGlnaXRhbFNoaWZ0OyBpIDwgbGVuZ3RoOyBpKyspCiAgICAgICAg
ICAgICByZXN1bHQtPnNldERpZ2l0KGkgLSBkaWdpdGFsU2hpZnQsIHguZGlnaXQoaSkpOwpAQCAt
MTk3NSwyMCArMjEwMiwyMSBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6cmlnaHRT
aGlmdEJ5QWJzb2x1dGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdAogICAgICAgICBpZiAo
bXVzdFJvdW5kRG93bikgewogICAgICAgICAgICAgLy8gU2luY2UgdGhlIHJlc3VsdCBpcyBuZWdh
dGl2ZSwgcm91bmRpbmcgZG93biBtZWFucyBhZGRpbmcgb25lIHRvCiAgICAgICAgICAgICAvLyBp
dHMgYWJzb2x1dGUgdmFsdWUuIFRoaXMgY2Fubm90IG92ZXJmbG93LgotICAgICAgICAgICAgcmVz
dWx0ID0gcmVzdWx0LT5yaWdodFRyaW0odm0pOwotICAgICAgICAgICAgcmV0dXJuIGFic29sdXRl
QWRkT25lKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgU2lnbk9wdGlv
bjo6U2lnbmVkKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC0+cmlnaHRUcmltKGdsb2Jh
bE9iamVjdCk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRy
KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVBZGRPbmUo
Z2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWdu
ZWQpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2
bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9i
YWxPYmplY3QpKTsKIH0KIAotSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnJpZ2h0U2hp
ZnRCeU1heGltdW0oVk0mIHZtLCBib29sIHNpZ24pCitKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0Jp
Z0ludDo6cmlnaHRTaGlmdEJ5TWF4aW11bShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBi
b29sIHNpZ24pCiB7CiAgICAgaWYgKHNpZ24pCi0gICAgICAgIHJldHVybiBjcmVhdGVGcm9tKHZt
LCAtMSk7CisgICAgICAgIHJldHVybiBjcmVhdGVGcm9tKGdsb2JhbE9iamVjdCwgLTEpOwogCi0g
ICAgcmV0dXJuIGNyZWF0ZVplcm8odm0pOworICAgIHJldHVybiBjcmVhdGVaZXJvKGdsb2JhbE9i
amVjdCk7CiB9CiAKIC8vIExvb2t1cCB0YWJsZSBmb3IgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJp
dHMgcmVxdWlyZWQgcGVyIGNoYXJhY3RlciBvZiBhCkBAIC0yMDM0LDcgKzIxNjIsNyBAQCB1aW50
NjRfdCBKU0JpZ0ludDo6Y2FsY3VsYXRlTWF4aW11bUNoYXJhY3RlcnNSZXF1aXJlZCh1bnNpZ25l
ZCBsZW5ndGgsIHVuc2lnbmVkCiAgICAgcmV0dXJuIG1heGltdW1DaGFyYWN0ZXJzUmVxdWlyZWQ7
CiB9CiAKLVN0cmluZyBKU0JpZ0ludDo6dG9TdHJpbmdCYXNlUG93ZXJPZlR3byhWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCB1bnNpZ25lZCByYWRpeCkK
K1N0cmluZyBKU0JpZ0ludDo6dG9TdHJpbmdCYXNlUG93ZXJPZlR3byhWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIEpTQmlnSW50KiB4LCB1bnNpZ25lZCBy
YWRpeCkKIHsKICAgICBBU1NFUlQoaGFzT25lQml0U2V0KHJhZGl4KSk7CiAgICAgQVNTRVJUKHJh
ZGl4ID49IDIgJiYgcmFkaXggPD0gMzIpOwpAQCAtMjA1NCw5ICsyMTgyLDkgQEAgU3RyaW5nIEpT
QmlnSW50Ojp0b1N0cmluZ0Jhc2VQb3dlck9mVHdvKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlMKICAgICBjb25zdCBzaXplX3QgY2hhcnNSZXF1aXJlZCA9IChiaXRMZW5n
dGggKyBiaXRzUGVyQ2hhciAtIDEpIC8gYml0c1BlckNoYXIgKyBzaWduOwogCiAgICAgaWYgKGNo
YXJzUmVxdWlyZWQgPiBKU1N0cmluZzo6TWF4TGVuZ3RoKSB7Ci0gICAgICAgIGlmIChnbG9iYWxP
YmplY3QpIHsKKyAgICAgICAgaWYgKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSkgewogICAgICAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICAgICAg
dGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOyAgICAgICAgICAgIAor
ICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKG51bGxPckdsb2JhbE9iamVjdEZvck9P
TSwgc2NvcGUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CkBA
IC0yMDk2LDcgKzIyMjQsNyBAQCBTdHJpbmcgSlNCaWdJbnQ6OnRvU3RyaW5nQmFzZVBvd2VyT2ZU
d28oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKUwogICAgIHJldHVybiBT
dHJpbmdJbXBsOjphZG9wdChXVEZNb3ZlKHJlc3VsdFN0cmluZykpOwogfQogCi1TdHJpbmcgSlNC
aWdJbnQ6OnRvU3RyaW5nR2VuZXJpYyhWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQmlnSW50KiB4LCB1bnNpZ25lZCByYWRpeCkKK1N0cmluZyBKU0JpZ0ludDo6dG9TdHJp
bmdHZW5lcmljKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIG51bGxPckdsb2JhbE9iamVjdEZvck9P
TSwgSlNCaWdJbnQqIHgsIHVuc2lnbmVkIHJhZGl4KQogewogICAgIC8vIEZJWE1FOiBbSlNDXSBS
ZXZpc2l0IHVzYWdlIG9mIFZlY3RvciBpbnRvIEpTQmlnSW50Ojp0b1N0cmluZwogICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA2NzEKQEAgLTIxMTIsOSAr
MjI0MCw5IEBAIFN0cmluZyBKU0JpZ0ludDo6dG9TdHJpbmdHZW5lcmljKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqCiAgICAgdWludDY0X3QgbWF4aW11bUNo
YXJhY3RlcnNSZXF1aXJlZCA9IGNhbGN1bGF0ZU1heGltdW1DaGFyYWN0ZXJzUmVxdWlyZWQobGVu
Z3RoLCByYWRpeCwgeC0+ZGlnaXQobGVuZ3RoIC0gMSksIHNpZ24pOwogCiAgICAgaWYgKG1heGlt
dW1DaGFyYWN0ZXJzUmVxdWlyZWQgPiBKU1N0cmluZzo6TWF4TGVuZ3RoKSB7Ci0gICAgICAgIGlm
IChnbG9iYWxPYmplY3QpIHsKKyAgICAgICAgaWYgKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSkg
ewogICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
ICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOyAgICAg
ICAgICAgIAorICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKG51bGxPckdsb2JhbE9i
amVjdEZvck9PTSwgc2NvcGUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
ICAgICB9CkBAIC0yMTQwLDcgKzIyNjgsOSBAQCBTdHJpbmcgSlNCaWdJbnQ6OnRvU3RyaW5nR2Vu
ZXJpYyhWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KgogICAg
ICAgICBKU0JpZ0ludCoqIGRpdmlkZW5kID0gJng7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAg
IERpZ2l0IGNodW5rOwotICAgICAgICAgICAgYWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29yKHZt
LCBIZWFwQmlnSW50SW1wbCB7ICpkaXZpZGVuZCB9LCBjaHVua0Rpdmlzb3IsICZyZXN0LCBjaHVu
ayk7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBhYnNvbHV0ZURpdldpdGhEaWdpdERpdmlz
b3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCB2bSwgSGVhcEJpZ0ludEltcGwgeyAqZGl2aWRl
bmQgfSwgY2h1bmtEaXZpc29yLCAmcmVzdCwgY2h1bmspOworICAgICAgICAgICAgaWYgKCFzdWNj
ZXNzKQorICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAgICAgICAgIGRpdmlk
ZW5kID0gJnJlc3Q7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2h1bmtD
aGFyczsgaSsrKSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0U3RyaW5nLmFwcGVuZChyYWRpeERp
Z2l0c1tjaHVuayAlIHJhZGl4XSk7CkBAIC0yMTgxLDggKzIzMTEsMTAgQEAgU3RyaW5nIEpTQmln
SW50Ojp0b1N0cmluZ0dlbmVyaWMoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0JpZ0ludCoKICAgICByZXR1cm4gU3RyaW5nSW1wbDo6YWRvcHQoV1RGTW92ZShyZXN1bHRT
dHJpbmcpKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpyaWdodFRyaW0oVk0mIHZtKQorSlNC
aWdJbnQqIEpTQmlnSW50OjpyaWdodFRyaW0oSlNHbG9iYWxPYmplY3QqIG51bGxPckdsb2JhbE9i
amVjdEZvck9PTSwgVk0mIHZtKQogeworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIGlmIChpc1plcm8oKSkgewogICAgICAgICBBU1NFUlQoIXNpZ24oKSk7
CiAgICAgICAgIHJldHVybiB0aGlzOwpAQCAtMjE5MiwyMyArMjMyNCw0MSBAQCBKU0JpZ0ludCog
SlNCaWdJbnQ6OnJpZ2h0VHJpbShWTSYgdm0pCiAgICAgd2hpbGUgKG5vblplcm9JbmRleCA+PSAw
ICYmICFkaWdpdChub25aZXJvSW5kZXgpKQogICAgICAgICBub25aZXJvSW5kZXgtLTsKIAotICAg
IGlmIChub25aZXJvSW5kZXggPCAwKQotICAgICAgICByZXR1cm4gY3JlYXRlWmVybyh2bSk7Cisg
ICAgaWYgKG5vblplcm9JbmRleCA8IDApIHsKKyAgICAgICAgaWYgKG51bGxPckdsb2JhbE9iamVj
dEZvck9PTSkKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY3JlYXRlWmVy
byhudWxsT3JHbG9iYWxPYmplY3RGb3JPT00pKTsKKyAgICAgICAgcmV0dXJuIHRyeUNyZWF0ZVpl
cm8odm0pOworICAgIH0KIAogICAgIGlmIChub25aZXJvSW5kZXggPT0gc3RhdGljX2Nhc3Q8aW50
PihtX2xlbmd0aCAtIDEpKQogICAgICAgICByZXR1cm4gdGhpczsKIAogICAgIHVuc2lnbmVkIG5l
d0xlbmd0aCA9IG5vblplcm9JbmRleCArIDE7Ci0gICAgSlNCaWdJbnQqIHRyaW1tZWRCaWdJbnQg
PSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCBuZXdMZW5ndGgpOwotICAgIHN0ZDo6Y29w
eShkYXRhU3RvcmFnZSgpLCBkYXRhU3RvcmFnZSgpICsgbmV3TGVuZ3RoLCB0cmltbWVkQmlnSW50
LT5kYXRhU3RvcmFnZSgpKTsgCisgICAgSlNCaWdJbnQqIHRyaW1tZWRCaWdJbnQgPSBudWxscHRy
OworICAgIGlmIChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00pIHsKKyAgICAgICAgdHJpbW1lZEJp
Z0ludCA9IGNyZWF0ZVdpdGhMZW5ndGgobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBuZXdMZW5n
dGgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKyAgICB9
IGVsc2UgeworICAgICAgICB0cmltbWVkQmlnSW50ID0gdHJ5Q3JlYXRlV2l0aExlbmd0aCh2bSwg
bmV3TGVuZ3RoKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCF0cmltbWVkQmlnSW50KSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBzdGQ6OmNvcHkoZGF0YVN0b3JhZ2Uo
KSwgZGF0YVN0b3JhZ2UoKSArIG5ld0xlbmd0aCwgdHJpbW1lZEJpZ0ludC0+ZGF0YVN0b3JhZ2Uo
KSk7CiAKICAgICB0cmltbWVkQmlnSW50LT5zZXRTaWduKHRoaXMtPnNpZ24oKSk7CiAKICAgICBy
ZXR1cm4gdHJpbW1lZEJpZ0ludDsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjphbGxvY2F0ZUZv
cihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIHVuc2lnbmVkIHJhZGl4LCB1
bnNpZ25lZCBjaGFyY291bnQpCitKU0JpZ0ludCogSlNCaWdJbnQ6OnJpZ2h0VHJpbShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiByaWdodFRyaW0oZ2xvYmFsT2Jq
ZWN0LCBnbG9iYWxPYmplY3QtPnZtKCkpOworfQorCitKU0JpZ0ludCogSlNCaWdJbnQ6OmFsbG9j
YXRlRm9yKEpTR2xvYmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIFZNJiB2bSwg
dW5zaWduZWQgcmFkaXgsIHVuc2lnbmVkIGNoYXJjb3VudCkKIHsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBBU1NFUlQoMiA8PSByYWRpeCAmJiByYWRp
eCA8PSAzNik7CiAKICAgICBzaXplX3QgYml0c1BlckNoYXIgPSBtYXhCaXRzUGVyQ2hhclRhYmxl
W3JhZGl4XTsKQEAgLTIyMjIsMTcgKzIzNzIsMTQgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjphbGxv
Y2F0ZUZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIHVuc2lnbmVkIHIK
ICAgICAgICAgaWYgKGJpdHNNaW4gPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihtYXhJbnQpKSB7CiAg
ICAgICAgICAgICAvLyBEaXZpZGUgYnkga0RpZ2l0c0JpdHMsIHJvdW5kaW5nIHVwLgogICAgICAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0gKGJpdHNNaW4gKyBkaWdpdEJpdHMgLSAxKSAvIGRpZ2l0
Qml0czsKLSAgICAgICAgICAgIGlmIChsZW5ndGggPD0gbWF4TGVuZ3RoKSB7Ci0gICAgICAgICAg
ICAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoVW5jaGVj
a2VkKHZtLCBsZW5ndGgpOwotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAobGVuZ3RoIDw9IG1heExlbmd0aCkKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNyZWF0ZVdpdGhMZW5ndGgobnVsbE9yR2xv
YmFsT2JqZWN0Rm9yT09NLCB2bSwgbGVuZ3RoKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBp
ZiAoZ2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJCaWdJbnQgZ2VuZXJhdGVkIGZyb20gdGhpcyBvcGVyYXRpb24gaXMgdG9vIGJpZyJfcyk7
Ci0gICAgfQorICAgIGlmIChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00pCisgICAgICAgIHRocm93
T3V0T2ZNZW1vcnlFcnJvcihudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHNjb3BlLCAiQmlnSW50
IGdlbmVyYXRlZCBmcm9tIHRoaXMgb3BlcmF0aW9uIGlzIHRvbyBiaWciX3MpOworCiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKQEAgLTIyOTAsNyArMjQzNyw3IEBAIEpTVmFsdWUgSlNCaWdJbnQ6
OnBhcnNlSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENoYXJUeXBlKiAgZGF0YSwg
dW5zaWduCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KLUpTVmFsdWUgSlNCaWdJ
bnQ6OnBhcnNlSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgQ2hhclR5
cGUqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQg
cmFkaXgsIEVycm9yUGFyc2VNb2RlIGVycm9yUGFyc2VNb2RlLCBQYXJzZUludFNpZ24gc2lnbiwg
UGFyc2VJbnRNb2RlIHBhcnNlTW9kZSkKK0pTVmFsdWUgSlNCaWdJbnQ6OnBhcnNlSW50KEpTR2xv
YmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIFZNJiB2bSwgQ2hhclR5cGUqIGRh
dGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgcmFkaXgs
IEVycm9yUGFyc2VNb2RlIGVycm9yUGFyc2VNb2RlLCBQYXJzZUludFNpZ24gc2lnbiwgUGFyc2VJ
bnRNb2RlIHBhcnNlTW9kZSkKIHsKICAgICBBU1NFUlQobGVuZ3RoID49IDApOwogICAgIHVuc2ln
bmVkIHAgPSBzdGFydEluZGV4OwpAQCAtMjI5OCw5ICsyNDQ1LDkgQEAgSlNWYWx1ZSBKU0JpZ0lu
dDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBDaGFyVHlw
ZSogZGF0YSwKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBpZiAocGFyc2VNb2RlICE9IFBhcnNlSW50TW9kZTo6QWxsb3dFbXB0eVN0cmluZyAmJiBzdGFy
dEluZGV4ID09IGxlbmd0aCkgewotICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKKyAgICAg
ICAgQVNTRVJUKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSk7CiAgICAgICAgIGlmIChlcnJvclBh
cnNlTW9kZSA9PSBFcnJvclBhcnNlTW9kZTo6VGhyb3dFeGNlcHRpb25zKQotICAgICAgICAgICAg
dGhyb3dWTUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVN5bnRheEVycm9yKGdsb2Jh
bE9iamVjdCwgIkZhaWxlZCB0byBwYXJzZSBTdHJpbmcgdG8gQmlnSW50IikpOworICAgICAgICAg
ICAgdGhyb3dWTUVycm9yKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgc2NvcGUsIGNyZWF0ZVN5
bnRheEVycm9yKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgIkZhaWxlZCB0byBwYXJzZSBTdHJp
bmcgdG8gQmlnSW50IikpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIH0KIApAQCAt
MjMxOSw3ICsyNDY2LDkgQEAgSlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJbnQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBDaGFyVHlwZSogZGF0YSwKICNpZiBVU0UoQklHSU5U
MzIpCiAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKDApOwogI2Vsc2UKLSAgICAgICAgcmV0dXJu
IGNyZWF0ZVplcm8odm0pOworICAgICAgICBpZiAobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NKQor
ICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjcmVhdGVaZXJvKG51bGxPckds
b2JhbE9iamVjdEZvck9PTSkpOworICAgICAgICByZXR1cm4gdHJ5Q3JlYXRlWmVybyh2bSk7CiAj
ZW5kaWYKICAgICB9CiAKQEAgLTI0MTQsOCArMjU2Myw4IEBAIEpTVmFsdWUgSlNCaWdJbnQ6OnBh
cnNlSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgQ2hhclR5cGUqIGRh
dGEsCiAgICAgICAgICAgICAgICAgZGlnaXQgKz0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGRhdGFb
cF0gLSAnQScgKyAxMCk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAo
ZXJyb3JQYXJzZU1vZGUgPT0gRXJyb3JQYXJzZU1vZGU6OlRocm93RXhjZXB0aW9ucykgewotICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAgICAgICAg
ICAgdGhyb3dWTUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVN5bnRheEVycm9yKGds
b2JhbE9iamVjdCwgIkZhaWxlZCB0byBwYXJzZSBTdHJpbmcgdG8gQmlnSW50IikpOworICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NKTsKKyAgICAgICAg
ICAgICAgICAgICAgdGhyb3dWTUVycm9yKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgc2NvcGUs
IGNyZWF0ZVN5bnRheEVycm9yKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgIkZhaWxlZCB0byBw
YXJzZSBTdHJpbmcgdG8gQmlnSW50IikpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgfQpAQCAtMjQzMywxMiArMjU4Miwx
MyBAQCBKU1ZhbHVlIEpTQmlnSW50OjpwYXJzZUludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBWTSYgdm0sIENoYXJUeXBlKiBkYXRhLAogI2lmIFVTRShCSUdJTlQzMikKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF5YmVS
ZXN1bHQpKTsKICNlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3Jl
YXRlRnJvbSh2bSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF5YmVSZXN1bHQpKTsKKyAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6Y3JlYXRlRnJv
bShudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHN0YXRpY19jYXN0PGludDMyX3Q+KG1heWJlUmVz
dWx0KSkpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaGVhcFJlc3VsdCA9IGFsbG9jYXRlRm9yKGdsb2JhbE9iamVjdCwgdm0sIHJhZGl4LCBp
bml0aWFsTGVuZ3RoKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpT
VmFsdWUoKSk7CisgICAgICAgICAgICBoZWFwUmVzdWx0ID0gYWxsb2NhdGVGb3IobnVsbE9yR2xv
YmFsT2JqZWN0Rm9yT09NLCB2bSwgcmFkaXgsIGluaXRpYWxMZW5ndGgpOworICAgICAgICAgICAg
aWYgKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICAgICAgLy8gcmVzdWx0IGNhbiBz
dGlsbCBiZSBudWxsIGlmIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIGdsb2JhbCBvYmplY3QsIGFz
IGFsbG9jYXRlRm9yIGNhbm5vdCB0aHJvdyBhbiBleGNlcHRpb24gaW4gdGhhdCBjYXNlLgogICAg
ICAgICAgICAgaWYgKCFoZWFwUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7CkBAIC0yNDUxLDcgKzI2MDEsNyBAQCBKU1ZhbHVlIEpTQmlnSW50OjpwYXJzZUludChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIENoYXJUeXBlKiBkYXRhLAogICAgIH0K
IAogICAgIGhlYXBSZXN1bHQtPnNldFNpZ24oc2lnbiA9PSBQYXJzZUludFNpZ246OlNpZ25lZCk7
Ci0gICAgcmV0dXJuIGhlYXBSZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBoZWFwUmVzdWx0LT5yaWdodFRyaW0obnVsbE9yR2xvYmFsT2JqZWN0Rm9y
T09NLCB2bSkpOwogfQogCiBKU09iamVjdCogSlNCaWdJbnQ6OnRvT2JqZWN0KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CkBAIC0yNzM4LDExICsyODg4LDEyIEBAIHRlbXBsYXRl
IDx0eXBlbmFtZSBCaWdJbnRJbXBsPgogSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFz
SW50TkltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0X3QgbiwgQmlnSW50
SW1wbCBiaWdJbnQpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChiaWdJbnQuaXNa
ZXJvKCkpCiAgICAgICAgIHJldHVybiBiaWdJbnQ7CiAgICAgaWYgKG4gPT0gMCkKLSAgICAgICAg
cmV0dXJuIHplcm9JbXBsKHZtKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB6
ZXJvSW1wbChnbG9iYWxPYmplY3QpKTsKIAogICAgIHVpbnQ2NF90IG5lZWRlZExlbmd0aCA9IChu
ICsgZGlnaXRCaXRzIC0gMSkgLyBkaWdpdEJpdHM7CiAgICAgdWludDY0X3QgbGVuZ3RoID0gc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KGJpZ0ludC5sZW5ndGgoKSk7CkBAIC0yNzY2LDIzICsyOTE3LDIz
IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojphc0ludE5JbXBsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF90CiAgICAgQVNTRVJUKG4gPD0gSU5UMzJfTUFYKTsK
ICAgICBpbnQzMl90IE4gPSBzdGF0aWNfY2FzdDxpbnQzMl90PihuKTsKICAgICBpZiAoIWhhc0Jp
dCkKLSAgICAgICAgcmV0dXJuIHRydW5jYXRlVG9OQml0cyh2bSwgTiwgYmlnSW50KTsKKyAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB0cnVuY2F0ZVRvTkJpdHMoZ2xvYmFsT2JqZWN0
LCBOLCBiaWdJbnQpKTsKICAgICBpZiAoIWJpZ0ludC5zaWduKCkpCi0gICAgICAgIHJldHVybiB0
cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKHZtLCBOLCBiaWdJbnQsIHRydWUpOworICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHRydW5jYXRlQW5kU3ViRnJvbVBvd2VyT2ZUd28o
Z2xvYmFsT2JqZWN0LCBOLCBiaWdJbnQsIHRydWUpKTsKIAogICAgIC8vIE5lZ2F0aXZlIG51bWJl
cnMgbXVzdCBzdWJ0cmFjdCBmcm9tIDJebiwgZXhjZXB0IGZvciB0aGUgc3BlY2lhbCBjYXNlCiAg
ICAgLy8gZGVzY3JpYmVkIGFib3ZlLgogICAgIGlmICgodG9wRGlnaXQgJiAoY29tcGFyZURpZ2l0
IC0gMSkpID09IDApIHsKICAgICAgICAgZm9yIChpbnQzMl90IGkgPSBzdGF0aWNfY2FzdDxpbnQz
Ml90PihuZWVkZWRMZW5ndGgpIC0gMjsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgIGlmIChi
aWdJbnQuZGlnaXQoaSkgIT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1bmNhdGVBbmRT
dWJGcm9tUG93ZXJPZlR3byh2bSwgTiwgYmlnSW50LCBmYWxzZSk7CisgICAgICAgICAgICAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKGds
b2JhbE9iamVjdCwgTiwgYmlnSW50LCBmYWxzZSkpOwogICAgICAgICB9CiAgICAgICAgIC8vIFRy
dW5jYXRpb24gaXMgbm8tb3AgaWYgYmlnSW50ID09IC0yXihuLTEpLgogICAgICAgICBpZiAobGVu
Z3RoID09IG5lZWRlZExlbmd0aCAmJiB0b3BEaWdpdCA9PSBjb21wYXJlRGlnaXQpCiAgICAgICAg
ICAgICByZXR1cm4gYmlnSW50OwotICAgICAgICByZXR1cm4gdHJ1bmNhdGVUb05CaXRzKHZtLCBO
LCBiaWdJbnQpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHRydW5jYXRlVG9O
Qml0cyhnbG9iYWxPYmplY3QsIE4sIGJpZ0ludCkpOwogICAgIH0KLSAgICByZXR1cm4gdHJ1bmNh
dGVBbmRTdWJGcm9tUG93ZXJPZlR3byh2bSwgTiwgYmlnSW50LCBmYWxzZSk7CisgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCB0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKGdsb2JhbE9i
amVjdCwgTiwgYmlnSW50LCBmYWxzZSkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50
SW1wbD4KQEAgLTI3OTQsNyArMjk0NSw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50
Ojphc1VpbnROSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfCiAgICAg
aWYgKGJpZ0ludC5pc1plcm8oKSkKICAgICAgICAgcmV0dXJuIGJpZ0ludDsKICAgICBpZiAobiA9
PSAwKQotICAgICAgICByZXR1cm4gemVyb0ltcGwodm0pOworICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIHplcm9JbXBsKGdsb2JhbE9iamVjdCkpOwogCiAgICAgLy8gSWYgYmlnSW50
IGlzIG5lZ2F0aXZlLCBzaW11bGF0ZSB0d28ncyBjb21wbGVtZW50IHJlcHJlc2VudGF0aW9uLgog
ICAgIGlmIChiaWdJbnQuc2lnbigpKSB7CkBAIC0yODAyLDcgKzI5NTMsNyBAQCBKU0JpZ0ludDo6
SW1wbFJlc3VsdCBKU0JpZ0ludDo6YXNVaW50TkltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgdWludDY0XwogICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsICJCaWdJbnQgZ2VuZXJhdGVkIGZyb20gdGhpcyBvcGVyYXRpb24gaXMgdG9v
IGJpZyJfcyk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAg
ICByZXR1cm4gdHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byh2bSwgc3RhdGljX2Nhc3Q8aW50
MzJfdD4obiksIGJpZ0ludCwgZmFsc2UpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIHRydW5jYXRlQW5kU3ViRnJvbVBvd2VyT2ZUd28oZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2Fz
dDxpbnQzMl90PihuKSwgYmlnSW50LCBmYWxzZSkpOwogICAgIH0KIAogICAgIC8vIElmIGJpZ0lu
dCBpcyBwb3NpdGl2ZSBhbmQgaGFzIHVwIHRvIG4gYml0cywgcmV0dXJuIGl0IGRpcmVjdGx5LgpA
QCAtMjgyNCwxOCArMjk3NSwyMiBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YXNV
aW50TkltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0XwogCiAgICAgLy8g
T3RoZXJ3aXNlLCB0cnVuY2F0ZS4KICAgICBBU1NFUlQobiA8PSBJTlQzMl9NQVgpOwotICAgIHJl
dHVybiB0cnVuY2F0ZVRvTkJpdHModm0sIHN0YXRpY19jYXN0PGludDMyX3Q+KG4pLCBiaWdJbnQp
OworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdHJ1bmNhdGVUb05CaXRzKGdsb2JhbE9i
amVjdCwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obiksIGJpZ0ludCkpOwogfQogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQmlnSW50SW1wbD4KLUpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojp0cnVu
Y2F0ZVRvTkJpdHMoVk0mIHZtLCBpbnQzMl90IG4sIEJpZ0ludEltcGwgYmlnSW50KQorSlNCaWdJ
bnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnRydW5jYXRlVG9OQml0cyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBpbnQzMl90IG4sIEJpZ0ludEltcGwgYmlnSW50KQogeworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBBU1NFUlQobiAhPSAwKTsKICAgICBBU1NFUlQoYmlnSW50Lmxlbmd0
aCgpID4gbiAvIGRpZ2l0Qml0cyk7CiAKICAgICBpbnQzMl90IG5lZWRlZERpZ2l0cyA9IChuICsg
KGRpZ2l0Qml0cyAtIDEpKSAvIGRpZ2l0Qml0czsKICAgICBBU1NFUlQobmVlZGVkRGlnaXRzIDw9
IHN0YXRpY19jYXN0PGludDMyX3Q+KGJpZ0ludC5sZW5ndGgoKSkpOwotICAgIEpTQmlnSW50KiBy
ZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCBuZWVkZWREaWdpdHMpOworICAg
IEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgbmVlZGVk
RGlnaXRzKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBB
U1NFUlQocmVzdWx0KTsKIAogICAgIC8vIENvcHkgYWxsIGRpZ2l0cyBleGNlcHQgdGhlIE1TRC4K
QEAgLTI4NTEsMTkgKzMwMDYsMjMgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnRy
dW5jYXRlVG9OQml0cyhWTSYgdm0sIGludDMyX3QgbiwgQmlnSW50SW1wbCBiaWcKICAgICB9CiAg
ICAgcmVzdWx0LT5zZXREaWdpdChsYXN0LCBtc2QpOwogICAgIHJlc3VsdC0+c2V0U2lnbihiaWdJ
bnQuc2lnbigpKTsKLSAgICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0odm0pOworICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7CiB9
CiAKIC8vIFN1YnRyYWN0cyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgbiBiaXRzIG9mIGFicyhiaWdJ
bnQpIGZyb20gMl5uLgogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci1KU0JpZ0ludDo6
SW1wbFJlc3VsdCBKU0JpZ0ludDo6dHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byhWTSYgdm0s
IGludDMyX3QgbiwgQmlnSW50SW1wbCBiaWdJbnQsIGJvb2wgcmVzdWx0U2lnbikKK0pTQmlnSW50
OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojp0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgbiwgQmlnSW50SW1wbCBiaWdJbnQsIGJv
b2wgcmVzdWx0U2lnbikKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgQVNTRVJUKG4gIT0g
MCk7CiAgICAgQVNTRVJUKG4gPD0gc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4TGVuZ3RoQml0cykp
OwogCiAgICAgaW50MzJfdCBuZWVkZWREaWdpdHMgPSAobiArIChkaWdpdEJpdHMgLSAxKSkgLyBk
aWdpdEJpdHM7CiAgICAgQVNTRVJUKG5lZWRlZERpZ2l0cyA8PSBzdGF0aWNfY2FzdDxpbnQzMl90
PihtYXhMZW5ndGgpKTsgLy8gRm9sbG93cyBmcm9tIG4gPD0gbWF4TGVuZ3RoQml0cy4KLSAgICBK
U0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgbmVlZGVkRGln
aXRzKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmpl
Y3QsIG5lZWRlZERpZ2l0cyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0
cik7CiAgICAgQVNTRVJUKHJlc3VsdCk7CiAKICAgICAvLyBQcm9jZXNzIGFsbCBkaWdpdHMgZXhj
ZXB0IHRoZSBNU0QuCkBAIC0yOTEwLDcgKzMwNjksNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBK
U0JpZ0ludDo6dHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byhWTSYgdm0sIGludDMyX3Qgbiwg
QgogICAgIH0KICAgICByZXN1bHQtPnNldERpZ2l0KGxhc3QsIHJlc3VsdE1TRCk7CiAgICAgcmVz
dWx0LT5zZXRTaWduKHJlc3VsdFNpZ24pOwotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2
bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9i
YWxPYmplY3QpKTsKIH0KIAogSlNWYWx1ZSBKU0JpZ0ludDo6YXNJbnROKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF90IG4sIEpTQmlnSW50KiBiaWdJbnQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAppbmRleCA2YmY4YWIyYTU2NzE5ZjQ3ZTZiNzdh
ODA5ODAxN2Y0YWJlZmFkMzg3Li44ODBiZTdlY2RhNjk1N2Y1MzAzN2IxYThjYjgzNWI0OTAyZGUx
OWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKQEAgLTY1LDE2
ICs2NSwxOCBAQCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHN0
YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCiAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHBy
b3RvdHlwZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVa
ZXJvKFZNJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQmlnSW50KiB0cnlDcmVh
dGVXaXRoTGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0
aWMgSlNCaWdJbnQqIGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQoVk0mLCB1bnNpZ25lZCBsZW5n
dGgpOwotCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9t
KFZNJiwgaW50MzJfdCB2YWx1ZSk7Ci0gICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKFZN
JiwgdWludDMyX3QgdmFsdWUpOwotICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShWTSYs
IGludDY0X3QgdmFsdWUpOwotICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShWTSYsIHVp
bnQ2NF90IHZhbHVlKTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20oVk0mLCBib29s
IHZhbHVlKTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20oVk0mLCBkb3VibGUgdmFs
dWUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlWmVybyhK
U0dsb2JhbE9iamVjdCopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0ludCog
dHJ5Q3JlYXRlWmVybyhWTSYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0lu
dCogdHJ5Q3JlYXRlV2l0aExlbmd0aChWTSYsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVXaXRoTGVuZ3RoKEpTR2xvYmFsT2Jq
ZWN0KiwgdW5zaWduZWQgbGVuZ3RoKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBK
U0JpZ0ludCogY3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCosIGludDMyX3QgdmFsdWUpOworICAg
IHN0YXRpYyBKU0JpZ0ludCogdHJ5Q3JlYXRlRnJvbShWTSYsIGludDMyX3QgdmFsdWUpOworICAg
IHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCosIHVpbnQzMl90IHZh
bHVlKTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqLCBp
bnQ2NF90IHZhbHVlKTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20oSlNHbG9iYWxP
YmplY3QqLCB1aW50NjRfdCB2YWx1ZSk7CisgICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9t
KEpTR2xvYmFsT2JqZWN0KiwgYm9vbCB2YWx1ZSk7CisgICAgc3RhdGljIEpTQmlnSW50KiBjcmVh
dGVGcm9tKEpTR2xvYmFsT2JqZWN0KiwgZG91YmxlIHZhbHVlKTsKIAogICAgIHN0YXRpYyBzaXpl
X3Qgb2Zmc2V0T2ZMZW5ndGgoKQogICAgIHsKQEAgLTkwLDIxICs5MiwyMSBAQCBjbGFzcyBKU0Jp
Z0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KIAotICAgIHN0YXRpYyBKU1ZhbHVlIG1ha2VIZWFwQmln
SW50T3JCaWdJbnQzMihWTSYgdm0sIGludDY0X3QgdmFsdWUpCisgICAgc3RhdGljIEpTVmFsdWUg
bWFrZUhlYXBCaWdJbnRPckJpZ0ludDMyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGlu
dDY0X3QgdmFsdWUpCiAgICAgewogI2lmIFVTRShCSUdJTlQzMikKICAgICAgICAgaWYgKHZhbHVl
IDw9IElOVF9NQVggJiYgdmFsdWUgPj0gSU5UX01JTikKICAgICAgICAgICAgIHJldHVybiBqc0Jp
Z0ludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbHVlKSk7CiAjZW5kaWYKLSAgICAgICAgcmV0
dXJuIEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBKU0Jp
Z0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgSlNWYWx1ZSBtYWtlSGVhcEJpZ0ludE9yQmlnSW50MzIoVk0mIHZtLCBkb3VibGUgdmFsdWUp
CisgICAgc3RhdGljIEpTVmFsdWUgbWFrZUhlYXBCaWdJbnRPckJpZ0ludDMyKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGRvdWJsZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChp
c0ludGVnZXIodmFsdWUpKTsKICAgICAgICAgaWYgKHN0ZDo6YWJzKHZhbHVlKSA8PSBtYXhTYWZl
SW50ZWdlcigpKQotICAgICAgICAgICAgcmV0dXJuIG1ha2VIZWFwQmlnSW50T3JCaWdJbnQzMih2
bSwgc3RhdGljX2Nhc3Q8aW50NjRfdD4odmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIEpTQmlnSW50
OjpjcmVhdGVGcm9tKHZtLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZUhlYXBCaWdJ
bnRPckJpZ0ludDMyKGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8aW50NjRfdD4odmFsdWUpKTsK
KyAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpjcmVhdGVGcm9tKGdsb2JhbE9iamVjdCwgdmFsdWUp
OwogICAgIH0KIAogICAgIGVudW0gY2xhc3MgRXJyb3JQYXJzZU1vZGUgewpAQCAtMTU4LDE3ICsx
NjAsMTMgQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAgIENv
bXBhcmlzb25SZXN1bHQgc3RhdGljIGNvbXBhcmVUb0RvdWJsZShKU0JpZ0ludCogeCwgZG91Ymxl
IHkpOwogCi0gICAgQUxXQVlTX0lOTElORSBzdGF0aWMgSlNWYWx1ZSBhc0ludDMyT3JIZWFwQ2Vs
bChWTSYgdm0sIGludDY0X3QgdmFsdWUpCisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgSlNWYWx1
ZSBhc0ludDMyT3JIZWFwQ2VsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQ2NF90
IHZhbHVlKQogICAgIHsKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgICAgIGlmIChzdGF0aWNfY2Fz
dDxpbnQ2NF90PihzdGF0aWNfY2FzdDxpbnQzMl90Pih2YWx1ZSkpID09IHZhbHVlKQogICAgICAg
ICAgICAgcmV0dXJuIGpzQmlnSW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKTsKICNl
bmRpZgotICAgICAgICByZXR1cm4gY3JlYXRlRnJvbSh2bSwgdmFsdWUpOwotICAgIH0KLSAgICBB
TFdBWVNfSU5MSU5FIHN0YXRpYyBKU1ZhbHVlIGFzSW50MzJPckhlYXBDZWxsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGludDY0X3QgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
YXNJbnQzMk9ySGVhcENlbGwoZ2xvYmFsT2JqZWN0LT52bSgpLCB2YWx1ZSk7CisgICAgICAgIHJl
dHVybiBjcmVhdGVGcm9tKGdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIH0KIAogcHJpdmF0ZToK
QEAgLTE4NCw2ICsxODIsNyBAQCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwg
ewogICAgICAgICBKU1ZhbHVlIHBheWxvYWQ7CiAgICAgfTsKIHByaXZhdGU6CisgICAgc3RhdGlj
IEpTQmlnSW50KiBjcmVhdGVXaXRoTGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiwgVk0mLCB1bnNpZ25l
ZCBsZW5ndGgpOwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFt
ZSBCaWdJbnRJbXBsMj4KICAgICBzdGF0aWMgSW1wbFJlc3VsdCBleHBvbmVudGlhdGVJbXBsKEpT
R2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgYmFzZSwgQmlnSW50SW1wbDIgZXhwb25lbnQpOwpA
QCAtMjEwLDcgKzIwOSw3IEBAIGNsYXNzIEpTQmlnSW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7
CiAgICAgc3RhdGljIEltcGxSZXN1bHQgcmVtYWluZGVySW1wbChKU0dsb2JhbE9iamVjdCosIEJp
Z0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJp
Z0ludEltcGw+Ci0gICAgc3RhdGljIEltcGxSZXN1bHQgdW5hcnlNaW51c0ltcGwoVk0mLCBCaWdJ
bnRJbXBsIHgpOworICAgIHN0YXRpYyBJbXBsUmVzdWx0IHVuYXJ5TWludXNJbXBsKEpTR2xvYmFs
T2JqZWN0KiwgQmlnSW50SW1wbCB4KTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJ
bXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CiAgICAgc3RhdGljIEltcGxSZXN1bHQgYml0d2lz
ZUFuZEltcGwoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsK
QEAgLTI5NSw3ICsyOTQsNyBAQCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwg
ewogICAgIHN0YXRpYyBKU1ZhbHVlIGRpdmlkZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBpbnQzMl90IHgsIGludDMyX3QgeSkKICAgICB7CiAgICAgICAgIGlmICgheSkgewotICAgICAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZ2xvYmFsT2JqZWN0LT52bSgp
KTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGdldFZNKGds
b2JhbE9iamVjdCkpOwogICAgICAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsICIwIGlzIGFuIGludmFsaWQgZGl2aXNvciB2YWx1ZS4iX3MpOwogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgfQpAQCAtMzEwLDcgKzMwOSw3IEBAIGNsYXNzIEpT
QmlnSW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgc3RhdGljIEpTVmFsdWUgcmVtYWlu
ZGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgaW50MzJfdCB5KQog
ICAgIHsKICAgICAgICAgaWYgKCF5KSB7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRShnbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZ2V0Vk0oZ2xvYmFsT2JqZWN0KSk7CiAgICAgICAgICAg
ICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIjAgaXMgYW4gaW52YWxpZCBk
aXZpc29yIHZhbHVlLiJfcyk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAg
ICB9CkBAIC0zMTgsMTEgKzMxNywxMSBAQCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBK
U0NlbGwgewogICAgIH0KICNlbmRpZgogCi0gICAgc3RhdGljIEpTVmFsdWUgdW5hcnlNaW51cyhW
TSYsIEpTQmlnSW50KiB4KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSB1bmFyeU1pbnVzKEpTR2xvYmFs
T2JqZWN0KiwgSlNCaWdJbnQqIHgpOwogI2lmIFVTRShCSUdJTlQzMikKLSAgICBzdGF0aWMgSlNW
YWx1ZSB1bmFyeU1pbnVzKFZNJiB2bSwgaW50MzJfdCB4KQorICAgIHN0YXRpYyBKU1ZhbHVlIHVu
YXJ5TWludXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKHZtLCAtc3RhdGljX2Nhc3Q8aW50NjRf
dD4oeCkpOworICAgICAgICByZXR1cm4gYXNJbnQzMk9ySGVhcENlbGwoZ2xvYmFsT2JqZWN0LCAt
c3RhdGljX2Nhc3Q8aW50NjRfdD4oeCkpOwogICAgIH0KICNlbmRpZgogCkBAIC00MjMsMTIgKzQy
MiwxNCBAQCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAgRGln
aXQgZGlnaXQodW5zaWduZWQpOwogICAgIHZvaWQgc2V0RGlnaXQodW5zaWduZWQsIERpZ2l0KTsg
Ly8gVXNlIG9ubHkgd2hlbiBpbml0aWFsaXppbmcuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNC
aWdJbnQqIHJpZ2h0VHJpbShWTSYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTQmlnSW50KiBy
aWdodFRyaW0oSlNHbG9iYWxPYmplY3QqKTsKIAogcHJpdmF0ZToKICAgICBKU0JpZ0ludChWTSYs
IFN0cnVjdHVyZSosIERpZ2l0KiwgdW5zaWduZWQgbGVuZ3RoKTsKIAotICAgIHN0YXRpYyBKU0Jp
Z0ludCogY3JlYXRlRnJvbUltcGwoVk0mLCB1aW50NjRfdCB2YWx1ZSwgYm9vbCBzaWduKTsKKyAg
ICBKU0JpZ0ludCogcmlnaHRUcmltKEpTR2xvYmFsT2JqZWN0KiwgVk0mKTsKKworICAgIHN0YXRp
YyBKU0JpZ0ludCogY3JlYXRlRnJvbUltcGwoSlNHbG9iYWxPYmplY3QqLCB1aW50NjRfdCB2YWx1
ZSwgYm9vbCBzaWduKTsKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0c1BlckJ5
dGUgPSA4OwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgZGlnaXRCaXRzID0gc2l6ZW9m
KERpZ2l0KSAqIGJpdHNQZXJCeXRlOwpAQCAtNDU0LDcgKzQ1NSw3IEBAIGNsYXNzIEpTQmlnSW50
IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludElt
cGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KICAgICBzdGF0aWMgQ29tcGFyaXNvblJlc3VsdCBh
YnNvbHV0ZUNvbXBhcmUoQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CiAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci0gICAgc3RhdGljIHZvaWQgYWJzb2x1dGVEaXZXaXRo
RGlnaXREaXZpc29yKFZNJiwgQmlnSW50SW1wbCB4LCBEaWdpdCBkaXZpc29yLCBKU0JpZ0ludCoq
IHF1b3RpZW50LCBEaWdpdCYgcmVtYWluZGVyKTsKKyAgICBzdGF0aWMgYm9vbCBhYnNvbHV0ZURp
dldpdGhEaWdpdERpdmlzb3IoSlNHbG9iYWxPYmplY3QqLCBWTSYsIEJpZ0ludEltcGwgeCwgRGln
aXQgZGl2aXNvciwgSlNCaWdJbnQqKiBxdW90aWVudCwgRGlnaXQmIHJlbWFpbmRlcik7CiAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CiAgICAgc3RhdGljIHZvaWQgaW50ZXJuYWxN
dWx0aXBseUFkZChCaWdJbnRJbXBsIHNvdXJjZSwgRGlnaXQgZmFjdG9yLCBEaWdpdCBzdW1tYW5k
LCB1bnNpZ25lZCwgSlNCaWdJbnQqIHJlc3VsdCk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJp
Z0ludEltcGw+CkBAIC00ODksMTYgKzQ5MCwxNiBAQCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1
YmxpYyBKU0NlbGwgewogICAgIH07CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaWdJbnRJbXBs
MSwgdHlwZW5hbWUgQmlnSW50SW1wbDIsIHR5cGVuYW1lIEJpdHdpc2VPcD4KLSAgICBzdGF0aWMg
SlNCaWdJbnQqIGFic29sdXRlQml0d2lzZU9wKFZNJiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1w
bDIgeSwgRXh0cmFEaWdpdHNIYW5kbGluZywgQml0d2lzZU9wJiYpOworICAgIHN0YXRpYyBKU0Jp
Z0ludCogYWJzb2x1dGVCaXR3aXNlT3AoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBC
aWdJbnRJbXBsMiB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nLCBCaXR3aXNlT3AmJik7CiAKICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgotICAg
IHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVBbmQoVk0mLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJ
bXBsMiB5KTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlQW5kKEpTR2xvYmFsT2JqZWN0
KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KLSAgICBzdGF0aWMgSlNCaWdJbnQq
IGFic29sdXRlT3IoVk0mLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKKyAgICBzdGF0
aWMgSlNCaWdJbnQqIGFic29sdXRlT3IoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBC
aWdJbnRJbXBsMiB5KTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVu
YW1lIEJpZ0ludEltcGwyPgotICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVBbmROb3QoVk0m
LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFi
c29sdXRlQW5kTm90KEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIg
eSk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJ
bXBsMj4KLSAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlWG9yKFZNJiwgQmlnSW50SW1wbDEg
eCwgQmlnSW50SW1wbDIgeSk7CisgICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZVhvcihKU0ds
b2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOwogCiAgICAgZW51bSBj
bGFzcyBTaWduT3B0aW9uIHsKICAgICAgICAgU2lnbmVkLApAQCAtNTM1LDIwICs1MzYsMjAgQEAg
Y2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBzdGF0aWMgSlNCaWdJ
bnQqIGFsbG9jYXRlRm9yKEpTR2xvYmFsT2JqZWN0KiwgVk0mLCB1bnNpZ25lZCByYWRpeCwgdW5z
aWduZWQgY2hhcmNvdW50KTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgot
ICAgIHN0YXRpYyBKU0JpZ0ludCogY29weShWTSYsIEJpZ0ludEltcGwgeCk7CisgICAgc3RhdGlj
IEpTQmlnSW50KiBjb3B5KEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbCB4KTsKIAogICAgIHZv
aWQgaW5wbGFjZU11bHRpcGx5QWRkKERpZ2l0IG11bHRpcGxpZXIsIERpZ2l0IHBhcnQpOwogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CiAg
ICAgc3RhdGljIEltcGxSZXN1bHQgYWJzb2x1dGVBZGQoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJ
bXBsMSB4LCBCaWdJbnRJbXBsMiB5LCBib29sIHJlc3VsdFNpZ24pOwogICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+Ci0gICAgc3RhdGljIElt
cGxSZXN1bHQgYWJzb2x1dGVTdWIoVk0mLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LCBi
b29sIHJlc3VsdFNpZ24pOworICAgIHN0YXRpYyBJbXBsUmVzdWx0IGFic29sdXRlU3ViKEpTR2xv
YmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwgYm9vbCByZXN1bHRTaWdu
KTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50
SW1wbDI+CiAgICAgc3RhdGljIEltcGxSZXN1bHQgbGVmdFNoaWZ0QnlBYnNvbHV0ZShKU0dsb2Jh
bE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOwogICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CiAgICAgc3RhdGljIElt
cGxSZXN1bHQgcmlnaHRTaGlmdEJ5QWJzb2x1dGUoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBs
MSB4LCBCaWdJbnRJbXBsMiB5KTsKIAotICAgIHN0YXRpYyBJbXBsUmVzdWx0IHJpZ2h0U2hpZnRC
eU1heGltdW0oVk0mLCBib29sIHNpZ24pOworICAgIHN0YXRpYyBJbXBsUmVzdWx0IHJpZ2h0U2hp
ZnRCeU1heGltdW0oSlNHbG9iYWxPYmplY3QqLCBib29sIHNpZ24pOwogCiAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEJpZ0ludEltcGw+CiAgICAgc3RhdGljIE9wdGlvbmFsPERpZ2l0PiB0b1NoaWZ0
QW1vdW50KEJpZ0ludEltcGwgeCk7CkBAIC01NTgsOSArNTU5LDkgQEAgY2xhc3MgSlNCaWdJbnQg
ZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1w
bD4KICAgICBzdGF0aWMgSW1wbFJlc3VsdCBhc1VpbnROSW1wbChKU0dsb2JhbE9iamVjdCosIHVp
bnQ2NF90LCBCaWdJbnRJbXBsKTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4K
LSAgICBzdGF0aWMgSW1wbFJlc3VsdCB0cnVuY2F0ZVRvTkJpdHMoVk0mLCBpbnQzMl90LCBCaWdJ
bnRJbXBsKTsKKyAgICBzdGF0aWMgSW1wbFJlc3VsdCB0cnVuY2F0ZVRvTkJpdHMoSlNHbG9iYWxP
YmplY3QqLCBpbnQzMl90LCBCaWdJbnRJbXBsKTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmln
SW50SW1wbD4KLSAgICBzdGF0aWMgSW1wbFJlc3VsdCB0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9m
VHdvKFZNJiwgaW50MzJfdCwgQmlnSW50SW1wbCwgYm9vbCByZXN1bHRTaWduKTsKKyAgICBzdGF0
aWMgSW1wbFJlc3VsdCB0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKEpTR2xvYmFsT2JqZWN0
KiwgaW50MzJfdCwgQmlnSW50SW1wbCwgYm9vbCByZXN1bHRTaWduKTsKIAogICAgIGlubGluZSBz
dGF0aWMgc2l6ZV90IG9mZnNldE9mRGF0YSgpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAppbmRleCBhNDU3NzJjZmVhNDY0YTk0ZWFhZTE2MGYy
NTg1NmJiZjE5M2Y5MGJkLi45ZTQ3MDNiYjU2MWI5MDRlYjEzZDJlODdkOTg0NzZkMGNlZjRlZjI5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcApAQCAt
MTE4LDE5ICsxMTgsMjMgQEAgSlNPYmplY3QqIEpTVmFsdWU6OnRvT2JqZWN0U2xvd0Nhc2UoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKIAogSlNWYWx1ZSBKU1ZhbHVlOjp0b1Ro
aXNTbG93Q2FzZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFQ01BTW9kZSBlY21hTW9k
ZSkgY29uc3QKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgQVNTRVJUKCFpc0NlbGwoKSk7
CiAKICAgICBpZiAoZWNtYU1vZGUuaXNTdHJpY3QoKSkKICAgICAgICAgcmV0dXJuICp0aGlzOwog
CiAgICAgaWYgKGlzSW50MzIoKSB8fCBpc0RvdWJsZSgpKQotICAgICAgICByZXR1cm4gY29uc3Ry
dWN0TnVtYmVyKGdsb2JhbE9iamVjdCwgYXNWYWx1ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBjb25zdHJ1Y3ROdW1iZXIoZ2xvYmFsT2JqZWN0LCBhc1ZhbHVlKCkpKTsK
ICAgICBpZiAoaXNUcnVlKCkgfHwgaXNGYWxzZSgpKQotICAgICAgICByZXR1cm4gY29uc3RydWN0
Qm9vbGVhbkZyb21JbW1lZGlhdGVCb29sZWFuKGdsb2JhbE9iamVjdCwgYXNWYWx1ZSgpKTsKKyAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25zdHJ1Y3RCb29sZWFuRnJvbUltbWVk
aWF0ZUJvb2xlYW4oZ2xvYmFsT2JqZWN0LCBhc1ZhbHVlKCkpKTsKICNpZiBVU0UoQklHSU5UMzIp
CiAgICAgaWYgKGlzQmlnSW50MzIoKSkgewotICAgICAgICBKU0NlbGwqIGhlYXBCaWdJbnQgPSBz
dGF0aWNfY2FzdDxKU0NlbGwqPihKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QtPnZt
KCksIGJpZ0ludDMyQXNJbnQzMigpKSk7Ci0gICAgICAgIHJldHVybiBoZWFwQmlnSW50LT50b09i
amVjdChnbG9iYWxPYmplY3QpOworICAgICAgICBKU0NlbGwqIGhlYXBCaWdJbnQgPSBzdGF0aWNf
Y2FzdDxKU0NlbGwqPihKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIGJpZ0ludDMy
QXNJbnQzMigpKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Cisg
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgaGVhcEJpZ0ludC0+dG9PYmplY3QoZ2xv
YmFsT2JqZWN0KSk7CiAgICAgfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAppbmRleCBmYTk4YzUxMmYxNDEzNWQxMmE4MTUzM2I1MzJmYzM5ZDc2NmIxYWMxLi5kNTEw
YzRlNGQ4ZDJhMjliYzYwZGZkYWQ5NWIyZWE3ODI2ZmE3NDJiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCkBAIC00NzIsNyArNDcyLDExIEBAIFZNOjpWTShWTVR5cGUgdm1UeXBl
LCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAgICAgc2VudGluZWxNYXBCdWNrZXQoKTsKICAgICAg
ICAgc2VudGluZWxTZXRCdWNrZXQoKTsKICAgICB9Ci0gICAgaGVhcEJpZ0ludENvbnN0YW50T25l
LnNldCgqdGhpcywgSlNCaWdJbnQ6OmNyZWF0ZUZyb20oKnRoaXMsIDEpKTsKKyAgICB7CisgICAg
ICAgIGF1dG8qIGJpZ0ludCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVGcm9tKCp0aGlzLCAxKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoYmlnSW50KTsKKyAgICAgICAgaGVhcEJpZ0ludENvbnN0YW50
T25lLnNldCgqdGhpcywgYmlnSW50KTsKKyAgICB9CiAKICAgICBUaHJlYWQ6OmN1cnJlbnQoKS5z
ZXRDdXJyZW50QXRvbVN0cmluZ1RhYmxlKGV4aXN0aW5nRW50cnlBdG9tU3RyaW5nVGFibGUpOwog
ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHAKaW5kZXggYjUyMzAzOGQwYWQ1YWU3ZjQ1NTQwMTI2MDg2M2Q3Njk4NjQxNmVk
Zi4uZmRkODI1YzIwODAwNWFhZGNlYTIzZDk1OGNlZWE3NGExMWExZDkyMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBA
IC0zMDA3LDcgKzMwMDcsMTEgQEAgY2xhc3MgQ2xvbmVEZXNlcmlhbGl6ZXIgOiBDbG9uZUJhc2Ug
ewogI2lmIFVTRShCSUdJTlQzMikKICAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKDApOwog
I2Vsc2UKLSAgICAgICAgICAgIEpTQmlnSW50KiBiaWdJbnQgPSBKU0JpZ0ludDo6Y3JlYXRlWmVy
byhtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICAgICAgSlNCaWdJbnQqIGJp
Z0ludCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVaZXJvKG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0o
KSk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWJpZ0ludCkpIHsKKyAgICAgICAgICAgICAg
ICBmYWlsKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kV2l0aENyYXNoT25PdmVyZmxvdyhiaWdJ
bnQpOwogICAgICAgICAgICAgcmV0dXJuIGJpZ0ludDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCAxNWZlYzc3ZTg5MGI5YmQz
MjRmMTg3NmRmZWU3N2YxNTM3OWU4MjQ2Li4xZDRjZTUxNGMyMzY5OWVlZTQ3ZjEyZWZkNmI0NGE2
NDk1ZDY5OTQ0IDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA1LTI4ICBZdXN1a2UgU3V6dWtpICA8eXN1
enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW0pTQ10gSlNCaWdJbnQgYWxsb2NhdGlvbiBzaG91
bGQgYmUgZ3JhY2VmdWwgZm9yIE9PTQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjEyNTEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBzdHJlc3MvYmlnaW50LWNhbi10aHJvdy1vb20uanM6IENvcGllZCBm
cm9tIEpTVGVzdHMvc3RyZXNzL2dldC1mdW5jdGlvbi1yZWFsbS1ub3QtZG9pbmctcmVjdXJzaW9u
LmpzLgorICAgICAgICAoY2FuVGhyb3cpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGdldCBm
b28pOgorICAgICAgICAqIHN0cmVzcy9nZXQtZnVuY3Rpb24tcmVhbG0tbm90LWRvaW5nLXJlY3Vy
c2lvbi5qczoKKyAgICAgICAgKGNhblRocm93KToKKwogMjAyMC0wNS0yNyAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBmb3Itb2Ygc2hvdWxkIGNoZWNr
IHRoZSBpdGVyYWJsZSBpcyBhIEpTQXJyYXkgZm9yIEZhc3RBcnJheSBpbiBERkcgaXRlcmF0b3Jf
b3BlbgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvYmlnaW50LWNhbi10aHJvdy1vb20uanMg
Yi9KU1Rlc3RzL3N0cmVzcy9iaWdpbnQtY2FuLXRocm93LW9vbS5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MDMx
YjdjOGRlMTcyZTgyNmY5NGFlNTUxM2I4YTU0YTBjYWIyM2FiCi0tLSAvZGV2L251bGwKKysrIGIv
SlNUZXN0cy9zdHJlc3MvYmlnaW50LWNhbi10aHJvdy1vb20uanMKQEAgLTAsMCArMSwzOSBAQAor
Ly9AIHNraXAgaWYgJG1lbW9yeUxpbWl0ZWQKKy8vQCBydW5EZWZhdWx0KCItLXVzZUNvbmN1cnJl
bnRKSVQ9MCIpCisKK2Z1bmN0aW9uIGNhblRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAg
IHZhciBlcnJvclRocm93biA9IGZhbHNlOworICAgIHZhciBlcnJvciA9IG51bGw7CisgICAgdHJ5
IHsKKyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3JUaHJv
d24gPSB0cnVlOworICAgICAgICBlcnJvciA9IGU7CisgICAgfQorICAgIGlmIChlcnJvclRocm93
biAmJiBTdHJpbmcoZXJyb3IpICE9PSBlcnJvck1lc3NhZ2UpCisgICAgICAgIHRocm93IG5ldyBF
cnJvcihgYmFkIGVycm9yOiAke1N0cmluZyhlcnJvcil9YCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitjb25zdCBhMCA9IFtdOworYTAuX19wcm90b19fID0ge307CithMC5sZW5ndGggPSAyKioy
MworT2JqZWN0LmRlZmluZVByb3BlcnR5KGEwLCAwLCB7IGdldDogZm9vIH0pOworCitmdW5jdGlv
biBmb28oKSB7CisgICAgbmV3IEludDE2QXJyYXkoYTApOworfQorCituZXcgUHJvbWlzZShmb28p
OworCit0cnkgeworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgICAg
ICBuZXcgVWludDhBcnJheSgxMDAwMDApOworICAgIH0KK30gY2F0Y2gge30KKworY2FuVGhyb3co
KCkgPT4geworICAgIGZvciAobGV0IGk9MG47IGk8MTAwMDBuOyBpKyspIHsKKyAgICAgICAgMm4q
Kmk7CisgICAgfQorfSwgYFJhbmdlRXJyb3I6IE91dCBvZiBtZW1vcnlgKTsKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvc3RyZXNzL2dldC1mdW5jdGlvbi1yZWFsbS1ub3QtZG9pbmctcmVjdXJzaW9uLmpz
IGIvSlNUZXN0cy9zdHJlc3MvZ2V0LWZ1bmN0aW9uLXJlYWxtLW5vdC1kb2luZy1yZWN1cnNpb24u
anMKaW5kZXggYTc5ZWYyY2M2MGRhZTk4M2E0YjI5NGY0NGExN2Q3MjFmMzk3ZjYzYi4uZmZhNmUz
YWFjZTkzZDNkM2I4N2EzOTc1MjY0OTc4YmI5NmYyODUxNSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9z
dHJlc3MvZ2V0LWZ1bmN0aW9uLXJlYWxtLW5vdC1kb2luZy1yZWN1cnNpb24uanMKKysrIGIvSlNU
ZXN0cy9zdHJlc3MvZ2V0LWZ1bmN0aW9uLXJlYWxtLW5vdC1kb2luZy1yZWN1cnNpb24uanMKQEAg
LTksNyArOSw2IEBAIGZ1bmN0aW9uIGNhblRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgewogICAg
IH0gY2F0Y2ggKGUpIHsKICAgICAgICAgZXJyb3JUaHJvd24gPSB0cnVlOwogICAgICAgICBlcnJv
ciA9IGU7Ci0gICAgICAgIHByaW50KGVycm9yLm1lc3NhZ2UpOwogICAgIH0KICAgICBpZiAoZXJy
b3JUaHJvd24gJiYgU3RyaW5nKGVycm9yKSAhPT0gZXJyb3JNZXNzYWdlKQogICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoYGJhZCBlcnJvcjogJHtTdHJpbmcoZXJyb3IpfWApOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400554</attachid>
            <date>2020-05-29 00:06:55 -0700</date>
            <delta_ts>2020-05-29 00:12:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212512-20200529000654.patch</filename>
            <type>text/plain</type>
            <size>91436</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMjc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MjI3NWIxOGQwNzg3ZGViOTNiMDA2ZjM3NWIxZjM1NzlhNGEyNDZkLi5jODgyMmUyZjhhMzFiZDJh
ZTExNTFhYjIwZmU0NjExMWExOGQ0ZGFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MCBAQAorMjAyMC0wNS0yOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEpTQmlnSW50IGFsbG9jYXRpb24gc2hvdWxkIGJlIGdyYWNlZnVs
IGZvciBPT00KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMjUxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggYWxsb3dzIEpTQmlnSW50J3Mgc3RvcmFnZSBhbGxvY2F0aW9uIHRvIGZhaWwg
Z3JhY2VmdWxseSBpZiBPT00gY29uZGl0aW9uIGhhcHBlbnMuCisgICAgICAgIFdlIHRocmVhZCBK
U0dsb2JhbE9iamVjdCogaW5zdGVhZCBvZiBWTSYgYW5kIHRocm93IE9PTSBlcnJvciBpZiBzdG9y
YWdlIGFsbG9jYXRpb24gZmFpbGVkLgorICAgICAgICBXZSBhbHNvIHJlbmFtZSBgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdGAgcGFyYW1ldGVyIHRvIGBKU0dsb2JhbE9iamVjdCogbnVsbE9y
R2xvYmFsT2JqZWN0Rm9yT09NYAorICAgICAgICBpZiBpdCBjYW4gYmUgbnVsbHB0ci4KKworICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAg
ICAoZnVuY3Rpb25DcmVhdGVIZWFwQmlnSW50KToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyQXJl
bmEuY3BwOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyQXJlbmE6Om1ha2VCaWdJbnREZWNpbWFs
SWRlbnRpZmllcik6CisgICAgICAgICogcnVudGltZS9CaWdJbnRDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OnRvQmlnSW50KToKKyAgICAgICAgKEpTQzo6Y2FsbEJpZ0ludENvbnN0cnVj
dG9yKToKKyAgICAgICAgKiBydW50aW1lL0JpZ0ludFByb3RvdHlwZS5jcHA6CisgICAgICAgIChK
U0M6OnRvVGhpc0JpZ0ludFZhbHVlKToKKyAgICAgICAgKEpTQzo6YmlnSW50UHJvdG9GdW5jVG9T
dHJpbmcpOgorICAgICAgICAoSlNDOjpiaWdJbnRQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6Cisg
ICAgICAgIChKU0M6OmJpZ0ludFByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAqIHJ1bnRpbWUv
Q2FjaGVkVHlwZXMuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZWRCaWdJbnQ6OmRlY29kZSBjb25z
dCk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdEZ1bmNGb3JtYXQpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3BwOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
Y3JlYXRlWmVybyk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoKToK
KyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgpOgorICAgICAgICAo
SlNDOjpKU0JpZ0ludDo6Y3JlYXRlRnJvbSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0cnlD
cmVhdGVGcm9tKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmNyZWF0ZUZyb21JbXBsKToKKyAg
ICAgICAgKEpTQzo6SlNCaWdJbnQ6OnBhcnNlSW50KToKKyAgICAgICAgKEpTQzo6SGVhcEJpZ0lu
dEltcGw6OnRyeVRvSGVhcEJpZ0ludCk6CisgICAgICAgIChKU0M6OkhlYXBCaWdJbnRJbXBsOjp0
b0hlYXBCaWdJbnQpOgorICAgICAgICAoSlNDOjpJbnQzMkJpZ0ludEltcGw6OnRyeVRvSGVhcEJp
Z0ludCk6CisgICAgICAgIChKU0M6OkludDMyQmlnSW50SW1wbDo6dG9IZWFwQmlnSW50KToKKyAg
ICAgICAgKEpTQzo6emVyb0ltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6ZXhwb25lbnRp
YXRlSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjptdWx0aXBseUltcGwpOgorICAgICAg
ICAoSlNDOjpKU0JpZ0ludDo6ZGl2aWRlSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojpj
b3B5KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnVuYXJ5TWludXNJbXBsKToKKyAgICAgICAg
KEpTQzo6SlNCaWdJbnQ6OnVuYXJ5TWludXMpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6cmVt
YWluZGVySW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjppbmNJbXBsKToKKyAgICAgICAg
KEpTQzo6SlNCaWdJbnQ6OmFkZEltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6c3ViSW1w
bCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpiaXR3aXNlQW5kSW1wbCk6CisgICAgICAgIChK
U0M6OkpTQmlnSW50OjpiaXR3aXNlT3JJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmJp
dHdpc2VYb3JJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlQWRkKToKKyAg
ICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlU3ViKToKKyAgICAgICAgKEpTQzo6SlNCaWdJ
bnQ6OmFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcik6CisgICAgICAgIChKU0M6OkpTQmlnSW50
OjphYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6
OmFic29sdXRlTGVmdFNoaWZ0QWx3YXlzQ29weSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojph
YnNvbHV0ZUJpdHdpc2VPcCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZUFuZCk6
CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZU9yKToKKyAgICAgICAgKEpTQzo6SlNC
aWdJbnQ6OmFic29sdXRlQW5kTm90KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRl
WG9yKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlQWRkT25lKToKKyAgICAgICAg
KEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlU3ViT25lKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6
OmxlZnRTaGlmdEJ5QWJzb2x1dGUpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6cmlnaHRTaGlm
dEJ5QWJzb2x1dGUpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5TWF4aW11
bSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0b1N0cmluZ0Jhc2VQb3dlck9mVHdvKToKKyAg
ICAgICAgKEpTQzo6SlNCaWdJbnQ6OnRvU3RyaW5nR2VuZXJpYyk6CisgICAgICAgIChKU0M6OkpT
QmlnSW50OjpyaWdodFRyaW0pOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWxsb2NhdGVGb3Ip
OgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YXNJbnROSW1wbCk6CisgICAgICAgIChKU0M6OkpT
QmlnSW50Ojphc1VpbnROSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0cnVuY2F0ZVRv
TkJpdHMpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6dHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJP
ZlR3byk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2Vk
KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTQmlnSW50Lmg6CisgICAgICAgICogcnVu
dGltZS9KU0NKU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6dG9UaGlzU2xvd0Nh
c2UgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6
Vk0pOgorCiAyMDIwLTA1LTI4ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAog
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBhZGQgbWlzc2luZyBjb25kaXRpb24gZ3VhcmRzIHdoZW4g
Z2VuZXJhdGluZyBvYmpjIHByb3RvY29sIGZpbGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGM2NjY4YTZmM2Ez
YTNjY2YyYzM4OWE1N2U5MmRiM2ZhMTcwODU1NS4uZmRmZmJiN2I4OGI3Y2E5ODliNjUzODk2NWE4
ZjEwNmQ3ZWQ3YWJhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA1LTI5ICBZ
dXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW0pTQ10gSlNCaWdJ
bnQgYWxsb2NhdGlvbiBzaG91bGQgYmUgZ3JhY2VmdWwgZm9yIE9PTQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNTEyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJl
YWRCaWdJbnQpOgorCiAyMDIwLTA1LTI4ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4K
IAogICAgICAgICBbQXBwbGUgUGF5XSBCdXR0b25zIHJlbmRlciB3aXRoIGEgY29ybmVyIHJhZGl1
cyBvZiBQS0FwcGxlUGF5QnV0dG9uRGVmYXVsdENvcm5lclJhZGl1cyBldmVuIHdoZW4gZXhwbGlj
aXRseSBzcGVjaWZ5aW5nICJib3JkZXItcmFkaXVzOiAwcHgiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCAzYTQxZTc2MmVjOGQ4M2NjNDJhY2UxZDEz
YjJkNDc5NjJiNDY3NTc1Li5kMDBlYTI5NjM2MDBjNTExM2E4NzhiMmNlYWRjZjc1ODA5YWExYWFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTI4
NDIsMTAgKzI4NDIsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25B
cml0aE5lZ2F0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogCiAjaWYgVVNFKEJJR0lO
VDMyKQogICAgIGlmIChwcmltVmFsdWUuaXNCaWdJbnQzMigpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFsdWUuYmlnSW50MzJB
c0ludDMyKCkpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjpl
bmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFsdWUuYmlnSW50
MzJBc0ludDMyKCkpKSk7CiAjZW5kaWYKICAgICBpZiAocHJpbVZhbHVlLmlzSGVhcEJpZ0ludCgp
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZt
LCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0
LCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpKSk7CiAKICAgICBkb3VibGUgbnVtYmVyID0gcHJp
bVZhbHVlLnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CkBAIC0yODcwLDEzICsyODcwLDE1IEBAIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsCiAKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgaWYgKHByaW1WYWx1ZS5p
c0JpZ0ludDMyKCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0JpZ0ludDo6dW5hcnlN
aW51cyh2bSwgcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBKU0JpZ0ludDo6dW5hcnlNaW51cyhnbG9iYWxPYmplY3QsIHByaW1WYWx1ZS5iaWdJ
bnQzMkFzSW50MzIoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAgICAgICAgIGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZVJlc3VsdChyZXN1bHQpOwogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQogI2VuZGlmCiAgICAgaWYgKHBy
aW1WYWx1ZS5pc0hlYXBCaWdJbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmln
SW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpOworICAgICAgICBK
U1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKGdsb2JhbE9iamVjdCwgcHJpbVZh
bHVlLmFzSGVhcEJpZ0ludCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlUmVzdWx0KHJlc3VsdCk7CiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CkBAIC0yOTEyLDEzICsy
OTE0LDE1IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhOZWdh
dGVQcm9maWxlZE9wdGltaXplKEpTR2xvYmFsT2JqZWN0CiAKICNpZiBVU0UoQklHSU5UMzIpCiAg
ICAgaWYgKHByaW1WYWx1ZS5pc0JpZ0ludDMyKCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQg
PSBKU0JpZ0ludDo6dW5hcnlNaW51cyh2bSwgcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpKTsK
KyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0JpZ0ludDo6dW5hcnlNaW51cyhnbG9iYWxPYmpl
Y3QsIHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZVJlc3VsdChy
ZXN1bHQpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQog
I2VuZGlmCiAgICAgaWYgKHByaW1WYWx1ZS5pc0hlYXBCaWdJbnQoKSkgewotICAgICAgICBKU1Zh
bHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFsdWUuYXNIZWFwQmln
SW50KCkpOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKGds
b2JhbE9iamVjdCwgcHJpbVZhbHVlLmFzSGVhcEJpZ0ludCgpKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlUmVz
dWx0KHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAg
ICB9CkBAIC0yOTU0LDEwICsyOTU4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAjaWYg
VVNFKEJJR0lOVDMyKQogICAgIC8vIEZJWE1FOiB3aHkgZG9lcyB0aGlzIGZ1bmN0aW9uIHByb2Zp
bGUgdGhlIGFyZ3VtZW50IGJ1dCBub3QgdGhlIHJlc3VsdD8KICAgICBpZiAocHJpbVZhbHVlLmlz
QmlnSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6dW5h
cnlNaW51cyh2bSwgcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpKSk7CisgICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50Ojp1bmFyeU1pbnVz
KGdsb2JhbE9iamVjdCwgcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpKSkpOwogI2VuZGlmCiAg
ICAgaWYgKHByaW1WYWx1ZS5pc0hlYXBCaWdJbnQoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU0JpZ0ludDo6dW5hcnlNaW51cyh2bSwgcHJpbVZhbHVlLmFzSGVhcEJpZ0ludCgp
KSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEpT
QmlnSW50Ojp1bmFyeU1pbnVzKGdsb2JhbE9iamVjdCwgcHJpbVZhbHVlLmFzSGVhcEJpZ0ludCgp
KSkpOwogCiAgICAgZG91YmxlIG51bWJlciA9IHByaW1WYWx1ZS50b051bWJlcihnbG9iYWxPYmpl
Y3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvanNjLmNwcAppbmRleCBmNjNmZDcwMjcyYTdhZDA3NTdlYjBiY2JhNzk0MWVhMWI3
Y2Y3MWFlLi5iOGM5MmYzMDlmMTczZjViOWZhZWNkMmM1NjM0ZmFkODcyZmNkZDdmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcApAQCAtMjI1Miw3ICsyMjUyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZUhlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amUKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiaWdJbnQpOwogICAgIEFTU0VSVChi
aWdJbnQuaXNCaWdJbnQzMigpKTsKICAgICBpbnQzMl90IHZhbHVlID0gYmlnSW50LmJpZ0ludDMy
QXNJbnQzMigpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OmNyZWF0ZUZy
b20odm0sIHZhbHVlKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjpl
bmNvZGUoSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCB2YWx1ZSkpKTsKICNlbHNl
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiaWdJbnQpOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuY3BwCmluZGV4IGFhYzA1NjY5MGU0MWVl
ZDBmYjY1OWVhYTQ0MmM5NTJmNjU1MzczODAuLmM3MTk4ODYyNDFkMzU3YmYwZTM3YWE5YmE3MDg0
Nzg0MGYxMjNmNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFy
c2VyQXJlbmEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJl
bmEuY3BwCkBAIC05Niw5ICs5NiwxMCBAQCBjb25zdCBJZGVudGlmaWVyJiBJZGVudGlmaWVyQXJl
bmE6Om1ha2VCaWdJbnREZWNpbWFsSWRlbnRpZmllcihWTSYgdm0sIGNvbnN0IElkZQogICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc2MjcKICAgICBKU0Jp
Z0ludCogaGVhcEJpZ0ludDsKICNpZiBVU0UoQklHSU5UMzIpCi0gICAgaWYgKGJpZ0ludC5pc0Jp
Z0ludDMyKCkpCi0gICAgICAgIGhlYXBCaWdJbnQgPSBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwg
YmlnSW50LmJpZ0ludDMyQXNJbnQzMigpKTsKLSAgICBlbHNlCisgICAgaWYgKGJpZ0ludC5pc0Jp
Z0ludDMyKCkpIHsKKyAgICAgICAgaGVhcEJpZ0ludCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVGcm9t
KHZtLCBiaWdJbnQuYmlnSW50MzJBc0ludDMyKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCho
ZWFwQmlnSW50KTsKKyAgICB9IGVsc2UKICNlbmRpZgogICAgICAgICBoZWFwQmlnSW50ID0gYmln
SW50LmFzSGVhcEJpZ0ludCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9CaWdJbnRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9CaWdJbnRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNGZmYmZiYjk2ZGQxN2ZhZTE5NDdiNDZi
YmM4MWQ5ODQyZGJjMGQwOS4uN2UzZGU1ZWVhZGIxNmM5MTIxNjE2MjFmZDRjMmVmYmE5YWJmMzA5
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50Q29uc3Ry
dWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludENvbnN0
cnVjdG9yLmNwcApAQCAtODcsNyArODcsNyBAQCBKU1ZhbHVlIHRvQmlnSW50KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgYXJndW1lbnQpCiAjaWYgVVNFKEJJR0lOVDMyKQog
ICAgICAgICByZXR1cm4ganNCaWdJbnQzMihwcmltaXRpdmUuYXNCb29sZWFuKCkpOwogI2Vsc2UK
LSAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCBwcmltaXRpdmUuYXNCb29s
ZWFuKCkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTQmlnSW50OjpjcmVh
dGVGcm9tKGdsb2JhbE9iamVjdCwgcHJpbWl0aXZlLmFzQm9vbGVhbigpKSk7CiAjZW5kaWYKICAg
ICB9CiAKQEAgLTExNiw3ICsxMTYsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjYWxsQmlnSW50Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbAogI2lmIFVT
RShCSUdJTlQzMikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0JpZ0ludDMyKHBy
aW1pdGl2ZS5hc0ludDMyKCkpKTsKICNlbHNlCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIHByaW1pdGl2ZS5hc0ludDMyKCkpKTsKKyAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OmNy
ZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCBwcmltaXRpdmUuYXNJbnQzMigpKSkpOwogI2VuZGlmCiAg
ICAgfQogCkBAIC0xMjQsNyArMTI0LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY2FsbEJpZ0ludENvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKICAgICAg
ICAgZG91YmxlIG51bWJlciA9IHByaW1pdGl2ZS5hc0RvdWJsZSgpOwogICAgICAgICBpZiAoIWlz
SW50ZWdlcihudW1iZXIpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgIk5vdCBhbiBpbnRl
Z2VyIl9zKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6Om1ha2VI
ZWFwQmlnSW50T3JCaWdJbnQzMih2bSwgcHJpbWl0aXZlLmFzRG91YmxlKCkpKTsKKyAgICAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6Om1ha2VI
ZWFwQmlnSW50T3JCaWdJbnQzMihnbG9iYWxPYmplY3QsIHByaW1pdGl2ZS5hc0RvdWJsZSgpKSkp
OwogICAgIH0KIAogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2Rl
KHRvQmlnSW50KGdsb2JhbE9iamVjdCwgcHJpbWl0aXZlKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludFByb3RvdHlwZS5jcHAKaW5kZXggNGE0YjZlMmU5ODJl
MDI4MzFkOWUxNmFjYjkxZGFlZGI0NjM3MzM3Yy4uMWQ4ZmMwMDI0YTE5NzgxZTNiYmY3ZGQzMmIy
YjE0ZmMwMGIxMDljNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QmlnSW50UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
aWdJbnRQcm90b3R5cGUuY3BwCkBAIC03NCwxMiArNzQsMTUgQEAgdm9pZCBCaWdJbnRQcm90b3R5
cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqKQogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCi1zdGF0aWMgQUxXQVlTX0lOTElORSBKU0JpZ0ludCogdG9UaGlzQmlnSW50VmFsdWUo
Vk0mIHZtLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEpTQmlnSW50
KiB0b1RoaXNCaWdJbnRWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHRoaXNWYWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAjaWYgVVNFKEJJR0lOVDMyKQog
ICAgIC8vIEZJWE1FOiBoZWFwLWFsbG9jYXRpbmcgYWxsIGJpZyBpbnRzIGlzIGlubmVmaWNpZW50
LCBidXQgcmUtaW1wbGVtZW50aW5nIHRvU3RyaW5nIGZvciBzbWFsbCBCaWdJbnRzIGlzIGVub3Vn
aCB3b3JrIHRoYXQgSSdtIGRlZmVycmluZyBpdCB0byBhIGxhdGVyIHBhdGNoLgogICAgIGlmICh0
aGlzVmFsdWUuaXNCaWdJbnQzMigpKQotICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZy
b20odm0sIHRoaXNWYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSk7CisgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCB0aGlzVmFs
dWUuYmlnSW50MzJBc0ludDMyKCkpKTsKICNlbmRpZgogCiAgICAgaWYgKHRoaXNWYWx1ZS5pc0Nl
bGwoKSkgewpAQCAtOTAsMTIgKzkzLDEzIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTQmlnSW50
KiB0b1RoaXNCaWdJbnRWYWx1ZShWTSYgdm0sIEpTVmFsdWUgdGhpc1ZhbHVlKQogICAgICAgICAg
ICAgSlNWYWx1ZSBiaWdJbnQgPSBiaWdJbnRPYmplY3QtPmludGVybmFsVmFsdWUoKTsKICNpZiBV
U0UoQklHSU5UMzIpCiAgICAgICAgICAgICBpZiAoYmlnSW50LmlzQmlnSW50MzIoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIGJpZ0ludC5iaWdJbnQz
MkFzSW50MzIoKSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBK
U0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIGJpZ0ludC5iaWdJbnQzMkFzSW50MzIo
KSkpOwogI2VuZGlmCiAgICAgICAgICAgICByZXR1cm4gYmlnSW50LmFzSGVhcEJpZ0ludCgpOwog
ICAgICAgICB9CiAgICAgfQogCisgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgIid0aGlzJyB2YWx1ZSBtdXN0IGJlIGEgQmlnSW50IG9yIEJpZ0ludE9iamVjdCJfcyk7CiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAgLTEwNCw5ICsxMDgsOCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGJpZ0ludFByb3RvRnVuY1RvU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplYwogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU0JpZ0ludCogdmFsdWUgPSB0
b1RoaXNCaWdJbnRWYWx1ZSh2bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCF2
YWx1ZSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgIid0aGlzJyB2YWx1ZSBtdXN0IGJlIGEgQmlnSW50IG9yIEJpZ0ludE9iamVjdCJfcyk7Cisg
ICAgSlNCaWdJbnQqIHZhbHVlID0gdG9UaGlzQmlnSW50VmFsdWUoZ2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwogCiAgICAgQVNTRVJUKHZhbHVlKTsKIApAQCAtMTI5LDkgKzEzMiw4IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYmlnSW50UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoSlNHbG9iYWxP
YmplY3QqIGdsb2JhCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEpTQmlnSW50KiB2YWx1ZSA9
IHRvVGhpc0JpZ0ludFZhbHVlKHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAo
IXZhbHVlKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiJ3RoaXMnIHZhbHVlIG11c3QgYmUgYSBCaWdJbnQgb3IgQmlnSW50T2JqZWN0Il9zKTsK
KyAgICBKU0JpZ0ludCogdmFsdWUgPSB0b1RoaXNCaWdJbnRWYWx1ZShnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAKICAgICBhdXRvKiBudW1iZXJGb3JtYXQgPSBJbnRsTnVtYmVyRm9ybWF0OjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdC0+bnVtYmVyRm9ybWF0U3RydWN0dXJlKCkpOwogICAgIG51bWJlckZv
cm1hdC0+aW5pdGlhbGl6ZU51bWJlckZvcm1hdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCksIGNhbGxGcmFtZS0+YXJndW1lbnQoMSkpOwpAQCAtMTQ0LDkgKzE0Niw4IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYmlnSW50UHJvdG9GdW5jVmFsdWVPZihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEpTQmlnSW50
KiB2YWx1ZSA9IHRvVGhpc0JpZ0ludFZhbHVlKHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsK
LSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlLCAiJ3RoaXMnIHZhbHVlIG11c3QgYmUgYSBCaWdJbnQgb3IgQmlnSW50T2Jq
ZWN0Il9zKTsKKyAgICBKU0JpZ0ludCogdmFsdWUgPSB0b1RoaXNCaWdJbnRWYWx1ZShnbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CiAKICAgICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodm0sIHZhbHVl
LT5zdHJ1Y3R1cmVJRCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAppbmRleCA2MDFk
MDE5ZGY5M2Y4ZjJmOGNjNmMxZjU5MWE5NDE1NDhkYzA3ZmNiLi5mOWY2MjRiNDZlOTc1MGJmNDk3
ODExZjM5MWFlNGE3NjI0NDdkNTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYWNoZWRUeXBlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2FjaGVkVHlwZXMuY3BwCkBAIC0xMjc5LDcgKzEyNzksOCBAQCBjbGFzcyBDYWNoZWRCaWdJ
bnQgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8SlNCaWdJbnQ+IHsKIAogICAgIEpTQmln
SW50KiBkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikgY29uc3QKICAgICB7Ci0gICAgICAgIEpTQmln
SW50KiBiaWdJbnQgPSBKU0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZChkZWNvZGVy
LnZtKCksIG1fbGVuZ3RoKTsKKyAgICAgICAgSlNCaWdJbnQqIGJpZ0ludCA9IEpTQmlnSW50Ojp0
cnlDcmVhdGVXaXRoTGVuZ3RoKGRlY29kZXIudm0oKSwgbV9sZW5ndGgpOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChiaWdJbnQpOwogICAgICAgICBiaWdJbnQtPnNldFNpZ24obV9zaWduKTsKICAg
ICAgICAgaWYgKG1fbGVuZ3RoKQogICAgICAgICAgICAgbWVtY3B5KGJpZ0ludC0+ZGF0YVN0b3Jh
Z2UoKSwgdGhpcy0+YnVmZmVyKCksIHNpemVvZihKU0JpZ0ludDo6RGlnaXQpICogbV9sZW5ndGgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHAKaW5kZXggYTM5YzEzNzU3NTZmY2Q1OWYyNjQ1YjAwODE0YTYwYTg2OGZiMTlhYy4uMzAzNDRj
MTIwZTJkYjM3M2MzZTA0ZDRiNmY4NjhiNzU2ODAyMDhiOSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCkBAIC01MzAsNyArNTMwLDgg
QEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25lZ2F0ZSkKIAogI2lmIFVTRShCSUdJTlQzMikK
ICAgICBpZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkgewotICAgICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkp
OworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKGdsb2JhbE9i
amVjdCwgcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgQ0hFQ0tfRVhDRVBU
SU9OKCk7CiAgICAgICAgIFJFVFVSTl9XSVRIX1BST0ZJTElORyhyZXN1bHQsIHsKICAgICAgICAg
ICAgIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChtZXRhZGF0YSwgcmVzdWx0LCBv
cGVyYW5kKTsKICAgICAgICAgfSk7CkBAIC01MzgsNyArNTM5LDggQEAgU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX25lZ2F0ZSkKICNlbmRpZgogCiAgICAgaWYgKHByaW1WYWx1ZS5pc0hlYXBCaWdJ
bnQoKSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZt
LCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpT
QmlnSW50Ojp1bmFyeU1pbnVzKGdsb2JhbE9iamVjdCwgcHJpbVZhbHVlLmFzSGVhcEJpZ0ludCgp
KTsKKyAgICAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgICAgIFJFVFVSTl9XSVRIX1BST0ZJ
TElORyhyZXN1bHQsIHsKICAgICAgICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJp
dGhPcChtZXRhZGF0YSwgcmVzdWx0LCBvcGVyYW5kKTsKICAgICAgICAgfSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90
b3R5cGUuY3BwCmluZGV4IGFhYmFlN2JlOWJmMTNjMzU2NjFiMjI5NDViMWIzYmQ0OTJlZDRlNmQu
LjZkYWE4NmE5MGExOGMzNGFiOTA0MzA1MTllZDJhYjJjODE2NDFiYzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90
b3R5cGUuY3BwCkBAIC05Niw4ICs5Niw5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIEludGxOdW1iZXJGb3JtYXRGdW5jRm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnCiAKICNp
ZiBVU0UoQklHSU5UMzIpCiAgICAgaWYgKGJpZ0ludE9yTnVtYmVyLmlzQmlnSW50MzIoKSkgewot
ICAgICAgICBKU0JpZ0ludCogdmFsdWUgPSBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgYmlnSW50
T3JOdW1iZXIuYmlnSW50MzJBc0ludDMyKCkpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKG51bWJlckZvcm1hdC0+Zm9ybWF0KGdsb2JhbE9iamVjdCwgdmFsdWUpKTsKKyAgICAgICAg
SlNCaWdJbnQqIHZhbHVlID0gSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCBiaWdJ
bnRPck51bWJlci5iaWdJbnQzMkFzSW50MzIoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1
ZTo6ZW5jb2RlKG51bWJlckZvcm1hdC0+Zm9ybWF0KGdsb2JhbE9iamVjdCwgdmFsdWUpKSk7CiAg
ICAgfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQmlnSW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNw
cAppbmRleCA5MDQzMjlhNzIxMGNmZWVlN2I1ZWFiNzZjMTRlYzAwN2RjYWYxMmI5Li4zYzU5MmY4
OWYzNDE5M2VmNGE4ODg5MzczZWQ2N2U1N2I2M2U0MDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCkBAIC04Miw0MiArODIsNTYgQEAgU3RydWN0dXJlKiBK
U0JpZ0ludDo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWwKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhIZWFwQmlnSW50VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZVplcm8oVk0mIHZtKQoraW5s
aW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlWmVybyhKU0dsb2JhbE9iamVjdCogbnVsbE9y
R2xvYmFsT2JqZWN0Rm9yT09NLCBWTSYgdm0pCiB7Ci0gICAgSlNCaWdJbnQqIHplcm9CaWdJbnQg
PSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCAwKTsKLSAgICByZXR1cm4gemVyb0JpZ0lu
dDsKKyAgICByZXR1cm4gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHZtLCAwKTsKIH0K
IAotSlNCaWdJbnQqIEpTQmlnSW50Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGxlbmd0aCkKK0pTQmlnSW50KiBKU0JpZ0ludDo6Y3Jl
YXRlWmVybyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgcmV0dXJuIGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCAwKTsKK30KIAor
aW5saW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0aChKU0dsb2JhbE9iamVj
dCogbnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKK3sK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKFVOTElL
RUxZKGxlbmd0aCA+IG1heExlbmd0aCkpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJCaWdJbnQgZ2VuZXJhdGVkIGZyb20gdGhpcyBvcGVyYXRp
b24gaXMgdG9vIGJpZyJfcyk7CisgICAgICAgIGlmIChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00p
CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9y
T09NLCBzY29wZSwgIkJpZ0ludCBnZW5lcmF0ZWQgZnJvbSB0aGlzIG9wZXJhdGlvbiBpcyB0b28g
YmlnIl9zKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgc2NvcGUucmVs
ZWFzZSgpOwotCi0gICAgcmV0dXJuIGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIGxlbmd0
aCk7Ci19Ci0KLUpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZChW
TSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKLXsKICAgICBBU1NFUlQobGVuZ3RoIDw9IG1heExlbmd0
aCk7Ci0gICAgdm9pZCogZGF0YSA9IEdpZ2FjYWdlOjptYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2
ZSwgbGVuZ3RoICogc2l6ZW9mKERpZ2l0KSk7CisgICAgdm9pZCogZGF0YSA9IEdpZ2FjYWdlOjp0
cnlNYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbGVuZ3RoICogc2l6ZW9mKERpZ2l0KSk7Cisg
ICAgaWYgKFVOTElLRUxZKCFkYXRhKSkgeworICAgICAgICBpZiAobnVsbE9yR2xvYmFsT2JqZWN0
Rm9yT09NKQorICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKG51bGxPckdsb2JhbE9i
amVjdEZvck9PTSwgc2NvcGUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CiAgICAg
SlNCaWdJbnQqIGJpZ0ludCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQmlnSW50Pih2
bS5oZWFwKSkgSlNCaWdJbnQodm0sIHZtLmJpZ0ludFN0cnVjdHVyZS5nZXQoKSwgcmVpbnRlcnBy
ZXRfY2FzdDxEaWdpdCo+KGRhdGEpLCBsZW5ndGgpOwogICAgIGJpZ0ludC0+ZmluaXNoQ3JlYXRp
b24odm0pOwogICAgIHJldHVybiBiaWdJbnQ7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Y3Jl
YXRlRnJvbShWTSYgdm0sIGludDMyX3QgdmFsdWUpCitKU0JpZ0ludCogSlNCaWdJbnQ6OnRyeUNy
ZWF0ZVdpdGhMZW5ndGgoVk0mIHZtLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgcmV0dXJuIGNy
ZWF0ZVdpdGhMZW5ndGgobnVsbHB0ciwgdm0sIGxlbmd0aCk7Cit9CisKK0pTQmlnSW50KiBKU0Jp
Z0ludDo6Y3JlYXRlV2l0aExlbmd0aChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNp
Z25lZCBsZW5ndGgpCit7CisgICAgcmV0dXJuIGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QtPnZtKCksIGxlbmd0aCk7Cit9CisKK2lubGluZSBKU0JpZ0ludCogSlNC
aWdJbnQ6OmNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqIG51bGxPckdsb2JhbE9iamVjdEZvck9P
TSwgVk0mIHZtLCBpbnQzMl90IHZhbHVlKQogewogICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJl
dHVybiBjcmVhdGVaZXJvKHZtKTsKLSAgICAKLSAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRl
V2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgMSk7CisgICAgICAgIHJldHVybiBjcmVhdGVaZXJvKG51
bGxPckdsb2JhbE9iamVjdEZvck9PTSwgdm0pOworCisgICAgSlNCaWdJbnQqIGJpZ0ludCA9IGNy
ZWF0ZVdpdGhMZW5ndGgobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCB2bSwgMSk7CisgICAgaWYg
KFVOTElLRUxZKCFiaWdJbnQpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwogICAgIGlmICh2
YWx1ZSA8IDApIHsKICAgICAgICAgYmlnSW50LT5zZXREaWdpdCgwLCBzdGF0aWNfY2FzdDxEaWdp
dD4oLTEgKiBzdGF0aWNfY2FzdDxpbnQ2NF90Pih2YWx1ZSkpKTsKICAgICAgICAgYmlnSW50LT5z
ZXRTaWduKHRydWUpOwpAQCAtMTI3LDMyICsxNDEsNTEgQEAgSlNCaWdJbnQqIEpTQmlnSW50Ojpj
cmVhdGVGcm9tKFZNJiB2bSwgaW50MzJfdCB2YWx1ZSkKICAgICByZXR1cm4gYmlnSW50OwogfQog
Ci1KU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oVk0mIHZtLCB1aW50MzJfdCB2YWx1ZSkK
K0pTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBpbnQzMl90IHZhbHVlKQoreworICAgIHJldHVybiBjcmVhdGVGcm9tKGdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LT52bSgpLCB2YWx1ZSk7Cit9CisKK0pTQmlnSW50KiBKU0JpZ0ludDo6
dHJ5Q3JlYXRlRnJvbShWTSYgdm0sIGludDMyX3QgdmFsdWUpCiB7CisgICAgcmV0dXJuIGNyZWF0
ZUZyb20obnVsbHB0ciwgdm0sIHZhbHVlKTsKK30KKworSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVh
dGVGcm9tKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQzMl90IHZhbHVlKQorewor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gY3Jl
YXRlWmVybyh2bSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY3JlYXRlWmVy
byhnbG9iYWxPYmplY3QpKTsKICAgICAKLSAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRlV2l0
aExlbmd0aFVuY2hlY2tlZCh2bSwgMSk7CisgICAgSlNCaWdJbnQqIGJpZ0ludCA9IGNyZWF0ZVdp
dGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCAxKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKICAgICBiaWdJbnQtPnNldERpZ2l0KDAsIHN0YXRpY19jYXN0PERpZ2l0Pih2
YWx1ZSkpOwogICAgIHJldHVybiBiaWdJbnQ7CiB9CiAKLWlubGluZSBKU0JpZ0ludCogSlNCaWdJ
bnQ6OmNyZWF0ZUZyb21JbXBsKFZNJiB2bSwgdWludDY0X3QgdmFsdWUsIGJvb2wgc2lnbikKK2lu
bGluZSBKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb21JbXBsKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIHVpbnQ2NF90IHZhbHVlLCBib29sIHNpZ24pCiB7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKwogICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBjcmVhdGVaZXJvKHZtKTsK
KyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjcmVhdGVaZXJvKGdsb2JhbE9iamVj
dCkpOwogCiAgICAgLy8gVGhpcyBwYXRoIGlzIG5vdCBqdXN0IGFuIG9wdGltaXphdGlvbjogYmVj
YXVzZSB3ZSBkbyBub3QgY2FsbCByaWdodFRyaW0gYXQgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9u
LAogICAgIC8vIGl0IHdvdWxkIGJlIGEgYnVnIHRvIGNyZWF0ZSBhIEJpZ0ludCB3aXRoIGxlbmd0
aD0yIGluIHRoaXMgY2FzZS4KICAgICBpZiAoc2l6ZW9mKERpZ2l0KSA9PSA4IHx8IHZhbHVlIDw9
IFVJTlQzMl9NQVgpIHsKLSAgICAgICAgSlNCaWdJbnQqIGJpZ0ludCA9IGNyZWF0ZVdpdGhMZW5n
dGhVbmNoZWNrZWQodm0sIDEpOworICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRlV2l0
aExlbmd0aChnbG9iYWxPYmplY3QsIDEpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKICAgICAgICAgYmlnSW50LT5zZXREaWdpdCgwLCBzdGF0aWNfY2FzdDxE
aWdpdD4odmFsdWUpKTsKICAgICAgICAgYmlnSW50LT5zZXRTaWduKHNpZ24pOwogICAgICAgICBy
ZXR1cm4gYmlnSW50OwogICAgIH0KIAogICAgIEFTU0VSVChzaXplb2YoRGlnaXQpID09IDQpOwot
ICAgIEpTQmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCAyKTsK
KyAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIDIp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIERpZ2l0IGxv
d0JpdHMgID0gc3RhdGljX2Nhc3Q8RGlnaXQ+KHZhbHVlICYgMHhmZmZmZmZmZik7CiAgICAgRGln
aXQgaGlnaEJpdHMgPSBzdGF0aWNfY2FzdDxEaWdpdD4oKHZhbHVlID4+IDMyKSAmIDB4ZmZmZmZm
ZmYpOwogCkBAIC0xNjUsMTIgKzE5OCwxMiBAQCBpbmxpbmUgSlNCaWdJbnQqIEpTQmlnSW50Ojpj
cmVhdGVGcm9tSW1wbChWTSYgdm0sIHVpbnQ2NF90IHZhbHVlLCBib29sIHNpZ24pCiAgICAgcmV0
dXJuIGJpZ0ludDsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKFZNJiB2bSwg
dWludDY0X3QgdmFsdWUpCitKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0X3QgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUZyb21JbXBsKHZtLCB2YWx1ZSwgZmFsc2UpOworICAgIHJldHVybiBjcmVhdGVGcm9tSW1wbChn
bG9iYWxPYmplY3QsIHZhbHVlLCBmYWxzZSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Y3Jl
YXRlRnJvbShWTSYgdm0sIGludDY0X3QgdmFsdWUpCitKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0
ZUZyb20oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50NjRfdCB2YWx1ZSkKIHsKICAg
ICB1aW50NjRfdCB1bnNpZ25lZFZhbHVlOwogICAgIGJvb2wgc2lnbiA9IGZhbHNlOwpAQCAtMTc5
LDI0ICsyMTIsMzEgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKFZNJiB2bSwgaW50
NjRfdCB2YWx1ZSkKICAgICAgICAgc2lnbiA9IHRydWU7CiAgICAgfSBlbHNlCiAgICAgICAgIHVu
c2lnbmVkVmFsdWUgPSB2YWx1ZTsKLSAgICByZXR1cm4gY3JlYXRlRnJvbUltcGwodm0sIHVuc2ln
bmVkVmFsdWUsIHNpZ24pOworICAgIHJldHVybiBjcmVhdGVGcm9tSW1wbChnbG9iYWxPYmplY3Qs
IHVuc2lnbmVkVmFsdWUsIHNpZ24pOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZy
b20oVk0mIHZtLCBib29sIHZhbHVlKQorSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGJvb2wgdmFsdWUpCiB7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKwogICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBjcmVhdGVaZXJvKHZtKTsK
LSAgICAKLSAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2
bSwgMSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY3JlYXRlWmVybyhnbG9i
YWxPYmplY3QpKTsKKworICAgIEpTQmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVuZ3RoKGds
b2JhbE9iamVjdCwgMSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7
CiAgICAgYmlnSW50LT5zZXREaWdpdCgwLCBzdGF0aWNfY2FzdDxEaWdpdD4odmFsdWUpKTsKICAg
ICByZXR1cm4gYmlnSW50OwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oVk0m
IHZtLCBkb3VibGUgdmFsdWUpCitKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgZG91YmxlIHZhbHVlKQogeworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKICAgICBBU1NFUlQoaXNJbnRlZ2VyKHZhbHVlKSk7CiAgICAgaWYgKCF2YWx1ZSkKLSAg
ICAgICAgcmV0dXJuIGNyZWF0ZVplcm8odm0pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIGNyZWF0ZVplcm8oZ2xvYmFsT2JqZWN0KSk7CiAKICAgICBib29sIHNpZ24gPSB2YWx1
ZSA8IDA7IC8vIC0wIHdhcyBhbHJlYWR5IGhhbmRsZWQgYWJvdmUuCiAgICAgdWludDY0X3QgZG91
YmxlQml0cyA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUpOwpAQCAtMjA1LDcgKzI0NSw4
IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShWTSYgdm0sIGRvdWJsZSB2YWx1ZSkK
ICAgICBBU1NFUlQocmF3RXhwb25lbnQgPj0gMHgzZmYpOyAvLyBTaW5jZSB2YWx1ZSBpcyBpbnRl
Z2VyLCBleHBvbmVudCBzaG91bGQgYmUgPj0gMCArIGJpYXMgKDB4M2ZmKS4KICAgICBpbnQzMl90
IGV4cG9uZW50ID0gcmF3RXhwb25lbnQgLSAweDNmZjsKICAgICBpbnQzMl90IGRpZ2l0cyA9IGV4
cG9uZW50IC8gZGlnaXRCaXRzICsgMTsKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0
aExlbmd0aFVuY2hlY2tlZCh2bSwgZGlnaXRzKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3Jl
YXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIGRpZ2l0cyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgQVNTRVJUKHJlc3VsdCk7CiAgICAgcmVzdWx0LT5p
bml0aWFsaXplKEluaXRpYWxpemF0aW9uVHlwZTo6V2l0aFplcm8pOwogICAgIHJlc3VsdC0+c2V0
U2lnbihzaWduKTsKQEAgLTI1OSw3ICszMDAsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0
ZUZyb20oVk0mIHZtLCBkb3VibGUgdmFsdWUpCiAgICAgICAgICAgICBkaWdpdCA9IDA7CiAgICAg
ICAgIHJlc3VsdC0+c2V0RGlnaXQoZGlnaXRJbmRleCwgZGlnaXQpOwogICAgIH0KLSAgICByZXR1
cm4gcmVzdWx0LT5yaWdodFRyaW0odm0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
cmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIEpTVmFsdWUgSlNCaWdJbnQ6
OnRvUHJpbWl0aXZlKEpTR2xvYmFsT2JqZWN0KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29u
c3QKQEAgLTI3NCwxMSArMzE1LDExIEBAIEpTVmFsdWUgSlNCaWdJbnQ6OnBhcnNlSW50KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cmluZ1ZpZXcgcywgRXJyb3JQYXJzCiAgICAgcmV0
dXJuIHBhcnNlSW50KGdsb2JhbE9iamVjdCwgcy5jaGFyYWN0ZXJzMTYoKSwgcy5sZW5ndGgoKSwg
cGFyc2VyTW9kZSk7CiB9CiAKLUpTVmFsdWUgSlNCaWdJbnQ6OnBhcnNlSW50KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgU3RyaW5nVmlldyBzLCB1aW50OF90IHJhZGl4LCBF
cnJvclBhcnNlTW9kZSBwYXJzZXJNb2RlLCBQYXJzZUludFNpZ24gc2lnbikKK0pTVmFsdWUgSlNC
aWdJbnQ6OnBhcnNlSW50KEpTR2xvYmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmplY3RGb3JPT00s
IFZNJiB2bSwgU3RyaW5nVmlldyBzLCB1aW50OF90IHJhZGl4LCBFcnJvclBhcnNlTW9kZSBwYXJz
ZXJNb2RlLCBQYXJzZUludFNpZ24gc2lnbikKIHsKICAgICBpZiAocy5pczhCaXQoKSkKLSAgICAg
ICAgcmV0dXJuIHBhcnNlSW50KGdsb2JhbE9iamVjdCwgdm0sIHMuY2hhcmFjdGVyczgoKSwgcy5s
ZW5ndGgoKSwgMCwgcmFkaXgsIHBhcnNlck1vZGUsIHNpZ24sIFBhcnNlSW50TW9kZTo6RGlzYWxs
b3dFbXB0eVN0cmluZyk7Ci0gICAgcmV0dXJuIHBhcnNlSW50KGdsb2JhbE9iamVjdCwgdm0sIHMu
Y2hhcmFjdGVyczE2KCksIHMubGVuZ3RoKCksIDAsIHJhZGl4LCBwYXJzZXJNb2RlLCBzaWduLCBQ
YXJzZUludE1vZGU6OkRpc2FsbG93RW1wdHlTdHJpbmcpOworICAgICAgICByZXR1cm4gcGFyc2VJ
bnQobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCB2bSwgcy5jaGFyYWN0ZXJzOCgpLCBzLmxlbmd0
aCgpLCAwLCByYWRpeCwgcGFyc2VyTW9kZSwgc2lnbiwgUGFyc2VJbnRNb2RlOjpEaXNhbGxvd0Vt
cHR5U3RyaW5nKTsKKyAgICByZXR1cm4gcGFyc2VJbnQobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09N
LCB2bSwgcy5jaGFyYWN0ZXJzMTYoKSwgcy5sZW5ndGgoKSwgMCwgcmFkaXgsIHBhcnNlck1vZGUs
IHNpZ24sIFBhcnNlSW50TW9kZTo6RGlzYWxsb3dFbXB0eVN0cmluZyk7CiB9CiAKIEpTVmFsdWUg
SlNCaWdJbnQ6OnN0cmluZ1RvQmlnSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cmluZ1ZpZXcgcykKQEAgLTMxOCw3ICszNTksOCBAQCBjbGFzcyBIZWFwQmlnSW50SW1wbCB7CiAg
ICAgQUxXQVlTX0lOTElORSBib29sIHNpZ24oKSB7IHJldHVybiBtX2JpZ0ludC0+c2lnbigpOyB9
CiAgICAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2JpZ0ludC0+
bGVuZ3RoKCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIEpTQmlnSW50OjpEaWdpdCBkaWdpdCh1bnNp
Z25lZCBpKSB7IHJldHVybiBtX2JpZ0ludC0+ZGlnaXQoaSk7IH0KLSAgICBBTFdBWVNfSU5MSU5F
IEpTQmlnSW50KiB0b0hlYXBCaWdJbnQoVk0mKSB7IHJldHVybiBtX2JpZ0ludDsgfQorICAgIEFM
V0FZU19JTkxJTkUgSlNCaWdJbnQqIHRyeVRvSGVhcEJpZ0ludChWTSYpIHsgcmV0dXJuIG1fYmln
SW50OyB9CisgICAgQUxXQVlTX0lOTElORSBKU0JpZ0ludCogdG9IZWFwQmlnSW50KEpTR2xvYmFs
T2JqZWN0KikgeyByZXR1cm4gbV9iaWdJbnQ7IH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgc3Ry
dWN0IEpTQmlnSW50OjpJbXBsUmVzdWx0OwpAQCAtMzQzLDcgKzM4NSwxNSBAQCBjbGFzcyBJbnQz
MkJpZ0ludEltcGwgewogICAgICAgICByZXR1cm4gbV92YWx1ZTsKICAgICB9CiAKLSAgICBBTFdB
WVNfSU5MSU5FIEpTQmlnSW50KiB0b0hlYXBCaWdJbnQoVk0mIHZtKSB7IHJldHVybiBKU0JpZ0lu
dDo6Y3JlYXRlRnJvbSh2bSwgbV92YWx1ZSk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTQmlnSW50
KiB0cnlUb0hlYXBCaWdJbnQoVk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQmlnSW50
Ojp0cnlDcmVhdGVGcm9tKHZtLCBtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5F
IEpTQmlnSW50KiB0b0hlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIG1f
dmFsdWUpOworICAgIH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgc3RydWN0IEpTQmlnSW50OjpJ
bXBsUmVzdWx0OwpAQCAtNDAyLDEzICs0NTIsMTMgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSB0cnlDb252ZXJ0VG9CaWdJbnQzMihKU0JpZ0ludDo6SW1wbFJlc3VsdCBpbXBsUmVzdWwK
ICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoaW1wbFJlc3VsdC5wYXlsb2FkLmFzSGVh
cEJpZ0ludCgpKTsKIH0KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQ6OkltcGxSZXN1
bHQgemVyb0ltcGwoVk0mIHZtKQorc3RhdGljIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQ6OkltcGxS
ZXN1bHQgemVyb0ltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICNpZiBVU0Uo
QklHSU5UMzIpCi0gICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBVTlVTRURfUEFSQU0oZ2xvYmFs
T2JqZWN0KTsKICAgICByZXR1cm4ganNCaWdJbnQzMigwKTsKICNlbHNlCi0gICAgcmV0dXJuIEpT
QmlnSW50OjpjcmVhdGVaZXJvKHZtKTsKKyAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZVplcm8o
Z2xvYmFsT2JqZWN0KTsKICNlbmRpZgogfQogCkBAIC00MzEsNyArNDgxLDcgQEAgSlNCaWdJbnQ6
OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmV4cG9uZW50aWF0ZUltcGwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQmkKIAogICAgIC8vIDIuIElmIGJhc2UgaXMgMG4gYW5kIGV4cG9uZW50IGlz
IDBuLCByZXR1cm4gMW4uCiAgICAgaWYgKGV4cG9uZW50LmlzWmVybygpKQotICAgICAgICByZXR1
cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIDEpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTQmlnSW50OjpjcmVhdGVGcm9tKGdsb2JhbE9iamVjdCwgMSkpOwogICAgIAog
ICAgIC8vIDMuIFJldHVybiBhIEJpZ0ludCByZXByZXNlbnRpbmcgdGhlIG1hdGhlbWF0aWNhbCB2
YWx1ZSBvZiBiYXNlIHJhaXNlZAogICAgIC8vICAgIHRvIHRoZSBwb3dlciBleHBvbmVudC4KQEAg
LTQ0MSw3ICs0OTEsNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6ZXhwb25lbnRp
YXRlSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaQogICAgIGlmIChiYXNlLmxl
bmd0aCgpID09IDEgJiYgYmFzZS5kaWdpdCgwKSA9PSAxKSB7CiAgICAgICAgIC8vICgtMSkgKiog
ZXZlbl9udW1iZXIgPT0gMS4KICAgICAgICAgaWYgKGJhc2Uuc2lnbigpICYmICEoZXhwb25lbnQu
ZGlnaXQoMCkgJiAxKSkKLSAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6dW5hcnlNaW51c0lt
cGwodm0sIGJhc2UpOworICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0Jp
Z0ludDo6dW5hcnlNaW51c0ltcGwoZ2xvYmFsT2JqZWN0LCBiYXNlKSk7CiAKICAgICAgICAgLy8g
KC0xKSAqKiBvZGRfbnVtYmVyID09IC0xOyAxICoqIGFueXRoaW5nID09IDEuCiAgICAgICAgIHJl
dHVybiBiYXNlOwpAQCAtNDY4LDcgKzUxOCw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmln
SW50OjpleHBvbmVudGlhdGVJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpCiAg
ICAgaWYgKGJhc2UubGVuZ3RoKCkgPT0gMSAmJiBiYXNlLmRpZ2l0KDApID09IDIpIHsKICAgICAg
ICAgLy8gRmFzdCBwYXRoIGZvciAyXm4uCiAgICAgICAgIGludCBuZWVkZWREaWdpdHMgPSAxICsg
KG4gLyBkaWdpdEJpdHMpOwotICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnRy
eUNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCBuZWVkZWREaWdpdHMpOworICAgICAgICBK
U0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0
LCBuZWVkZWREaWdpdHMpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxs
cHRyKTsKIAogICAgICAgICByZXN1bHQtPmluaXRpYWxpemUoSW5pdGlhbGl6YXRpb25UeXBlOjpX
aXRoWmVybyk7CkBAIC00ODMsMTEgKzUzMywxNCBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0Jp
Z0ludDo6ZXhwb25lbnRpYXRlSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaQog
ICAgIH0KIAogICAgIEpTQmlnSW50KiByZXN1bHQgPSBudWxscHRyOwotICAgIEpTQmlnSW50KiBy
dW5uaW5nU3F1YXJlID0gYmFzZS50b0hlYXBCaWdJbnQodm0pOworICAgIEpTQmlnSW50KiBydW5u
aW5nU3F1YXJlID0gYmFzZS50b0hlYXBCaWdJbnQoZ2xvYmFsT2JqZWN0KTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIC8vIFRoaXMgaW1wbGljaXRseSBz
ZXRzIHRoZSByZXN1bHQncyBzaWduIGNvcnJlY3RseS4KLSAgICBpZiAobiAmIDEpCi0gICAgICAg
IHJlc3VsdCA9IGJhc2UudG9IZWFwQmlnSW50KHZtKTsKKyAgICBpZiAobiAmIDEpIHsKKyAgICAg
ICAgcmVzdWx0ID0gYmFzZS50b0hlYXBCaWdJbnQoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgfQogCiAgICAgbiA+Pj0gMTsK
ICAgICBmb3IgKDsgbjsgbiA+Pj0gMSkgewpAQCAtNTQ4LDcgKzYwMSw3IEBAIEpTQmlnSW50OjpJ
bXBsUmVzdWx0IEpTQmlnSW50OjptdWx0aXBseUltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQmlnSW50CiAgICAgICAgIHJldHVybiB5OwogCiAgICAgdW5zaWduZWQgcmVzdWx0TGVu
Z3RoID0geC5sZW5ndGgoKSArIHkubGVuZ3RoKCk7Ci0gICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpT
QmlnSW50Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsK
KyAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFs
T2JqZWN0LCByZXN1bHRMZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51
bGxwdHIpOwogICAgIHJlc3VsdC0+aW5pdGlhbGl6ZShJbml0aWFsaXphdGlvblR5cGU6OldpdGha
ZXJvKTsKIApAQCAtNTU2LDcgKzYwOSw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50
OjptdWx0aXBseUltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50CiAgICAg
ICAgIG11bHRpcGx5QWNjdW11bGF0ZSh5LCB4LmRpZ2l0KGkpLCByZXN1bHQsIGkpOwogCiAgICAg
cmVzdWx0LT5zZXRTaWduKHguc2lnbigpICE9IHkuc2lnbigpKTsKLSAgICByZXR1cm4gcmVzdWx0
LT5yaWdodFRyaW0odm0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0LT5y
aWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIEpTVmFsdWUgSlNCaWdJbnQ6Om11bHRpcGx5
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkK
QEAgLTU5MCwyNCArNjQzLDMwIEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpkaXZp
ZGVJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltCiAgICAgLy8gMy4g
UmV0dXJuIGEgQmlnSW50IHJlcHJlc2VudGluZyBxdW90aWVudCByb3VuZGVkIHRvd2FyZHMgMCB0
byB0aGUgbmV4dAogICAgIC8vICAgIGludGVncmFsIHZhbHVlLgogICAgIGlmIChhYnNvbHV0ZUNv
bXBhcmUoeCwgeSkgPT0gQ29tcGFyaXNvblJlc3VsdDo6TGVzc1RoYW4pCi0gICAgICAgIHJldHVy
biB6ZXJvSW1wbCh2bSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgemVyb0lt
cGwoZ2xvYmFsT2JqZWN0KSk7CiAKICAgICBKU0JpZ0ludCogcXVvdGllbnQgPSBudWxscHRyOwog
ICAgIGJvb2wgcmVzdWx0U2lnbiA9IHguc2lnbigpICE9IHkuc2lnbigpOwogICAgIGlmICh5Lmxl
bmd0aCgpID09IDEpIHsKICAgICAgICAgRGlnaXQgZGl2aXNvciA9IHkuZGlnaXQoMCk7Ci0gICAg
ICAgIGlmIChkaXZpc29yID09IDEpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0U2lnbiA9PSB4
LnNpZ24oKSA/IEpTQmlnSW50OjpJbXBsUmVzdWx0IHsgeCB9IDogSlNCaWdJbnQ6OnVuYXJ5TWlu
dXNJbXBsKHZtLCB4KTsKKyAgICAgICAgaWYgKGRpdmlzb3IgPT0gMSkgeworICAgICAgICAgICAg
aWYgKHJlc3VsdFNpZ24gPT0geC5zaWduKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTQmln
SW50OjpJbXBsUmVzdWx0IHsgeCB9OworICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwoZ2xvYmFsT2JqZWN0LCB4KSk7CisgICAgICAg
IH0KIAogICAgICAgICBEaWdpdCByZW1haW5kZXI7Ci0gICAgICAgIGFic29sdXRlRGl2V2l0aERp
Z2l0RGl2aXNvcih2bSwgeCwgZGl2aXNvciwgJnF1b3RpZW50LCByZW1haW5kZXIpOworICAgICAg
ICBhYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3IoZ2xvYmFsT2JqZWN0LCB2bSwgeCwgZGl2aXNv
ciwgJnF1b3RpZW50LCByZW1haW5kZXIpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKICAgICB9IGVsc2UgewotICAgICAgICBhYnNvbHV0ZURpdldpdGhCaWdJ
bnREaXZpc29yKGdsb2JhbE9iamVjdCwgeCwgeS50b0hlYXBCaWdJbnQodm0pLCAmcXVvdGllbnQs
IG51bGxwdHIpOworICAgICAgICBKU0JpZ0ludCogeUJpZ0ludCA9IHkudG9IZWFwQmlnSW50KGds
b2JhbE9iamVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIp
OworICAgICAgICBhYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKGdsb2JhbE9iamVjdCwgeCwg
eUJpZ0ludCwgJnF1b3RpZW50LCBudWxscHRyKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgbnVsbHB0cik7CiAgICAgfQogCiAgICAgcXVvdGllbnQtPnNldFNpZ24ocmVzdWx0
U2lnbik7Ci0gICAgcmV0dXJuIHF1b3RpZW50LT5yaWdodFRyaW0odm0pOworICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgcXVvdGllbnQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0K
IAogSlNWYWx1ZSBKU0JpZ0ludDo6ZGl2aWRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKQEAgLTYyNiwxMSArNjg1LDE2IEBAIEpTVmFsdWUg
SlNCaWdJbnQ6OmRpdmlkZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgs
IEpTQmlnSW50KiB5KQogI2VuZGlmCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgot
SlNCaWdJbnQqIEpTQmlnSW50Ojpjb3B5KFZNJiB2bSwgQmlnSW50SW1wbCB4KQorSlNCaWdJbnQq
IEpTQmlnSW50Ojpjb3B5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwg
eCkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgQVNTRVJUKCF4LmlzWmVybygpKTsKIAot
ICAgIEpTQmlnSW50KiByZXN1bHQgPSBKU0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tl
ZCh2bSwgeC5sZW5ndGgoKSk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5n
dGgoZ2xvYmFsT2JqZWN0LCB4Lmxlbmd0aCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKKwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHQtPmxl
bmd0aCgpOyArK2kpCiAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgeC5kaWdpdChpKSk7CiAg
ICAgcmVzdWx0LT5zZXRTaWduKHguc2lnbigpKTsKQEAgLTYzOCwxOSArNzAyLDI0IEBAIEpTQmln
SW50KiBKU0JpZ0ludDo6Y29weShWTSYgdm0sIEJpZ0ludEltcGwgeCkKIH0KIAogdGVtcGxhdGUg
PHR5cGVuYW1lIEJpZ0ludEltcGw+Ci1KU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6dW5h
cnlNaW51c0ltcGwoVk0mIHZtLCBCaWdJbnRJbXBsIHgpCitKU0JpZ0ludDo6SW1wbFJlc3VsdCBK
U0JpZ0ludDo6dW5hcnlNaW51c0ltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmln
SW50SW1wbCB4KQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoeC5pc1plcm8oKSkK
LSAgICAgICAgcmV0dXJuIHplcm9JbXBsKHZtKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCB6ZXJvSW1wbChnbG9iYWxPYmplY3QpKTsKKworICAgIEpTQmlnSW50KiByZXN1bHQg
PSBjb3B5KGdsb2JhbE9iamVjdCwgeCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
bnVsbHB0cik7CiAKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gY29weSh2bSwgeCk7CiAgICAgcmVz
dWx0LT5zZXRTaWduKCF4LnNpZ24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1
ZSBKU0JpZ0ludDo6dW5hcnlNaW51cyhWTSYgdm0sIEpTQmlnSW50KiB4KQorSlNWYWx1ZSBKU0Jp
Z0ludDo6dW5hcnlNaW51cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCog
eCkKIHsKLSAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIodW5hcnlNaW51c0ltcGwodm0s
IEhlYXBCaWdJbnRJbXBsIHsgeCB9KSk7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMy
KHVuYXJ5TWludXNJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0pKTsKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4K
QEAgLTY3NCwyMiArNzQzLDI3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpyZW1h
aW5kZXJJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0luCiAgICAgaWYgKHku
bGVuZ3RoKCkgPT0gMSkgewogICAgICAgICBEaWdpdCBkaXZpc29yID0geS5kaWdpdCgwKTsKICAg
ICAgICAgaWYgKGRpdmlzb3IgPT0gMSkKLSAgICAgICAgICAgIHJldHVybiB6ZXJvSW1wbCh2bSk7
CisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHplcm9JbXBsKGdsb2JhbE9i
amVjdCkpOwogCiAgICAgICAgIERpZ2l0IHJlbWFpbmRlckRpZ2l0OwotICAgICAgICBhYnNvbHV0
ZURpdldpdGhEaWdpdERpdmlzb3Iodm0sIHgsIGRpdmlzb3IsIG51bGxwdHIsIHJlbWFpbmRlckRp
Z2l0KTsKKyAgICAgICAgYWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29yKGdsb2JhbE9iamVjdCwg
dm0sIHgsIGRpdmlzb3IsIG51bGxwdHIsIHJlbWFpbmRlckRpZ2l0KTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisKICAgICAgICAgaWYgKCFyZW1haW5kZXJE
aWdpdCkKLSAgICAgICAgICAgIHJldHVybiB6ZXJvSW1wbCh2bSk7CisgICAgICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIHplcm9JbXBsKGdsb2JhbE9iamVjdCkpOwogCi0gICAgICAg
IHJlbWFpbmRlciA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIDEpOworICAgICAgICBy
ZW1haW5kZXIgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgMSk7CisgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICByZW1haW5kZXItPnNl
dERpZ2l0KDAsIHJlbWFpbmRlckRpZ2l0KTsKICAgICB9IGVsc2UgewotICAgICAgICBhYnNvbHV0
ZURpdldpdGhCaWdJbnREaXZpc29yKGdsb2JhbE9iamVjdCwgeCwgeS50b0hlYXBCaWdJbnQodm0p
LCBudWxscHRyLCAmcmVtYWluZGVyKTsKKyAgICAgICAgSlNCaWdJbnQqIHlCaWdJbnQgPSB5LnRv
SGVhcEJpZ0ludChnbG9iYWxPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKKyAgICAgICAgYWJzb2x1dGVEaXZXaXRoQmlnSW50RGl2aXNvcihnbG9i
YWxPYmplY3QsIHgsIHlCaWdJbnQsIG51bGxwdHIsICZyZW1haW5kZXIpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICB9CiAKICAgICByZW1haW5kZXIt
PnNldFNpZ24oeC5zaWduKCkpOwotICAgIHJldHVybiByZW1haW5kZXItPnJpZ2h0VHJpbSh2bSk7
CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZW1haW5kZXItPnJpZ2h0VHJpbShnbG9i
YWxPYmplY3QpKTsKIH0KIEpTVmFsdWUgSlNCaWdJbnQ6OnJlbWFpbmRlcihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCiB7CkBAIC03MDksOSAr
NzgzLDEzIEBAIEpTVmFsdWUgSlNCaWdJbnQ6OnJlbWFpbmRlcihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmln
SW50SW1wbD4KIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjppbmNJbXBsKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCkKIHsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgaWYgKCF4LnNpZ24oKSkKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGds
b2JhbE9iamVjdCwgeCwgU2lnbk9wdGlvbjo6VW5zaWduZWQpOworICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgeCwgU2lnbk9wdGlv
bjo6VW5zaWduZWQpKTsKICAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xv
YmFsT2JqZWN0LCB4LCB4Lmxlbmd0aCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKICAgICBpZiAocmVzdWx0LT5pc1plcm8oKSkKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICByZXN1bHQtPnNldFNpZ24odHJ1ZSk7CkBAIC03NDYsNyArODI0LDYgQEAgSlNW
YWx1ZSBKU0JpZ0ludDo6ZGVjKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50
KiB4KQogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBs
Mj4KIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjphZGRJbXBsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7Ci0gICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGJvb2wgeFNpZ24gPSB4LnNpZ24oKTsKIAog
ICAgIC8vIHggKyB5ID09IHggKyB5CkBAIC03NTgsOSArODM1LDkgQEAgSlNCaWdJbnQ6OkltcGxS
ZXN1bHQgSlNCaWdJbnQ6OmFkZEltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmln
SW50SW1wbDEKICAgICAvLyAteCArIHkgPT0geSAtIHggPT0gLSh4IC0geSkKICAgICBDb21wYXJp
c29uUmVzdWx0IGNvbXBhcmlzb25SZXN1bHQgPSBhYnNvbHV0ZUNvbXBhcmUoeCwgeSk7CiAgICAg
aWYgKGNvbXBhcmlzb25SZXN1bHQgPT0gQ29tcGFyaXNvblJlc3VsdDo6R3JlYXRlclRoYW4gfHwg
Y29tcGFyaXNvblJlc3VsdCA9PSBDb21wYXJpc29uUmVzdWx0OjpFcXVhbCkKLSAgICAgICAgcmV0
dXJuIGFic29sdXRlU3ViKHZtLCB4LCB5LCB4U2lnbik7CisgICAgICAgIHJldHVybiBhYnNvbHV0
ZVN1YihnbG9iYWxPYmplY3QsIHgsIHksIHhTaWduKTsKIAotICAgIHJldHVybiBhYnNvbHV0ZVN1
Yih2bSwgeSwgeCwgIXhTaWduKTsKKyAgICByZXR1cm4gYWJzb2x1dGVTdWIoZ2xvYmFsT2JqZWN0
LCB5LCB4LCAheFNpZ24pOwogfQogSlNWYWx1ZSBKU0JpZ0ludDo6YWRkKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKIHsKQEAgLTc4MCw3ICs4
NTcsNiBAQCBKU1ZhbHVlIEpTQmlnSW50OjphZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSkKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBs
MSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CiBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6
c3ViSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJ
bnRJbXBsMiB5KQogewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBib29s
IHhTaWduID0geC5zaWduKCk7CiAgICAgaWYgKHhTaWduICE9IHkuc2lnbigpKSB7CiAgICAgICAg
IC8vIHggLSAoLXkpID09IHggKyB5CkBAIC03OTEsOSArODY3LDkgQEAgSlNCaWdJbnQ6OkltcGxS
ZXN1bHQgSlNCaWdJbnQ6OnN1YkltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmln
SW50SW1wbDEKICAgICAvLyAoLXgpIC0gKC15KSA9PSB5IC0geCA9PSAtKHggLSB5KQogICAgIENv
bXBhcmlzb25SZXN1bHQgY29tcGFyaXNvblJlc3VsdCA9IGFic29sdXRlQ29tcGFyZSh4LCB5KTsK
ICAgICBpZiAoY29tcGFyaXNvblJlc3VsdCA9PSBDb21wYXJpc29uUmVzdWx0OjpHcmVhdGVyVGhh
biB8fCBjb21wYXJpc29uUmVzdWx0ID09IENvbXBhcmlzb25SZXN1bHQ6OkVxdWFsKQotICAgICAg
ICByZXR1cm4gYWJzb2x1dGVTdWIodm0sIHgsIHksIHhTaWduKTsKKyAgICAgICAgcmV0dXJuIGFi
c29sdXRlU3ViKGdsb2JhbE9iamVjdCwgeCwgeSwgeFNpZ24pOwogCi0gICAgcmV0dXJuIGFic29s
dXRlU3ViKHZtLCB5LCB4LCAheFNpZ24pOworICAgIHJldHVybiBhYnNvbHV0ZVN1YihnbG9iYWxP
YmplY3QsIHksIHgsICF4U2lnbik7CiB9CiAKIEpTVmFsdWUgSlNCaWdJbnQ6OnN1YihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCkBAIC04MTcs
MTAgKzg5Myw4IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpiaXR3aXNlQW5kSW1w
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJCiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAotICAgIGlmICgheC5zaWduKCkgJiYgIXkuc2lnbigpKSB7Ci0gICAgICAgIHNjb3BlLnJlbGVh
c2UoKTsKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQW5kKHZtLCB4LCB5KTsKLSAgICB9CisgICAg
aWYgKCF4LnNpZ24oKSAmJiAheS5zaWduKCkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgYWJzb2x1dGVBbmQoZ2xvYmFsT2JqZWN0LCB4LCB5KSk7CiAgICAgCiAgICAgaWYgKHgu
c2lnbigpICYmIHkuc2lnbigpKSB7CiAgICAgICAgIGludCByZXN1bHRMZW5ndGggPSBzdGQ6Om1h
eCh4Lmxlbmd0aCgpLCB5Lmxlbmd0aCgpKSArIDE7CkBAIC04MzEsOSArOTA1LDkgQEAgSlNCaWdJ
bnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VBbmRJbXBsKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEJpZ0kKIAogICAgICAgICBKU0JpZ0ludCogeTEgPSBhYnNvbHV0ZVN1Yk9u
ZShnbG9iYWxPYmplY3QsIHksIHkubGVuZ3RoKCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVPcih2bSwgSGVh
cEJpZ0ludEltcGwgeyByZXN1bHQgfSwgSGVhcEJpZ0ludEltcGwgeyB5MSB9KTsKLSAgICAgICAg
c2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2Jq
ZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpOworICAg
ICAgICByZXN1bHQgPSBhYnNvbHV0ZU9yKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyBy
ZXN1bHQgfSwgSGVhcEJpZ0ludEltcGwgeyB5MSB9KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
YWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBT
aWduT3B0aW9uOjpTaWduZWQpKTsKICAgICB9CiAKICAgICBBU1NFUlQoeC5zaWduKCkgIT0geS5z
aWduKCkpOwpAQCAtODQzLDcgKzkxNyw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50
OjpiaXR3aXNlQW5kSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJCiAgICAg
ICAgIEFTU0VSVCh5LnNpZ24oKSk7IAogICAgICAgICBKU0JpZ0ludCogeTEgPSBhYnNvbHV0ZVN1
Yk9uZShnbG9iYWxPYmplY3QsIHksIHkubGVuZ3RoKCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQW5kTm90KHZt
LCB4LCBIZWFwQmlnSW50SW1wbCB7IHkxIH0pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIGFic29sdXRlQW5kTm90KGdsb2JhbE9iamVjdCwgeCwgSGVhcEJpZ0ludEltcGwgeyB5
MSB9KSk7CiAgICAgfTsKICAgICBpZiAoeC5zaWduKCkpCiAgICAgICAgIHJldHVybiBjb21wdXRl
UmVzdWx0KHksIHgpOwpAQCAtODczLDEwICs5NDcsOCBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBK
U0JpZ0ludDo6Yml0d2lzZU9ySW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJ
bgogCiAgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoeC5sZW5ndGgoKSwgeS5s
ZW5ndGgoKSk7CiAKLSAgICBpZiAoIXguc2lnbigpICYmICF5LnNpZ24oKSkgewotICAgICAgICBz
Y29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBhYnNvbHV0ZU9yKHZtLCB4LCB5KTsKLSAg
ICB9CisgICAgaWYgKCF4LnNpZ24oKSAmJiAheS5zaWduKCkpCisgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgYWJzb2x1dGVPcihnbG9iYWxPYmplY3QsIHgsIHkpKTsKICAgICAKICAg
ICBpZiAoeC5zaWduKCkgJiYgeS5zaWduKCkpIHsKICAgICAgICAgLy8gKC14KSB8ICgteSkgPT0g
fih4LTEpIHwgfih5LTEpID09IH4oKHgtMSkgJiAoeS0xKSkKQEAgLTg4NSwxMSArOTU3LDkgQEAg
SlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VPckltcGwoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQmlnSW4KICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgbnVsbHB0cik7CiAgICAgICAgIEpTQmlnSW50KiB5MSA9IGFic29sdXRlU3ViT25lKGdsb2Jh
bE9iamVjdCwgeSwgeS5sZW5ndGgoKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIG51bGxwdHIpOwotICAgICAgICByZXN1bHQgPSBhYnNvbHV0ZUFuZCh2bSwgSGVhcEJpZ0lu
dEltcGwgeyByZXN1bHQgfSwgSGVhcEJpZ0ludEltcGwgeyB5MSB9KTsKKyAgICAgICAgcmVzdWx0
ID0gYWJzb2x1dGVBbmQoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBI
ZWFwQmlnSW50SW1wbCB7IHkxIH0pOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKLQotICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBh
YnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIFNp
Z25PcHRpb246OlNpZ25lZCk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJz
b2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWdu
T3B0aW9uOjpTaWduZWQpKTsKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKHguc2lnbigpICE9IHku
c2lnbigpKTsKQEAgLTkwMSwxMCArOTcxLDkgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJ
bnQ6OmJpdHdpc2VPckltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW4KIAog
ICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5
LCByZXN1bHRMZW5ndGgpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxs
cHRyKTsKLSAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVBbmROb3Qodm0sIEhlYXBCaWdJbnRJbXBs
IHsgcmVzdWx0IH0sIHgpOwotCi0gICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0
dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQg
fSwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKKyAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVBbmROb3Qo
Z2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCB4KTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7
IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpKTsKICAgICB9OwogCiAgICAgaWYgKHguc2ln
bigpKQpAQCAtOTMzLDEwICsxMDAyLDggQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6
OmJpdHdpc2VYb3JJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0kKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCF4LnNpZ24oKSAmJiAheS5zaWduKCkpIHsKLSAgICAg
ICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gYWJzb2x1dGVYb3Iodm0sIHgsIHkp
OwotICAgIH0KKyAgICBpZiAoIXguc2lnbigpICYmICF5LnNpZ24oKSkKKyAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBhYnNvbHV0ZVhvcihnbG9iYWxPYmplY3QsIHgsIHkpKTsKICAg
ICAKICAgICBpZiAoeC5zaWduKCkgJiYgeS5zaWduKCkpIHsKICAgICAgICAgaW50IHJlc3VsdExl
bmd0aCA9IHN0ZDo6bWF4KHgubGVuZ3RoKCksIHkubGVuZ3RoKCkpOwpAQCAtOTQ2LDkgKzEwMTMs
NyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6Yml0d2lzZVhvckltcGwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSQogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgSlNCaWdJbnQqIHkxID0gYWJzb2x1dGVTdWJPbmUo
Z2xvYmFsT2JqZWN0LCB5LCB5Lmxlbmd0aCgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgbnVsbHB0cik7Ci0KLSAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBy
ZXR1cm4gYWJzb2x1dGVYb3Iodm0sIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIEhlYXBCaWdJ
bnRJbXBsIHsgeTEgfSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1
dGVYb3IoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBIZWFwQmlnSW50
SW1wbCB7IHkxIH0pKTsKICAgICB9CiAgICAgQVNTRVJUKHguc2lnbigpICE9IHkuc2lnbigpKTsK
ICAgICBpbnQgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoeC5sZW5ndGgoKSwgeS5sZW5ndGgoKSkg
KyAxOwpAQCAtOTYwLDkgKzEwMjUsOSBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6
Yml0d2lzZVhvckltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSQogICAgICAg
ICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCByZXN1
bHRMZW5ndGgpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsK
IAotICAgICAgICByZXN1bHQgPSBhYnNvbHV0ZVhvcih2bSwgSGVhcEJpZ0ludEltcGwgeyByZXN1
bHQgfSwgeCk7Ci0gICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGFic29s
dXRlQWRkT25lKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgU2lnbk9w
dGlvbjo6U2lnbmVkKTsKKyAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVYb3IoZ2xvYmFsT2JqZWN0
LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCB4KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
YWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBT
aWduT3B0aW9uOjpTaWduZWQpKTsKICAgICB9OwogICAgIAogICAgIC8vIEFzc3VtZSB0aGF0IHgg
aXMgdGhlIHBvc2l0aXZlIEJpZ0ludC4KQEAgLTEzNzQsMjEgKzE0MzksMjUgQEAgdGVtcGxhdGUg
PHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KIEpTQmlnSW50OjpJ
bXBsUmVzdWx0IEpTQmlnSW50OjphYnNvbHV0ZUFkZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LCBib29sIHJlc3VsdFNpZ24pCiB7CiAg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICh4Lmxlbmd0aCgpIDwgeS5sZW5ndGgoKSkKLSAg
ICAgICAgcmV0dXJuIGFic29sdXRlQWRkKGdsb2JhbE9iamVjdCwgeSwgeCwgcmVzdWx0U2lnbik7
CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVBZGQoZ2xvYmFsT2Jq
ZWN0LCB5LCB4LCByZXN1bHRTaWduKSk7CiAKICAgICBpZiAoeC5pc1plcm8oKSkgewogICAgICAg
ICBBU1NFUlQoeS5pc1plcm8oKSk7CiAgICAgICAgIHJldHVybiB4OwogICAgIH0KIAotICAgIGlm
ICh5LmlzWmVybygpKQotICAgICAgICByZXR1cm4gcmVzdWx0U2lnbiA9PSB4LnNpZ24oKSA/IHgg
OiB1bmFyeU1pbnVzSW1wbCh2bSwgeCk7CisgICAgaWYgKHkuaXNaZXJvKCkpIHsKKyAgICAgICAg
aWYgKHJlc3VsdFNpZ24gPT0geC5zaWduKCkpCisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB1bmFyeU1pbnVzSW1wbChnbG9iYWxPYmplY3Qs
IHgpKTsKKyAgICB9CiAKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnRyeUNyZWF0
ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCB4Lmxlbmd0aCgpICsgMSk7Ci0gICAgaWYgKCFyZXN1
bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVh
dGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgeC5sZW5ndGgoKSArIDEpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAgIEFTU0VSVChyZXN1bHQpOwogICAgIERp
Z2l0IGNhcnJ5ID0gMDsKICAgICB1bnNpZ25lZCBpID0gMDsKICAgICBmb3IgKDsgaSA8IHkubGVu
Z3RoKCk7IGkrKykgewpAQCAtMTQwOSwxMiArMTQ3OCwxNSBAQCBKU0JpZ0ludDo6SW1wbFJlc3Vs
dCBKU0JpZ0ludDo6YWJzb2x1dGVBZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmln
SW50SQogICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgY2FycnkpOwogICAgIHJlc3VsdC0+c2V0U2ln
bihyZXN1bHRTaWduKTsKIAotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3Qp
KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJ
bXBsMj4KLUpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjphYnNvbHV0ZVN1YihWTSYgdm0s
IEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHksIGJvb2wgcmVzdWx0U2lnbikKK0pTQmlnSW50
OjpJbXBsUmVzdWx0IEpTQmlnSW50OjphYnNvbHV0ZVN1YihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LCBib29sIHJlc3VsdFNpZ24pCiB7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIENvbXBhcmlzb25SZXN1bHQgY29tcGFyaXNvblJl
c3VsdCA9IGFic29sdXRlQ29tcGFyZSh4LCB5KTsKICAgICBBU1NFUlQoeC5sZW5ndGgoKSA+PSB5
Lmxlbmd0aCgpKTsKICAgICBBU1NFUlQoY29tcGFyaXNvblJlc3VsdCA9PSBDb21wYXJpc29uUmVz
dWx0OjpHcmVhdGVyVGhhbiB8fCBjb21wYXJpc29uUmVzdWx0ID09IENvbXBhcmlzb25SZXN1bHQ6
OkVxdWFsKTsKQEAgLTE0MjQsMTMgKzE0OTYsMTcgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNC
aWdJbnQ6OmFic29sdXRlU3ViKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwK
ICAgICAgICAgcmV0dXJuIHg7CiAgICAgfQogCi0gICAgaWYgKHkuaXNaZXJvKCkpCi0gICAgICAg
IHJldHVybiByZXN1bHRTaWduID09IHguc2lnbigpID8gSW1wbFJlc3VsdCB7IHggfSA6IEpTQmln
SW50Ojp1bmFyeU1pbnVzSW1wbCh2bSwgeCk7CisgICAgaWYgKHkuaXNaZXJvKCkpIHsKKyAgICAg
ICAgaWYgKHJlc3VsdFNpZ24gPT0geC5zaWduKCkpCisgICAgICAgICAgICByZXR1cm4gSW1wbFJl
c3VsdCB7IHggfTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6
dW5hcnlNaW51c0ltcGwoZ2xvYmFsT2JqZWN0LCB4KSk7CisgICAgfQogCiAgICAgaWYgKGNvbXBh
cmlzb25SZXN1bHQgPT0gQ29tcGFyaXNvblJlc3VsdDo6RXF1YWwpCi0gICAgICAgIHJldHVybiB6
ZXJvSW1wbCh2bSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgemVyb0ltcGwo
Z2xvYmFsT2JqZWN0KSk7CiAKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmNyZWF0
ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIHgubGVuZ3RoKCkpOworICAgIEpTQmlnSW50KiByZXN1
bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgeC5sZW5ndGgoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBEaWdpdCBib3Jyb3cgPSAw
OwogICAgIHVuc2lnbmVkIGkgPSAwOwpAQCAtMTQ1MSw3ICsxNTI3LDcgQEAgSlNCaWdJbnQ6Oklt
cGxSZXN1bHQgSlNCaWdJbnQ6OmFic29sdXRlU3ViKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwgQmln
SW50SW1wbDIgeSwKIAogICAgIEFTU0VSVCghYm9ycm93KTsKICAgICByZXN1bHQtPnNldFNpZ24o
cmVzdWx0U2lnbik7Ci0gICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKKyAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdCkpOwog
fQogCiAvLyBEaXZpZGVzIHt4fSBieSB7ZGl2aXNvcn0sIHJldHVybmluZyB0aGUgcmVzdWx0IGlu
IHtxdW90aWVudH0gYW5kIHtyZW1haW5kZXJ9LgpAQCAtMTQ2MiwyMiArMTUzOCw0NCBAQCBKU0Jp
Z0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YWJzb2x1dGVTdWIoVk0mIHZtLCBCaWdJbnRJbXBs
MSB4LCBCaWdJbnRJbXBsMiB5LAogLy8ge3F1b3RpZW50fSBjYW4gYmUgdGhlIHNhbWUgYXMge3h9
IGZvciBhbiBpbi1wbGFjZSBkaXZpc2lvbi4ge3F1b3RpZW50fSBjYW4KIC8vIGFsc28gYmUgbnVs
bHB0ciBpZiB0aGUgY2FsbGVyIGlzIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgcmVtYWluZGVyLgog
dGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci12b2lkIEpTQmlnSW50OjphYnNvbHV0ZURp
dldpdGhEaWdpdERpdmlzb3IoVk0mIHZtLCBCaWdJbnRJbXBsIHgsIERpZ2l0IGRpdmlzb3IsIEpT
QmlnSW50KiogcXVvdGllbnQsIERpZ2l0JiByZW1haW5kZXIpCitib29sIEpTQmlnSW50OjphYnNv
bHV0ZURpdldpdGhEaWdpdERpdmlzb3IoSlNHbG9iYWxPYmplY3QqIG51bGxPckdsb2JhbE9iamVj
dEZvck9PTSwgVk0mIHZtLCBCaWdJbnRJbXBsIHgsIERpZ2l0IGRpdmlzb3IsIEpTQmlnSW50Kiog
cXVvdGllbnQsIERpZ2l0JiByZW1haW5kZXIpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCiAgICAgQVNTRVJUKGRpdmlzb3IpOwogCiAgICAgQVNTRVJUKCF4
LmlzWmVybygpKTsKICAgICByZW1haW5kZXIgPSAwOwogICAgIGlmIChkaXZpc29yID09IDEpIHsK
LSAgICAgICAgaWYgKHF1b3RpZW50KQotICAgICAgICAgICAgKnF1b3RpZW50ID0geC50b0hlYXBC
aWdJbnQodm0pOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChxdW90aWVudCkgeworICAg
ICAgICAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAobnVs
bE9yR2xvYmFsT2JqZWN0Rm9yT09NKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0geC50b0hl
YXBCaWdJbnQobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NKTsKKyAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHgudHJ5VG9IZWFwQmlnSW50KHZtKTsKKyAgICAgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpxdW90aWVudCA9IHJlc3VsdDsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBsZW5n
dGggPSB4Lmxlbmd0aCgpOwogICAgIGlmIChxdW90aWVudCkgewotICAgICAgICBpZiAoKnF1b3Rp
ZW50ID09IG51bGxwdHIpCi0gICAgICAgICAgICAqcXVvdGllbnQgPSBKU0JpZ0ludDo6Y3JlYXRl
V2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgbGVuZ3RoKTsKKyAgICAgICAgaWYgKCpxdW90aWVudCA9
PSBudWxscHRyKSB7CisgICAgICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgIGlmIChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00pIHsKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgbGVu
Z3RoKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRyeUNyZWF0
ZVdpdGhMZW5ndGgodm0sIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFy
ZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAqcXVvdGllbnQgPSByZXN1bHQ7CisgICAgICAgIH0KIAogICAgICAgICBm
b3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgIERpZ2l0
IHEgPSBkaWdpdERpdihyZW1haW5kZXIsIHguZGlnaXQoaSksIGRpdmlzb3IsIHJlbWFpbmRlcik7
CkBAIC0xNDg3LDYgKzE1ODUsNyBAQCB2b2lkIEpTQmlnSW50OjphYnNvbHV0ZURpdldpdGhEaWdp
dERpdmlzb3IoVk0mIHZtLCBCaWdJbnRJbXBsIHgsIERpZ2l0IGRpdmlzb3IsCiAgICAgICAgIGZv
ciAoaW50IGkgPSBsZW5ndGggLSAxOyBpID49IDA7IGktLSkKICAgICAgICAgICAgIGRpZ2l0RGl2
KHJlbWFpbmRlciwgeC5kaWdpdChpKSwgZGl2aXNvciwgcmVtYWluZGVyKTsKICAgICB9CisgICAg
cmV0dXJuIHRydWU7CiB9CiAKIC8vIERpdmlkZXMge2RpdmlkZW5kfSBieSB7ZGl2aXNvcn0sIHJl
dHVybmluZyB0aGUgcmVzdWx0IGluIHtxdW90aWVudH0gYW5kCkBAIC0xNTEyLDEyICsxNjExLDE0
IEBAIHZvaWQgSlNCaWdJbnQ6OmFic29sdXRlRGl2V2l0aEJpZ0ludERpdmlzb3IoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50CiAgICAgCiAgICAgLy8gVGhlIHF1b3RpZW50IHRv
IGJlIGNvbXB1dGVkLgogICAgIEpTQmlnSW50KiBxID0gbnVsbHB0cjsKLSAgICBpZiAocXVvdGll
bnQgIT0gbnVsbHB0cikKLSAgICAgICAgcSA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQoZ2xv
YmFsT2JqZWN0LT52bSgpLCBtICsgMSk7CisgICAgaWYgKHF1b3RpZW50ICE9IG51bGxwdHIpIHsK
KyAgICAgICAgcSA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCBtICsgMSk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAgfQogICAgIAogICAg
IC8vIEluIGVhY2ggaXRlcmF0aW9uLCB7cWhhdHZ9IGhvbGRzIHtkaXZpc29yfSAqIHtjdXJyZW50
IHF1b3RpZW50IGRpZ2l0fS4KICAgICAvLyAidiIgaXMgdGhlIGJvb2sncyBuYW1lIGZvciB7ZGl2
aXNvcn0sICJxaGF0IiB0aGUgY3VycmVudCBxdW90aWVudCBkaWdpdC4KLSAgICBKU0JpZ0ludCog
cWhhdHYgPSB0cnlDcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgbiArIDEpOworICAgIEpT
QmlnSW50KiBxaGF0diA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCBuICsgMSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAKICAgICAvLyBEMS4K
QEAgLTE2NjcsMTQgKzE3NjgsMTYgQEAgdm9pZCBKU0JpZ0ludDo6aW5wbGFjZVJpZ2h0U2hpZnQo
dW5zaWduZWQgc2hpZnQpCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KIEpTQmlnSW50
KiBKU0JpZ0ludDo6YWJzb2x1dGVMZWZ0U2hpZnRBbHdheXNDb3B5KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCwgdW5zaWduZWQgc2hpZnQsIExlZnRTaGlmdE1vZGUg
bW9kZSkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgQVNTRVJUKHNoaWZ0IDwgZGlnaXRC
aXRzKTsKICAgICBBU1NFUlQoIXguaXNaZXJvKCkpOwogCiAgICAgdW5zaWduZWQgbiA9IHgubGVu
Z3RoKCk7CiAgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0gbW9kZSA9PSBMZWZ0U2hpZnRNb2Rl
OjpBbHdheXNBZGRPbmVEaWdpdCA/IG4gKyAxIDogbjsKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0g
dHJ5Q3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7Ci0gICAgaWYg
KCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIEpTQmlnSW50KiByZXN1bHQg
PSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgaWYgKCFzaGlmdCkgewogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbjsgaSsrKQpAQCAtMTcxNiw4ICsxODE5LDExIEBA
IEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVMZWZ0U2hpZnRBbHdheXNDb3B5KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpCiAvLyAgICAgICAgICAgICAgICAgICB2ICAgICB2ICAg
ICB2ICAgICB2CiAvLyByZXN1bHQ6IFsgIDAgXVsgeDMgXVsgcjIgXVsgcjEgXVsgcjAgXQogdGVt
cGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMiwgdHlwZW5h
bWUgQml0d2lzZU9wPgotaW5saW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVCaXR3aXNl
T3AoVk0mIHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LCBFeHRyYURpZ2l0c0hhbmRs
aW5nIGV4dHJhRGlnaXRzLCBCaXR3aXNlT3AmJiBvcCkKK2lubGluZSBKU0JpZ0ludCogSlNCaWdJ
bnQ6OmFic29sdXRlQml0d2lzZU9wKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0lu
dEltcGwxIHgsIEJpZ0ludEltcGwyIHksIEV4dHJhRGlnaXRzSGFuZGxpbmcgZXh0cmFEaWdpdHMs
IEJpdHdpc2VPcCYmIG9wKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICB1bnNpZ25lZCB4
TGVuZ3RoID0geC5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCB5TGVuZ3RoID0geS5sZW5ndGgoKTsK
ICAgICB1bnNpZ25lZCBudW1QYWlycyA9IHlMZW5ndGg7CkBAIC0xNzMwLDcgKzE4MzYsOCBAQCBp
bmxpbmUgSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUJpdHdpc2VPcChWTSYgdm0sIEJpZ0lu
dEltcGwxIHgsIEJpZ0ludEltcGwyCiAgICAgQVNTRVJUKG51bVBhaXJzID09IHN0ZDo6bWluKHhM
ZW5ndGgsIHlMZW5ndGgpKTsKICAgICBBU1NFUlQobWF4TGVuZ3RoID09IHN0ZDo6bWF4KHhMZW5n
dGgsIHlMZW5ndGgpKTsKICAgICB1bnNpZ25lZCByZXN1bHRMZW5ndGggPSBleHRyYURpZ2l0cyA9
PSBFeHRyYURpZ2l0c0hhbmRsaW5nOjpDb3B5ID8gbWF4TGVuZ3RoIDogbnVtUGFpcnM7Ci0gICAg
SlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIHJlc3VsdExl
bmd0aCk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2Jq
ZWN0LCByZXN1bHRMZW5ndGgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOwogICAgIHVuc2lnbmVkIGkgPSAwOwogICAgIGZvciAoOyBpIDwgbnVtUGFpcnM7IGkrKykK
ICAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCBvcCh4LmRpZ2l0KGkpLCB5LmRpZ2l0KGkpKSk7
CkBAIC0xNzQ4LDU4ICsxODU1LDY1IEBAIGlubGluZSBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29s
dXRlQml0d2lzZU9wKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIKICAgICBmb3Ig
KDsgaSA8IHJlc3VsdExlbmd0aDsgaSsrKQogICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIDAp
OwogCi0gICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKKyAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdCkpOwogfQogCiB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgotSlNCaWdJ
bnQqIEpTQmlnSW50OjphYnNvbHV0ZUFuZChWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0ludElt
cGwyIHkpCitKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQW5kKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgYXV0byBk
aWdpdE9wZXJhdGlvbiA9IFtdKERpZ2l0IGEsIERpZ2l0IGIpIHsKICAgICAgICAgcmV0dXJuIGEg
JiBiOwogICAgIH07Ci0gICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9wKHZtLCB4LCB5LCBFeHRy
YURpZ2l0c0hhbmRsaW5nOjpTa2lwLCBkaWdpdE9wZXJhdGlvbik7CisgICAgcmV0dXJuIGFic29s
dXRlQml0d2lzZU9wKGdsb2JhbE9iamVjdCwgeCwgeSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6U2tp
cCwgZGlnaXRPcGVyYXRpb24pOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEs
IHR5cGVuYW1lIEJpZ0ludEltcGwyPgotSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZU9yKFZN
JiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6
YWJzb2x1dGVPcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBC
aWdJbnRJbXBsMiB5KQogewogICAgIGF1dG8gZGlnaXRPcGVyYXRpb24gPSBbXShEaWdpdCBhLCBE
aWdpdCBiKSB7CiAgICAgICAgIHJldHVybiBhIHwgYjsKICAgICB9OwotICAgIHJldHVybiBhYnNv
bHV0ZUJpdHdpc2VPcCh2bSwgeCwgeSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6Q29weSwgZGlnaXRP
cGVyYXRpb24pOworICAgIHJldHVybiBhYnNvbHV0ZUJpdHdpc2VPcChnbG9iYWxPYmplY3QsIHgs
IHksIEV4dHJhRGlnaXRzSGFuZGxpbmc6OkNvcHksIGRpZ2l0T3BlcmF0aW9uKTsKIH0KIAogdGVt
cGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KLUpTQmln
SW50KiBKU0JpZ0ludDo6YWJzb2x1dGVBbmROb3QoVk0mIHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJ
bnRJbXBsMiB5KQorSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUFuZE5vdChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewogICAg
IC8vIHggJiB+eQogCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIHVuc2lnbmVkIHhMZW5ndGgg
PSB4Lmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIHlMZW5ndGggPSB5Lmxlbmd0aCgpOwogICAgIHVu
c2lnbmVkIHJlc3VsdExlbmd0aCA9IHhMZW5ndGg7CiAKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0g
Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgcmVzdWx0TGVuZ3RoKTsKKyAgICBKU0JpZ0lu
dCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgdW5zaWduZWQg
aSA9IDA7CiAgICAgZm9yICg7IGkgPCBzdGQ6Om1pbih4TGVuZ3RoLCB5TGVuZ3RoKTsgaSsrKQog
ICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIHguZGlnaXQoaSkgJiB+eS5kaWdpdChpKSk7CiAg
ICAgZm9yICg7IGkgPCByZXN1bHRMZW5ndGg7ICsraSkKICAgICAgICAgcmVzdWx0LT5zZXREaWdp
dChpLCB4LmRpZ2l0KGkpKTsKIAotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7Cisg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmpl
Y3QpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJ
bnRJbXBsMj4KLUpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVYb3IoVk0mIHZtLCBCaWdJbnRJ
bXBsMSB4LCBCaWdJbnRJbXBsMiB5KQorSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZVhvcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5
KQogewogICAgIGF1dG8gZGlnaXRPcGVyYXRpb24gPSBbXShEaWdpdCBhLCBEaWdpdCBiKSB7CiAg
ICAgICAgIHJldHVybiBhIF4gYjsKICAgICB9OwotICAgIHJldHVybiBhYnNvbHV0ZUJpdHdpc2VP
cCh2bSwgeCwgeSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6Q29weSwgZGlnaXRPcGVyYXRpb24pOwor
ICAgIHJldHVybiBhYnNvbHV0ZUJpdHdpc2VPcChnbG9iYWxPYmplY3QsIHgsIHksIEV4dHJhRGln
aXRzSGFuZGxpbmc6OkNvcHksIGRpZ2l0T3BlcmF0aW9uKTsKIH0KICAgICAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBCaWdJbnRJbXBsPgogSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUFkZE9uZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsIHgsIFNpZ25PcHRpb24gc2ln
bk9wdGlvbikKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgdW5zaWduZWQgaW5wdXRMZW5n
dGggPSB4Lmxlbmd0aCgpOwogICAgIC8vIFRoZSBhZGRpdGlvbiB3aWxsIG92ZXJmbG93IGludG8g
YSBuZXcgZGlnaXQgaWYgYWxsIGV4aXN0aW5nIGRpZ2l0cyBhcmUKICAgICAvLyBhdCBtYXhpbXVt
LgpAQCAtMTgxMiw5ICsxOTI2LDggQEAgSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUFkZE9u
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsIHgsIFMKICAgICB9CiAK
ICAgICB1bnNpZ25lZCByZXN1bHRMZW5ndGggPSBpbnB1dExlbmd0aCArIHdpbGxPdmVyZmxvdzsK
LSAgICBKU0JpZ0ludCogcmVzdWx0ID0gdHJ5Q3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3Qs
IHJlc3VsdExlbmd0aCk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRy
OworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwg
cmVzdWx0TGVuZ3RoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsK
IAogICAgIERpZ2l0IGNhcnJ5ID0gMTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5w
dXRMZW5ndGg7IGkrKykgewpAQCAtMTgyOCw3ICsxOTQxLDcgQEAgSlNCaWdJbnQqIEpTQmlnSW50
OjphYnNvbHV0ZUFkZE9uZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBs
IHgsIFMKICAgICAgICAgQVNTRVJUKCFjYXJyeSk7CiAKICAgICByZXN1bHQtPnNldFNpZ24oc2ln
bk9wdGlvbiA9PSBTaWduT3B0aW9uOjpTaWduZWQpOwotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0
VHJpbShnbG9iYWxPYmplY3QtPnZtKCkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
cmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBCaWdJbnRJbXBsPgpAQCAtMTgzOSw3ICsxOTUyLDcgQEAgSlNCaWdJbnQqIEpTQmlnSW50Ojph
YnNvbHV0ZVN1Yk9uZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsIHgs
IHUKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNCaWdJbnQqIHJlc3VsdCA9IHRyeUNyZWF0
ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgpOworICAgIEpTQmlnSW50KiBy
ZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHgubGVuZ3RoKCk7CkBAIC0xODUzLDcgKzE5NjYsNyBAQCBKU0JpZ0ludCogSlNCaWdJ
bnQ6OmFic29sdXRlU3ViT25lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludElt
cGwgeCwgdQogICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaSA8IHJlc3VsdExlbmd0aDsg
aSsrKQogICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIGJvcnJvdyk7CiAKLSAgICByZXR1cm4g
cmVzdWx0LT5yaWdodFRyaW0odm0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVz
dWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBC
aWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CkBAIC0xODc5LDcgKzE5OTIsNyBAQCBK
U0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6bGVmdFNoaWZ0QnlBYnNvbHV0ZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAK
LSAgICBKU0JpZ0ludCogcmVzdWx0ID0gdHJ5Q3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3Qs
IHJlc3VsdExlbmd0aCk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGgo
Z2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIG51bGxwdHIpOwogICAgIGlmICghYml0c1NoaWZ0KSB7CiAgICAgICAgIHVuc2lnbmVkIGkg
PSAwOwpAQCAtMTkwNiwyNSArMjAxOSwyNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0lu
dDo6bGVmdFNoaWZ0QnlBYnNvbHV0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAg
IH0KIAogICAgIHJlc3VsdC0+c2V0U2lnbih4LnNpZ24oKSk7Ci0gICAgcmV0dXJuIHJlc3VsdC0+
cmlnaHRUcmltKHZtKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdC0+cmln
aHRUcmltKGdsb2JhbE9iamVjdCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1w
bDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgogSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6
OnJpZ2h0U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0lu
dEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHgubGVuZ3RoKCk7CiAgICAgYm9vbCBzaWduID0geC5zaWduKCk7CiAg
ICAgYXV0byBvcHRpb25hbFNoaWZ0ID0gdG9TaGlmdEFtb3VudCh5KTsKICAgICBpZiAoIW9wdGlv
bmFsU2hpZnQpCi0gICAgICAgIHJldHVybiByaWdodFNoaWZ0QnlNYXhpbXVtKHZtLCBzaWduKTsK
KyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByaWdodFNoaWZ0QnlNYXhpbXVtKGds
b2JhbE9iamVjdCwgc2lnbikpOwogCiAgICAgRGlnaXQgc2hpZnQgPSAqb3B0aW9uYWxTaGlmdDsK
ICAgICB1bnNpZ25lZCBkaWdpdGFsU2hpZnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2hpZnQg
LyBkaWdpdEJpdHMpOwogICAgIHVuc2lnbmVkIGJpdHNTaGlmdCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzaGlmdCAlIGRpZ2l0Qml0cyk7CiAgICAgaW50IHJlc3VsdExlbmd0aCA9IGxlbmd0aCAt
IGRpZ2l0YWxTaGlmdDsKICAgICBpZiAocmVzdWx0TGVuZ3RoIDw9IDApCi0gICAgICAgIHJldHVy
biByaWdodFNoaWZ0QnlNYXhpbXVtKHZtLCBzaWduKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCByaWdodFNoaWZ0QnlNYXhpbXVtKGdsb2JhbE9iamVjdCwgc2lnbikpOwogCiAg
ICAgLy8gRm9yIG5lZ2F0aXZlIG51bWJlcnMsIHJvdW5kIGRvd24gaWYgYW55IGJpdCB3YXMgc2hp
ZnRlZCBvdXQgKHNvIHRoYXQgZS5nLgogICAgIC8vIC01biA+PiAxbiA9PSAtM24gYW5kIG5vdCAt
Mm4pLiBDaGVjayBub3cgd2hldGhlciB0aGlzIHdpbGwgaGFwcGVuIGFuZApAQCAtMTk1NSw3ICsy
MDcwLDkgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeUFic29s
dXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QKICAgICB9CiAKICAgICBBU1NFUlQoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdExlbmd0aCkgPD0gbGVuZ3RoKTsKLSAgICBKU0JpZ0lu
dCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHJlc3VsdExlbmd0aCkpOworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRo
TGVuZ3RoKGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdExlbmd0aCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCiAgICAgaWYgKCFi
aXRzU2hpZnQpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGlnaXRhbFNoaWZ0OyBpIDwg
bGVuZ3RoOyBpKyspCiAgICAgICAgICAgICByZXN1bHQtPnNldERpZ2l0KGkgLSBkaWdpdGFsU2hp
ZnQsIHguZGlnaXQoaSkpOwpAQCAtMTk3NSwyMCArMjA5MiwyMSBAQCBKU0JpZ0ludDo6SW1wbFJl
c3VsdCBKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5QWJzb2x1dGUoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdAogICAgICAgICBpZiAobXVzdFJvdW5kRG93bikgewogICAgICAgICAgICAgLy8gU2lu
Y2UgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgcm91bmRpbmcgZG93biBtZWFucyBhZGRpbmcgb25l
IHRvCiAgICAgICAgICAgICAvLyBpdHMgYWJzb2x1dGUgdmFsdWUuIFRoaXMgY2Fubm90IG92ZXJm
bG93LgotICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5yaWdodFRyaW0odm0pOwotICAgICAg
ICAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwg
eyByZXN1bHQgfSwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHJl
c3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3Vs
dCB9LCBTaWduT3B0aW9uOjpTaWduZWQpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVy
biByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBy
ZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0KIAotSlNCaWdJbnQ6OkltcGxSZXN1
bHQgSlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeU1heGltdW0oVk0mIHZtLCBib29sIHNpZ24pCitKU0Jp
Z0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5TWF4aW11bShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBib29sIHNpZ24pCiB7CiAgICAgaWYgKHNpZ24pCi0gICAgICAg
IHJldHVybiBjcmVhdGVGcm9tKHZtLCAtMSk7CisgICAgICAgIHJldHVybiBjcmVhdGVGcm9tKGds
b2JhbE9iamVjdCwgLTEpOwogCi0gICAgcmV0dXJuIGNyZWF0ZVplcm8odm0pOworICAgIHJldHVy
biBjcmVhdGVaZXJvKGdsb2JhbE9iamVjdCk7CiB9CiAKIC8vIExvb2t1cCB0YWJsZSBmb3IgdGhl
IG1heGltdW0gbnVtYmVyIG9mIGJpdHMgcmVxdWlyZWQgcGVyIGNoYXJhY3RlciBvZiBhCkBAIC0y
MDM0LDcgKzIxNTIsNyBAQCB1aW50NjRfdCBKU0JpZ0ludDo6Y2FsY3VsYXRlTWF4aW11bUNoYXJh
Y3RlcnNSZXF1aXJlZCh1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkCiAgICAgcmV0dXJuIG1heGlt
dW1DaGFyYWN0ZXJzUmVxdWlyZWQ7CiB9CiAKLVN0cmluZyBKU0JpZ0ludDo6dG9TdHJpbmdCYXNl
UG93ZXJPZlR3byhWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50
KiB4LCB1bnNpZ25lZCByYWRpeCkKK1N0cmluZyBKU0JpZ0ludDo6dG9TdHJpbmdCYXNlUG93ZXJP
ZlR3byhWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIEpT
QmlnSW50KiB4LCB1bnNpZ25lZCByYWRpeCkKIHsKICAgICBBU1NFUlQoaGFzT25lQml0U2V0KHJh
ZGl4KSk7CiAgICAgQVNTRVJUKHJhZGl4ID49IDIgJiYgcmFkaXggPD0gMzIpOwpAQCAtMjA1NCw5
ICsyMTcyLDkgQEAgU3RyaW5nIEpTQmlnSW50Ojp0b1N0cmluZ0Jhc2VQb3dlck9mVHdvKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlMKICAgICBjb25zdCBzaXplX3QgY2hh
cnNSZXF1aXJlZCA9IChiaXRMZW5ndGggKyBiaXRzUGVyQ2hhciAtIDEpIC8gYml0c1BlckNoYXIg
KyBzaWduOwogCiAgICAgaWYgKGNoYXJzUmVxdWlyZWQgPiBKU1N0cmluZzo6TWF4TGVuZ3RoKSB7
Ci0gICAgICAgIGlmIChnbG9iYWxPYmplY3QpIHsKKyAgICAgICAgaWYgKG51bGxPckdsb2JhbE9i
amVjdEZvck9PTSkgewogICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUpOyAgICAgICAgICAgIAorICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKG51
bGxPckdsb2JhbE9iamVjdEZvck9PTSwgc2NvcGUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKICAgICB9CkBAIC0yMDk2LDcgKzIyMTQsNyBAQCBTdHJpbmcgSlNCaWdJbnQ6
OnRvU3RyaW5nQmFzZVBvd2VyT2ZUd28oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKUwogICAgIHJldHVybiBTdHJpbmdJbXBsOjphZG9wdChXVEZNb3ZlKHJlc3VsdFN0cmlu
ZykpOwogfQogCi1TdHJpbmcgSlNCaWdJbnQ6OnRvU3RyaW5nR2VuZXJpYyhWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCB1bnNpZ25lZCByYWRpeCkKK1N0
cmluZyBKU0JpZ0ludDo6dG9TdHJpbmdHZW5lcmljKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIG51
bGxPckdsb2JhbE9iamVjdEZvck9PTSwgSlNCaWdJbnQqIHgsIHVuc2lnbmVkIHJhZGl4KQogewog
ICAgIC8vIEZJWE1FOiBbSlNDXSBSZXZpc2l0IHVzYWdlIG9mIFZlY3RvciBpbnRvIEpTQmlnSW50
Ojp0b1N0cmluZwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xODA2NzEKQEAgLTIxMTIsOSArMjIzMCw5IEBAIFN0cmluZyBKU0JpZ0ludDo6dG9TdHJpbmdH
ZW5lcmljKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqCiAg
ICAgdWludDY0X3QgbWF4aW11bUNoYXJhY3RlcnNSZXF1aXJlZCA9IGNhbGN1bGF0ZU1heGltdW1D
aGFyYWN0ZXJzUmVxdWlyZWQobGVuZ3RoLCByYWRpeCwgeC0+ZGlnaXQobGVuZ3RoIC0gMSksIHNp
Z24pOwogCiAgICAgaWYgKG1heGltdW1DaGFyYWN0ZXJzUmVxdWlyZWQgPiBKU1N0cmluZzo6TWF4
TGVuZ3RoKSB7Ci0gICAgICAgIGlmIChnbG9iYWxPYmplY3QpIHsKKyAgICAgICAgaWYgKG51bGxP
ckdsb2JhbE9iamVjdEZvck9PTSkgewogICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUpOyAgICAgICAgICAgIAorICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9y
eUVycm9yKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgc2NvcGUpOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CkBAIC0yMTQwLDcgKzIyNTgsOSBAQCBTdHJpbmcg
SlNCaWdJbnQ6OnRvU3RyaW5nR2VuZXJpYyhWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQmlnSW50KgogICAgICAgICBKU0JpZ0ludCoqIGRpdmlkZW5kID0gJng7CiAgICAg
ICAgIGRvIHsKICAgICAgICAgICAgIERpZ2l0IGNodW5rOwotICAgICAgICAgICAgYWJzb2x1dGVE
aXZXaXRoRGlnaXREaXZpc29yKHZtLCBIZWFwQmlnSW50SW1wbCB7ICpkaXZpZGVuZCB9LCBjaHVu
a0Rpdmlzb3IsICZyZXN0LCBjaHVuayk7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBhYnNv
bHV0ZURpdldpdGhEaWdpdERpdmlzb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCB2bSwgSGVh
cEJpZ0ludEltcGwgeyAqZGl2aWRlbmQgfSwgY2h1bmtEaXZpc29yLCAmcmVzdCwgY2h1bmspOwor
ICAgICAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKICAgICAgICAgICAgIGRpdmlkZW5kID0gJnJlc3Q7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgY2h1bmtDaGFyczsgaSsrKSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0
U3RyaW5nLmFwcGVuZChyYWRpeERpZ2l0c1tjaHVuayAlIHJhZGl4XSk7CkBAIC0yMTgxLDggKzIz
MDEsMTAgQEAgU3RyaW5nIEpTQmlnSW50Ojp0b1N0cmluZ0dlbmVyaWMoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCoKICAgICByZXR1cm4gU3RyaW5nSW1wbDo6
YWRvcHQoV1RGTW92ZShyZXN1bHRTdHJpbmcpKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50Ojpy
aWdodFRyaW0oVk0mIHZtKQorSlNCaWdJbnQqIEpTQmlnSW50OjpyaWdodFRyaW0oSlNHbG9iYWxP
YmplY3QqIG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgVk0mIHZtKQogeworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChpc1plcm8oKSkgewogICAg
ICAgICBBU1NFUlQoIXNpZ24oKSk7CiAgICAgICAgIHJldHVybiB0aGlzOwpAQCAtMjE5MywyMiAr
MjMxNSwzNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OnJpZ2h0VHJpbShWTSYgdm0pCiAgICAgICAg
IG5vblplcm9JbmRleC0tOwogCiAgICAgaWYgKG5vblplcm9JbmRleCA8IDApCi0gICAgICAgIHJl
dHVybiBjcmVhdGVaZXJvKHZtKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBj
cmVhdGVaZXJvKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgdm0pKTsKIAogICAgIGlmIChub25a
ZXJvSW5kZXggPT0gc3RhdGljX2Nhc3Q8aW50PihtX2xlbmd0aCAtIDEpKQogICAgICAgICByZXR1
cm4gdGhpczsKIAogICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9IG5vblplcm9JbmRleCArIDE7Ci0g
ICAgSlNCaWdJbnQqIHRyaW1tZWRCaWdJbnQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZt
LCBuZXdMZW5ndGgpOwotICAgIHN0ZDo6Y29weShkYXRhU3RvcmFnZSgpLCBkYXRhU3RvcmFnZSgp
ICsgbmV3TGVuZ3RoLCB0cmltbWVkQmlnSW50LT5kYXRhU3RvcmFnZSgpKTsgCisgICAgSlNCaWdJ
bnQqIHRyaW1tZWRCaWdJbnQgPSBudWxscHRyOworICAgIGlmIChudWxsT3JHbG9iYWxPYmplY3RG
b3JPT00pIHsKKyAgICAgICAgdHJpbW1lZEJpZ0ludCA9IGNyZWF0ZVdpdGhMZW5ndGgobnVsbE9y
R2xvYmFsT2JqZWN0Rm9yT09NLCBuZXdMZW5ndGgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBudWxscHRyKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0cmltbWVkQmlnSW50
ID0gdHJ5Q3JlYXRlV2l0aExlbmd0aCh2bSwgbmV3TGVuZ3RoKTsKKyAgICAgICAgaWYgKFVOTElL
RUxZKCF0cmltbWVkQmlnSW50KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KyAgICBzdGQ6OmNvcHkoZGF0YVN0b3JhZ2UoKSwgZGF0YVN0b3JhZ2UoKSArIG5ld0xlbmd0aCwg
dHJpbW1lZEJpZ0ludC0+ZGF0YVN0b3JhZ2UoKSk7CiAKICAgICB0cmltbWVkQmlnSW50LT5zZXRT
aWduKHRoaXMtPnNpZ24oKSk7CiAKICAgICByZXR1cm4gdHJpbW1lZEJpZ0ludDsKIH0KIAotSlNC
aWdJbnQqIEpTQmlnSW50OjphbGxvY2F0ZUZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBWTSYgdm0sIHVuc2lnbmVkIHJhZGl4LCB1bnNpZ25lZCBjaGFyY291bnQpCitKU0JpZ0ludCog
SlNCaWdJbnQ6OnJpZ2h0VHJpbShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAg
IHJldHVybiByaWdodFRyaW0oZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPnZtKCkpOworfQor
CitKU0JpZ0ludCogSlNCaWdJbnQ6OmFsbG9jYXRlRm9yKEpTR2xvYmFsT2JqZWN0KiBudWxsT3JH
bG9iYWxPYmplY3RGb3JPT00sIFZNJiB2bSwgdW5zaWduZWQgcmFkaXgsIHVuc2lnbmVkIGNoYXJj
b3VudCkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAg
ICBBU1NFUlQoMiA8PSByYWRpeCAmJiByYWRpeCA8PSAzNik7CiAKICAgICBzaXplX3QgYml0c1Bl
ckNoYXIgPSBtYXhCaXRzUGVyQ2hhclRhYmxlW3JhZGl4XTsKQEAgLTIyMjIsMTcgKzIzNTksMTQg
QEAgSlNCaWdJbnQqIEpTQmlnSW50OjphbGxvY2F0ZUZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBWTSYgdm0sIHVuc2lnbmVkIHIKICAgICAgICAgaWYgKGJpdHNNaW4gPD0gc3RhdGlj
X2Nhc3Q8c2l6ZV90PihtYXhJbnQpKSB7CiAgICAgICAgICAgICAvLyBEaXZpZGUgYnkga0RpZ2l0
c0JpdHMsIHJvdW5kaW5nIHVwLgogICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gKGJpdHNN
aW4gKyBkaWdpdEJpdHMgLSAxKSAvIGRpZ2l0Qml0czsKLSAgICAgICAgICAgIGlmIChsZW5ndGgg
PD0gbWF4TGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmln
SW50OjpjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCBsZW5ndGgpOwotICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGVuZ3Ro
IDw9IG1heExlbmd0aCkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IGNyZWF0ZVdpdGhMZW5ndGgobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCB2bSwgbGVuZ3RoKSk7
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZ2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgdGhyb3dPdXRPZk1l
bW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJCaWdJbnQgZ2VuZXJhdGVkIGZyb20gdGhp
cyBvcGVyYXRpb24gaXMgdG9vIGJpZyJfcyk7Ci0gICAgfQorICAgIGlmIChudWxsT3JHbG9iYWxP
YmplY3RGb3JPT00pCisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihudWxsT3JHbG9iYWxP
YmplY3RGb3JPT00sIHNjb3BlLCAiQmlnSW50IGdlbmVyYXRlZCBmcm9tIHRoaXMgb3BlcmF0aW9u
IGlzIHRvbyBiaWciX3MpOworCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAgLTIyOTAsNyAr
MjQyNCw3IEBAIEpTVmFsdWUgSlNCaWdJbnQ6OnBhcnNlSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENoYXJUeXBlKiAgZGF0YSwgdW5zaWduCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDaGFyVHlwZT4KLUpTVmFsdWUgSlNCaWdJbnQ6OnBhcnNlSW50KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFZNJiB2bSwgQ2hhclR5cGUqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5z
aWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgcmFkaXgsIEVycm9yUGFyc2VNb2RlIGVycm9yUGFy
c2VNb2RlLCBQYXJzZUludFNpZ24gc2lnbiwgUGFyc2VJbnRNb2RlIHBhcnNlTW9kZSkKK0pTVmFs
dWUgSlNCaWdJbnQ6OnBhcnNlSW50KEpTR2xvYmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmplY3RG
b3JPT00sIFZNJiB2bSwgQ2hhclR5cGUqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQg
c3RhcnRJbmRleCwgdW5zaWduZWQgcmFkaXgsIEVycm9yUGFyc2VNb2RlIGVycm9yUGFyc2VNb2Rl
LCBQYXJzZUludFNpZ24gc2lnbiwgUGFyc2VJbnRNb2RlIHBhcnNlTW9kZSkKIHsKICAgICBBU1NF
UlQobGVuZ3RoID49IDApOwogICAgIHVuc2lnbmVkIHAgPSBzdGFydEluZGV4OwpAQCAtMjI5OCw5
ICsyNDMyLDkgQEAgSlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVk0mIHZtLCBDaGFyVHlwZSogZGF0YSwKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAocGFyc2VNb2RlICE9IFBhcnNlSW50TW9k
ZTo6QWxsb3dFbXB0eVN0cmluZyAmJiBzdGFydEluZGV4ID09IGxlbmd0aCkgewotICAgICAgICBB
U1NFUlQoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgQVNTRVJUKG51bGxPckdsb2JhbE9iamVjdEZv
ck9PTSk7CiAgICAgICAgIGlmIChlcnJvclBhcnNlTW9kZSA9PSBFcnJvclBhcnNlTW9kZTo6VGhy
b3dFeGNlcHRpb25zKQotICAgICAgICAgICAgdGhyb3dWTUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsIGNyZWF0ZVN5bnRheEVycm9yKGdsb2JhbE9iamVjdCwgIkZhaWxlZCB0byBwYXJzZSBTdHJp
bmcgdG8gQmlnSW50IikpOworICAgICAgICAgICAgdGhyb3dWTUVycm9yKG51bGxPckdsb2JhbE9i
amVjdEZvck9PTSwgc2NvcGUsIGNyZWF0ZVN5bnRheEVycm9yKG51bGxPckdsb2JhbE9iamVjdEZv
ck9PTSwgIkZhaWxlZCB0byBwYXJzZSBTdHJpbmcgdG8gQmlnSW50IikpOwogICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOwogICAgIH0KIApAQCAtMjMxOSw3ICsyNDUzLDcgQEAgSlNWYWx1ZSBKU0Jp
Z0ludDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBDaGFy
VHlwZSogZGF0YSwKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgICAgIHJldHVybiBqc0JpZ0ludDMy
KDApOwogI2Vsc2UKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8odm0pOworICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIGNyZWF0ZVplcm8obnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09N
LCB2bSkpOwogI2VuZGlmCiAgICAgfQogCkBAIC0yNDE0LDggKzI1NDgsOCBAQCBKU1ZhbHVlIEpT
QmlnSW50OjpwYXJzZUludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIENo
YXJUeXBlKiBkYXRhLAogICAgICAgICAgICAgICAgIGRpZ2l0ICs9IHN0YXRpY19jYXN0PHVpbnQ2
NF90PihkYXRhW3BdIC0gJ0EnICsgMTApOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAgICAgaWYgKGVycm9yUGFyc2VNb2RlID09IEVycm9yUGFyc2VNb2RlOjpUaHJvd0V4Y2VwdGlv
bnMpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGdsb2JhbE9iamVjdCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHRocm93Vk1FcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVTeW50
YXhFcnJvcihnbG9iYWxPYmplY3QsICJGYWlsZWQgdG8gcGFyc2UgU3RyaW5nIHRvIEJpZ0ludCIp
KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSk7
CisgICAgICAgICAgICAgICAgICAgIHRocm93Vk1FcnJvcihudWxsT3JHbG9iYWxPYmplY3RGb3JP
T00sIHNjb3BlLCBjcmVhdGVTeW50YXhFcnJvcihudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sICJG
YWlsZWQgdG8gcGFyc2UgU3RyaW5nIHRvIEJpZ0ludCIpKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgICAgIH0KQEAgLTI0MzMs
MTIgKzI1NjcsMTMgQEAgSlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgVk0mIHZtLCBDaGFyVHlwZSogZGF0YSwKICNpZiBVU0UoQklHSU5UMzIp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KG1heWJlUmVzdWx0KSk7CiAjZWxzZQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNC
aWdJbnQ6OmNyZWF0ZUZyb20odm0sIHN0YXRpY19jYXN0PGludDMyX3Q+KG1heWJlUmVzdWx0KSk7
CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNCaWdJbnQ6
OmNyZWF0ZUZyb20obnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBzdGF0aWNfY2FzdDxpbnQzMl90
PihtYXliZVJlc3VsdCkpKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGhlYXBSZXN1bHQgPSBhbGxvY2F0ZUZvcihnbG9iYWxPYmplY3QsIHZt
LCByYWRpeCwgaW5pdGlhbExlbmd0aCk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBKU1ZhbHVlKCkpOworICAgICAgICAgICAgaGVhcFJlc3VsdCA9IGFsbG9jYXRlRm9y
KG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgdm0sIHJhZGl4LCBpbml0aWFsTGVuZ3RoKTsKKyAg
ICAgICAgICAgIGlmIChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00pCisgICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIC8vIHJl
c3VsdCBjYW4gc3RpbGwgYmUgbnVsbCBpZiB3ZSBkb24ndCBoYXZlIGFjY2VzcyB0byBnbG9iYWwg
b2JqZWN0LCBhcyBhbGxvY2F0ZUZvciBjYW5ub3QgdGhyb3cgYW4gZXhjZXB0aW9uIGluIHRoYXQg
Y2FzZS4KICAgICAgICAgICAgIGlmICghaGVhcFJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOwpAQCAtMjQ1MSw3ICsyNTg2LDcgQEAgSlNWYWx1ZSBKU0JpZ0ludDo6cGFy
c2VJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBDaGFyVHlwZSogZGF0
YSwKICAgICB9CiAKICAgICBoZWFwUmVzdWx0LT5zZXRTaWduKHNpZ24gPT0gUGFyc2VJbnRTaWdu
OjpTaWduZWQpOwotICAgIHJldHVybiBoZWFwUmVzdWx0LT5yaWdodFRyaW0odm0pOworICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgaGVhcFJlc3VsdC0+cmlnaHRUcmltKG51bGxPckdsb2Jh
bE9iamVjdEZvck9PTSwgdm0pKTsKIH0KIAogSlNPYmplY3QqIEpTQmlnSW50Ojp0b09iamVjdChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdApAQCAtMjczOCwxMSArMjg3MywxMiBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpT
QmlnSW50Ojphc0ludE5JbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF90
IG4sIEJpZ0ludEltcGwgYmlnSW50KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAo
YmlnSW50LmlzWmVybygpKQogICAgICAgICByZXR1cm4gYmlnSW50OwogICAgIGlmIChuID09IDAp
Ci0gICAgICAgIHJldHVybiB6ZXJvSW1wbCh2bSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgemVyb0ltcGwoZ2xvYmFsT2JqZWN0KSk7CiAKICAgICB1aW50NjRfdCBuZWVkZWRM
ZW5ndGggPSAobiArIGRpZ2l0Qml0cyAtIDEpIC8gZGlnaXRCaXRzOwogICAgIHVpbnQ2NF90IGxl
bmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihiaWdJbnQubGVuZ3RoKCkpOwpAQCAtMjc2Niwy
MyArMjkwMiwyMyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YXNJbnROSW1wbChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfdAogICAgIEFTU0VSVChuIDw9IElO
VDMyX01BWCk7CiAgICAgaW50MzJfdCBOID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4obik7CiAgICAg
aWYgKCFoYXNCaXQpCi0gICAgICAgIHJldHVybiB0cnVuY2F0ZVRvTkJpdHModm0sIE4sIGJpZ0lu
dCk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdHJ1bmNhdGVUb05CaXRzKGds
b2JhbE9iamVjdCwgTiwgYmlnSW50KSk7CiAgICAgaWYgKCFiaWdJbnQuc2lnbigpKQotICAgICAg
ICByZXR1cm4gdHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byh2bSwgTiwgYmlnSW50LCB0cnVl
KTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB0cnVuY2F0ZUFuZFN1YkZyb21Q
b3dlck9mVHdvKGdsb2JhbE9iamVjdCwgTiwgYmlnSW50LCB0cnVlKSk7CiAKICAgICAvLyBOZWdh
dGl2ZSBudW1iZXJzIG11c3Qgc3VidHJhY3QgZnJvbSAyXm4sIGV4Y2VwdCBmb3IgdGhlIHNwZWNp
YWwgY2FzZQogICAgIC8vIGRlc2NyaWJlZCBhYm92ZS4KICAgICBpZiAoKHRvcERpZ2l0ICYgKGNv
bXBhcmVEaWdpdCAtIDEpKSA9PSAwKSB7CiAgICAgICAgIGZvciAoaW50MzJfdCBpID0gc3RhdGlj
X2Nhc3Q8aW50MzJfdD4obmVlZGVkTGVuZ3RoKSAtIDI7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAg
ICAgICBpZiAoYmlnSW50LmRpZ2l0KGkpICE9IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRy
dW5jYXRlQW5kU3ViRnJvbVBvd2VyT2ZUd28odm0sIE4sIGJpZ0ludCwgZmFsc2UpOworICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdHJ1bmNhdGVBbmRTdWJGcm9tUG93
ZXJPZlR3byhnbG9iYWxPYmplY3QsIE4sIGJpZ0ludCwgZmFsc2UpKTsKICAgICAgICAgfQogICAg
ICAgICAvLyBUcnVuY2F0aW9uIGlzIG5vLW9wIGlmIGJpZ0ludCA9PSAtMl4obi0xKS4KICAgICAg
ICAgaWYgKGxlbmd0aCA9PSBuZWVkZWRMZW5ndGggJiYgdG9wRGlnaXQgPT0gY29tcGFyZURpZ2l0
KQogICAgICAgICAgICAgcmV0dXJuIGJpZ0ludDsKLSAgICAgICAgcmV0dXJuIHRydW5jYXRlVG9O
Qml0cyh2bSwgTiwgYmlnSW50KTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB0
cnVuY2F0ZVRvTkJpdHMoZ2xvYmFsT2JqZWN0LCBOLCBiaWdJbnQpKTsKICAgICB9Ci0gICAgcmV0
dXJuIHRydW5jYXRlQW5kU3ViRnJvbVBvd2VyT2ZUd28odm0sIE4sIGJpZ0ludCwgZmFsc2UpOwor
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3
byhnbG9iYWxPYmplY3QsIE4sIGJpZ0ludCwgZmFsc2UpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVu
YW1lIEJpZ0ludEltcGw+CkBAIC0yNzk0LDcgKzI5MzAsNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3Vs
dCBKU0JpZ0ludDo6YXNVaW50TkltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWlu
dDY0XwogICAgIGlmIChiaWdJbnQuaXNaZXJvKCkpCiAgICAgICAgIHJldHVybiBiaWdJbnQ7CiAg
ICAgaWYgKG4gPT0gMCkKLSAgICAgICAgcmV0dXJuIHplcm9JbXBsKHZtKTsKKyAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB6ZXJvSW1wbChnbG9iYWxPYmplY3QpKTsKIAogICAgIC8v
IElmIGJpZ0ludCBpcyBuZWdhdGl2ZSwgc2ltdWxhdGUgdHdvJ3MgY29tcGxlbWVudCByZXByZXNl
bnRhdGlvbi4KICAgICBpZiAoYmlnSW50LnNpZ24oKSkgewpAQCAtMjgwMiw3ICsyOTM4LDcgQEAg
SlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFzVWludE5JbXBsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF8KICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQmlnSW50IGdlbmVyYXRlZCBmcm9tIHRoaXMgb3BlcmF0
aW9uIGlzIHRvbyBiaWciX3MpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHRydW5jYXRlQW5kU3ViRnJvbVBvd2VyT2ZUd28odm0sIHN0YXRp
Y19jYXN0PGludDMyX3Q+KG4pLCBiaWdJbnQsIGZhbHNlKTsKKyAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCB0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKGdsb2JhbE9iamVjdCwg
c3RhdGljX2Nhc3Q8aW50MzJfdD4obiksIGJpZ0ludCwgZmFsc2UpKTsKICAgICB9CiAKICAgICAv
LyBJZiBiaWdJbnQgaXMgcG9zaXRpdmUgYW5kIGhhcyB1cCB0byBuIGJpdHMsIHJldHVybiBpdCBk
aXJlY3RseS4KQEAgLTI4MjQsMTggKzI5NjAsMjIgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNC
aWdJbnQ6OmFzVWludE5JbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF8K
IAogICAgIC8vIE90aGVyd2lzZSwgdHJ1bmNhdGUuCiAgICAgQVNTRVJUKG4gPD0gSU5UMzJfTUFY
KTsKLSAgICByZXR1cm4gdHJ1bmNhdGVUb05CaXRzKHZtLCBzdGF0aWNfY2FzdDxpbnQzMl90Pihu
KSwgYmlnSW50KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHRydW5jYXRlVG9OQml0
cyhnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PGludDMyX3Q+KG4pLCBiaWdJbnQpKTsKIH0KIAog
dGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci1KU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0Jp
Z0ludDo6dHJ1bmNhdGVUb05CaXRzKFZNJiB2bSwgaW50MzJfdCBuLCBCaWdJbnRJbXBsIGJpZ0lu
dCkKK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojp0cnVuY2F0ZVRvTkJpdHMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBuLCBCaWdJbnRJbXBsIGJpZ0ludCkKIHsK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgQVNTRVJUKG4gIT0gMCk7CiAgICAgQVNTRVJUKGJp
Z0ludC5sZW5ndGgoKSA+IG4gLyBkaWdpdEJpdHMpOwogCiAgICAgaW50MzJfdCBuZWVkZWREaWdp
dHMgPSAobiArIChkaWdpdEJpdHMgLSAxKSkgLyBkaWdpdEJpdHM7CiAgICAgQVNTRVJUKG5lZWRl
ZERpZ2l0cyA8PSBzdGF0aWNfY2FzdDxpbnQzMl90PihiaWdJbnQubGVuZ3RoKCkpKTsKLSAgICBK
U0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgbmVlZGVkRGln
aXRzKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmpl
Y3QsIG5lZWRlZERpZ2l0cyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0
cik7CiAgICAgQVNTRVJUKHJlc3VsdCk7CiAKICAgICAvLyBDb3B5IGFsbCBkaWdpdHMgZXhjZXB0
IHRoZSBNU0QuCkBAIC0yODUxLDE5ICsyOTkxLDIzIEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpT
QmlnSW50Ojp0cnVuY2F0ZVRvTkJpdHMoVk0mIHZtLCBpbnQzMl90IG4sIEJpZ0ludEltcGwgYmln
CiAgICAgfQogICAgIHJlc3VsdC0+c2V0RGlnaXQobGFzdCwgbXNkKTsKICAgICByZXN1bHQtPnNl
dFNpZ24oYmlnSW50LnNpZ24oKSk7Ci0gICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9i
amVjdCkpOwogfQogCiAvLyBTdWJ0cmFjdHMgdGhlIGxlYXN0IHNpZ25pZmljYW50IG4gYml0cyBv
ZiBhYnMoYmlnSW50KSBmcm9tIDJebi4KIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgot
SlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnRydW5jYXRlQW5kU3ViRnJvbVBvd2VyT2ZU
d28oVk0mIHZtLCBpbnQzMl90IG4sIEJpZ0ludEltcGwgYmlnSW50LCBib29sIHJlc3VsdFNpZ24p
CitKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6dHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJP
ZlR3byhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IG4sIEJpZ0ludEltcGwg
YmlnSW50LCBib29sIHJlc3VsdFNpZ24pCiB7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEFT
U0VSVChuICE9IDApOwogICAgIEFTU0VSVChuIDw9IHN0YXRpY19jYXN0PGludDMyX3Q+KG1heExl
bmd0aEJpdHMpKTsKIAogICAgIGludDMyX3QgbmVlZGVkRGlnaXRzID0gKG4gKyAoZGlnaXRCaXRz
IC0gMSkpIC8gZGlnaXRCaXRzOwogICAgIEFTU0VSVChuZWVkZWREaWdpdHMgPD0gc3RhdGljX2Nh
c3Q8aW50MzJfdD4obWF4TGVuZ3RoKSk7IC8vIEZvbGxvd3MgZnJvbSBuIDw9IG1heExlbmd0aEJp
dHMuCi0gICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0s
IG5lZWRlZERpZ2l0cyk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGgo
Z2xvYmFsT2JqZWN0LCBuZWVkZWREaWdpdHMpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIG51bGxwdHIpOwogICAgIEFTU0VSVChyZXN1bHQpOwogCiAgICAgLy8gUHJvY2VzcyBhbGwg
ZGlnaXRzIGV4Y2VwdCB0aGUgTVNELgpAQCAtMjkxMCw3ICszMDU0LDcgQEAgSlNCaWdJbnQ6Oklt
cGxSZXN1bHQgSlNCaWdJbnQ6OnRydW5jYXRlQW5kU3ViRnJvbVBvd2VyT2ZUd28oVk0mIHZtLCBp
bnQzMl90IG4sIEIKICAgICB9CiAgICAgcmVzdWx0LT5zZXREaWdpdChsYXN0LCByZXN1bHRNU0Qp
OwogICAgIHJlc3VsdC0+c2V0U2lnbihyZXN1bHRTaWduKTsKLSAgICByZXR1cm4gcmVzdWx0LT5y
aWdodFRyaW0odm0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0LT5yaWdo
dFRyaW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIEpTVmFsdWUgSlNCaWdJbnQ6OmFzSW50TihKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfdCBuLCBKU0JpZ0ludCogYmlnSW50KQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKaW5kZXggNmJmOGFiMmE1Njcx
OWY0N2U2Yjc3YTgwOTgwMTdmNGFiZWZhZDM4Ny4uNWI4YjBmY2UxZTM0YmMxZTVmYzU0NmFhNWI0
NzI2YmJjOTg4MDQyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCaWdJbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5o
CkBAIC02NSwxNiArNjUsMTcgQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxs
IHsKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKiwgVk0mKTsKIAogICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNWYWx1ZSBwcm90b3R5cGUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0lu
dCogY3JlYXRlWmVybyhWTSYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0lu
dCogdHJ5Q3JlYXRlV2l0aExlbmd0aChKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIGxlbmd0aCk7
Ci0gICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKFZNJiwgdW5z
aWduZWQgbGVuZ3RoKTsKLQotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0ludCog
Y3JlYXRlRnJvbShWTSYsIGludDMyX3QgdmFsdWUpOwotICAgIHN0YXRpYyBKU0JpZ0ludCogY3Jl
YXRlRnJvbShWTSYsIHVpbnQzMl90IHZhbHVlKTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0
ZUZyb20oVk0mLCBpbnQ2NF90IHZhbHVlKTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZy
b20oVk0mLCB1aW50NjRfdCB2YWx1ZSk7Ci0gICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9t
KFZNJiwgYm9vbCB2YWx1ZSk7Ci0gICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKFZNJiwg
ZG91YmxlIHZhbHVlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNCaWdJbnQqIGNy
ZWF0ZVplcm8oSlNHbG9iYWxPYmplY3QqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
SlNCaWdJbnQqIHRyeUNyZWF0ZVdpdGhMZW5ndGgoVk0mLCB1bnNpZ25lZCBsZW5ndGgpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlV2l0aExlbmd0aChKU0ds
b2JhbE9iamVjdCosIHVuc2lnbmVkIGxlbmd0aCk7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90IHZhbHVl
KTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIHRyeUNyZWF0ZUZyb20oVk0mLCBpbnQzMl90IHZhbHVl
KTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqLCB1aW50
MzJfdCB2YWx1ZSk7CisgICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKEpTR2xvYmFsT2Jq
ZWN0KiwgaW50NjRfdCB2YWx1ZSk7CisgICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKEpT
R2xvYmFsT2JqZWN0KiwgdWludDY0X3QgdmFsdWUpOworICAgIHN0YXRpYyBKU0JpZ0ludCogY3Jl
YXRlRnJvbShKU0dsb2JhbE9iamVjdCosIGJvb2wgdmFsdWUpOworICAgIHN0YXRpYyBKU0JpZ0lu
dCogY3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCosIGRvdWJsZSB2YWx1ZSk7CiAKICAgICBzdGF0
aWMgc2l6ZV90IG9mZnNldE9mTGVuZ3RoKCkKICAgICB7CkBAIC05MCwyMSArOTEsMjEgQEAgY2xh
c3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAgIHVuc2lnbmVkIGxlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAKLSAgICBzdGF0aWMgSlNWYWx1ZSBtYWtl
SGVhcEJpZ0ludE9yQmlnSW50MzIoVk0mIHZtLCBpbnQ2NF90IHZhbHVlKQorICAgIHN0YXRpYyBK
U1ZhbHVlIG1ha2VIZWFwQmlnSW50T3JCaWdJbnQzMihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBpbnQ2NF90IHZhbHVlKQogICAgIHsKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgICAgIGlm
ICh2YWx1ZSA8PSBJTlRfTUFYICYmIHZhbHVlID49IElOVF9NSU4pCiAgICAgICAgICAgICByZXR1
cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90Pih2YWx1ZSkpOwogI2VuZGlmCi0gICAg
ICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgdmFsdWUpOworICAgICAgICByZXR1
cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIEpTVmFsdWUgbWFrZUhlYXBCaWdJbnRPckJpZ0ludDMyKFZNJiB2bSwgZG91Ymxl
IHZhbHVlKQorICAgIHN0YXRpYyBKU1ZhbHVlIG1ha2VIZWFwQmlnSW50T3JCaWdJbnQzMihKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBkb3VibGUgdmFsdWUpCiAgICAgewogICAgICAgICBB
U1NFUlQoaXNJbnRlZ2VyKHZhbHVlKSk7CiAgICAgICAgIGlmIChzdGQ6OmFicyh2YWx1ZSkgPD0g
bWF4U2FmZUludGVnZXIoKSkKLSAgICAgICAgICAgIHJldHVybiBtYWtlSGVhcEJpZ0ludE9yQmln
SW50MzIodm0sIHN0YXRpY19jYXN0PGludDY0X3Q+KHZhbHVlKSk7Ci0gICAgICAgIHJldHVybiBK
U0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VI
ZWFwQmlnSW50T3JCaWdJbnQzMihnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PGludDY0X3Q+KHZh
bHVlKSk7CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3Qs
IHZhbHVlKTsKICAgICB9CiAKICAgICBlbnVtIGNsYXNzIEVycm9yUGFyc2VNb2RlIHsKQEAgLTE1
OCwxNyArMTU5LDEzIEBAIGNsYXNzIEpTQmlnSW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAK
ICAgICBDb21wYXJpc29uUmVzdWx0IHN0YXRpYyBjb21wYXJlVG9Eb3VibGUoSlNCaWdJbnQqIHgs
IGRvdWJsZSB5KTsKIAotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTVmFsdWUgYXNJbnQzMk9y
SGVhcENlbGwoVk0mIHZtLCBpbnQ2NF90IHZhbHVlKQorICAgIEFMV0FZU19JTkxJTkUgc3RhdGlj
IEpTVmFsdWUgYXNJbnQzMk9ySGVhcENlbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
aW50NjRfdCB2YWx1ZSkKICAgICB7CiAjaWYgVVNFKEJJR0lOVDMyKQogICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8aW50NjRfdD4oc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSA9PSB2YWx1ZSkK
ICAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbHVl
KSk7CiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb20odm0sIHZhbHVlKTsKLSAgICB9
Ci0gICAgQUxXQVlTX0lOTElORSBzdGF0aWMgSlNWYWx1ZSBhc0ludDMyT3JIZWFwQ2VsbChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQ2NF90IHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGdsb2JhbE9iamVjdC0+dm0oKSwgdmFsdWUpOworICAg
ICAgICByZXR1cm4gY3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICB9CiAKIHBy
aXZhdGU6CkBAIC0xODQsNiArMTgxLDkgQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMg
SlNDZWxsIHsKICAgICAgICAgSlNWYWx1ZSBwYXlsb2FkOwogICAgIH07CiBwcml2YXRlOgorICAg
IHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlV2l0aExlbmd0aChKU0dsb2JhbE9iamVjdCosIFZNJiwg
dW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20oSlNHbG9i
YWxPYmplY3QqLCBWTSYsIHVpbnQzMl90IHZhbHVlKTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGNy
ZWF0ZVplcm8oSlNHbG9iYWxPYmplY3QqLCBWTSYpOwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KICAgICBzdGF0aWMgSW1wbFJlc3Vs
dCBleHBvbmVudGlhdGVJbXBsKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgYmFzZSwgQmln
SW50SW1wbDIgZXhwb25lbnQpOwpAQCAtMjEwLDcgKzIxMCw3IEBAIGNsYXNzIEpTQmlnSW50IGZp
bmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgc3RhdGljIEltcGxSZXN1bHQgcmVtYWluZGVySW1w
bChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOwogCiAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci0gICAgc3RhdGljIEltcGxSZXN1bHQgdW5h
cnlNaW51c0ltcGwoVk0mLCBCaWdJbnRJbXBsIHgpOworICAgIHN0YXRpYyBJbXBsUmVzdWx0IHVu
YXJ5TWludXNJbXBsKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbCB4KTsKIAogICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CiAgICAgc3Rh
dGljIEltcGxSZXN1bHQgYml0d2lzZUFuZEltcGwoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBs
MSB4LCBCaWdJbnRJbXBsMiB5KTsKQEAgLTI5NSw3ICsyOTUsNyBAQCBjbGFzcyBKU0JpZ0ludCBm
aW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHN0YXRpYyBKU1ZhbHVlIGRpdmlkZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSkKICAgICB7CiAgICAg
ICAgIGlmICgheSkgewotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKGdldFZNKGdsb2JhbE9iamVjdCkpOwogICAgICAgICAgICAgdGhyb3dSYW5n
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICIwIGlzIGFuIGludmFsaWQgZGl2aXNvciB2YWx1
ZS4iX3MpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgfQpAQCAtMzEw
LDcgKzMxMCw3IEBAIGNsYXNzIEpTQmlnSW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAg
c3RhdGljIEpTVmFsdWUgcmVtYWluZGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGlu
dDMyX3QgeCwgaW50MzJfdCB5KQogICAgIHsKICAgICAgICAgaWYgKCF5KSB7Ci0gICAgICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShnbG9iYWxPYmplY3QtPnZtKCkpOwor
ICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZ2V0Vk0oZ2xvYmFs
T2JqZWN0KSk7CiAgICAgICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgIjAgaXMgYW4gaW52YWxpZCBkaXZpc29yIHZhbHVlLiJfcyk7CiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CkBAIC0zMTgsMTEgKzMxOCwxMSBAQCBjbGFzcyBKU0Jp
Z0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIH0KICNlbmRpZgogCi0gICAgc3RhdGlj
IEpTVmFsdWUgdW5hcnlNaW51cyhWTSYsIEpTQmlnSW50KiB4KTsKKyAgICBzdGF0aWMgSlNWYWx1
ZSB1bmFyeU1pbnVzKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgpOwogI2lmIFVTRShCSUdJ
TlQzMikKLSAgICBzdGF0aWMgSlNWYWx1ZSB1bmFyeU1pbnVzKFZNJiB2bSwgaW50MzJfdCB4KQor
ICAgIHN0YXRpYyBKU1ZhbHVlIHVuYXJ5TWludXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgaW50MzJfdCB4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKHZt
LCAtc3RhdGljX2Nhc3Q8aW50NjRfdD4oeCkpOworICAgICAgICByZXR1cm4gYXNJbnQzMk9ySGVh
cENlbGwoZ2xvYmFsT2JqZWN0LCAtc3RhdGljX2Nhc3Q8aW50NjRfdD4oeCkpOwogICAgIH0KICNl
bmRpZgogCkBAIC00MjMsMTIgKzQyMywxNCBAQCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1Ymxp
YyBKU0NlbGwgewogCiAgICAgRGlnaXQgZGlnaXQodW5zaWduZWQpOwogICAgIHZvaWQgc2V0RGln
aXQodW5zaWduZWQsIERpZ2l0KTsgLy8gVXNlIG9ubHkgd2hlbiBpbml0aWFsaXppbmcuCi0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgSlNCaWdJbnQqIHJpZ2h0VHJpbShWTSYpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIEpTQmlnSW50KiByaWdodFRyaW0oSlNHbG9iYWxPYmplY3QqKTsKIAogcHJpdmF0
ZToKICAgICBKU0JpZ0ludChWTSYsIFN0cnVjdHVyZSosIERpZ2l0KiwgdW5zaWduZWQgbGVuZ3Ro
KTsKIAotICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbUltcGwoVk0mLCB1aW50NjRfdCB2
YWx1ZSwgYm9vbCBzaWduKTsKKyAgICBKU0JpZ0ludCogcmlnaHRUcmltKEpTR2xvYmFsT2JqZWN0
KiwgVk0mKTsKKworICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbUltcGwoSlNHbG9iYWxP
YmplY3QqLCB1aW50NjRfdCB2YWx1ZSwgYm9vbCBzaWduKTsKIAogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgYml0c1BlckJ5dGUgPSA4OwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgZGlnaXRCaXRzID0gc2l6ZW9mKERpZ2l0KSAqIGJpdHNQZXJCeXRlOwpAQCAtNDU0LDcgKzQ1
Niw3IEBAIGNsYXNzIEpTQmlnSW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KICAgICBzdGF0
aWMgQ29tcGFyaXNvblJlc3VsdCBhYnNvbHV0ZUNvbXBhcmUoQmlnSW50SW1wbDEgeCwgQmlnSW50
SW1wbDIgeSk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci0gICAgc3RhdGlj
IHZvaWQgYWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29yKFZNJiwgQmlnSW50SW1wbCB4LCBEaWdp
dCBkaXZpc29yLCBKU0JpZ0ludCoqIHF1b3RpZW50LCBEaWdpdCYgcmVtYWluZGVyKTsKKyAgICBz
dGF0aWMgYm9vbCBhYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3IoSlNHbG9iYWxPYmplY3QqLCBW
TSYsIEJpZ0ludEltcGwgeCwgRGlnaXQgZGl2aXNvciwgSlNCaWdJbnQqKiBxdW90aWVudCwgRGln
aXQmIHJlbWFpbmRlcik7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CiAgICAg
c3RhdGljIHZvaWQgaW50ZXJuYWxNdWx0aXBseUFkZChCaWdJbnRJbXBsIHNvdXJjZSwgRGlnaXQg
ZmFjdG9yLCBEaWdpdCBzdW1tYW5kLCB1bnNpZ25lZCwgSlNCaWdJbnQqIHJlc3VsdCk7CiAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CkBAIC00ODksMTYgKzQ5MSwxNiBAQCBjbGFz
cyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIH07CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDIsIHR5cGVuYW1lIEJp
dHdpc2VPcD4KLSAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlQml0d2lzZU9wKFZNJiwgQmln
SW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwgRXh0cmFEaWdpdHNIYW5kbGluZywgQml0d2lzZU9w
JiYpOworICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVCaXR3aXNlT3AoSlNHbG9iYWxPYmpl
Y3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nLCBC
aXR3aXNlT3AmJik7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVu
YW1lIEJpZ0ludEltcGwyPgotICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVBbmQoVk0mLCBC
aWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29s
dXRlQW5kKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CiAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4K
LSAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlT3IoVk0mLCBCaWdJbnRJbXBsMSB4LCBCaWdJ
bnRJbXBsMiB5KTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlT3IoSlNHbG9iYWxPYmpl
Y3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgotICAgIHN0YXRpYyBKU0JpZ0lu
dCogYWJzb2x1dGVBbmROb3QoVk0mLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKKyAg
ICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlQW5kTm90KEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50
SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludElt
cGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KLSAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRl
WG9yKFZNJiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CisgICAgc3RhdGljIEpTQmln
SW50KiBhYnNvbHV0ZVhvcihKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludElt
cGwyIHkpOwogCiAgICAgZW51bSBjbGFzcyBTaWduT3B0aW9uIHsKICAgICAgICAgU2lnbmVkLApA
QCAtNTM1LDIwICs1MzcsMjAgQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxs
IHsKICAgICBzdGF0aWMgSlNCaWdJbnQqIGFsbG9jYXRlRm9yKEpTR2xvYmFsT2JqZWN0KiwgVk0m
LCB1bnNpZ25lZCByYWRpeCwgdW5zaWduZWQgY2hhcmNvdW50KTsKIAogICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCaWdJbnRJbXBsPgotICAgIHN0YXRpYyBKU0JpZ0ludCogY29weShWTSYsIEJpZ0lu
dEltcGwgeCk7CisgICAgc3RhdGljIEpTQmlnSW50KiBjb3B5KEpTR2xvYmFsT2JqZWN0KiwgQmln
SW50SW1wbCB4KTsKIAogICAgIHZvaWQgaW5wbGFjZU11bHRpcGx5QWRkKERpZ2l0IG11bHRpcGxp
ZXIsIERpZ2l0IHBhcnQpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlw
ZW5hbWUgQmlnSW50SW1wbDI+CiAgICAgc3RhdGljIEltcGxSZXN1bHQgYWJzb2x1dGVBZGQoSlNH
bG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LCBib29sIHJlc3VsdFNp
Z24pOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50
SW1wbDI+Ci0gICAgc3RhdGljIEltcGxSZXN1bHQgYWJzb2x1dGVTdWIoVk0mLCBCaWdJbnRJbXBs
MSB4LCBCaWdJbnRJbXBsMiB5LCBib29sIHJlc3VsdFNpZ24pOworICAgIHN0YXRpYyBJbXBsUmVz
dWx0IGFic29sdXRlU3ViKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1w
bDIgeSwgYm9vbCByZXN1bHRTaWduKTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJ
bXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CiAgICAgc3RhdGljIEltcGxSZXN1bHQgbGVmdFNo
aWZ0QnlBYnNvbHV0ZShKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwy
IHkpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50
SW1wbDI+CiAgICAgc3RhdGljIEltcGxSZXN1bHQgcmlnaHRTaGlmdEJ5QWJzb2x1dGUoSlNHbG9i
YWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKIAotICAgIHN0YXRpYyBJ
bXBsUmVzdWx0IHJpZ2h0U2hpZnRCeU1heGltdW0oVk0mLCBib29sIHNpZ24pOworICAgIHN0YXRp
YyBJbXBsUmVzdWx0IHJpZ2h0U2hpZnRCeU1heGltdW0oSlNHbG9iYWxPYmplY3QqLCBib29sIHNp
Z24pOwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CiAgICAgc3RhdGljIE9w
dGlvbmFsPERpZ2l0PiB0b1NoaWZ0QW1vdW50KEJpZ0ludEltcGwgeCk7CkBAIC01NTgsOSArNTYw
LDkgQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KICAgICBzdGF0aWMgSW1wbFJlc3VsdCBhc1VpbnROSW1w
bChKU0dsb2JhbE9iamVjdCosIHVpbnQ2NF90LCBCaWdJbnRJbXBsKTsKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQmlnSW50SW1wbD4KLSAgICBzdGF0aWMgSW1wbFJlc3VsdCB0cnVuY2F0ZVRvTkJp
dHMoVk0mLCBpbnQzMl90LCBCaWdJbnRJbXBsKTsKKyAgICBzdGF0aWMgSW1wbFJlc3VsdCB0cnVu
Y2F0ZVRvTkJpdHMoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90LCBCaWdJbnRJbXBsKTsKICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KLSAgICBzdGF0aWMgSW1wbFJlc3VsdCB0cnVu
Y2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKFZNJiwgaW50MzJfdCwgQmlnSW50SW1wbCwgYm9vbCBy
ZXN1bHRTaWduKTsKKyAgICBzdGF0aWMgSW1wbFJlc3VsdCB0cnVuY2F0ZUFuZFN1YkZyb21Qb3dl
ck9mVHdvKEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCwgQmlnSW50SW1wbCwgYm9vbCByZXN1bHRT
aWduKTsKIAogICAgIGlubGluZSBzdGF0aWMgc2l6ZV90IG9mZnNldE9mRGF0YSgpCiAgICAgewpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAppbmRleCBhNDU3
NzJjZmVhNDY0YTk0ZWFhZTE2MGYyNTg1NmJiZjE5M2Y5MGJkLi45ZTQ3MDNiYjU2MWI5MDRlYjEz
ZDJlODdkOTg0NzZkMGNlZjRlZjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NKU1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NKU1ZhbHVlLmNwcApAQCAtMTE4LDE5ICsxMTgsMjMgQEAgSlNPYmplY3QqIEpTVmFsdWU6
OnRvT2JqZWN0U2xvd0Nhc2UoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKIAog
SlNWYWx1ZSBKU1ZhbHVlOjp0b1RoaXNTbG93Q2FzZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFQ01BTW9kZSBlY21hTW9kZSkgY29uc3QKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAg
ICAgQVNTRVJUKCFpc0NlbGwoKSk7CiAKICAgICBpZiAoZWNtYU1vZGUuaXNTdHJpY3QoKSkKICAg
ICAgICAgcmV0dXJuICp0aGlzOwogCiAgICAgaWYgKGlzSW50MzIoKSB8fCBpc0RvdWJsZSgpKQot
ICAgICAgICByZXR1cm4gY29uc3RydWN0TnVtYmVyKGdsb2JhbE9iamVjdCwgYXNWYWx1ZSgpKTsK
KyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25zdHJ1Y3ROdW1iZXIoZ2xvYmFs
T2JqZWN0LCBhc1ZhbHVlKCkpKTsKICAgICBpZiAoaXNUcnVlKCkgfHwgaXNGYWxzZSgpKQotICAg
ICAgICByZXR1cm4gY29uc3RydWN0Qm9vbGVhbkZyb21JbW1lZGlhdGVCb29sZWFuKGdsb2JhbE9i
amVjdCwgYXNWYWx1ZSgpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjb25z
dHJ1Y3RCb29sZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4oZ2xvYmFsT2JqZWN0LCBhc1ZhbHVlKCkp
KTsKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgaWYgKGlzQmlnSW50MzIoKSkgewotICAgICAgICBK
U0NlbGwqIGhlYXBCaWdJbnQgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihKU0JpZ0ludDo6Y3JlYXRl
RnJvbShnbG9iYWxPYmplY3QtPnZtKCksIGJpZ0ludDMyQXNJbnQzMigpKSk7Ci0gICAgICAgIHJl
dHVybiBoZWFwQmlnSW50LT50b09iamVjdChnbG9iYWxPYmplY3QpOworICAgICAgICBKU0NlbGwq
IGhlYXBCaWdJbnQgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihKU0JpZ0ludDo6Y3JlYXRlRnJvbShn
bG9iYWxPYmplY3QsIGJpZ0ludDMyQXNJbnQzMigpKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgaGVh
cEJpZ0ludC0+dG9PYmplY3QoZ2xvYmFsT2JqZWN0KSk7CiAgICAgfQogI2VuZGlmCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCBmYTk4YzUxMmYxNDEzNWQxMmE4MTUzM2I1
MzJmYzM5ZDc2NmIxYWMxLi5kNTEwYzRlNGQ4ZDJhMjliYzYwZGZkYWQ5NWIyZWE3ODI2ZmE3NDJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC00NzIsNyArNDcyLDExIEBA
IFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAgICAgc2VudGlu
ZWxNYXBCdWNrZXQoKTsKICAgICAgICAgc2VudGluZWxTZXRCdWNrZXQoKTsKICAgICB9Ci0gICAg
aGVhcEJpZ0ludENvbnN0YW50T25lLnNldCgqdGhpcywgSlNCaWdJbnQ6OmNyZWF0ZUZyb20oKnRo
aXMsIDEpKTsKKyAgICB7CisgICAgICAgIGF1dG8qIGJpZ0ludCA9IEpTQmlnSW50Ojp0cnlDcmVh
dGVGcm9tKCp0aGlzLCAxKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmlnSW50KTsKKyAgICAg
ICAgaGVhcEJpZ0ludENvbnN0YW50T25lLnNldCgqdGhpcywgYmlnSW50KTsKKyAgICB9CiAKICAg
ICBUaHJlYWQ6OmN1cnJlbnQoKS5zZXRDdXJyZW50QXRvbVN0cmluZ1RhYmxlKGV4aXN0aW5nRW50
cnlBdG9tU3RyaW5nVGFibGUpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggYjUyMzAzOGQwYWQ1YWU3ZjQ1
NTQwMTI2MDg2M2Q3Njk4NjQxNmVkZi4uZmRkODI1YzIwODAwNWFhZGNlYTIzZDk1OGNlZWE3NGEx
MWExZDkyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwCkBAIC0zMDA3LDcgKzMwMDcsMTEgQEAgY2xhc3MgQ2xvbmVEZXNl
cmlhbGl6ZXIgOiBDbG9uZUJhc2UgewogI2lmIFVTRShCSUdJTlQzMikKICAgICAgICAgICAgIHJl
dHVybiBqc0JpZ0ludDMyKDApOwogI2Vsc2UKLSAgICAgICAgICAgIEpTQmlnSW50KiBiaWdJbnQg
PSBKU0JpZ0ludDo6Y3JlYXRlWmVybyhtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOworICAg
ICAgICAgICAgSlNCaWdJbnQqIGJpZ0ludCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVaZXJvKG1fbGV4
aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWJpZ0lu
dCkpIHsKKyAgICAgICAgICAgICAgICBmYWlsKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kV2l0
aENyYXNoT25PdmVyZmxvdyhiaWdJbnQpOwogICAgICAgICAgICAgcmV0dXJuIGJpZ0ludDsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwpp
bmRleCAxNWZlYzc3ZTg5MGI5YmQzMjRmMTg3NmRmZWU3N2YxNTM3OWU4MjQ2Li5iNTNmNjMyMWZi
M2E0MmNiNWY3ZTJhNzNmY2IzMzAyNDUyMjBkOTAxIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5n
ZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA1LTI5
ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW0pTQ10gSlNC
aWdJbnQgYWxsb2NhdGlvbiBzaG91bGQgYmUgZ3JhY2VmdWwgZm9yIE9PTQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNTEyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvYmlnaW50LWNhbi10
aHJvdy1vb20uanM6IENvcGllZCBmcm9tIEpTVGVzdHMvc3RyZXNzL2dldC1mdW5jdGlvbi1yZWFs
bS1ub3QtZG9pbmctcmVjdXJzaW9uLmpzLgorICAgICAgICAoY2FuVGhyb3cpOgorICAgICAgICAo
Zm9vKToKKyAgICAgICAgKGdldCBmb28pOgorICAgICAgICAqIHN0cmVzcy9nZXQtZnVuY3Rpb24t
cmVhbG0tbm90LWRvaW5nLXJlY3Vyc2lvbi5qczoKKyAgICAgICAgKGNhblRocm93KToKKwogMjAy
MC0wNS0yNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBmb3Itb2Ygc2hvdWxkIGNoZWNrIHRoZSBpdGVyYWJsZSBpcyBhIEpTQXJyYXkgZm9yIEZhc3RB
cnJheSBpbiBERkcgaXRlcmF0b3Jfb3BlbgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvYmln
aW50LWNhbi10aHJvdy1vb20uanMgYi9KU1Rlc3RzL3N0cmVzcy9iaWdpbnQtY2FuLXRocm93LW9v
bS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43MDMxYjdjOGRlMTcyZTgyNmY5NGFlNTUxM2I4YTU0YTBjYWIyM2Fi
Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvYmlnaW50LWNhbi10aHJvdy1vb20u
anMKQEAgLTAsMCArMSwzOSBAQAorLy9AIHNraXAgaWYgJG1lbW9yeUxpbWl0ZWQKKy8vQCBydW5E
ZWZhdWx0KCItLXVzZUNvbmN1cnJlbnRKSVQ9MCIpCisKK2Z1bmN0aW9uIGNhblRocm93KGZ1bmMs
IGVycm9yTWVzc2FnZSkgeworICAgIHZhciBlcnJvclRocm93biA9IGZhbHNlOworICAgIHZhciBl
cnJvciA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGUp
IHsKKyAgICAgICAgZXJyb3JUaHJvd24gPSB0cnVlOworICAgICAgICBlcnJvciA9IGU7CisgICAg
fQorICAgIGlmIChlcnJvclRocm93biAmJiBTdHJpbmcoZXJyb3IpICE9PSBlcnJvck1lc3NhZ2Up
CisgICAgICAgIHRocm93IG5ldyBFcnJvcihgYmFkIGVycm9yOiAke1N0cmluZyhlcnJvcil9YCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitjb25zdCBhMCA9IFtdOworYTAuX19wcm90b19fID0g
e307CithMC5sZW5ndGggPSAyKioyMworT2JqZWN0LmRlZmluZVByb3BlcnR5KGEwLCAwLCB7IGdl
dDogZm9vIH0pOworCitmdW5jdGlvbiBmb28oKSB7CisgICAgbmV3IEludDE2QXJyYXkoYTApOwor
fQorCituZXcgUHJvbWlzZShmb28pOworCit0cnkgeworICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
MTAwMDA7IGkrKykgeworICAgICAgICBuZXcgVWludDhBcnJheSgxMDAwMDApOworICAgIH0KK30g
Y2F0Y2gge30KKworY2FuVGhyb3coKCkgPT4geworICAgIGZvciAobGV0IGk9MG47IGk8MTAwMDBu
OyBpKyspIHsKKyAgICAgICAgMm4qKmk7CisgICAgfQorfSwgYFJhbmdlRXJyb3I6IE91dCBvZiBt
ZW1vcnlgKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2dldC1mdW5jdGlvbi1yZWFsbS1u
b3QtZG9pbmctcmVjdXJzaW9uLmpzIGIvSlNUZXN0cy9zdHJlc3MvZ2V0LWZ1bmN0aW9uLXJlYWxt
LW5vdC1kb2luZy1yZWN1cnNpb24uanMKaW5kZXggYTc5ZWYyY2M2MGRhZTk4M2E0YjI5NGY0NGEx
N2Q3MjFmMzk3ZjYzYi4uZmZhNmUzYWFjZTkzZDNkM2I4N2EzOTc1MjY0OTc4YmI5NmYyODUxNSAx
MDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvZ2V0LWZ1bmN0aW9uLXJlYWxtLW5vdC1kb2luZy1y
ZWN1cnNpb24uanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvZ2V0LWZ1bmN0aW9uLXJlYWxtLW5vdC1k
b2luZy1yZWN1cnNpb24uanMKQEAgLTksNyArOSw2IEBAIGZ1bmN0aW9uIGNhblRocm93KGZ1bmMs
IGVycm9yTWVzc2FnZSkgewogICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgZXJyb3JUaHJvd24g
PSB0cnVlOwogICAgICAgICBlcnJvciA9IGU7Ci0gICAgICAgIHByaW50KGVycm9yLm1lc3NhZ2Up
OwogICAgIH0KICAgICBpZiAoZXJyb3JUaHJvd24gJiYgU3RyaW5nKGVycm9yKSAhPT0gZXJyb3JN
ZXNzYWdlKQogICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGJhZCBlcnJvcjogJHtTdHJpbmcoZXJy
b3IpfWApOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400555</attachid>
            <date>2020-05-29 00:12:53 -0700</date>
            <delta_ts>2020-05-29 00:22:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212512-20200529001252.patch</filename>
            <type>text/plain</type>
            <size>91648</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMjc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MjI3NWIxOGQwNzg3ZGViOTNiMDA2ZjM3NWIxZjM1NzlhNGEyNDZkLi40MzQxZmE5M2VmODEwNDg4
ZTdjNDRjMDYzMzkxY2YxNTM3ZGQyZDlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MSBAQAorMjAyMC0wNS0yOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEpTQmlnSW50IGFsbG9jYXRpb24gc2hvdWxkIGJlIGdyYWNlZnVs
IGZvciBPT00KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMjUxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggYWxsb3dzIEpTQmlnSW50J3Mgc3RvcmFnZSBhbGxvY2F0aW9uIHRvIGZhaWwg
Z3JhY2VmdWxseSBpZiBPT00gY29uZGl0aW9uIGhhcHBlbnMuCisgICAgICAgIFdlIHRocmVhZCBK
U0dsb2JhbE9iamVjdCogaW5zdGVhZCBvZiBWTSYgYW5kIHRocm93IE9PTSBlcnJvciBpZiBzdG9y
YWdlIGFsbG9jYXRpb24gZmFpbGVkLgorICAgICAgICBXZSBhbHNvIHJlbmFtZSBgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdGAgcGFyYW1ldGVyIHRvIGBKU0dsb2JhbE9iamVjdCogbnVsbE9y
R2xvYmFsT2JqZWN0Rm9yT09NYAorICAgICAgICBpZiBpdCBjYW4gYmUgbnVsbHB0ci4KKworICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAg
ICAoZnVuY3Rpb25DcmVhdGVIZWFwQmlnSW50KToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyQXJl
bmEuY3BwOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyQXJlbmE6Om1ha2VCaWdJbnREZWNpbWFs
SWRlbnRpZmllcik6CisgICAgICAgICogcnVudGltZS9CaWdJbnRDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OnRvQmlnSW50KToKKyAgICAgICAgKEpTQzo6Y2FsbEJpZ0ludENvbnN0cnVj
dG9yKToKKyAgICAgICAgKiBydW50aW1lL0JpZ0ludFByb3RvdHlwZS5jcHA6CisgICAgICAgIChK
U0M6OnRvVGhpc0JpZ0ludFZhbHVlKToKKyAgICAgICAgKEpTQzo6YmlnSW50UHJvdG9GdW5jVG9T
dHJpbmcpOgorICAgICAgICAoSlNDOjpiaWdJbnRQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6Cisg
ICAgICAgIChKU0M6OmJpZ0ludFByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAqIHJ1bnRpbWUv
Q2FjaGVkVHlwZXMuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZWRCaWdJbnQ6OmRlY29kZSBjb25z
dCk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdEZ1bmNGb3JtYXQpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3BwOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
Y3JlYXRlWmVybyk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0cnlDcmVhdGVaZXJvKToKKyAg
ICAgICAgKEpTQzo6SlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGgpOgorICAgICAgICAoSlNDOjpK
U0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojpj
cmVhdGVGcm9tKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnRyeUNyZWF0ZUZyb20pOgorICAg
ICAgICAoSlNDOjpKU0JpZ0ludDo6Y3JlYXRlRnJvbUltcGwpOgorICAgICAgICAoSlNDOjpKU0Jp
Z0ludDo6cGFyc2VJbnQpOgorICAgICAgICAoSlNDOjpIZWFwQmlnSW50SW1wbDo6dHJ5VG9IZWFw
QmlnSW50KToKKyAgICAgICAgKEpTQzo6SGVhcEJpZ0ludEltcGw6OnRvSGVhcEJpZ0ludCk6Cisg
ICAgICAgIChKU0M6OkludDMyQmlnSW50SW1wbDo6dHJ5VG9IZWFwQmlnSW50KToKKyAgICAgICAg
KEpTQzo6SW50MzJCaWdJbnRJbXBsOjp0b0hlYXBCaWdJbnQpOgorICAgICAgICAoSlNDOjp6ZXJv
SW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpleHBvbmVudGlhdGVJbXBsKToKKyAgICAg
ICAgKEpTQzo6SlNCaWdJbnQ6Om11bHRpcGx5SW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50
OjpkaXZpZGVJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmNvcHkpOgorICAgICAgICAo
SlNDOjpKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
dW5hcnlNaW51cyk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpyZW1haW5kZXJJbXBsKToKKyAg
ICAgICAgKEpTQzo6SlNCaWdJbnQ6OmluY0ltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
YWRkSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpzdWJJbXBsKToKKyAgICAgICAgKEpT
Qzo6SlNCaWdJbnQ6OmJpdHdpc2VBbmRJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmJp
dHdpc2VPckltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0d2lzZVhvckltcGwpOgor
ICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVBZGQpOgorICAgICAgICAoSlNDOjpKU0Jp
Z0ludDo6YWJzb2x1dGVTdWIpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVEaXZX
aXRoRGlnaXREaXZpc29yKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlRGl2V2l0
aEJpZ0ludERpdmlzb3IpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVMZWZ0U2hp
ZnRBbHdheXNDb3B5KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlQml0d2lzZU9w
KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlQW5kKToKKyAgICAgICAgKEpTQzo6
SlNCaWdJbnQ6OmFic29sdXRlT3IpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVB
bmROb3QpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVYb3IpOgorICAgICAgICAo
SlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVBZGRPbmUpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
YWJzb2x1dGVTdWJPbmUpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6bGVmdFNoaWZ0QnlBYnNv
bHV0ZSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpyaWdodFNoaWZ0QnlBYnNvbHV0ZSk6Cisg
ICAgICAgIChKU0M6OkpTQmlnSW50OjpyaWdodFNoaWZ0QnlNYXhpbXVtKToKKyAgICAgICAgKEpT
Qzo6SlNCaWdJbnQ6OnRvU3RyaW5nQmFzZVBvd2VyT2ZUd28pOgorICAgICAgICAoSlNDOjpKU0Jp
Z0ludDo6dG9TdHJpbmdHZW5lcmljKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnJpZ2h0VHJp
bSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphbGxvY2F0ZUZvcik6CisgICAgICAgIChKU0M6
OkpTQmlnSW50Ojphc0ludE5JbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFzVWludE5J
bXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnRydW5jYXRlVG9OQml0cyk6CisgICAgICAg
IChKU0M6OkpTQmlnSW50Ojp0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKToKKyAgICAgICAg
KEpTQzo6SlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQpOiBEZWxldGVkLgorICAg
ICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUu
Y3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjp0b1RoaXNTbG93Q2FzZSBjb25zdCk6CisgICAg
ICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisKIDIwMjAtMDUt
MjggIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IGFkZCBtaXNzaW5nIGNvbmRpdGlvbiBndWFyZHMgd2hlbiBnZW5lcmF0aW5nIG9iamMg
cHJvdG9jb2wgZmlsZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwYzY2NjhhNmYzYTNhM2NjZjJjMzg5YTU3ZTky
ZGIzZmExNzA4NTU1Li5mZGZmYmI3Yjg4YjdjYTk4OWI2NTM4OTY1YThmMTA2ZDdlZDdhYmFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjAtMDUtMjkgIFl1c3VrZSBTdXp1a2kgIDx5
c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBKU0JpZ0ludCBhbGxvY2F0aW9uIHNo
b3VsZCBiZSBncmFjZWZ1bCBmb3IgT09NCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTI1MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZEJpZ0ludCk6CisKIDIw
MjAtMDUtMjggIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtBcHBs
ZSBQYXldIEJ1dHRvbnMgcmVuZGVyIHdpdGggYSBjb3JuZXIgcmFkaXVzIG9mIFBLQXBwbGVQYXlC
dXR0b25EZWZhdWx0Q29ybmVyUmFkaXVzIGV2ZW4gd2hlbiBleHBsaWNpdGx5IHNwZWNpZnlpbmcg
ImJvcmRlci1yYWRpdXM6IDBweCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCmluZGV4IDNhNDFlNzYyZWM4ZDgzY2M0MmFjZTFkMTNiMmQ0Nzk2MmI0Njc1NzUu
LmQwMGVhMjk2MzYwMGM1MTEzYTg3OGIyY2VhZGNmNzU4MDlhYTFhYWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtMjg0MiwxMCArMjg0MiwxMCBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoTmVnYXRlKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgaWYgKHBy
aW1WYWx1ZS5pc0JpZ0ludDMyKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNC
aWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSkpOworICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6
dW5hcnlNaW51cyhnbG9iYWxPYmplY3QsIHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSkpKTsK
ICNlbmRpZgogICAgIGlmIChwcmltVmFsdWUuaXNIZWFwQmlnSW50KCkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5hc0hl
YXBCaWdJbnQoKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6
OmVuY29kZShKU0JpZ0ludDo6dW5hcnlNaW51cyhnbG9iYWxPYmplY3QsIHByaW1WYWx1ZS5hc0hl
YXBCaWdJbnQoKSkpKTsKIAogICAgIGRvdWJsZSBudW1iZXIgPSBwcmltVmFsdWUudG9OdW1iZXIo
Z2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKQEAgLTI4NzAsMTMgKzI4NzAsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwK
IAogI2lmIFVTRShCSUdJTlQzMikKICAgICBpZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkgewot
ICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFs
dWUuYmlnSW50MzJBc0ludDMyKCkpOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50
Ojp1bmFyeU1pbnVzKGdsb2JhbE9iamVjdCwgcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpKTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgYXJpdGhQ
cm9maWxlLT5vYnNlcnZlUmVzdWx0KHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKICAgICB9CiAjZW5kaWYKICAgICBpZiAocHJpbVZhbHVlLmlzSGVhcEJp
Z0ludCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXMo
dm0sIHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0g
SlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFsdWUuYXNIZWFwQmlnSW50
KCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBh
cml0aFByb2ZpbGUtPm9ic2VydmVSZXN1bHQocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KQEAgLTI5MTIsMTMgKzI5MTQsMTUgQEAgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1p
emUoSlNHbG9iYWxPYmplY3QKIAogI2lmIFVTRShCSUdJTlQzMikKICAgICBpZiAocHJpbVZhbHVl
LmlzQmlnSW50MzIoKSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFy
eU1pbnVzKHZtLCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpOworICAgICAgICBKU1ZhbHVl
IHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKGdsb2JhbE9iamVjdCwgcHJpbVZhbHVlLmJp
Z0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlUmVzdWx0KHJlc3VsdCk7CiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAjZW5kaWYKICAgICBpZiAo
cHJpbVZhbHVlLmlzSGVhcEJpZ0ludCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNC
aWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSk7CisgICAgICAg
IEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmlt
VmFsdWUuYXNIZWFwQmlnSW50KCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVSZXN1bHQocmVzdWx0KTsKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KQEAgLTI5NTQsMTAg
KzI5NTgsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5l
Z2F0ZU9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKICNpZiBVU0UoQklHSU5UMzIpCiAg
ICAgLy8gRklYTUU6IHdoeSBkb2VzIHRoaXMgZnVuY3Rpb24gcHJvZmlsZSB0aGUgYXJndW1lbnQg
YnV0IG5vdCB0aGUgcmVzdWx0PwogICAgIGlmIChwcmltVmFsdWUuaXNCaWdJbnQzMigpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmlt
VmFsdWUuYmlnSW50MzJBc0ludDMyKCkpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBw
cmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpKSk7CiAjZW5kaWYKICAgICBpZiAocHJpbVZhbHVl
LmlzSGVhcEJpZ0ludCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50
Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpKTsKKyAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWlu
dXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpKSk7CiAKICAgICBkb3Vi
bGUgbnVtYmVyID0gcHJpbVZhbHVlLnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CmluZGV4IGY2M2ZkNzAyNzJhN2FkMDc1N2ViMGJjYmE3OTQxZWExYjdjZjcxYWUuLmI4YzkyZjMw
OWYxNzNmNWI5ZmFlY2QyYzU2MzRmYWQ4NzJmY2RkN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBA
IC0yMjUyLDcgKzIyNTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
Q3JlYXRlSGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGJpZ0ludCk7CiAgICAgQVNTRVJUKGJpZ0ludC5pc0JpZ0ludDMy
KCkpOwogICAgIGludDMyX3QgdmFsdWUgPSBiaWdJbnQuYmlnSW50MzJBc0ludDMyKCk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgdmFsdWUpKTsK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6
Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIHZhbHVlKSkpOwogI2Vsc2UKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGJpZ0ludCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXJBcmVuYS5jcHAKaW5kZXggYWFjMDU2NjkwZTQxZWVkMGZiNjU5ZWFhNDQyYzk1
MmY2NTUzNzM4MC4uYzcxOTg4NjI0MWQzNTdiZjBlMzdhYTliYTcwODQ3ODQwZjEyM2Y0MyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5jcHAKQEAgLTk2LDkg
Kzk2LDEwIEBAIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUJpZ0ludERl
Y2ltYWxJZGVudGlmaWVyKFZNJiB2bSwgY29uc3QgSWRlCiAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzYyNwogICAgIEpTQmlnSW50KiBoZWFwQmlnSW50
OwogI2lmIFVTRShCSUdJTlQzMikKLSAgICBpZiAoYmlnSW50LmlzQmlnSW50MzIoKSkKLSAgICAg
ICAgaGVhcEJpZ0ludCA9IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCBiaWdJbnQuYmlnSW50MzJB
c0ludDMyKCkpOwotICAgIGVsc2UKKyAgICBpZiAoYmlnSW50LmlzQmlnSW50MzIoKSkgeworICAg
ICAgICBoZWFwQmlnSW50ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZUZyb20odm0sIGJpZ0ludC5iaWdJ
bnQzMkFzSW50MzIoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGhlYXBCaWdJbnQpOworICAg
IH0gZWxzZQogI2VuZGlmCiAgICAgICAgIGhlYXBCaWdJbnQgPSBiaWdJbnQuYXNIZWFwQmlnSW50
KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludENv
bnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludENvbnN0
cnVjdG9yLmNwcAppbmRleCA0ZmZiZmJiOTZkZDE3ZmFlMTk0N2I0NmJiYzgxZDk4NDJkYmMwZDA5
Li43ZTNkZTVlZWFkYjE2YzkxMjE2MTYyMWZkNGMyZWZiYTlhYmYzMDk3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50Q29uc3RydWN0b3IuY3BwCkBAIC04
Nyw3ICs4Nyw3IEBAIEpTVmFsdWUgdG9CaWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBhcmd1bWVudCkKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgICAgIHJldHVybiBq
c0JpZ0ludDMyKHByaW1pdGl2ZS5hc0Jvb2xlYW4oKSk7CiAjZWxzZQotICAgICAgICByZXR1cm4g
SlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIHByaW1pdGl2ZS5hc0Jvb2xlYW4oKSk7CisgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2Jq
ZWN0LCBwcmltaXRpdmUuYXNCb29sZWFuKCkpKTsKICNlbmRpZgogICAgIH0KIApAQCAtMTE2LDcg
KzExNiw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxCaWdJbnRD
b25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAjaWYgVVNFKEJJR0lOVDMyKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQmlnSW50MzIocHJpbWl0aXZlLmFzSW50MzIo
KSkpOwogI2Vsc2UKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6Y3Jl
YXRlRnJvbSh2bSwgcHJpbWl0aXZlLmFzSW50MzIoKSkpOworICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxP
YmplY3QsIHByaW1pdGl2ZS5hc0ludDMyKCkpKSk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTEyNCw3
ICsxMjQsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsQmlnSW50
Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbAogICAgICAgICBkb3VibGUgbnVtYmVy
ID0gcHJpbWl0aXZlLmFzRG91YmxlKCk7CiAgICAgICAgIGlmICghaXNJbnRlZ2VyKG51bWJlcikp
CiAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNy
ZWF0ZVJhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiTm90IGFuIGludGVnZXIiX3MpKTsKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6bWFrZUhlYXBCaWdJbnRPckJpZ0lu
dDMyKHZtLCBwcmltaXRpdmUuYXNEb3VibGUoKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6bWFrZUhlYXBCaWdJbnRPckJpZ0lu
dDMyKGdsb2JhbE9iamVjdCwgcHJpbWl0aXZlLmFzRG91YmxlKCkpKSk7CiAgICAgfQogCiAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9CaWdJbnQoZ2xvYmFs
T2JqZWN0LCBwcmltaXRpdmUpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9CaWdJbnRQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQmlnSW50UHJvdG90eXBlLmNwcAppbmRleCA0YTRiNmUyZTk4MmUwMjgzMWQ5ZTE2YWNiOTFk
YWVkYjQ2MzczMzdjLi4xZDhmYzAwMjRhMTk3ODFlM2JiZjdkZDMyYjJiMTRmYzAwYjEwOWM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRQcm90b3R5cGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludFByb3RvdHlwZS5j
cHAKQEAgLTc0LDEyICs3NCwxNSBAQCB2b2lkIEJpZ0ludFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCopCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyBB
TFdBWVNfSU5MSU5FIEpTQmlnSW50KiB0b1RoaXNCaWdJbnRWYWx1ZShWTSYgdm0sIEpTVmFsdWUg
dGhpc1ZhbHVlKQorc3RhdGljIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQqIHRvVGhpc0JpZ0ludFZh
bHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgLy8gRklYTUU6IGhl
YXAtYWxsb2NhdGluZyBhbGwgYmlnIGludHMgaXMgaW5uZWZpY2llbnQsIGJ1dCByZS1pbXBsZW1l
bnRpbmcgdG9TdHJpbmcgZm9yIHNtYWxsIEJpZ0ludHMgaXMgZW5vdWdoIHdvcmsgdGhhdCBJJ20g
ZGVmZXJyaW5nIGl0IHRvIGEgbGF0ZXIgcGF0Y2guCiAgICAgaWYgKHRoaXNWYWx1ZS5pc0JpZ0lu
dDMyKCkpCi0gICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgdGhpc1ZhbHVl
LmJpZ0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBK
U0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIHRoaXNWYWx1ZS5iaWdJbnQzMkFzSW50
MzIoKSkpOwogI2VuZGlmCiAKICAgICBpZiAodGhpc1ZhbHVlLmlzQ2VsbCgpKSB7CkBAIC05MCwx
MiArOTMsMTMgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQqIHRvVGhpc0JpZ0ludFZh
bHVlKFZNJiB2bSwgSlNWYWx1ZSB0aGlzVmFsdWUpCiAgICAgICAgICAgICBKU1ZhbHVlIGJpZ0lu
dCA9IGJpZ0ludE9iamVjdC0+aW50ZXJuYWxWYWx1ZSgpOwogI2lmIFVTRShCSUdJTlQzMikKICAg
ICAgICAgICAgIGlmIChiaWdJbnQuaXNCaWdJbnQzMigpKQotICAgICAgICAgICAgICAgIHJldHVy
biBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgYmlnSW50LmJpZ0ludDMyQXNJbnQzMigpKTsKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTQmlnSW50OjpjcmVhdGVG
cm9tKGdsb2JhbE9iamVjdCwgYmlnSW50LmJpZ0ludDMyQXNJbnQzMigpKSk7CiAjZW5kaWYKICAg
ICAgICAgICAgIHJldHVybiBiaWdJbnQuYXNIZWFwQmlnSW50KCk7CiAgICAgICAgIH0KICAgICB9
CiAKKyAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiJ3RoaXMnIHZhbHVl
IG11c3QgYmUgYSBCaWdJbnQgb3IgQmlnSW50T2JqZWN0Il9zKTsKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIApAQCAtMTA0LDkgKzEwOCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YmlnSW50UHJvdG9GdW5jVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAotICAgIEpTQmlnSW50KiB2YWx1ZSA9IHRvVGhpc0JpZ0ludFZhbHVl
KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiJ3RoaXMnIHZhbHVl
IG11c3QgYmUgYSBCaWdJbnQgb3IgQmlnSW50T2JqZWN0Il9zKTsKKyAgICBKU0JpZ0ludCogdmFs
dWUgPSB0b1RoaXNCaWdJbnRWYWx1ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBBU1NFUlQo
dmFsdWUpOwogCkBAIC0xMjksOSArMTMyLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBiaWdJbnRQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmEKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNCaWdJbnQqIHZhbHVlID0gdG9UaGlzQmlnSW50VmFs
dWUodm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICIndGhpcycgdmFs
dWUgbXVzdCBiZSBhIEJpZ0ludCBvciBCaWdJbnRPYmplY3QiX3MpOworICAgIEpTQmlnSW50KiB2
YWx1ZSA9IHRvVGhpc0JpZ0ludFZhbHVlKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT50aGlzVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGF1dG8q
IG51bWJlckZvcm1hdCA9IEludGxOdW1iZXJGb3JtYXQ6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LT5udW1iZXJGb3JtYXRTdHJ1Y3R1cmUoKSk7CiAgICAgbnVtYmVyRm9ybWF0LT5pbml0aWFsaXpl
TnVtYmVyRm9ybWF0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgY2FsbEZy
YW1lLT5hcmd1bWVudCgxKSk7CkBAIC0xNDQsOSArMTQ2LDggQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBiaWdJbnRQcm90b0Z1bmNWYWx1ZU9mKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNCaWdJbnQqIHZhbHVlID0gdG9UaGlz
QmlnSW50VmFsdWUodm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghdmFsdWUp
Ci0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICIn
dGhpcycgdmFsdWUgbXVzdCBiZSBhIEJpZ0ludCBvciBCaWdJbnRPYmplY3QiX3MpOworICAgIEpT
QmlnSW50KiB2YWx1ZSA9IHRvVGhpc0JpZ0ludFZhbHVlKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LT50aGlzVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAog
ICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2bSwgdmFsdWUtPnN0cnVjdHVyZUlEKCkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCmluZGV4IDYwMWQwMTlkZjkzZjhmMmY4Y2M2
YzFmNTkxYTk0MTU0OGRjMDdmY2IuLmY5ZjYyNGI0NmU5NzUwYmY0OTc4MTFmMzkxYWU0YTc2MjQ0
N2Q1MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5
cGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5j
cHAKQEAgLTEyNzksNyArMTI3OSw4IEBAIGNsYXNzIENhY2hlZEJpZ0ludCA6IHB1YmxpYyBWYXJp
YWJsZUxlbmd0aE9iamVjdDxKU0JpZ0ludD4gewogCiAgICAgSlNCaWdJbnQqIGRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgSlNCaWdJbnQqIGJpZ0ludCA9IEpT
QmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKGRlY29kZXIudm0oKSwgbV9sZW5ndGgp
OworICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5n
dGgoZGVjb2Rlci52bSgpLCBtX2xlbmd0aCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJpZ0lu
dCk7CiAgICAgICAgIGJpZ0ludC0+c2V0U2lnbihtX3NpZ24pOwogICAgICAgICBpZiAobV9sZW5n
dGgpCiAgICAgICAgICAgICBtZW1jcHkoYmlnSW50LT5kYXRhU3RvcmFnZSgpLCB0aGlzLT5idWZm
ZXIoKSwgc2l6ZW9mKEpTQmlnSW50OjpEaWdpdCkgKiBtX2xlbmd0aCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAppbmRleCBhMzljMTM3
NTc1NmZjZDU5ZjI2NDViMDA4MTRhNjBhODY4ZmIxOWFjLi4zMDM0NGMxMjBlMmRiMzczYzNlMDRk
NGI2Zjg2OGI3NTY4MDIwOGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKQEAgLTUzMCw3ICs1MzAsOCBAQCBTTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfbmVnYXRlKQogCiAjaWYgVVNFKEJJR0lOVDMyKQogICAgIGlmIChwcmltVmFs
dWUuaXNCaWdJbnQzMigpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVu
YXJ5TWludXModm0sIHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSk7CisgICAgICAgIEpTVmFs
dWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFsdWUu
YmlnSW50MzJBc0ludDMyKCkpOworICAgICAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICAgICAg
UkVUVVJOX1dJVEhfUFJPRklMSU5HKHJlc3VsdCwgewogICAgICAgICAgICAgdXBkYXRlQXJpdGhQ
cm9maWxlRm9yVW5hcnlBcml0aE9wKG1ldGFkYXRhLCByZXN1bHQsIG9wZXJhbmQpOwogICAgICAg
ICB9KTsKQEAgLTUzOCw3ICs1MzksOCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmVnYXRl
KQogI2VuZGlmCiAKICAgICBpZiAocHJpbVZhbHVlLmlzSGVhcEJpZ0ludCgpKSB7Ci0gICAgICAg
IEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5hc0hl
YXBCaWdJbnQoKSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWlu
dXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpOworICAgICAgICBDSEVD
S19FWENFUFRJT04oKTsKICAgICAgICAgUkVUVVJOX1dJVEhfUFJPRklMSU5HKHJlc3VsdCwgewog
ICAgICAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKG1ldGFkYXRhLCBy
ZXN1bHQsIG9wZXJhbmQpOwogICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHAKaW5kZXgg
YWFiYWU3YmU5YmYxM2MzNTY2MWIyMjk0NWIxYjNiZDQ5MmVkNGU2ZC4uNmRhYTg2YTkwYTE4YzM0
YWI5MDQzMDUxOWVkMmFiMmM4MTY0MWJjMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHAKQEAgLTk2
LDggKzk2LDkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJl
ckZvcm1hdEZ1bmNGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGcKIAogI2lmIFVTRShCSUdJTlQzMikK
ICAgICBpZiAoYmlnSW50T3JOdW1iZXIuaXNCaWdJbnQzMigpKSB7Ci0gICAgICAgIEpTQmlnSW50
KiB2YWx1ZSA9IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCBiaWdJbnRPck51bWJlci5iaWdJbnQz
MkFzSW50MzIoKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobnVtYmVyRm9ybWF0
LT5mb3JtYXQoZ2xvYmFsT2JqZWN0LCB2YWx1ZSkpOworICAgICAgICBKU0JpZ0ludCogdmFsdWUg
PSBKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIGJpZ0ludE9yTnVtYmVyLmJpZ0lu
dDMyQXNJbnQzMigpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUobnVtYmVy
Rm9ybWF0LT5mb3JtYXQoZ2xvYmFsT2JqZWN0LCB2YWx1ZSkpKTsKICAgICB9CiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCmluZGV4IDkwNDMyOWE3
MjEwY2ZlZWU3YjVlYWI3NmMxNGVjMDA3ZGNhZjEyYjkuLjNiNWFlYWZmNzZkNWZlNjczZjM4YWQ2
MDgzZDM1ZDhjYTM5M2NhMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQmlnSW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jp
Z0ludC5jcHAKQEAgLTgyLDQyICs4Miw2MSBAQCBTdHJ1Y3R1cmUqIEpTQmlnSW50OjpjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbAogICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKEhlYXBCaWdJbnRUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLUpT
QmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlWmVybyhWTSYgdm0pCitpbmxpbmUgSlNCaWdJbnQqIEpT
QmlnSW50OjpjcmVhdGVaZXJvKEpTR2xvYmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmplY3RGb3JP
T00sIFZNJiB2bSkKIHsKLSAgICBKU0JpZ0ludCogemVyb0JpZ0ludCA9IGNyZWF0ZVdpdGhMZW5n
dGhVbmNoZWNrZWQodm0sIDApOwotICAgIHJldHVybiB6ZXJvQmlnSW50OworICAgIHJldHVybiBj
cmVhdGVXaXRoTGVuZ3RoKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgdm0sIDApOwogfQogCi1K
U0JpZ0ludCogSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgdW5zaWduZWQgbGVuZ3RoKQorSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVa
ZXJvKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICByZXR1cm4gY3JlYXRlWmVybyhnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+dm0oKSk7
Cit9CisKK0pTQmlnSW50KiBKU0JpZ0ludDo6dHJ5Q3JlYXRlWmVybyhWTSYgdm0pCit7CisgICAg
cmV0dXJuIGNyZWF0ZVplcm8obnVsbHB0ciwgdm0pOworfQogCitpbmxpbmUgSlNCaWdJbnQqIEpT
QmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmpl
Y3RGb3JPT00sIFZNJiB2bSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoVU5MSUtFTFkobGVuZ3RoID4gbWF4TGVu
Z3RoKSkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgIkJpZ0ludCBnZW5lcmF0ZWQgZnJvbSB0aGlzIG9wZXJhdGlvbiBpcyB0b28gYmlnIl9zKTsK
KyAgICAgICAgaWYgKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSkKKyAgICAgICAgICAgIHRocm93
T3V0T2ZNZW1vcnlFcnJvcihudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHNjb3BlLCAiQmlnSW50
IGdlbmVyYXRlZCBmcm9tIHRoaXMgb3BlcmF0aW9uIGlzIHRvbyBiaWciX3MpOwogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBzY29wZS5yZWxlYXNlKCk7Ci0KLSAgICByZXR1
cm4gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgbGVuZ3RoKTsKLX0KLQotSlNCaWdJbnQq
IEpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKFZNJiB2bSwgdW5zaWduZWQgbGVu
Z3RoKQotewogICAgIEFTU0VSVChsZW5ndGggPD0gbWF4TGVuZ3RoKTsKLSAgICB2b2lkKiBkYXRh
ID0gR2lnYWNhZ2U6Om1hbGxvYyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBsZW5ndGggKiBzaXplb2Yo
RGlnaXQpKTsKKyAgICB2b2lkKiBkYXRhID0gR2lnYWNhZ2U6OnRyeU1hbGxvYyhHaWdhY2FnZTo6
UHJpbWl0aXZlLCBsZW5ndGggKiBzaXplb2YoRGlnaXQpKTsKKyAgICBpZiAoVU5MSUtFTFkoIWRh
dGEpKSB7CisgICAgICAgIGlmIChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00pCisgICAgICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBzY29wZSk7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KICAgICBKU0JpZ0ludCogYmlnSW50ID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNCaWdJbnQ+KHZtLmhlYXApKSBKU0JpZ0ludCh2
bSwgdm0uYmlnSW50U3RydWN0dXJlLmdldCgpLCByZWludGVycHJldF9jYXN0PERpZ2l0Kj4oZGF0
YSksIGxlbmd0aCk7CiAgICAgYmlnSW50LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJu
IGJpZ0ludDsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKFZNJiB2bSwgaW50
MzJfdCB2YWx1ZSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aChWTSYg
dm0sIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gY3JlYXRlV2l0aExlbmd0aChudWxs
cHRyLCB2bSwgbGVuZ3RoKTsKK30KKworSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVXaXRoTGVu
Z3RoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAg
ICByZXR1cm4gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+dm0o
KSwgbGVuZ3RoKTsKK30KKworaW5saW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShK
U0dsb2JhbE9iamVjdCogbnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBWTSYgdm0sIGludDMyX3Qg
dmFsdWUpCiB7CiAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8odm0p
OwotICAgIAotICAgIEpTQmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2Vk
KHZtLCAxKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8obnVsbE9yR2xvYmFsT2JqZWN0Rm9y
T09NLCB2bSk7CisKKyAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aChudWxs
T3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCAxKTsKKyAgICBpZiAoVU5MSUtFTFkoIWJpZ0ludCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCiAgICAgaWYgKHZhbHVlIDwgMCkgewogICAgICAg
ICBiaWdJbnQtPnNldERpZ2l0KDAsIHN0YXRpY19jYXN0PERpZ2l0PigtMSAqIHN0YXRpY19jYXN0
PGludDY0X3Q+KHZhbHVlKSkpOwogICAgICAgICBiaWdJbnQtPnNldFNpZ24odHJ1ZSk7CkBAIC0x
MjcsMzIgKzE0Niw1MSBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oVk0mIHZtLCBp
bnQzMl90IHZhbHVlKQogICAgIHJldHVybiBiaWdJbnQ7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0lu
dDo6Y3JlYXRlRnJvbShWTSYgdm0sIHVpbnQzMl90IHZhbHVlKQorSlNCaWdJbnQqIEpTQmlnSW50
OjpjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgdmFsdWUp
Cit7CisgICAgcmV0dXJuIGNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPnZt
KCksIHZhbHVlKTsKK30KKworSlNCaWdJbnQqIEpTQmlnSW50Ojp0cnlDcmVhdGVGcm9tKFZNJiB2
bSwgaW50MzJfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlRnJvbShudWxscHRyLCB2bSwg
dmFsdWUpOworfQorCitKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgdWludDMyX3QgdmFsdWUpCiB7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KwogICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBjcmVhdGVaZXJvKHZtKTsKKyAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjcmVhdGVaZXJvKGdsb2JhbE9iamVjdCkpOwog
ICAgIAotICAgIEpTQmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZt
LCAxKTsKKyAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmpl
Y3QsIDEpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIGJp
Z0ludC0+c2V0RGlnaXQoMCwgc3RhdGljX2Nhc3Q8RGlnaXQ+KHZhbHVlKSk7CiAgICAgcmV0dXJu
IGJpZ0ludDsKIH0KIAotaW5saW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbUltcGwo
Vk0mIHZtLCB1aW50NjRfdCB2YWx1ZSwgYm9vbCBzaWduKQoraW5saW5lIEpTQmlnSW50KiBKU0Jp
Z0ludDo6Y3JlYXRlRnJvbUltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0
X3QgdmFsdWUsIGJvb2wgc2lnbikKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKCF2
YWx1ZSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8odm0pOworICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIGNyZWF0ZVplcm8oZ2xvYmFsT2JqZWN0KSk7CiAKICAgICAvLyBUaGlz
IHBhdGggaXMgbm90IGp1c3QgYW4gb3B0aW1pemF0aW9uOiBiZWNhdXNlIHdlIGRvIG5vdCBjYWxs
IHJpZ2h0VHJpbSBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24sCiAgICAgLy8gaXQgd291bGQg
YmUgYSBidWcgdG8gY3JlYXRlIGEgQmlnSW50IHdpdGggbGVuZ3RoPTIgaW4gdGhpcyBjYXNlLgog
ICAgIGlmIChzaXplb2YoRGlnaXQpID09IDggfHwgdmFsdWUgPD0gVUlOVDMyX01BWCkgewotICAg
ICAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgMSk7
CisgICAgICAgIEpTQmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVj
dCwgMSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAg
ICAgICBiaWdJbnQtPnNldERpZ2l0KDAsIHN0YXRpY19jYXN0PERpZ2l0Pih2YWx1ZSkpOwogICAg
ICAgICBiaWdJbnQtPnNldFNpZ24oc2lnbik7CiAgICAgICAgIHJldHVybiBiaWdJbnQ7CiAgICAg
fQogCiAgICAgQVNTRVJUKHNpemVvZihEaWdpdCkgPT0gNCk7Ci0gICAgSlNCaWdJbnQqIGJpZ0lu
dCA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIDIpOworICAgIEpTQmlnSW50KiBiaWdJ
bnQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgMik7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgRGlnaXQgbG93Qml0cyAgPSBzdGF0aWNfY2Fz
dDxEaWdpdD4odmFsdWUgJiAweGZmZmZmZmZmKTsKICAgICBEaWdpdCBoaWdoQml0cyA9IHN0YXRp
Y19jYXN0PERpZ2l0PigodmFsdWUgPj4gMzIpICYgMHhmZmZmZmZmZik7CiAKQEAgLTE2NSwxMiAr
MjAzLDEyIEBAIGlubGluZSBKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb21JbXBsKFZNJiB2
bSwgdWludDY0X3QgdmFsdWUsIGJvb2wgc2lnbikKICAgICByZXR1cm4gYmlnSW50OwogfQogCi1K
U0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oVk0mIHZtLCB1aW50NjRfdCB2YWx1ZSkKK0pT
QmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCB1aW50NjRfdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gY3JlYXRlRnJvbUltcGwodm0sIHZhbHVl
LCBmYWxzZSk7CisgICAgcmV0dXJuIGNyZWF0ZUZyb21JbXBsKGdsb2JhbE9iamVjdCwgdmFsdWUs
IGZhbHNlKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKFZNJiB2bSwgaW50
NjRfdCB2YWx1ZSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBpbnQ2NF90IHZhbHVlKQogewogICAgIHVpbnQ2NF90IHVuc2lnbmVk
VmFsdWU7CiAgICAgYm9vbCBzaWduID0gZmFsc2U7CkBAIC0xNzksMjQgKzIxNywzMSBAQCBKU0Jp
Z0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oVk0mIHZtLCBpbnQ2NF90IHZhbHVlKQogICAgICAg
ICBzaWduID0gdHJ1ZTsKICAgICB9IGVsc2UKICAgICAgICAgdW5zaWduZWRWYWx1ZSA9IHZhbHVl
OwotICAgIHJldHVybiBjcmVhdGVGcm9tSW1wbCh2bSwgdW5zaWduZWRWYWx1ZSwgc2lnbik7Cisg
ICAgcmV0dXJuIGNyZWF0ZUZyb21JbXBsKGdsb2JhbE9iamVjdCwgdW5zaWduZWRWYWx1ZSwgc2ln
bik7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShWTSYgdm0sIGJvb2wgdmFs
dWUpCitKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgYm9vbCB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKCF2
YWx1ZSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8odm0pOwotICAgIAotICAgIEpTQmlnSW50
KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCAxKTsKKyAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjcmVhdGVaZXJvKGdsb2JhbE9iamVjdCkpOworCisgICAg
SlNCaWdJbnQqIGJpZ0ludCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCAxKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBiaWdJbnQtPnNldERp
Z2l0KDAsIHN0YXRpY19jYXN0PERpZ2l0Pih2YWx1ZSkpOwogICAgIHJldHVybiBiaWdJbnQ7CiB9
CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShWTSYgdm0sIGRvdWJsZSB2YWx1ZSkK
K0pTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBkb3VibGUgdmFsdWUpCiB7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEFTU0VSVChp
c0ludGVnZXIodmFsdWUpKTsKICAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gY3JlYXRl
WmVybyh2bSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY3JlYXRlWmVybyhn
bG9iYWxPYmplY3QpKTsKIAogICAgIGJvb2wgc2lnbiA9IHZhbHVlIDwgMDsgLy8gLTAgd2FzIGFs
cmVhZHkgaGFuZGxlZCBhYm92ZS4KICAgICB1aW50NjRfdCBkb3VibGVCaXRzID0gYml0d2lzZV9j
YXN0PHVpbnQ2NF90Pih2YWx1ZSk7CkBAIC0yMDUsNyArMjUwLDggQEAgSlNCaWdJbnQqIEpTQmln
SW50OjpjcmVhdGVGcm9tKFZNJiB2bSwgZG91YmxlIHZhbHVlKQogICAgIEFTU0VSVChyYXdFeHBv
bmVudCA+PSAweDNmZik7IC8vIFNpbmNlIHZhbHVlIGlzIGludGVnZXIsIGV4cG9uZW50IHNob3Vs
ZCBiZSA+PSAwICsgYmlhcyAoMHgzZmYpLgogICAgIGludDMyX3QgZXhwb25lbnQgPSByYXdFeHBv
bmVudCAtIDB4M2ZmOwogICAgIGludDMyX3QgZGlnaXRzID0gZXhwb25lbnQgLyBkaWdpdEJpdHMg
KyAxOwotICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZt
LCBkaWdpdHMpOworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2Jh
bE9iamVjdCwgZGlnaXRzKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRy
KTsKICAgICBBU1NFUlQocmVzdWx0KTsKICAgICByZXN1bHQtPmluaXRpYWxpemUoSW5pdGlhbGl6
YXRpb25UeXBlOjpXaXRoWmVybyk7CiAgICAgcmVzdWx0LT5zZXRTaWduKHNpZ24pOwpAQCAtMjU5
LDcgKzMwNSw3IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShWTSYgdm0sIGRvdWJs
ZSB2YWx1ZSkKICAgICAgICAgICAgIGRpZ2l0ID0gMDsKICAgICAgICAgcmVzdWx0LT5zZXREaWdp
dChkaWdpdEluZGV4LCBkaWdpdCk7CiAgICAgfQotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJp
bSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShn
bG9iYWxPYmplY3QpKTsKIH0KIAogSlNWYWx1ZSBKU0JpZ0ludDo6dG9QcmltaXRpdmUoSlNHbG9i
YWxPYmplY3QqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdApAQCAtMjc0LDExICszMjAs
MTEgQEAgSlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU3RyaW5nVmlldyBzLCBFcnJvclBhcnMKICAgICByZXR1cm4gcGFyc2VJbnQoZ2xvYmFs
T2JqZWN0LCBzLmNoYXJhY3RlcnMxNigpLCBzLmxlbmd0aCgpLCBwYXJzZXJNb2RlKTsKIH0KIAot
SlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Vk0mIHZtLCBTdHJpbmdWaWV3IHMsIHVpbnQ4X3QgcmFkaXgsIEVycm9yUGFyc2VNb2RlIHBhcnNl
ck1vZGUsIFBhcnNlSW50U2lnbiBzaWduKQorSlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJbnQoSlNH
bG9iYWxPYmplY3QqIG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgVk0mIHZtLCBTdHJpbmdWaWV3
IHMsIHVpbnQ4X3QgcmFkaXgsIEVycm9yUGFyc2VNb2RlIHBhcnNlck1vZGUsIFBhcnNlSW50U2ln
biBzaWduKQogewogICAgIGlmIChzLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gcGFyc2VJbnQo
Z2xvYmFsT2JqZWN0LCB2bSwgcy5jaGFyYWN0ZXJzOCgpLCBzLmxlbmd0aCgpLCAwLCByYWRpeCwg
cGFyc2VyTW9kZSwgc2lnbiwgUGFyc2VJbnRNb2RlOjpEaXNhbGxvd0VtcHR5U3RyaW5nKTsKLSAg
ICByZXR1cm4gcGFyc2VJbnQoZ2xvYmFsT2JqZWN0LCB2bSwgcy5jaGFyYWN0ZXJzMTYoKSwgcy5s
ZW5ndGgoKSwgMCwgcmFkaXgsIHBhcnNlck1vZGUsIHNpZ24sIFBhcnNlSW50TW9kZTo6RGlzYWxs
b3dFbXB0eVN0cmluZyk7CisgICAgICAgIHJldHVybiBwYXJzZUludChudWxsT3JHbG9iYWxPYmpl
Y3RGb3JPT00sIHZtLCBzLmNoYXJhY3RlcnM4KCksIHMubGVuZ3RoKCksIDAsIHJhZGl4LCBwYXJz
ZXJNb2RlLCBzaWduLCBQYXJzZUludE1vZGU6OkRpc2FsbG93RW1wdHlTdHJpbmcpOworICAgIHJl
dHVybiBwYXJzZUludChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCBzLmNoYXJhY3RlcnMx
NigpLCBzLmxlbmd0aCgpLCAwLCByYWRpeCwgcGFyc2VyTW9kZSwgc2lnbiwgUGFyc2VJbnRNb2Rl
OjpEaXNhbGxvd0VtcHR5U3RyaW5nKTsKIH0KIAogSlNWYWx1ZSBKU0JpZ0ludDo6c3RyaW5nVG9C
aWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RyaW5nVmlldyBzKQpAQCAtMzE4
LDcgKzM2NCw4IEBAIGNsYXNzIEhlYXBCaWdJbnRJbXBsIHsKICAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgc2lnbigpIHsgcmV0dXJuIG1fYmlnSW50LT5zaWduKCk7IH0KICAgICBBTFdBWVNfSU5MSU5F
IHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fYmlnSW50LT5sZW5ndGgoKTsgfQogICAgIEFM
V0FZU19JTkxJTkUgSlNCaWdJbnQ6OkRpZ2l0IGRpZ2l0KHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1f
YmlnSW50LT5kaWdpdChpKTsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQqIHRvSGVhcEJp
Z0ludChWTSYpIHsgcmV0dXJuIG1fYmlnSW50OyB9CisgICAgQUxXQVlTX0lOTElORSBKU0JpZ0lu
dCogdHJ5VG9IZWFwQmlnSW50KFZNJikgeyByZXR1cm4gbV9iaWdJbnQ7IH0KKyAgICBBTFdBWVNf
SU5MSU5FIEpTQmlnSW50KiB0b0hlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqKSB7IHJldHVybiBt
X2JpZ0ludDsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBzdHJ1Y3QgSlNCaWdJbnQ6OkltcGxS
ZXN1bHQ7CkBAIC0zNDMsNyArMzkwLDE1IEBAIGNsYXNzIEludDMyQmlnSW50SW1wbCB7CiAgICAg
ICAgIHJldHVybiBtX3ZhbHVlOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQq
IHRvSGVhcEJpZ0ludChWTSYgdm0pIHsgcmV0dXJuIEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCBt
X3ZhbHVlKTsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQqIHRyeVRvSGVhcEJpZ0ludChW
TSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OnRyeUNyZWF0ZUZyb20odm0s
IG1fdmFsdWUpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQqIHRvSGVhcEJp
Z0ludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQmlnSW50OjpjcmVhdGVGcm9tKGdsb2JhbE9iamVjdCwgbV92YWx1ZSk7CisgICAgfQogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBzdHJ1Y3QgSlNCaWdJbnQ6OkltcGxSZXN1bHQ7CkBAIC00MDIs
MTMgKzQ1NywxMyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIHRyeUNvbnZlcnRUb0Jp
Z0ludDMyKEpTQmlnSW50OjpJbXBsUmVzdWx0IGltcGxSZXN1bAogICAgIHJldHVybiB0cnlDb252
ZXJ0VG9CaWdJbnQzMihpbXBsUmVzdWx0LnBheWxvYWQuYXNIZWFwQmlnSW50KCkpOwogfQogCi1z
dGF0aWMgQUxXQVlTX0lOTElORSBKU0JpZ0ludDo6SW1wbFJlc3VsdCB6ZXJvSW1wbChWTSYgdm0p
CitzdGF0aWMgQUxXQVlTX0lOTElORSBKU0JpZ0ludDo6SW1wbFJlc3VsdCB6ZXJvSW1wbChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogI2lmIFVTRShCSUdJTlQzMikKLSAgICBVTlVT
RURfUEFSQU0odm0pOworICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwogICAgIHJldHVy
biBqc0JpZ0ludDMyKDApOwogI2Vsc2UKLSAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZVplcm8o
dm0pOworICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlWmVybyhnbG9iYWxPYmplY3QpOwogI2Vu
ZGlmCiB9CiAKQEAgLTQzMSw3ICs0ODYsNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0lu
dDo6ZXhwb25lbnRpYXRlSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaQogCiAg
ICAgLy8gMi4gSWYgYmFzZSBpcyAwbiBhbmQgZXhwb25lbnQgaXMgMG4sIHJldHVybiAxbi4KICAg
ICBpZiAoZXhwb25lbnQuaXNaZXJvKCkpCi0gICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRl
RnJvbSh2bSwgMSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNCaWdJbnQ6
OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCAxKSk7CiAgICAgCiAgICAgLy8gMy4gUmV0dXJuIGEg
QmlnSW50IHJlcHJlc2VudGluZyB0aGUgbWF0aGVtYXRpY2FsIHZhbHVlIG9mIGJhc2UgcmFpc2Vk
CiAgICAgLy8gICAgdG8gdGhlIHBvd2VyIGV4cG9uZW50LgpAQCAtNDQxLDcgKzQ5Niw3IEBAIEpT
QmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpleHBvbmVudGlhdGVJbXBsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEJpCiAgICAgaWYgKGJhc2UubGVuZ3RoKCkgPT0gMSAmJiBiYXNl
LmRpZ2l0KDApID09IDEpIHsKICAgICAgICAgLy8gKC0xKSAqKiBldmVuX251bWJlciA9PSAxLgog
ICAgICAgICBpZiAoYmFzZS5zaWduKCkgJiYgIShleHBvbmVudC5kaWdpdCgwKSAmIDEpKQotICAg
ICAgICAgICAgcmV0dXJuIEpTQmlnSW50Ojp1bmFyeU1pbnVzSW1wbCh2bSwgYmFzZSk7CisgICAg
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTQmlnSW50Ojp1bmFyeU1pbnVzSW1w
bChnbG9iYWxPYmplY3QsIGJhc2UpKTsKIAogICAgICAgICAvLyAoLTEpICoqIG9kZF9udW1iZXIg
PT0gLTE7IDEgKiogYW55dGhpbmcgPT0gMS4KICAgICAgICAgcmV0dXJuIGJhc2U7CkBAIC00Njgs
NyArNTIzLDcgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmV4cG9uZW50aWF0ZUlt
cGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmkKICAgICBpZiAoYmFzZS5sZW5ndGgo
KSA9PSAxICYmIGJhc2UuZGlnaXQoMCkgPT0gMikgewogICAgICAgICAvLyBGYXN0IHBhdGggZm9y
IDJebi4KICAgICAgICAgaW50IG5lZWRlZERpZ2l0cyA9IDEgKyAobiAvIGRpZ2l0Qml0cyk7Ci0g
ICAgICAgIEpTQmlnSW50KiByZXN1bHQgPSBKU0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aChn
bG9iYWxPYmplY3QsIG5lZWRlZERpZ2l0cyk7CisgICAgICAgIEpTQmlnSW50KiByZXN1bHQgPSBK
U0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIG5lZWRlZERpZ2l0cyk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgICAgIHJl
c3VsdC0+aW5pdGlhbGl6ZShJbml0aWFsaXphdGlvblR5cGU6OldpdGhaZXJvKTsKQEAgLTQ4Mywx
MSArNTM4LDE0IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpleHBvbmVudGlhdGVJ
bXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpCiAgICAgfQogCiAgICAgSlNCaWdJ
bnQqIHJlc3VsdCA9IG51bGxwdHI7Ci0gICAgSlNCaWdJbnQqIHJ1bm5pbmdTcXVhcmUgPSBiYXNl
LnRvSGVhcEJpZ0ludCh2bSk7CisgICAgSlNCaWdJbnQqIHJ1bm5pbmdTcXVhcmUgPSBiYXNlLnRv
SGVhcEJpZ0ludChnbG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IG51bGxwdHIpOwogCiAgICAgLy8gVGhpcyBpbXBsaWNpdGx5IHNldHMgdGhlIHJlc3VsdCdzIHNp
Z24gY29ycmVjdGx5LgotICAgIGlmIChuICYgMSkKLSAgICAgICAgcmVzdWx0ID0gYmFzZS50b0hl
YXBCaWdJbnQodm0pOworICAgIGlmIChuICYgMSkgeworICAgICAgICByZXN1bHQgPSBiYXNlLnRv
SGVhcEJpZ0ludChnbG9iYWxPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKKyAgICB9CiAKICAgICBuID4+PSAxOwogICAgIGZvciAoOyBuOyBuID4+
PSAxKSB7CkBAIC01NDgsNyArNjA2LDcgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6
Om11bHRpcGx5SW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnQKICAgICAg
ICAgcmV0dXJuIHk7CiAKICAgICB1bnNpZ25lZCByZXN1bHRMZW5ndGggPSB4Lmxlbmd0aCgpICsg
eS5sZW5ndGgoKTsKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdp
dGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgpOworICAgIEpTQmlnSW50KiByZXN1
bHQgPSBKU0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3VsdExlbmd0
aCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgcmVzdWx0
LT5pbml0aWFsaXplKEluaXRpYWxpemF0aW9uVHlwZTo6V2l0aFplcm8pOwogCkBAIC01NTYsNyAr
NjE0LDcgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6Om11bHRpcGx5SW1wbChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnQKICAgICAgICAgbXVsdGlwbHlBY2N1bXVs
YXRlKHksIHguZGlnaXQoaSksIHJlc3VsdCwgaSk7CiAKICAgICByZXN1bHQtPnNldFNpZ24oeC5z
aWduKCkgIT0geS5zaWduKCkpOwotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7Cisg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmpl
Y3QpKTsKIH0KIAogSlNWYWx1ZSBKU0JpZ0ludDo6bXVsdGlwbHkoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQpAQCAtNTkwLDI0ICs2NDgsMzAg
QEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmRpdmlkZUltcGwoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW0KICAgICAvLyAzLiBSZXR1cm4gYSBCaWdJbnQgcmVw
cmVzZW50aW5nIHF1b3RpZW50IHJvdW5kZWQgdG93YXJkcyAwIHRvIHRoZSBuZXh0CiAgICAgLy8g
ICAgaW50ZWdyYWwgdmFsdWUuCiAgICAgaWYgKGFic29sdXRlQ29tcGFyZSh4LCB5KSA9PSBDb21w
YXJpc29uUmVzdWx0OjpMZXNzVGhhbikKLSAgICAgICAgcmV0dXJuIHplcm9JbXBsKHZtKTsKKyAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB6ZXJvSW1wbChnbG9iYWxPYmplY3QpKTsK
IAogICAgIEpTQmlnSW50KiBxdW90aWVudCA9IG51bGxwdHI7CiAgICAgYm9vbCByZXN1bHRTaWdu
ID0geC5zaWduKCkgIT0geS5zaWduKCk7CiAgICAgaWYgKHkubGVuZ3RoKCkgPT0gMSkgewogICAg
ICAgICBEaWdpdCBkaXZpc29yID0geS5kaWdpdCgwKTsKLSAgICAgICAgaWYgKGRpdmlzb3IgPT0g
MSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHRTaWduID09IHguc2lnbigpID8gSlNCaWdJbnQ6
OkltcGxSZXN1bHQgeyB4IH0gOiBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwodm0sIHgpOworICAg
ICAgICBpZiAoZGl2aXNvciA9PSAxKSB7CisgICAgICAgICAgICBpZiAocmVzdWx0U2lnbiA9PSB4
LnNpZ24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OkltcGxSZXN1bHQgeyB4
IH07CisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTQmlnSW50Ojp1bmFy
eU1pbnVzSW1wbChnbG9iYWxPYmplY3QsIHgpKTsKKyAgICAgICAgfQogCiAgICAgICAgIERpZ2l0
IHJlbWFpbmRlcjsKLSAgICAgICAgYWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29yKHZtLCB4LCBk
aXZpc29yLCAmcXVvdGllbnQsIHJlbWFpbmRlcik7CisgICAgICAgIGFic29sdXRlRGl2V2l0aERp
Z2l0RGl2aXNvcihnbG9iYWxPYmplY3QsIHZtLCB4LCBkaXZpc29yLCAmcXVvdGllbnQsIHJlbWFp
bmRlcik7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIGFic29sdXRlRGl2V2l0aEJpZ0ludERpdmlzb3IoZ2xvYmFsT2Jq
ZWN0LCB4LCB5LnRvSGVhcEJpZ0ludCh2bSksICZxdW90aWVudCwgbnVsbHB0cik7CisgICAgICAg
IEpTQmlnSW50KiB5QmlnSW50ID0geS50b0hlYXBCaWdJbnQoZ2xvYmFsT2JqZWN0KTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgIGFic29sdXRl
RGl2V2l0aEJpZ0ludERpdmlzb3IoZ2xvYmFsT2JqZWN0LCB4LCB5QmlnSW50LCAmcXVvdGllbnQs
IG51bGxwdHIpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsK
ICAgICB9CiAKICAgICBxdW90aWVudC0+c2V0U2lnbihyZXN1bHRTaWduKTsKLSAgICByZXR1cm4g
cXVvdGllbnQtPnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBx
dW90aWVudC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdCkpOwogfQogCiBKU1ZhbHVlIEpTQmlnSW50
OjpkaXZpZGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmln
SW50KiB5KQpAQCAtNjI2LDExICs2OTAsMTYgQEAgSlNWYWx1ZSBKU0JpZ0ludDo6ZGl2aWRlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgSlNCaWdJbnQqIHkpCiAjZW5k
aWYKIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci1KU0JpZ0ludCogSlNCaWdJbnQ6
OmNvcHkoVk0mIHZtLCBCaWdJbnRJbXBsIHgpCitKU0JpZ0ludCogSlNCaWdJbnQ6OmNvcHkoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbCB4KQogeworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICBBU1NFUlQoIXguaXNaZXJvKCkpOwogCi0gICAgSlNCaWdJbnQqIHJlc3Vs
dCA9IEpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCB4Lmxlbmd0aCgpKTsK
KyAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHgu
bGVuZ3RoKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdC0+bGVuZ3RoKCk7ICsraSkKICAgICAg
ICAgcmVzdWx0LT5zZXREaWdpdChpLCB4LmRpZ2l0KGkpKTsKICAgICByZXN1bHQtPnNldFNpZ24o
eC5zaWduKCkpOwpAQCAtNjM4LDE5ICs3MDcsMjQgQEAgSlNCaWdJbnQqIEpTQmlnSW50Ojpjb3B5
KFZNJiB2bSwgQmlnSW50SW1wbCB4KQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1w
bD4KLUpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojp1bmFyeU1pbnVzSW1wbChWTSYgdm0s
IEJpZ0ludEltcGwgeCkKK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojp1bmFyeU1pbnVz
SW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsIHgpCiB7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICh4LmlzWmVybygpKQotICAgICAgICByZXR1cm4gemVy
b0ltcGwodm0pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHplcm9JbXBsKGds
b2JhbE9iamVjdCkpOworCisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNvcHkoZ2xvYmFsT2JqZWN0
LCB4KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAotICAgIEpT
QmlnSW50KiByZXN1bHQgPSBjb3B5KHZtLCB4KTsKICAgICByZXN1bHQtPnNldFNpZ24oIXguc2ln
bigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEpTQmlnSW50Ojp1bmFyeU1p
bnVzKFZNJiB2bSwgSlNCaWdJbnQqIHgpCitKU1ZhbHVlIEpTQmlnSW50Ojp1bmFyeU1pbnVzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4KQogewotICAgIHJldHVybiB0
cnlDb252ZXJ0VG9CaWdJbnQzMih1bmFyeU1pbnVzSW1wbCh2bSwgSGVhcEJpZ0ludEltcGwgeyB4
IH0pKTsKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIodW5hcnlNaW51c0ltcGwoZ2xv
YmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgpAQCAtNjc0LDIyICs3NDgsMjcg
QEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnJlbWFpbmRlckltcGwoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW4KICAgICBpZiAoeS5sZW5ndGgoKSA9PSAxKSB7CiAg
ICAgICAgIERpZ2l0IGRpdmlzb3IgPSB5LmRpZ2l0KDApOwogICAgICAgICBpZiAoZGl2aXNvciA9
PSAxKQotICAgICAgICAgICAgcmV0dXJuIHplcm9JbXBsKHZtKTsKKyAgICAgICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgemVyb0ltcGwoZ2xvYmFsT2JqZWN0KSk7CiAKICAgICAgICAg
RGlnaXQgcmVtYWluZGVyRGlnaXQ7Ci0gICAgICAgIGFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNv
cih2bSwgeCwgZGl2aXNvciwgbnVsbHB0ciwgcmVtYWluZGVyRGlnaXQpOworICAgICAgICBhYnNv
bHV0ZURpdldpdGhEaWdpdERpdmlzb3IoZ2xvYmFsT2JqZWN0LCB2bSwgeCwgZGl2aXNvciwgbnVs
bHB0ciwgcmVtYWluZGVyRGlnaXQpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKKwogICAgICAgICBpZiAoIXJlbWFpbmRlckRpZ2l0KQotICAgICAgICAgICAg
cmV0dXJuIHplcm9JbXBsKHZtKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgemVyb0ltcGwoZ2xvYmFsT2JqZWN0KSk7CiAKLSAgICAgICAgcmVtYWluZGVyID0gY3JlYXRl
V2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgMSk7CisgICAgICAgIHJlbWFpbmRlciA9IGNyZWF0ZVdp
dGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCAxKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CiAgICAgICAgIHJlbWFpbmRlci0+c2V0RGlnaXQoMCwgcmVtYWluZGVy
RGlnaXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGFic29sdXRlRGl2V2l0aEJpZ0ludERpdmlz
b3IoZ2xvYmFsT2JqZWN0LCB4LCB5LnRvSGVhcEJpZ0ludCh2bSksIG51bGxwdHIsICZyZW1haW5k
ZXIpOworICAgICAgICBKU0JpZ0ludCogeUJpZ0ludCA9IHkudG9IZWFwQmlnSW50KGdsb2JhbE9i
amVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAg
ICAgICBhYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKGdsb2JhbE9iamVjdCwgeCwgeUJpZ0lu
dCwgbnVsbHB0ciwgJnJlbWFpbmRlcik7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIG51bGxwdHIpOwogICAgIH0KIAogICAgIHJlbWFpbmRlci0+c2V0U2lnbih4LnNpZ24oKSk7
Ci0gICAgcmV0dXJuIHJlbWFpbmRlci0+cmlnaHRUcmltKHZtKTsKKyAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIHJlbWFpbmRlci0+cmlnaHRUcmltKGdsb2JhbE9iamVjdCkpOwogfQogSlNW
YWx1ZSBKU0JpZ0ludDo6cmVtYWluZGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
QmlnSW50KiB4LCBKU0JpZ0ludCogeSkKIHsKQEAgLTcwOSw5ICs3ODgsMTMgQEAgSlNWYWx1ZSBK
U0JpZ0ludDo6cmVtYWluZGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3Qg
eCwgSlNCaWdJbnQqIHkKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgogSlNCaWdJbnQ6
OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmluY0ltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQmlnSW50SW1wbCB4KQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoIXguc2ln
bigpKQotICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCB4LCBTaWdu
T3B0aW9uOjpVbnNpZ25lZCk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJz
b2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCB4LCBTaWduT3B0aW9uOjpVbnNpZ25lZCkpOwogICAg
IEpTQmlnSW50KiByZXN1bHQgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHgsIHgubGVu
Z3RoKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIGlm
IChyZXN1bHQtPmlzWmVybygpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIHJlc3VsdC0+
c2V0U2lnbih0cnVlKTsKQEAgLTc0Niw3ICs4MjksNiBAQCBKU1ZhbHVlIEpTQmlnSW50OjpkZWMo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgpCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgogSlNCaWdJbnQ6OkltcGxS
ZXN1bHQgSlNCaWdJbnQ6OmFkZEltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmln
SW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgYm9vbCB4U2lnbiA9IHguc2lnbigpOwogCiAgICAgLy8geCArIHkgPT0geCAr
IHkKQEAgLTc1OCw5ICs4NDAsOSBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YWRk
SW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMQogICAgIC8vIC14
ICsgeSA9PSB5IC0geCA9PSAtKHggLSB5KQogICAgIENvbXBhcmlzb25SZXN1bHQgY29tcGFyaXNv
blJlc3VsdCA9IGFic29sdXRlQ29tcGFyZSh4LCB5KTsKICAgICBpZiAoY29tcGFyaXNvblJlc3Vs
dCA9PSBDb21wYXJpc29uUmVzdWx0OjpHcmVhdGVyVGhhbiB8fCBjb21wYXJpc29uUmVzdWx0ID09
IENvbXBhcmlzb25SZXN1bHQ6OkVxdWFsKQotICAgICAgICByZXR1cm4gYWJzb2x1dGVTdWIodm0s
IHgsIHksIHhTaWduKTsKKyAgICAgICAgcmV0dXJuIGFic29sdXRlU3ViKGdsb2JhbE9iamVjdCwg
eCwgeSwgeFNpZ24pOwogCi0gICAgcmV0dXJuIGFic29sdXRlU3ViKHZtLCB5LCB4LCAheFNpZ24p
OworICAgIHJldHVybiBhYnNvbHV0ZVN1YihnbG9iYWxPYmplY3QsIHksIHgsICF4U2lnbik7CiB9
CiBKU1ZhbHVlIEpTQmlnSW50OjphZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNC
aWdJbnQqIHgsIEpTQmlnSW50KiB5KQogewpAQCAtNzgwLDcgKzg2Miw2IEBAIEpTVmFsdWUgSlNC
aWdJbnQ6OmFkZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIEpTQmln
SW50KiB5KQogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJ
bXBsMj4KIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpzdWJJbXBsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7Ci0gICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGJvb2wgeFNpZ24gPSB4LnNpZ24oKTsK
ICAgICBpZiAoeFNpZ24gIT0geS5zaWduKCkpIHsKICAgICAgICAgLy8geCAtICgteSkgPT0geCAr
IHkKQEAgLTc5MSw5ICs4NzIsOSBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6c3Vi
SW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMQogICAgIC8vICgt
eCkgLSAoLXkpID09IHkgLSB4ID09IC0oeCAtIHkpCiAgICAgQ29tcGFyaXNvblJlc3VsdCBjb21w
YXJpc29uUmVzdWx0ID0gYWJzb2x1dGVDb21wYXJlKHgsIHkpOwogICAgIGlmIChjb21wYXJpc29u
UmVzdWx0ID09IENvbXBhcmlzb25SZXN1bHQ6OkdyZWF0ZXJUaGFuIHx8IGNvbXBhcmlzb25SZXN1
bHQgPT0gQ29tcGFyaXNvblJlc3VsdDo6RXF1YWwpCi0gICAgICAgIHJldHVybiBhYnNvbHV0ZVN1
Yih2bSwgeCwgeSwgeFNpZ24pOworICAgICAgICByZXR1cm4gYWJzb2x1dGVTdWIoZ2xvYmFsT2Jq
ZWN0LCB4LCB5LCB4U2lnbik7CiAKLSAgICByZXR1cm4gYWJzb2x1dGVTdWIodm0sIHksIHgsICF4
U2lnbik7CisgICAgcmV0dXJuIGFic29sdXRlU3ViKGdsb2JhbE9iamVjdCwgeSwgeCwgIXhTaWdu
KTsKIH0KIAogSlNWYWx1ZSBKU0JpZ0ludDo6c3ViKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKQEAgLTgxNywxMCArODk4LDggQEAgSlNCaWdJ
bnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VBbmRJbXBsKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEJpZ0kKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCF4LnNpZ24o
KSAmJiAheS5zaWduKCkpIHsKLSAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1
cm4gYWJzb2x1dGVBbmQodm0sIHgsIHkpOwotICAgIH0KKyAgICBpZiAoIXguc2lnbigpICYmICF5
LnNpZ24oKSkKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBhYnNvbHV0ZUFuZChn
bG9iYWxPYmplY3QsIHgsIHkpKTsKICAgICAKICAgICBpZiAoeC5zaWduKCkgJiYgeS5zaWduKCkp
IHsKICAgICAgICAgaW50IHJlc3VsdExlbmd0aCA9IHN0ZDo6bWF4KHgubGVuZ3RoKCksIHkubGVu
Z3RoKCkpICsgMTsKQEAgLTgzMSw5ICs5MTAsOSBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0Jp
Z0ludDo6Yml0d2lzZUFuZEltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSQog
CiAgICAgICAgIEpTQmlnSW50KiB5MSA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeSwg
eS5sZW5ndGgoKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIp
OwotICAgICAgICByZXN1bHQgPSBhYnNvbHV0ZU9yKHZtLCBIZWFwQmlnSW50SW1wbCB7IHJlc3Vs
dCB9LCBIZWFwQmlnSW50SW1wbCB7IHkxIH0pOwotICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0g
ICAgICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBs
IHsgcmVzdWx0IH0sIFNpZ25PcHRpb246OlNpZ25lZCk7CisgICAgICAgIHJlc3VsdCA9IGFic29s
dXRlT3IoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBIZWFwQmlnSW50
SW1wbCB7IHkxIH0pOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRy
KTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBhYnNvbHV0ZUFkZE9uZShnbG9i
YWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIFNpZ25PcHRpb246OlNpZ25lZCkp
OwogICAgIH0KIAogICAgIEFTU0VSVCh4LnNpZ24oKSAhPSB5LnNpZ24oKSk7CkBAIC04NDMsNyAr
OTIyLDcgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VBbmRJbXBsKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0kKICAgICAgICAgQVNTRVJUKHkuc2lnbigp
KTsgCiAgICAgICAgIEpTQmlnSW50KiB5MSA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwg
eSwgeS5sZW5ndGgoKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOwotICAgICAgICByZXR1cm4gYWJzb2x1dGVBbmROb3Qodm0sIHgsIEhlYXBCaWdJbnRJbXBs
IHsgeTEgfSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVBbmRO
b3QoZ2xvYmFsT2JqZWN0LCB4LCBIZWFwQmlnSW50SW1wbCB7IHkxIH0pKTsKICAgICB9OwogICAg
IGlmICh4LnNpZ24oKSkKICAgICAgICAgcmV0dXJuIGNvbXB1dGVSZXN1bHQoeSwgeCk7CkBAIC04
NzMsMTAgKzk1Miw4IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpiaXR3aXNlT3JJ
bXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0luCiAKICAgICB1bnNpZ25lZCBy
ZXN1bHRMZW5ndGggPSBzdGQ6Om1heCh4Lmxlbmd0aCgpLCB5Lmxlbmd0aCgpKTsKIAotICAgIGlm
ICgheC5zaWduKCkgJiYgIXkuc2lnbigpKSB7Ci0gICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAg
ICAgICAgcmV0dXJuIGFic29sdXRlT3Iodm0sIHgsIHkpOwotICAgIH0KKyAgICBpZiAoIXguc2ln
bigpICYmICF5LnNpZ24oKSkKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBhYnNv
bHV0ZU9yKGdsb2JhbE9iamVjdCwgeCwgeSkpOwogICAgIAogICAgIGlmICh4LnNpZ24oKSAmJiB5
LnNpZ24oKSkgewogICAgICAgICAvLyAoLXgpIHwgKC15KSA9PSB+KHgtMSkgfCB+KHktMSkgPT0g
figoeC0xKSAmICh5LTEpKQpAQCAtODg1LDExICs5NjIsOSBAQCBKU0JpZ0ludDo6SW1wbFJlc3Vs
dCBKU0JpZ0ludDo6Yml0d2lzZU9ySW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBC
aWdJbgogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAg
ICAgSlNCaWdJbnQqIHkxID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCB5Lmxlbmd0
aCgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0gICAg
ICAgIHJlc3VsdCA9IGFic29sdXRlQW5kKHZtLCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBI
ZWFwQmlnSW50SW1wbCB7IHkxIH0pOworICAgICAgICByZXN1bHQgPSBhYnNvbHV0ZUFuZChnbG9i
YWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIEhlYXBCaWdJbnRJbXBsIHsgeTEg
fSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotCi0gICAg
ICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2Jh
bE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgU2lnbk9wdGlvbjo6U2lnbmVkKTsK
KyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBhYnNvbHV0ZUFkZE9uZShnbG9iYWxP
YmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIFNpZ25PcHRpb246OlNpZ25lZCkpOwog
ICAgIH0KICAgICAKICAgICBBU1NFUlQoeC5zaWduKCkgIT0geS5zaWduKCkpOwpAQCAtOTAxLDEw
ICs5NzYsOSBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6Yml0d2lzZU9ySW1wbChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbgogCiAgICAgICAgIEpTQmlnSW50KiBy
ZXN1bHQgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHksIHJlc3VsdExlbmd0aCk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotICAgICAgICByZXN1
bHQgPSBhYnNvbHV0ZUFuZE5vdCh2bSwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgeCk7Ci0K
LSAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUo
Z2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWdu
ZWQpOworICAgICAgICByZXN1bHQgPSBhYnNvbHV0ZUFuZE5vdChnbG9iYWxPYmplY3QsIEhlYXBC
aWdJbnRJbXBsIHsgcmVzdWx0IH0sIHgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBhYnNvbHV0
ZUFkZE9uZShnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIFNpZ25PcHRp
b246OlNpZ25lZCkpOwogICAgIH07CiAKICAgICBpZiAoeC5zaWduKCkpCkBAIC05MzMsMTAgKzEw
MDcsOCBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6Yml0d2lzZVhvckltcGwoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSQogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAg
ICBpZiAoIXguc2lnbigpICYmICF5LnNpZ24oKSkgewotICAgICAgICBzY29wZS5yZWxlYXNlKCk7
Ci0gICAgICAgIHJldHVybiBhYnNvbHV0ZVhvcih2bSwgeCwgeSk7Ci0gICAgfQorICAgIGlmICgh
eC5zaWduKCkgJiYgIXkuc2lnbigpKQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IGFic29sdXRlWG9yKGdsb2JhbE9iamVjdCwgeCwgeSkpOwogICAgIAogICAgIGlmICh4LnNpZ24o
KSAmJiB5LnNpZ24oKSkgewogICAgICAgICBpbnQgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoeC5s
ZW5ndGgoKSwgeS5sZW5ndGgoKSk7CkBAIC05NDYsOSArMTAxOCw3IEBAIEpTQmlnSW50OjpJbXBs
UmVzdWx0IEpTQmlnSW50OjpiaXR3aXNlWG9ySW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBCaWdJCiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwog
ICAgICAgICBKU0JpZ0ludCogeTEgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHksIHku
bGVuZ3RoKCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsK
LQotICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBhYnNvbHV0ZVhvcih2
bSwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgSGVhcEJpZ0ludEltcGwgeyB5MSB9KTsKKyAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBhYnNvbHV0ZVhvcihnbG9iYWxPYmplY3Qs
IEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIEhlYXBCaWdJbnRJbXBsIHsgeTEgfSkpOwogICAg
IH0KICAgICBBU1NFUlQoeC5zaWduKCkgIT0geS5zaWduKCkpOwogICAgIGludCByZXN1bHRMZW5n
dGggPSBzdGQ6Om1heCh4Lmxlbmd0aCgpLCB5Lmxlbmd0aCgpKSArIDE7CkBAIC05NjAsOSArMTAz
MCw5IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpiaXR3aXNlWG9ySW1wbChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJCiAgICAgICAgIEpTQmlnSW50KiByZXN1bHQg
PSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHksIHJlc3VsdExlbmd0aCk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCi0gICAgICAgIHJlc3VsdCA9
IGFic29sdXRlWG9yKHZtLCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCB4KTsKLSAgICAgICAg
c2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2Jq
ZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpOworICAg
ICAgICByZXN1bHQgPSBhYnNvbHV0ZVhvcihnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsg
cmVzdWx0IH0sIHgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRy
KTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBhYnNvbHV0ZUFkZE9uZShnbG9i
YWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIFNpZ25PcHRpb246OlNpZ25lZCkp
OwogICAgIH07CiAgICAgCiAgICAgLy8gQXNzdW1lIHRoYXQgeCBpcyB0aGUgcG9zaXRpdmUgQmln
SW50LgpAQCAtMTM3NCwyMSArMTQ0NCwyNSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1w
bDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgogSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6
OmFic29sdXRlQWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgs
IEJpZ0ludEltcGwyIHksIGJvb2wgcmVzdWx0U2lnbikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgaWYgKHgubGVuZ3RoKCkgPCB5Lmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gYWJzb2x1
dGVBZGQoZ2xvYmFsT2JqZWN0LCB5LCB4LCByZXN1bHRTaWduKTsKKyAgICAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBhYnNvbHV0ZUFkZChnbG9iYWxPYmplY3QsIHksIHgsIHJlc3VsdFNp
Z24pKTsKIAogICAgIGlmICh4LmlzWmVybygpKSB7CiAgICAgICAgIEFTU0VSVCh5LmlzWmVybygp
KTsKICAgICAgICAgcmV0dXJuIHg7CiAgICAgfQogCi0gICAgaWYgKHkuaXNaZXJvKCkpCi0gICAg
ICAgIHJldHVybiByZXN1bHRTaWduID09IHguc2lnbigpID8geCA6IHVuYXJ5TWludXNJbXBsKHZt
LCB4KTsKKyAgICBpZiAoeS5pc1plcm8oKSkgeworICAgICAgICBpZiAocmVzdWx0U2lnbiA9PSB4
LnNpZ24oKSkKKyAgICAgICAgICAgIHJldHVybiB4OworICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIHVuYXJ5TWludXNJbXBsKGdsb2JhbE9iamVjdCwgeCkpOworICAgIH0KIAotICAg
IEpTQmlnSW50KiByZXN1bHQgPSBKU0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aChnbG9iYWxP
YmplY3QsIHgubGVuZ3RoKCkgKyAxKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFs
T2JqZWN0LCB4Lmxlbmd0aCgpICsgMSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
bnVsbHB0cik7CisgICAgQVNTRVJUKHJlc3VsdCk7CiAgICAgRGlnaXQgY2FycnkgPSAwOwogICAg
IHVuc2lnbmVkIGkgPSAwOwogICAgIGZvciAoOyBpIDwgeS5sZW5ndGgoKTsgaSsrKSB7CkBAIC0x
NDA5LDEyICsxNDgzLDE1IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjphYnNvbHV0
ZUFkZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJCiAgICAgcmVzdWx0LT5z
ZXREaWdpdChpLCBjYXJyeSk7CiAgICAgcmVzdWx0LT5zZXRTaWduKHJlc3VsdFNpZ24pOwogCi0g
ICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdCkpOwogfQogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgotSlNCaWdJbnQ6Oklt
cGxSZXN1bHQgSlNCaWdJbnQ6OmFic29sdXRlU3ViKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwgQmln
SW50SW1wbDIgeSwgYm9vbCByZXN1bHRTaWduKQorSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJ
bnQ6OmFic29sdXRlU3ViKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwx
IHgsIEJpZ0ludEltcGwyIHksIGJvb2wgcmVzdWx0U2lnbikKIHsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgQ29tcGFyaXNvblJlc3VsdCBjb21wYXJpc29uUmVzdWx0ID0gYWJzb2x1dGVDb21w
YXJlKHgsIHkpOwogICAgIEFTU0VSVCh4Lmxlbmd0aCgpID49IHkubGVuZ3RoKCkpOwogICAgIEFT
U0VSVChjb21wYXJpc29uUmVzdWx0ID09IENvbXBhcmlzb25SZXN1bHQ6OkdyZWF0ZXJUaGFuIHx8
IGNvbXBhcmlzb25SZXN1bHQgPT0gQ29tcGFyaXNvblJlc3VsdDo6RXF1YWwpOwpAQCAtMTQyNCwx
MyArMTUwMSwxNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YWJzb2x1dGVTdWIo
Vk0mIHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LAogICAgICAgICByZXR1cm4geDsK
ICAgICB9CiAKLSAgICBpZiAoeS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdFNpZ24g
PT0geC5zaWduKCkgPyBJbXBsUmVzdWx0IHsgeCB9IDogSlNCaWdJbnQ6OnVuYXJ5TWludXNJbXBs
KHZtLCB4KTsKKyAgICBpZiAoeS5pc1plcm8oKSkgeworICAgICAgICBpZiAocmVzdWx0U2lnbiA9
PSB4LnNpZ24oKSkKKyAgICAgICAgICAgIHJldHVybiBJbXBsUmVzdWx0IHsgeCB9OworICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTQmlnSW50Ojp1bmFyeU1pbnVzSW1wbChnbG9i
YWxPYmplY3QsIHgpKTsKKyAgICB9CiAKICAgICBpZiAoY29tcGFyaXNvblJlc3VsdCA9PSBDb21w
YXJpc29uUmVzdWx0OjpFcXVhbCkKLSAgICAgICAgcmV0dXJuIHplcm9JbXBsKHZtKTsKKyAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB6ZXJvSW1wbChnbG9iYWxPYmplY3QpKTsKIAot
ICAgIEpTQmlnSW50KiByZXN1bHQgPSBKU0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tl
ZCh2bSwgeC5sZW5ndGgoKSk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5n
dGgoZ2xvYmFsT2JqZWN0LCB4Lmxlbmd0aCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKIAogICAgIERpZ2l0IGJvcnJvdyA9IDA7CiAgICAgdW5zaWduZWQgaSA9
IDA7CkBAIC0xNDUxLDcgKzE1MzIsNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6
YWJzb2x1dGVTdWIoVk0mIHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LAogCiAgICAg
QVNTRVJUKCFib3Jyb3cpOwogICAgIHJlc3VsdC0+c2V0U2lnbihyZXN1bHRTaWduKTsKLSAgICBy
ZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0odm0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgcmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIC8vIERpdmlkZXMge3h9
IGJ5IHtkaXZpc29yfSwgcmV0dXJuaW5nIHRoZSByZXN1bHQgaW4ge3F1b3RpZW50fSBhbmQge3Jl
bWFpbmRlcn0uCkBAIC0xNDYyLDIyICsxNTQzLDQ0IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpT
QmlnSW50OjphYnNvbHV0ZVN1YihWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHks
CiAvLyB7cXVvdGllbnR9IGNhbiBiZSB0aGUgc2FtZSBhcyB7eH0gZm9yIGFuIGluLXBsYWNlIGRp
dmlzaW9uLiB7cXVvdGllbnR9IGNhbgogLy8gYWxzbyBiZSBudWxscHRyIGlmIHRoZSBjYWxsZXIg
aXMgb25seSBpbnRlcmVzdGVkIGluIHRoZSByZW1haW5kZXIuCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
QmlnSW50SW1wbD4KLXZvaWQgSlNCaWdJbnQ6OmFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcihW
TSYgdm0sIEJpZ0ludEltcGwgeCwgRGlnaXQgZGl2aXNvciwgSlNCaWdJbnQqKiBxdW90aWVudCwg
RGlnaXQmIHJlbWFpbmRlcikKK2Jvb2wgSlNCaWdJbnQ6OmFic29sdXRlRGl2V2l0aERpZ2l0RGl2
aXNvcihKU0dsb2JhbE9iamVjdCogbnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBWTSYgdm0sIEJp
Z0ludEltcGwgeCwgRGlnaXQgZGl2aXNvciwgSlNCaWdJbnQqKiBxdW90aWVudCwgRGlnaXQmIHJl
bWFpbmRlcikKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
ICAgICBBU1NFUlQoZGl2aXNvcik7CiAKICAgICBBU1NFUlQoIXguaXNaZXJvKCkpOwogICAgIHJl
bWFpbmRlciA9IDA7CiAgICAgaWYgKGRpdmlzb3IgPT0gMSkgewotICAgICAgICBpZiAocXVvdGll
bnQpCi0gICAgICAgICAgICAqcXVvdGllbnQgPSB4LnRvSGVhcEJpZ0ludCh2bSk7Ci0gICAgICAg
IHJldHVybjsKKyAgICAgICAgaWYgKHF1b3RpZW50KSB7CisgICAgICAgICAgICBKU0JpZ0ludCog
cmVzdWx0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGlmIChudWxsT3JHbG9iYWxPYmplY3RGb3JP
T00pIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB4LnRvSGVhcEJpZ0ludChudWxsT3JHbG9i
YWxPYmplY3RGb3JPT00pOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGZhbHNlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmVzdWx0
ID0geC50cnlUb0hlYXBCaWdJbnQodm0pOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWSgh
cmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgKnF1b3RpZW50ID0gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHgubGVuZ3RoKCk7CiAg
ICAgaWYgKHF1b3RpZW50KSB7Ci0gICAgICAgIGlmICgqcXVvdGllbnQgPT0gbnVsbHB0cikKLSAg
ICAgICAgICAgICpxdW90aWVudCA9IEpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2Vk
KHZtLCBsZW5ndGgpOworICAgICAgICBpZiAoKnF1b3RpZW50ID09IG51bGxwdHIpIHsKKyAgICAg
ICAgICAgIEpTQmlnSW50KiByZXN1bHQgPSBudWxscHRyOworICAgICAgICAgICAgaWYgKG51bGxP
ckdsb2JhbE9iamVjdEZvck9PTSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNyZWF0ZVdp
dGhMZW5ndGgobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBsZW5ndGgpOworICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ5Q3JlYXRlV2l0aExlbmd0aCh2bSwgbGVu
Z3RoKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpxdW90
aWVudCA9IHJlc3VsdDsKKyAgICAgICAgfQogCiAgICAgICAgIGZvciAoaW50IGkgPSBsZW5ndGgg
LSAxOyBpID49IDA7IGktLSkgewogICAgICAgICAgICAgRGlnaXQgcSA9IGRpZ2l0RGl2KHJlbWFp
bmRlciwgeC5kaWdpdChpKSwgZGl2aXNvciwgcmVtYWluZGVyKTsKQEAgLTE0ODcsNiArMTU5MCw3
IEBAIHZvaWQgSlNCaWdJbnQ6OmFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcihWTSYgdm0sIEJp
Z0ludEltcGwgeCwgRGlnaXQgZGl2aXNvciwKICAgICAgICAgZm9yIChpbnQgaSA9IGxlbmd0aCAt
IDE7IGkgPj0gMDsgaS0tKQogICAgICAgICAgICAgZGlnaXREaXYocmVtYWluZGVyLCB4LmRpZ2l0
KGkpLCBkaXZpc29yLCByZW1haW5kZXIpOwogICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
Ly8gRGl2aWRlcyB7ZGl2aWRlbmR9IGJ5IHtkaXZpc29yfSwgcmV0dXJuaW5nIHRoZSByZXN1bHQg
aW4ge3F1b3RpZW50fSBhbmQKQEAgLTE1MTIsMTIgKzE2MTYsMTQgQEAgdm9pZCBKU0JpZ0ludDo6
YWJzb2x1dGVEaXZXaXRoQmlnSW50RGl2aXNvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBCaWdJbnQKICAgICAKICAgICAvLyBUaGUgcXVvdGllbnQgdG8gYmUgY29tcHV0ZWQuCiAgICAg
SlNCaWdJbnQqIHEgPSBudWxscHRyOwotICAgIGlmIChxdW90aWVudCAhPSBudWxscHRyKQotICAg
ICAgICBxID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZChnbG9iYWxPYmplY3QtPnZtKCksIG0g
KyAxKTsKKyAgICBpZiAocXVvdGllbnQgIT0gbnVsbHB0cikgeworICAgICAgICBxID0gY3JlYXRl
V2l0aExlbmd0aChnbG9iYWxPYmplY3QsIG0gKyAxKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgdm9pZCgpKTsKKyAgICB9CiAgICAgCiAgICAgLy8gSW4gZWFjaCBpdGVyYXRp
b24sIHtxaGF0dn0gaG9sZHMge2Rpdmlzb3J9ICoge2N1cnJlbnQgcXVvdGllbnQgZGlnaXR9Lgog
ICAgIC8vICJ2IiBpcyB0aGUgYm9vaydzIG5hbWUgZm9yIHtkaXZpc29yfSwgInFoYXQiIHRoZSBj
dXJyZW50IHF1b3RpZW50IGRpZ2l0LgotICAgIEpTQmlnSW50KiBxaGF0diA9IHRyeUNyZWF0ZVdp
dGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCBuICsgMSk7CisgICAgSlNCaWdJbnQqIHFoYXR2ID0gY3Jl
YXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIG4gKyAxKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIAogICAgIC8vIEQxLgpAQCAtMTY2NywxNCArMTc3Mywx
NiBAQCB2b2lkIEpTQmlnSW50OjppbnBsYWNlUmlnaHRTaGlmdCh1bnNpZ25lZCBzaGlmdCkKIHRl
bXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgogSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0
ZUxlZnRTaGlmdEFsd2F5c0NvcHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50
SW1wbCB4LCB1bnNpZ25lZCBzaGlmdCwgTGVmdFNoaWZ0TW9kZSBtb2RlKQogeworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBBU1NFUlQoc2hpZnQgPCBkaWdpdEJpdHMpOwogICAgIEFTU0VSVCgh
eC5pc1plcm8oKSk7CiAKICAgICB1bnNpZ25lZCBuID0geC5sZW5ndGgoKTsKICAgICB1bnNpZ25l
ZCByZXN1bHRMZW5ndGggPSBtb2RlID09IExlZnRTaGlmdE1vZGU6OkFsd2F5c0FkZE9uZURpZ2l0
ID8gbiArIDEgOiBuOwotICAgIEpTQmlnSW50KiByZXN1bHQgPSB0cnlDcmVhdGVXaXRoTGVuZ3Ro
KGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGgo
Z2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAKICAgICBpZiAoIXNoaWZ0KSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBuOyBpKyspCkBAIC0xNzE2LDggKzE4MjQsMTEgQEAgSlNCaWdJbnQqIEpTQmlnSW50
OjphYnNvbHV0ZUxlZnRTaGlmdEFsd2F5c0NvcHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQmkKIC8vICAgICAgICAgICAgICAgICAgIHYgICAgIHYgICAgIHYgICAgIHYKIC8vIHJlc3Vs
dDogWyAgMCBdWyB4MyBdWyByMiBdWyByMSBdWyByMCBdCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmln
SW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyLCB0eXBlbmFtZSBCaXR3aXNlT3A+Ci1pbmxp
bmUgSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUJpdHdpc2VPcChWTSYgdm0sIEJpZ0ludElt
cGwxIHgsIEJpZ0ludEltcGwyIHksIEV4dHJhRGlnaXRzSGFuZGxpbmcgZXh0cmFEaWdpdHMsIEJp
dHdpc2VPcCYmIG9wKQoraW5saW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVCaXR3aXNl
T3AoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1w
bDIgeSwgRXh0cmFEaWdpdHNIYW5kbGluZyBleHRyYURpZ2l0cywgQml0d2lzZU9wJiYgb3ApCiB7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIHVuc2lnbmVkIHhMZW5ndGggPSB4Lmxlbmd0aCgp
OwogICAgIHVuc2lnbmVkIHlMZW5ndGggPSB5Lmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIG51bVBh
aXJzID0geUxlbmd0aDsKQEAgLTE3MzAsNyArMTg0MSw4IEBAIGlubGluZSBKU0JpZ0ludCogSlNC
aWdJbnQ6OmFic29sdXRlQml0d2lzZU9wKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1w
bDIKICAgICBBU1NFUlQobnVtUGFpcnMgPT0gc3RkOjptaW4oeExlbmd0aCwgeUxlbmd0aCkpOwog
ICAgIEFTU0VSVChtYXhMZW5ndGggPT0gc3RkOjptYXgoeExlbmd0aCwgeUxlbmd0aCkpOwogICAg
IHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IGV4dHJhRGlnaXRzID09IEV4dHJhRGlnaXRzSGFuZGxp
bmc6OkNvcHkgPyBtYXhMZW5ndGggOiBudW1QYWlyczsKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0g
Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgcmVzdWx0TGVuZ3RoKTsKKyAgICBKU0JpZ0lu
dCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgdW5zaWduZWQg
aSA9IDA7CiAgICAgZm9yICg7IGkgPCBudW1QYWlyczsgaSsrKQogICAgICAgICByZXN1bHQtPnNl
dERpZ2l0KGksIG9wKHguZGlnaXQoaSksIHkuZGlnaXQoaSkpKTsKQEAgLTE3NDgsNTggKzE4NjAs
NjUgQEAgaW5saW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVCaXR3aXNlT3AoVk0mIHZt
LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMgogICAgIGZvciAoOyBpIDwgcmVzdWx0TGVuZ3Ro
OyBpKyspCiAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgMCk7CiAKLSAgICByZXR1cm4gcmVz
dWx0LT5yaWdodFRyaW0odm0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0
LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJ
bnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+Ci1KU0JpZ0ludCogSlNCaWdJbnQ6OmFic29s
dXRlQW5kKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKK0pTQmlnSW50KiBK
U0JpZ0ludDo6YWJzb2x1dGVBbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50
SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsKICAgICBhdXRvIGRpZ2l0T3BlcmF0aW9uID0gW10o
RGlnaXQgYSwgRGlnaXQgYikgewogICAgICAgICByZXR1cm4gYSAmIGI7CiAgICAgfTsKLSAgICBy
ZXR1cm4gYWJzb2x1dGVCaXR3aXNlT3Aodm0sIHgsIHksIEV4dHJhRGlnaXRzSGFuZGxpbmc6OlNr
aXAsIGRpZ2l0T3BlcmF0aW9uKTsKKyAgICByZXR1cm4gYWJzb2x1dGVCaXR3aXNlT3AoZ2xvYmFs
T2JqZWN0LCB4LCB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nOjpTa2lwLCBkaWdpdE9wZXJhdGlvbik7
CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1w
bDI+Ci1KU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlT3IoVk0mIHZtLCBCaWdJbnRJbXBsMSB4
LCBCaWdJbnRJbXBsMiB5KQorSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZU9yKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAg
ICAgYXV0byBkaWdpdE9wZXJhdGlvbiA9IFtdKERpZ2l0IGEsIERpZ2l0IGIpIHsKICAgICAgICAg
cmV0dXJuIGEgfCBiOwogICAgIH07Ci0gICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9wKHZtLCB4
LCB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nOjpDb3B5LCBkaWdpdE9wZXJhdGlvbik7CisgICAgcmV0
dXJuIGFic29sdXRlQml0d2lzZU9wKGdsb2JhbE9iamVjdCwgeCwgeSwgRXh0cmFEaWdpdHNIYW5k
bGluZzo6Q29weSwgZGlnaXRPcGVyYXRpb24pOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmln
SW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgotSlNCaWdJbnQqIEpTQmlnSW50OjphYnNv
bHV0ZUFuZE5vdChWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCitKU0JpZ0lu
dCogSlNCaWdJbnQ6OmFic29sdXRlQW5kTm90KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgLy8geCAmIH55CiAKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCiAgICAgdW5zaWduZWQgeExlbmd0aCA9IHgubGVuZ3RoKCk7CiAgICAg
dW5zaWduZWQgeUxlbmd0aCA9IHkubGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3Ro
ID0geExlbmd0aDsKIAotICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5j
aGVja2VkKHZtLCByZXN1bHRMZW5ndGgpOworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVX
aXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICB1bnNpZ25lZCBpID0gMDsKICAgICBmb3IgKDsg
aSA8IHN0ZDo6bWluKHhMZW5ndGgsIHlMZW5ndGgpOyBpKyspCiAgICAgICAgIHJlc3VsdC0+c2V0
RGlnaXQoaSwgeC5kaWdpdChpKSAmIH55LmRpZ2l0KGkpKTsKICAgICBmb3IgKDsgaSA8IHJlc3Vs
dExlbmd0aDsgKytpKQogICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIHguZGlnaXQoaSkpOwog
Ci0gICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKKyAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdCkpOwogfQogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgotSlNCaWdJbnQq
IEpTQmlnSW50OjphYnNvbHV0ZVhvcihWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwy
IHkpCitKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlWG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgYXV0byBkaWdp
dE9wZXJhdGlvbiA9IFtdKERpZ2l0IGEsIERpZ2l0IGIpIHsKICAgICAgICAgcmV0dXJuIGEgXiBi
OwogICAgIH07Ci0gICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9wKHZtLCB4LCB5LCBFeHRyYURp
Z2l0c0hhbmRsaW5nOjpDb3B5LCBkaWdpdE9wZXJhdGlvbik7CisgICAgcmV0dXJuIGFic29sdXRl
Qml0d2lzZU9wKGdsb2JhbE9iamVjdCwgeCwgeSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6Q29weSwg
ZGlnaXRPcGVyYXRpb24pOwogfQogICAgIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+
CiBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQWRkT25lKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEJpZ0ludEltcGwgeCwgU2lnbk9wdGlvbiBzaWduT3B0aW9uKQogeworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKICAgICB1bnNpZ25lZCBpbnB1dExlbmd0aCA9IHgubGVuZ3RoKCk7CiAg
ICAgLy8gVGhlIGFkZGl0aW9uIHdpbGwgb3ZlcmZsb3cgaW50byBhIG5ldyBkaWdpdCBpZiBhbGwg
ZXhpc3RpbmcgZGlnaXRzIGFyZQogICAgIC8vIGF0IG1heGltdW0uCkBAIC0xODEyLDkgKzE5MzEs
OCBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQWRkT25lKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCwgUwogICAgIH0KIAogICAgIHVuc2lnbmVkIHJlc3Vs
dExlbmd0aCA9IGlucHV0TGVuZ3RoICsgd2lsbE92ZXJmbG93OwotICAgIEpTQmlnSW50KiByZXN1
bHQgPSB0cnlDcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKLSAg
ICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgSlNCaWdJbnQqIHJl
c3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgRGlnaXQgY2Fycnkg
PSAxOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgaSsrKSB7CkBA
IC0xODI4LDcgKzE5NDYsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQWRkT25lKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCwgUwogICAgICAgICBBU1NF
UlQoIWNhcnJ5KTsKIAogICAgIHJlc3VsdC0+c2V0U2lnbihzaWduT3B0aW9uID09IFNpZ25PcHRp
b246OlNpZ25lZCk7Ci0gICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdC0+
dm0oKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShn
bG9iYWxPYmplY3QpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CkBAIC0x
ODM5LDcgKzE5NTcsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlU3ViT25lKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCwgdQogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gdHJ5Q3JlYXRlV2l0aExlbmd0aChnbG9iYWxP
YmplY3QsIHJlc3VsdExlbmd0aCk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhM
ZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0geC5sZW5ndGgoKTsK
QEAgLTE4NTMsNyArMTk3MSw3IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVTdWJPbmUo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbCB4LCB1CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gbGVuZ3RoOyBpIDwgcmVzdWx0TGVuZ3RoOyBpKyspCiAgICAgICAgIHJlc3Vs
dC0+c2V0RGlnaXQoaSwgYm9ycm93KTsKIAotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2
bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9i
YWxPYmplY3QpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFt
ZSBCaWdJbnRJbXBsMj4KQEAgLTE4NzksNyArMTk5Nyw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0
IEpTQmlnSW50OjpsZWZ0U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIEpTQmlnSW50KiByZXN1
bHQgPSB0cnlDcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKKyAg
ICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3Vs
dExlbmd0aCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAg
aWYgKCFiaXRzU2hpZnQpIHsKICAgICAgICAgdW5zaWduZWQgaSA9IDA7CkBAIC0xOTA2LDI1ICsy
MDI0LDI3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpsZWZ0U2hpZnRCeUFic29s
dXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgfQogCiAgICAgcmVzdWx0LT5z
ZXRTaWduKHguc2lnbigpKTsKLSAgICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0odm0pOworICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0
KSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50
SW1wbDI+CiBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5QWJzb2x1
dGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1w
bDIgeSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgdW5zaWduZWQgbGVuZ3RoID0geC5s
ZW5ndGgoKTsKICAgICBib29sIHNpZ24gPSB4LnNpZ24oKTsKICAgICBhdXRvIG9wdGlvbmFsU2hp
ZnQgPSB0b1NoaWZ0QW1vdW50KHkpOwogICAgIGlmICghb3B0aW9uYWxTaGlmdCkKLSAgICAgICAg
cmV0dXJuIHJpZ2h0U2hpZnRCeU1heGltdW0odm0sIHNpZ24pOworICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIHJpZ2h0U2hpZnRCeU1heGltdW0oZ2xvYmFsT2JqZWN0LCBzaWduKSk7
CiAKICAgICBEaWdpdCBzaGlmdCA9ICpvcHRpb25hbFNoaWZ0OwogICAgIHVuc2lnbmVkIGRpZ2l0
YWxTaGlmdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaGlmdCAvIGRpZ2l0Qml0cyk7CiAgICAg
dW5zaWduZWQgYml0c1NoaWZ0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNoaWZ0ICUgZGlnaXRC
aXRzKTsKICAgICBpbnQgcmVzdWx0TGVuZ3RoID0gbGVuZ3RoIC0gZGlnaXRhbFNoaWZ0OwogICAg
IGlmIChyZXN1bHRMZW5ndGggPD0gMCkKLSAgICAgICAgcmV0dXJuIHJpZ2h0U2hpZnRCeU1heGlt
dW0odm0sIHNpZ24pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJpZ2h0U2hp
ZnRCeU1heGltdW0oZ2xvYmFsT2JqZWN0LCBzaWduKSk7CiAKICAgICAvLyBGb3IgbmVnYXRpdmUg
bnVtYmVycywgcm91bmQgZG93biBpZiBhbnkgYml0IHdhcyBzaGlmdGVkIG91dCAoc28gdGhhdCBl
LmcuCiAgICAgLy8gLTVuID4+IDFuID09IC0zbiBhbmQgbm90IC0ybikuIENoZWNrIG5vdyB3aGV0
aGVyIHRoaXMgd2lsbCBoYXBwZW4gYW5kCkBAIC0xOTU1LDcgKzIwNzUsOSBAQCBKU0JpZ0ludDo6
SW1wbFJlc3VsdCBKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5QWJzb2x1dGUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdAogICAgIH0KIAogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
cmVzdWx0TGVuZ3RoKSA8PSBsZW5ndGgpOwotICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVX
aXRoTGVuZ3RoVW5jaGVja2VkKHZtLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0TGVuZ3Ro
KSk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0TGVuZ3RoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgbnVsbHB0cik7CisKICAgICBpZiAoIWJpdHNTaGlmdCkgewogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBkaWdpdGFsU2hpZnQ7IGkgPCBsZW5ndGg7IGkrKykKICAgICAg
ICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSAtIGRpZ2l0YWxTaGlmdCwgeC5kaWdpdChpKSk7CkBA
IC0xOTc1LDIwICsyMDk3LDIxIEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpyaWdo
dFNoaWZ0QnlBYnNvbHV0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0CiAgICAgICAgIGlm
IChtdXN0Um91bmREb3duKSB7CiAgICAgICAgICAgICAvLyBTaW5jZSB0aGUgcmVzdWx0IGlzIG5l
Z2F0aXZlLCByb3VuZGluZyBkb3duIG1lYW5zIGFkZGluZyBvbmUgdG8KICAgICAgICAgICAgIC8v
IGl0cyBhYnNvbHV0ZSB2YWx1ZS4gVGhpcyBjYW5ub3Qgb3ZlcmZsb3cuCi0gICAgICAgICAgICBy
ZXN1bHQgPSByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7Ci0gICAgICAgICAgICByZXR1cm4gYWJzb2x1
dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0
aW9uOjpTaWduZWQpOworICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5yaWdodFRyaW0oZ2xv
YmFsT2JqZWN0KTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOworICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBhYnNvbHV0ZUFkZE9u
ZShnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIFNpZ25PcHRpb246OlNp
Z25lZCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmlt
KHZtKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdC0+cmlnaHRUcmltKGds
b2JhbE9iamVjdCkpOwogfQogCi1KU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6cmlnaHRT
aGlmdEJ5TWF4aW11bShWTSYgdm0sIGJvb2wgc2lnbikKK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpT
QmlnSW50OjpyaWdodFNoaWZ0QnlNYXhpbXVtKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGJvb2wgc2lnbikKIHsKICAgICBpZiAoc2lnbikKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb20o
dm0sIC0xKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCAtMSk7CiAK
LSAgICByZXR1cm4gY3JlYXRlWmVybyh2bSk7CisgICAgcmV0dXJuIGNyZWF0ZVplcm8oZ2xvYmFs
T2JqZWN0KTsKIH0KIAogLy8gTG9va3VwIHRhYmxlIGZvciB0aGUgbWF4aW11bSBudW1iZXIgb2Yg
Yml0cyByZXF1aXJlZCBwZXIgY2hhcmFjdGVyIG9mIGEKQEAgLTIwMzQsNyArMjE1Nyw3IEBAIHVp
bnQ2NF90IEpTQmlnSW50OjpjYWxjdWxhdGVNYXhpbXVtQ2hhcmFjdGVyc1JlcXVpcmVkKHVuc2ln
bmVkIGxlbmd0aCwgdW5zaWduZWQKICAgICByZXR1cm4gbWF4aW11bUNoYXJhY3RlcnNSZXF1aXJl
ZDsKIH0KIAotU3RyaW5nIEpTQmlnSW50Ojp0b1N0cmluZ0Jhc2VQb3dlck9mVHdvKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIHVuc2lnbmVkIHJhZGl4
KQorU3RyaW5nIEpTQmlnSW50Ojp0b1N0cmluZ0Jhc2VQb3dlck9mVHdvKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgSlNCaWdJbnQqIHgsIHVuc2lnbmVk
IHJhZGl4KQogewogICAgIEFTU0VSVChoYXNPbmVCaXRTZXQocmFkaXgpKTsKICAgICBBU1NFUlQo
cmFkaXggPj0gMiAmJiByYWRpeCA8PSAzMik7CkBAIC0yMDU0LDkgKzIxNzcsOSBAQCBTdHJpbmcg
SlNCaWdJbnQ6OnRvU3RyaW5nQmFzZVBvd2VyT2ZUd28oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKUwogICAgIGNvbnN0IHNpemVfdCBjaGFyc1JlcXVpcmVkID0gKGJpdExl
bmd0aCArIGJpdHNQZXJDaGFyIC0gMSkgLyBiaXRzUGVyQ2hhciArIHNpZ247CiAKICAgICBpZiAo
Y2hhcnNSZXF1aXJlZCA+IEpTU3RyaW5nOjpNYXhMZW5ndGgpIHsKLSAgICAgICAgaWYgKGdsb2Jh
bE9iamVjdCkgeworICAgICAgICBpZiAobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NKSB7CiAgICAg
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7ICAgICAgICAgICAg
CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9y
T09NLCBzY29wZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0K
QEAgLTIwOTYsNyArMjIxOSw3IEBAIFN0cmluZyBKU0JpZ0ludDo6dG9TdHJpbmdCYXNlUG93ZXJP
ZlR3byhWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTCiAgICAgcmV0dXJu
IFN0cmluZ0ltcGw6OmFkb3B0KFdURk1vdmUocmVzdWx0U3RyaW5nKSk7CiB9CiAKLVN0cmluZyBK
U0JpZ0ludDo6dG9TdHJpbmdHZW5lcmljKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNCaWdJbnQqIHgsIHVuc2lnbmVkIHJhZGl4KQorU3RyaW5nIEpTQmlnSW50Ojp0b1N0
cmluZ0dlbmVyaWMoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogbnVsbE9yR2xvYmFsT2JqZWN0Rm9y
T09NLCBKU0JpZ0ludCogeCwgdW5zaWduZWQgcmFkaXgpCiB7CiAgICAgLy8gRklYTUU6IFtKU0Nd
IFJldmlzaXQgdXNhZ2Ugb2YgVmVjdG9yIGludG8gSlNCaWdJbnQ6OnRvU3RyaW5nCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDY3MQpAQCAtMjExMiw5
ICsyMjM1LDkgQEAgU3RyaW5nIEpTQmlnSW50Ojp0b1N0cmluZ0dlbmVyaWMoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCoKICAgICB1aW50NjRfdCBtYXhpbXVt
Q2hhcmFjdGVyc1JlcXVpcmVkID0gY2FsY3VsYXRlTWF4aW11bUNoYXJhY3RlcnNSZXF1aXJlZChs
ZW5ndGgsIHJhZGl4LCB4LT5kaWdpdChsZW5ndGggLSAxKSwgc2lnbik7CiAKICAgICBpZiAobWF4
aW11bUNoYXJhY3RlcnNSZXF1aXJlZCA+IEpTU3RyaW5nOjpNYXhMZW5ndGgpIHsKLSAgICAgICAg
aWYgKGdsb2JhbE9iamVjdCkgeworICAgICAgICBpZiAobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09N
KSB7CiAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7ICAg
ICAgICAgICAgCisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IobnVsbE9yR2xvYmFs
T2JqZWN0Rm9yT09NLCBzY29wZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwogICAgIH0KQEAgLTIxNDAsNyArMjI2Myw5IEBAIFN0cmluZyBKU0JpZ0ludDo6dG9TdHJpbmdH
ZW5lcmljKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqCiAg
ICAgICAgIEpTQmlnSW50KiogZGl2aWRlbmQgPSAmeDsKICAgICAgICAgZG8gewogICAgICAgICAg
ICAgRGlnaXQgY2h1bms7Ci0gICAgICAgICAgICBhYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3Io
dm0sIEhlYXBCaWdJbnRJbXBsIHsgKmRpdmlkZW5kIH0sIGNodW5rRGl2aXNvciwgJnJlc3QsIGNo
dW5rKTsKKyAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGFic29sdXRlRGl2V2l0aERpZ2l0RGl2
aXNvcihudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCBIZWFwQmlnSW50SW1wbCB7ICpkaXZp
ZGVuZCB9LCBjaHVua0Rpdmlzb3IsICZyZXN0LCBjaHVuayk7CisgICAgICAgICAgICBpZiAoIXN1
Y2Nlc3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgICAgICAgICAgZGl2
aWRlbmQgPSAmcmVzdDsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaHVu
a0NoYXJzOyBpKyspIHsKICAgICAgICAgICAgICAgICByZXN1bHRTdHJpbmcuYXBwZW5kKHJhZGl4
RGlnaXRzW2NodW5rICUgcmFkaXhdKTsKQEAgLTIxODEsOCArMjMwNiwxMCBAQCBTdHJpbmcgSlNC
aWdJbnQ6OnRvU3RyaW5nR2VuZXJpYyhWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQmlnSW50KgogICAgIHJldHVybiBTdHJpbmdJbXBsOjphZG9wdChXVEZNb3ZlKHJlc3Vs
dFN0cmluZykpOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OnJpZ2h0VHJpbShWTSYgdm0pCitK
U0JpZ0ludCogSlNCaWdJbnQ6OnJpZ2h0VHJpbShKU0dsb2JhbE9iamVjdCogbnVsbE9yR2xvYmFs
T2JqZWN0Rm9yT09NLCBWTSYgdm0pCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCiAgICAgaWYgKGlzWmVybygpKSB7CiAgICAgICAgIEFTU0VSVCghc2lnbigp
KTsKICAgICAgICAgcmV0dXJuIHRoaXM7CkBAIC0yMTkzLDIyICsyMzIwLDM3IEBAIEpTQmlnSW50
KiBKU0JpZ0ludDo6cmlnaHRUcmltKFZNJiB2bSkKICAgICAgICAgbm9uWmVyb0luZGV4LS07CiAK
ICAgICBpZiAobm9uWmVyb0luZGV4IDwgMCkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8odm0p
OworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNyZWF0ZVplcm8obnVsbE9yR2xv
YmFsT2JqZWN0Rm9yT09NLCB2bSkpOwogCiAgICAgaWYgKG5vblplcm9JbmRleCA9PSBzdGF0aWNf
Y2FzdDxpbnQ+KG1fbGVuZ3RoIC0gMSkpCiAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgdW5z
aWduZWQgbmV3TGVuZ3RoID0gbm9uWmVyb0luZGV4ICsgMTsKLSAgICBKU0JpZ0ludCogdHJpbW1l
ZEJpZ0ludCA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIG5ld0xlbmd0aCk7Ci0gICAg
c3RkOjpjb3B5KGRhdGFTdG9yYWdlKCksIGRhdGFTdG9yYWdlKCkgKyBuZXdMZW5ndGgsIHRyaW1t
ZWRCaWdJbnQtPmRhdGFTdG9yYWdlKCkpOyAKKyAgICBKU0JpZ0ludCogdHJpbW1lZEJpZ0ludCA9
IG51bGxwdHI7CisgICAgaWYgKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSkgeworICAgICAgICB0
cmltbWVkQmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00s
IG5ld0xlbmd0aCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIp
OworICAgIH0gZWxzZSB7CisgICAgICAgIHRyaW1tZWRCaWdJbnQgPSB0cnlDcmVhdGVXaXRoTGVu
Z3RoKHZtLCBuZXdMZW5ndGgpOworICAgICAgICBpZiAoVU5MSUtFTFkoIXRyaW1tZWRCaWdJbnQp
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHN0ZDo6Y29weShkYXRh
U3RvcmFnZSgpLCBkYXRhU3RvcmFnZSgpICsgbmV3TGVuZ3RoLCB0cmltbWVkQmlnSW50LT5kYXRh
U3RvcmFnZSgpKTsKIAogICAgIHRyaW1tZWRCaWdJbnQtPnNldFNpZ24odGhpcy0+c2lnbigpKTsK
IAogICAgIHJldHVybiB0cmltbWVkQmlnSW50OwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmFs
bG9jYXRlRm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgdW5zaWduZWQg
cmFkaXgsIHVuc2lnbmVkIGNoYXJjb3VudCkKK0pTQmlnSW50KiBKU0JpZ0ludDo6cmlnaHRUcmlt
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIHJpZ2h0VHJpbShn
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+dm0oKSk7Cit9CisKK0pTQmlnSW50KiBKU0JpZ0lu
dDo6YWxsb2NhdGVGb3IoSlNHbG9iYWxPYmplY3QqIG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwg
Vk0mIHZtLCB1bnNpZ25lZCByYWRpeCwgdW5zaWduZWQgY2hhcmNvdW50KQogeworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEFTU0VSVCgyIDw9IHJhZGl4
ICYmIHJhZGl4IDw9IDM2KTsKIAogICAgIHNpemVfdCBiaXRzUGVyQ2hhciA9IG1heEJpdHNQZXJD
aGFyVGFibGVbcmFkaXhdOwpAQCAtMjIyMiwxNyArMjM2NCwxNCBAQCBKU0JpZ0ludCogSlNCaWdJ
bnQ6OmFsbG9jYXRlRm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgdW5z
aWduZWQgcgogICAgICAgICBpZiAoYml0c01pbiA8PSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1heElu
dCkpIHsKICAgICAgICAgICAgIC8vIERpdmlkZSBieSBrRGlnaXRzQml0cywgcm91bmRpbmcgdXAu
CiAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSAoYml0c01pbiArIGRpZ2l0Qml0cyAtIDEp
IC8gZGlnaXRCaXRzOwotICAgICAgICAgICAgaWYgKGxlbmd0aCA8PSBtYXhMZW5ndGgpIHsKLSAg
ICAgICAgICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5n
dGhVbmNoZWNrZWQodm0sIGxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChsZW5ndGggPD0gbWF4TGVuZ3RoKQorICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY3JlYXRlV2l0aExlbmd0aChu
dWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCBsZW5ndGgpKTsKICAgICAgICAgfQogICAgIH0K
IAotICAgIGlmIChnbG9iYWxPYmplY3QpIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgIkJpZ0ludCBnZW5lcmF0ZWQgZnJvbSB0aGlzIG9wZXJhdGlvbiBpcyB0b28g
YmlnIl9zKTsKLSAgICB9CisgICAgaWYgKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSkKKyAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgc2NvcGUs
ICJCaWdJbnQgZ2VuZXJhdGVkIGZyb20gdGhpcyBvcGVyYXRpb24gaXMgdG9vIGJpZyJfcyk7CisK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtMjI5MCw3ICsyNDI5LDcgQEAgSlNWYWx1ZSBK
U0JpZ0ludDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2hhclR5cGUq
ICBkYXRhLCB1bnNpZ24KIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgotSlNWYWx1
ZSBKU0JpZ0ludDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZt
LCBDaGFyVHlwZSogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1
bnNpZ25lZCByYWRpeCwgRXJyb3JQYXJzZU1vZGUgZXJyb3JQYXJzZU1vZGUsIFBhcnNlSW50U2ln
biBzaWduLCBQYXJzZUludE1vZGUgcGFyc2VNb2RlKQorSlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJ
bnQoSlNHbG9iYWxPYmplY3QqIG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgVk0mIHZtLCBDaGFy
VHlwZSogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25l
ZCByYWRpeCwgRXJyb3JQYXJzZU1vZGUgZXJyb3JQYXJzZU1vZGUsIFBhcnNlSW50U2lnbiBzaWdu
LCBQYXJzZUludE1vZGUgcGFyc2VNb2RlKQogewogICAgIEFTU0VSVChsZW5ndGggPj0gMCk7CiAg
ICAgdW5zaWduZWQgcCA9IHN0YXJ0SW5kZXg7CkBAIC0yMjk4LDkgKzI0MzcsOSBAQCBKU1ZhbHVl
IEpTQmlnSW50OjpwYXJzZUludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0s
IENoYXJUeXBlKiBkYXRhLAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIGlmIChwYXJzZU1vZGUgIT0gUGFyc2VJbnRNb2RlOjpBbGxvd0VtcHR5U3RyaW5n
ICYmIHN0YXJ0SW5kZXggPT0gbGVuZ3RoKSB7Ci0gICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3Qp
OworICAgICAgICBBU1NFUlQobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NKTsKICAgICAgICAgaWYg
KGVycm9yUGFyc2VNb2RlID09IEVycm9yUGFyc2VNb2RlOjpUaHJvd0V4Y2VwdGlvbnMpCi0gICAg
ICAgICAgICB0aHJvd1ZNRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlU3ludGF4RXJy
b3IoZ2xvYmFsT2JqZWN0LCAiRmFpbGVkIHRvIHBhcnNlIFN0cmluZyB0byBCaWdJbnQiKSk7Cisg
ICAgICAgICAgICB0aHJvd1ZNRXJyb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBzY29wZSwg
Y3JlYXRlU3ludGF4RXJyb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCAiRmFpbGVkIHRvIHBh
cnNlIFN0cmluZyB0byBCaWdJbnQiKSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAg
fQogCkBAIC0yMzE5LDcgKzI0NTgsNyBAQCBKU1ZhbHVlIEpTQmlnSW50OjpwYXJzZUludChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIENoYXJUeXBlKiBkYXRhLAogI2lmIFVT
RShCSUdJTlQzMikKICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoMCk7CiAjZWxzZQotICAgICAg
ICByZXR1cm4gY3JlYXRlWmVybyh2bSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgY3JlYXRlWmVybyhudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtKSk7CiAjZW5kaWYKICAg
ICB9CiAKQEAgLTI0MTQsOCArMjU1Myw4IEBAIEpTVmFsdWUgSlNCaWdJbnQ6OnBhcnNlSW50KEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgQ2hhclR5cGUqIGRhdGEsCiAgICAg
ICAgICAgICAgICAgZGlnaXQgKz0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGRhdGFbcF0gLSAnQScg
KyAxMCk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoZXJyb3JQYXJz
ZU1vZGUgPT0gRXJyb3JQYXJzZU1vZGU6OlRocm93RXhjZXB0aW9ucykgewotICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dW
TUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVN5bnRheEVycm9yKGdsb2JhbE9iamVj
dCwgIkZhaWxlZCB0byBwYXJzZSBTdHJpbmcgdG8gQmlnSW50IikpOworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NKTsKKyAgICAgICAgICAgICAgICAg
ICAgdGhyb3dWTUVycm9yKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgc2NvcGUsIGNyZWF0ZVN5
bnRheEVycm9yKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgIkZhaWxlZCB0byBwYXJzZSBTdHJp
bmcgdG8gQmlnSW50IikpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgfQpAQCAtMjQzMywxMiArMjU3MiwxMyBAQCBKU1Zh
bHVlIEpTQmlnSW50OjpwYXJzZUludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYg
dm0sIENoYXJUeXBlKiBkYXRhLAogI2lmIFVTRShCSUdJTlQzMikKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGpzQmlnSW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF5YmVSZXN1bHQpKTsK
ICNlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2
bSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF5YmVSZXN1bHQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6Y3JlYXRlRnJvbShudWxsT3JH
bG9iYWxPYmplY3RGb3JPT00sIHN0YXRpY19jYXN0PGludDMyX3Q+KG1heWJlUmVzdWx0KSkpOwog
I2VuZGlmCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgaGVh
cFJlc3VsdCA9IGFsbG9jYXRlRm9yKGdsb2JhbE9iamVjdCwgdm0sIHJhZGl4LCBpbml0aWFsTGVu
Z3RoKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7
CisgICAgICAgICAgICBoZWFwUmVzdWx0ID0gYWxsb2NhdGVGb3IobnVsbE9yR2xvYmFsT2JqZWN0
Rm9yT09NLCB2bSwgcmFkaXgsIGluaXRpYWxMZW5ndGgpOworICAgICAgICAgICAgaWYgKG51bGxP
ckdsb2JhbE9iamVjdEZvck9PTSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICAgICAgLy8gcmVzdWx0IGNhbiBzdGlsbCBiZSBu
dWxsIGlmIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIGdsb2JhbCBvYmplY3QsIGFzIGFsbG9jYXRl
Rm9yIGNhbm5vdCB0aHJvdyBhbiBleGNlcHRpb24gaW4gdGhhdCBjYXNlLgogICAgICAgICAgICAg
aWYgKCFoZWFwUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CkBAIC0y
NDUxLDcgKzI1OTEsNyBAQCBKU1ZhbHVlIEpTQmlnSW50OjpwYXJzZUludChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIENoYXJUeXBlKiBkYXRhLAogICAgIH0KIAogICAgIGhl
YXBSZXN1bHQtPnNldFNpZ24oc2lnbiA9PSBQYXJzZUludFNpZ246OlNpZ25lZCk7Ci0gICAgcmV0
dXJuIGhlYXBSZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBoZWFwUmVzdWx0LT5yaWdodFRyaW0obnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCB2bSkp
OwogfQogCiBKU09iamVjdCogSlNCaWdJbnQ6OnRvT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpIGNvbnN0CkBAIC0yNzM4LDExICsyODc4LDEyIEBAIHRlbXBsYXRlIDx0eXBlbmFt
ZSBCaWdJbnRJbXBsPgogSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFzSW50TkltcGwo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0X3QgbiwgQmlnSW50SW1wbCBiaWdJ
bnQpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChiaWdJbnQuaXNaZXJvKCkpCiAg
ICAgICAgIHJldHVybiBiaWdJbnQ7CiAgICAgaWYgKG4gPT0gMCkKLSAgICAgICAgcmV0dXJuIHpl
cm9JbXBsKHZtKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB6ZXJvSW1wbChn
bG9iYWxPYmplY3QpKTsKIAogICAgIHVpbnQ2NF90IG5lZWRlZExlbmd0aCA9IChuICsgZGlnaXRC
aXRzIC0gMSkgLyBkaWdpdEJpdHM7CiAgICAgdWludDY0X3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KGJpZ0ludC5sZW5ndGgoKSk7CkBAIC0yNzY2LDIzICsyOTA3LDIzIEBAIEpTQmln
SW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojphc0ludE5JbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIHVpbnQ2NF90CiAgICAgQVNTRVJUKG4gPD0gSU5UMzJfTUFYKTsKICAgICBpbnQz
Ml90IE4gPSBzdGF0aWNfY2FzdDxpbnQzMl90PihuKTsKICAgICBpZiAoIWhhc0JpdCkKLSAgICAg
ICAgcmV0dXJuIHRydW5jYXRlVG9OQml0cyh2bSwgTiwgYmlnSW50KTsKKyAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCB0cnVuY2F0ZVRvTkJpdHMoZ2xvYmFsT2JqZWN0LCBOLCBiaWdJ
bnQpKTsKICAgICBpZiAoIWJpZ0ludC5zaWduKCkpCi0gICAgICAgIHJldHVybiB0cnVuY2F0ZUFu
ZFN1YkZyb21Qb3dlck9mVHdvKHZtLCBOLCBiaWdJbnQsIHRydWUpOworICAgICAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIHRydW5jYXRlQW5kU3ViRnJvbVBvd2VyT2ZUd28oZ2xvYmFsT2Jq
ZWN0LCBOLCBiaWdJbnQsIHRydWUpKTsKIAogICAgIC8vIE5lZ2F0aXZlIG51bWJlcnMgbXVzdCBz
dWJ0cmFjdCBmcm9tIDJebiwgZXhjZXB0IGZvciB0aGUgc3BlY2lhbCBjYXNlCiAgICAgLy8gZGVz
Y3JpYmVkIGFib3ZlLgogICAgIGlmICgodG9wRGlnaXQgJiAoY29tcGFyZURpZ2l0IC0gMSkpID09
IDApIHsKICAgICAgICAgZm9yIChpbnQzMl90IGkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihuZWVk
ZWRMZW5ndGgpIC0gMjsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgIGlmIChiaWdJbnQuZGln
aXQoaSkgIT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1bmNhdGVBbmRTdWJGcm9tUG93
ZXJPZlR3byh2bSwgTiwgYmlnSW50LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCB0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKGdsb2JhbE9iamVj
dCwgTiwgYmlnSW50LCBmYWxzZSkpOwogICAgICAgICB9CiAgICAgICAgIC8vIFRydW5jYXRpb24g
aXMgbm8tb3AgaWYgYmlnSW50ID09IC0yXihuLTEpLgogICAgICAgICBpZiAobGVuZ3RoID09IG5l
ZWRlZExlbmd0aCAmJiB0b3BEaWdpdCA9PSBjb21wYXJlRGlnaXQpCiAgICAgICAgICAgICByZXR1
cm4gYmlnSW50OwotICAgICAgICByZXR1cm4gdHJ1bmNhdGVUb05CaXRzKHZtLCBOLCBiaWdJbnQp
OworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHRydW5jYXRlVG9OQml0cyhnbG9i
YWxPYmplY3QsIE4sIGJpZ0ludCkpOwogICAgIH0KLSAgICByZXR1cm4gdHJ1bmNhdGVBbmRTdWJG
cm9tUG93ZXJPZlR3byh2bSwgTiwgYmlnSW50LCBmYWxzZSk7CisgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCB0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKGdsb2JhbE9iamVjdCwgTiwg
YmlnSW50LCBmYWxzZSkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KQEAg
LTI3OTQsNyArMjkzNSw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojphc1VpbnRO
SW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfCiAgICAgaWYgKGJpZ0lu
dC5pc1plcm8oKSkKICAgICAgICAgcmV0dXJuIGJpZ0ludDsKICAgICBpZiAobiA9PSAwKQotICAg
ICAgICByZXR1cm4gemVyb0ltcGwodm0pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIHplcm9JbXBsKGdsb2JhbE9iamVjdCkpOwogCiAgICAgLy8gSWYgYmlnSW50IGlzIG5lZ2F0
aXZlLCBzaW11bGF0ZSB0d28ncyBjb21wbGVtZW50IHJlcHJlc2VudGF0aW9uLgogICAgIGlmIChi
aWdJbnQuc2lnbigpKSB7CkBAIC0yODAyLDcgKzI5NDMsNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3Vs
dCBKU0JpZ0ludDo6YXNVaW50TkltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWlu
dDY0XwogICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJCaWdJbnQgZ2VuZXJhdGVkIGZyb20gdGhpcyBvcGVyYXRpb24gaXMgdG9vIGJpZyJfcyk7
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICByZXR1cm4g
dHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byh2bSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obiks
IGJpZ0ludCwgZmFsc2UpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHRydW5j
YXRlQW5kU3ViRnJvbVBvd2VyT2ZUd28oZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxpbnQzMl90
PihuKSwgYmlnSW50LCBmYWxzZSkpOwogICAgIH0KIAogICAgIC8vIElmIGJpZ0ludCBpcyBwb3Np
dGl2ZSBhbmQgaGFzIHVwIHRvIG4gYml0cywgcmV0dXJuIGl0IGRpcmVjdGx5LgpAQCAtMjgyNCwx
OCArMjk2NSwyMiBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YXNVaW50TkltcGwo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0XwogCiAgICAgLy8gT3RoZXJ3aXNl
LCB0cnVuY2F0ZS4KICAgICBBU1NFUlQobiA8PSBJTlQzMl9NQVgpOwotICAgIHJldHVybiB0cnVu
Y2F0ZVRvTkJpdHModm0sIHN0YXRpY19jYXN0PGludDMyX3Q+KG4pLCBiaWdJbnQpOworICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdHJ1bmNhdGVUb05CaXRzKGdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8aW50MzJfdD4obiksIGJpZ0ludCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
QmlnSW50SW1wbD4KLUpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojp0cnVuY2F0ZVRvTkJp
dHMoVk0mIHZtLCBpbnQzMl90IG4sIEJpZ0ludEltcGwgYmlnSW50KQorSlNCaWdJbnQ6OkltcGxS
ZXN1bHQgSlNCaWdJbnQ6OnRydW5jYXRlVG9OQml0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBpbnQzMl90IG4sIEJpZ0ludEltcGwgYmlnSW50KQogeworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKICAgICBBU1NFUlQobiAhPSAwKTsKICAgICBBU1NFUlQoYmlnSW50Lmxlbmd0aCgpID4gbiAv
IGRpZ2l0Qml0cyk7CiAKICAgICBpbnQzMl90IG5lZWRlZERpZ2l0cyA9IChuICsgKGRpZ2l0Qml0
cyAtIDEpKSAvIGRpZ2l0Qml0czsKICAgICBBU1NFUlQobmVlZGVkRGlnaXRzIDw9IHN0YXRpY19j
YXN0PGludDMyX3Q+KGJpZ0ludC5sZW5ndGgoKSkpOwotICAgIEpTQmlnSW50KiByZXN1bHQgPSBj
cmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCBuZWVkZWREaWdpdHMpOworICAgIEpTQmlnSW50
KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgbmVlZGVkRGlnaXRzKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBBU1NFUlQocmVz
dWx0KTsKIAogICAgIC8vIENvcHkgYWxsIGRpZ2l0cyBleGNlcHQgdGhlIE1TRC4KQEAgLTI4NTEs
MTkgKzI5OTYsMjMgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnRydW5jYXRlVG9O
Qml0cyhWTSYgdm0sIGludDMyX3QgbiwgQmlnSW50SW1wbCBiaWcKICAgICB9CiAgICAgcmVzdWx0
LT5zZXREaWdpdChsYXN0LCBtc2QpOwogICAgIHJlc3VsdC0+c2V0U2lnbihiaWdJbnQuc2lnbigp
KTsKLSAgICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0odm0pOworICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgcmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIC8vIFN1
YnRyYWN0cyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgbiBiaXRzIG9mIGFicyhiaWdJbnQpIGZyb20g
Ml5uLgogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci1KU0JpZ0ludDo6SW1wbFJlc3Vs
dCBKU0JpZ0ludDo6dHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byhWTSYgdm0sIGludDMyX3Qg
biwgQmlnSW50SW1wbCBiaWdJbnQsIGJvb2wgcmVzdWx0U2lnbikKK0pTQmlnSW50OjpJbXBsUmVz
dWx0IEpTQmlnSW50Ojp0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGludDMyX3QgbiwgQmlnSW50SW1wbCBiaWdJbnQsIGJvb2wgcmVzdWx0
U2lnbikKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgQVNTRVJUKG4gIT0gMCk7CiAgICAg
QVNTRVJUKG4gPD0gc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4TGVuZ3RoQml0cykpOwogCiAgICAg
aW50MzJfdCBuZWVkZWREaWdpdHMgPSAobiArIChkaWdpdEJpdHMgLSAxKSkgLyBkaWdpdEJpdHM7
CiAgICAgQVNTRVJUKG5lZWRlZERpZ2l0cyA8PSBzdGF0aWNfY2FzdDxpbnQzMl90PihtYXhMZW5n
dGgpKTsgLy8gRm9sbG93cyBmcm9tIG4gPD0gbWF4TGVuZ3RoQml0cy4KLSAgICBKU0JpZ0ludCog
cmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgbmVlZGVkRGlnaXRzKTsKKyAg
ICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIG5lZWRl
ZERpZ2l0cyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAg
QVNTRVJUKHJlc3VsdCk7CiAKICAgICAvLyBQcm9jZXNzIGFsbCBkaWdpdHMgZXhjZXB0IHRoZSBN
U0QuCkBAIC0yOTEwLDcgKzMwNTksNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6
dHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byhWTSYgdm0sIGludDMyX3QgbiwgQgogICAgIH0K
ICAgICByZXN1bHQtPnNldERpZ2l0KGxhc3QsIHJlc3VsdE1TRCk7CiAgICAgcmVzdWx0LT5zZXRT
aWduKHJlc3VsdFNpZ24pOwotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3Qp
KTsKIH0KIAogSlNWYWx1ZSBKU0JpZ0ludDo6YXNJbnROKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIHVpbnQ2NF90IG4sIEpTQmlnSW50KiBiaWdJbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNCaWdJbnQuaAppbmRleCA2YmY4YWIyYTU2NzE5ZjQ3ZTZiNzdhODA5ODAxN2Y0
YWJlZmFkMzg3Li4wOTBjNjQ2OGUyY2U1YzcyYWZjNGYxNDczZjNhMjgwM2YxYjJjMGM4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKQEAgLTY1LDE2ICs2NSwxOCBA
QCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHN0YXRpYyBzaXpl
X3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVaZXJvKFZNJik7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQmlnSW50KiB0cnlDcmVhdGVXaXRoTGVu
Z3RoKEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgSlNCaWdJ
bnQqIGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQoVk0mLCB1bnNpZ25lZCBsZW5ndGgpOwotCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKFZNJiwgaW50
MzJfdCB2YWx1ZSk7Ci0gICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKFZNJiwgdWludDMy
X3QgdmFsdWUpOwotICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShWTSYsIGludDY0X3Qg
dmFsdWUpOwotICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShWTSYsIHVpbnQ2NF90IHZh
bHVlKTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20oVk0mLCBib29sIHZhbHVlKTsK
LSAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20oVk0mLCBkb3VibGUgdmFsdWUpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlWmVybyhKU0dsb2JhbE9i
amVjdCopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0ludCogdHJ5Q3JlYXRl
WmVybyhWTSYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0ludCogdHJ5Q3Jl
YXRlV2l0aExlbmd0aChWTSYsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVXaXRoTGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiwgdW5z
aWduZWQgbGVuZ3RoKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0ludCog
Y3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCosIGludDMyX3QgdmFsdWUpOworICAgIHN0YXRpYyBK
U0JpZ0ludCogdHJ5Q3JlYXRlRnJvbShWTSYsIGludDMyX3QgdmFsdWUpOworICAgIHN0YXRpYyBK
U0JpZ0ludCogY3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCosIHVpbnQzMl90IHZhbHVlKTsKKyAg
ICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqLCBpbnQ2NF90IHZh
bHVlKTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqLCB1
aW50NjRfdCB2YWx1ZSk7CisgICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKEpTR2xvYmFs
T2JqZWN0KiwgYm9vbCB2YWx1ZSk7CisgICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKEpT
R2xvYmFsT2JqZWN0KiwgZG91YmxlIHZhbHVlKTsKIAogICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0
T2ZMZW5ndGgoKQogICAgIHsKQEAgLTkwLDIxICs5MiwyMSBAQCBjbGFzcyBKU0JpZ0ludCBmaW5h
bCA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9sZW5ndGg7IH0KIAotICAgIHN0YXRpYyBKU1ZhbHVlIG1ha2VIZWFwQmlnSW50T3JCaWdJ
bnQzMihWTSYgdm0sIGludDY0X3QgdmFsdWUpCisgICAgc3RhdGljIEpTVmFsdWUgbWFrZUhlYXBC
aWdJbnRPckJpZ0ludDMyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDY0X3QgdmFs
dWUpCiAgICAgewogI2lmIFVTRShCSUdJTlQzMikKICAgICAgICAgaWYgKHZhbHVlIDw9IElOVF9N
QVggJiYgdmFsdWUgPj0gSU5UX01JTikKICAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KHZhbHVlKSk7CiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIEpTQmln
SW50OjpjcmVhdGVGcm9tKHZtLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3Jl
YXRlRnJvbShnbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNWYWx1
ZSBtYWtlSGVhcEJpZ0ludE9yQmlnSW50MzIoVk0mIHZtLCBkb3VibGUgdmFsdWUpCisgICAgc3Rh
dGljIEpTVmFsdWUgbWFrZUhlYXBCaWdJbnRPckJpZ0ludDMyKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGRvdWJsZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0ludGVnZXIo
dmFsdWUpKTsKICAgICAgICAgaWYgKHN0ZDo6YWJzKHZhbHVlKSA8PSBtYXhTYWZlSW50ZWdlcigp
KQotICAgICAgICAgICAgcmV0dXJuIG1ha2VIZWFwQmlnSW50T3JCaWdJbnQzMih2bSwgc3RhdGlj
X2Nhc3Q8aW50NjRfdD4odmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpjcmVhdGVG
cm9tKHZtLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gbWFrZUhlYXBCaWdJbnRPckJpZ0lu
dDMyKGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8aW50NjRfdD4odmFsdWUpKTsKKyAgICAgICAg
cmV0dXJuIEpTQmlnSW50OjpjcmVhdGVGcm9tKGdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIH0K
IAogICAgIGVudW0gY2xhc3MgRXJyb3JQYXJzZU1vZGUgewpAQCAtMTU4LDE3ICsxNjAsMTMgQEAg
Y2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAgIENvbXBhcmlzb25S
ZXN1bHQgc3RhdGljIGNvbXBhcmVUb0RvdWJsZShKU0JpZ0ludCogeCwgZG91YmxlIHkpOwogCi0g
ICAgQUxXQVlTX0lOTElORSBzdGF0aWMgSlNWYWx1ZSBhc0ludDMyT3JIZWFwQ2VsbChWTSYgdm0s
IGludDY0X3QgdmFsdWUpCisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgSlNWYWx1ZSBhc0ludDMy
T3JIZWFwQ2VsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQ2NF90IHZhbHVlKQog
ICAgIHsKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ2NF90
PihzdGF0aWNfY2FzdDxpbnQzMl90Pih2YWx1ZSkpID09IHZhbHVlKQogICAgICAgICAgICAgcmV0
dXJuIGpzQmlnSW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKTsKICNlbmRpZgotICAg
ICAgICByZXR1cm4gY3JlYXRlRnJvbSh2bSwgdmFsdWUpOwotICAgIH0KLSAgICBBTFdBWVNfSU5M
SU5FIHN0YXRpYyBKU1ZhbHVlIGFzSW50MzJPckhlYXBDZWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGludDY0X3QgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gYXNJbnQzMk9y
SGVhcENlbGwoZ2xvYmFsT2JqZWN0LT52bSgpLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBjcmVh
dGVGcm9tKGdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTE4NCw2
ICsxODIsOSBAQCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgICAg
ICBKU1ZhbHVlIHBheWxvYWQ7CiAgICAgfTsKIHByaXZhdGU6CisgICAgc3RhdGljIEpTQmlnSW50
KiBjcmVhdGVXaXRoTGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiwgVk0mLCB1bnNpZ25lZCBsZW5ndGgp
OworICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCosIFZNJiwg
dWludDMyX3QgdmFsdWUpOworICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlWmVybyhKU0dsb2Jh
bE9iamVjdCosIFZNJik7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5
cGVuYW1lIEJpZ0ludEltcGwyPgogICAgIHN0YXRpYyBJbXBsUmVzdWx0IGV4cG9uZW50aWF0ZUlt
cGwoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSBiYXNlLCBCaWdJbnRJbXBsMiBleHBvbmVu
dCk7CkBAIC0yMTAsNyArMjExLDcgQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlND
ZWxsIHsKICAgICBzdGF0aWMgSW1wbFJlc3VsdCByZW1haW5kZXJJbXBsKEpTR2xvYmFsT2JqZWN0
KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQmlnSW50SW1wbD4KLSAgICBzdGF0aWMgSW1wbFJlc3VsdCB1bmFyeU1pbnVzSW1wbChWTSYs
IEJpZ0ludEltcGwgeCk7CisgICAgc3RhdGljIEltcGxSZXN1bHQgdW5hcnlNaW51c0ltcGwoSlNH
bG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsIHgpOwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJp
Z0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KICAgICBzdGF0aWMgSW1wbFJlc3VsdCBi
aXR3aXNlQW5kSW1wbChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwy
IHkpOwpAQCAtMjk1LDcgKzI5Niw3IEBAIGNsYXNzIEpTQmlnSW50IGZpbmFsIDogcHVibGljIEpT
Q2VsbCB7CiAgICAgc3RhdGljIEpTVmFsdWUgZGl2aWRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGludDMyX3QgeCwgaW50MzJfdCB5KQogICAgIHsKICAgICAgICAgaWYgKCF5KSB7Ci0g
ICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShnbG9iYWxPYmplY3Qt
PnZtKCkpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZ2V0
Vk0oZ2xvYmFsT2JqZWN0KSk7CiAgICAgICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgIjAgaXMgYW4gaW52YWxpZCBkaXZpc29yIHZhbHVlLiJfcyk7CiAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CkBAIC0zMTAsNyArMzExLDcgQEAgY2xh
c3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBzdGF0aWMgSlNWYWx1ZSBy
ZW1haW5kZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBpbnQzMl90
IHkpCiAgICAgewogICAgICAgICBpZiAoIXkpIHsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShnZXRWTShnbG9iYWxPYmplY3QpKTsKICAgICAg
ICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiMCBpcyBhbiBpbnZh
bGlkIGRpdmlzb3IgdmFsdWUuIl9zKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAg
ICAgICAgIH0KQEAgLTMxOCwxMSArMzE5LDExIEBAIGNsYXNzIEpTQmlnSW50IGZpbmFsIDogcHVi
bGljIEpTQ2VsbCB7CiAgICAgfQogI2VuZGlmCiAKLSAgICBzdGF0aWMgSlNWYWx1ZSB1bmFyeU1p
bnVzKFZNJiwgSlNCaWdJbnQqIHgpOworICAgIHN0YXRpYyBKU1ZhbHVlIHVuYXJ5TWludXMoSlNH
bG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCk7CiAjaWYgVVNFKEJJR0lOVDMyKQotICAgIHN0YXRp
YyBKU1ZhbHVlIHVuYXJ5TWludXMoVk0mIHZtLCBpbnQzMl90IHgpCisgICAgc3RhdGljIEpTVmFs
dWUgdW5hcnlNaW51cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgpCiAg
ICAgewotICAgICAgICByZXR1cm4gYXNJbnQzMk9ySGVhcENlbGwodm0sIC1zdGF0aWNfY2FzdDxp
bnQ2NF90Pih4KSk7CisgICAgICAgIHJldHVybiBhc0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmpl
Y3QsIC1zdGF0aWNfY2FzdDxpbnQ2NF90Pih4KSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTQyMywx
MiArNDI0LDE0IEBAIGNsYXNzIEpTQmlnSW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAKICAg
ICBEaWdpdCBkaWdpdCh1bnNpZ25lZCk7CiAgICAgdm9pZCBzZXREaWdpdCh1bnNpZ25lZCwgRGln
aXQpOyAvLyBVc2Ugb25seSB3aGVuIGluaXRpYWxpemluZy4KLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBKU0JpZ0ludCogcmlnaHRUcmltKFZNJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNCaWdJ
bnQqIHJpZ2h0VHJpbShKU0dsb2JhbE9iamVjdCopOwogCiBwcml2YXRlOgogICAgIEpTQmlnSW50
KFZNJiwgU3RydWN0dXJlKiwgRGlnaXQqLCB1bnNpZ25lZCBsZW5ndGgpOwogCi0gICAgc3RhdGlj
IEpTQmlnSW50KiBjcmVhdGVGcm9tSW1wbChWTSYsIHVpbnQ2NF90IHZhbHVlLCBib29sIHNpZ24p
OworICAgIEpTQmlnSW50KiByaWdodFRyaW0oSlNHbG9iYWxPYmplY3QqLCBWTSYpOworCisgICAg
c3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tSW1wbChKU0dsb2JhbE9iamVjdCosIHVpbnQ2NF90
IHZhbHVlLCBib29sIHNpZ24pOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRz
UGVyQnl0ZSA9IDg7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBkaWdpdEJpdHMgPSBz
aXplb2YoRGlnaXQpICogYml0c1BlckJ5dGU7CkBAIC00NTQsNyArNDU3LDcgQEAgY2xhc3MgSlNC
aWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmln
SW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgogICAgIHN0YXRpYyBDb21wYXJpc29uUmVz
dWx0IGFic29sdXRlQ29tcGFyZShCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KLSAgICBzdGF0aWMgdm9pZCBhYnNvbHV0ZURp
dldpdGhEaWdpdERpdmlzb3IoVk0mLCBCaWdJbnRJbXBsIHgsIERpZ2l0IGRpdmlzb3IsIEpTQmln
SW50KiogcXVvdGllbnQsIERpZ2l0JiByZW1haW5kZXIpOworICAgIHN0YXRpYyBib29sIGFic29s
dXRlRGl2V2l0aERpZ2l0RGl2aXNvcihKU0dsb2JhbE9iamVjdCosIFZNJiwgQmlnSW50SW1wbCB4
LCBEaWdpdCBkaXZpc29yLCBKU0JpZ0ludCoqIHF1b3RpZW50LCBEaWdpdCYgcmVtYWluZGVyKTsK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KICAgICBzdGF0aWMgdm9pZCBpbnRl
cm5hbE11bHRpcGx5QWRkKEJpZ0ludEltcGwgc291cmNlLCBEaWdpdCBmYWN0b3IsIERpZ2l0IHN1
bW1hbmQsIHVuc2lnbmVkLCBKU0JpZ0ludCogcmVzdWx0KTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQmlnSW50SW1wbD4KQEAgLTQ4OSwxNiArNDkyLDE2IEBAIGNsYXNzIEpTQmlnSW50IGZpbmFs
IDogcHVibGljIEpTQ2VsbCB7CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpZ0lu
dEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMiwgdHlwZW5hbWUgQml0d2lzZU9wPgotICAgIHN0
YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVCaXR3aXNlT3AoVk0mLCBCaWdJbnRJbXBsMSB4LCBCaWdJ
bnRJbXBsMiB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nLCBCaXR3aXNlT3AmJik7CisgICAgc3RhdGlj
IEpTQmlnSW50KiBhYnNvbHV0ZUJpdHdpc2VPcChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwx
IHgsIEJpZ0ludEltcGwyIHksIEV4dHJhRGlnaXRzSGFuZGxpbmcsIEJpdHdpc2VPcCYmKTsKIAog
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+
Ci0gICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUFuZChWTSYsIEJpZ0ludEltcGwxIHgsIEJp
Z0ludEltcGwyIHkpOworICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVBbmQoSlNHbG9iYWxP
YmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgotICAgIHN0YXRpYyBKU0Jp
Z0ludCogYWJzb2x1dGVPcihWTSYsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOworICAg
IHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVPcihKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwx
IHgsIEJpZ0ludEltcGwyIHkpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwg
dHlwZW5hbWUgQmlnSW50SW1wbDI+Ci0gICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUFuZE5v
dChWTSYsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOworICAgIHN0YXRpYyBKU0JpZ0lu
dCogYWJzb2x1dGVBbmROb3QoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJ
bXBsMiB5KTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJp
Z0ludEltcGwyPgotICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVYb3IoVk0mLCBCaWdJbnRJ
bXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlWG9y
KEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CiAKICAgICBl
bnVtIGNsYXNzIFNpZ25PcHRpb24gewogICAgICAgICBTaWduZWQsCkBAIC01MzUsMjAgKzUzOCwy
MCBAQCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHN0YXRpYyBK
U0JpZ0ludCogYWxsb2NhdGVGb3IoSlNHbG9iYWxPYmplY3QqLCBWTSYsIHVuc2lnbmVkIHJhZGl4
LCB1bnNpZ25lZCBjaGFyY291bnQpOwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludElt
cGw+Ci0gICAgc3RhdGljIEpTQmlnSW50KiBjb3B5KFZNJiwgQmlnSW50SW1wbCB4KTsKKyAgICBz
dGF0aWMgSlNCaWdJbnQqIGNvcHkoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsIHgpOwogCiAg
ICAgdm9pZCBpbnBsYWNlTXVsdGlwbHlBZGQoRGlnaXQgbXVsdGlwbGllciwgRGlnaXQgcGFydCk7
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBs
Mj4KICAgICBzdGF0aWMgSW1wbFJlc3VsdCBhYnNvbHV0ZUFkZChKU0dsb2JhbE9iamVjdCosIEJp
Z0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHksIGJvb2wgcmVzdWx0U2lnbik7CiAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KLSAgICBzdGF0
aWMgSW1wbFJlc3VsdCBhYnNvbHV0ZVN1YihWTSYsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwy
IHksIGJvb2wgcmVzdWx0U2lnbik7CisgICAgc3RhdGljIEltcGxSZXN1bHQgYWJzb2x1dGVTdWIo
SlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LCBib29sIHJlc3Vs
dFNpZ24pOwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBC
aWdJbnRJbXBsMj4KICAgICBzdGF0aWMgSW1wbFJlc3VsdCBsZWZ0U2hpZnRCeUFic29sdXRlKEpT
R2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CiAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KICAgICBzdGF0
aWMgSW1wbFJlc3VsdCByaWdodFNoaWZ0QnlBYnNvbHV0ZShKU0dsb2JhbE9iamVjdCosIEJpZ0lu
dEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOwogCi0gICAgc3RhdGljIEltcGxSZXN1bHQgcmlnaHRT
aGlmdEJ5TWF4aW11bShWTSYsIGJvb2wgc2lnbik7CisgICAgc3RhdGljIEltcGxSZXN1bHQgcmln
aHRTaGlmdEJ5TWF4aW11bShKU0dsb2JhbE9iamVjdCosIGJvb2wgc2lnbik7CiAKICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KICAgICBzdGF0aWMgT3B0aW9uYWw8RGlnaXQ+IHRv
U2hpZnRBbW91bnQoQmlnSW50SW1wbCB4KTsKQEAgLTU1OCw5ICs1NjEsOSBAQCBjbGFzcyBKU0Jp
Z0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJ
bnRJbXBsPgogICAgIHN0YXRpYyBJbXBsUmVzdWx0IGFzVWludE5JbXBsKEpTR2xvYmFsT2JqZWN0
KiwgdWludDY0X3QsIEJpZ0ludEltcGwpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJ
bXBsPgotICAgIHN0YXRpYyBJbXBsUmVzdWx0IHRydW5jYXRlVG9OQml0cyhWTSYsIGludDMyX3Qs
IEJpZ0ludEltcGwpOworICAgIHN0YXRpYyBJbXBsUmVzdWx0IHRydW5jYXRlVG9OQml0cyhKU0ds
b2JhbE9iamVjdCosIGludDMyX3QsIEJpZ0ludEltcGwpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBCaWdJbnRJbXBsPgotICAgIHN0YXRpYyBJbXBsUmVzdWx0IHRydW5jYXRlQW5kU3ViRnJvbVBv
d2VyT2ZUd28oVk0mLCBpbnQzMl90LCBCaWdJbnRJbXBsLCBib29sIHJlc3VsdFNpZ24pOworICAg
IHN0YXRpYyBJbXBsUmVzdWx0IHRydW5jYXRlQW5kU3ViRnJvbVBvd2VyT2ZUd28oSlNHbG9iYWxP
YmplY3QqLCBpbnQzMl90LCBCaWdJbnRJbXBsLCBib29sIHJlc3VsdFNpZ24pOwogCiAgICAgaW5s
aW5lIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZEYXRhKCkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCmluZGV4IGE0NTc3MmNmZWE0NjRhOTRlYWFl
MTYwZjI1ODU2YmJmMTkzZjkwYmQuLjllNDcwM2JiNTYxYjkwNGViMTNkMmU4N2Q5ODQ3NmQwY2Vm
NGVmMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFs
dWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3Bw
CkBAIC0xMTgsMTkgKzExOCwyMyBAQCBKU09iamVjdCogSlNWYWx1ZTo6dG9PYmplY3RTbG93Q2Fz
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAogCiBKU1ZhbHVlIEpTVmFsdWU6
OnRvVGhpc1Nsb3dDYXNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVDTUFNb2RlIGVj
bWFNb2RlKSBjb25zdAogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBBU1NFUlQoIWlzQ2Vs
bCgpKTsKIAogICAgIGlmIChlY21hTW9kZS5pc1N0cmljdCgpKQogICAgICAgICByZXR1cm4gKnRo
aXM7CiAKICAgICBpZiAoaXNJbnQzMigpIHx8IGlzRG91YmxlKCkpCi0gICAgICAgIHJldHVybiBj
b25zdHJ1Y3ROdW1iZXIoZ2xvYmFsT2JqZWN0LCBhc1ZhbHVlKCkpOworICAgICAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIGNvbnN0cnVjdE51bWJlcihnbG9iYWxPYmplY3QsIGFzVmFsdWUo
KSkpOwogICAgIGlmIChpc1RydWUoKSB8fCBpc0ZhbHNlKCkpCi0gICAgICAgIHJldHVybiBjb25z
dHJ1Y3RCb29sZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4oZ2xvYmFsT2JqZWN0LCBhc1ZhbHVlKCkp
OworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNvbnN0cnVjdEJvb2xlYW5Gcm9t
SW1tZWRpYXRlQm9vbGVhbihnbG9iYWxPYmplY3QsIGFzVmFsdWUoKSkpOwogI2lmIFVTRShCSUdJ
TlQzMikKICAgICBpZiAoaXNCaWdJbnQzMigpKSB7Ci0gICAgICAgIEpTQ2VsbCogaGVhcEJpZ0lu
dCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KEpTQmlnSW50OjpjcmVhdGVGcm9tKGdsb2JhbE9iamVj
dC0+dm0oKSwgYmlnSW50MzJBc0ludDMyKCkpKTsKLSAgICAgICAgcmV0dXJuIGhlYXBCaWdJbnQt
PnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CisgICAgICAgIEpTQ2VsbCogaGVhcEJpZ0ludCA9IHN0
YXRpY19jYXN0PEpTQ2VsbCo+KEpTQmlnSW50OjpjcmVhdGVGcm9tKGdsb2JhbE9iamVjdCwgYmln
SW50MzJBc0ludDMyKCkpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBoZWFwQmlnSW50LT50b09iamVj
dChnbG9iYWxPYmplY3QpKTsKICAgICB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCmluZGV4IGZhOThjNTEyZjE0MTM1ZDEyYTgxNTMzYjUzMmZjMzlkNzY2YjFhYzEu
LmQ1MTBjNGU0ZDhkMmEyOWJjNjBkZmRhZDk1YjJlYTc4MjZmYTc0MmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTQ3Miw3ICs0NzIsMTEgQEAgVk06OlZNKFZNVHlwZSB2
bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICAgICBzZW50aW5lbE1hcEJ1Y2tldCgpOwog
ICAgICAgICBzZW50aW5lbFNldEJ1Y2tldCgpOwogICAgIH0KLSAgICBoZWFwQmlnSW50Q29uc3Rh
bnRPbmUuc2V0KCp0aGlzLCBKU0JpZ0ludDo6Y3JlYXRlRnJvbSgqdGhpcywgMSkpOworICAgIHsK
KyAgICAgICAgYXV0byogYmlnSW50ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZUZyb20oKnRoaXMsIDEp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVChiaWdJbnQpOworICAgICAgICBoZWFwQmlnSW50Q29u
c3RhbnRPbmUuc2V0KCp0aGlzLCBiaWdJbnQpOworICAgIH0KIAogICAgIFRocmVhZDo6Y3VycmVu
dCgpLnNldEN1cnJlbnRBdG9tU3RyaW5nVGFibGUoZXhpc3RpbmdFbnRyeUF0b21TdHJpbmdUYWJs
ZSk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcAppbmRleCBiNTIzMDM4ZDBhZDVhZTdmNDU1NDAxMjYwODYzZDc2OTg2
NDE2ZWRmLi5mZGQ4MjVjMjA4MDA1YWFkY2VhMjNkOTU4Y2VlYTc0YTExYTFkOTIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAKQEAgLTMwMDcsNyArMzAwNywxMSBAQCBjbGFzcyBDbG9uZURlc2VyaWFsaXplciA6IENsb25l
QmFzZSB7CiAjaWYgVVNFKEJJR0lOVDMyKQogICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIo
MCk7CiAjZWxzZQotICAgICAgICAgICAgSlNCaWdJbnQqIGJpZ0ludCA9IEpTQmlnSW50OjpjcmVh
dGVaZXJvKG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgICAgICBKU0JpZ0lu
dCogYmlnSW50ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVplcm8obV9sZXhpY2FsR2xvYmFsT2JqZWN0
LT52bSgpKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYmlnSW50KSkgeworICAgICAgICAg
ICAgICAgIGZhaWwoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93
KGJpZ0ludCk7CiAgICAgICAgICAgICByZXR1cm4gYmlnSW50OwogI2VuZGlmCmRpZmYgLS1naXQg
YS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDE1ZmVjNzdlODkw
YjliZDMyNGYxODc2ZGZlZTc3ZjE1Mzc5ZTgyNDYuLmI1M2Y2MzIxZmIzYTQyY2I1ZjdlMmE3M2Zj
YjMzMDI0NTIyMGQ5MDEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjAtMDUtMjkgIFl1c3VrZSBTdXp1a2kg
IDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBKU0JpZ0ludCBhbGxvY2F0aW9u
IHNob3VsZCBiZSBncmFjZWZ1bCBmb3IgT09NCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI1MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9iaWdpbnQtY2FuLXRocm93LW9vbS5qczogQ29w
aWVkIGZyb20gSlNUZXN0cy9zdHJlc3MvZ2V0LWZ1bmN0aW9uLXJlYWxtLW5vdC1kb2luZy1yZWN1
cnNpb24uanMuCisgICAgICAgIChjYW5UaHJvdyk6CisgICAgICAgIChmb28pOgorICAgICAgICAo
Z2V0IGZvbyk6CisgICAgICAgICogc3RyZXNzL2dldC1mdW5jdGlvbi1yZWFsbS1ub3QtZG9pbmct
cmVjdXJzaW9uLmpzOgorICAgICAgICAoY2FuVGhyb3cpOgorCiAyMDIwLTA1LTI3ICBLZWl0aCBN
aWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIGZvci1vZiBzaG91bGQg
Y2hlY2sgdGhlIGl0ZXJhYmxlIGlzIGEgSlNBcnJheSBmb3IgRmFzdEFycmF5IGluIERGRyBpdGVy
YXRvcl9vcGVuCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9iaWdpbnQtY2FuLXRocm93LW9v
bS5qcyBiL0pTVGVzdHMvc3RyZXNzL2JpZ2ludC1jYW4tdGhyb3ctb29tLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjcwMzFiN2M4ZGUxNzJlODI2Zjk0YWU1NTEzYjhhNTRhMGNhYjIzYWIKLS0tIC9kZXYvbnVsbAor
KysgYi9KU1Rlc3RzL3N0cmVzcy9iaWdpbnQtY2FuLXRocm93LW9vbS5qcwpAQCAtMCwwICsxLDM5
IEBACisvL0Agc2tpcCBpZiAkbWVtb3J5TGltaXRlZAorLy9AIHJ1bkRlZmF1bHQoIi0tdXNlQ29u
Y3VycmVudEpJVD0wIikKKworZnVuY3Rpb24gY2FuVGhyb3coZnVuYywgZXJyb3JNZXNzYWdlKSB7
CisgICAgdmFyIGVycm9yVGhyb3duID0gZmFsc2U7CisgICAgdmFyIGVycm9yID0gbnVsbDsKKyAg
ICB0cnkgeworICAgICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBlcnJv
clRocm93biA9IHRydWU7CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisgICAgaWYgKGVycm9y
VGhyb3duICYmIFN0cmluZyhlcnJvcikgIT09IGVycm9yTWVzc2FnZSkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKGBiYWQgZXJyb3I6ICR7U3RyaW5nKGVycm9yKX1gKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2NvbnN0IGEwID0gW107CithMC5fX3Byb3RvX18gPSB7fTsKK2EwLmxlbmd0aCA9
IDIqKjIzCitPYmplY3QuZGVmaW5lUHJvcGVydHkoYTAsIDAsIHsgZ2V0OiBmb28gfSk7CisKK2Z1
bmN0aW9uIGZvbygpIHsKKyAgICBuZXcgSW50MTZBcnJheShhMCk7Cit9CisKK25ldyBQcm9taXNl
KGZvbyk7CisKK3RyeSB7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7Cisg
ICAgICAgIG5ldyBVaW50OEFycmF5KDEwMDAwMCk7CisgICAgfQorfSBjYXRjaCB7fQorCitjYW5U
aHJvdygoKSA9PiB7CisgICAgZm9yIChsZXQgaT0wbjsgaTwxMDAwMG47IGkrKykgeworICAgICAg
ICAybioqaTsKKyAgICB9Cit9LCBgUmFuZ2VFcnJvcjogT3V0IG9mIG1lbW9yeWApOwpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy9zdHJlc3MvZ2V0LWZ1bmN0aW9uLXJlYWxtLW5vdC1kb2luZy1yZWN1cnNp
b24uanMgYi9KU1Rlc3RzL3N0cmVzcy9nZXQtZnVuY3Rpb24tcmVhbG0tbm90LWRvaW5nLXJlY3Vy
c2lvbi5qcwppbmRleCBhNzllZjJjYzYwZGFlOTgzYTRiMjk0ZjQ0YTE3ZDcyMWYzOTdmNjNiLi5m
ZmE2ZTNhYWNlOTNkM2QzYjg3YTM5NzUyNjQ5NzhiYjk2ZjI4NTE1IDEwMDY0NAotLS0gYS9KU1Rl
c3RzL3N0cmVzcy9nZXQtZnVuY3Rpb24tcmVhbG0tbm90LWRvaW5nLXJlY3Vyc2lvbi5qcworKysg
Yi9KU1Rlc3RzL3N0cmVzcy9nZXQtZnVuY3Rpb24tcmVhbG0tbm90LWRvaW5nLXJlY3Vyc2lvbi5q
cwpAQCAtOSw3ICs5LDYgQEAgZnVuY3Rpb24gY2FuVGhyb3coZnVuYywgZXJyb3JNZXNzYWdlKSB7
CiAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICBlcnJvclRocm93biA9IHRydWU7CiAgICAgICAg
IGVycm9yID0gZTsKLSAgICAgICAgcHJpbnQoZXJyb3IubWVzc2FnZSk7CiAgICAgfQogICAgIGlm
IChlcnJvclRocm93biAmJiBTdHJpbmcoZXJyb3IpICE9PSBlcnJvck1lc3NhZ2UpCiAgICAgICAg
IHRocm93IG5ldyBFcnJvcihgYmFkIGVycm9yOiAke1N0cmluZyhlcnJvcil9YCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400556</attachid>
            <date>2020-05-29 00:22:41 -0700</date>
            <delta_ts>2020-05-29 00:33:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212512-20200529002241.patch</filename>
            <type>text/plain</type>
            <size>90834</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMjc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MjI3NWIxOGQwNzg3ZGViOTNiMDA2ZjM3NWIxZjM1NzlhNGEyNDZkLi5lNjJiZDg1ZWUwMTA5MDhh
ODBmNzY2MzQwNGRjNTQwZDljMzJjMjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4OSBAQAorMjAyMC0wNS0yOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEpTQmlnSW50IGFsbG9jYXRpb24gc2hvdWxkIGJlIGdyYWNlZnVs
IGZvciBPT00KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMjUxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggYWxsb3dzIEpTQmlnSW50J3Mgc3RvcmFnZSBhbGxvY2F0aW9uIHRvIGZhaWwg
Z3JhY2VmdWxseSBpZiBPT00gY29uZGl0aW9uIGhhcHBlbnMuCisgICAgICAgIFdlIHRocmVhZCBK
U0dsb2JhbE9iamVjdCogaW5zdGVhZCBvZiBWTSYgYW5kIHRocm93IE9PTSBlcnJvciBpZiBzdG9y
YWdlIGFsbG9jYXRpb24gZmFpbGVkLgorICAgICAgICBXZSBhbHNvIHJlbmFtZSBgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdGAgcGFyYW1ldGVyIHRvIGBKU0dsb2JhbE9iamVjdCogbnVsbE9y
R2xvYmFsT2JqZWN0Rm9yT09NYAorICAgICAgICBpZiBpdCBjYW4gYmUgbnVsbHB0ci4KKworICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAg
ICAoZnVuY3Rpb25DcmVhdGVIZWFwQmlnSW50KToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyQXJl
bmEuY3BwOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyQXJlbmE6Om1ha2VCaWdJbnREZWNpbWFs
SWRlbnRpZmllcik6CisgICAgICAgICogcnVudGltZS9CaWdJbnRDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OnRvQmlnSW50KToKKyAgICAgICAgKEpTQzo6Y2FsbEJpZ0ludENvbnN0cnVj
dG9yKToKKyAgICAgICAgKiBydW50aW1lL0JpZ0ludFByb3RvdHlwZS5jcHA6CisgICAgICAgIChK
U0M6OnRvVGhpc0JpZ0ludFZhbHVlKToKKyAgICAgICAgKEpTQzo6YmlnSW50UHJvdG9GdW5jVG9T
dHJpbmcpOgorICAgICAgICAoSlNDOjpiaWdJbnRQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6Cisg
ICAgICAgIChKU0M6OmJpZ0ludFByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAqIHJ1bnRpbWUv
Q2FjaGVkVHlwZXMuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZWRCaWdJbnQ6OmRlY29kZSBjb25z
dCk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdEZ1bmNGb3JtYXQpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3BwOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
Y3JlYXRlWmVybyk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0cnlDcmVhdGVaZXJvKToKKyAg
ICAgICAgKEpTQzo6SlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGgpOgorICAgICAgICAoSlNDOjpK
U0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojpj
cmVhdGVGcm9tKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnRyeUNyZWF0ZUZyb20pOgorICAg
ICAgICAoSlNDOjpKU0JpZ0ludDo6Y3JlYXRlRnJvbUltcGwpOgorICAgICAgICAoSlNDOjpKU0Jp
Z0ludDo6cGFyc2VJbnQpOgorICAgICAgICAoSlNDOjpIZWFwQmlnSW50SW1wbDo6dG9IZWFwQmln
SW50KToKKyAgICAgICAgKEpTQzo6SW50MzJCaWdJbnRJbXBsOjp0b0hlYXBCaWdJbnQpOgorICAg
ICAgICAoSlNDOjp6ZXJvSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpleHBvbmVudGlh
dGVJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6Om11bHRpcGx5SW1wbCk6CisgICAgICAg
IChKU0M6OkpTQmlnSW50OjpkaXZpZGVJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmNv
cHkpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwpOgorICAgICAgICAo
SlNDOjpKU0JpZ0ludDo6dW5hcnlNaW51cyk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpyZW1h
aW5kZXJJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmluY0ltcGwpOgorICAgICAgICAo
SlNDOjpKU0JpZ0ludDo6YWRkSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpzdWJJbXBs
KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmJpdHdpc2VBbmRJbXBsKToKKyAgICAgICAgKEpT
Qzo6SlNCaWdJbnQ6OmJpdHdpc2VPckltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0
d2lzZVhvckltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVBZGQpOgorICAg
ICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVTdWIpOgorICAgICAgICAoSlNDOjpKU0JpZ0lu
dDo6YWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29yKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6
OmFic29sdXRlRGl2V2l0aEJpZ0ludERpdmlzb3IpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
YWJzb2x1dGVMZWZ0U2hpZnRBbHdheXNDb3B5KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFi
c29sdXRlQml0d2lzZU9wKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlQW5kKToK
KyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlT3IpOgorICAgICAgICAoSlNDOjpKU0Jp
Z0ludDo6YWJzb2x1dGVBbmROb3QpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVY
b3IpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVBZGRPbmUpOgorICAgICAgICAo
SlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVTdWJPbmUpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
bGVmdFNoaWZ0QnlBYnNvbHV0ZSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpyaWdodFNoaWZ0
QnlBYnNvbHV0ZSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpyaWdodFNoaWZ0QnlNYXhpbXVt
KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnRvU3RyaW5nQmFzZVBvd2VyT2ZUd28pOgorICAg
ICAgICAoSlNDOjpKU0JpZ0ludDo6dG9TdHJpbmdHZW5lcmljKToKKyAgICAgICAgKEpTQzo6SlNC
aWdJbnQ6OnJpZ2h0VHJpbSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphbGxvY2F0ZUZvcik6
CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojphc0ludE5JbXBsKToKKyAgICAgICAgKEpTQzo6SlNC
aWdJbnQ6OmFzVWludE5JbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnRydW5jYXRlVG9O
Qml0cyk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9m
VHdvKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQp
OiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuaDoKKyAgICAgICAgKiBydW50
aW1lL0pTQ0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjp0b1RoaXNTbG93Q2Fz
ZSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpW
TSk6CisKIDIwMjAtMDUtMjggIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IGFkZCBtaXNzaW5nIGNvbmRpdGlvbiBndWFyZHMgd2hlbiBn
ZW5lcmF0aW5nIG9iamMgcHJvdG9jb2wgZmlsZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwYzY2NjhhNmYzYTNh
M2NjZjJjMzg5YTU3ZTkyZGIzZmExNzA4NTU1Li5mZGZmYmI3Yjg4YjdjYTk4OWI2NTM4OTY1YThm
MTA2ZDdlZDdhYmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjAtMDUtMjkgIFl1
c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBKU0JpZ0lu
dCBhbGxvY2F0aW9uIHNob3VsZCBiZSBncmFjZWZ1bCBmb3IgT09NCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI1MTIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVh
ZEJpZ0ludCk6CisKIDIwMjAtMDUtMjggIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgog
CiAgICAgICAgIFtBcHBsZSBQYXldIEJ1dHRvbnMgcmVuZGVyIHdpdGggYSBjb3JuZXIgcmFkaXVz
IG9mIFBLQXBwbGVQYXlCdXR0b25EZWZhdWx0Q29ybmVyUmFkaXVzIGV2ZW4gd2hlbiBleHBsaWNp
dGx5IHNwZWNpZnlpbmcgImJvcmRlci1yYWRpdXM6IDBweCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IDNhNDFlNzYyZWM4ZDgzY2M0MmFjZTFkMTNi
MmQ0Nzk2MmI0Njc1NzUuLmQwMGVhMjk2MzYwMGM1MTEzYTg3OGIyY2VhZGNmNzU4MDlhYTFhYWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtMjg0
MiwxMCArMjg0MiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFy
aXRoTmVnYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAKICNpZiBVU0UoQklHSU5U
MzIpCiAgICAgaWYgKHByaW1WYWx1ZS5pc0JpZ0ludDMyKCkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5iaWdJbnQzMkFz
SW50MzIoKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVu
Y29kZShKU0JpZ0ludDo6dW5hcnlNaW51cyhnbG9iYWxPYmplY3QsIHByaW1WYWx1ZS5iaWdJbnQz
MkFzSW50MzIoKSkpKTsKICNlbmRpZgogICAgIGlmIChwcmltVmFsdWUuaXNIZWFwQmlnSW50KCkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWludXModm0s
IHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6dW5hcnlNaW51cyhnbG9iYWxPYmplY3Qs
IHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSkpKTsKIAogICAgIGRvdWJsZSBudW1iZXIgPSBwcmlt
VmFsdWUudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKQEAgLTI4NzAsMTMgKzI4NzAsMTUgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWwKIAogI2lmIFVTRShCSUdJTlQzMikKICAgICBpZiAocHJpbVZhbHVlLmlz
QmlnSW50MzIoKSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1p
bnVzKHZtLCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpOworICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKGdsb2JhbE9iamVjdCwgcHJpbVZhbHVlLmJpZ0lu
dDMyQXNJbnQzMigpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
ICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlUmVzdWx0KHJlc3VsdCk7CiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAjZW5kaWYKICAgICBpZiAocHJp
bVZhbHVlLmlzSGVhcEJpZ0ludCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJ
bnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSk7CisgICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFs
dWUuYXNIZWFwQmlnSW50KCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogICAgICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVSZXN1bHQocmVzdWx0KTsKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KQEAgLTI5MTIsMTMgKzI5
MTQsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5lZ2F0
ZVByb2ZpbGVkT3B0aW1pemUoSlNHbG9iYWxPYmplY3QKIAogI2lmIFVTRShCSUdJTlQzMikKICAg
ICBpZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9
IEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpOwor
ICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKGdsb2JhbE9iamVj
dCwgcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlUmVzdWx0KHJl
c3VsdCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAj
ZW5kaWYKICAgICBpZiAocHJpbVZhbHVlLmlzSGVhcEJpZ0ludCgpKSB7Ci0gICAgICAgIEpTVmFs
dWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5hc0hlYXBCaWdJ
bnQoKSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xv
YmFsT2JqZWN0LCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVSZXN1
bHQocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAg
IH0KQEAgLTI5NTQsMTAgKzI5NTgsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKICNpZiBV
U0UoQklHSU5UMzIpCiAgICAgLy8gRklYTUU6IHdoeSBkb2VzIHRoaXMgZnVuY3Rpb24gcHJvZmls
ZSB0aGUgYXJndW1lbnQgYnV0IG5vdCB0aGUgcmVzdWx0PwogICAgIGlmIChwcmltVmFsdWUuaXNC
aWdJbnQzMigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50Ojp1bmFy
eU1pbnVzKHZtLCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpKTsKKyAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWludXMo
Z2xvYmFsT2JqZWN0LCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpKSk7CiAjZW5kaWYKICAg
ICBpZiAocHJpbVZhbHVlLmlzSGVhcEJpZ0ludCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkp
KTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNC
aWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkp
KSk7CiAKICAgICBkb3VibGUgbnVtYmVyID0gcHJpbVZhbHVlLnRvTnVtYmVyKGdsb2JhbE9iamVj
dCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwCmluZGV4IGY2M2ZkNzAyNzJhN2FkMDc1N2ViMGJjYmE3OTQxZWExYjdj
ZjcxYWUuLmI4YzkyZjMwOWYxNzNmNWI5ZmFlY2QyYzU2MzRmYWQ4NzJmY2RkN2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCkBAIC0yMjUyLDcgKzIyNTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQ3JlYXRlSGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJpZ0ludCk7CiAgICAgQVNTRVJUKGJp
Z0ludC5pc0JpZ0ludDMyKCkpOwogICAgIGludDMyX3QgdmFsdWUgPSBiaWdJbnQuYmlnSW50MzJB
c0ludDMyKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6Y3JlYXRlRnJv
bSh2bSwgdmFsdWUpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVu
Y29kZShKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIHZhbHVlKSkpOwogI2Vsc2UK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJpZ0ludCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5jcHAKaW5kZXggYWFjMDU2NjkwZTQxZWVk
MGZiNjU5ZWFhNDQyYzk1MmY2NTUzNzM4MC4uYzcxOTg4NjI0MWQzNTdiZjBlMzdhYTliYTcwODQ3
ODQwZjEyM2Y0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXJBcmVuYS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVu
YS5jcHAKQEAgLTk2LDkgKzk2LDEwIEBAIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVu
YTo6bWFrZUJpZ0ludERlY2ltYWxJZGVudGlmaWVyKFZNJiB2bSwgY29uc3QgSWRlCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzYyNwogICAgIEpTQmln
SW50KiBoZWFwQmlnSW50OwogI2lmIFVTRShCSUdJTlQzMikKLSAgICBpZiAoYmlnSW50LmlzQmln
SW50MzIoKSkKLSAgICAgICAgaGVhcEJpZ0ludCA9IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCBi
aWdJbnQuYmlnSW50MzJBc0ludDMyKCkpOwotICAgIGVsc2UKKyAgICBpZiAoYmlnSW50LmlzQmln
SW50MzIoKSkgeworICAgICAgICBoZWFwQmlnSW50ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZUZyb20o
dm0sIGJpZ0ludC5iaWdJbnQzMkFzSW50MzIoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGhl
YXBCaWdJbnQpOworICAgIH0gZWxzZQogI2VuZGlmCiAgICAgICAgIGhlYXBCaWdJbnQgPSBiaWdJ
bnQuYXNIZWFwQmlnSW50KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0JpZ0ludENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0JpZ0ludENvbnN0cnVjdG9yLmNwcAppbmRleCA0ZmZiZmJiOTZkZDE3ZmFlMTk0N2I0NmJi
YzgxZDk4NDJkYmMwZDA5Li43ZTNkZTVlZWFkYjE2YzkxMjE2MTYyMWZkNGMyZWZiYTlhYmYzMDk3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRDb25zdHJ1
Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50Q29uc3Ry
dWN0b3IuY3BwCkBAIC04Nyw3ICs4Nyw3IEBAIEpTVmFsdWUgdG9CaWdJbnQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBhcmd1bWVudCkKICNpZiBVU0UoQklHSU5UMzIpCiAg
ICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHByaW1pdGl2ZS5hc0Jvb2xlYW4oKSk7CiAjZWxzZQot
ICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIHByaW1pdGl2ZS5hc0Jvb2xl
YW4oKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNCaWdJbnQ6OmNyZWF0
ZUZyb20oZ2xvYmFsT2JqZWN0LCBwcmltaXRpdmUuYXNCb29sZWFuKCkpKTsKICNlbmRpZgogICAg
IH0KIApAQCAtMTE2LDcgKzExNiw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNhbGxCaWdJbnRDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAjaWYgVVNF
KEJJR0lOVDMyKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQmlnSW50MzIocHJp
bWl0aXZlLmFzSW50MzIoKSkpOwogI2Vsc2UKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgcHJpbWl0aXZlLmFzSW50MzIoKSkpOworICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6Y3Jl
YXRlRnJvbShnbG9iYWxPYmplY3QsIHByaW1pdGl2ZS5hc0ludDMyKCkpKSk7CiAjZW5kaWYKICAg
ICB9CiAKQEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjYWxsQmlnSW50Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbAogICAgICAg
ICBkb3VibGUgbnVtYmVyID0gcHJpbWl0aXZlLmFzRG91YmxlKCk7CiAgICAgICAgIGlmICghaXNJ
bnRlZ2VyKG51bWJlcikpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiTm90IGFuIGludGVn
ZXIiX3MpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6bWFrZUhl
YXBCaWdJbnRPckJpZ0ludDMyKHZtLCBwcmltaXRpdmUuYXNEb3VibGUoKSkpOworICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6bWFrZUhl
YXBCaWdJbnRPckJpZ0ludDMyKGdsb2JhbE9iamVjdCwgcHJpbWl0aXZlLmFzRG91YmxlKCkpKSk7
CiAgICAgfQogCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUo
dG9CaWdJbnQoZ2xvYmFsT2JqZWN0LCBwcmltaXRpdmUpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50UHJvdG90eXBlLmNwcAppbmRleCA0YTRiNmUyZTk4MmUw
MjgzMWQ5ZTE2YWNiOTFkYWVkYjQ2MzczMzdjLi4xZDhmYzAwMjRhMTk3ODFlM2JiZjdkZDMyYjJi
MTRmYzAwYjEwOWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
aWdJbnRQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jp
Z0ludFByb3RvdHlwZS5jcHAKQEAgLTc0LDEyICs3NCwxNSBAQCB2b2lkIEJpZ0ludFByb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCopCiAKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTQmlnSW50KiB0b1RoaXNCaWdJbnRWYWx1ZShW
TSYgdm0sIEpTVmFsdWUgdGhpc1ZhbHVlKQorc3RhdGljIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQq
IHRvVGhpc0JpZ0ludFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
dGhpc1ZhbHVlKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICNpZiBVU0UoQklHSU5UMzIpCiAg
ICAgLy8gRklYTUU6IGhlYXAtYWxsb2NhdGluZyBhbGwgYmlnIGludHMgaXMgaW5uZWZpY2llbnQs
IGJ1dCByZS1pbXBsZW1lbnRpbmcgdG9TdHJpbmcgZm9yIHNtYWxsIEJpZ0ludHMgaXMgZW5vdWdo
IHdvcmsgdGhhdCBJJ20gZGVmZXJyaW5nIGl0IHRvIGEgbGF0ZXIgcGF0Y2guCiAgICAgaWYgKHRo
aXNWYWx1ZS5pc0JpZ0ludDMyKCkpCi0gICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJv
bSh2bSwgdGhpc1ZhbHVlLmJpZ0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIHRoaXNWYWx1
ZS5iaWdJbnQzMkFzSW50MzIoKSkpOwogI2VuZGlmCiAKICAgICBpZiAodGhpc1ZhbHVlLmlzQ2Vs
bCgpKSB7CkBAIC05MCwxMiArOTMsMTMgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQq
IHRvVGhpc0JpZ0ludFZhbHVlKFZNJiB2bSwgSlNWYWx1ZSB0aGlzVmFsdWUpCiAgICAgICAgICAg
ICBKU1ZhbHVlIGJpZ0ludCA9IGJpZ0ludE9iamVjdC0+aW50ZXJuYWxWYWx1ZSgpOwogI2lmIFVT
RShCSUdJTlQzMikKICAgICAgICAgICAgIGlmIChiaWdJbnQuaXNCaWdJbnQzMigpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgYmlnSW50LmJpZ0ludDMy
QXNJbnQzMigpKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpT
QmlnSW50OjpjcmVhdGVGcm9tKGdsb2JhbE9iamVjdCwgYmlnSW50LmJpZ0ludDMyQXNJbnQzMigp
KSk7CiAjZW5kaWYKICAgICAgICAgICAgIHJldHVybiBiaWdJbnQuYXNIZWFwQmlnSW50KCk7CiAg
ICAgICAgIH0KICAgICB9CiAKKyAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiJ3RoaXMnIHZhbHVlIG11c3QgYmUgYSBCaWdJbnQgb3IgQmlnSW50T2JqZWN0Il9zKTsKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtMTA0LDkgKzEwOCw4IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYmlnSW50UHJvdG9GdW5jVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEpTQmlnSW50KiB2YWx1ZSA9IHRv
VGhpc0JpZ0ludFZhbHVlKHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIXZh
bHVlKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiJ3RoaXMnIHZhbHVlIG11c3QgYmUgYSBCaWdJbnQgb3IgQmlnSW50T2JqZWN0Il9zKTsKKyAg
ICBKU0JpZ0ludCogdmFsdWUgPSB0b1RoaXNCaWdJbnRWYWx1ZShnbG9iYWxPYmplY3QsIGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAKICAgICBBU1NFUlQodmFsdWUpOwogCkBAIC0xMjksOSArMTMyLDggQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBiaWdJbnRQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhKU0dsb2JhbE9i
amVjdCogZ2xvYmEKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNCaWdJbnQqIHZhbHVlID0g
dG9UaGlzQmlnSW50VmFsdWUodm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICgh
dmFsdWUpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICIndGhpcycgdmFsdWUgbXVzdCBiZSBhIEJpZ0ludCBvciBCaWdJbnRPYmplY3QiX3MpOwor
ICAgIEpTQmlnSW50KiB2YWx1ZSA9IHRvVGhpc0JpZ0ludFZhbHVlKGdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKIAogICAgIGF1dG8qIG51bWJlckZvcm1hdCA9IEludGxOdW1iZXJGb3JtYXQ6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LT5udW1iZXJGb3JtYXRTdHJ1Y3R1cmUoKSk7CiAgICAgbnVtYmVyRm9y
bWF0LT5pbml0aWFsaXplTnVtYmVyRm9ybWF0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1
bWVudCgwKSwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSk7CkBAIC0xNDQsOSArMTQ2LDggQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBiaWdJbnRQcm90b0Z1bmNWYWx1ZU9mKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNCaWdJbnQq
IHZhbHVlID0gdG9UaGlzQmlnSW50VmFsdWUodm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwot
ICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsICIndGhpcycgdmFsdWUgbXVzdCBiZSBhIEJpZ0ludCBvciBCaWdJbnRPYmpl
Y3QiX3MpOworICAgIEpTQmlnSW50KiB2YWx1ZSA9IHRvVGhpc0JpZ0ludFZhbHVlKGdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKIAogICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2bSwgdmFsdWUt
PnN0cnVjdHVyZUlEKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCmluZGV4IDYwMWQw
MTlkZjkzZjhmMmY4Y2M2YzFmNTkxYTk0MTU0OGRjMDdmY2IuLmY5ZjYyNGI0NmU5NzUwYmY0OTc4
MTFmMzkxYWU0YTc2MjQ0N2Q1MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlZFR5cGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWRUeXBlcy5jcHAKQEAgLTEyNzksNyArMTI3OSw4IEBAIGNsYXNzIENhY2hlZEJpZ0lu
dCA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxKU0JpZ0ludD4gewogCiAgICAgSlNCaWdJ
bnQqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgSlNCaWdJ
bnQqIGJpZ0ludCA9IEpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKGRlY29kZXIu
dm0oKSwgbV9sZW5ndGgpOworICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gSlNCaWdJbnQ6OnRy
eUNyZWF0ZVdpdGhMZW5ndGgoZGVjb2Rlci52bSgpLCBtX2xlbmd0aCk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGJpZ0ludCk7CiAgICAgICAgIGJpZ0ludC0+c2V0U2lnbihtX3NpZ24pOwogICAg
ICAgICBpZiAobV9sZW5ndGgpCiAgICAgICAgICAgICBtZW1jcHkoYmlnSW50LT5kYXRhU3RvcmFn
ZSgpLCB0aGlzLT5idWZmZXIoKSwgc2l6ZW9mKEpTQmlnSW50OjpEaWdpdCkgKiBtX2xlbmd0aCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cAppbmRleCBhMzljMTM3NTc1NmZjZDU5ZjI2NDViMDA4MTRhNjBhODY4ZmIxOWFjLi4zMDM0NGMx
MjBlMmRiMzczYzNlMDRkNGI2Zjg2OGI3NTY4MDIwOGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKQEAgLTUzMCw3ICs1MzAsOCBA
QCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmVnYXRlKQogCiAjaWYgVVNFKEJJR0lOVDMyKQog
ICAgIGlmIChwcmltVmFsdWUuaXNCaWdJbnQzMigpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0
ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSk7
CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2Jq
ZWN0LCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpOworICAgICAgICBDSEVDS19FWENFUFRJ
T04oKTsKICAgICAgICAgUkVUVVJOX1dJVEhfUFJPRklMSU5HKHJlc3VsdCwgewogICAgICAgICAg
ICAgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKG1ldGFkYXRhLCByZXN1bHQsIG9w
ZXJhbmQpOwogICAgICAgICB9KTsKQEAgLTUzOCw3ICs1MzksOCBAQCBTTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfbmVnYXRlKQogI2VuZGlmCiAKICAgICBpZiAocHJpbVZhbHVlLmlzSGVhcEJpZ0lu
dCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXModm0s
IHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNC
aWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkp
OworICAgICAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICAgICAgUkVUVVJOX1dJVEhfUFJPRklM
SU5HKHJlc3VsdCwgewogICAgICAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0
aE9wKG1ldGFkYXRhLCByZXN1bHQsIG9wZXJhbmQpOwogICAgICAgICB9KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3Rv
dHlwZS5jcHAKaW5kZXggYWFiYWU3YmU5YmYxM2MzNTY2MWIyMjk0NWIxYjNiZDQ5MmVkNGU2ZC4u
NmRhYTg2YTkwYTE4YzM0YWI5MDQzMDUxOWVkMmFiMmM4MTY0MWJjMSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3Rv
dHlwZS5jcHAKQEAgLTk2LDggKzk2LDkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgSW50bE51bWJlckZvcm1hdEZ1bmNGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGcKIAogI2lm
IFVTRShCSUdJTlQzMikKICAgICBpZiAoYmlnSW50T3JOdW1iZXIuaXNCaWdJbnQzMigpKSB7Ci0g
ICAgICAgIEpTQmlnSW50KiB2YWx1ZSA9IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCBiaWdJbnRP
ck51bWJlci5iaWdJbnQzMkFzSW50MzIoKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUobnVtYmVyRm9ybWF0LT5mb3JtYXQoZ2xvYmFsT2JqZWN0LCB2YWx1ZSkpOworICAgICAgICBK
U0JpZ0ludCogdmFsdWUgPSBKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIGJpZ0lu
dE9yTnVtYmVyLmJpZ0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVl
OjplbmNvZGUobnVtYmVyRm9ybWF0LT5mb3JtYXQoZ2xvYmFsT2JqZWN0LCB2YWx1ZSkpKTsKICAg
ICB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCaWdJbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3Bw
CmluZGV4IDkwNDMyOWE3MjEwY2ZlZWU3YjVlYWI3NmMxNGVjMDA3ZGNhZjEyYjkuLjFhNzcyNDY4
ZTJkYTI3N2I1M2RkOWE1NzYwNTNmZjAwOTNhN2MyMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0JpZ0ludC5jcHAKQEAgLTgyLDQyICs4Miw2MSBAQCBTdHJ1Y3R1cmUqIEpT
QmlnSW50OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbAogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKEhlYXBCaWdJbnRUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlWmVybyhWTSYgdm0pCitpbmxp
bmUgSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVaZXJvKEpTR2xvYmFsT2JqZWN0KiBudWxsT3JH
bG9iYWxPYmplY3RGb3JPT00sIFZNJiB2bSkKIHsKLSAgICBKU0JpZ0ludCogemVyb0JpZ0ludCA9
IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIDApOwotICAgIHJldHVybiB6ZXJvQmlnSW50
OworICAgIHJldHVybiBjcmVhdGVXaXRoTGVuZ3RoKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwg
dm0sIDApOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgbGVuZ3RoKQorSlNCaWdJbnQqIEpT
QmlnSW50OjpjcmVhdGVaZXJvKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gY3JlYXRlWmVybyhnbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdC0+dm0oKSk7Cit9CisKK0pTQmlnSW50KiBKU0JpZ0ludDo6dHJ5Q3JlYXRlWmVybyhW
TSYgdm0pCit7CisgICAgcmV0dXJuIGNyZWF0ZVplcm8obnVsbHB0ciwgdm0pOworfQogCitpbmxp
bmUgSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiBu
dWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIFZNJiB2bSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoVU5MSUtFTFko
bGVuZ3RoID4gbWF4TGVuZ3RoKSkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgIkJpZ0ludCBnZW5lcmF0ZWQgZnJvbSB0aGlzIG9wZXJhdGlvbiBp
cyB0b28gYmlnIl9zKTsKKyAgICAgICAgaWYgKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSkKKyAg
ICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihudWxsT3JHbG9iYWxPYmplY3RGb3JPT00s
IHNjb3BlLCAiQmlnSW50IGdlbmVyYXRlZCBmcm9tIHRoaXMgb3BlcmF0aW9uIGlzIHRvbyBiaWci
X3MpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBzY29wZS5yZWxlYXNl
KCk7Ci0KLSAgICByZXR1cm4gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgbGVuZ3RoKTsK
LX0KLQotSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKFZNJiB2
bSwgdW5zaWduZWQgbGVuZ3RoKQotewogICAgIEFTU0VSVChsZW5ndGggPD0gbWF4TGVuZ3RoKTsK
LSAgICB2b2lkKiBkYXRhID0gR2lnYWNhZ2U6Om1hbGxvYyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBs
ZW5ndGggKiBzaXplb2YoRGlnaXQpKTsKKyAgICB2b2lkKiBkYXRhID0gR2lnYWNhZ2U6OnRyeU1h
bGxvYyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBsZW5ndGggKiBzaXplb2YoRGlnaXQpKTsKKyAgICBp
ZiAoVU5MSUtFTFkoIWRhdGEpKSB7CisgICAgICAgIGlmIChudWxsT3JHbG9iYWxPYmplY3RGb3JP
T00pCisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IobnVsbE9yR2xvYmFsT2JqZWN0
Rm9yT09NLCBzY29wZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KICAgICBKU0Jp
Z0ludCogYmlnSW50ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNCaWdJbnQ+KHZtLmhl
YXApKSBKU0JpZ0ludCh2bSwgdm0uYmlnSW50U3RydWN0dXJlLmdldCgpLCByZWludGVycHJldF9j
YXN0PERpZ2l0Kj4oZGF0YSksIGxlbmd0aCk7CiAgICAgYmlnSW50LT5maW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgcmV0dXJuIGJpZ0ludDsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVG
cm9tKFZNJiB2bSwgaW50MzJfdCB2YWx1ZSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6dHJ5Q3JlYXRl
V2l0aExlbmd0aChWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gY3JlYXRl
V2l0aExlbmd0aChudWxscHRyLCB2bSwgbGVuZ3RoKTsKK30KKworSlNCaWdJbnQqIEpTQmlnSW50
OjpjcmVhdGVXaXRoTGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVk
IGxlbmd0aCkKK3sKKyAgICByZXR1cm4gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdC0+dm0oKSwgbGVuZ3RoKTsKK30KKworaW5saW5lIEpTQmlnSW50KiBKU0JpZ0lu
dDo6Y3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCogbnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBW
TSYgdm0sIGludDMyX3QgdmFsdWUpCiB7CiAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJu
IGNyZWF0ZVplcm8odm0pOwotICAgIAotICAgIEpTQmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRo
TGVuZ3RoVW5jaGVja2VkKHZtLCAxKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8obnVsbE9y
R2xvYmFsT2JqZWN0Rm9yT09NLCB2bSk7CisKKyAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRl
V2l0aExlbmd0aChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCAxKTsKKyAgICBpZiAoVU5M
SUtFTFkoIWJpZ0ludCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCiAgICAgaWYgKHZhbHVl
IDwgMCkgewogICAgICAgICBiaWdJbnQtPnNldERpZ2l0KDAsIHN0YXRpY19jYXN0PERpZ2l0Pigt
MSAqIHN0YXRpY19jYXN0PGludDY0X3Q+KHZhbHVlKSkpOwogICAgICAgICBiaWdJbnQtPnNldFNp
Z24odHJ1ZSk7CkBAIC0xMjcsMzIgKzE0Niw1MSBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0
ZUZyb20oVk0mIHZtLCBpbnQzMl90IHZhbHVlKQogICAgIHJldHVybiBiaWdJbnQ7CiB9CiAKLUpT
QmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShWTSYgdm0sIHVpbnQzMl90IHZhbHVlKQorSlNC
aWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGludDMyX3QgdmFsdWUpCiB7CisgICAgcmV0dXJuIGNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QtPnZtKCksIHZhbHVlKTsKK30KKworSlNCaWdJbnQqIEpTQmlnSW50Ojp0cnlD
cmVhdGVGcm9tKFZNJiB2bSwgaW50MzJfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlRnJv
bShudWxscHRyLCB2bSwgdmFsdWUpOworfQorCitKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZy
b20oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDMyX3QgdmFsdWUpCit7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBjcmVhdGVa
ZXJvKHZtKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjcmVhdGVaZXJvKGds
b2JhbE9iamVjdCkpOwogICAgIAotICAgIEpTQmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVu
Z3RoVW5jaGVja2VkKHZtLCAxKTsKKyAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRlV2l0aExl
bmd0aChnbG9iYWxPYmplY3QsIDEpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51
bGxwdHIpOwogICAgIGJpZ0ludC0+c2V0RGlnaXQoMCwgc3RhdGljX2Nhc3Q8RGlnaXQ+KHZhbHVl
KSk7CiAgICAgcmV0dXJuIGJpZ0ludDsKIH0KIAotaW5saW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6
Y3JlYXRlRnJvbUltcGwoVk0mIHZtLCB1aW50NjRfdCB2YWx1ZSwgYm9vbCBzaWduKQoraW5saW5l
IEpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbUltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgdWludDY0X3QgdmFsdWUsIGJvb2wgc2lnbikKIHsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8odm0pOworICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNyZWF0ZVplcm8oZ2xvYmFsT2JqZWN0KSk7
CiAKICAgICAvLyBUaGlzIHBhdGggaXMgbm90IGp1c3QgYW4gb3B0aW1pemF0aW9uOiBiZWNhdXNl
IHdlIGRvIG5vdCBjYWxsIHJpZ2h0VHJpbSBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24sCiAg
ICAgLy8gaXQgd291bGQgYmUgYSBidWcgdG8gY3JlYXRlIGEgQmlnSW50IHdpdGggbGVuZ3RoPTIg
aW4gdGhpcyBjYXNlLgogICAgIGlmIChzaXplb2YoRGlnaXQpID09IDggfHwgdmFsdWUgPD0gVUlO
VDMyX01BWCkgewotICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aFVu
Y2hlY2tlZCh2bSwgMSk7CisgICAgICAgIEpTQmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVu
Z3RoKGdsb2JhbE9iamVjdCwgMSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IG51bGxwdHIpOwogICAgICAgICBiaWdJbnQtPnNldERpZ2l0KDAsIHN0YXRpY19jYXN0PERpZ2l0
Pih2YWx1ZSkpOwogICAgICAgICBiaWdJbnQtPnNldFNpZ24oc2lnbik7CiAgICAgICAgIHJldHVy
biBiaWdJbnQ7CiAgICAgfQogCiAgICAgQVNTRVJUKHNpemVvZihEaWdpdCkgPT0gNCk7Ci0gICAg
SlNCaWdJbnQqIGJpZ0ludCA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIDIpOworICAg
IEpTQmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgMik7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgRGlnaXQgbG93Qml0
cyAgPSBzdGF0aWNfY2FzdDxEaWdpdD4odmFsdWUgJiAweGZmZmZmZmZmKTsKICAgICBEaWdpdCBo
aWdoQml0cyA9IHN0YXRpY19jYXN0PERpZ2l0PigodmFsdWUgPj4gMzIpICYgMHhmZmZmZmZmZik7
CiAKQEAgLTE2NSwxMiArMjAzLDEyIEBAIGlubGluZSBKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0
ZUZyb21JbXBsKFZNJiB2bSwgdWludDY0X3QgdmFsdWUsIGJvb2wgc2lnbikKICAgICByZXR1cm4g
YmlnSW50OwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oVk0mIHZtLCB1aW50
NjRfdCB2YWx1ZSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gY3JlYXRlRnJv
bUltcGwodm0sIHZhbHVlLCBmYWxzZSk7CisgICAgcmV0dXJuIGNyZWF0ZUZyb21JbXBsKGdsb2Jh
bE9iamVjdCwgdmFsdWUsIGZhbHNlKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVG
cm9tKFZNJiB2bSwgaW50NjRfdCB2YWx1ZSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJv
bShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQ2NF90IHZhbHVlKQogewogICAgIHVp
bnQ2NF90IHVuc2lnbmVkVmFsdWU7CiAgICAgYm9vbCBzaWduID0gZmFsc2U7CkBAIC0xNzksMjQg
KzIxNywzMSBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oVk0mIHZtLCBpbnQ2NF90
IHZhbHVlKQogICAgICAgICBzaWduID0gdHJ1ZTsKICAgICB9IGVsc2UKICAgICAgICAgdW5zaWdu
ZWRWYWx1ZSA9IHZhbHVlOwotICAgIHJldHVybiBjcmVhdGVGcm9tSW1wbCh2bSwgdW5zaWduZWRW
YWx1ZSwgc2lnbik7CisgICAgcmV0dXJuIGNyZWF0ZUZyb21JbXBsKGdsb2JhbE9iamVjdCwgdW5z
aWduZWRWYWx1ZSwgc2lnbik7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShW
TSYgdm0sIGJvb2wgdmFsdWUpCitKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgYm9vbCB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8odm0pOwotICAg
IAotICAgIEpTQmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCAx
KTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjcmVhdGVaZXJvKGdsb2JhbE9i
amVjdCkpOworCisgICAgSlNCaWdJbnQqIGJpZ0ludCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFs
T2JqZWN0LCAxKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAg
ICBiaWdJbnQtPnNldERpZ2l0KDAsIHN0YXRpY19jYXN0PERpZ2l0Pih2YWx1ZSkpOwogICAgIHJl
dHVybiBiaWdJbnQ7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShWTSYgdm0s
IGRvdWJsZSB2YWx1ZSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBkb3VibGUgdmFsdWUpCiB7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KwogICAgIEFTU0VSVChpc0ludGVnZXIodmFsdWUpKTsKICAgICBpZiAoIXZhbHVlKQotICAgICAg
ICByZXR1cm4gY3JlYXRlWmVybyh2bSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgY3JlYXRlWmVybyhnbG9iYWxPYmplY3QpKTsKIAogICAgIGJvb2wgc2lnbiA9IHZhbHVlIDwg
MDsgLy8gLTAgd2FzIGFscmVhZHkgaGFuZGxlZCBhYm92ZS4KICAgICB1aW50NjRfdCBkb3VibGVC
aXRzID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZSk7CkBAIC0yMDUsNyArMjUwLDggQEAg
SlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKFZNJiB2bSwgZG91YmxlIHZhbHVlKQogICAg
IEFTU0VSVChyYXdFeHBvbmVudCA+PSAweDNmZik7IC8vIFNpbmNlIHZhbHVlIGlzIGludGVnZXIs
IGV4cG9uZW50IHNob3VsZCBiZSA+PSAwICsgYmlhcyAoMHgzZmYpLgogICAgIGludDMyX3QgZXhw
b25lbnQgPSByYXdFeHBvbmVudCAtIDB4M2ZmOwogICAgIGludDMyX3QgZGlnaXRzID0gZXhwb25l
bnQgLyBkaWdpdEJpdHMgKyAxOwotICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVu
Z3RoVW5jaGVja2VkKHZtLCBkaWdpdHMpOworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVX
aXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgZGlnaXRzKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBudWxscHRyKTsKICAgICBBU1NFUlQocmVzdWx0KTsKICAgICByZXN1bHQtPmluaXRp
YWxpemUoSW5pdGlhbGl6YXRpb25UeXBlOjpXaXRoWmVybyk7CiAgICAgcmVzdWx0LT5zZXRTaWdu
KHNpZ24pOwpAQCAtMjU5LDcgKzMwNSw3IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJv
bShWTSYgdm0sIGRvdWJsZSB2YWx1ZSkKICAgICAgICAgICAgIGRpZ2l0ID0gMDsKICAgICAgICAg
cmVzdWx0LT5zZXREaWdpdChkaWdpdEluZGV4LCBkaWdpdCk7CiAgICAgfQotICAgIHJldHVybiBy
ZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1
bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0KIAogSlNWYWx1ZSBKU0JpZ0ludDo6dG9Q
cmltaXRpdmUoSlNHbG9iYWxPYmplY3QqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdApA
QCAtMjc0LDExICszMjAsMTEgQEAgSlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJbnQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RyaW5nVmlldyBzLCBFcnJvclBhcnMKICAgICByZXR1cm4g
cGFyc2VJbnQoZ2xvYmFsT2JqZWN0LCBzLmNoYXJhY3RlcnMxNigpLCBzLmxlbmd0aCgpLCBwYXJz
ZXJNb2RlKTsKIH0KIAotSlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgVk0mIHZtLCBTdHJpbmdWaWV3IHMsIHVpbnQ4X3QgcmFkaXgsIEVycm9y
UGFyc2VNb2RlIHBhcnNlck1vZGUsIFBhcnNlSW50U2lnbiBzaWduKQorSlNWYWx1ZSBKU0JpZ0lu
dDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqIG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgVk0m
IHZtLCBTdHJpbmdWaWV3IHMsIHVpbnQ4X3QgcmFkaXgsIEVycm9yUGFyc2VNb2RlIHBhcnNlck1v
ZGUsIFBhcnNlSW50U2lnbiBzaWduKQogewogICAgIGlmIChzLmlzOEJpdCgpKQotICAgICAgICBy
ZXR1cm4gcGFyc2VJbnQoZ2xvYmFsT2JqZWN0LCB2bSwgcy5jaGFyYWN0ZXJzOCgpLCBzLmxlbmd0
aCgpLCAwLCByYWRpeCwgcGFyc2VyTW9kZSwgc2lnbiwgUGFyc2VJbnRNb2RlOjpEaXNhbGxvd0Vt
cHR5U3RyaW5nKTsKLSAgICByZXR1cm4gcGFyc2VJbnQoZ2xvYmFsT2JqZWN0LCB2bSwgcy5jaGFy
YWN0ZXJzMTYoKSwgcy5sZW5ndGgoKSwgMCwgcmFkaXgsIHBhcnNlck1vZGUsIHNpZ24sIFBhcnNl
SW50TW9kZTo6RGlzYWxsb3dFbXB0eVN0cmluZyk7CisgICAgICAgIHJldHVybiBwYXJzZUludChu
dWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCBzLmNoYXJhY3RlcnM4KCksIHMubGVuZ3RoKCks
IDAsIHJhZGl4LCBwYXJzZXJNb2RlLCBzaWduLCBQYXJzZUludE1vZGU6OkRpc2FsbG93RW1wdHlT
dHJpbmcpOworICAgIHJldHVybiBwYXJzZUludChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZt
LCBzLmNoYXJhY3RlcnMxNigpLCBzLmxlbmd0aCgpLCAwLCByYWRpeCwgcGFyc2VyTW9kZSwgc2ln
biwgUGFyc2VJbnRNb2RlOjpEaXNhbGxvd0VtcHR5U3RyaW5nKTsKIH0KIAogSlNWYWx1ZSBKU0Jp
Z0ludDo6c3RyaW5nVG9CaWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RyaW5n
VmlldyBzKQpAQCAtMzE4LDcgKzM2NCw4IEBAIGNsYXNzIEhlYXBCaWdJbnRJbXBsIHsKICAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgc2lnbigpIHsgcmV0dXJuIG1fYmlnSW50LT5zaWduKCk7IH0KICAg
ICBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fYmlnSW50LT5sZW5n
dGgoKTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQ6OkRpZ2l0IGRpZ2l0KHVuc2lnbmVk
IGkpIHsgcmV0dXJuIG1fYmlnSW50LT5kaWdpdChpKTsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNC
aWdJbnQqIHRvSGVhcEJpZ0ludChWTSYpIHsgcmV0dXJuIG1fYmlnSW50OyB9CisgICAgQUxXQVlT
X0lOTElORSBKU0JpZ0ludCogdG9IZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiwgVk0mKSB7IHJl
dHVybiBtX2JpZ0ludDsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQqIHRvSGVhcEJpZ0lu
dChKU0dsb2JhbE9iamVjdCopIHsgcmV0dXJuIG1fYmlnSW50OyB9CiAKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIHN0cnVjdCBKU0JpZ0ludDo6SW1wbFJlc3VsdDsKQEAgLTM0Myw3ICszOTAsMTUgQEAg
Y2xhc3MgSW50MzJCaWdJbnRJbXBsIHsKICAgICAgICAgcmV0dXJuIG1fdmFsdWU7CiAgICAgfQog
Ci0gICAgQUxXQVlTX0lOTElORSBKU0JpZ0ludCogdG9IZWFwQmlnSW50KFZNJiB2bSkgeyByZXR1
cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIG1fdmFsdWUpOyB9CisgICAgQUxXQVlTX0lOTElO
RSBKU0JpZ0ludCogdG9IZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmpl
Y3RGb3JPT00sIFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRl
RnJvbShudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCBtX3ZhbHVlKTsKKyAgICB9CisKKyAg
ICBBTFdBWVNfSU5MSU5FIEpTQmlnSW50KiB0b0hlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShn
bG9iYWxPYmplY3QsIG1fdmFsdWUpOworICAgIH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgc3Ry
dWN0IEpTQmlnSW50OjpJbXBsUmVzdWx0OwpAQCAtNDAyLDEzICs0NTcsMTMgQEAgc3RhdGljIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZSB0cnlDb252ZXJ0VG9CaWdJbnQzMihKU0JpZ0ludDo6SW1wbFJl
c3VsdCBpbXBsUmVzdWwKICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoaW1wbFJlc3Vs
dC5wYXlsb2FkLmFzSGVhcEJpZ0ludCgpKTsKIH0KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgSlNC
aWdJbnQ6OkltcGxSZXN1bHQgemVyb0ltcGwoVk0mIHZtKQorc3RhdGljIEFMV0FZU19JTkxJTkUg
SlNCaWdJbnQ6OkltcGxSZXN1bHQgemVyb0ltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKIHsKICNpZiBVU0UoQklHSU5UMzIpCi0gICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBVTlVT
RURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4ganNCaWdJbnQzMigwKTsKICNlbHNl
Ci0gICAgcmV0dXJuIEpTQmlnSW50OjpjcmVhdGVaZXJvKHZtKTsKKyAgICByZXR1cm4gSlNCaWdJ
bnQ6OmNyZWF0ZVplcm8oZ2xvYmFsT2JqZWN0KTsKICNlbmRpZgogfQogCkBAIC00MzEsNyArNDg2
LDcgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmV4cG9uZW50aWF0ZUltcGwoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmkKIAogICAgIC8vIDIuIElmIGJhc2UgaXMgMG4g
YW5kIGV4cG9uZW50IGlzIDBuLCByZXR1cm4gMW4uCiAgICAgaWYgKGV4cG9uZW50LmlzWmVybygp
KQotICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIDEpOworICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTQmlnSW50OjpjcmVhdGVGcm9tKGdsb2JhbE9iamVj
dCwgMSkpOwogICAgIAogICAgIC8vIDMuIFJldHVybiBhIEJpZ0ludCByZXByZXNlbnRpbmcgdGhl
IG1hdGhlbWF0aWNhbCB2YWx1ZSBvZiBiYXNlIHJhaXNlZAogICAgIC8vICAgIHRvIHRoZSBwb3dl
ciBleHBvbmVudC4KQEAgLTQ0MSw3ICs0OTYsNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0Jp
Z0ludDo6ZXhwb25lbnRpYXRlSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaQog
ICAgIGlmIChiYXNlLmxlbmd0aCgpID09IDEgJiYgYmFzZS5kaWdpdCgwKSA9PSAxKSB7CiAgICAg
ICAgIC8vICgtMSkgKiogZXZlbl9udW1iZXIgPT0gMS4KICAgICAgICAgaWYgKGJhc2Uuc2lnbigp
ICYmICEoZXhwb25lbnQuZGlnaXQoMCkgJiAxKSkKLSAgICAgICAgICAgIHJldHVybiBKU0JpZ0lu
dDo6dW5hcnlNaW51c0ltcGwodm0sIGJhc2UpOworICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwoZ2xvYmFsT2JqZWN0LCBiYXNlKSk7
CiAKICAgICAgICAgLy8gKC0xKSAqKiBvZGRfbnVtYmVyID09IC0xOyAxICoqIGFueXRoaW5nID09
IDEuCiAgICAgICAgIHJldHVybiBiYXNlOwpAQCAtNDY4LDcgKzUyMyw3IEBAIEpTQmlnSW50OjpJ
bXBsUmVzdWx0IEpTQmlnSW50OjpleHBvbmVudGlhdGVJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEJpCiAgICAgaWYgKGJhc2UubGVuZ3RoKCkgPT0gMSAmJiBiYXNlLmRpZ2l0KDAp
ID09IDIpIHsKICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciAyXm4uCiAgICAgICAgIGludCBuZWVk
ZWREaWdpdHMgPSAxICsgKG4gLyBkaWdpdEJpdHMpOwotICAgICAgICBKU0JpZ0ludCogcmVzdWx0
ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCBuZWVkZWREaWdp
dHMpOworICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5n
dGgoZ2xvYmFsT2JqZWN0LCBuZWVkZWREaWdpdHMpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgICAgICByZXN1bHQtPmluaXRpYWxpemUoSW5pdGlh
bGl6YXRpb25UeXBlOjpXaXRoWmVybyk7CkBAIC00ODMsMTEgKzUzOCwxNCBAQCBKU0JpZ0ludDo6
SW1wbFJlc3VsdCBKU0JpZ0ludDo6ZXhwb25lbnRpYXRlSW1wbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBCaQogICAgIH0KIAogICAgIEpTQmlnSW50KiByZXN1bHQgPSBudWxscHRyOwot
ICAgIEpTQmlnSW50KiBydW5uaW5nU3F1YXJlID0gYmFzZS50b0hlYXBCaWdJbnQodm0pOworICAg
IEpTQmlnSW50KiBydW5uaW5nU3F1YXJlID0gYmFzZS50b0hlYXBCaWdJbnQoZ2xvYmFsT2JqZWN0
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIC8vIFRo
aXMgaW1wbGljaXRseSBzZXRzIHRoZSByZXN1bHQncyBzaWduIGNvcnJlY3RseS4KLSAgICBpZiAo
biAmIDEpCi0gICAgICAgIHJlc3VsdCA9IGJhc2UudG9IZWFwQmlnSW50KHZtKTsKKyAgICBpZiAo
biAmIDEpIHsKKyAgICAgICAgcmVzdWx0ID0gYmFzZS50b0hlYXBCaWdJbnQoZ2xvYmFsT2JqZWN0
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgfQog
CiAgICAgbiA+Pj0gMTsKICAgICBmb3IgKDsgbjsgbiA+Pj0gMSkgewpAQCAtNTQ4LDcgKzYwNiw3
IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjptdWx0aXBseUltcGwoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50CiAgICAgICAgIHJldHVybiB5OwogCiAgICAgdW5z
aWduZWQgcmVzdWx0TGVuZ3RoID0geC5sZW5ndGgoKSArIHkubGVuZ3RoKCk7Ci0gICAgSlNCaWdJ
bnQqIHJlc3VsdCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwg
cmVzdWx0TGVuZ3RoKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmNyZWF0ZVdp
dGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIHJlc3VsdC0+aW5pdGlhbGl6ZShJbml0aWFsaXph
dGlvblR5cGU6OldpdGhaZXJvKTsKIApAQCAtNTU2LDcgKzYxNCw3IEBAIEpTQmlnSW50OjpJbXBs
UmVzdWx0IEpTQmlnSW50OjptdWx0aXBseUltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQmlnSW50CiAgICAgICAgIG11bHRpcGx5QWNjdW11bGF0ZSh5LCB4LmRpZ2l0KGkpLCByZXN1
bHQsIGkpOwogCiAgICAgcmVzdWx0LT5zZXRTaWduKHguc2lnbigpICE9IHkuc2lnbigpKTsKLSAg
ICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0odm0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgcmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIEpTVmFsdWUgSlNC
aWdJbnQ6Om11bHRpcGx5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4
LCBKU0JpZ0ludCogeSkKQEAgLTU5MCwyNCArNjQ4LDMwIEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0
IEpTQmlnSW50OjpkaXZpZGVJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0lu
dEltCiAgICAgLy8gMy4gUmV0dXJuIGEgQmlnSW50IHJlcHJlc2VudGluZyBxdW90aWVudCByb3Vu
ZGVkIHRvd2FyZHMgMCB0byB0aGUgbmV4dAogICAgIC8vICAgIGludGVncmFsIHZhbHVlLgogICAg
IGlmIChhYnNvbHV0ZUNvbXBhcmUoeCwgeSkgPT0gQ29tcGFyaXNvblJlc3VsdDo6TGVzc1RoYW4p
Ci0gICAgICAgIHJldHVybiB6ZXJvSW1wbCh2bSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgemVyb0ltcGwoZ2xvYmFsT2JqZWN0KSk7CiAKICAgICBKU0JpZ0ludCogcXVvdGll
bnQgPSBudWxscHRyOwogICAgIGJvb2wgcmVzdWx0U2lnbiA9IHguc2lnbigpICE9IHkuc2lnbigp
OwogICAgIGlmICh5Lmxlbmd0aCgpID09IDEpIHsKICAgICAgICAgRGlnaXQgZGl2aXNvciA9IHku
ZGlnaXQoMCk7Ci0gICAgICAgIGlmIChkaXZpc29yID09IDEpCi0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0U2lnbiA9PSB4LnNpZ24oKSA/IEpTQmlnSW50OjpJbXBsUmVzdWx0IHsgeCB9IDogSlNC
aWdJbnQ6OnVuYXJ5TWludXNJbXBsKHZtLCB4KTsKKyAgICAgICAgaWYgKGRpdmlzb3IgPT0gMSkg
eworICAgICAgICAgICAgaWYgKHJlc3VsdFNpZ24gPT0geC5zaWduKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEpTQmlnSW50OjpJbXBsUmVzdWx0IHsgeCB9OworICAgICAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwoZ2xvYmFsT2JqZWN0
LCB4KSk7CisgICAgICAgIH0KIAogICAgICAgICBEaWdpdCByZW1haW5kZXI7Ci0gICAgICAgIGFi
c29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcih2bSwgeCwgZGl2aXNvciwgJnF1b3RpZW50LCByZW1h
aW5kZXIpOworICAgICAgICBhYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3IoZ2xvYmFsT2JqZWN0
LCB2bSwgeCwgZGl2aXNvciwgJnF1b3RpZW50LCByZW1haW5kZXIpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICB9IGVsc2UgewotICAgICAgICBhYnNv
bHV0ZURpdldpdGhCaWdJbnREaXZpc29yKGdsb2JhbE9iamVjdCwgeCwgeS50b0hlYXBCaWdJbnQo
dm0pLCAmcXVvdGllbnQsIG51bGxwdHIpOworICAgICAgICBKU0JpZ0ludCogeUJpZ0ludCA9IHku
dG9IZWFwQmlnSW50KGdsb2JhbE9iamVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIG51bGxwdHIpOworICAgICAgICBhYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKGds
b2JhbE9iamVjdCwgeCwgeUJpZ0ludCwgJnF1b3RpZW50LCBudWxscHRyKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgfQogCiAgICAgcXVvdGllbnQt
PnNldFNpZ24ocmVzdWx0U2lnbik7Ci0gICAgcmV0dXJuIHF1b3RpZW50LT5yaWdodFRyaW0odm0p
OworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcXVvdGllbnQtPnJpZ2h0VHJpbShnbG9i
YWxPYmplY3QpKTsKIH0KIAogSlNWYWx1ZSBKU0JpZ0ludDo6ZGl2aWRlKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKQEAgLTYyNiwxMSArNjkw
LDE2IEBAIEpTVmFsdWUgSlNCaWdJbnQ6OmRpdmlkZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KQogI2VuZGlmCiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBCaWdJbnRJbXBsPgotSlNCaWdJbnQqIEpTQmlnSW50Ojpjb3B5KFZNJiB2bSwgQmlnSW50SW1w
bCB4KQorSlNCaWdJbnQqIEpTQmlnSW50Ojpjb3B5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEJpZ0ludEltcGwgeCkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgQVNTRVJUKCF4
LmlzWmVybygpKTsKIAotICAgIEpTQmlnSW50KiByZXN1bHQgPSBKU0JpZ0ludDo6Y3JlYXRlV2l0
aExlbmd0aFVuY2hlY2tlZCh2bSwgeC5sZW5ndGgoKSk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9
IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCB4Lmxlbmd0aCgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByZXN1bHQtPmxlbmd0aCgpOyArK2kpCiAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwg
eC5kaWdpdChpKSk7CiAgICAgcmVzdWx0LT5zZXRTaWduKHguc2lnbigpKTsKQEAgLTYzOCwxOSAr
NzA3LDI0IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6Y29weShWTSYgdm0sIEJpZ0ludEltcGwgeCkK
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci1KU0JpZ0ludDo6SW1wbFJlc3Vs
dCBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwoVk0mIHZtLCBCaWdJbnRJbXBsIHgpCitKU0JpZ0lu
dDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQmlnSW50SW1wbCB4KQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBp
ZiAoeC5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuIHplcm9JbXBsKHZtKTsKKyAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB6ZXJvSW1wbChnbG9iYWxPYmplY3QpKTsKKworICAgIEpT
QmlnSW50KiByZXN1bHQgPSBjb3B5KGdsb2JhbE9iamVjdCwgeCk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gY29weSh2
bSwgeCk7CiAgICAgcmVzdWx0LT5zZXRTaWduKCF4LnNpZ24oKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotSlNWYWx1ZSBKU0JpZ0ludDo6dW5hcnlNaW51cyhWTSYgdm0sIEpTQmlnSW50KiB4
KQorSlNWYWx1ZSBKU0JpZ0ludDo6dW5hcnlNaW51cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0JpZ0ludCogeCkKIHsKLSAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIodW5h
cnlNaW51c0ltcGwodm0sIEhlYXBCaWdJbnRJbXBsIHsgeCB9KSk7CisgICAgcmV0dXJuIHRyeUNv
bnZlcnRUb0JpZ0ludDMyKHVuYXJ5TWludXNJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludElt
cGwgeyB4IH0pKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFt
ZSBCaWdJbnRJbXBsMj4KQEAgLTY3NCwyMiArNzQ4LDI3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0
IEpTQmlnSW50OjpyZW1haW5kZXJJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJp
Z0luCiAgICAgaWYgKHkubGVuZ3RoKCkgPT0gMSkgewogICAgICAgICBEaWdpdCBkaXZpc29yID0g
eS5kaWdpdCgwKTsKICAgICAgICAgaWYgKGRpdmlzb3IgPT0gMSkKLSAgICAgICAgICAgIHJldHVy
biB6ZXJvSW1wbCh2bSk7CisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHpl
cm9JbXBsKGdsb2JhbE9iamVjdCkpOwogCiAgICAgICAgIERpZ2l0IHJlbWFpbmRlckRpZ2l0Owot
ICAgICAgICBhYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3Iodm0sIHgsIGRpdmlzb3IsIG51bGxw
dHIsIHJlbWFpbmRlckRpZ2l0KTsKKyAgICAgICAgYWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29y
KGdsb2JhbE9iamVjdCwgdm0sIHgsIGRpdmlzb3IsIG51bGxwdHIsIHJlbWFpbmRlckRpZ2l0KTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisKICAgICAgICAg
aWYgKCFyZW1haW5kZXJEaWdpdCkKLSAgICAgICAgICAgIHJldHVybiB6ZXJvSW1wbCh2bSk7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHplcm9JbXBsKGdsb2JhbE9iamVj
dCkpOwogCi0gICAgICAgIHJlbWFpbmRlciA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0s
IDEpOworICAgICAgICByZW1haW5kZXIgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwg
MSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAg
ICByZW1haW5kZXItPnNldERpZ2l0KDAsIHJlbWFpbmRlckRpZ2l0KTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBhYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKGdsb2JhbE9iamVjdCwgeCwgeS50
b0hlYXBCaWdJbnQodm0pLCBudWxscHRyLCAmcmVtYWluZGVyKTsKKyAgICAgICAgSlNCaWdJbnQq
IHlCaWdJbnQgPSB5LnRvSGVhcEJpZ0ludChnbG9iYWxPYmplY3QpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKyAgICAgICAgYWJzb2x1dGVEaXZXaXRoQmln
SW50RGl2aXNvcihnbG9iYWxPYmplY3QsIHgsIHlCaWdJbnQsIG51bGxwdHIsICZyZW1haW5kZXIp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICB9CiAK
ICAgICByZW1haW5kZXItPnNldFNpZ24oeC5zaWduKCkpOwotICAgIHJldHVybiByZW1haW5kZXIt
PnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZW1haW5kZXIt
PnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0KIEpTVmFsdWUgSlNCaWdJbnQ6OnJlbWFpbmRl
cihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkp
CiB7CkBAIC03MDksOSArNzg4LDEzIEBAIEpTVmFsdWUgSlNCaWdJbnQ6OnJlbWFpbmRlcihKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5CiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojpp
bmNJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCkKIHsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKCF4LnNpZ24oKSkKLSAgICAgICAgcmV0dXJuIGFi
c29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgeCwgU2lnbk9wdGlvbjo6VW5zaWduZWQpOworICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVj
dCwgeCwgU2lnbk9wdGlvbjo6VW5zaWduZWQpKTsKICAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJz
b2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB4LCB4Lmxlbmd0aCgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBpZiAocmVzdWx0LT5pc1plcm8oKSkKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICByZXN1bHQtPnNldFNpZ24odHJ1ZSk7CkBAIC03NDYs
NyArODI5LDYgQEAgSlNWYWx1ZSBKU0JpZ0ludDo6ZGVjKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQmlnSW50KiB4KQogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBl
bmFtZSBCaWdJbnRJbXBsMj4KIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjphZGRJbXBs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwy
IHkpCiB7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGJvb2wgeFNpZ24g
PSB4LnNpZ24oKTsKIAogICAgIC8vIHggKyB5ID09IHggKyB5CkBAIC03NTgsOSArODQwLDkgQEAg
SlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFkZEltcGwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQmlnSW50SW1wbDEKICAgICAvLyAteCArIHkgPT0geSAtIHggPT0gLSh4IC0g
eSkKICAgICBDb21wYXJpc29uUmVzdWx0IGNvbXBhcmlzb25SZXN1bHQgPSBhYnNvbHV0ZUNvbXBh
cmUoeCwgeSk7CiAgICAgaWYgKGNvbXBhcmlzb25SZXN1bHQgPT0gQ29tcGFyaXNvblJlc3VsdDo6
R3JlYXRlclRoYW4gfHwgY29tcGFyaXNvblJlc3VsdCA9PSBDb21wYXJpc29uUmVzdWx0OjpFcXVh
bCkKLSAgICAgICAgcmV0dXJuIGFic29sdXRlU3ViKHZtLCB4LCB5LCB4U2lnbik7CisgICAgICAg
IHJldHVybiBhYnNvbHV0ZVN1YihnbG9iYWxPYmplY3QsIHgsIHksIHhTaWduKTsKIAotICAgIHJl
dHVybiBhYnNvbHV0ZVN1Yih2bSwgeSwgeCwgIXhTaWduKTsKKyAgICByZXR1cm4gYWJzb2x1dGVT
dWIoZ2xvYmFsT2JqZWN0LCB5LCB4LCAheFNpZ24pOwogfQogSlNWYWx1ZSBKU0JpZ0ludDo6YWRk
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkK
IHsKQEAgLTc4MCw3ICs4NjIsNiBAQCBKU1ZhbHVlIEpTQmlnSW50OjphZGQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSkKIHRlbXBsYXRlIDx0eXBl
bmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CiBKU0JpZ0ludDo6SW1wbFJl
c3VsdCBKU0JpZ0ludDo6c3ViSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJ
bnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBib29sIHhTaWduID0geC5zaWduKCk7CiAgICAgaWYgKHhTaWduICE9IHkuc2ln
bigpKSB7CiAgICAgICAgIC8vIHggLSAoLXkpID09IHggKyB5CkBAIC03OTEsOSArODcyLDkgQEAg
SlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnN1YkltcGwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQmlnSW50SW1wbDEKICAgICAvLyAoLXgpIC0gKC15KSA9PSB5IC0geCA9PSAt
KHggLSB5KQogICAgIENvbXBhcmlzb25SZXN1bHQgY29tcGFyaXNvblJlc3VsdCA9IGFic29sdXRl
Q29tcGFyZSh4LCB5KTsKICAgICBpZiAoY29tcGFyaXNvblJlc3VsdCA9PSBDb21wYXJpc29uUmVz
dWx0OjpHcmVhdGVyVGhhbiB8fCBjb21wYXJpc29uUmVzdWx0ID09IENvbXBhcmlzb25SZXN1bHQ6
OkVxdWFsKQotICAgICAgICByZXR1cm4gYWJzb2x1dGVTdWIodm0sIHgsIHksIHhTaWduKTsKKyAg
ICAgICAgcmV0dXJuIGFic29sdXRlU3ViKGdsb2JhbE9iamVjdCwgeCwgeSwgeFNpZ24pOwogCi0g
ICAgcmV0dXJuIGFic29sdXRlU3ViKHZtLCB5LCB4LCAheFNpZ24pOworICAgIHJldHVybiBhYnNv
bHV0ZVN1YihnbG9iYWxPYmplY3QsIHksIHgsICF4U2lnbik7CiB9CiAKIEpTVmFsdWUgSlNCaWdJ
bnQ6OnN1YihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJ
bnQqIHkpCkBAIC04MTcsMTAgKzg5OCw4IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50
OjpiaXR3aXNlQW5kSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJCiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAotICAgIGlmICgheC5zaWduKCkgJiYgIXkuc2lnbigpKSB7Ci0gICAg
ICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQW5kKHZtLCB4LCB5
KTsKLSAgICB9CisgICAgaWYgKCF4LnNpZ24oKSAmJiAheS5zaWduKCkpCisgICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVBbmQoZ2xvYmFsT2JqZWN0LCB4LCB5KSk7CiAg
ICAgCiAgICAgaWYgKHguc2lnbigpICYmIHkuc2lnbigpKSB7CiAgICAgICAgIGludCByZXN1bHRM
ZW5ndGggPSBzdGQ6Om1heCh4Lmxlbmd0aCgpLCB5Lmxlbmd0aCgpKSArIDE7CkBAIC04MzEsOSAr
OTEwLDkgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VBbmRJbXBsKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0kKIAogICAgICAgICBKU0JpZ0ludCogeTEg
PSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHksIHkubGVuZ3RoKCkpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICAgICAgcmVzdWx0ID0gYWJz
b2x1dGVPcih2bSwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgSGVhcEJpZ0ludEltcGwgeyB5
MSB9KTsKLSAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gYWJzb2x1dGVB
ZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9u
OjpTaWduZWQpOworICAgICAgICByZXN1bHQgPSBhYnNvbHV0ZU9yKGdsb2JhbE9iamVjdCwgSGVh
cEJpZ0ludEltcGwgeyByZXN1bHQgfSwgSGVhcEJpZ0ludEltcGwgeyB5MSB9KTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1w
bCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpKTsKICAgICB9CiAKICAgICBBU1NFUlQo
eC5zaWduKCkgIT0geS5zaWduKCkpOwpAQCAtODQzLDcgKzkyMiw3IEBAIEpTQmlnSW50OjpJbXBs
UmVzdWx0IEpTQmlnSW50OjpiaXR3aXNlQW5kSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBCaWdJCiAgICAgICAgIEFTU0VSVCh5LnNpZ24oKSk7IAogICAgICAgICBKU0JpZ0ludCog
eTEgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHksIHkubGVuZ3RoKCkpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICAgICAgcmV0dXJuIGFi
c29sdXRlQW5kTm90KHZtLCB4LCBIZWFwQmlnSW50SW1wbCB7IHkxIH0pOworICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIGFic29sdXRlQW5kTm90KGdsb2JhbE9iamVjdCwgeCwgSGVh
cEJpZ0ludEltcGwgeyB5MSB9KSk7CiAgICAgfTsKICAgICBpZiAoeC5zaWduKCkpCiAgICAgICAg
IHJldHVybiBjb21wdXRlUmVzdWx0KHksIHgpOwpAQCAtODczLDEwICs5NTIsOCBAQCBKU0JpZ0lu
dDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6Yml0d2lzZU9ySW1wbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBCaWdJbgogCiAgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgo
eC5sZW5ndGgoKSwgeS5sZW5ndGgoKSk7CiAKLSAgICBpZiAoIXguc2lnbigpICYmICF5LnNpZ24o
KSkgewotICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBhYnNvbHV0ZU9y
KHZtLCB4LCB5KTsKLSAgICB9CisgICAgaWYgKCF4LnNpZ24oKSAmJiAheS5zaWduKCkpCisgICAg
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVPcihnbG9iYWxPYmplY3QsIHgs
IHkpKTsKICAgICAKICAgICBpZiAoeC5zaWduKCkgJiYgeS5zaWduKCkpIHsKICAgICAgICAgLy8g
KC14KSB8ICgteSkgPT0gfih4LTEpIHwgfih5LTEpID09IH4oKHgtMSkgJiAoeS0xKSkKQEAgLTg4
NSwxMSArOTYyLDkgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VPcklt
cGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW4KICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgIEpTQmlnSW50KiB5MSA9IGFic29s
dXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeSwgeS5sZW5ndGgoKSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotICAgICAgICByZXN1bHQgPSBhYnNvbHV0ZUFu
ZCh2bSwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgSGVhcEJpZ0ludEltcGwgeyB5MSB9KTsK
KyAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVBbmQoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1w
bCB7IHJlc3VsdCB9LCBIZWFwQmlnSW50SW1wbCB7IHkxIH0pOwogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLQotICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0g
ICAgICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBs
IHsgcmVzdWx0IH0sIFNpZ25PcHRpb246OlNpZ25lZCk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7
IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpKTsKICAgICB9CiAgICAgCiAgICAgQVNTRVJU
KHguc2lnbigpICE9IHkuc2lnbigpKTsKQEAgLTkwMSwxMCArOTc2LDkgQEAgSlNCaWdJbnQ6Oklt
cGxSZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VPckltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQmlnSW4KIAogICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUo
Z2xvYmFsT2JqZWN0LCB5LCByZXN1bHRMZW5ndGgpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVBbmROb3Qodm0s
IEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIHgpOwotCi0gICAgICAgIHNjb3BlLnJlbGVhc2Uo
KTsKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0lu
dEltcGwgeyByZXN1bHQgfSwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKKyAgICAgICAgcmVzdWx0ID0g
YWJzb2x1dGVBbmROb3QoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCB4
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBI
ZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpKTsKICAgICB9Owog
CiAgICAgaWYgKHguc2lnbigpKQpAQCAtOTMzLDEwICsxMDA3LDggQEAgSlNCaWdJbnQ6OkltcGxS
ZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VYb3JJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEJpZ0kKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCF4LnNpZ24oKSAmJiAheS5z
aWduKCkpIHsKLSAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gYWJzb2x1
dGVYb3Iodm0sIHgsIHkpOwotICAgIH0KKyAgICBpZiAoIXguc2lnbigpICYmICF5LnNpZ24oKSkK
KyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBhYnNvbHV0ZVhvcihnbG9iYWxPYmpl
Y3QsIHgsIHkpKTsKICAgICAKICAgICBpZiAoeC5zaWduKCkgJiYgeS5zaWduKCkpIHsKICAgICAg
ICAgaW50IHJlc3VsdExlbmd0aCA9IHN0ZDo6bWF4KHgubGVuZ3RoKCksIHkubGVuZ3RoKCkpOwpA
QCAtOTQ2LDkgKzEwMTgsNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6Yml0d2lz
ZVhvckltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSQogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgSlNCaWdJbnQqIHkxID0g
YWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCB5Lmxlbmd0aCgpKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0KLSAgICAgICAgc2NvcGUucmVsZWFz
ZSgpOwotICAgICAgICByZXR1cm4gYWJzb2x1dGVYb3Iodm0sIEhlYXBCaWdJbnRJbXBsIHsgcmVz
dWx0IH0sIEhlYXBCaWdJbnRJbXBsIHsgeTEgfSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgYWJzb2x1dGVYb3IoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3Vs
dCB9LCBIZWFwQmlnSW50SW1wbCB7IHkxIH0pKTsKICAgICB9CiAgICAgQVNTRVJUKHguc2lnbigp
ICE9IHkuc2lnbigpKTsKICAgICBpbnQgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoeC5sZW5ndGgo
KSwgeS5sZW5ndGgoKSkgKyAxOwpAQCAtOTYwLDkgKzEwMzAsOSBAQCBKU0JpZ0ludDo6SW1wbFJl
c3VsdCBKU0JpZ0ludDo6Yml0d2lzZVhvckltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQmlnSQogICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFs
T2JqZWN0LCB5LCByZXN1bHRMZW5ndGgpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKIAotICAgICAgICByZXN1bHQgPSBhYnNvbHV0ZVhvcih2bSwgSGVhcEJp
Z0ludEltcGwgeyByZXN1bHQgfSwgeCk7Ci0gICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAg
ICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyBy
ZXN1bHQgfSwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKKyAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVY
b3IoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCB4KTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1w
bCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpKTsKICAgICB9OwogICAgIAogICAgIC8v
IEFzc3VtZSB0aGF0IHggaXMgdGhlIHBvc2l0aXZlIEJpZ0ludC4KQEAgLTEzNzQsMjEgKzE0NDQs
MjUgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBs
Mj4KIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjphYnNvbHV0ZUFkZChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LCBib29sIHJl
c3VsdFNpZ24pCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICh4Lmxlbmd0aCgpIDwg
eS5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkKGdsb2JhbE9iamVjdCwgeSwg
eCwgcmVzdWx0U2lnbik7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1
dGVBZGQoZ2xvYmFsT2JqZWN0LCB5LCB4LCByZXN1bHRTaWduKSk7CiAKICAgICBpZiAoeC5pc1pl
cm8oKSkgewogICAgICAgICBBU1NFUlQoeS5pc1plcm8oKSk7CiAgICAgICAgIHJldHVybiB4Owog
ICAgIH0KIAotICAgIGlmICh5LmlzWmVybygpKQotICAgICAgICByZXR1cm4gcmVzdWx0U2lnbiA9
PSB4LnNpZ24oKSA/IHggOiB1bmFyeU1pbnVzSW1wbCh2bSwgeCk7CisgICAgaWYgKHkuaXNaZXJv
KCkpIHsKKyAgICAgICAgaWYgKHJlc3VsdFNpZ24gPT0geC5zaWduKCkpCisgICAgICAgICAgICBy
ZXR1cm4geDsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB1bmFyeU1pbnVzSW1w
bChnbG9iYWxPYmplY3QsIHgpKTsKKyAgICB9CiAKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNC
aWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCB4Lmxlbmd0aCgpICsgMSk7
Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIEpTQmlnSW50
KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgeC5sZW5ndGgoKSArIDEp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAgIEFTU0VSVChy
ZXN1bHQpOwogICAgIERpZ2l0IGNhcnJ5ID0gMDsKICAgICB1bnNpZ25lZCBpID0gMDsKICAgICBm
b3IgKDsgaSA8IHkubGVuZ3RoKCk7IGkrKykgewpAQCAtMTQwOSwxMiArMTQ4MywxNSBAQCBKU0Jp
Z0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YWJzb2x1dGVBZGQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQmlnSW50SQogICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgY2FycnkpOwogICAg
IHJlc3VsdC0+c2V0U2lnbihyZXN1bHRTaWduKTsKIAotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0
VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJp
bShnbG9iYWxPYmplY3QpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0
eXBlbmFtZSBCaWdJbnRJbXBsMj4KLUpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjphYnNv
bHV0ZVN1YihWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHksIGJvb2wgcmVzdWx0
U2lnbikKK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjphYnNvbHV0ZVN1YihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LCBib29s
IHJlc3VsdFNpZ24pCiB7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIENvbXBhcmlzb25SZXN1
bHQgY29tcGFyaXNvblJlc3VsdCA9IGFic29sdXRlQ29tcGFyZSh4LCB5KTsKICAgICBBU1NFUlQo
eC5sZW5ndGgoKSA+PSB5Lmxlbmd0aCgpKTsKICAgICBBU1NFUlQoY29tcGFyaXNvblJlc3VsdCA9
PSBDb21wYXJpc29uUmVzdWx0OjpHcmVhdGVyVGhhbiB8fCBjb21wYXJpc29uUmVzdWx0ID09IENv
bXBhcmlzb25SZXN1bHQ6OkVxdWFsKTsKQEAgLTE0MjQsMTMgKzE1MDEsMTcgQEAgSlNCaWdJbnQ6
OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFic29sdXRlU3ViKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwg
QmlnSW50SW1wbDIgeSwKICAgICAgICAgcmV0dXJuIHg7CiAgICAgfQogCi0gICAgaWYgKHkuaXNa
ZXJvKCkpCi0gICAgICAgIHJldHVybiByZXN1bHRTaWduID09IHguc2lnbigpID8gSW1wbFJlc3Vs
dCB7IHggfSA6IEpTQmlnSW50Ojp1bmFyeU1pbnVzSW1wbCh2bSwgeCk7CisgICAgaWYgKHkuaXNa
ZXJvKCkpIHsKKyAgICAgICAgaWYgKHJlc3VsdFNpZ24gPT0geC5zaWduKCkpCisgICAgICAgICAg
ICByZXR1cm4gSW1wbFJlc3VsdCB7IHggfTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwoZ2xvYmFsT2JqZWN0LCB4KSk7CisgICAgfQog
CiAgICAgaWYgKGNvbXBhcmlzb25SZXN1bHQgPT0gQ29tcGFyaXNvblJlc3VsdDo6RXF1YWwpCi0g
ICAgICAgIHJldHVybiB6ZXJvSW1wbCh2bSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgemVyb0ltcGwoZ2xvYmFsT2JqZWN0KSk7CiAKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0g
SlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIHgubGVuZ3RoKCkpOworICAg
IEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgeC5sZW5n
dGgoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBE
aWdpdCBib3Jyb3cgPSAwOwogICAgIHVuc2lnbmVkIGkgPSAwOwpAQCAtMTQ1MSw3ICsxNTMyLDcg
QEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFic29sdXRlU3ViKFZNJiB2bSwgQmln
SW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwKIAogICAgIEFTU0VSVCghYm9ycm93KTsKICAgICBy
ZXN1bHQtPnNldFNpZ24ocmVzdWx0U2lnbik7Ci0gICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmlt
KHZtKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdC0+cmlnaHRUcmltKGds
b2JhbE9iamVjdCkpOwogfQogCiAvLyBEaXZpZGVzIHt4fSBieSB7ZGl2aXNvcn0sIHJldHVybmlu
ZyB0aGUgcmVzdWx0IGluIHtxdW90aWVudH0gYW5kIHtyZW1haW5kZXJ9LgpAQCAtMTQ2MiwyMiAr
MTU0MywzMCBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YWJzb2x1dGVTdWIoVk0m
IHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LAogLy8ge3F1b3RpZW50fSBjYW4gYmUg
dGhlIHNhbWUgYXMge3h9IGZvciBhbiBpbi1wbGFjZSBkaXZpc2lvbi4ge3F1b3RpZW50fSBjYW4K
IC8vIGFsc28gYmUgbnVsbHB0ciBpZiB0aGUgY2FsbGVyIGlzIG9ubHkgaW50ZXJlc3RlZCBpbiB0
aGUgcmVtYWluZGVyLgogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci12b2lkIEpTQmln
SW50OjphYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3IoVk0mIHZtLCBCaWdJbnRJbXBsIHgsIERp
Z2l0IGRpdmlzb3IsIEpTQmlnSW50KiogcXVvdGllbnQsIERpZ2l0JiByZW1haW5kZXIpCitib29s
IEpTQmlnSW50OjphYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3IoSlNHbG9iYWxPYmplY3QqIG51
bGxPckdsb2JhbE9iamVjdEZvck9PTSwgVk0mIHZtLCBCaWdJbnRJbXBsIHgsIERpZ2l0IGRpdmlz
b3IsIEpTQmlnSW50KiogcXVvdGllbnQsIERpZ2l0JiByZW1haW5kZXIpCiB7CiAgICAgQVNTRVJU
KGRpdmlzb3IpOwogCiAgICAgQVNTRVJUKCF4LmlzWmVybygpKTsKICAgICByZW1haW5kZXIgPSAw
OwogICAgIGlmIChkaXZpc29yID09IDEpIHsKLSAgICAgICAgaWYgKHF1b3RpZW50KQotICAgICAg
ICAgICAgKnF1b3RpZW50ID0geC50b0hlYXBCaWdJbnQodm0pOwotICAgICAgICByZXR1cm47Cisg
ICAgICAgIGlmIChxdW90aWVudCkgeworICAgICAgICAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IHgu
dG9IZWFwQmlnSW50KG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgdm0pOworICAgICAgICAgICAg
aWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICpxdW90aWVudCA9IHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSB4Lmxlbmd0aCgpOwogICAgIGlm
IChxdW90aWVudCkgewotICAgICAgICBpZiAoKnF1b3RpZW50ID09IG51bGxwdHIpCi0gICAgICAg
ICAgICAqcXVvdGllbnQgPSBKU0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwg
bGVuZ3RoKTsKKyAgICAgICAgaWYgKCpxdW90aWVudCA9PSBudWxscHRyKSB7CisgICAgICAgICAg
ICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aChudWxsT3JHbG9iYWxPYmplY3RG
b3JPT00sIHZtLCBsZW5ndGgpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICpxdW90aWVudCA9IHJl
c3VsdDsKKyAgICAgICAgfQogCiAgICAgICAgIGZvciAoaW50IGkgPSBsZW5ndGggLSAxOyBpID49
IDA7IGktLSkgewogICAgICAgICAgICAgRGlnaXQgcSA9IGRpZ2l0RGl2KHJlbWFpbmRlciwgeC5k
aWdpdChpKSwgZGl2aXNvciwgcmVtYWluZGVyKTsKQEAgLTE0ODcsNiArMTU3Niw3IEBAIHZvaWQg
SlNCaWdJbnQ6OmFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcihWTSYgdm0sIEJpZ0ludEltcGwg
eCwgRGlnaXQgZGl2aXNvciwKICAgICAgICAgZm9yIChpbnQgaSA9IGxlbmd0aCAtIDE7IGkgPj0g
MDsgaS0tKQogICAgICAgICAgICAgZGlnaXREaXYocmVtYWluZGVyLCB4LmRpZ2l0KGkpLCBkaXZp
c29yLCByZW1haW5kZXIpOwogICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gRGl2aWRl
cyB7ZGl2aWRlbmR9IGJ5IHtkaXZpc29yfSwgcmV0dXJuaW5nIHRoZSByZXN1bHQgaW4ge3F1b3Rp
ZW50fSBhbmQKQEAgLTE1MTIsMTIgKzE2MDIsMTQgQEAgdm9pZCBKU0JpZ0ludDo6YWJzb2x1dGVE
aXZXaXRoQmlnSW50RGl2aXNvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnQK
ICAgICAKICAgICAvLyBUaGUgcXVvdGllbnQgdG8gYmUgY29tcHV0ZWQuCiAgICAgSlNCaWdJbnQq
IHEgPSBudWxscHRyOwotICAgIGlmIChxdW90aWVudCAhPSBudWxscHRyKQotICAgICAgICBxID0g
Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZChnbG9iYWxPYmplY3QtPnZtKCksIG0gKyAxKTsKKyAg
ICBpZiAocXVvdGllbnQgIT0gbnVsbHB0cikgeworICAgICAgICBxID0gY3JlYXRlV2l0aExlbmd0
aChnbG9iYWxPYmplY3QsIG0gKyAxKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKKyAgICB9CiAgICAgCiAgICAgLy8gSW4gZWFjaCBpdGVyYXRpb24sIHtxaGF0
dn0gaG9sZHMge2Rpdmlzb3J9ICoge2N1cnJlbnQgcXVvdGllbnQgZGlnaXR9LgogICAgIC8vICJ2
IiBpcyB0aGUgYm9vaydzIG5hbWUgZm9yIHtkaXZpc29yfSwgInFoYXQiIHRoZSBjdXJyZW50IHF1
b3RpZW50IGRpZ2l0LgotICAgIEpTQmlnSW50KiBxaGF0diA9IHRyeUNyZWF0ZVdpdGhMZW5ndGgo
Z2xvYmFsT2JqZWN0LCBuICsgMSk7CisgICAgSlNCaWdJbnQqIHFoYXR2ID0gY3JlYXRlV2l0aExl
bmd0aChnbG9iYWxPYmplY3QsIG4gKyAxKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwogICAgIAogICAgIC8vIEQxLgpAQCAtMTY2NywxNCArMTc1OSwxNiBAQCB2b2lk
IEpTQmlnSW50OjppbnBsYWNlUmlnaHRTaGlmdCh1bnNpZ25lZCBzaGlmdCkKIHRlbXBsYXRlIDx0
eXBlbmFtZSBCaWdJbnRJbXBsPgogSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUxlZnRTaGlm
dEFsd2F5c0NvcHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbCB4LCB1
bnNpZ25lZCBzaGlmdCwgTGVmdFNoaWZ0TW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKICAgICBBU1NFUlQoc2hpZnQgPCBkaWdpdEJpdHMpOwogICAgIEFTU0VSVCgheC5pc1plcm8o
KSk7CiAKICAgICB1bnNpZ25lZCBuID0geC5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCByZXN1bHRM
ZW5ndGggPSBtb2RlID09IExlZnRTaGlmdE1vZGU6OkFsd2F5c0FkZE9uZURpZ2l0ID8gbiArIDEg
OiBuOwotICAgIEpTQmlnSW50KiByZXN1bHQgPSB0cnlDcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9i
amVjdCwgcmVzdWx0TGVuZ3RoKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2Jq
ZWN0LCByZXN1bHRMZW5ndGgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAKICAgICBpZiAoIXNoaWZ0KSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
OyBpKyspCkBAIC0xNzE2LDggKzE4MTAsMTEgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0
ZUxlZnRTaGlmdEFsd2F5c0NvcHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmkKIC8v
ICAgICAgICAgICAgICAgICAgIHYgICAgIHYgICAgIHYgICAgIHYKIC8vIHJlc3VsdDogWyAgMCBd
WyB4MyBdWyByMiBdWyByMSBdWyByMCBdCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEs
IHR5cGVuYW1lIEJpZ0ludEltcGwyLCB0eXBlbmFtZSBCaXR3aXNlT3A+Ci1pbmxpbmUgSlNCaWdJ
bnQqIEpTQmlnSW50OjphYnNvbHV0ZUJpdHdpc2VPcChWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJp
Z0ludEltcGwyIHksIEV4dHJhRGlnaXRzSGFuZGxpbmcgZXh0cmFEaWdpdHMsIEJpdHdpc2VPcCYm
IG9wKQoraW5saW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVCaXR3aXNlT3AoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwgRXh0
cmFEaWdpdHNIYW5kbGluZyBleHRyYURpZ2l0cywgQml0d2lzZU9wJiYgb3ApCiB7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKwogICAgIHVuc2lnbmVkIHhMZW5ndGggPSB4Lmxlbmd0aCgpOwogICAgIHVu
c2lnbmVkIHlMZW5ndGggPSB5Lmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIG51bVBhaXJzID0geUxl
bmd0aDsKQEAgLTE3MzAsNyArMTgyNyw4IEBAIGlubGluZSBKU0JpZ0ludCogSlNCaWdJbnQ6OmFi
c29sdXRlQml0d2lzZU9wKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIKICAgICBB
U1NFUlQobnVtUGFpcnMgPT0gc3RkOjptaW4oeExlbmd0aCwgeUxlbmd0aCkpOwogICAgIEFTU0VS
VChtYXhMZW5ndGggPT0gc3RkOjptYXgoeExlbmd0aCwgeUxlbmd0aCkpOwogICAgIHVuc2lnbmVk
IHJlc3VsdExlbmd0aCA9IGV4dHJhRGlnaXRzID09IEV4dHJhRGlnaXRzSGFuZGxpbmc6OkNvcHkg
PyBtYXhMZW5ndGggOiBudW1QYWlyczsKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0
aExlbmd0aFVuY2hlY2tlZCh2bSwgcmVzdWx0TGVuZ3RoKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0
ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgdW5zaWduZWQgaSA9IDA7CiAg
ICAgZm9yICg7IGkgPCBudW1QYWlyczsgaSsrKQogICAgICAgICByZXN1bHQtPnNldERpZ2l0KGks
IG9wKHguZGlnaXQoaSksIHkuZGlnaXQoaSkpKTsKQEAgLTE3NDgsNTggKzE4NDYsNjUgQEAgaW5s
aW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVCaXR3aXNlT3AoVk0mIHZtLCBCaWdJbnRJ
bXBsMSB4LCBCaWdJbnRJbXBsMgogICAgIGZvciAoOyBpIDwgcmVzdWx0TGVuZ3RoOyBpKyspCiAg
ICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgMCk7CiAKLSAgICByZXR1cm4gcmVzdWx0LT5yaWdo
dFRyaW0odm0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0LT5yaWdodFRy
aW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwg
dHlwZW5hbWUgQmlnSW50SW1wbDI+Ci1KU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQW5kKFZN
JiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6
YWJzb2x1dGVBbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwg
QmlnSW50SW1wbDIgeSkKIHsKICAgICBhdXRvIGRpZ2l0T3BlcmF0aW9uID0gW10oRGlnaXQgYSwg
RGlnaXQgYikgewogICAgICAgICByZXR1cm4gYSAmIGI7CiAgICAgfTsKLSAgICByZXR1cm4gYWJz
b2x1dGVCaXR3aXNlT3Aodm0sIHgsIHksIEV4dHJhRGlnaXRzSGFuZGxpbmc6OlNraXAsIGRpZ2l0
T3BlcmF0aW9uKTsKKyAgICByZXR1cm4gYWJzb2x1dGVCaXR3aXNlT3AoZ2xvYmFsT2JqZWN0LCB4
LCB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nOjpTa2lwLCBkaWdpdE9wZXJhdGlvbik7CiB9CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+Ci1KU0Jp
Z0ludCogSlNCaWdJbnQ6OmFic29sdXRlT3IoVk0mIHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJ
bXBsMiB5KQorSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZU9yKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgYXV0byBk
aWdpdE9wZXJhdGlvbiA9IFtdKERpZ2l0IGEsIERpZ2l0IGIpIHsKICAgICAgICAgcmV0dXJuIGEg
fCBiOwogICAgIH07Ci0gICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9wKHZtLCB4LCB5LCBFeHRy
YURpZ2l0c0hhbmRsaW5nOjpDb3B5LCBkaWdpdE9wZXJhdGlvbik7CisgICAgcmV0dXJuIGFic29s
dXRlQml0d2lzZU9wKGdsb2JhbE9iamVjdCwgeCwgeSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6Q29w
eSwgZGlnaXRPcGVyYXRpb24pOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEs
IHR5cGVuYW1lIEJpZ0ludEltcGwyPgotSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUFuZE5v
dChWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCitKU0JpZ0ludCogSlNCaWdJ
bnQ6OmFic29sdXRlQW5kTm90KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludElt
cGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgLy8geCAmIH55CiAKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCiAgICAgdW5zaWduZWQgeExlbmd0aCA9IHgubGVuZ3RoKCk7CiAgICAgdW5zaWduZWQg
eUxlbmd0aCA9IHkubGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0geExlbmd0
aDsKIAotICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZt
LCByZXN1bHRMZW5ndGgpOworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3Ro
KGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKICAgICB1bnNpZ25lZCBpID0gMDsKICAgICBmb3IgKDsgaSA8IHN0ZDo6
bWluKHhMZW5ndGgsIHlMZW5ndGgpOyBpKyspCiAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwg
eC5kaWdpdChpKSAmIH55LmRpZ2l0KGkpKTsKICAgICBmb3IgKDsgaSA8IHJlc3VsdExlbmd0aDsg
KytpKQogICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIHguZGlnaXQoaSkpOwogCi0gICAgcmV0
dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgotSlNCaWdJbnQqIEpTQmlnSW50
OjphYnNvbHV0ZVhvcihWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCitKU0Jp
Z0ludCogSlNCaWdJbnQ6OmFic29sdXRlWG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgYXV0byBkaWdpdE9wZXJhdGlv
biA9IFtdKERpZ2l0IGEsIERpZ2l0IGIpIHsKICAgICAgICAgcmV0dXJuIGEgXiBiOwogICAgIH07
Ci0gICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9wKHZtLCB4LCB5LCBFeHRyYURpZ2l0c0hhbmRs
aW5nOjpDb3B5LCBkaWdpdE9wZXJhdGlvbik7CisgICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9w
KGdsb2JhbE9iamVjdCwgeCwgeSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6Q29weSwgZGlnaXRPcGVy
YXRpb24pOwogfQogICAgIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CiBKU0JpZ0lu
dCogSlNCaWdJbnQ6OmFic29sdXRlQWRkT25lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEJpZ0ludEltcGwgeCwgU2lnbk9wdGlvbiBzaWduT3B0aW9uKQogeworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKICAgICB1bnNpZ25lZCBpbnB1dExlbmd0aCA9IHgubGVuZ3RoKCk7CiAgICAgLy8gVGhl
IGFkZGl0aW9uIHdpbGwgb3ZlcmZsb3cgaW50byBhIG5ldyBkaWdpdCBpZiBhbGwgZXhpc3Rpbmcg
ZGlnaXRzIGFyZQogICAgIC8vIGF0IG1heGltdW0uCkBAIC0xODEyLDkgKzE5MTcsOCBAQCBKU0Jp
Z0ludCogSlNCaWdJbnQ6OmFic29sdXRlQWRkT25lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEJpZ0ludEltcGwgeCwgUwogICAgIH0KIAogICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9
IGlucHV0TGVuZ3RoICsgd2lsbE92ZXJmbG93OwotICAgIEpTQmlnSW50KiByZXN1bHQgPSB0cnlD
cmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKLSAgICBpZiAoIXJl
c3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNy
ZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgRGlnaXQgY2FycnkgPSAxOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgaSsrKSB7CkBAIC0xODI4LDcg
KzE5MzIsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQWRkT25lKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCwgUwogICAgICAgICBBU1NFUlQoIWNhcnJ5
KTsKIAogICAgIHJlc3VsdC0+c2V0U2lnbihzaWduT3B0aW9uID09IFNpZ25PcHRpb246OlNpZ25l
ZCk7Ci0gICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdC0+dm0oKSk7Cisg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmpl
Y3QpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CkBAIC0xODM5LDcgKzE5
NDMsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlU3ViT25lKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCwgdQogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAg
ICBKU0JpZ0ludCogcmVzdWx0ID0gdHJ5Q3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHJl
c3VsdExlbmd0aCk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xv
YmFsT2JqZWN0LCByZXN1bHRMZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IG51bGxwdHIpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0geC5sZW5ndGgoKTsKQEAgLTE4NTMs
NyArMTk1Nyw3IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVTdWJPbmUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbCB4LCB1CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbGVuZ3RoOyBpIDwgcmVzdWx0TGVuZ3RoOyBpKyspCiAgICAgICAgIHJlc3VsdC0+c2V0RGln
aXQoaSwgYm9ycm93KTsKIAotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3Qp
KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJ
bXBsMj4KQEAgLTE4NzksNyArMTk4Myw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50
OjpsZWZ0U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIEpTQmlnSW50KiByZXN1bHQgPSB0cnlD
cmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKKyAgICBKU0JpZ0lu
dCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgaWYgKCFiaXRz
U2hpZnQpIHsKICAgICAgICAgdW5zaWduZWQgaSA9IDA7CkBAIC0xOTA2LDI1ICsyMDEwLDI3IEBA
IEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpsZWZ0U2hpZnRCeUFic29sdXRlKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgfQogCiAgICAgcmVzdWx0LT5zZXRTaWduKHgu
c2lnbigpKTsKLSAgICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0odm0pOworICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgcmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CiBK
U0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5QWJzb2x1dGUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgdW5zaWduZWQgbGVuZ3RoID0geC5sZW5ndGgoKTsK
ICAgICBib29sIHNpZ24gPSB4LnNpZ24oKTsKICAgICBhdXRvIG9wdGlvbmFsU2hpZnQgPSB0b1No
aWZ0QW1vdW50KHkpOwogICAgIGlmICghb3B0aW9uYWxTaGlmdCkKLSAgICAgICAgcmV0dXJuIHJp
Z2h0U2hpZnRCeU1heGltdW0odm0sIHNpZ24pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIHJpZ2h0U2hpZnRCeU1heGltdW0oZ2xvYmFsT2JqZWN0LCBzaWduKSk7CiAKICAgICBE
aWdpdCBzaGlmdCA9ICpvcHRpb25hbFNoaWZ0OwogICAgIHVuc2lnbmVkIGRpZ2l0YWxTaGlmdCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaGlmdCAvIGRpZ2l0Qml0cyk7CiAgICAgdW5zaWduZWQg
Yml0c1NoaWZ0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNoaWZ0ICUgZGlnaXRCaXRzKTsKICAg
ICBpbnQgcmVzdWx0TGVuZ3RoID0gbGVuZ3RoIC0gZGlnaXRhbFNoaWZ0OwogICAgIGlmIChyZXN1
bHRMZW5ndGggPD0gMCkKLSAgICAgICAgcmV0dXJuIHJpZ2h0U2hpZnRCeU1heGltdW0odm0sIHNp
Z24pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJpZ2h0U2hpZnRCeU1heGlt
dW0oZ2xvYmFsT2JqZWN0LCBzaWduKSk7CiAKICAgICAvLyBGb3IgbmVnYXRpdmUgbnVtYmVycywg
cm91bmQgZG93biBpZiBhbnkgYml0IHdhcyBzaGlmdGVkIG91dCAoc28gdGhhdCBlLmcuCiAgICAg
Ly8gLTVuID4+IDFuID09IC0zbiBhbmQgbm90IC0ybikuIENoZWNrIG5vdyB3aGV0aGVyIHRoaXMg
d2lsbCBoYXBwZW4gYW5kCkBAIC0xOTU1LDcgKzIwNjEsOSBAQCBKU0JpZ0ludDo6SW1wbFJlc3Vs
dCBKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5QWJzb2x1dGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdAogICAgIH0KIAogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0TGVu
Z3RoKSA8PSBsZW5ndGgpOwotICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3Ro
VW5jaGVja2VkKHZtLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0TGVuZ3RoKSk7CisgICAg
SlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4ocmVzdWx0TGVuZ3RoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CisKICAgICBpZiAoIWJpdHNTaGlmdCkgewogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBkaWdpdGFsU2hpZnQ7IGkgPCBsZW5ndGg7IGkrKykKICAgICAgICAgICAgIHJl
c3VsdC0+c2V0RGlnaXQoaSAtIGRpZ2l0YWxTaGlmdCwgeC5kaWdpdChpKSk7CkBAIC0xOTc1LDIw
ICsyMDgzLDIxIEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpyaWdodFNoaWZ0QnlB
YnNvbHV0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0CiAgICAgICAgIGlmIChtdXN0Um91
bmREb3duKSB7CiAgICAgICAgICAgICAvLyBTaW5jZSB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCBy
b3VuZGluZyBkb3duIG1lYW5zIGFkZGluZyBvbmUgdG8KICAgICAgICAgICAgIC8vIGl0cyBhYnNv
bHV0ZSB2YWx1ZS4gVGhpcyBjYW5ub3Qgb3ZlcmZsb3cuCi0gICAgICAgICAgICByZXN1bHQgPSBy
ZXN1bHQtPnJpZ2h0VHJpbSh2bSk7Ci0gICAgICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUo
Z2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWdu
ZWQpOworICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0
KTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAg
ICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBhYnNvbHV0ZUFkZE9uZShnbG9iYWxP
YmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIFNpZ25PcHRpb246OlNpZ25lZCkpOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKKyAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVj
dCkpOwogfQogCi1KU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5TWF4
aW11bShWTSYgdm0sIGJvb2wgc2lnbikKK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojpy
aWdodFNoaWZ0QnlNYXhpbXVtKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGJvb2wgc2ln
bikKIHsKICAgICBpZiAoc2lnbikKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb20odm0sIC0xKTsK
KyAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCAtMSk7CiAKLSAgICByZXR1
cm4gY3JlYXRlWmVybyh2bSk7CisgICAgcmV0dXJuIGNyZWF0ZVplcm8oZ2xvYmFsT2JqZWN0KTsK
IH0KIAogLy8gTG9va3VwIHRhYmxlIGZvciB0aGUgbWF4aW11bSBudW1iZXIgb2YgYml0cyByZXF1
aXJlZCBwZXIgY2hhcmFjdGVyIG9mIGEKQEAgLTIwMzQsNyArMjE0Myw3IEBAIHVpbnQ2NF90IEpT
QmlnSW50OjpjYWxjdWxhdGVNYXhpbXVtQ2hhcmFjdGVyc1JlcXVpcmVkKHVuc2lnbmVkIGxlbmd0
aCwgdW5zaWduZWQKICAgICByZXR1cm4gbWF4aW11bUNoYXJhY3RlcnNSZXF1aXJlZDsKIH0KIAot
U3RyaW5nIEpTQmlnSW50Ojp0b1N0cmluZ0Jhc2VQb3dlck9mVHdvKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIHVuc2lnbmVkIHJhZGl4KQorU3RyaW5n
IEpTQmlnSW50Ojp0b1N0cmluZ0Jhc2VQb3dlck9mVHdvKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgSlNCaWdJbnQqIHgsIHVuc2lnbmVkIHJhZGl4KQog
ewogICAgIEFTU0VSVChoYXNPbmVCaXRTZXQocmFkaXgpKTsKICAgICBBU1NFUlQocmFkaXggPj0g
MiAmJiByYWRpeCA8PSAzMik7CkBAIC0yMDU0LDkgKzIxNjMsOSBAQCBTdHJpbmcgSlNCaWdJbnQ6
OnRvU3RyaW5nQmFzZVBvd2VyT2ZUd28oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKUwogICAgIGNvbnN0IHNpemVfdCBjaGFyc1JlcXVpcmVkID0gKGJpdExlbmd0aCArIGJp
dHNQZXJDaGFyIC0gMSkgLyBiaXRzUGVyQ2hhciArIHNpZ247CiAKICAgICBpZiAoY2hhcnNSZXF1
aXJlZCA+IEpTU3RyaW5nOjpNYXhMZW5ndGgpIHsKLSAgICAgICAgaWYgKGdsb2JhbE9iamVjdCkg
eworICAgICAgICBpZiAobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NKSB7CiAgICAgICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgICAgICB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7ICAgICAgICAgICAgCisgICAgICAg
ICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBzY29w
ZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KQEAgLTIwOTYs
NyArMjIwNSw3IEBAIFN0cmluZyBKU0JpZ0ludDo6dG9TdHJpbmdCYXNlUG93ZXJPZlR3byhWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTCiAgICAgcmV0dXJuIFN0cmluZ0lt
cGw6OmFkb3B0KFdURk1vdmUocmVzdWx0U3RyaW5nKSk7CiB9CiAKLVN0cmluZyBKU0JpZ0ludDo6
dG9TdHJpbmdHZW5lcmljKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNC
aWdJbnQqIHgsIHVuc2lnbmVkIHJhZGl4KQorU3RyaW5nIEpTQmlnSW50Ojp0b1N0cmluZ0dlbmVy
aWMoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogbnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBKU0Jp
Z0ludCogeCwgdW5zaWduZWQgcmFkaXgpCiB7CiAgICAgLy8gRklYTUU6IFtKU0NdIFJldmlzaXQg
dXNhZ2Ugb2YgVmVjdG9yIGludG8gSlNCaWdJbnQ6OnRvU3RyaW5nCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDY3MQpAQCAtMjExMiw5ICsyMjIxLDkg
QEAgU3RyaW5nIEpTQmlnSW50Ojp0b1N0cmluZ0dlbmVyaWMoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCoKICAgICB1aW50NjRfdCBtYXhpbXVtQ2hhcmFjdGVy
c1JlcXVpcmVkID0gY2FsY3VsYXRlTWF4aW11bUNoYXJhY3RlcnNSZXF1aXJlZChsZW5ndGgsIHJh
ZGl4LCB4LT5kaWdpdChsZW5ndGggLSAxKSwgc2lnbik7CiAKICAgICBpZiAobWF4aW11bUNoYXJh
Y3RlcnNSZXF1aXJlZCA+IEpTU3RyaW5nOjpNYXhMZW5ndGgpIHsKLSAgICAgICAgaWYgKGdsb2Jh
bE9iamVjdCkgeworICAgICAgICBpZiAobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NKSB7CiAgICAg
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7ICAgICAgICAgICAg
CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9y
T09NLCBzY29wZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0K
QEAgLTIxNDAsNyArMjI0OSw5IEBAIFN0cmluZyBKU0JpZ0ludDo6dG9TdHJpbmdHZW5lcmljKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqCiAgICAgICAgIEpT
QmlnSW50KiogZGl2aWRlbmQgPSAmeDsKICAgICAgICAgZG8gewogICAgICAgICAgICAgRGlnaXQg
Y2h1bms7Ci0gICAgICAgICAgICBhYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3Iodm0sIEhlYXBC
aWdJbnRJbXBsIHsgKmRpdmlkZW5kIH0sIGNodW5rRGl2aXNvciwgJnJlc3QsIGNodW5rKTsKKyAg
ICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcihudWxs
T3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCBIZWFwQmlnSW50SW1wbCB7ICpkaXZpZGVuZCB9LCBj
aHVua0Rpdmlzb3IsICZyZXN0LCBjaHVuayk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgICAgICAgICAgZGl2aWRlbmQgPSAm
cmVzdDsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaHVua0NoYXJzOyBp
KyspIHsKICAgICAgICAgICAgICAgICByZXN1bHRTdHJpbmcuYXBwZW5kKHJhZGl4RGlnaXRzW2No
dW5rICUgcmFkaXhdKTsKQEAgLTIxODEsNyArMjI5Miw3IEBAIFN0cmluZyBKU0JpZ0ludDo6dG9T
dHJpbmdHZW5lcmljKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJ
bnQqCiAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmFkb3B0KFdURk1vdmUocmVzdWx0U3RyaW5nKSk7
CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6cmlnaHRUcmltKFZNJiB2bSkKK0pTQmlnSW50KiBK
U0JpZ0ludDo6cmlnaHRUcmltKEpTR2xvYmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmplY3RGb3JP
T00sIFZNJiB2bSkKIHsKICAgICBpZiAoaXNaZXJvKCkpIHsKICAgICAgICAgQVNTRVJUKCFzaWdu
KCkpOwpAQCAtMjE5MywyMiArMjMwNCwzMSBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OnJpZ2h0VHJp
bShWTSYgdm0pCiAgICAgICAgIG5vblplcm9JbmRleC0tOwogCiAgICAgaWYgKG5vblplcm9JbmRl
eCA8IDApCi0gICAgICAgIHJldHVybiBjcmVhdGVaZXJvKHZtKTsKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZVplcm8obnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCB2bSk7CiAKICAgICBpZiAobm9uWmVy
b0luZGV4ID09IHN0YXRpY19jYXN0PGludD4obV9sZW5ndGggLSAxKSkKICAgICAgICAgcmV0dXJu
IHRoaXM7CiAKICAgICB1bnNpZ25lZCBuZXdMZW5ndGggPSBub25aZXJvSW5kZXggKyAxOwotICAg
IEpTQmlnSW50KiB0cmltbWVkQmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwg
bmV3TGVuZ3RoKTsKLSAgICBzdGQ6OmNvcHkoZGF0YVN0b3JhZ2UoKSwgZGF0YVN0b3JhZ2UoKSAr
IG5ld0xlbmd0aCwgdHJpbW1lZEJpZ0ludC0+ZGF0YVN0b3JhZ2UoKSk7IAorICAgIEpTQmlnSW50
KiB0cmltbWVkQmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aChudWxsT3JHbG9iYWxPYmplY3RGb3JP
T00sIHZtLCBuZXdMZW5ndGgpOworICAgIGlmIChVTkxJS0VMWSghdHJpbW1lZEJpZ0ludCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIHN0ZDo6Y29weShkYXRhU3RvcmFnZSgpLCBkYXRh
U3RvcmFnZSgpICsgbmV3TGVuZ3RoLCB0cmltbWVkQmlnSW50LT5kYXRhU3RvcmFnZSgpKTsKIAog
ICAgIHRyaW1tZWRCaWdJbnQtPnNldFNpZ24odGhpcy0+c2lnbigpKTsKIAogICAgIHJldHVybiB0
cmltbWVkQmlnSW50OwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmFsbG9jYXRlRm9yKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgdW5zaWduZWQgcmFkaXgsIHVuc2lnbmVk
IGNoYXJjb3VudCkKK0pTQmlnSW50KiBKU0JpZ0ludDo6cmlnaHRUcmltKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCiB7CisgICAgcmV0dXJuIHJpZ2h0VHJpbShnbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdC0+dm0oKSk7Cit9CisKK0pTQmlnSW50KiBKU0JpZ0ludDo6YWxsb2NhdGVGb3Io
SlNHbG9iYWxPYmplY3QqIG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgVk0mIHZtLCB1bnNpZ25l
ZCByYWRpeCwgdW5zaWduZWQgY2hhcmNvdW50KQoreworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEFTU0VSVCgyIDw9IHJhZGl4ICYmIHJhZGl4IDw9IDM2
KTsKIAogICAgIHNpemVfdCBiaXRzUGVyQ2hhciA9IG1heEJpdHNQZXJDaGFyVGFibGVbcmFkaXhd
OwpAQCAtMjIyMiwxNyArMjM0MiwxNCBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFsbG9jYXRlRm9y
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgdW5zaWduZWQgcgogICAgICAg
ICBpZiAoYml0c01pbiA8PSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1heEludCkpIHsKICAgICAgICAg
ICAgIC8vIERpdmlkZSBieSBrRGlnaXRzQml0cywgcm91bmRpbmcgdXAuCiAgICAgICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPSAoYml0c01pbiArIGRpZ2l0Qml0cyAtIDEpIC8gZGlnaXRCaXRzOwot
ICAgICAgICAgICAgaWYgKGxlbmd0aCA8PSBtYXhMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBK
U0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0s
IGxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChsZW5ndGggPD0gbWF4TGVuZ3RoKQorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY3JlYXRlV2l0aExlbmd0aChudWxsT3JHbG9iYWxPYmpl
Y3RGb3JPT00sIHZtLCBsZW5ndGgpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChnbG9i
YWxPYmplY3QpIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkJp
Z0ludCBnZW5lcmF0ZWQgZnJvbSB0aGlzIG9wZXJhdGlvbiBpcyB0b28gYmlnIl9zKTsKLSAgICB9
CisgICAgaWYgKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSkKKyAgICAgICAgdGhyb3dPdXRPZk1l
bW9yeUVycm9yKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgc2NvcGUsICJCaWdJbnQgZ2VuZXJh
dGVkIGZyb20gdGhpcyBvcGVyYXRpb24gaXMgdG9vIGJpZyJfcyk7CisKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIApAQCAtMjI5MCw3ICsyNDA3LDcgQEAgSlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJ
bnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2hhclR5cGUqICBkYXRhLCB1bnNpZ24K
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgotSlNWYWx1ZSBKU0JpZ0ludDo6cGFy
c2VJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBDaGFyVHlwZSogZGF0
YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCByYWRpeCwg
RXJyb3JQYXJzZU1vZGUgZXJyb3JQYXJzZU1vZGUsIFBhcnNlSW50U2lnbiBzaWduLCBQYXJzZUlu
dE1vZGUgcGFyc2VNb2RlKQorSlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJbnQoSlNHbG9iYWxPYmpl
Y3QqIG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgVk0mIHZtLCBDaGFyVHlwZSogZGF0YSwgdW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCByYWRpeCwgRXJyb3JQ
YXJzZU1vZGUgZXJyb3JQYXJzZU1vZGUsIFBhcnNlSW50U2lnbiBzaWduLCBQYXJzZUludE1vZGUg
cGFyc2VNb2RlKQogewogICAgIEFTU0VSVChsZW5ndGggPj0gMCk7CiAgICAgdW5zaWduZWQgcCA9
IHN0YXJ0SW5kZXg7CkBAIC0yMjk4LDkgKzI0MTUsOSBAQCBKU1ZhbHVlIEpTQmlnSW50OjpwYXJz
ZUludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIENoYXJUeXBlKiBkYXRh
LAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChw
YXJzZU1vZGUgIT0gUGFyc2VJbnRNb2RlOjpBbGxvd0VtcHR5U3RyaW5nICYmIHN0YXJ0SW5kZXgg
PT0gbGVuZ3RoKSB7Ci0gICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOworICAgICAgICBBU1NF
UlQobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NKTsKICAgICAgICAgaWYgKGVycm9yUGFyc2VNb2Rl
ID09IEVycm9yUGFyc2VNb2RlOjpUaHJvd0V4Y2VwdGlvbnMpCi0gICAgICAgICAgICB0aHJvd1ZN
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlU3ludGF4RXJyb3IoZ2xvYmFsT2JqZWN0
LCAiRmFpbGVkIHRvIHBhcnNlIFN0cmluZyB0byBCaWdJbnQiKSk7CisgICAgICAgICAgICB0aHJv
d1ZNRXJyb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBzY29wZSwgY3JlYXRlU3ludGF4RXJy
b3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCAiRmFpbGVkIHRvIHBhcnNlIFN0cmluZyB0byBC
aWdJbnQiKSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgfQogCkBAIC0yMzE5LDcg
KzI0MzYsNyBAQCBKU1ZhbHVlIEpTQmlnSW50OjpwYXJzZUludChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBWTSYgdm0sIENoYXJUeXBlKiBkYXRhLAogI2lmIFVTRShCSUdJTlQzMikKICAg
ICAgICAgcmV0dXJuIGpzQmlnSW50MzIoMCk7CiAjZWxzZQotICAgICAgICByZXR1cm4gY3JlYXRl
WmVybyh2bSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY3JlYXRlWmVybyhu
dWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtKSk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTI0MTQs
OCArMjUzMSw4IEBAIEpTVmFsdWUgSlNCaWdJbnQ6OnBhcnNlSW50KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFZNJiB2bSwgQ2hhclR5cGUqIGRhdGEsCiAgICAgICAgICAgICAgICAgZGln
aXQgKz0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGRhdGFbcF0gLSAnQScgKyAxMCk7CiAgICAgICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoZXJyb3JQYXJzZU1vZGUgPT0gRXJyb3JQ
YXJzZU1vZGU6OlRocm93RXhjZXB0aW9ucykgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
Z2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dWTUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsIGNyZWF0ZVN5bnRheEVycm9yKGdsb2JhbE9iamVjdCwgIkZhaWxlZCB0byBw
YXJzZSBTdHJpbmcgdG8gQmlnSW50IikpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobnVs
bE9yR2xvYmFsT2JqZWN0Rm9yT09NKTsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dWTUVycm9y
KG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgc2NvcGUsIGNyZWF0ZVN5bnRheEVycm9yKG51bGxP
ckdsb2JhbE9iamVjdEZvck9PTSwgIkZhaWxlZCB0byBwYXJzZSBTdHJpbmcgdG8gQmlnSW50Iikp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwog
ICAgICAgICAgICAgfQpAQCAtMjQzMywxMiArMjU1MCwxMyBAQCBKU1ZhbHVlIEpTQmlnSW50Ojpw
YXJzZUludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIENoYXJUeXBlKiBk
YXRhLAogI2lmIFVTRShCSUdJTlQzMikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzQmln
SW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF5YmVSZXN1bHQpKTsKICNlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgc3RhdGljX2Nhc3Q8
aW50MzJfdD4obWF5YmVSZXN1bHQpKTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6Y3JlYXRlRnJvbShudWxsT3JHbG9iYWxPYmplY3RGb3JP
T00sIHN0YXRpY19jYXN0PGludDMyX3Q+KG1heWJlUmVzdWx0KSkpOwogI2VuZGlmCiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgaGVhcFJlc3VsdCA9IGFsbG9j
YXRlRm9yKGdsb2JhbE9iamVjdCwgdm0sIHJhZGl4LCBpbml0aWFsTGVuZ3RoKTsKLSAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CisgICAgICAgICAgICBo
ZWFwUmVzdWx0ID0gYWxsb2NhdGVGb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCB2bSwgcmFk
aXgsIGluaXRpYWxMZW5ndGgpOworICAgICAgICAgICAgaWYgKG51bGxPckdsb2JhbE9iamVjdEZv
ck9PTSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVl
KCkpOwogICAgICAgICAgICAgLy8gcmVzdWx0IGNhbiBzdGlsbCBiZSBudWxsIGlmIHdlIGRvbid0
IGhhdmUgYWNjZXNzIHRvIGdsb2JhbCBvYmplY3QsIGFzIGFsbG9jYXRlRm9yIGNhbm5vdCB0aHJv
dyBhbiBleGNlcHRpb24gaW4gdGhhdCBjYXNlLgogICAgICAgICAgICAgaWYgKCFoZWFwUmVzdWx0
KQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CkBAIC0yNDUxLDcgKzI1NjksNyBA
QCBKU1ZhbHVlIEpTQmlnSW50OjpwYXJzZUludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBWTSYgdm0sIENoYXJUeXBlKiBkYXRhLAogICAgIH0KIAogICAgIGhlYXBSZXN1bHQtPnNldFNp
Z24oc2lnbiA9PSBQYXJzZUludFNpZ246OlNpZ25lZCk7Ci0gICAgcmV0dXJuIGhlYXBSZXN1bHQt
PnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBoZWFwUmVzdWx0
LT5yaWdodFRyaW0obnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCB2bSkpOwogfQogCiBKU09iamVj
dCogSlNCaWdJbnQ6OnRvT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0
CkBAIC0yNzM4LDExICsyODU2LDEyIEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgog
SlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFzSW50TkltcGwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgdWludDY0X3QgbiwgQmlnSW50SW1wbCBiaWdJbnQpCiB7CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIGlmIChiaWdJbnQuaXNaZXJvKCkpCiAgICAgICAgIHJldHVybiBi
aWdJbnQ7CiAgICAgaWYgKG4gPT0gMCkKLSAgICAgICAgcmV0dXJuIHplcm9JbXBsKHZtKTsKKyAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB6ZXJvSW1wbChnbG9iYWxPYmplY3QpKTsK
IAogICAgIHVpbnQ2NF90IG5lZWRlZExlbmd0aCA9IChuICsgZGlnaXRCaXRzIC0gMSkgLyBkaWdp
dEJpdHM7CiAgICAgdWludDY0X3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJpZ0lu
dC5sZW5ndGgoKSk7CkBAIC0yNzY2LDIzICsyODg1LDIzIEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0
IEpTQmlnSW50Ojphc0ludE5JbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQ2
NF90CiAgICAgQVNTRVJUKG4gPD0gSU5UMzJfTUFYKTsKICAgICBpbnQzMl90IE4gPSBzdGF0aWNf
Y2FzdDxpbnQzMl90PihuKTsKICAgICBpZiAoIWhhc0JpdCkKLSAgICAgICAgcmV0dXJuIHRydW5j
YXRlVG9OQml0cyh2bSwgTiwgYmlnSW50KTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCB0cnVuY2F0ZVRvTkJpdHMoZ2xvYmFsT2JqZWN0LCBOLCBiaWdJbnQpKTsKICAgICBpZiAo
IWJpZ0ludC5zaWduKCkpCi0gICAgICAgIHJldHVybiB0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9m
VHdvKHZtLCBOLCBiaWdJbnQsIHRydWUpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIHRydW5jYXRlQW5kU3ViRnJvbVBvd2VyT2ZUd28oZ2xvYmFsT2JqZWN0LCBOLCBiaWdJbnQs
IHRydWUpKTsKIAogICAgIC8vIE5lZ2F0aXZlIG51bWJlcnMgbXVzdCBzdWJ0cmFjdCBmcm9tIDJe
biwgZXhjZXB0IGZvciB0aGUgc3BlY2lhbCBjYXNlCiAgICAgLy8gZGVzY3JpYmVkIGFib3ZlLgog
ICAgIGlmICgodG9wRGlnaXQgJiAoY29tcGFyZURpZ2l0IC0gMSkpID09IDApIHsKICAgICAgICAg
Zm9yIChpbnQzMl90IGkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihuZWVkZWRMZW5ndGgpIC0gMjsg
aSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgIGlmIChiaWdJbnQuZGlnaXQoaSkgIT0gMCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byh2bSwgTiwg
YmlnSW50LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCB0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKGdsb2JhbE9iamVjdCwgTiwgYmlnSW50LCBm
YWxzZSkpOwogICAgICAgICB9CiAgICAgICAgIC8vIFRydW5jYXRpb24gaXMgbm8tb3AgaWYgYmln
SW50ID09IC0yXihuLTEpLgogICAgICAgICBpZiAobGVuZ3RoID09IG5lZWRlZExlbmd0aCAmJiB0
b3BEaWdpdCA9PSBjb21wYXJlRGlnaXQpCiAgICAgICAgICAgICByZXR1cm4gYmlnSW50OwotICAg
ICAgICByZXR1cm4gdHJ1bmNhdGVUb05CaXRzKHZtLCBOLCBiaWdJbnQpOworICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIHRydW5jYXRlVG9OQml0cyhnbG9iYWxPYmplY3QsIE4sIGJp
Z0ludCkpOwogICAgIH0KLSAgICByZXR1cm4gdHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byh2
bSwgTiwgYmlnSW50LCBmYWxzZSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB0cnVu
Y2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKGdsb2JhbE9iamVjdCwgTiwgYmlnSW50LCBmYWxzZSkp
OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KQEAgLTI3OTQsNyArMjkxMyw3
IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojphc1VpbnROSW1wbChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfCiAgICAgaWYgKGJpZ0ludC5pc1plcm8oKSkKICAg
ICAgICAgcmV0dXJuIGJpZ0ludDsKICAgICBpZiAobiA9PSAwKQotICAgICAgICByZXR1cm4gemVy
b0ltcGwodm0pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHplcm9JbXBsKGds
b2JhbE9iamVjdCkpOwogCiAgICAgLy8gSWYgYmlnSW50IGlzIG5lZ2F0aXZlLCBzaW11bGF0ZSB0
d28ncyBjb21wbGVtZW50IHJlcHJlc2VudGF0aW9uLgogICAgIGlmIChiaWdJbnQuc2lnbigpKSB7
CkBAIC0yODAyLDcgKzI5MjEsNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YXNV
aW50TkltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0XwogICAgICAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJCaWdJbnQgZ2Vu
ZXJhdGVkIGZyb20gdGhpcyBvcGVyYXRpb24gaXMgdG9vIGJpZyJfcyk7CiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1bmNhdGVBbmRTdWJG
cm9tUG93ZXJPZlR3byh2bSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obiksIGJpZ0ludCwgZmFsc2Up
OworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHRydW5jYXRlQW5kU3ViRnJvbVBv
d2VyT2ZUd28oZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxpbnQzMl90PihuKSwgYmlnSW50LCBm
YWxzZSkpOwogICAgIH0KIAogICAgIC8vIElmIGJpZ0ludCBpcyBwb3NpdGl2ZSBhbmQgaGFzIHVw
IHRvIG4gYml0cywgcmV0dXJuIGl0IGRpcmVjdGx5LgpAQCAtMjgyNCwxOCArMjk0MywyMiBAQCBK
U0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YXNVaW50TkltcGwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgdWludDY0XwogCiAgICAgLy8gT3RoZXJ3aXNlLCB0cnVuY2F0ZS4KICAg
ICBBU1NFUlQobiA8PSBJTlQzMl9NQVgpOwotICAgIHJldHVybiB0cnVuY2F0ZVRvTkJpdHModm0s
IHN0YXRpY19jYXN0PGludDMyX3Q+KG4pLCBiaWdJbnQpOworICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgdHJ1bmNhdGVUb05CaXRzKGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8aW50MzJf
dD4obiksIGJpZ0ludCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KLUpT
QmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojp0cnVuY2F0ZVRvTkJpdHMoVk0mIHZtLCBpbnQz
Ml90IG4sIEJpZ0ludEltcGwgYmlnSW50KQorSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6
OnRydW5jYXRlVG9OQml0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IG4s
IEJpZ0ludEltcGwgYmlnSW50KQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBBU1NFUlQo
biAhPSAwKTsKICAgICBBU1NFUlQoYmlnSW50Lmxlbmd0aCgpID4gbiAvIGRpZ2l0Qml0cyk7CiAK
ICAgICBpbnQzMl90IG5lZWRlZERpZ2l0cyA9IChuICsgKGRpZ2l0Qml0cyAtIDEpKSAvIGRpZ2l0
Qml0czsKICAgICBBU1NFUlQobmVlZGVkRGlnaXRzIDw9IHN0YXRpY19jYXN0PGludDMyX3Q+KGJp
Z0ludC5sZW5ndGgoKSkpOwotICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3Ro
VW5jaGVja2VkKHZtLCBuZWVkZWREaWdpdHMpOworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVh
dGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgbmVlZGVkRGlnaXRzKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBBU1NFUlQocmVzdWx0KTsKIAogICAgIC8v
IENvcHkgYWxsIGRpZ2l0cyBleGNlcHQgdGhlIE1TRC4KQEAgLTI4NTEsMTkgKzI5NzQsMjMgQEAg
SlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnRydW5jYXRlVG9OQml0cyhWTSYgdm0sIGlu
dDMyX3QgbiwgQmlnSW50SW1wbCBiaWcKICAgICB9CiAgICAgcmVzdWx0LT5zZXREaWdpdChsYXN0
LCBtc2QpOwogICAgIHJlc3VsdC0+c2V0U2lnbihiaWdJbnQuc2lnbigpKTsKLSAgICByZXR1cm4g
cmVzdWx0LT5yaWdodFRyaW0odm0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVz
dWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIC8vIFN1YnRyYWN0cyB0aGUgbGVh
c3Qgc2lnbmlmaWNhbnQgbiBiaXRzIG9mIGFicyhiaWdJbnQpIGZyb20gMl5uLgogdGVtcGxhdGUg
PHR5cGVuYW1lIEJpZ0ludEltcGw+Ci1KU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6dHJ1
bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byhWTSYgdm0sIGludDMyX3QgbiwgQmlnSW50SW1wbCBi
aWdJbnQsIGJvb2wgcmVzdWx0U2lnbikKK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojp0
cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGludDMyX3QgbiwgQmlnSW50SW1wbCBiaWdJbnQsIGJvb2wgcmVzdWx0U2lnbikKIHsKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCiAgICAgQVNTRVJUKG4gIT0gMCk7CiAgICAgQVNTRVJUKG4gPD0gc3Rh
dGljX2Nhc3Q8aW50MzJfdD4obWF4TGVuZ3RoQml0cykpOwogCiAgICAgaW50MzJfdCBuZWVkZWRE
aWdpdHMgPSAobiArIChkaWdpdEJpdHMgLSAxKSkgLyBkaWdpdEJpdHM7CiAgICAgQVNTRVJUKG5l
ZWRlZERpZ2l0cyA8PSBzdGF0aWNfY2FzdDxpbnQzMl90PihtYXhMZW5ndGgpKTsgLy8gRm9sbG93
cyBmcm9tIG4gPD0gbWF4TGVuZ3RoQml0cy4KLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRl
V2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgbmVlZGVkRGlnaXRzKTsKKyAgICBKU0JpZ0ludCogcmVz
dWx0ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIG5lZWRlZERpZ2l0cyk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgQVNTRVJUKHJlc3VsdCk7
CiAKICAgICAvLyBQcm9jZXNzIGFsbCBkaWdpdHMgZXhjZXB0IHRoZSBNU0QuCkBAIC0yOTEwLDcg
KzMwMzcsNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6dHJ1bmNhdGVBbmRTdWJG
cm9tUG93ZXJPZlR3byhWTSYgdm0sIGludDMyX3QgbiwgQgogICAgIH0KICAgICByZXN1bHQtPnNl
dERpZ2l0KGxhc3QsIHJlc3VsdE1TRCk7CiAgICAgcmVzdWx0LT5zZXRTaWduKHJlc3VsdFNpZ24p
OwotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0KIAogSlNWYWx1
ZSBKU0JpZ0ludDo6YXNJbnROKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF90
IG4sIEpTQmlnSW50KiBiaWdJbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0JpZ0ludC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJ
bnQuaAppbmRleCA2YmY4YWIyYTU2NzE5ZjQ3ZTZiNzdhODA5ODAxN2Y0YWJlZmFkMzg3Li5jODVj
ZTU2MjdjZGU1MjNiM2IxYmIwYTFlZTYxYzMwNWRlNDViZGMwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKQEAgLTY1LDE2ICs2NSwxOCBAQCBjbGFzcyBKU0JpZ0lu
dCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6
ZShKU0NlbGwqLCBWTSYpOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVaZXJvKFZNJik7Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIEpTQmlnSW50KiB0cnlDcmVhdGVXaXRoTGVuZ3RoKEpTR2xvYmFsT2Jq
ZWN0KiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZVdpdGhM
ZW5ndGhVbmNoZWNrZWQoVk0mLCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKFZNJiwgaW50MzJfdCB2YWx1ZSk7Ci0g
ICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKFZNJiwgdWludDMyX3QgdmFsdWUpOwotICAg
IHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShWTSYsIGludDY0X3QgdmFsdWUpOwotICAgIHN0
YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShWTSYsIHVpbnQ2NF90IHZhbHVlKTsKLSAgICBzdGF0
aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20oVk0mLCBib29sIHZhbHVlKTsKLSAgICBzdGF0aWMgSlNC
aWdJbnQqIGNyZWF0ZUZyb20oVk0mLCBkb3VibGUgdmFsdWUpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlWmVybyhKU0dsb2JhbE9iamVjdCopOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0ludCogdHJ5Q3JlYXRlWmVybyhWTSYpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0ludCogdHJ5Q3JlYXRlV2l0aExlbmd0aChW
TSYsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQmln
SW50KiBjcmVhdGVXaXRoTGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgbGVuZ3RoKTsK
KworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShKU0ds
b2JhbE9iamVjdCosIGludDMyX3QgdmFsdWUpOworICAgIHN0YXRpYyBKU0JpZ0ludCogdHJ5Q3Jl
YXRlRnJvbShWTSYsIGludDMyX3QgdmFsdWUpOworICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRl
RnJvbShKU0dsb2JhbE9iamVjdCosIHVpbnQzMl90IHZhbHVlKTsKKyAgICBzdGF0aWMgSlNCaWdJ
bnQqIGNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqLCBpbnQ2NF90IHZhbHVlKTsKKyAgICBzdGF0
aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqLCB1aW50NjRfdCB2YWx1ZSk7
CisgICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0KiwgYm9vbCB2
YWx1ZSk7CisgICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0Kiwg
ZG91YmxlIHZhbHVlKTsKIAogICAgIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZMZW5ndGgoKQogICAg
IHsKQEAgLTkwLDIxICs5MiwyMSBAQCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0Nl
bGwgewogCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0K
IAotICAgIHN0YXRpYyBKU1ZhbHVlIG1ha2VIZWFwQmlnSW50T3JCaWdJbnQzMihWTSYgdm0sIGlu
dDY0X3QgdmFsdWUpCisgICAgc3RhdGljIEpTVmFsdWUgbWFrZUhlYXBCaWdJbnRPckJpZ0ludDMy
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDY0X3QgdmFsdWUpCiAgICAgewogI2lm
IFVTRShCSUdJTlQzMikKICAgICAgICAgaWYgKHZhbHVlIDw9IElOVF9NQVggJiYgdmFsdWUgPj0g
SU5UX01JTikKICAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KHZhbHVlKSk7CiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpjcmVhdGVGcm9t
KHZtLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxP
YmplY3QsIHZhbHVlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNWYWx1ZSBtYWtlSGVhcEJpZ0lu
dE9yQmlnSW50MzIoVk0mIHZtLCBkb3VibGUgdmFsdWUpCisgICAgc3RhdGljIEpTVmFsdWUgbWFr
ZUhlYXBCaWdJbnRPckJpZ0ludDMyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGRvdWJs
ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0ludGVnZXIodmFsdWUpKTsKICAgICAg
ICAgaWYgKHN0ZDo6YWJzKHZhbHVlKSA8PSBtYXhTYWZlSW50ZWdlcigpKQotICAgICAgICAgICAg
cmV0dXJuIG1ha2VIZWFwQmlnSW50T3JCaWdJbnQzMih2bSwgc3RhdGljX2Nhc3Q8aW50NjRfdD4o
dmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gbWFrZUhlYXBCaWdJbnRPckJpZ0ludDMyKGdsb2JhbE9iamVj
dCwgc3RhdGljX2Nhc3Q8aW50NjRfdD4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIEpTQmlnSW50
OjpjcmVhdGVGcm9tKGdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIH0KIAogICAgIGVudW0gY2xh
c3MgRXJyb3JQYXJzZU1vZGUgewpAQCAtMTU4LDE3ICsxNjAsMTMgQEAgY2xhc3MgSlNCaWdJbnQg
ZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAgIENvbXBhcmlzb25SZXN1bHQgc3RhdGljIGNv
bXBhcmVUb0RvdWJsZShKU0JpZ0ludCogeCwgZG91YmxlIHkpOwogCi0gICAgQUxXQVlTX0lOTElO
RSBzdGF0aWMgSlNWYWx1ZSBhc0ludDMyT3JIZWFwQ2VsbChWTSYgdm0sIGludDY0X3QgdmFsdWUp
CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgSlNWYWx1ZSBhc0ludDMyT3JIZWFwQ2VsbChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQ2NF90IHZhbHVlKQogICAgIHsKICNpZiBVU0Uo
QklHSU5UMzIpCiAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGF0aWNfY2FzdDxp
bnQzMl90Pih2YWx1ZSkpID09IHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKTsKICNlbmRpZgotICAgICAgICByZXR1cm4gY3Jl
YXRlRnJvbSh2bSwgdmFsdWUpOwotICAgIH0KLSAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1Zh
bHVlIGFzSW50MzJPckhlYXBDZWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDY0
X3QgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gYXNJbnQzMk9ySGVhcENlbGwoZ2xvYmFs
T2JqZWN0LT52bSgpLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBjcmVhdGVGcm9tKGdsb2JhbE9i
amVjdCwgdmFsdWUpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTE4NCw2ICsxODIsOSBAQCBjbGFz
cyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgICAgICBKU1ZhbHVlIHBheWxv
YWQ7CiAgICAgfTsKIHByaXZhdGU6CisgICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVXaXRoTGVu
Z3RoKEpTR2xvYmFsT2JqZWN0KiwgVk0mLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBK
U0JpZ0ludCogY3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCosIFZNJiwgaW50MzJfdCB2YWx1ZSk7
CisgICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVaZXJvKEpTR2xvYmFsT2JqZWN0KiwgVk0mKTsK
IAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1w
bDI+CiAgICAgc3RhdGljIEltcGxSZXN1bHQgZXhwb25lbnRpYXRlSW1wbChKU0dsb2JhbE9iamVj
dCosIEJpZ0ludEltcGwxIGJhc2UsIEJpZ0ludEltcGwyIGV4cG9uZW50KTsKQEAgLTIxMCw3ICsy
MTEsNyBAQCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHN0YXRp
YyBJbXBsUmVzdWx0IHJlbWFpbmRlckltcGwoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4
LCBCaWdJbnRJbXBsMiB5KTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgot
ICAgIHN0YXRpYyBJbXBsUmVzdWx0IHVuYXJ5TWludXNJbXBsKFZNJiwgQmlnSW50SW1wbCB4KTsK
KyAgICBzdGF0aWMgSW1wbFJlc3VsdCB1bmFyeU1pbnVzSW1wbChKU0dsb2JhbE9iamVjdCosIEJp
Z0ludEltcGwgeCk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVu
YW1lIEJpZ0ludEltcGwyPgogICAgIHN0YXRpYyBJbXBsUmVzdWx0IGJpdHdpc2VBbmRJbXBsKEpT
R2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CkBAIC0yOTUsNyAr
Mjk2LDcgQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBzdGF0
aWMgSlNWYWx1ZSBkaXZpZGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4
LCBpbnQzMl90IHkpCiAgICAgewogICAgICAgICBpZiAoIXkpIHsKLSAgICAgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShnZXRWTShnbG9iYWxPYmplY3Qp
KTsKICAgICAgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiMCBp
cyBhbiBpbnZhbGlkIGRpdmlzb3IgdmFsdWUuIl9zKTsKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CiAgICAgICAgIH0KQEAgLTMxMCw3ICszMTEsNyBAQCBjbGFzcyBKU0JpZ0ludCBmaW5h
bCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHN0YXRpYyBKU1ZhbHVlIHJlbWFpbmRlcihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSkKICAgICB7CiAgICAg
ICAgIGlmICgheSkgewotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKGdldFZNKGdsb2JhbE9iamVjdCkpOwogICAgICAgICAgICAgdGhyb3dSYW5n
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICIwIGlzIGFuIGludmFsaWQgZGl2aXNvciB2YWx1
ZS4iX3MpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgfQpAQCAtMzE4
LDExICszMTksMTEgQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAg
ICB9CiAjZW5kaWYKIAotICAgIHN0YXRpYyBKU1ZhbHVlIHVuYXJ5TWludXMoVk0mLCBKU0JpZ0lu
dCogeCk7CisgICAgc3RhdGljIEpTVmFsdWUgdW5hcnlNaW51cyhKU0dsb2JhbE9iamVjdCosIEpT
QmlnSW50KiB4KTsKICNpZiBVU0UoQklHSU5UMzIpCi0gICAgc3RhdGljIEpTVmFsdWUgdW5hcnlN
aW51cyhWTSYgdm0sIGludDMyX3QgeCkKKyAgICBzdGF0aWMgSlNWYWx1ZSB1bmFyeU1pbnVzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhc0ludDMyT3JIZWFwQ2VsbCh2bSwgLXN0YXRpY19jYXN0PGludDY0X3Q+KHgpKTsKKyAg
ICAgICAgcmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGdsb2JhbE9iamVjdCwgLXN0YXRpY19jYXN0
PGludDY0X3Q+KHgpKTsKICAgICB9CiAjZW5kaWYKIApAQCAtNDIzLDEyICs0MjQsMTQgQEAgY2xh
c3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAgIERpZ2l0IGRpZ2l0KHVu
c2lnbmVkKTsKICAgICB2b2lkIHNldERpZ2l0KHVuc2lnbmVkLCBEaWdpdCk7IC8vIFVzZSBvbmx5
IHdoZW4gaW5pdGlhbGl6aW5nLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTQmlnSW50KiByaWdo
dFRyaW0oVk0mKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU0JpZ0ludCogcmlnaHRUcmltKEpT
R2xvYmFsT2JqZWN0Kik7CiAKIHByaXZhdGU6CiAgICAgSlNCaWdJbnQoVk0mLCBTdHJ1Y3R1cmUq
LCBEaWdpdCosIHVuc2lnbmVkIGxlbmd0aCk7CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0
ZUZyb21JbXBsKFZNJiwgdWludDY0X3QgdmFsdWUsIGJvb2wgc2lnbik7CisgICAgSlNCaWdJbnQq
IHJpZ2h0VHJpbShKU0dsb2JhbE9iamVjdCosIFZNJik7CisKKyAgICBzdGF0aWMgSlNCaWdJbnQq
IGNyZWF0ZUZyb21JbXBsKEpTR2xvYmFsT2JqZWN0KiwgdWludDY0X3QgdmFsdWUsIGJvb2wgc2ln
bik7CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdHNQZXJCeXRlID0gODsKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGRpZ2l0Qml0cyA9IHNpemVvZihEaWdpdCkgKiBi
aXRzUGVyQnl0ZTsKQEAgLTQ1NCw3ICs0NTcsNyBAQCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1
YmxpYyBKU0NlbGwgewogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5h
bWUgQmlnSW50SW1wbDI+CiAgICAgc3RhdGljIENvbXBhcmlzb25SZXN1bHQgYWJzb2x1dGVDb21w
YXJlKEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBCaWdJbnRJbXBsPgotICAgIHN0YXRpYyB2b2lkIGFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNv
cihWTSYsIEJpZ0ludEltcGwgeCwgRGlnaXQgZGl2aXNvciwgSlNCaWdJbnQqKiBxdW90aWVudCwg
RGlnaXQmIHJlbWFpbmRlcik7CisgICAgc3RhdGljIGJvb2wgYWJzb2x1dGVEaXZXaXRoRGlnaXRE
aXZpc29yKEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBCaWdJbnRJbXBsIHgsIERpZ2l0IGRpdmlzb3Is
IEpTQmlnSW50KiogcXVvdGllbnQsIERpZ2l0JiByZW1haW5kZXIpOwogICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCaWdJbnRJbXBsPgogICAgIHN0YXRpYyB2b2lkIGludGVybmFsTXVsdGlwbHlBZGQo
QmlnSW50SW1wbCBzb3VyY2UsIERpZ2l0IGZhY3RvciwgRGlnaXQgc3VtbWFuZCwgdW5zaWduZWQs
IEpTQmlnSW50KiByZXN1bHQpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgpA
QCAtNDg5LDE2ICs0OTIsMTYgQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxs
IHsKICAgICB9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1l
IEJpZ0ludEltcGwyLCB0eXBlbmFtZSBCaXR3aXNlT3A+Ci0gICAgc3RhdGljIEpTQmlnSW50KiBh
YnNvbHV0ZUJpdHdpc2VPcChWTSYsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHksIEV4dHJh
RGlnaXRzSGFuZGxpbmcsIEJpdHdpc2VPcCYmKTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29s
dXRlQml0d2lzZU9wKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIg
eSwgRXh0cmFEaWdpdHNIYW5kbGluZywgQml0d2lzZU9wJiYpOwogCiAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KLSAgICBzdGF0aWMgSlNC
aWdJbnQqIGFic29sdXRlQW5kKFZNJiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7Cisg
ICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUFuZChKU0dsb2JhbE9iamVjdCosIEJpZ0ludElt
cGwxIHgsIEJpZ0ludEltcGwyIHkpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBs
MSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+Ci0gICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZU9y
KFZNJiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CisgICAgc3RhdGljIEpTQmlnSW50
KiBhYnNvbHV0ZU9yKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIg
eSk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJ
bXBsMj4KLSAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlQW5kTm90KFZNJiwgQmlnSW50SW1w
bDEgeCwgQmlnSW50SW1wbDIgeSk7CisgICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUFuZE5v
dChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOwogICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+Ci0gICAg
c3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZVhvcihWTSYsIEJpZ0ludEltcGwxIHgsIEJpZ0ludElt
cGwyIHkpOworICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVYb3IoSlNHbG9iYWxPYmplY3Qq
LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKIAogICAgIGVudW0gY2xhc3MgU2lnbk9w
dGlvbiB7CiAgICAgICAgIFNpZ25lZCwKQEAgLTUzNSwyMCArNTM4LDIwIEBAIGNsYXNzIEpTQmln
SW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgc3RhdGljIEpTQmlnSW50KiBhbGxvY2F0
ZUZvcihKU0dsb2JhbE9iamVjdCosIFZNJiwgdW5zaWduZWQgcmFkaXgsIHVuc2lnbmVkIGNoYXJj
b3VudCk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KLSAgICBzdGF0aWMg
SlNCaWdJbnQqIGNvcHkoVk0mLCBCaWdJbnRJbXBsIHgpOworICAgIHN0YXRpYyBKU0JpZ0ludCog
Y29weShKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwgeCk7CiAKICAgICB2b2lkIGlucGxhY2VN
dWx0aXBseUFkZChEaWdpdCBtdWx0aXBsaWVyLCBEaWdpdCBwYXJ0KTsKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgogICAgIHN0YXRpYyBJ
bXBsUmVzdWx0IGFic29sdXRlQWRkKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmln
SW50SW1wbDIgeSwgYm9vbCByZXN1bHRTaWduKTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmln
SW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgotICAgIHN0YXRpYyBJbXBsUmVzdWx0IGFi
c29sdXRlU3ViKFZNJiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwgYm9vbCByZXN1bHRT
aWduKTsKKyAgICBzdGF0aWMgSW1wbFJlc3VsdCBhYnNvbHV0ZVN1YihKU0dsb2JhbE9iamVjdCos
IEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHksIGJvb2wgcmVzdWx0U2lnbik7CiAKICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgogICAg
IHN0YXRpYyBJbXBsUmVzdWx0IGxlZnRTaGlmdEJ5QWJzb2x1dGUoSlNHbG9iYWxPYmplY3QqLCBC
aWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmln
SW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgogICAgIHN0YXRpYyBJbXBsUmVzdWx0IHJp
Z2h0U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50
SW1wbDIgeSk7CiAKLSAgICBzdGF0aWMgSW1wbFJlc3VsdCByaWdodFNoaWZ0QnlNYXhpbXVtKFZN
JiwgYm9vbCBzaWduKTsKKyAgICBzdGF0aWMgSW1wbFJlc3VsdCByaWdodFNoaWZ0QnlNYXhpbXVt
KEpTR2xvYmFsT2JqZWN0KiwgYm9vbCBzaWduKTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBC
aWdJbnRJbXBsPgogICAgIHN0YXRpYyBPcHRpb25hbDxEaWdpdD4gdG9TaGlmdEFtb3VudChCaWdJ
bnRJbXBsIHgpOwpAQCAtNTU4LDkgKzU2MSw5IEBAIGNsYXNzIEpTQmlnSW50IGZpbmFsIDogcHVi
bGljIEpTQ2VsbCB7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CiAgICAgc3Rh
dGljIEltcGxSZXN1bHQgYXNVaW50TkltcGwoSlNHbG9iYWxPYmplY3QqLCB1aW50NjRfdCwgQmln
SW50SW1wbCk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci0gICAgc3RhdGlj
IEltcGxSZXN1bHQgdHJ1bmNhdGVUb05CaXRzKFZNJiwgaW50MzJfdCwgQmlnSW50SW1wbCk7Cisg
ICAgc3RhdGljIEltcGxSZXN1bHQgdHJ1bmNhdGVUb05CaXRzKEpTR2xvYmFsT2JqZWN0KiwgaW50
MzJfdCwgQmlnSW50SW1wbCk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci0g
ICAgc3RhdGljIEltcGxSZXN1bHQgdHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byhWTSYsIGlu
dDMyX3QsIEJpZ0ludEltcGwsIGJvb2wgcmVzdWx0U2lnbik7CisgICAgc3RhdGljIEltcGxSZXN1
bHQgdHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byhKU0dsb2JhbE9iamVjdCosIGludDMyX3Qs
IEJpZ0ludEltcGwsIGJvb2wgcmVzdWx0U2lnbik7CiAKICAgICBpbmxpbmUgc3RhdGljIHNpemVf
dCBvZmZzZXRPZkRhdGEoKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDSlNWYWx1ZS5jcHAKaW5kZXggYTQ1NzcyY2ZlYTQ2NGE5NGVhYWUxNjBmMjU4NTZiYmYxOTNm
OTBiZC4uOWU0NzAzYmI1NjFiOTA0ZWIxM2QyZTg3ZDk4NDc2ZDBjZWY0ZWYyOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKQEAgLTExOCwxOSArMTE4
LDIzIEBAIEpTT2JqZWN0KiBKU1ZhbHVlOjp0b09iamVjdFNsb3dDYXNlKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpIGNvbnN0CiAKIEpTVmFsdWUgSlNWYWx1ZTo6dG9UaGlzU2xvd0Nhc2Uo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRUNNQU1vZGUgZWNtYU1vZGUpIGNvbnN0CiB7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEFTU0VSVCghaXNDZWxsKCkpOwogCiAgICAgaWYg
KGVjbWFNb2RlLmlzU3RyaWN0KCkpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAogICAgIGlmIChp
c0ludDMyKCkgfHwgaXNEb3VibGUoKSkKLSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdE51bWJlcihn
bG9iYWxPYmplY3QsIGFzVmFsdWUoKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgY29uc3RydWN0TnVtYmVyKGdsb2JhbE9iamVjdCwgYXNWYWx1ZSgpKSk7CiAgICAgaWYgKGlz
VHJ1ZSgpIHx8IGlzRmFsc2UoKSkKLSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEJvb2xlYW5Gcm9t
SW1tZWRpYXRlQm9vbGVhbihnbG9iYWxPYmplY3QsIGFzVmFsdWUoKSk7CisgICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgY29uc3RydWN0Qm9vbGVhbkZyb21JbW1lZGlhdGVCb29sZWFu
KGdsb2JhbE9iamVjdCwgYXNWYWx1ZSgpKSk7CiAjaWYgVVNFKEJJR0lOVDMyKQogICAgIGlmIChp
c0JpZ0ludDMyKCkpIHsKLSAgICAgICAgSlNDZWxsKiBoZWFwQmlnSW50ID0gc3RhdGljX2Nhc3Q8
SlNDZWxsKj4oSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LT52bSgpLCBiaWdJbnQz
MkFzSW50MzIoKSkpOwotICAgICAgICByZXR1cm4gaGVhcEJpZ0ludC0+dG9PYmplY3QoZ2xvYmFs
T2JqZWN0KTsKKyAgICAgICAgSlNDZWxsKiBoZWFwQmlnSW50ID0gc3RhdGljX2Nhc3Q8SlNDZWxs
Kj4oSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCBiaWdJbnQzMkFzSW50MzIoKSkp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIGhlYXBCaWdJbnQtPnRvT2JqZWN0KGdsb2JhbE9iamVjdCkp
OwogICAgIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXgg
ZmE5OGM1MTJmMTQxMzVkMTJhODE1MzNiNTMyZmMzOWQ3NjZiMWFjMS4uZDUxMGM0ZTRkOGQyYTI5
YmM2MGRmZGFkOTViMmVhNzgyNmZhNzQyYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcApAQCAtNDcyLDcgKzQ3MiwxMSBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUg
aGVhcFR5cGUpCiAgICAgICAgIHNlbnRpbmVsTWFwQnVja2V0KCk7CiAgICAgICAgIHNlbnRpbmVs
U2V0QnVja2V0KCk7CiAgICAgfQotICAgIGhlYXBCaWdJbnRDb25zdGFudE9uZS5zZXQoKnRoaXMs
IEpTQmlnSW50OjpjcmVhdGVGcm9tKCp0aGlzLCAxKSk7CisgICAgeworICAgICAgICBhdXRvKiBi
aWdJbnQgPSBKU0JpZ0ludDo6dHJ5Q3JlYXRlRnJvbSgqdGhpcywgMSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGJpZ0ludCk7CisgICAgICAgIGhlYXBCaWdJbnRDb25zdGFudE9uZS5zZXQoKnRo
aXMsIGJpZ0ludCk7CisgICAgfQogCiAgICAgVGhyZWFkOjpjdXJyZW50KCkuc2V0Q3VycmVudEF0
b21TdHJpbmdUYWJsZShleGlzdGluZ0VudHJ5QXRvbVN0cmluZ1RhYmxlKTsKICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
CmluZGV4IGI1MjMwMzhkMGFkNWFlN2Y0NTU0MDEyNjA4NjNkNzY5ODY0MTZlZGYuLmZkZDgyNWMy
MDgwMDVhYWRjZWEyM2Q5NThjZWVhNzRhMTFhMWQ5MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMzAwNyw3ICsz
MDA3LDExIEBAIGNsYXNzIENsb25lRGVzZXJpYWxpemVyIDogQ2xvbmVCYXNlIHsKICNpZiBVU0Uo
QklHSU5UMzIpCiAgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMigwKTsKICNlbHNlCi0gICAg
ICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gSlNCaWdJbnQ6OmNyZWF0ZVplcm8obV9sZXhpY2Fs
R2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgICAgIEpTQmlnSW50KiBiaWdJbnQgPSBKU0Jp
Z0ludDo6dHJ5Q3JlYXRlWmVybyhtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKCFiaWdJbnQpKSB7CisgICAgICAgICAgICAgICAgZmFpbCgpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBtX2djQnVmZmVyLmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3coYmlnSW50KTsKICAgICAg
ICAgICAgIHJldHVybiBiaWdJbnQ7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdl
TG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTVmZWM3N2U4OTBiOWJkMzI0ZjE4NzZkZmVl
NzdmMTUzNzllODI0Ni4uYjUzZjYzMjFmYjNhNDJjYjVmN2UyYTczZmNiMzMwMjQ1MjIwZDkwMSAx
MDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNyBAQAorMjAyMC0wNS0yOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUu
Y29tPgorCisgICAgICAgIFtKU0NdIEpTQmlnSW50IGFsbG9jYXRpb24gc2hvdWxkIGJlIGdyYWNl
ZnVsIGZvciBPT00KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxMjUxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogc3RyZXNzL2JpZ2ludC1jYW4tdGhyb3ctb29tLmpzOiBDb3BpZWQgZnJvbSBKU1Rlc3Rz
L3N0cmVzcy9nZXQtZnVuY3Rpb24tcmVhbG0tbm90LWRvaW5nLXJlY3Vyc2lvbi5qcy4KKyAgICAg
ICAgKGNhblRocm93KToKKyAgICAgICAgKGZvbyk6CisgICAgICAgIChnZXQgZm9vKToKKyAgICAg
ICAgKiBzdHJlc3MvZ2V0LWZ1bmN0aW9uLXJlYWxtLW5vdC1kb2luZy1yZWN1cnNpb24uanM6Cisg
ICAgICAgIChjYW5UaHJvdyk6CisKIDIwMjAtMDUtMjcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21p
bGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgZm9yLW9mIHNob3VsZCBjaGVjayB0aGUgaXRlcmFi
bGUgaXMgYSBKU0FycmF5IGZvciBGYXN0QXJyYXkgaW4gREZHIGl0ZXJhdG9yX29wZW4KZGlmZiAt
LWdpdCBhL0pTVGVzdHMvc3RyZXNzL2JpZ2ludC1jYW4tdGhyb3ctb29tLmpzIGIvSlNUZXN0cy9z
dHJlc3MvYmlnaW50LWNhbi10aHJvdy1vb20uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzAzMWI3YzhkZTE3MmU4
MjZmOTRhZTU1MTNiOGE1NGEwY2FiMjNhYgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3Ry
ZXNzL2JpZ2ludC1jYW4tdGhyb3ctb29tLmpzCkBAIC0wLDAgKzEsMzkgQEAKKy8vQCBza2lwIGlm
ICRtZW1vcnlMaW1pdGVkCisvL0AgcnVuRGVmYXVsdCgiLS11c2VDb25jdXJyZW50SklUPTAiKQor
CitmdW5jdGlvbiBjYW5UaHJvdyhmdW5jLCBlcnJvck1lc3NhZ2UpIHsKKyAgICB2YXIgZXJyb3JU
aHJvd24gPSBmYWxzZTsKKyAgICB2YXIgZXJyb3IgPSBudWxsOworICAgIHRyeSB7CisgICAgICAg
IGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVycm9yVGhyb3duID0gdHJ1ZTsK
KyAgICAgICAgZXJyb3IgPSBlOworICAgIH0KKyAgICBpZiAoZXJyb3JUaHJvd24gJiYgU3RyaW5n
KGVycm9yKSAhPT0gZXJyb3JNZXNzYWdlKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGJhZCBl
cnJvcjogJHtTdHJpbmcoZXJyb3IpfWApOworICAgIHJldHVybiBmYWxzZTsKK30KKworY29uc3Qg
YTAgPSBbXTsKK2EwLl9fcHJvdG9fXyA9IHt9OworYTAubGVuZ3RoID0gMioqMjMKK09iamVjdC5k
ZWZpbmVQcm9wZXJ0eShhMCwgMCwgeyBnZXQ6IGZvbyB9KTsKKworZnVuY3Rpb24gZm9vKCkgewor
ICAgIG5ldyBJbnQxNkFycmF5KGEwKTsKK30KKworbmV3IFByb21pc2UoZm9vKTsKKwordHJ5IHsK
KyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKyAgICAgICAgbmV3IFVpbnQ4
QXJyYXkoMTAwMDAwKTsKKyAgICB9Cit9IGNhdGNoIHt9CisKK2NhblRocm93KCgpID0+IHsKKyAg
ICBmb3IgKGxldCBpPTBuOyBpPDEwMDAwbjsgaSsrKSB7CisgICAgICAgIDJuKippOworICAgIH0K
K30sIGBSYW5nZUVycm9yOiBPdXQgb2YgbWVtb3J5YCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0
cmVzcy9nZXQtZnVuY3Rpb24tcmVhbG0tbm90LWRvaW5nLXJlY3Vyc2lvbi5qcyBiL0pTVGVzdHMv
c3RyZXNzL2dldC1mdW5jdGlvbi1yZWFsbS1ub3QtZG9pbmctcmVjdXJzaW9uLmpzCmluZGV4IGE3
OWVmMmNjNjBkYWU5ODNhNGIyOTRmNDRhMTdkNzIxZjM5N2Y2M2IuLmZmYTZlM2FhY2U5M2QzZDNi
ODdhMzk3NTI2NDk3OGJiOTZmMjg1MTUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2dldC1m
dW5jdGlvbi1yZWFsbS1ub3QtZG9pbmctcmVjdXJzaW9uLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNz
L2dldC1mdW5jdGlvbi1yZWFsbS1ub3QtZG9pbmctcmVjdXJzaW9uLmpzCkBAIC05LDcgKzksNiBA
QCBmdW5jdGlvbiBjYW5UaHJvdyhmdW5jLCBlcnJvck1lc3NhZ2UpIHsKICAgICB9IGNhdGNoIChl
KSB7CiAgICAgICAgIGVycm9yVGhyb3duID0gdHJ1ZTsKICAgICAgICAgZXJyb3IgPSBlOwotICAg
ICAgICBwcmludChlcnJvci5tZXNzYWdlKTsKICAgICB9CiAgICAgaWYgKGVycm9yVGhyb3duICYm
IFN0cmluZyhlcnJvcikgIT09IGVycm9yTWVzc2FnZSkKICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KGBiYWQgZXJyb3I6ICR7U3RyaW5nKGVycm9yKX1gKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400557</attachid>
            <date>2020-05-29 00:33:03 -0700</date>
            <delta_ts>2020-05-29 00:38:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212512-20200529003302.patch</filename>
            <type>text/plain</type>
            <size>90834</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMjc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MjI3NWIxOGQwNzg3ZGViOTNiMDA2ZjM3NWIxZjM1NzlhNGEyNDZkLi5lNjJiZDg1ZWUwMTA5MDhh
ODBmNzY2MzQwNGRjNTQwZDljMzJjMjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4OSBAQAorMjAyMC0wNS0yOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEpTQmlnSW50IGFsbG9jYXRpb24gc2hvdWxkIGJlIGdyYWNlZnVs
IGZvciBPT00KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMjUxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggYWxsb3dzIEpTQmlnSW50J3Mgc3RvcmFnZSBhbGxvY2F0aW9uIHRvIGZhaWwg
Z3JhY2VmdWxseSBpZiBPT00gY29uZGl0aW9uIGhhcHBlbnMuCisgICAgICAgIFdlIHRocmVhZCBK
U0dsb2JhbE9iamVjdCogaW5zdGVhZCBvZiBWTSYgYW5kIHRocm93IE9PTSBlcnJvciBpZiBzdG9y
YWdlIGFsbG9jYXRpb24gZmFpbGVkLgorICAgICAgICBXZSBhbHNvIHJlbmFtZSBgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdGAgcGFyYW1ldGVyIHRvIGBKU0dsb2JhbE9iamVjdCogbnVsbE9y
R2xvYmFsT2JqZWN0Rm9yT09NYAorICAgICAgICBpZiBpdCBjYW4gYmUgbnVsbHB0ci4KKworICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAg
ICAoZnVuY3Rpb25DcmVhdGVIZWFwQmlnSW50KToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyQXJl
bmEuY3BwOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyQXJlbmE6Om1ha2VCaWdJbnREZWNpbWFs
SWRlbnRpZmllcik6CisgICAgICAgICogcnVudGltZS9CaWdJbnRDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OnRvQmlnSW50KToKKyAgICAgICAgKEpTQzo6Y2FsbEJpZ0ludENvbnN0cnVj
dG9yKToKKyAgICAgICAgKiBydW50aW1lL0JpZ0ludFByb3RvdHlwZS5jcHA6CisgICAgICAgIChK
U0M6OnRvVGhpc0JpZ0ludFZhbHVlKToKKyAgICAgICAgKEpTQzo6YmlnSW50UHJvdG9GdW5jVG9T
dHJpbmcpOgorICAgICAgICAoSlNDOjpiaWdJbnRQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6Cisg
ICAgICAgIChKU0M6OmJpZ0ludFByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAqIHJ1bnRpbWUv
Q2FjaGVkVHlwZXMuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZWRCaWdJbnQ6OmRlY29kZSBjb25z
dCk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdEZ1bmNGb3JtYXQpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3BwOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
Y3JlYXRlWmVybyk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0cnlDcmVhdGVaZXJvKToKKyAg
ICAgICAgKEpTQzo6SlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGgpOgorICAgICAgICAoSlNDOjpK
U0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojpj
cmVhdGVGcm9tKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnRyeUNyZWF0ZUZyb20pOgorICAg
ICAgICAoSlNDOjpKU0JpZ0ludDo6Y3JlYXRlRnJvbUltcGwpOgorICAgICAgICAoSlNDOjpKU0Jp
Z0ludDo6cGFyc2VJbnQpOgorICAgICAgICAoSlNDOjpIZWFwQmlnSW50SW1wbDo6dG9IZWFwQmln
SW50KToKKyAgICAgICAgKEpTQzo6SW50MzJCaWdJbnRJbXBsOjp0b0hlYXBCaWdJbnQpOgorICAg
ICAgICAoSlNDOjp6ZXJvSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpleHBvbmVudGlh
dGVJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6Om11bHRpcGx5SW1wbCk6CisgICAgICAg
IChKU0M6OkpTQmlnSW50OjpkaXZpZGVJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmNv
cHkpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwpOgorICAgICAgICAo
SlNDOjpKU0JpZ0ludDo6dW5hcnlNaW51cyk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpyZW1h
aW5kZXJJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmluY0ltcGwpOgorICAgICAgICAo
SlNDOjpKU0JpZ0ludDo6YWRkSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpzdWJJbXBs
KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmJpdHdpc2VBbmRJbXBsKToKKyAgICAgICAgKEpT
Qzo6SlNCaWdJbnQ6OmJpdHdpc2VPckltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0
d2lzZVhvckltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVBZGQpOgorICAg
ICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVTdWIpOgorICAgICAgICAoSlNDOjpKU0JpZ0lu
dDo6YWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29yKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6
OmFic29sdXRlRGl2V2l0aEJpZ0ludERpdmlzb3IpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
YWJzb2x1dGVMZWZ0U2hpZnRBbHdheXNDb3B5KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFi
c29sdXRlQml0d2lzZU9wKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlQW5kKToK
KyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlT3IpOgorICAgICAgICAoSlNDOjpKU0Jp
Z0ludDo6YWJzb2x1dGVBbmROb3QpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVY
b3IpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVBZGRPbmUpOgorICAgICAgICAo
SlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVTdWJPbmUpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
bGVmdFNoaWZ0QnlBYnNvbHV0ZSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpyaWdodFNoaWZ0
QnlBYnNvbHV0ZSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpyaWdodFNoaWZ0QnlNYXhpbXVt
KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnRvU3RyaW5nQmFzZVBvd2VyT2ZUd28pOgorICAg
ICAgICAoSlNDOjpKU0JpZ0ludDo6dG9TdHJpbmdHZW5lcmljKToKKyAgICAgICAgKEpTQzo6SlNC
aWdJbnQ6OnJpZ2h0VHJpbSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphbGxvY2F0ZUZvcik6
CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojphc0ludE5JbXBsKToKKyAgICAgICAgKEpTQzo6SlNC
aWdJbnQ6OmFzVWludE5JbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnRydW5jYXRlVG9O
Qml0cyk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9m
VHdvKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQp
OiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuaDoKKyAgICAgICAgKiBydW50
aW1lL0pTQ0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjp0b1RoaXNTbG93Q2Fz
ZSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpW
TSk6CisKIDIwMjAtMDUtMjggIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IGFkZCBtaXNzaW5nIGNvbmRpdGlvbiBndWFyZHMgd2hlbiBn
ZW5lcmF0aW5nIG9iamMgcHJvdG9jb2wgZmlsZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwYzY2NjhhNmYzYTNh
M2NjZjJjMzg5YTU3ZTkyZGIzZmExNzA4NTU1Li5mZGZmYmI3Yjg4YjdjYTk4OWI2NTM4OTY1YThm
MTA2ZDdlZDdhYmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjAtMDUtMjkgIFl1
c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBKU0JpZ0lu
dCBhbGxvY2F0aW9uIHNob3VsZCBiZSBncmFjZWZ1bCBmb3IgT09NCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI1MTIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVh
ZEJpZ0ludCk6CisKIDIwMjAtMDUtMjggIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgog
CiAgICAgICAgIFtBcHBsZSBQYXldIEJ1dHRvbnMgcmVuZGVyIHdpdGggYSBjb3JuZXIgcmFkaXVz
IG9mIFBLQXBwbGVQYXlCdXR0b25EZWZhdWx0Q29ybmVyUmFkaXVzIGV2ZW4gd2hlbiBleHBsaWNp
dGx5IHNwZWNpZnlpbmcgImJvcmRlci1yYWRpdXM6IDBweCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IDNhNDFlNzYyZWM4ZDgzY2M0MmFjZTFkMTNi
MmQ0Nzk2MmI0Njc1NzUuLmQwMGVhMjk2MzYwMGM1MTEzYTg3OGIyY2VhZGNmNzU4MDlhYTFhYWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtMjg0
MiwxMCArMjg0MiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFy
aXRoTmVnYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAKICNpZiBVU0UoQklHSU5U
MzIpCiAgICAgaWYgKHByaW1WYWx1ZS5pc0JpZ0ludDMyKCkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5iaWdJbnQzMkFz
SW50MzIoKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVu
Y29kZShKU0JpZ0ludDo6dW5hcnlNaW51cyhnbG9iYWxPYmplY3QsIHByaW1WYWx1ZS5iaWdJbnQz
MkFzSW50MzIoKSkpKTsKICNlbmRpZgogICAgIGlmIChwcmltVmFsdWUuaXNIZWFwQmlnSW50KCkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWludXModm0s
IHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6dW5hcnlNaW51cyhnbG9iYWxPYmplY3Qs
IHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSkpKTsKIAogICAgIGRvdWJsZSBudW1iZXIgPSBwcmlt
VmFsdWUudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKQEAgLTI4NzAsMTMgKzI4NzAsMTUgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWwKIAogI2lmIFVTRShCSUdJTlQzMikKICAgICBpZiAocHJpbVZhbHVlLmlz
QmlnSW50MzIoKSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1p
bnVzKHZtLCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpOworICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKGdsb2JhbE9iamVjdCwgcHJpbVZhbHVlLmJpZ0lu
dDMyQXNJbnQzMigpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
ICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlUmVzdWx0KHJlc3VsdCk7CiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAjZW5kaWYKICAgICBpZiAocHJp
bVZhbHVlLmlzSGVhcEJpZ0ludCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJ
bnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSk7CisgICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFs
dWUuYXNIZWFwQmlnSW50KCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogICAgICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVSZXN1bHQocmVzdWx0KTsKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KQEAgLTI5MTIsMTMgKzI5
MTQsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5lZ2F0
ZVByb2ZpbGVkT3B0aW1pemUoSlNHbG9iYWxPYmplY3QKIAogI2lmIFVTRShCSUdJTlQzMikKICAg
ICBpZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9
IEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpOwor
ICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKGdsb2JhbE9iamVj
dCwgcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlUmVzdWx0KHJl
c3VsdCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAj
ZW5kaWYKICAgICBpZiAocHJpbVZhbHVlLmlzSGVhcEJpZ0ludCgpKSB7Ci0gICAgICAgIEpTVmFs
dWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5hc0hlYXBCaWdJ
bnQoKSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xv
YmFsT2JqZWN0LCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVSZXN1
bHQocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAg
IH0KQEAgLTI5NTQsMTAgKzI5NTgsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKICNpZiBV
U0UoQklHSU5UMzIpCiAgICAgLy8gRklYTUU6IHdoeSBkb2VzIHRoaXMgZnVuY3Rpb24gcHJvZmls
ZSB0aGUgYXJndW1lbnQgYnV0IG5vdCB0aGUgcmVzdWx0PwogICAgIGlmIChwcmltVmFsdWUuaXNC
aWdJbnQzMigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50Ojp1bmFy
eU1pbnVzKHZtLCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpKTsKKyAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWludXMo
Z2xvYmFsT2JqZWN0LCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpKSk7CiAjZW5kaWYKICAg
ICBpZiAocHJpbVZhbHVlLmlzSGVhcEJpZ0ludCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkp
KTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNC
aWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkp
KSk7CiAKICAgICBkb3VibGUgbnVtYmVyID0gcHJpbVZhbHVlLnRvTnVtYmVyKGdsb2JhbE9iamVj
dCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qc2MuY3BwCmluZGV4IGY2M2ZkNzAyNzJhN2FkMDc1N2ViMGJjYmE3OTQxZWExYjdj
ZjcxYWUuLmI4YzkyZjMwOWYxNzNmNWI5ZmFlY2QyYzU2MzRmYWQ4NzJmY2RkN2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCkBAIC0yMjUyLDcgKzIyNTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQ3JlYXRlSGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJpZ0ludCk7CiAgICAgQVNTRVJUKGJp
Z0ludC5pc0JpZ0ludDMyKCkpOwogICAgIGludDMyX3QgdmFsdWUgPSBiaWdJbnQuYmlnSW50MzJB
c0ludDMyKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6Y3JlYXRlRnJv
bSh2bSwgdmFsdWUpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVu
Y29kZShKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIHZhbHVlKSkpOwogI2Vsc2UK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJpZ0ludCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5jcHAKaW5kZXggYWFjMDU2NjkwZTQxZWVk
MGZiNjU5ZWFhNDQyYzk1MmY2NTUzNzM4MC4uYzcxOTg4NjI0MWQzNTdiZjBlMzdhYTliYTcwODQ3
ODQwZjEyM2Y0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJz
ZXJBcmVuYS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVu
YS5jcHAKQEAgLTk2LDkgKzk2LDEwIEBAIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVu
YTo6bWFrZUJpZ0ludERlY2ltYWxJZGVudGlmaWVyKFZNJiB2bSwgY29uc3QgSWRlCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzYyNwogICAgIEpTQmln
SW50KiBoZWFwQmlnSW50OwogI2lmIFVTRShCSUdJTlQzMikKLSAgICBpZiAoYmlnSW50LmlzQmln
SW50MzIoKSkKLSAgICAgICAgaGVhcEJpZ0ludCA9IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCBi
aWdJbnQuYmlnSW50MzJBc0ludDMyKCkpOwotICAgIGVsc2UKKyAgICBpZiAoYmlnSW50LmlzQmln
SW50MzIoKSkgeworICAgICAgICBoZWFwQmlnSW50ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZUZyb20o
dm0sIGJpZ0ludC5iaWdJbnQzMkFzSW50MzIoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGhl
YXBCaWdJbnQpOworICAgIH0gZWxzZQogI2VuZGlmCiAgICAgICAgIGhlYXBCaWdJbnQgPSBiaWdJ
bnQuYXNIZWFwQmlnSW50KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0JpZ0ludENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0JpZ0ludENvbnN0cnVjdG9yLmNwcAppbmRleCA0ZmZiZmJiOTZkZDE3ZmFlMTk0N2I0NmJi
YzgxZDk4NDJkYmMwZDA5Li43ZTNkZTVlZWFkYjE2YzkxMjE2MTYyMWZkNGMyZWZiYTlhYmYzMDk3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRDb25zdHJ1
Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50Q29uc3Ry
dWN0b3IuY3BwCkBAIC04Nyw3ICs4Nyw3IEBAIEpTVmFsdWUgdG9CaWdJbnQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBhcmd1bWVudCkKICNpZiBVU0UoQklHSU5UMzIpCiAg
ICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHByaW1pdGl2ZS5hc0Jvb2xlYW4oKSk7CiAjZWxzZQot
ICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIHByaW1pdGl2ZS5hc0Jvb2xl
YW4oKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNCaWdJbnQ6OmNyZWF0
ZUZyb20oZ2xvYmFsT2JqZWN0LCBwcmltaXRpdmUuYXNCb29sZWFuKCkpKTsKICNlbmRpZgogICAg
IH0KIApAQCAtMTE2LDcgKzExNiw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNhbGxCaWdJbnRDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAjaWYgVVNF
KEJJR0lOVDMyKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQmlnSW50MzIocHJp
bWl0aXZlLmFzSW50MzIoKSkpOwogI2Vsc2UKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgcHJpbWl0aXZlLmFzSW50MzIoKSkpOworICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6Y3Jl
YXRlRnJvbShnbG9iYWxPYmplY3QsIHByaW1pdGl2ZS5hc0ludDMyKCkpKSk7CiAjZW5kaWYKICAg
ICB9CiAKQEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjYWxsQmlnSW50Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbAogICAgICAg
ICBkb3VibGUgbnVtYmVyID0gcHJpbWl0aXZlLmFzRG91YmxlKCk7CiAgICAgICAgIGlmICghaXNJ
bnRlZ2VyKG51bWJlcikpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiTm90IGFuIGludGVn
ZXIiX3MpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6bWFrZUhl
YXBCaWdJbnRPckJpZ0ludDMyKHZtLCBwcmltaXRpdmUuYXNEb3VibGUoKSkpOworICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6bWFrZUhl
YXBCaWdJbnRPckJpZ0ludDMyKGdsb2JhbE9iamVjdCwgcHJpbWl0aXZlLmFzRG91YmxlKCkpKSk7
CiAgICAgfQogCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUo
dG9CaWdJbnQoZ2xvYmFsT2JqZWN0LCBwcmltaXRpdmUpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50UHJvdG90eXBlLmNwcAppbmRleCA0YTRiNmUyZTk4MmUw
MjgzMWQ5ZTE2YWNiOTFkYWVkYjQ2MzczMzdjLi4xZDhmYzAwMjRhMTk3ODFlM2JiZjdkZDMyYjJi
MTRmYzAwYjEwOWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9C
aWdJbnRQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jp
Z0ludFByb3RvdHlwZS5jcHAKQEAgLTc0LDEyICs3NCwxNSBAQCB2b2lkIEJpZ0ludFByb3RvdHlw
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCopCiAKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTQmlnSW50KiB0b1RoaXNCaWdJbnRWYWx1ZShW
TSYgdm0sIEpTVmFsdWUgdGhpc1ZhbHVlKQorc3RhdGljIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQq
IHRvVGhpc0JpZ0ludFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
dGhpc1ZhbHVlKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICNpZiBVU0UoQklHSU5UMzIpCiAg
ICAgLy8gRklYTUU6IGhlYXAtYWxsb2NhdGluZyBhbGwgYmlnIGludHMgaXMgaW5uZWZpY2llbnQs
IGJ1dCByZS1pbXBsZW1lbnRpbmcgdG9TdHJpbmcgZm9yIHNtYWxsIEJpZ0ludHMgaXMgZW5vdWdo
IHdvcmsgdGhhdCBJJ20gZGVmZXJyaW5nIGl0IHRvIGEgbGF0ZXIgcGF0Y2guCiAgICAgaWYgKHRo
aXNWYWx1ZS5pc0JpZ0ludDMyKCkpCi0gICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJv
bSh2bSwgdGhpc1ZhbHVlLmJpZ0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIHRoaXNWYWx1
ZS5iaWdJbnQzMkFzSW50MzIoKSkpOwogI2VuZGlmCiAKICAgICBpZiAodGhpc1ZhbHVlLmlzQ2Vs
bCgpKSB7CkBAIC05MCwxMiArOTMsMTMgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQq
IHRvVGhpc0JpZ0ludFZhbHVlKFZNJiB2bSwgSlNWYWx1ZSB0aGlzVmFsdWUpCiAgICAgICAgICAg
ICBKU1ZhbHVlIGJpZ0ludCA9IGJpZ0ludE9iamVjdC0+aW50ZXJuYWxWYWx1ZSgpOwogI2lmIFVT
RShCSUdJTlQzMikKICAgICAgICAgICAgIGlmIChiaWdJbnQuaXNCaWdJbnQzMigpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgYmlnSW50LmJpZ0ludDMy
QXNJbnQzMigpKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpT
QmlnSW50OjpjcmVhdGVGcm9tKGdsb2JhbE9iamVjdCwgYmlnSW50LmJpZ0ludDMyQXNJbnQzMigp
KSk7CiAjZW5kaWYKICAgICAgICAgICAgIHJldHVybiBiaWdJbnQuYXNIZWFwQmlnSW50KCk7CiAg
ICAgICAgIH0KICAgICB9CiAKKyAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiJ3RoaXMnIHZhbHVlIG11c3QgYmUgYSBCaWdJbnQgb3IgQmlnSW50T2JqZWN0Il9zKTsKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtMTA0LDkgKzEwOCw4IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYmlnSW50UHJvdG9GdW5jVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEpTQmlnSW50KiB2YWx1ZSA9IHRv
VGhpc0JpZ0ludFZhbHVlKHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIXZh
bHVlKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3Bl
LCAiJ3RoaXMnIHZhbHVlIG11c3QgYmUgYSBCaWdJbnQgb3IgQmlnSW50T2JqZWN0Il9zKTsKKyAg
ICBKU0JpZ0ludCogdmFsdWUgPSB0b1RoaXNCaWdJbnRWYWx1ZShnbG9iYWxPYmplY3QsIGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAKICAgICBBU1NFUlQodmFsdWUpOwogCkBAIC0xMjksOSArMTMyLDggQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBiaWdJbnRQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhKU0dsb2JhbE9i
amVjdCogZ2xvYmEKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNCaWdJbnQqIHZhbHVlID0g
dG9UaGlzQmlnSW50VmFsdWUodm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICgh
dmFsdWUpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICIndGhpcycgdmFsdWUgbXVzdCBiZSBhIEJpZ0ludCBvciBCaWdJbnRPYmplY3QiX3MpOwor
ICAgIEpTQmlnSW50KiB2YWx1ZSA9IHRvVGhpc0JpZ0ludFZhbHVlKGdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKIAogICAgIGF1dG8qIG51bWJlckZvcm1hdCA9IEludGxOdW1iZXJGb3JtYXQ6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LT5udW1iZXJGb3JtYXRTdHJ1Y3R1cmUoKSk7CiAgICAgbnVtYmVyRm9y
bWF0LT5pbml0aWFsaXplTnVtYmVyRm9ybWF0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1
bWVudCgwKSwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSk7CkBAIC0xNDQsOSArMTQ2LDggQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBiaWdJbnRQcm90b0Z1bmNWYWx1ZU9mKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNCaWdJbnQq
IHZhbHVlID0gdG9UaGlzQmlnSW50VmFsdWUodm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwot
ICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsICIndGhpcycgdmFsdWUgbXVzdCBiZSBhIEJpZ0ludCBvciBCaWdJbnRPYmpl
Y3QiX3MpOworICAgIEpTQmlnSW50KiB2YWx1ZSA9IHRvVGhpc0JpZ0ludFZhbHVlKGdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKIAogICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2bSwgdmFsdWUt
PnN0cnVjdHVyZUlEKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCmluZGV4IDYwMWQw
MTlkZjkzZjhmMmY4Y2M2YzFmNTkxYTk0MTU0OGRjMDdmY2IuLmY5ZjYyNGI0NmU5NzUwYmY0OTc4
MTFmMzkxYWU0YTc2MjQ0N2Q1MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlZFR5cGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWRUeXBlcy5jcHAKQEAgLTEyNzksNyArMTI3OSw4IEBAIGNsYXNzIENhY2hlZEJpZ0lu
dCA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxKU0JpZ0ludD4gewogCiAgICAgSlNCaWdJ
bnQqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgSlNCaWdJ
bnQqIGJpZ0ludCA9IEpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKGRlY29kZXIu
dm0oKSwgbV9sZW5ndGgpOworICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gSlNCaWdJbnQ6OnRy
eUNyZWF0ZVdpdGhMZW5ndGgoZGVjb2Rlci52bSgpLCBtX2xlbmd0aCk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGJpZ0ludCk7CiAgICAgICAgIGJpZ0ludC0+c2V0U2lnbihtX3NpZ24pOwogICAg
ICAgICBpZiAobV9sZW5ndGgpCiAgICAgICAgICAgICBtZW1jcHkoYmlnSW50LT5kYXRhU3RvcmFn
ZSgpLCB0aGlzLT5idWZmZXIoKSwgc2l6ZW9mKEpTQmlnSW50OjpEaWdpdCkgKiBtX2xlbmd0aCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cAppbmRleCBhMzljMTM3NTc1NmZjZDU5ZjI2NDViMDA4MTRhNjBhODY4ZmIxOWFjLi4zMDM0NGMx
MjBlMmRiMzczYzNlMDRkNGI2Zjg2OGI3NTY4MDIwOGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKQEAgLTUzMCw3ICs1MzAsOCBA
QCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmVnYXRlKQogCiAjaWYgVVNFKEJJR0lOVDMyKQog
ICAgIGlmIChwcmltVmFsdWUuaXNCaWdJbnQzMigpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0
ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSk7
CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2Jq
ZWN0LCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpOworICAgICAgICBDSEVDS19FWENFUFRJ
T04oKTsKICAgICAgICAgUkVUVVJOX1dJVEhfUFJPRklMSU5HKHJlc3VsdCwgewogICAgICAgICAg
ICAgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKG1ldGFkYXRhLCByZXN1bHQsIG9w
ZXJhbmQpOwogICAgICAgICB9KTsKQEAgLTUzOCw3ICs1MzksOCBAQCBTTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfbmVnYXRlKQogI2VuZGlmCiAKICAgICBpZiAocHJpbVZhbHVlLmlzSGVhcEJpZ0lu
dCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXModm0s
IHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNC
aWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkp
OworICAgICAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICAgICAgUkVUVVJOX1dJVEhfUFJPRklM
SU5HKHJlc3VsdCwgewogICAgICAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0
aE9wKG1ldGFkYXRhLCByZXN1bHQsIG9wZXJhbmQpOwogICAgICAgICB9KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3Rv
dHlwZS5jcHAKaW5kZXggYWFiYWU3YmU5YmYxM2MzNTY2MWIyMjk0NWIxYjNiZDQ5MmVkNGU2ZC4u
NmRhYTg2YTkwYTE4YzM0YWI5MDQzMDUxOWVkMmFiMmM4MTY0MWJjMSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3Rv
dHlwZS5jcHAKQEAgLTk2LDggKzk2LDkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgSW50bE51bWJlckZvcm1hdEZ1bmNGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGcKIAogI2lm
IFVTRShCSUdJTlQzMikKICAgICBpZiAoYmlnSW50T3JOdW1iZXIuaXNCaWdJbnQzMigpKSB7Ci0g
ICAgICAgIEpTQmlnSW50KiB2YWx1ZSA9IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCBiaWdJbnRP
ck51bWJlci5iaWdJbnQzMkFzSW50MzIoKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUobnVtYmVyRm9ybWF0LT5mb3JtYXQoZ2xvYmFsT2JqZWN0LCB2YWx1ZSkpOworICAgICAgICBK
U0JpZ0ludCogdmFsdWUgPSBKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIGJpZ0lu
dE9yTnVtYmVyLmJpZ0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVl
OjplbmNvZGUobnVtYmVyRm9ybWF0LT5mb3JtYXQoZ2xvYmFsT2JqZWN0LCB2YWx1ZSkpKTsKICAg
ICB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCaWdJbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3Bw
CmluZGV4IDkwNDMyOWE3MjEwY2ZlZWU3YjVlYWI3NmMxNGVjMDA3ZGNhZjEyYjkuLjFhNzcyNDY4
ZTJkYTI3N2I1M2RkOWE1NzYwNTNmZjAwOTNhN2MyMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0JpZ0ludC5jcHAKQEAgLTgyLDQyICs4Miw2MSBAQCBTdHJ1Y3R1cmUqIEpT
QmlnSW50OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbAogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKEhlYXBCaWdJbnRUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlWmVybyhWTSYgdm0pCitpbmxp
bmUgSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVaZXJvKEpTR2xvYmFsT2JqZWN0KiBudWxsT3JH
bG9iYWxPYmplY3RGb3JPT00sIFZNJiB2bSkKIHsKLSAgICBKU0JpZ0ludCogemVyb0JpZ0ludCA9
IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIDApOwotICAgIHJldHVybiB6ZXJvQmlnSW50
OworICAgIHJldHVybiBjcmVhdGVXaXRoTGVuZ3RoKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwg
dm0sIDApOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgbGVuZ3RoKQorSlNCaWdJbnQqIEpT
QmlnSW50OjpjcmVhdGVaZXJvKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gY3JlYXRlWmVybyhnbG9iYWxPYmplY3QsIGdsb2Jh
bE9iamVjdC0+dm0oKSk7Cit9CisKK0pTQmlnSW50KiBKU0JpZ0ludDo6dHJ5Q3JlYXRlWmVybyhW
TSYgdm0pCit7CisgICAgcmV0dXJuIGNyZWF0ZVplcm8obnVsbHB0ciwgdm0pOworfQogCitpbmxp
bmUgSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiBu
dWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIFZNJiB2bSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoVU5MSUtFTFko
bGVuZ3RoID4gbWF4TGVuZ3RoKSkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgIkJpZ0ludCBnZW5lcmF0ZWQgZnJvbSB0aGlzIG9wZXJhdGlvbiBp
cyB0b28gYmlnIl9zKTsKKyAgICAgICAgaWYgKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSkKKyAg
ICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihudWxsT3JHbG9iYWxPYmplY3RGb3JPT00s
IHNjb3BlLCAiQmlnSW50IGdlbmVyYXRlZCBmcm9tIHRoaXMgb3BlcmF0aW9uIGlzIHRvbyBiaWci
X3MpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBzY29wZS5yZWxlYXNl
KCk7Ci0KLSAgICByZXR1cm4gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgbGVuZ3RoKTsK
LX0KLQotSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKFZNJiB2
bSwgdW5zaWduZWQgbGVuZ3RoKQotewogICAgIEFTU0VSVChsZW5ndGggPD0gbWF4TGVuZ3RoKTsK
LSAgICB2b2lkKiBkYXRhID0gR2lnYWNhZ2U6Om1hbGxvYyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBs
ZW5ndGggKiBzaXplb2YoRGlnaXQpKTsKKyAgICB2b2lkKiBkYXRhID0gR2lnYWNhZ2U6OnRyeU1h
bGxvYyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBsZW5ndGggKiBzaXplb2YoRGlnaXQpKTsKKyAgICBp
ZiAoVU5MSUtFTFkoIWRhdGEpKSB7CisgICAgICAgIGlmIChudWxsT3JHbG9iYWxPYmplY3RGb3JP
T00pCisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IobnVsbE9yR2xvYmFsT2JqZWN0
Rm9yT09NLCBzY29wZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KICAgICBKU0Jp
Z0ludCogYmlnSW50ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNCaWdJbnQ+KHZtLmhl
YXApKSBKU0JpZ0ludCh2bSwgdm0uYmlnSW50U3RydWN0dXJlLmdldCgpLCByZWludGVycHJldF9j
YXN0PERpZ2l0Kj4oZGF0YSksIGxlbmd0aCk7CiAgICAgYmlnSW50LT5maW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgcmV0dXJuIGJpZ0ludDsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVG
cm9tKFZNJiB2bSwgaW50MzJfdCB2YWx1ZSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6dHJ5Q3JlYXRl
V2l0aExlbmd0aChWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gY3JlYXRl
V2l0aExlbmd0aChudWxscHRyLCB2bSwgbGVuZ3RoKTsKK30KKworSlNCaWdJbnQqIEpTQmlnSW50
OjpjcmVhdGVXaXRoTGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVk
IGxlbmd0aCkKK3sKKyAgICByZXR1cm4gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdC0+dm0oKSwgbGVuZ3RoKTsKK30KKworaW5saW5lIEpTQmlnSW50KiBKU0JpZ0lu
dDo6Y3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCogbnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBW
TSYgdm0sIGludDMyX3QgdmFsdWUpCiB7CiAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJu
IGNyZWF0ZVplcm8odm0pOwotICAgIAotICAgIEpTQmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRo
TGVuZ3RoVW5jaGVja2VkKHZtLCAxKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8obnVsbE9y
R2xvYmFsT2JqZWN0Rm9yT09NLCB2bSk7CisKKyAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRl
V2l0aExlbmd0aChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCAxKTsKKyAgICBpZiAoVU5M
SUtFTFkoIWJpZ0ludCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCiAgICAgaWYgKHZhbHVl
IDwgMCkgewogICAgICAgICBiaWdJbnQtPnNldERpZ2l0KDAsIHN0YXRpY19jYXN0PERpZ2l0Pigt
MSAqIHN0YXRpY19jYXN0PGludDY0X3Q+KHZhbHVlKSkpOwogICAgICAgICBiaWdJbnQtPnNldFNp
Z24odHJ1ZSk7CkBAIC0xMjcsMzIgKzE0Niw1MSBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0
ZUZyb20oVk0mIHZtLCBpbnQzMl90IHZhbHVlKQogICAgIHJldHVybiBiaWdJbnQ7CiB9CiAKLUpT
QmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShWTSYgdm0sIHVpbnQzMl90IHZhbHVlKQorSlNC
aWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGludDMyX3QgdmFsdWUpCiB7CisgICAgcmV0dXJuIGNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QtPnZtKCksIHZhbHVlKTsKK30KKworSlNCaWdJbnQqIEpTQmlnSW50Ojp0cnlD
cmVhdGVGcm9tKFZNJiB2bSwgaW50MzJfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlRnJv
bShudWxscHRyLCB2bSwgdmFsdWUpOworfQorCitKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZy
b20oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDMyX3QgdmFsdWUpCit7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBjcmVhdGVa
ZXJvKHZtKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjcmVhdGVaZXJvKGds
b2JhbE9iamVjdCkpOwogICAgIAotICAgIEpTQmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVu
Z3RoVW5jaGVja2VkKHZtLCAxKTsKKyAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRlV2l0aExl
bmd0aChnbG9iYWxPYmplY3QsIDEpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51
bGxwdHIpOwogICAgIGJpZ0ludC0+c2V0RGlnaXQoMCwgc3RhdGljX2Nhc3Q8RGlnaXQ+KHZhbHVl
KSk7CiAgICAgcmV0dXJuIGJpZ0ludDsKIH0KIAotaW5saW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6
Y3JlYXRlRnJvbUltcGwoVk0mIHZtLCB1aW50NjRfdCB2YWx1ZSwgYm9vbCBzaWduKQoraW5saW5l
IEpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbUltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgdWludDY0X3QgdmFsdWUsIGJvb2wgc2lnbikKIHsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8odm0pOworICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNyZWF0ZVplcm8oZ2xvYmFsT2JqZWN0KSk7
CiAKICAgICAvLyBUaGlzIHBhdGggaXMgbm90IGp1c3QgYW4gb3B0aW1pemF0aW9uOiBiZWNhdXNl
IHdlIGRvIG5vdCBjYWxsIHJpZ2h0VHJpbSBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24sCiAg
ICAgLy8gaXQgd291bGQgYmUgYSBidWcgdG8gY3JlYXRlIGEgQmlnSW50IHdpdGggbGVuZ3RoPTIg
aW4gdGhpcyBjYXNlLgogICAgIGlmIChzaXplb2YoRGlnaXQpID09IDggfHwgdmFsdWUgPD0gVUlO
VDMyX01BWCkgewotICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aFVu
Y2hlY2tlZCh2bSwgMSk7CisgICAgICAgIEpTQmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVu
Z3RoKGdsb2JhbE9iamVjdCwgMSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IG51bGxwdHIpOwogICAgICAgICBiaWdJbnQtPnNldERpZ2l0KDAsIHN0YXRpY19jYXN0PERpZ2l0
Pih2YWx1ZSkpOwogICAgICAgICBiaWdJbnQtPnNldFNpZ24oc2lnbik7CiAgICAgICAgIHJldHVy
biBiaWdJbnQ7CiAgICAgfQogCiAgICAgQVNTRVJUKHNpemVvZihEaWdpdCkgPT0gNCk7Ci0gICAg
SlNCaWdJbnQqIGJpZ0ludCA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIDIpOworICAg
IEpTQmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgMik7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgRGlnaXQgbG93Qml0
cyAgPSBzdGF0aWNfY2FzdDxEaWdpdD4odmFsdWUgJiAweGZmZmZmZmZmKTsKICAgICBEaWdpdCBo
aWdoQml0cyA9IHN0YXRpY19jYXN0PERpZ2l0PigodmFsdWUgPj4gMzIpICYgMHhmZmZmZmZmZik7
CiAKQEAgLTE2NSwxMiArMjAzLDEyIEBAIGlubGluZSBKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0
ZUZyb21JbXBsKFZNJiB2bSwgdWludDY0X3QgdmFsdWUsIGJvb2wgc2lnbikKICAgICByZXR1cm4g
YmlnSW50OwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oVk0mIHZtLCB1aW50
NjRfdCB2YWx1ZSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gY3JlYXRlRnJv
bUltcGwodm0sIHZhbHVlLCBmYWxzZSk7CisgICAgcmV0dXJuIGNyZWF0ZUZyb21JbXBsKGdsb2Jh
bE9iamVjdCwgdmFsdWUsIGZhbHNlKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVG
cm9tKFZNJiB2bSwgaW50NjRfdCB2YWx1ZSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJv
bShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQ2NF90IHZhbHVlKQogewogICAgIHVp
bnQ2NF90IHVuc2lnbmVkVmFsdWU7CiAgICAgYm9vbCBzaWduID0gZmFsc2U7CkBAIC0xNzksMjQg
KzIxNywzMSBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oVk0mIHZtLCBpbnQ2NF90
IHZhbHVlKQogICAgICAgICBzaWduID0gdHJ1ZTsKICAgICB9IGVsc2UKICAgICAgICAgdW5zaWdu
ZWRWYWx1ZSA9IHZhbHVlOwotICAgIHJldHVybiBjcmVhdGVGcm9tSW1wbCh2bSwgdW5zaWduZWRW
YWx1ZSwgc2lnbik7CisgICAgcmV0dXJuIGNyZWF0ZUZyb21JbXBsKGdsb2JhbE9iamVjdCwgdW5z
aWduZWRWYWx1ZSwgc2lnbik7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShW
TSYgdm0sIGJvb2wgdmFsdWUpCitKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgYm9vbCB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8odm0pOwotICAg
IAotICAgIEpTQmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCAx
KTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjcmVhdGVaZXJvKGdsb2JhbE9i
amVjdCkpOworCisgICAgSlNCaWdJbnQqIGJpZ0ludCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFs
T2JqZWN0LCAxKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAg
ICBiaWdJbnQtPnNldERpZ2l0KDAsIHN0YXRpY19jYXN0PERpZ2l0Pih2YWx1ZSkpOwogICAgIHJl
dHVybiBiaWdJbnQ7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShWTSYgdm0s
IGRvdWJsZSB2YWx1ZSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBkb3VibGUgdmFsdWUpCiB7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KwogICAgIEFTU0VSVChpc0ludGVnZXIodmFsdWUpKTsKICAgICBpZiAoIXZhbHVlKQotICAgICAg
ICByZXR1cm4gY3JlYXRlWmVybyh2bSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgY3JlYXRlWmVybyhnbG9iYWxPYmplY3QpKTsKIAogICAgIGJvb2wgc2lnbiA9IHZhbHVlIDwg
MDsgLy8gLTAgd2FzIGFscmVhZHkgaGFuZGxlZCBhYm92ZS4KICAgICB1aW50NjRfdCBkb3VibGVC
aXRzID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZSk7CkBAIC0yMDUsNyArMjUwLDggQEAg
SlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKFZNJiB2bSwgZG91YmxlIHZhbHVlKQogICAg
IEFTU0VSVChyYXdFeHBvbmVudCA+PSAweDNmZik7IC8vIFNpbmNlIHZhbHVlIGlzIGludGVnZXIs
IGV4cG9uZW50IHNob3VsZCBiZSA+PSAwICsgYmlhcyAoMHgzZmYpLgogICAgIGludDMyX3QgZXhw
b25lbnQgPSByYXdFeHBvbmVudCAtIDB4M2ZmOwogICAgIGludDMyX3QgZGlnaXRzID0gZXhwb25l
bnQgLyBkaWdpdEJpdHMgKyAxOwotICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVu
Z3RoVW5jaGVja2VkKHZtLCBkaWdpdHMpOworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVX
aXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgZGlnaXRzKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBudWxscHRyKTsKICAgICBBU1NFUlQocmVzdWx0KTsKICAgICByZXN1bHQtPmluaXRp
YWxpemUoSW5pdGlhbGl6YXRpb25UeXBlOjpXaXRoWmVybyk7CiAgICAgcmVzdWx0LT5zZXRTaWdu
KHNpZ24pOwpAQCAtMjU5LDcgKzMwNSw3IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJv
bShWTSYgdm0sIGRvdWJsZSB2YWx1ZSkKICAgICAgICAgICAgIGRpZ2l0ID0gMDsKICAgICAgICAg
cmVzdWx0LT5zZXREaWdpdChkaWdpdEluZGV4LCBkaWdpdCk7CiAgICAgfQotICAgIHJldHVybiBy
ZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1
bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0KIAogSlNWYWx1ZSBKU0JpZ0ludDo6dG9Q
cmltaXRpdmUoSlNHbG9iYWxPYmplY3QqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdApA
QCAtMjc0LDExICszMjAsMTEgQEAgSlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJbnQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgU3RyaW5nVmlldyBzLCBFcnJvclBhcnMKICAgICByZXR1cm4g
cGFyc2VJbnQoZ2xvYmFsT2JqZWN0LCBzLmNoYXJhY3RlcnMxNigpLCBzLmxlbmd0aCgpLCBwYXJz
ZXJNb2RlKTsKIH0KIAotSlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgVk0mIHZtLCBTdHJpbmdWaWV3IHMsIHVpbnQ4X3QgcmFkaXgsIEVycm9y
UGFyc2VNb2RlIHBhcnNlck1vZGUsIFBhcnNlSW50U2lnbiBzaWduKQorSlNWYWx1ZSBKU0JpZ0lu
dDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqIG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgVk0m
IHZtLCBTdHJpbmdWaWV3IHMsIHVpbnQ4X3QgcmFkaXgsIEVycm9yUGFyc2VNb2RlIHBhcnNlck1v
ZGUsIFBhcnNlSW50U2lnbiBzaWduKQogewogICAgIGlmIChzLmlzOEJpdCgpKQotICAgICAgICBy
ZXR1cm4gcGFyc2VJbnQoZ2xvYmFsT2JqZWN0LCB2bSwgcy5jaGFyYWN0ZXJzOCgpLCBzLmxlbmd0
aCgpLCAwLCByYWRpeCwgcGFyc2VyTW9kZSwgc2lnbiwgUGFyc2VJbnRNb2RlOjpEaXNhbGxvd0Vt
cHR5U3RyaW5nKTsKLSAgICByZXR1cm4gcGFyc2VJbnQoZ2xvYmFsT2JqZWN0LCB2bSwgcy5jaGFy
YWN0ZXJzMTYoKSwgcy5sZW5ndGgoKSwgMCwgcmFkaXgsIHBhcnNlck1vZGUsIHNpZ24sIFBhcnNl
SW50TW9kZTo6RGlzYWxsb3dFbXB0eVN0cmluZyk7CisgICAgICAgIHJldHVybiBwYXJzZUludChu
dWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCBzLmNoYXJhY3RlcnM4KCksIHMubGVuZ3RoKCks
IDAsIHJhZGl4LCBwYXJzZXJNb2RlLCBzaWduLCBQYXJzZUludE1vZGU6OkRpc2FsbG93RW1wdHlT
dHJpbmcpOworICAgIHJldHVybiBwYXJzZUludChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZt
LCBzLmNoYXJhY3RlcnMxNigpLCBzLmxlbmd0aCgpLCAwLCByYWRpeCwgcGFyc2VyTW9kZSwgc2ln
biwgUGFyc2VJbnRNb2RlOjpEaXNhbGxvd0VtcHR5U3RyaW5nKTsKIH0KIAogSlNWYWx1ZSBKU0Jp
Z0ludDo6c3RyaW5nVG9CaWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RyaW5n
VmlldyBzKQpAQCAtMzE4LDcgKzM2NCw4IEBAIGNsYXNzIEhlYXBCaWdJbnRJbXBsIHsKICAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgc2lnbigpIHsgcmV0dXJuIG1fYmlnSW50LT5zaWduKCk7IH0KICAg
ICBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fYmlnSW50LT5sZW5n
dGgoKTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQ6OkRpZ2l0IGRpZ2l0KHVuc2lnbmVk
IGkpIHsgcmV0dXJuIG1fYmlnSW50LT5kaWdpdChpKTsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNC
aWdJbnQqIHRvSGVhcEJpZ0ludChWTSYpIHsgcmV0dXJuIG1fYmlnSW50OyB9CisgICAgQUxXQVlT
X0lOTElORSBKU0JpZ0ludCogdG9IZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiwgVk0mKSB7IHJl
dHVybiBtX2JpZ0ludDsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQqIHRvSGVhcEJpZ0lu
dChKU0dsb2JhbE9iamVjdCopIHsgcmV0dXJuIG1fYmlnSW50OyB9CiAKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIHN0cnVjdCBKU0JpZ0ludDo6SW1wbFJlc3VsdDsKQEAgLTM0Myw3ICszOTAsMTUgQEAg
Y2xhc3MgSW50MzJCaWdJbnRJbXBsIHsKICAgICAgICAgcmV0dXJuIG1fdmFsdWU7CiAgICAgfQog
Ci0gICAgQUxXQVlTX0lOTElORSBKU0JpZ0ludCogdG9IZWFwQmlnSW50KFZNJiB2bSkgeyByZXR1
cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIG1fdmFsdWUpOyB9CisgICAgQUxXQVlTX0lOTElO
RSBKU0JpZ0ludCogdG9IZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmpl
Y3RGb3JPT00sIFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRl
RnJvbShudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCBtX3ZhbHVlKTsKKyAgICB9CisKKyAg
ICBBTFdBWVNfSU5MSU5FIEpTQmlnSW50KiB0b0hlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShn
bG9iYWxPYmplY3QsIG1fdmFsdWUpOworICAgIH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgc3Ry
dWN0IEpTQmlnSW50OjpJbXBsUmVzdWx0OwpAQCAtNDAyLDEzICs0NTcsMTMgQEAgc3RhdGljIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZSB0cnlDb252ZXJ0VG9CaWdJbnQzMihKU0JpZ0ludDo6SW1wbFJl
c3VsdCBpbXBsUmVzdWwKICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoaW1wbFJlc3Vs
dC5wYXlsb2FkLmFzSGVhcEJpZ0ludCgpKTsKIH0KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgSlNC
aWdJbnQ6OkltcGxSZXN1bHQgemVyb0ltcGwoVk0mIHZtKQorc3RhdGljIEFMV0FZU19JTkxJTkUg
SlNCaWdJbnQ6OkltcGxSZXN1bHQgemVyb0ltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKIHsKICNpZiBVU0UoQklHSU5UMzIpCi0gICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBVTlVT
RURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4ganNCaWdJbnQzMigwKTsKICNlbHNl
Ci0gICAgcmV0dXJuIEpTQmlnSW50OjpjcmVhdGVaZXJvKHZtKTsKKyAgICByZXR1cm4gSlNCaWdJ
bnQ6OmNyZWF0ZVplcm8oZ2xvYmFsT2JqZWN0KTsKICNlbmRpZgogfQogCkBAIC00MzEsNyArNDg2
LDcgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmV4cG9uZW50aWF0ZUltcGwoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmkKIAogICAgIC8vIDIuIElmIGJhc2UgaXMgMG4g
YW5kIGV4cG9uZW50IGlzIDBuLCByZXR1cm4gMW4uCiAgICAgaWYgKGV4cG9uZW50LmlzWmVybygp
KQotICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIDEpOworICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTQmlnSW50OjpjcmVhdGVGcm9tKGdsb2JhbE9iamVj
dCwgMSkpOwogICAgIAogICAgIC8vIDMuIFJldHVybiBhIEJpZ0ludCByZXByZXNlbnRpbmcgdGhl
IG1hdGhlbWF0aWNhbCB2YWx1ZSBvZiBiYXNlIHJhaXNlZAogICAgIC8vICAgIHRvIHRoZSBwb3dl
ciBleHBvbmVudC4KQEAgLTQ0MSw3ICs0OTYsNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0Jp
Z0ludDo6ZXhwb25lbnRpYXRlSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaQog
ICAgIGlmIChiYXNlLmxlbmd0aCgpID09IDEgJiYgYmFzZS5kaWdpdCgwKSA9PSAxKSB7CiAgICAg
ICAgIC8vICgtMSkgKiogZXZlbl9udW1iZXIgPT0gMS4KICAgICAgICAgaWYgKGJhc2Uuc2lnbigp
ICYmICEoZXhwb25lbnQuZGlnaXQoMCkgJiAxKSkKLSAgICAgICAgICAgIHJldHVybiBKU0JpZ0lu
dDo6dW5hcnlNaW51c0ltcGwodm0sIGJhc2UpOworICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwoZ2xvYmFsT2JqZWN0LCBiYXNlKSk7
CiAKICAgICAgICAgLy8gKC0xKSAqKiBvZGRfbnVtYmVyID09IC0xOyAxICoqIGFueXRoaW5nID09
IDEuCiAgICAgICAgIHJldHVybiBiYXNlOwpAQCAtNDY4LDcgKzUyMyw3IEBAIEpTQmlnSW50OjpJ
bXBsUmVzdWx0IEpTQmlnSW50OjpleHBvbmVudGlhdGVJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEJpCiAgICAgaWYgKGJhc2UubGVuZ3RoKCkgPT0gMSAmJiBiYXNlLmRpZ2l0KDAp
ID09IDIpIHsKICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciAyXm4uCiAgICAgICAgIGludCBuZWVk
ZWREaWdpdHMgPSAxICsgKG4gLyBkaWdpdEJpdHMpOwotICAgICAgICBKU0JpZ0ludCogcmVzdWx0
ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCBuZWVkZWREaWdp
dHMpOworICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5n
dGgoZ2xvYmFsT2JqZWN0LCBuZWVkZWREaWdpdHMpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgICAgICByZXN1bHQtPmluaXRpYWxpemUoSW5pdGlh
bGl6YXRpb25UeXBlOjpXaXRoWmVybyk7CkBAIC00ODMsMTEgKzUzOCwxNCBAQCBKU0JpZ0ludDo6
SW1wbFJlc3VsdCBKU0JpZ0ludDo6ZXhwb25lbnRpYXRlSW1wbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBCaQogICAgIH0KIAogICAgIEpTQmlnSW50KiByZXN1bHQgPSBudWxscHRyOwot
ICAgIEpTQmlnSW50KiBydW5uaW5nU3F1YXJlID0gYmFzZS50b0hlYXBCaWdJbnQodm0pOworICAg
IEpTQmlnSW50KiBydW5uaW5nU3F1YXJlID0gYmFzZS50b0hlYXBCaWdJbnQoZ2xvYmFsT2JqZWN0
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIC8vIFRo
aXMgaW1wbGljaXRseSBzZXRzIHRoZSByZXN1bHQncyBzaWduIGNvcnJlY3RseS4KLSAgICBpZiAo
biAmIDEpCi0gICAgICAgIHJlc3VsdCA9IGJhc2UudG9IZWFwQmlnSW50KHZtKTsKKyAgICBpZiAo
biAmIDEpIHsKKyAgICAgICAgcmVzdWx0ID0gYmFzZS50b0hlYXBCaWdJbnQoZ2xvYmFsT2JqZWN0
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgfQog
CiAgICAgbiA+Pj0gMTsKICAgICBmb3IgKDsgbjsgbiA+Pj0gMSkgewpAQCAtNTQ4LDcgKzYwNiw3
IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjptdWx0aXBseUltcGwoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50CiAgICAgICAgIHJldHVybiB5OwogCiAgICAgdW5z
aWduZWQgcmVzdWx0TGVuZ3RoID0geC5sZW5ndGgoKSArIHkubGVuZ3RoKCk7Ci0gICAgSlNCaWdJ
bnQqIHJlc3VsdCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwg
cmVzdWx0TGVuZ3RoKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmNyZWF0ZVdp
dGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIHJlc3VsdC0+aW5pdGlhbGl6ZShJbml0aWFsaXph
dGlvblR5cGU6OldpdGhaZXJvKTsKIApAQCAtNTU2LDcgKzYxNCw3IEBAIEpTQmlnSW50OjpJbXBs
UmVzdWx0IEpTQmlnSW50OjptdWx0aXBseUltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQmlnSW50CiAgICAgICAgIG11bHRpcGx5QWNjdW11bGF0ZSh5LCB4LmRpZ2l0KGkpLCByZXN1
bHQsIGkpOwogCiAgICAgcmVzdWx0LT5zZXRTaWduKHguc2lnbigpICE9IHkuc2lnbigpKTsKLSAg
ICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0odm0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgcmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIEpTVmFsdWUgSlNC
aWdJbnQ6Om11bHRpcGx5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4
LCBKU0JpZ0ludCogeSkKQEAgLTU5MCwyNCArNjQ4LDMwIEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0
IEpTQmlnSW50OjpkaXZpZGVJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0lu
dEltCiAgICAgLy8gMy4gUmV0dXJuIGEgQmlnSW50IHJlcHJlc2VudGluZyBxdW90aWVudCByb3Vu
ZGVkIHRvd2FyZHMgMCB0byB0aGUgbmV4dAogICAgIC8vICAgIGludGVncmFsIHZhbHVlLgogICAg
IGlmIChhYnNvbHV0ZUNvbXBhcmUoeCwgeSkgPT0gQ29tcGFyaXNvblJlc3VsdDo6TGVzc1RoYW4p
Ci0gICAgICAgIHJldHVybiB6ZXJvSW1wbCh2bSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgemVyb0ltcGwoZ2xvYmFsT2JqZWN0KSk7CiAKICAgICBKU0JpZ0ludCogcXVvdGll
bnQgPSBudWxscHRyOwogICAgIGJvb2wgcmVzdWx0U2lnbiA9IHguc2lnbigpICE9IHkuc2lnbigp
OwogICAgIGlmICh5Lmxlbmd0aCgpID09IDEpIHsKICAgICAgICAgRGlnaXQgZGl2aXNvciA9IHku
ZGlnaXQoMCk7Ci0gICAgICAgIGlmIChkaXZpc29yID09IDEpCi0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0U2lnbiA9PSB4LnNpZ24oKSA/IEpTQmlnSW50OjpJbXBsUmVzdWx0IHsgeCB9IDogSlNC
aWdJbnQ6OnVuYXJ5TWludXNJbXBsKHZtLCB4KTsKKyAgICAgICAgaWYgKGRpdmlzb3IgPT0gMSkg
eworICAgICAgICAgICAgaWYgKHJlc3VsdFNpZ24gPT0geC5zaWduKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEpTQmlnSW50OjpJbXBsUmVzdWx0IHsgeCB9OworICAgICAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwoZ2xvYmFsT2JqZWN0
LCB4KSk7CisgICAgICAgIH0KIAogICAgICAgICBEaWdpdCByZW1haW5kZXI7Ci0gICAgICAgIGFi
c29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcih2bSwgeCwgZGl2aXNvciwgJnF1b3RpZW50LCByZW1h
aW5kZXIpOworICAgICAgICBhYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3IoZ2xvYmFsT2JqZWN0
LCB2bSwgeCwgZGl2aXNvciwgJnF1b3RpZW50LCByZW1haW5kZXIpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICB9IGVsc2UgewotICAgICAgICBhYnNv
bHV0ZURpdldpdGhCaWdJbnREaXZpc29yKGdsb2JhbE9iamVjdCwgeCwgeS50b0hlYXBCaWdJbnQo
dm0pLCAmcXVvdGllbnQsIG51bGxwdHIpOworICAgICAgICBKU0JpZ0ludCogeUJpZ0ludCA9IHku
dG9IZWFwQmlnSW50KGdsb2JhbE9iamVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIG51bGxwdHIpOworICAgICAgICBhYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKGds
b2JhbE9iamVjdCwgeCwgeUJpZ0ludCwgJnF1b3RpZW50LCBudWxscHRyKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgfQogCiAgICAgcXVvdGllbnQt
PnNldFNpZ24ocmVzdWx0U2lnbik7Ci0gICAgcmV0dXJuIHF1b3RpZW50LT5yaWdodFRyaW0odm0p
OworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcXVvdGllbnQtPnJpZ2h0VHJpbShnbG9i
YWxPYmplY3QpKTsKIH0KIAogSlNWYWx1ZSBKU0JpZ0ludDo6ZGl2aWRlKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKQEAgLTYyNiwxMSArNjkw
LDE2IEBAIEpTVmFsdWUgSlNCaWdJbnQ6OmRpdmlkZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KQogI2VuZGlmCiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBCaWdJbnRJbXBsPgotSlNCaWdJbnQqIEpTQmlnSW50Ojpjb3B5KFZNJiB2bSwgQmlnSW50SW1w
bCB4KQorSlNCaWdJbnQqIEpTQmlnSW50Ojpjb3B5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEJpZ0ludEltcGwgeCkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgQVNTRVJUKCF4
LmlzWmVybygpKTsKIAotICAgIEpTQmlnSW50KiByZXN1bHQgPSBKU0JpZ0ludDo6Y3JlYXRlV2l0
aExlbmd0aFVuY2hlY2tlZCh2bSwgeC5sZW5ndGgoKSk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9
IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCB4Lmxlbmd0aCgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByZXN1bHQtPmxlbmd0aCgpOyArK2kpCiAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwg
eC5kaWdpdChpKSk7CiAgICAgcmVzdWx0LT5zZXRTaWduKHguc2lnbigpKTsKQEAgLTYzOCwxOSAr
NzA3LDI0IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6Y29weShWTSYgdm0sIEJpZ0ludEltcGwgeCkK
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci1KU0JpZ0ludDo6SW1wbFJlc3Vs
dCBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwoVk0mIHZtLCBCaWdJbnRJbXBsIHgpCitKU0JpZ0lu
dDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQmlnSW50SW1wbCB4KQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBp
ZiAoeC5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuIHplcm9JbXBsKHZtKTsKKyAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB6ZXJvSW1wbChnbG9iYWxPYmplY3QpKTsKKworICAgIEpT
QmlnSW50KiByZXN1bHQgPSBjb3B5KGdsb2JhbE9iamVjdCwgeCk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gY29weSh2
bSwgeCk7CiAgICAgcmVzdWx0LT5zZXRTaWduKCF4LnNpZ24oKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotSlNWYWx1ZSBKU0JpZ0ludDo6dW5hcnlNaW51cyhWTSYgdm0sIEpTQmlnSW50KiB4
KQorSlNWYWx1ZSBKU0JpZ0ludDo6dW5hcnlNaW51cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0JpZ0ludCogeCkKIHsKLSAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIodW5h
cnlNaW51c0ltcGwodm0sIEhlYXBCaWdJbnRJbXBsIHsgeCB9KSk7CisgICAgcmV0dXJuIHRyeUNv
bnZlcnRUb0JpZ0ludDMyKHVuYXJ5TWludXNJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludElt
cGwgeyB4IH0pKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFt
ZSBCaWdJbnRJbXBsMj4KQEAgLTY3NCwyMiArNzQ4LDI3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0
IEpTQmlnSW50OjpyZW1haW5kZXJJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJp
Z0luCiAgICAgaWYgKHkubGVuZ3RoKCkgPT0gMSkgewogICAgICAgICBEaWdpdCBkaXZpc29yID0g
eS5kaWdpdCgwKTsKICAgICAgICAgaWYgKGRpdmlzb3IgPT0gMSkKLSAgICAgICAgICAgIHJldHVy
biB6ZXJvSW1wbCh2bSk7CisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHpl
cm9JbXBsKGdsb2JhbE9iamVjdCkpOwogCiAgICAgICAgIERpZ2l0IHJlbWFpbmRlckRpZ2l0Owot
ICAgICAgICBhYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3Iodm0sIHgsIGRpdmlzb3IsIG51bGxw
dHIsIHJlbWFpbmRlckRpZ2l0KTsKKyAgICAgICAgYWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29y
KGdsb2JhbE9iamVjdCwgdm0sIHgsIGRpdmlzb3IsIG51bGxwdHIsIHJlbWFpbmRlckRpZ2l0KTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisKICAgICAgICAg
aWYgKCFyZW1haW5kZXJEaWdpdCkKLSAgICAgICAgICAgIHJldHVybiB6ZXJvSW1wbCh2bSk7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHplcm9JbXBsKGdsb2JhbE9iamVj
dCkpOwogCi0gICAgICAgIHJlbWFpbmRlciA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0s
IDEpOworICAgICAgICByZW1haW5kZXIgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwg
MSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAg
ICByZW1haW5kZXItPnNldERpZ2l0KDAsIHJlbWFpbmRlckRpZ2l0KTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBhYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKGdsb2JhbE9iamVjdCwgeCwgeS50
b0hlYXBCaWdJbnQodm0pLCBudWxscHRyLCAmcmVtYWluZGVyKTsKKyAgICAgICAgSlNCaWdJbnQq
IHlCaWdJbnQgPSB5LnRvSGVhcEJpZ0ludChnbG9iYWxPYmplY3QpOworICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKyAgICAgICAgYWJzb2x1dGVEaXZXaXRoQmln
SW50RGl2aXNvcihnbG9iYWxPYmplY3QsIHgsIHlCaWdJbnQsIG51bGxwdHIsICZyZW1haW5kZXIp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICB9CiAK
ICAgICByZW1haW5kZXItPnNldFNpZ24oeC5zaWduKCkpOwotICAgIHJldHVybiByZW1haW5kZXIt
PnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZW1haW5kZXIt
PnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0KIEpTVmFsdWUgSlNCaWdJbnQ6OnJlbWFpbmRl
cihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkp
CiB7CkBAIC03MDksOSArNzg4LDEzIEBAIEpTVmFsdWUgSlNCaWdJbnQ6OnJlbWFpbmRlcihKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5CiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojpp
bmNJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCkKIHsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKCF4LnNpZ24oKSkKLSAgICAgICAgcmV0dXJuIGFi
c29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgeCwgU2lnbk9wdGlvbjo6VW5zaWduZWQpOworICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVj
dCwgeCwgU2lnbk9wdGlvbjo6VW5zaWduZWQpKTsKICAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJz
b2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB4LCB4Lmxlbmd0aCgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBpZiAocmVzdWx0LT5pc1plcm8oKSkKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICByZXN1bHQtPnNldFNpZ24odHJ1ZSk7CkBAIC03NDYs
NyArODI5LDYgQEAgSlNWYWx1ZSBKU0JpZ0ludDo6ZGVjKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQmlnSW50KiB4KQogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBl
bmFtZSBCaWdJbnRJbXBsMj4KIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjphZGRJbXBs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwy
IHkpCiB7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGJvb2wgeFNpZ24g
PSB4LnNpZ24oKTsKIAogICAgIC8vIHggKyB5ID09IHggKyB5CkBAIC03NTgsOSArODQwLDkgQEAg
SlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFkZEltcGwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQmlnSW50SW1wbDEKICAgICAvLyAteCArIHkgPT0geSAtIHggPT0gLSh4IC0g
eSkKICAgICBDb21wYXJpc29uUmVzdWx0IGNvbXBhcmlzb25SZXN1bHQgPSBhYnNvbHV0ZUNvbXBh
cmUoeCwgeSk7CiAgICAgaWYgKGNvbXBhcmlzb25SZXN1bHQgPT0gQ29tcGFyaXNvblJlc3VsdDo6
R3JlYXRlclRoYW4gfHwgY29tcGFyaXNvblJlc3VsdCA9PSBDb21wYXJpc29uUmVzdWx0OjpFcXVh
bCkKLSAgICAgICAgcmV0dXJuIGFic29sdXRlU3ViKHZtLCB4LCB5LCB4U2lnbik7CisgICAgICAg
IHJldHVybiBhYnNvbHV0ZVN1YihnbG9iYWxPYmplY3QsIHgsIHksIHhTaWduKTsKIAotICAgIHJl
dHVybiBhYnNvbHV0ZVN1Yih2bSwgeSwgeCwgIXhTaWduKTsKKyAgICByZXR1cm4gYWJzb2x1dGVT
dWIoZ2xvYmFsT2JqZWN0LCB5LCB4LCAheFNpZ24pOwogfQogSlNWYWx1ZSBKU0JpZ0ludDo6YWRk
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkK
IHsKQEAgLTc4MCw3ICs4NjIsNiBAQCBKU1ZhbHVlIEpTQmlnSW50OjphZGQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSkKIHRlbXBsYXRlIDx0eXBl
bmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CiBKU0JpZ0ludDo6SW1wbFJl
c3VsdCBKU0JpZ0ludDo6c3ViSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJ
bnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBib29sIHhTaWduID0geC5zaWduKCk7CiAgICAgaWYgKHhTaWduICE9IHkuc2ln
bigpKSB7CiAgICAgICAgIC8vIHggLSAoLXkpID09IHggKyB5CkBAIC03OTEsOSArODcyLDkgQEAg
SlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnN1YkltcGwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQmlnSW50SW1wbDEKICAgICAvLyAoLXgpIC0gKC15KSA9PSB5IC0geCA9PSAt
KHggLSB5KQogICAgIENvbXBhcmlzb25SZXN1bHQgY29tcGFyaXNvblJlc3VsdCA9IGFic29sdXRl
Q29tcGFyZSh4LCB5KTsKICAgICBpZiAoY29tcGFyaXNvblJlc3VsdCA9PSBDb21wYXJpc29uUmVz
dWx0OjpHcmVhdGVyVGhhbiB8fCBjb21wYXJpc29uUmVzdWx0ID09IENvbXBhcmlzb25SZXN1bHQ6
OkVxdWFsKQotICAgICAgICByZXR1cm4gYWJzb2x1dGVTdWIodm0sIHgsIHksIHhTaWduKTsKKyAg
ICAgICAgcmV0dXJuIGFic29sdXRlU3ViKGdsb2JhbE9iamVjdCwgeCwgeSwgeFNpZ24pOwogCi0g
ICAgcmV0dXJuIGFic29sdXRlU3ViKHZtLCB5LCB4LCAheFNpZ24pOworICAgIHJldHVybiBhYnNv
bHV0ZVN1YihnbG9iYWxPYmplY3QsIHksIHgsICF4U2lnbik7CiB9CiAKIEpTVmFsdWUgSlNCaWdJ
bnQ6OnN1YihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJ
bnQqIHkpCkBAIC04MTcsMTAgKzg5OCw4IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50
OjpiaXR3aXNlQW5kSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJCiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAotICAgIGlmICgheC5zaWduKCkgJiYgIXkuc2lnbigpKSB7Ci0gICAg
ICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQW5kKHZtLCB4LCB5
KTsKLSAgICB9CisgICAgaWYgKCF4LnNpZ24oKSAmJiAheS5zaWduKCkpCisgICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVBbmQoZ2xvYmFsT2JqZWN0LCB4LCB5KSk7CiAg
ICAgCiAgICAgaWYgKHguc2lnbigpICYmIHkuc2lnbigpKSB7CiAgICAgICAgIGludCByZXN1bHRM
ZW5ndGggPSBzdGQ6Om1heCh4Lmxlbmd0aCgpLCB5Lmxlbmd0aCgpKSArIDE7CkBAIC04MzEsOSAr
OTEwLDkgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VBbmRJbXBsKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0kKIAogICAgICAgICBKU0JpZ0ludCogeTEg
PSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHksIHkubGVuZ3RoKCkpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICAgICAgcmVzdWx0ID0gYWJz
b2x1dGVPcih2bSwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgSGVhcEJpZ0ludEltcGwgeyB5
MSB9KTsKLSAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gYWJzb2x1dGVB
ZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9u
OjpTaWduZWQpOworICAgICAgICByZXN1bHQgPSBhYnNvbHV0ZU9yKGdsb2JhbE9iamVjdCwgSGVh
cEJpZ0ludEltcGwgeyByZXN1bHQgfSwgSGVhcEJpZ0ludEltcGwgeyB5MSB9KTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1w
bCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpKTsKICAgICB9CiAKICAgICBBU1NFUlQo
eC5zaWduKCkgIT0geS5zaWduKCkpOwpAQCAtODQzLDcgKzkyMiw3IEBAIEpTQmlnSW50OjpJbXBs
UmVzdWx0IEpTQmlnSW50OjpiaXR3aXNlQW5kSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBCaWdJCiAgICAgICAgIEFTU0VSVCh5LnNpZ24oKSk7IAogICAgICAgICBKU0JpZ0ludCog
eTEgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHksIHkubGVuZ3RoKCkpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICAgICAgcmV0dXJuIGFi
c29sdXRlQW5kTm90KHZtLCB4LCBIZWFwQmlnSW50SW1wbCB7IHkxIH0pOworICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIGFic29sdXRlQW5kTm90KGdsb2JhbE9iamVjdCwgeCwgSGVh
cEJpZ0ludEltcGwgeyB5MSB9KSk7CiAgICAgfTsKICAgICBpZiAoeC5zaWduKCkpCiAgICAgICAg
IHJldHVybiBjb21wdXRlUmVzdWx0KHksIHgpOwpAQCAtODczLDEwICs5NTIsOCBAQCBKU0JpZ0lu
dDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6Yml0d2lzZU9ySW1wbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBCaWdJbgogCiAgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgo
eC5sZW5ndGgoKSwgeS5sZW5ndGgoKSk7CiAKLSAgICBpZiAoIXguc2lnbigpICYmICF5LnNpZ24o
KSkgewotICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBhYnNvbHV0ZU9y
KHZtLCB4LCB5KTsKLSAgICB9CisgICAgaWYgKCF4LnNpZ24oKSAmJiAheS5zaWduKCkpCisgICAg
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVPcihnbG9iYWxPYmplY3QsIHgs
IHkpKTsKICAgICAKICAgICBpZiAoeC5zaWduKCkgJiYgeS5zaWduKCkpIHsKICAgICAgICAgLy8g
KC14KSB8ICgteSkgPT0gfih4LTEpIHwgfih5LTEpID09IH4oKHgtMSkgJiAoeS0xKSkKQEAgLTg4
NSwxMSArOTYyLDkgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VPcklt
cGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW4KICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgIEpTQmlnSW50KiB5MSA9IGFic29s
dXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeSwgeS5sZW5ndGgoKSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotICAgICAgICByZXN1bHQgPSBhYnNvbHV0ZUFu
ZCh2bSwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgSGVhcEJpZ0ludEltcGwgeyB5MSB9KTsK
KyAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVBbmQoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1w
bCB7IHJlc3VsdCB9LCBIZWFwQmlnSW50SW1wbCB7IHkxIH0pOwogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLQotICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0g
ICAgICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBs
IHsgcmVzdWx0IH0sIFNpZ25PcHRpb246OlNpZ25lZCk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7
IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpKTsKICAgICB9CiAgICAgCiAgICAgQVNTRVJU
KHguc2lnbigpICE9IHkuc2lnbigpKTsKQEAgLTkwMSwxMCArOTc2LDkgQEAgSlNCaWdJbnQ6Oklt
cGxSZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VPckltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQmlnSW4KIAogICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUo
Z2xvYmFsT2JqZWN0LCB5LCByZXN1bHRMZW5ndGgpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVBbmROb3Qodm0s
IEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIHgpOwotCi0gICAgICAgIHNjb3BlLnJlbGVhc2Uo
KTsKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0lu
dEltcGwgeyByZXN1bHQgfSwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKKyAgICAgICAgcmVzdWx0ID0g
YWJzb2x1dGVBbmROb3QoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCB4
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBI
ZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpKTsKICAgICB9Owog
CiAgICAgaWYgKHguc2lnbigpKQpAQCAtOTMzLDEwICsxMDA3LDggQEAgSlNCaWdJbnQ6OkltcGxS
ZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VYb3JJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEJpZ0kKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCF4LnNpZ24oKSAmJiAheS5z
aWduKCkpIHsKLSAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gYWJzb2x1
dGVYb3Iodm0sIHgsIHkpOwotICAgIH0KKyAgICBpZiAoIXguc2lnbigpICYmICF5LnNpZ24oKSkK
KyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBhYnNvbHV0ZVhvcihnbG9iYWxPYmpl
Y3QsIHgsIHkpKTsKICAgICAKICAgICBpZiAoeC5zaWduKCkgJiYgeS5zaWduKCkpIHsKICAgICAg
ICAgaW50IHJlc3VsdExlbmd0aCA9IHN0ZDo6bWF4KHgubGVuZ3RoKCksIHkubGVuZ3RoKCkpOwpA
QCAtOTQ2LDkgKzEwMTgsNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6Yml0d2lz
ZVhvckltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSQogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgSlNCaWdJbnQqIHkxID0g
YWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCB5Lmxlbmd0aCgpKTsKICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0KLSAgICAgICAgc2NvcGUucmVsZWFz
ZSgpOwotICAgICAgICByZXR1cm4gYWJzb2x1dGVYb3Iodm0sIEhlYXBCaWdJbnRJbXBsIHsgcmVz
dWx0IH0sIEhlYXBCaWdJbnRJbXBsIHsgeTEgfSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgYWJzb2x1dGVYb3IoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3Vs
dCB9LCBIZWFwQmlnSW50SW1wbCB7IHkxIH0pKTsKICAgICB9CiAgICAgQVNTRVJUKHguc2lnbigp
ICE9IHkuc2lnbigpKTsKICAgICBpbnQgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoeC5sZW5ndGgo
KSwgeS5sZW5ndGgoKSkgKyAxOwpAQCAtOTYwLDkgKzEwMzAsOSBAQCBKU0JpZ0ludDo6SW1wbFJl
c3VsdCBKU0JpZ0ludDo6Yml0d2lzZVhvckltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQmlnSQogICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFs
T2JqZWN0LCB5LCByZXN1bHRMZW5ndGgpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKIAotICAgICAgICByZXN1bHQgPSBhYnNvbHV0ZVhvcih2bSwgSGVhcEJp
Z0ludEltcGwgeyByZXN1bHQgfSwgeCk7Ci0gICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAg
ICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyBy
ZXN1bHQgfSwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKKyAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVY
b3IoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCB4KTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1w
bCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpKTsKICAgICB9OwogICAgIAogICAgIC8v
IEFzc3VtZSB0aGF0IHggaXMgdGhlIHBvc2l0aXZlIEJpZ0ludC4KQEAgLTEzNzQsMjEgKzE0NDQs
MjUgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBs
Mj4KIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjphYnNvbHV0ZUFkZChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LCBib29sIHJl
c3VsdFNpZ24pCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICh4Lmxlbmd0aCgpIDwg
eS5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkKGdsb2JhbE9iamVjdCwgeSwg
eCwgcmVzdWx0U2lnbik7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1
dGVBZGQoZ2xvYmFsT2JqZWN0LCB5LCB4LCByZXN1bHRTaWduKSk7CiAKICAgICBpZiAoeC5pc1pl
cm8oKSkgewogICAgICAgICBBU1NFUlQoeS5pc1plcm8oKSk7CiAgICAgICAgIHJldHVybiB4Owog
ICAgIH0KIAotICAgIGlmICh5LmlzWmVybygpKQotICAgICAgICByZXR1cm4gcmVzdWx0U2lnbiA9
PSB4LnNpZ24oKSA/IHggOiB1bmFyeU1pbnVzSW1wbCh2bSwgeCk7CisgICAgaWYgKHkuaXNaZXJv
KCkpIHsKKyAgICAgICAgaWYgKHJlc3VsdFNpZ24gPT0geC5zaWduKCkpCisgICAgICAgICAgICBy
ZXR1cm4geDsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB1bmFyeU1pbnVzSW1w
bChnbG9iYWxPYmplY3QsIHgpKTsKKyAgICB9CiAKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNC
aWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCB4Lmxlbmd0aCgpICsgMSk7
Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIEpTQmlnSW50
KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgeC5sZW5ndGgoKSArIDEp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAgIEFTU0VSVChy
ZXN1bHQpOwogICAgIERpZ2l0IGNhcnJ5ID0gMDsKICAgICB1bnNpZ25lZCBpID0gMDsKICAgICBm
b3IgKDsgaSA8IHkubGVuZ3RoKCk7IGkrKykgewpAQCAtMTQwOSwxMiArMTQ4MywxNSBAQCBKU0Jp
Z0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YWJzb2x1dGVBZGQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQmlnSW50SQogICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgY2FycnkpOwogICAg
IHJlc3VsdC0+c2V0U2lnbihyZXN1bHRTaWduKTsKIAotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0
VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJp
bShnbG9iYWxPYmplY3QpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0
eXBlbmFtZSBCaWdJbnRJbXBsMj4KLUpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjphYnNv
bHV0ZVN1YihWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHksIGJvb2wgcmVzdWx0
U2lnbikKK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjphYnNvbHV0ZVN1YihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LCBib29s
IHJlc3VsdFNpZ24pCiB7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIENvbXBhcmlzb25SZXN1
bHQgY29tcGFyaXNvblJlc3VsdCA9IGFic29sdXRlQ29tcGFyZSh4LCB5KTsKICAgICBBU1NFUlQo
eC5sZW5ndGgoKSA+PSB5Lmxlbmd0aCgpKTsKICAgICBBU1NFUlQoY29tcGFyaXNvblJlc3VsdCA9
PSBDb21wYXJpc29uUmVzdWx0OjpHcmVhdGVyVGhhbiB8fCBjb21wYXJpc29uUmVzdWx0ID09IENv
bXBhcmlzb25SZXN1bHQ6OkVxdWFsKTsKQEAgLTE0MjQsMTMgKzE1MDEsMTcgQEAgSlNCaWdJbnQ6
OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFic29sdXRlU3ViKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwg
QmlnSW50SW1wbDIgeSwKICAgICAgICAgcmV0dXJuIHg7CiAgICAgfQogCi0gICAgaWYgKHkuaXNa
ZXJvKCkpCi0gICAgICAgIHJldHVybiByZXN1bHRTaWduID09IHguc2lnbigpID8gSW1wbFJlc3Vs
dCB7IHggfSA6IEpTQmlnSW50Ojp1bmFyeU1pbnVzSW1wbCh2bSwgeCk7CisgICAgaWYgKHkuaXNa
ZXJvKCkpIHsKKyAgICAgICAgaWYgKHJlc3VsdFNpZ24gPT0geC5zaWduKCkpCisgICAgICAgICAg
ICByZXR1cm4gSW1wbFJlc3VsdCB7IHggfTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwoZ2xvYmFsT2JqZWN0LCB4KSk7CisgICAgfQog
CiAgICAgaWYgKGNvbXBhcmlzb25SZXN1bHQgPT0gQ29tcGFyaXNvblJlc3VsdDo6RXF1YWwpCi0g
ICAgICAgIHJldHVybiB6ZXJvSW1wbCh2bSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgemVyb0ltcGwoZ2xvYmFsT2JqZWN0KSk7CiAKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0g
SlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIHgubGVuZ3RoKCkpOworICAg
IEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgeC5sZW5n
dGgoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBE
aWdpdCBib3Jyb3cgPSAwOwogICAgIHVuc2lnbmVkIGkgPSAwOwpAQCAtMTQ1MSw3ICsxNTMyLDcg
QEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFic29sdXRlU3ViKFZNJiB2bSwgQmln
SW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwKIAogICAgIEFTU0VSVCghYm9ycm93KTsKICAgICBy
ZXN1bHQtPnNldFNpZ24ocmVzdWx0U2lnbik7Ci0gICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmlt
KHZtKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdC0+cmlnaHRUcmltKGds
b2JhbE9iamVjdCkpOwogfQogCiAvLyBEaXZpZGVzIHt4fSBieSB7ZGl2aXNvcn0sIHJldHVybmlu
ZyB0aGUgcmVzdWx0IGluIHtxdW90aWVudH0gYW5kIHtyZW1haW5kZXJ9LgpAQCAtMTQ2MiwyMiAr
MTU0MywzMCBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YWJzb2x1dGVTdWIoVk0m
IHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LAogLy8ge3F1b3RpZW50fSBjYW4gYmUg
dGhlIHNhbWUgYXMge3h9IGZvciBhbiBpbi1wbGFjZSBkaXZpc2lvbi4ge3F1b3RpZW50fSBjYW4K
IC8vIGFsc28gYmUgbnVsbHB0ciBpZiB0aGUgY2FsbGVyIGlzIG9ubHkgaW50ZXJlc3RlZCBpbiB0
aGUgcmVtYWluZGVyLgogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci12b2lkIEpTQmln
SW50OjphYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3IoVk0mIHZtLCBCaWdJbnRJbXBsIHgsIERp
Z2l0IGRpdmlzb3IsIEpTQmlnSW50KiogcXVvdGllbnQsIERpZ2l0JiByZW1haW5kZXIpCitib29s
IEpTQmlnSW50OjphYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3IoSlNHbG9iYWxPYmplY3QqIG51
bGxPckdsb2JhbE9iamVjdEZvck9PTSwgVk0mIHZtLCBCaWdJbnRJbXBsIHgsIERpZ2l0IGRpdmlz
b3IsIEpTQmlnSW50KiogcXVvdGllbnQsIERpZ2l0JiByZW1haW5kZXIpCiB7CiAgICAgQVNTRVJU
KGRpdmlzb3IpOwogCiAgICAgQVNTRVJUKCF4LmlzWmVybygpKTsKICAgICByZW1haW5kZXIgPSAw
OwogICAgIGlmIChkaXZpc29yID09IDEpIHsKLSAgICAgICAgaWYgKHF1b3RpZW50KQotICAgICAg
ICAgICAgKnF1b3RpZW50ID0geC50b0hlYXBCaWdJbnQodm0pOwotICAgICAgICByZXR1cm47Cisg
ICAgICAgIGlmIChxdW90aWVudCkgeworICAgICAgICAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IHgu
dG9IZWFwQmlnSW50KG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgdm0pOworICAgICAgICAgICAg
aWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICpxdW90aWVudCA9IHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSB4Lmxlbmd0aCgpOwogICAgIGlm
IChxdW90aWVudCkgewotICAgICAgICBpZiAoKnF1b3RpZW50ID09IG51bGxwdHIpCi0gICAgICAg
ICAgICAqcXVvdGllbnQgPSBKU0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwg
bGVuZ3RoKTsKKyAgICAgICAgaWYgKCpxdW90aWVudCA9PSBudWxscHRyKSB7CisgICAgICAgICAg
ICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aChudWxsT3JHbG9iYWxPYmplY3RG
b3JPT00sIHZtLCBsZW5ndGgpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICpxdW90aWVudCA9IHJl
c3VsdDsKKyAgICAgICAgfQogCiAgICAgICAgIGZvciAoaW50IGkgPSBsZW5ndGggLSAxOyBpID49
IDA7IGktLSkgewogICAgICAgICAgICAgRGlnaXQgcSA9IGRpZ2l0RGl2KHJlbWFpbmRlciwgeC5k
aWdpdChpKSwgZGl2aXNvciwgcmVtYWluZGVyKTsKQEAgLTE0ODcsNiArMTU3Niw3IEBAIHZvaWQg
SlNCaWdJbnQ6OmFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcihWTSYgdm0sIEJpZ0ludEltcGwg
eCwgRGlnaXQgZGl2aXNvciwKICAgICAgICAgZm9yIChpbnQgaSA9IGxlbmd0aCAtIDE7IGkgPj0g
MDsgaS0tKQogICAgICAgICAgICAgZGlnaXREaXYocmVtYWluZGVyLCB4LmRpZ2l0KGkpLCBkaXZp
c29yLCByZW1haW5kZXIpOwogICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gRGl2aWRl
cyB7ZGl2aWRlbmR9IGJ5IHtkaXZpc29yfSwgcmV0dXJuaW5nIHRoZSByZXN1bHQgaW4ge3F1b3Rp
ZW50fSBhbmQKQEAgLTE1MTIsMTIgKzE2MDIsMTQgQEAgdm9pZCBKU0JpZ0ludDo6YWJzb2x1dGVE
aXZXaXRoQmlnSW50RGl2aXNvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnQK
ICAgICAKICAgICAvLyBUaGUgcXVvdGllbnQgdG8gYmUgY29tcHV0ZWQuCiAgICAgSlNCaWdJbnQq
IHEgPSBudWxscHRyOwotICAgIGlmIChxdW90aWVudCAhPSBudWxscHRyKQotICAgICAgICBxID0g
Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZChnbG9iYWxPYmplY3QtPnZtKCksIG0gKyAxKTsKKyAg
ICBpZiAocXVvdGllbnQgIT0gbnVsbHB0cikgeworICAgICAgICBxID0gY3JlYXRlV2l0aExlbmd0
aChnbG9iYWxPYmplY3QsIG0gKyAxKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgdm9pZCgpKTsKKyAgICB9CiAgICAgCiAgICAgLy8gSW4gZWFjaCBpdGVyYXRpb24sIHtxaGF0
dn0gaG9sZHMge2Rpdmlzb3J9ICoge2N1cnJlbnQgcXVvdGllbnQgZGlnaXR9LgogICAgIC8vICJ2
IiBpcyB0aGUgYm9vaydzIG5hbWUgZm9yIHtkaXZpc29yfSwgInFoYXQiIHRoZSBjdXJyZW50IHF1
b3RpZW50IGRpZ2l0LgotICAgIEpTQmlnSW50KiBxaGF0diA9IHRyeUNyZWF0ZVdpdGhMZW5ndGgo
Z2xvYmFsT2JqZWN0LCBuICsgMSk7CisgICAgSlNCaWdJbnQqIHFoYXR2ID0gY3JlYXRlV2l0aExl
bmd0aChnbG9iYWxPYmplY3QsIG4gKyAxKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB2b2lkKCkpOwogICAgIAogICAgIC8vIEQxLgpAQCAtMTY2NywxNCArMTc1OSwxNiBAQCB2b2lk
IEpTQmlnSW50OjppbnBsYWNlUmlnaHRTaGlmdCh1bnNpZ25lZCBzaGlmdCkKIHRlbXBsYXRlIDx0
eXBlbmFtZSBCaWdJbnRJbXBsPgogSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUxlZnRTaGlm
dEFsd2F5c0NvcHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbCB4LCB1
bnNpZ25lZCBzaGlmdCwgTGVmdFNoaWZ0TW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKICAgICBBU1NFUlQoc2hpZnQgPCBkaWdpdEJpdHMpOwogICAgIEFTU0VSVCgheC5pc1plcm8o
KSk7CiAKICAgICB1bnNpZ25lZCBuID0geC5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCByZXN1bHRM
ZW5ndGggPSBtb2RlID09IExlZnRTaGlmdE1vZGU6OkFsd2F5c0FkZE9uZURpZ2l0ID8gbiArIDEg
OiBuOwotICAgIEpTQmlnSW50KiByZXN1bHQgPSB0cnlDcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9i
amVjdCwgcmVzdWx0TGVuZ3RoKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2Jq
ZWN0LCByZXN1bHRMZW5ndGgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAKICAgICBpZiAoIXNoaWZ0KSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
OyBpKyspCkBAIC0xNzE2LDggKzE4MTAsMTEgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0
ZUxlZnRTaGlmdEFsd2F5c0NvcHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmkKIC8v
ICAgICAgICAgICAgICAgICAgIHYgICAgIHYgICAgIHYgICAgIHYKIC8vIHJlc3VsdDogWyAgMCBd
WyB4MyBdWyByMiBdWyByMSBdWyByMCBdCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEs
IHR5cGVuYW1lIEJpZ0ludEltcGwyLCB0eXBlbmFtZSBCaXR3aXNlT3A+Ci1pbmxpbmUgSlNCaWdJ
bnQqIEpTQmlnSW50OjphYnNvbHV0ZUJpdHdpc2VPcChWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJp
Z0ludEltcGwyIHksIEV4dHJhRGlnaXRzSGFuZGxpbmcgZXh0cmFEaWdpdHMsIEJpdHdpc2VPcCYm
IG9wKQoraW5saW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVCaXR3aXNlT3AoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwgRXh0
cmFEaWdpdHNIYW5kbGluZyBleHRyYURpZ2l0cywgQml0d2lzZU9wJiYgb3ApCiB7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKwogICAgIHVuc2lnbmVkIHhMZW5ndGggPSB4Lmxlbmd0aCgpOwogICAgIHVu
c2lnbmVkIHlMZW5ndGggPSB5Lmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIG51bVBhaXJzID0geUxl
bmd0aDsKQEAgLTE3MzAsNyArMTgyNyw4IEBAIGlubGluZSBKU0JpZ0ludCogSlNCaWdJbnQ6OmFi
c29sdXRlQml0d2lzZU9wKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIKICAgICBB
U1NFUlQobnVtUGFpcnMgPT0gc3RkOjptaW4oeExlbmd0aCwgeUxlbmd0aCkpOwogICAgIEFTU0VS
VChtYXhMZW5ndGggPT0gc3RkOjptYXgoeExlbmd0aCwgeUxlbmd0aCkpOwogICAgIHVuc2lnbmVk
IHJlc3VsdExlbmd0aCA9IGV4dHJhRGlnaXRzID09IEV4dHJhRGlnaXRzSGFuZGxpbmc6OkNvcHkg
PyBtYXhMZW5ndGggOiBudW1QYWlyczsKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0
aExlbmd0aFVuY2hlY2tlZCh2bSwgcmVzdWx0TGVuZ3RoKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0
ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgdW5zaWduZWQgaSA9IDA7CiAg
ICAgZm9yICg7IGkgPCBudW1QYWlyczsgaSsrKQogICAgICAgICByZXN1bHQtPnNldERpZ2l0KGks
IG9wKHguZGlnaXQoaSksIHkuZGlnaXQoaSkpKTsKQEAgLTE3NDgsNTggKzE4NDYsNjUgQEAgaW5s
aW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVCaXR3aXNlT3AoVk0mIHZtLCBCaWdJbnRJ
bXBsMSB4LCBCaWdJbnRJbXBsMgogICAgIGZvciAoOyBpIDwgcmVzdWx0TGVuZ3RoOyBpKyspCiAg
ICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgMCk7CiAKLSAgICByZXR1cm4gcmVzdWx0LT5yaWdo
dFRyaW0odm0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0LT5yaWdodFRy
aW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwg
dHlwZW5hbWUgQmlnSW50SW1wbDI+Ci1KU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQW5kKFZN
JiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6
YWJzb2x1dGVBbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwg
QmlnSW50SW1wbDIgeSkKIHsKICAgICBhdXRvIGRpZ2l0T3BlcmF0aW9uID0gW10oRGlnaXQgYSwg
RGlnaXQgYikgewogICAgICAgICByZXR1cm4gYSAmIGI7CiAgICAgfTsKLSAgICByZXR1cm4gYWJz
b2x1dGVCaXR3aXNlT3Aodm0sIHgsIHksIEV4dHJhRGlnaXRzSGFuZGxpbmc6OlNraXAsIGRpZ2l0
T3BlcmF0aW9uKTsKKyAgICByZXR1cm4gYWJzb2x1dGVCaXR3aXNlT3AoZ2xvYmFsT2JqZWN0LCB4
LCB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nOjpTa2lwLCBkaWdpdE9wZXJhdGlvbik7CiB9CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+Ci1KU0Jp
Z0ludCogSlNCaWdJbnQ6OmFic29sdXRlT3IoVk0mIHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJ
bXBsMiB5KQorSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZU9yKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgYXV0byBk
aWdpdE9wZXJhdGlvbiA9IFtdKERpZ2l0IGEsIERpZ2l0IGIpIHsKICAgICAgICAgcmV0dXJuIGEg
fCBiOwogICAgIH07Ci0gICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9wKHZtLCB4LCB5LCBFeHRy
YURpZ2l0c0hhbmRsaW5nOjpDb3B5LCBkaWdpdE9wZXJhdGlvbik7CisgICAgcmV0dXJuIGFic29s
dXRlQml0d2lzZU9wKGdsb2JhbE9iamVjdCwgeCwgeSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6Q29w
eSwgZGlnaXRPcGVyYXRpb24pOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEs
IHR5cGVuYW1lIEJpZ0ludEltcGwyPgotSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUFuZE5v
dChWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCitKU0JpZ0ludCogSlNCaWdJ
bnQ6OmFic29sdXRlQW5kTm90KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludElt
cGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgLy8geCAmIH55CiAKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCiAgICAgdW5zaWduZWQgeExlbmd0aCA9IHgubGVuZ3RoKCk7CiAgICAgdW5zaWduZWQg
eUxlbmd0aCA9IHkubGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0geExlbmd0
aDsKIAotICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZt
LCByZXN1bHRMZW5ndGgpOworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3Ro
KGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKICAgICB1bnNpZ25lZCBpID0gMDsKICAgICBmb3IgKDsgaSA8IHN0ZDo6
bWluKHhMZW5ndGgsIHlMZW5ndGgpOyBpKyspCiAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwg
eC5kaWdpdChpKSAmIH55LmRpZ2l0KGkpKTsKICAgICBmb3IgKDsgaSA8IHJlc3VsdExlbmd0aDsg
KytpKQogICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIHguZGlnaXQoaSkpOwogCi0gICAgcmV0
dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgotSlNCaWdJbnQqIEpTQmlnSW50
OjphYnNvbHV0ZVhvcihWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCitKU0Jp
Z0ludCogSlNCaWdJbnQ6OmFic29sdXRlWG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgYXV0byBkaWdpdE9wZXJhdGlv
biA9IFtdKERpZ2l0IGEsIERpZ2l0IGIpIHsKICAgICAgICAgcmV0dXJuIGEgXiBiOwogICAgIH07
Ci0gICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9wKHZtLCB4LCB5LCBFeHRyYURpZ2l0c0hhbmRs
aW5nOjpDb3B5LCBkaWdpdE9wZXJhdGlvbik7CisgICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9w
KGdsb2JhbE9iamVjdCwgeCwgeSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6Q29weSwgZGlnaXRPcGVy
YXRpb24pOwogfQogICAgIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CiBKU0JpZ0lu
dCogSlNCaWdJbnQ6OmFic29sdXRlQWRkT25lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEJpZ0ludEltcGwgeCwgU2lnbk9wdGlvbiBzaWduT3B0aW9uKQogeworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKICAgICB1bnNpZ25lZCBpbnB1dExlbmd0aCA9IHgubGVuZ3RoKCk7CiAgICAgLy8gVGhl
IGFkZGl0aW9uIHdpbGwgb3ZlcmZsb3cgaW50byBhIG5ldyBkaWdpdCBpZiBhbGwgZXhpc3Rpbmcg
ZGlnaXRzIGFyZQogICAgIC8vIGF0IG1heGltdW0uCkBAIC0xODEyLDkgKzE5MTcsOCBAQCBKU0Jp
Z0ludCogSlNCaWdJbnQ6OmFic29sdXRlQWRkT25lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEJpZ0ludEltcGwgeCwgUwogICAgIH0KIAogICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9
IGlucHV0TGVuZ3RoICsgd2lsbE92ZXJmbG93OwotICAgIEpTQmlnSW50KiByZXN1bHQgPSB0cnlD
cmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKLSAgICBpZiAoIXJl
c3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNy
ZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgRGlnaXQgY2FycnkgPSAxOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgaSsrKSB7CkBAIC0xODI4LDcg
KzE5MzIsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQWRkT25lKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCwgUwogICAgICAgICBBU1NFUlQoIWNhcnJ5
KTsKIAogICAgIHJlc3VsdC0+c2V0U2lnbihzaWduT3B0aW9uID09IFNpZ25PcHRpb246OlNpZ25l
ZCk7Ci0gICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdC0+dm0oKSk7Cisg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmpl
Y3QpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CkBAIC0xODM5LDcgKzE5
NDMsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlU3ViT25lKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCwgdQogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAg
ICBKU0JpZ0ludCogcmVzdWx0ID0gdHJ5Q3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHJl
c3VsdExlbmd0aCk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xv
YmFsT2JqZWN0LCByZXN1bHRMZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IG51bGxwdHIpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0geC5sZW5ndGgoKTsKQEAgLTE4NTMs
NyArMTk1Nyw3IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVTdWJPbmUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbCB4LCB1CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbGVuZ3RoOyBpIDwgcmVzdWx0TGVuZ3RoOyBpKyspCiAgICAgICAgIHJlc3VsdC0+c2V0RGln
aXQoaSwgYm9ycm93KTsKIAotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3Qp
KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJ
bXBsMj4KQEAgLTE4NzksNyArMTk4Myw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50
OjpsZWZ0U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIEpTQmlnSW50KiByZXN1bHQgPSB0cnlD
cmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKKyAgICBKU0JpZ0lu
dCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7
CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgaWYgKCFiaXRz
U2hpZnQpIHsKICAgICAgICAgdW5zaWduZWQgaSA9IDA7CkBAIC0xOTA2LDI1ICsyMDEwLDI3IEBA
IEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpsZWZ0U2hpZnRCeUFic29sdXRlKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgfQogCiAgICAgcmVzdWx0LT5zZXRTaWduKHgu
c2lnbigpKTsKLSAgICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0odm0pOworICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgcmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CiBK
U0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5QWJzb2x1dGUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgdW5zaWduZWQgbGVuZ3RoID0geC5sZW5ndGgoKTsK
ICAgICBib29sIHNpZ24gPSB4LnNpZ24oKTsKICAgICBhdXRvIG9wdGlvbmFsU2hpZnQgPSB0b1No
aWZ0QW1vdW50KHkpOwogICAgIGlmICghb3B0aW9uYWxTaGlmdCkKLSAgICAgICAgcmV0dXJuIHJp
Z2h0U2hpZnRCeU1heGltdW0odm0sIHNpZ24pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIHJpZ2h0U2hpZnRCeU1heGltdW0oZ2xvYmFsT2JqZWN0LCBzaWduKSk7CiAKICAgICBE
aWdpdCBzaGlmdCA9ICpvcHRpb25hbFNoaWZ0OwogICAgIHVuc2lnbmVkIGRpZ2l0YWxTaGlmdCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaGlmdCAvIGRpZ2l0Qml0cyk7CiAgICAgdW5zaWduZWQg
Yml0c1NoaWZ0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNoaWZ0ICUgZGlnaXRCaXRzKTsKICAg
ICBpbnQgcmVzdWx0TGVuZ3RoID0gbGVuZ3RoIC0gZGlnaXRhbFNoaWZ0OwogICAgIGlmIChyZXN1
bHRMZW5ndGggPD0gMCkKLSAgICAgICAgcmV0dXJuIHJpZ2h0U2hpZnRCeU1heGltdW0odm0sIHNp
Z24pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJpZ2h0U2hpZnRCeU1heGlt
dW0oZ2xvYmFsT2JqZWN0LCBzaWduKSk7CiAKICAgICAvLyBGb3IgbmVnYXRpdmUgbnVtYmVycywg
cm91bmQgZG93biBpZiBhbnkgYml0IHdhcyBzaGlmdGVkIG91dCAoc28gdGhhdCBlLmcuCiAgICAg
Ly8gLTVuID4+IDFuID09IC0zbiBhbmQgbm90IC0ybikuIENoZWNrIG5vdyB3aGV0aGVyIHRoaXMg
d2lsbCBoYXBwZW4gYW5kCkBAIC0xOTU1LDcgKzIwNjEsOSBAQCBKU0JpZ0ludDo6SW1wbFJlc3Vs
dCBKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5QWJzb2x1dGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdAogICAgIH0KIAogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0TGVu
Z3RoKSA8PSBsZW5ndGgpOwotICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3Ro
VW5jaGVja2VkKHZtLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0TGVuZ3RoKSk7CisgICAg
SlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4ocmVzdWx0TGVuZ3RoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CisKICAgICBpZiAoIWJpdHNTaGlmdCkgewogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBkaWdpdGFsU2hpZnQ7IGkgPCBsZW5ndGg7IGkrKykKICAgICAgICAgICAgIHJl
c3VsdC0+c2V0RGlnaXQoaSAtIGRpZ2l0YWxTaGlmdCwgeC5kaWdpdChpKSk7CkBAIC0xOTc1LDIw
ICsyMDgzLDIxIEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpyaWdodFNoaWZ0QnlB
YnNvbHV0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0CiAgICAgICAgIGlmIChtdXN0Um91
bmREb3duKSB7CiAgICAgICAgICAgICAvLyBTaW5jZSB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCBy
b3VuZGluZyBkb3duIG1lYW5zIGFkZGluZyBvbmUgdG8KICAgICAgICAgICAgIC8vIGl0cyBhYnNv
bHV0ZSB2YWx1ZS4gVGhpcyBjYW5ub3Qgb3ZlcmZsb3cuCi0gICAgICAgICAgICByZXN1bHQgPSBy
ZXN1bHQtPnJpZ2h0VHJpbSh2bSk7Ci0gICAgICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUo
Z2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWdu
ZWQpOworICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0
KTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAg
ICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBhYnNvbHV0ZUFkZE9uZShnbG9iYWxP
YmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIFNpZ25PcHRpb246OlNpZ25lZCkpOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKKyAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVj
dCkpOwogfQogCi1KU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5TWF4
aW11bShWTSYgdm0sIGJvb2wgc2lnbikKK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojpy
aWdodFNoaWZ0QnlNYXhpbXVtKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGJvb2wgc2ln
bikKIHsKICAgICBpZiAoc2lnbikKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb20odm0sIC0xKTsK
KyAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCAtMSk7CiAKLSAgICByZXR1
cm4gY3JlYXRlWmVybyh2bSk7CisgICAgcmV0dXJuIGNyZWF0ZVplcm8oZ2xvYmFsT2JqZWN0KTsK
IH0KIAogLy8gTG9va3VwIHRhYmxlIGZvciB0aGUgbWF4aW11bSBudW1iZXIgb2YgYml0cyByZXF1
aXJlZCBwZXIgY2hhcmFjdGVyIG9mIGEKQEAgLTIwMzQsNyArMjE0Myw3IEBAIHVpbnQ2NF90IEpT
QmlnSW50OjpjYWxjdWxhdGVNYXhpbXVtQ2hhcmFjdGVyc1JlcXVpcmVkKHVuc2lnbmVkIGxlbmd0
aCwgdW5zaWduZWQKICAgICByZXR1cm4gbWF4aW11bUNoYXJhY3RlcnNSZXF1aXJlZDsKIH0KIAot
U3RyaW5nIEpTQmlnSW50Ojp0b1N0cmluZ0Jhc2VQb3dlck9mVHdvKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIHVuc2lnbmVkIHJhZGl4KQorU3RyaW5n
IEpTQmlnSW50Ojp0b1N0cmluZ0Jhc2VQb3dlck9mVHdvKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgSlNCaWdJbnQqIHgsIHVuc2lnbmVkIHJhZGl4KQog
ewogICAgIEFTU0VSVChoYXNPbmVCaXRTZXQocmFkaXgpKTsKICAgICBBU1NFUlQocmFkaXggPj0g
MiAmJiByYWRpeCA8PSAzMik7CkBAIC0yMDU0LDkgKzIxNjMsOSBAQCBTdHJpbmcgSlNCaWdJbnQ6
OnRvU3RyaW5nQmFzZVBvd2VyT2ZUd28oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKUwogICAgIGNvbnN0IHNpemVfdCBjaGFyc1JlcXVpcmVkID0gKGJpdExlbmd0aCArIGJp
dHNQZXJDaGFyIC0gMSkgLyBiaXRzUGVyQ2hhciArIHNpZ247CiAKICAgICBpZiAoY2hhcnNSZXF1
aXJlZCA+IEpTU3RyaW5nOjpNYXhMZW5ndGgpIHsKLSAgICAgICAgaWYgKGdsb2JhbE9iamVjdCkg
eworICAgICAgICBpZiAobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NKSB7CiAgICAgICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgICAgICB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7ICAgICAgICAgICAgCisgICAgICAg
ICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBzY29w
ZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KQEAgLTIwOTYs
NyArMjIwNSw3IEBAIFN0cmluZyBKU0JpZ0ludDo6dG9TdHJpbmdCYXNlUG93ZXJPZlR3byhWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTCiAgICAgcmV0dXJuIFN0cmluZ0lt
cGw6OmFkb3B0KFdURk1vdmUocmVzdWx0U3RyaW5nKSk7CiB9CiAKLVN0cmluZyBKU0JpZ0ludDo6
dG9TdHJpbmdHZW5lcmljKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNC
aWdJbnQqIHgsIHVuc2lnbmVkIHJhZGl4KQorU3RyaW5nIEpTQmlnSW50Ojp0b1N0cmluZ0dlbmVy
aWMoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogbnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBKU0Jp
Z0ludCogeCwgdW5zaWduZWQgcmFkaXgpCiB7CiAgICAgLy8gRklYTUU6IFtKU0NdIFJldmlzaXQg
dXNhZ2Ugb2YgVmVjdG9yIGludG8gSlNCaWdJbnQ6OnRvU3RyaW5nCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDY3MQpAQCAtMjExMiw5ICsyMjIxLDkg
QEAgU3RyaW5nIEpTQmlnSW50Ojp0b1N0cmluZ0dlbmVyaWMoVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCoKICAgICB1aW50NjRfdCBtYXhpbXVtQ2hhcmFjdGVy
c1JlcXVpcmVkID0gY2FsY3VsYXRlTWF4aW11bUNoYXJhY3RlcnNSZXF1aXJlZChsZW5ndGgsIHJh
ZGl4LCB4LT5kaWdpdChsZW5ndGggLSAxKSwgc2lnbik7CiAKICAgICBpZiAobWF4aW11bUNoYXJh
Y3RlcnNSZXF1aXJlZCA+IEpTU3RyaW5nOjpNYXhMZW5ndGgpIHsKLSAgICAgICAgaWYgKGdsb2Jh
bE9iamVjdCkgeworICAgICAgICBpZiAobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NKSB7CiAgICAg
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7ICAgICAgICAgICAg
CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9y
T09NLCBzY29wZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0K
QEAgLTIxNDAsNyArMjI0OSw5IEBAIFN0cmluZyBKU0JpZ0ludDo6dG9TdHJpbmdHZW5lcmljKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqCiAgICAgICAgIEpT
QmlnSW50KiogZGl2aWRlbmQgPSAmeDsKICAgICAgICAgZG8gewogICAgICAgICAgICAgRGlnaXQg
Y2h1bms7Ci0gICAgICAgICAgICBhYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3Iodm0sIEhlYXBC
aWdJbnRJbXBsIHsgKmRpdmlkZW5kIH0sIGNodW5rRGl2aXNvciwgJnJlc3QsIGNodW5rKTsKKyAg
ICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcihudWxs
T3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCBIZWFwQmlnSW50SW1wbCB7ICpkaXZpZGVuZCB9LCBj
aHVua0Rpdmlzb3IsICZyZXN0LCBjaHVuayk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgICAgICAgICAgZGl2aWRlbmQgPSAm
cmVzdDsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaHVua0NoYXJzOyBp
KyspIHsKICAgICAgICAgICAgICAgICByZXN1bHRTdHJpbmcuYXBwZW5kKHJhZGl4RGlnaXRzW2No
dW5rICUgcmFkaXhdKTsKQEAgLTIxODEsNyArMjI5Miw3IEBAIFN0cmluZyBKU0JpZ0ludDo6dG9T
dHJpbmdHZW5lcmljKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJ
bnQqCiAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmFkb3B0KFdURk1vdmUocmVzdWx0U3RyaW5nKSk7
CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6cmlnaHRUcmltKFZNJiB2bSkKK0pTQmlnSW50KiBK
U0JpZ0ludDo6cmlnaHRUcmltKEpTR2xvYmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmplY3RGb3JP
T00sIFZNJiB2bSkKIHsKICAgICBpZiAoaXNaZXJvKCkpIHsKICAgICAgICAgQVNTRVJUKCFzaWdu
KCkpOwpAQCAtMjE5MywyMiArMjMwNCwzMSBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OnJpZ2h0VHJp
bShWTSYgdm0pCiAgICAgICAgIG5vblplcm9JbmRleC0tOwogCiAgICAgaWYgKG5vblplcm9JbmRl
eCA8IDApCi0gICAgICAgIHJldHVybiBjcmVhdGVaZXJvKHZtKTsKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZVplcm8obnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCB2bSk7CiAKICAgICBpZiAobm9uWmVy
b0luZGV4ID09IHN0YXRpY19jYXN0PGludD4obV9sZW5ndGggLSAxKSkKICAgICAgICAgcmV0dXJu
IHRoaXM7CiAKICAgICB1bnNpZ25lZCBuZXdMZW5ndGggPSBub25aZXJvSW5kZXggKyAxOwotICAg
IEpTQmlnSW50KiB0cmltbWVkQmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwg
bmV3TGVuZ3RoKTsKLSAgICBzdGQ6OmNvcHkoZGF0YVN0b3JhZ2UoKSwgZGF0YVN0b3JhZ2UoKSAr
IG5ld0xlbmd0aCwgdHJpbW1lZEJpZ0ludC0+ZGF0YVN0b3JhZ2UoKSk7IAorICAgIEpTQmlnSW50
KiB0cmltbWVkQmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aChudWxsT3JHbG9iYWxPYmplY3RGb3JP
T00sIHZtLCBuZXdMZW5ndGgpOworICAgIGlmIChVTkxJS0VMWSghdHJpbW1lZEJpZ0ludCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIHN0ZDo6Y29weShkYXRhU3RvcmFnZSgpLCBkYXRh
U3RvcmFnZSgpICsgbmV3TGVuZ3RoLCB0cmltbWVkQmlnSW50LT5kYXRhU3RvcmFnZSgpKTsKIAog
ICAgIHRyaW1tZWRCaWdJbnQtPnNldFNpZ24odGhpcy0+c2lnbigpKTsKIAogICAgIHJldHVybiB0
cmltbWVkQmlnSW50OwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmFsbG9jYXRlRm9yKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgdW5zaWduZWQgcmFkaXgsIHVuc2lnbmVk
IGNoYXJjb3VudCkKK0pTQmlnSW50KiBKU0JpZ0ludDo6cmlnaHRUcmltKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCiB7CisgICAgcmV0dXJuIHJpZ2h0VHJpbShnbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdC0+dm0oKSk7Cit9CisKK0pTQmlnSW50KiBKU0JpZ0ludDo6YWxsb2NhdGVGb3Io
SlNHbG9iYWxPYmplY3QqIG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgVk0mIHZtLCB1bnNpZ25l
ZCByYWRpeCwgdW5zaWduZWQgY2hhcmNvdW50KQoreworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEFTU0VSVCgyIDw9IHJhZGl4ICYmIHJhZGl4IDw9IDM2
KTsKIAogICAgIHNpemVfdCBiaXRzUGVyQ2hhciA9IG1heEJpdHNQZXJDaGFyVGFibGVbcmFkaXhd
OwpAQCAtMjIyMiwxNyArMjM0MiwxNCBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFsbG9jYXRlRm9y
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgdW5zaWduZWQgcgogICAgICAg
ICBpZiAoYml0c01pbiA8PSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1heEludCkpIHsKICAgICAgICAg
ICAgIC8vIERpdmlkZSBieSBrRGlnaXRzQml0cywgcm91bmRpbmcgdXAuCiAgICAgICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPSAoYml0c01pbiArIGRpZ2l0Qml0cyAtIDEpIC8gZGlnaXRCaXRzOwot
ICAgICAgICAgICAgaWYgKGxlbmd0aCA8PSBtYXhMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBK
U0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0s
IGxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChsZW5ndGggPD0gbWF4TGVuZ3RoKQorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY3JlYXRlV2l0aExlbmd0aChudWxsT3JHbG9iYWxPYmpl
Y3RGb3JPT00sIHZtLCBsZW5ndGgpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChnbG9i
YWxPYmplY3QpIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkJp
Z0ludCBnZW5lcmF0ZWQgZnJvbSB0aGlzIG9wZXJhdGlvbiBpcyB0b28gYmlnIl9zKTsKLSAgICB9
CisgICAgaWYgKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSkKKyAgICAgICAgdGhyb3dPdXRPZk1l
bW9yeUVycm9yKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgc2NvcGUsICJCaWdJbnQgZ2VuZXJh
dGVkIGZyb20gdGhpcyBvcGVyYXRpb24gaXMgdG9vIGJpZyJfcyk7CisKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIApAQCAtMjI5MCw3ICsyNDA3LDcgQEAgSlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJ
bnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2hhclR5cGUqICBkYXRhLCB1bnNpZ24K
IH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgotSlNWYWx1ZSBKU0JpZ0ludDo6cGFy
c2VJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBDaGFyVHlwZSogZGF0
YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCByYWRpeCwg
RXJyb3JQYXJzZU1vZGUgZXJyb3JQYXJzZU1vZGUsIFBhcnNlSW50U2lnbiBzaWduLCBQYXJzZUlu
dE1vZGUgcGFyc2VNb2RlKQorSlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJbnQoSlNHbG9iYWxPYmpl
Y3QqIG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgVk0mIHZtLCBDaGFyVHlwZSogZGF0YSwgdW5z
aWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCByYWRpeCwgRXJyb3JQ
YXJzZU1vZGUgZXJyb3JQYXJzZU1vZGUsIFBhcnNlSW50U2lnbiBzaWduLCBQYXJzZUludE1vZGUg
cGFyc2VNb2RlKQogewogICAgIEFTU0VSVChsZW5ndGggPj0gMCk7CiAgICAgdW5zaWduZWQgcCA9
IHN0YXJ0SW5kZXg7CkBAIC0yMjk4LDkgKzI0MTUsOSBAQCBKU1ZhbHVlIEpTQmlnSW50OjpwYXJz
ZUludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIENoYXJUeXBlKiBkYXRh
LAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChw
YXJzZU1vZGUgIT0gUGFyc2VJbnRNb2RlOjpBbGxvd0VtcHR5U3RyaW5nICYmIHN0YXJ0SW5kZXgg
PT0gbGVuZ3RoKSB7Ci0gICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOworICAgICAgICBBU1NF
UlQobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NKTsKICAgICAgICAgaWYgKGVycm9yUGFyc2VNb2Rl
ID09IEVycm9yUGFyc2VNb2RlOjpUaHJvd0V4Y2VwdGlvbnMpCi0gICAgICAgICAgICB0aHJvd1ZN
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlU3ludGF4RXJyb3IoZ2xvYmFsT2JqZWN0
LCAiRmFpbGVkIHRvIHBhcnNlIFN0cmluZyB0byBCaWdJbnQiKSk7CisgICAgICAgICAgICB0aHJv
d1ZNRXJyb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBzY29wZSwgY3JlYXRlU3ludGF4RXJy
b3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCAiRmFpbGVkIHRvIHBhcnNlIFN0cmluZyB0byBC
aWdJbnQiKSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgfQogCkBAIC0yMzE5LDcg
KzI0MzYsNyBAQCBKU1ZhbHVlIEpTQmlnSW50OjpwYXJzZUludChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBWTSYgdm0sIENoYXJUeXBlKiBkYXRhLAogI2lmIFVTRShCSUdJTlQzMikKICAg
ICAgICAgcmV0dXJuIGpzQmlnSW50MzIoMCk7CiAjZWxzZQotICAgICAgICByZXR1cm4gY3JlYXRl
WmVybyh2bSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY3JlYXRlWmVybyhu
dWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtKSk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTI0MTQs
OCArMjUzMSw4IEBAIEpTVmFsdWUgSlNCaWdJbnQ6OnBhcnNlSW50KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFZNJiB2bSwgQ2hhclR5cGUqIGRhdGEsCiAgICAgICAgICAgICAgICAgZGln
aXQgKz0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGRhdGFbcF0gLSAnQScgKyAxMCk7CiAgICAgICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoZXJyb3JQYXJzZU1vZGUgPT0gRXJyb3JQ
YXJzZU1vZGU6OlRocm93RXhjZXB0aW9ucykgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
Z2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dWTUVycm9yKGdsb2JhbE9i
amVjdCwgc2NvcGUsIGNyZWF0ZVN5bnRheEVycm9yKGdsb2JhbE9iamVjdCwgIkZhaWxlZCB0byBw
YXJzZSBTdHJpbmcgdG8gQmlnSW50IikpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobnVs
bE9yR2xvYmFsT2JqZWN0Rm9yT09NKTsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dWTUVycm9y
KG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgc2NvcGUsIGNyZWF0ZVN5bnRheEVycm9yKG51bGxP
ckdsb2JhbE9iamVjdEZvck9PTSwgIkZhaWxlZCB0byBwYXJzZSBTdHJpbmcgdG8gQmlnSW50Iikp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwog
ICAgICAgICAgICAgfQpAQCAtMjQzMywxMiArMjU1MCwxMyBAQCBKU1ZhbHVlIEpTQmlnSW50Ojpw
YXJzZUludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIENoYXJUeXBlKiBk
YXRhLAogI2lmIFVTRShCSUdJTlQzMikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzQmln
SW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF5YmVSZXN1bHQpKTsKICNlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgc3RhdGljX2Nhc3Q8
aW50MzJfdD4obWF5YmVSZXN1bHQpKTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6Y3JlYXRlRnJvbShudWxsT3JHbG9iYWxPYmplY3RGb3JP
T00sIHN0YXRpY19jYXN0PGludDMyX3Q+KG1heWJlUmVzdWx0KSkpOwogI2VuZGlmCiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgaGVhcFJlc3VsdCA9IGFsbG9j
YXRlRm9yKGdsb2JhbE9iamVjdCwgdm0sIHJhZGl4LCBpbml0aWFsTGVuZ3RoKTsKLSAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7CisgICAgICAgICAgICBo
ZWFwUmVzdWx0ID0gYWxsb2NhdGVGb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCB2bSwgcmFk
aXgsIGluaXRpYWxMZW5ndGgpOworICAgICAgICAgICAgaWYgKG51bGxPckdsb2JhbE9iamVjdEZv
ck9PTSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU1ZhbHVl
KCkpOwogICAgICAgICAgICAgLy8gcmVzdWx0IGNhbiBzdGlsbCBiZSBudWxsIGlmIHdlIGRvbid0
IGhhdmUgYWNjZXNzIHRvIGdsb2JhbCBvYmplY3QsIGFzIGFsbG9jYXRlRm9yIGNhbm5vdCB0aHJv
dyBhbiBleGNlcHRpb24gaW4gdGhhdCBjYXNlLgogICAgICAgICAgICAgaWYgKCFoZWFwUmVzdWx0
KQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CkBAIC0yNDUxLDcgKzI1NjksNyBA
QCBKU1ZhbHVlIEpTQmlnSW50OjpwYXJzZUludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBWTSYgdm0sIENoYXJUeXBlKiBkYXRhLAogICAgIH0KIAogICAgIGhlYXBSZXN1bHQtPnNldFNp
Z24oc2lnbiA9PSBQYXJzZUludFNpZ246OlNpZ25lZCk7Ci0gICAgcmV0dXJuIGhlYXBSZXN1bHQt
PnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBoZWFwUmVzdWx0
LT5yaWdodFRyaW0obnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCB2bSkpOwogfQogCiBKU09iamVj
dCogSlNCaWdJbnQ6OnRvT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0
CkBAIC0yNzM4LDExICsyODU2LDEyIEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgog
SlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFzSW50TkltcGwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgdWludDY0X3QgbiwgQmlnSW50SW1wbCBiaWdJbnQpCiB7CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIGlmIChiaWdJbnQuaXNaZXJvKCkpCiAgICAgICAgIHJldHVybiBi
aWdJbnQ7CiAgICAgaWYgKG4gPT0gMCkKLSAgICAgICAgcmV0dXJuIHplcm9JbXBsKHZtKTsKKyAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB6ZXJvSW1wbChnbG9iYWxPYmplY3QpKTsK
IAogICAgIHVpbnQ2NF90IG5lZWRlZExlbmd0aCA9IChuICsgZGlnaXRCaXRzIC0gMSkgLyBkaWdp
dEJpdHM7CiAgICAgdWludDY0X3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJpZ0lu
dC5sZW5ndGgoKSk7CkBAIC0yNzY2LDIzICsyODg1LDIzIEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0
IEpTQmlnSW50Ojphc0ludE5JbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQ2
NF90CiAgICAgQVNTRVJUKG4gPD0gSU5UMzJfTUFYKTsKICAgICBpbnQzMl90IE4gPSBzdGF0aWNf
Y2FzdDxpbnQzMl90PihuKTsKICAgICBpZiAoIWhhc0JpdCkKLSAgICAgICAgcmV0dXJuIHRydW5j
YXRlVG9OQml0cyh2bSwgTiwgYmlnSW50KTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCB0cnVuY2F0ZVRvTkJpdHMoZ2xvYmFsT2JqZWN0LCBOLCBiaWdJbnQpKTsKICAgICBpZiAo
IWJpZ0ludC5zaWduKCkpCi0gICAgICAgIHJldHVybiB0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9m
VHdvKHZtLCBOLCBiaWdJbnQsIHRydWUpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIHRydW5jYXRlQW5kU3ViRnJvbVBvd2VyT2ZUd28oZ2xvYmFsT2JqZWN0LCBOLCBiaWdJbnQs
IHRydWUpKTsKIAogICAgIC8vIE5lZ2F0aXZlIG51bWJlcnMgbXVzdCBzdWJ0cmFjdCBmcm9tIDJe
biwgZXhjZXB0IGZvciB0aGUgc3BlY2lhbCBjYXNlCiAgICAgLy8gZGVzY3JpYmVkIGFib3ZlLgog
ICAgIGlmICgodG9wRGlnaXQgJiAoY29tcGFyZURpZ2l0IC0gMSkpID09IDApIHsKICAgICAgICAg
Zm9yIChpbnQzMl90IGkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihuZWVkZWRMZW5ndGgpIC0gMjsg
aSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgIGlmIChiaWdJbnQuZGlnaXQoaSkgIT0gMCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byh2bSwgTiwg
YmlnSW50LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCB0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKGdsb2JhbE9iamVjdCwgTiwgYmlnSW50LCBm
YWxzZSkpOwogICAgICAgICB9CiAgICAgICAgIC8vIFRydW5jYXRpb24gaXMgbm8tb3AgaWYgYmln
SW50ID09IC0yXihuLTEpLgogICAgICAgICBpZiAobGVuZ3RoID09IG5lZWRlZExlbmd0aCAmJiB0
b3BEaWdpdCA9PSBjb21wYXJlRGlnaXQpCiAgICAgICAgICAgICByZXR1cm4gYmlnSW50OwotICAg
ICAgICByZXR1cm4gdHJ1bmNhdGVUb05CaXRzKHZtLCBOLCBiaWdJbnQpOworICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIHRydW5jYXRlVG9OQml0cyhnbG9iYWxPYmplY3QsIE4sIGJp
Z0ludCkpOwogICAgIH0KLSAgICByZXR1cm4gdHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byh2
bSwgTiwgYmlnSW50LCBmYWxzZSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB0cnVu
Y2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKGdsb2JhbE9iamVjdCwgTiwgYmlnSW50LCBmYWxzZSkp
OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KQEAgLTI3OTQsNyArMjkxMyw3
IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojphc1VpbnROSW1wbChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfCiAgICAgaWYgKGJpZ0ludC5pc1plcm8oKSkKICAg
ICAgICAgcmV0dXJuIGJpZ0ludDsKICAgICBpZiAobiA9PSAwKQotICAgICAgICByZXR1cm4gemVy
b0ltcGwodm0pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHplcm9JbXBsKGds
b2JhbE9iamVjdCkpOwogCiAgICAgLy8gSWYgYmlnSW50IGlzIG5lZ2F0aXZlLCBzaW11bGF0ZSB0
d28ncyBjb21wbGVtZW50IHJlcHJlc2VudGF0aW9uLgogICAgIGlmIChiaWdJbnQuc2lnbigpKSB7
CkBAIC0yODAyLDcgKzI5MjEsNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YXNV
aW50TkltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0XwogICAgICAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJCaWdJbnQgZ2Vu
ZXJhdGVkIGZyb20gdGhpcyBvcGVyYXRpb24gaXMgdG9vIGJpZyJfcyk7CiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1bmNhdGVBbmRTdWJG
cm9tUG93ZXJPZlR3byh2bSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obiksIGJpZ0ludCwgZmFsc2Up
OworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHRydW5jYXRlQW5kU3ViRnJvbVBv
d2VyT2ZUd28oZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxpbnQzMl90PihuKSwgYmlnSW50LCBm
YWxzZSkpOwogICAgIH0KIAogICAgIC8vIElmIGJpZ0ludCBpcyBwb3NpdGl2ZSBhbmQgaGFzIHVw
IHRvIG4gYml0cywgcmV0dXJuIGl0IGRpcmVjdGx5LgpAQCAtMjgyNCwxOCArMjk0MywyMiBAQCBK
U0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YXNVaW50TkltcGwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgdWludDY0XwogCiAgICAgLy8gT3RoZXJ3aXNlLCB0cnVuY2F0ZS4KICAg
ICBBU1NFUlQobiA8PSBJTlQzMl9NQVgpOwotICAgIHJldHVybiB0cnVuY2F0ZVRvTkJpdHModm0s
IHN0YXRpY19jYXN0PGludDMyX3Q+KG4pLCBiaWdJbnQpOworICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgdHJ1bmNhdGVUb05CaXRzKGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8aW50MzJf
dD4obiksIGJpZ0ludCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KLUpT
QmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojp0cnVuY2F0ZVRvTkJpdHMoVk0mIHZtLCBpbnQz
Ml90IG4sIEJpZ0ludEltcGwgYmlnSW50KQorSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6
OnRydW5jYXRlVG9OQml0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IG4s
IEJpZ0ludEltcGwgYmlnSW50KQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBBU1NFUlQo
biAhPSAwKTsKICAgICBBU1NFUlQoYmlnSW50Lmxlbmd0aCgpID4gbiAvIGRpZ2l0Qml0cyk7CiAK
ICAgICBpbnQzMl90IG5lZWRlZERpZ2l0cyA9IChuICsgKGRpZ2l0Qml0cyAtIDEpKSAvIGRpZ2l0
Qml0czsKICAgICBBU1NFUlQobmVlZGVkRGlnaXRzIDw9IHN0YXRpY19jYXN0PGludDMyX3Q+KGJp
Z0ludC5sZW5ndGgoKSkpOwotICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3Ro
VW5jaGVja2VkKHZtLCBuZWVkZWREaWdpdHMpOworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVh
dGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgbmVlZGVkRGlnaXRzKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBBU1NFUlQocmVzdWx0KTsKIAogICAgIC8v
IENvcHkgYWxsIGRpZ2l0cyBleGNlcHQgdGhlIE1TRC4KQEAgLTI4NTEsMTkgKzI5NzQsMjMgQEAg
SlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnRydW5jYXRlVG9OQml0cyhWTSYgdm0sIGlu
dDMyX3QgbiwgQmlnSW50SW1wbCBiaWcKICAgICB9CiAgICAgcmVzdWx0LT5zZXREaWdpdChsYXN0
LCBtc2QpOwogICAgIHJlc3VsdC0+c2V0U2lnbihiaWdJbnQuc2lnbigpKTsKLSAgICByZXR1cm4g
cmVzdWx0LT5yaWdodFRyaW0odm0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVz
dWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIC8vIFN1YnRyYWN0cyB0aGUgbGVh
c3Qgc2lnbmlmaWNhbnQgbiBiaXRzIG9mIGFicyhiaWdJbnQpIGZyb20gMl5uLgogdGVtcGxhdGUg
PHR5cGVuYW1lIEJpZ0ludEltcGw+Ci1KU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6dHJ1
bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byhWTSYgdm0sIGludDMyX3QgbiwgQmlnSW50SW1wbCBi
aWdJbnQsIGJvb2wgcmVzdWx0U2lnbikKK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojp0
cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGludDMyX3QgbiwgQmlnSW50SW1wbCBiaWdJbnQsIGJvb2wgcmVzdWx0U2lnbikKIHsKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCiAgICAgQVNTRVJUKG4gIT0gMCk7CiAgICAgQVNTRVJUKG4gPD0gc3Rh
dGljX2Nhc3Q8aW50MzJfdD4obWF4TGVuZ3RoQml0cykpOwogCiAgICAgaW50MzJfdCBuZWVkZWRE
aWdpdHMgPSAobiArIChkaWdpdEJpdHMgLSAxKSkgLyBkaWdpdEJpdHM7CiAgICAgQVNTRVJUKG5l
ZWRlZERpZ2l0cyA8PSBzdGF0aWNfY2FzdDxpbnQzMl90PihtYXhMZW5ndGgpKTsgLy8gRm9sbG93
cyBmcm9tIG4gPD0gbWF4TGVuZ3RoQml0cy4KLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRl
V2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgbmVlZGVkRGlnaXRzKTsKKyAgICBKU0JpZ0ludCogcmVz
dWx0ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIG5lZWRlZERpZ2l0cyk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgQVNTRVJUKHJlc3VsdCk7
CiAKICAgICAvLyBQcm9jZXNzIGFsbCBkaWdpdHMgZXhjZXB0IHRoZSBNU0QuCkBAIC0yOTEwLDcg
KzMwMzcsNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6dHJ1bmNhdGVBbmRTdWJG
cm9tUG93ZXJPZlR3byhWTSYgdm0sIGludDMyX3QgbiwgQgogICAgIH0KICAgICByZXN1bHQtPnNl
dERpZ2l0KGxhc3QsIHJlc3VsdE1TRCk7CiAgICAgcmVzdWx0LT5zZXRTaWduKHJlc3VsdFNpZ24p
OwotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0KIAogSlNWYWx1
ZSBKU0JpZ0ludDo6YXNJbnROKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF90
IG4sIEpTQmlnSW50KiBiaWdJbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0JpZ0ludC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJ
bnQuaAppbmRleCA2YmY4YWIyYTU2NzE5ZjQ3ZTZiNzdhODA5ODAxN2Y0YWJlZmFkMzg3Li42ZWRj
MDM2OWE5Njk1MzA5OWZjMDY4NDEzNjdjNGEyNzJhOThlMWZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKQEAgLTY1LDE2ICs2NSwyMCBAQCBjbGFzcyBKU0JpZ0lu
dCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6
ZShKU0NlbGwqLCBWTSYpOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVaZXJvKFZNJik7Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIEpTQmlnSW50KiB0cnlDcmVhdGVXaXRoTGVuZ3RoKEpTR2xvYmFsT2Jq
ZWN0KiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZVdpdGhM
ZW5ndGhVbmNoZWNrZWQoVk0mLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlWmVybyhKU0dsb2JhbE9iamVjdCopOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0ludCogdHJ5Q3JlYXRlWmVybyhWTSYpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0ludCogdHJ5Q3JlYXRlV2l0aExlbmd0aChW
TSYsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQmln
SW50KiBjcmVhdGVXaXRoTGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgbGVuZ3RoKTsK
IAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShWTSYs
IGludDMyX3QgdmFsdWUpOwotICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShWTSYsIHVp
bnQzMl90IHZhbHVlKTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20oVk0mLCBpbnQ2
NF90IHZhbHVlKTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20oVk0mLCB1aW50NjRf
dCB2YWx1ZSk7Ci0gICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKFZNJiwgYm9vbCB2YWx1
ZSk7Ci0gICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKFZNJiwgZG91YmxlIHZhbHVlKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20oSlNHbG9i
YWxPYmplY3QqLCBpbnQzMl90IHZhbHVlKTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIHRyeUNyZWF0
ZUZyb20oVk0mLCBpbnQzMl90IHZhbHVlKTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZy
b20oSlNHbG9iYWxPYmplY3QqLCB1aW50MzJfdCB2YWx1ZSk7CisgICAgc3RhdGljIEpTQmlnSW50
KiBjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0KiwgaW50NjRfdCB2YWx1ZSk7CisgICAgc3RhdGlj
IEpTQmlnSW50KiBjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0KiwgdWludDY0X3QgdmFsdWUpOwor
ICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCosIGJvb2wgdmFs
dWUpOworICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCosIGRv
dWJsZSB2YWx1ZSk7CisKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20oSlNHbG9iYWxP
YmplY3QqLCBWTSYsIGludDMyX3QgdmFsdWUpOwogCiAgICAgc3RhdGljIHNpemVfdCBvZmZzZXRP
Zkxlbmd0aCgpCiAgICAgewpAQCAtOTAsMjEgKzk0LDIxIEBAIGNsYXNzIEpTQmlnSW50IGZpbmFs
IDogcHVibGljIEpTQ2VsbCB7CiAKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVy
biBtX2xlbmd0aDsgfQogCi0gICAgc3RhdGljIEpTVmFsdWUgbWFrZUhlYXBCaWdJbnRPckJpZ0lu
dDMyKFZNJiB2bSwgaW50NjRfdCB2YWx1ZSkKKyAgICBzdGF0aWMgSlNWYWx1ZSBtYWtlSGVhcEJp
Z0ludE9yQmlnSW50MzIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50NjRfdCB2YWx1
ZSkKICAgICB7CiAjaWYgVVNFKEJJR0lOVDMyKQogICAgICAgICBpZiAodmFsdWUgPD0gSU5UX01B
WCAmJiB2YWx1ZSA+PSBJTlRfTUlOKQogICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKTsKICNlbmRpZgotICAgICAgICByZXR1cm4gSlNCaWdJ
bnQ6OmNyZWF0ZUZyb20odm0sIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpjcmVh
dGVGcm9tKGdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU1ZhbHVl
IG1ha2VIZWFwQmlnSW50T3JCaWdJbnQzMihWTSYgdm0sIGRvdWJsZSB2YWx1ZSkKKyAgICBzdGF0
aWMgSlNWYWx1ZSBtYWtlSGVhcEJpZ0ludE9yQmlnSW50MzIoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgZG91YmxlIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzSW50ZWdlcih2
YWx1ZSkpOwogICAgICAgICBpZiAoc3RkOjphYnModmFsdWUpIDw9IG1heFNhZmVJbnRlZ2VyKCkp
Ci0gICAgICAgICAgICByZXR1cm4gbWFrZUhlYXBCaWdJbnRPckJpZ0ludDMyKHZtLCBzdGF0aWNf
Y2FzdDxpbnQ2NF90Pih2YWx1ZSkpOwotICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZy
b20odm0sIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlSGVhcEJpZ0ludE9yQmlnSW50
MzIoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxpbnQ2NF90Pih2YWx1ZSkpOworICAgICAgICBy
ZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgfQog
CiAgICAgZW51bSBjbGFzcyBFcnJvclBhcnNlTW9kZSB7CkBAIC0xNTgsMTcgKzE2MiwxMyBAQCBj
bGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAgQ29tcGFyaXNvblJl
c3VsdCBzdGF0aWMgY29tcGFyZVRvRG91YmxlKEpTQmlnSW50KiB4LCBkb3VibGUgeSk7CiAKLSAg
ICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1ZhbHVlIGFzSW50MzJPckhlYXBDZWxsKFZNJiB2bSwg
aW50NjRfdCB2YWx1ZSkKKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1ZhbHVlIGFzSW50MzJP
ckhlYXBDZWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDY0X3QgdmFsdWUpCiAg
ICAgewogI2lmIFVTRShCSUdJTlQzMikKICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludDY0X3Q+
KHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbHVlKSkgPT0gdmFsdWUpCiAgICAgICAgICAgICByZXR1
cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90Pih2YWx1ZSkpOwogI2VuZGlmCi0gICAg
ICAgIHJldHVybiBjcmVhdGVGcm9tKHZtLCB2YWx1ZSk7Ci0gICAgfQotICAgIEFMV0FZU19JTkxJ
TkUgc3RhdGljIEpTVmFsdWUgYXNJbnQzMk9ySGVhcENlbGwoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgaW50NjRfdCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhc0ludDMyT3JI
ZWFwQ2VsbChnbG9iYWxPYmplY3QtPnZtKCksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZUZyb20oZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTg0LDYg
KzE4NCw4IEBAIGNsYXNzIEpTQmlnSW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgICAg
IEpTVmFsdWUgcGF5bG9hZDsKICAgICB9OwogcHJpdmF0ZToKKyAgICBzdGF0aWMgSlNCaWdJbnQq
IGNyZWF0ZVdpdGhMZW5ndGgoSlNHbG9iYWxPYmplY3QqLCBWTSYsIHVuc2lnbmVkIGxlbmd0aCk7
CisgICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVaZXJvKEpTR2xvYmFsT2JqZWN0KiwgVk0mKTsK
IAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1w
bDI+CiAgICAgc3RhdGljIEltcGxSZXN1bHQgZXhwb25lbnRpYXRlSW1wbChKU0dsb2JhbE9iamVj
dCosIEJpZ0ludEltcGwxIGJhc2UsIEJpZ0ludEltcGwyIGV4cG9uZW50KTsKQEAgLTIxMCw3ICsy
MTIsNyBAQCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHN0YXRp
YyBJbXBsUmVzdWx0IHJlbWFpbmRlckltcGwoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4
LCBCaWdJbnRJbXBsMiB5KTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgot
ICAgIHN0YXRpYyBJbXBsUmVzdWx0IHVuYXJ5TWludXNJbXBsKFZNJiwgQmlnSW50SW1wbCB4KTsK
KyAgICBzdGF0aWMgSW1wbFJlc3VsdCB1bmFyeU1pbnVzSW1wbChKU0dsb2JhbE9iamVjdCosIEJp
Z0ludEltcGwgeCk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVu
YW1lIEJpZ0ludEltcGwyPgogICAgIHN0YXRpYyBJbXBsUmVzdWx0IGJpdHdpc2VBbmRJbXBsKEpT
R2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CkBAIC0yOTUsNyAr
Mjk3LDcgQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBzdGF0
aWMgSlNWYWx1ZSBkaXZpZGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4
LCBpbnQzMl90IHkpCiAgICAgewogICAgICAgICBpZiAoIXkpIHsKLSAgICAgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShnZXRWTShnbG9iYWxPYmplY3Qp
KTsKICAgICAgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiMCBp
cyBhbiBpbnZhbGlkIGRpdmlzb3IgdmFsdWUuIl9zKTsKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CiAgICAgICAgIH0KQEAgLTMxMCw3ICszMTIsNyBAQCBjbGFzcyBKU0JpZ0ludCBmaW5h
bCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHN0YXRpYyBKU1ZhbHVlIHJlbWFpbmRlcihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSkKICAgICB7CiAgICAg
ICAgIGlmICgheSkgewotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKGdldFZNKGdsb2JhbE9iamVjdCkpOwogICAgICAgICAgICAgdGhyb3dSYW5n
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICIwIGlzIGFuIGludmFsaWQgZGl2aXNvciB2YWx1
ZS4iX3MpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgfQpAQCAtMzE4
LDExICszMjAsMTEgQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAg
ICB9CiAjZW5kaWYKIAotICAgIHN0YXRpYyBKU1ZhbHVlIHVuYXJ5TWludXMoVk0mLCBKU0JpZ0lu
dCogeCk7CisgICAgc3RhdGljIEpTVmFsdWUgdW5hcnlNaW51cyhKU0dsb2JhbE9iamVjdCosIEpT
QmlnSW50KiB4KTsKICNpZiBVU0UoQklHSU5UMzIpCi0gICAgc3RhdGljIEpTVmFsdWUgdW5hcnlN
aW51cyhWTSYgdm0sIGludDMyX3QgeCkKKyAgICBzdGF0aWMgSlNWYWx1ZSB1bmFyeU1pbnVzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhc0ludDMyT3JIZWFwQ2VsbCh2bSwgLXN0YXRpY19jYXN0PGludDY0X3Q+KHgpKTsKKyAg
ICAgICAgcmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGdsb2JhbE9iamVjdCwgLXN0YXRpY19jYXN0
PGludDY0X3Q+KHgpKTsKICAgICB9CiAjZW5kaWYKIApAQCAtNDIzLDEyICs0MjUsMTQgQEAgY2xh
c3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAgIERpZ2l0IGRpZ2l0KHVu
c2lnbmVkKTsKICAgICB2b2lkIHNldERpZ2l0KHVuc2lnbmVkLCBEaWdpdCk7IC8vIFVzZSBvbmx5
IHdoZW4gaW5pdGlhbGl6aW5nLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTQmlnSW50KiByaWdo
dFRyaW0oVk0mKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU0JpZ0ludCogcmlnaHRUcmltKEpT
R2xvYmFsT2JqZWN0Kik7CiAKIHByaXZhdGU6CiAgICAgSlNCaWdJbnQoVk0mLCBTdHJ1Y3R1cmUq
LCBEaWdpdCosIHVuc2lnbmVkIGxlbmd0aCk7CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0
ZUZyb21JbXBsKFZNJiwgdWludDY0X3QgdmFsdWUsIGJvb2wgc2lnbik7CisgICAgSlNCaWdJbnQq
IHJpZ2h0VHJpbShKU0dsb2JhbE9iamVjdCosIFZNJik7CisKKyAgICBzdGF0aWMgSlNCaWdJbnQq
IGNyZWF0ZUZyb21JbXBsKEpTR2xvYmFsT2JqZWN0KiwgdWludDY0X3QgdmFsdWUsIGJvb2wgc2ln
bik7CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdHNQZXJCeXRlID0gODsKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGRpZ2l0Qml0cyA9IHNpemVvZihEaWdpdCkgKiBi
aXRzUGVyQnl0ZTsKQEAgLTQ1NCw3ICs0NTgsNyBAQCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1
YmxpYyBKU0NlbGwgewogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5h
bWUgQmlnSW50SW1wbDI+CiAgICAgc3RhdGljIENvbXBhcmlzb25SZXN1bHQgYWJzb2x1dGVDb21w
YXJlKEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBCaWdJbnRJbXBsPgotICAgIHN0YXRpYyB2b2lkIGFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNv
cihWTSYsIEJpZ0ludEltcGwgeCwgRGlnaXQgZGl2aXNvciwgSlNCaWdJbnQqKiBxdW90aWVudCwg
RGlnaXQmIHJlbWFpbmRlcik7CisgICAgc3RhdGljIGJvb2wgYWJzb2x1dGVEaXZXaXRoRGlnaXRE
aXZpc29yKEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBCaWdJbnRJbXBsIHgsIERpZ2l0IGRpdmlzb3Is
IEpTQmlnSW50KiogcXVvdGllbnQsIERpZ2l0JiByZW1haW5kZXIpOwogICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCaWdJbnRJbXBsPgogICAgIHN0YXRpYyB2b2lkIGludGVybmFsTXVsdGlwbHlBZGQo
QmlnSW50SW1wbCBzb3VyY2UsIERpZ2l0IGZhY3RvciwgRGlnaXQgc3VtbWFuZCwgdW5zaWduZWQs
IEpTQmlnSW50KiByZXN1bHQpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgpA
QCAtNDg5LDE2ICs0OTMsMTYgQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxs
IHsKICAgICB9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1l
IEJpZ0ludEltcGwyLCB0eXBlbmFtZSBCaXR3aXNlT3A+Ci0gICAgc3RhdGljIEpTQmlnSW50KiBh
YnNvbHV0ZUJpdHdpc2VPcChWTSYsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHksIEV4dHJh
RGlnaXRzSGFuZGxpbmcsIEJpdHdpc2VPcCYmKTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29s
dXRlQml0d2lzZU9wKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIg
eSwgRXh0cmFEaWdpdHNIYW5kbGluZywgQml0d2lzZU9wJiYpOwogCiAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KLSAgICBzdGF0aWMgSlNC
aWdJbnQqIGFic29sdXRlQW5kKFZNJiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7Cisg
ICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUFuZChKU0dsb2JhbE9iamVjdCosIEJpZ0ludElt
cGwxIHgsIEJpZ0ludEltcGwyIHkpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBs
MSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+Ci0gICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZU9y
KFZNJiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CisgICAgc3RhdGljIEpTQmlnSW50
KiBhYnNvbHV0ZU9yKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIg
eSk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJ
bXBsMj4KLSAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlQW5kTm90KFZNJiwgQmlnSW50SW1w
bDEgeCwgQmlnSW50SW1wbDIgeSk7CisgICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUFuZE5v
dChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOwogICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+Ci0gICAg
c3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZVhvcihWTSYsIEJpZ0ludEltcGwxIHgsIEJpZ0ludElt
cGwyIHkpOworICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVYb3IoSlNHbG9iYWxPYmplY3Qq
LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKIAogICAgIGVudW0gY2xhc3MgU2lnbk9w
dGlvbiB7CiAgICAgICAgIFNpZ25lZCwKQEAgLTUzNSwyMCArNTM5LDIwIEBAIGNsYXNzIEpTQmln
SW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgc3RhdGljIEpTQmlnSW50KiBhbGxvY2F0
ZUZvcihKU0dsb2JhbE9iamVjdCosIFZNJiwgdW5zaWduZWQgcmFkaXgsIHVuc2lnbmVkIGNoYXJj
b3VudCk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KLSAgICBzdGF0aWMg
SlNCaWdJbnQqIGNvcHkoVk0mLCBCaWdJbnRJbXBsIHgpOworICAgIHN0YXRpYyBKU0JpZ0ludCog
Y29weShKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwgeCk7CiAKICAgICB2b2lkIGlucGxhY2VN
dWx0aXBseUFkZChEaWdpdCBtdWx0aXBsaWVyLCBEaWdpdCBwYXJ0KTsKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgogICAgIHN0YXRpYyBJ
bXBsUmVzdWx0IGFic29sdXRlQWRkKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmln
SW50SW1wbDIgeSwgYm9vbCByZXN1bHRTaWduKTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmln
SW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgotICAgIHN0YXRpYyBJbXBsUmVzdWx0IGFi
c29sdXRlU3ViKFZNJiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwgYm9vbCByZXN1bHRT
aWduKTsKKyAgICBzdGF0aWMgSW1wbFJlc3VsdCBhYnNvbHV0ZVN1YihKU0dsb2JhbE9iamVjdCos
IEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHksIGJvb2wgcmVzdWx0U2lnbik7CiAKICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgogICAg
IHN0YXRpYyBJbXBsUmVzdWx0IGxlZnRTaGlmdEJ5QWJzb2x1dGUoSlNHbG9iYWxPYmplY3QqLCBC
aWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmln
SW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgogICAgIHN0YXRpYyBJbXBsUmVzdWx0IHJp
Z2h0U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50
SW1wbDIgeSk7CiAKLSAgICBzdGF0aWMgSW1wbFJlc3VsdCByaWdodFNoaWZ0QnlNYXhpbXVtKFZN
JiwgYm9vbCBzaWduKTsKKyAgICBzdGF0aWMgSW1wbFJlc3VsdCByaWdodFNoaWZ0QnlNYXhpbXVt
KEpTR2xvYmFsT2JqZWN0KiwgYm9vbCBzaWduKTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBC
aWdJbnRJbXBsPgogICAgIHN0YXRpYyBPcHRpb25hbDxEaWdpdD4gdG9TaGlmdEFtb3VudChCaWdJ
bnRJbXBsIHgpOwpAQCAtNTU4LDkgKzU2Miw5IEBAIGNsYXNzIEpTQmlnSW50IGZpbmFsIDogcHVi
bGljIEpTQ2VsbCB7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CiAgICAgc3Rh
dGljIEltcGxSZXN1bHQgYXNVaW50TkltcGwoSlNHbG9iYWxPYmplY3QqLCB1aW50NjRfdCwgQmln
SW50SW1wbCk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci0gICAgc3RhdGlj
IEltcGxSZXN1bHQgdHJ1bmNhdGVUb05CaXRzKFZNJiwgaW50MzJfdCwgQmlnSW50SW1wbCk7Cisg
ICAgc3RhdGljIEltcGxSZXN1bHQgdHJ1bmNhdGVUb05CaXRzKEpTR2xvYmFsT2JqZWN0KiwgaW50
MzJfdCwgQmlnSW50SW1wbCk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci0g
ICAgc3RhdGljIEltcGxSZXN1bHQgdHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byhWTSYsIGlu
dDMyX3QsIEJpZ0ludEltcGwsIGJvb2wgcmVzdWx0U2lnbik7CisgICAgc3RhdGljIEltcGxSZXN1
bHQgdHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byhKU0dsb2JhbE9iamVjdCosIGludDMyX3Qs
IEJpZ0ludEltcGwsIGJvb2wgcmVzdWx0U2lnbik7CiAKICAgICBpbmxpbmUgc3RhdGljIHNpemVf
dCBvZmZzZXRPZkRhdGEoKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDSlNWYWx1ZS5jcHAKaW5kZXggYTQ1NzcyY2ZlYTQ2NGE5NGVhYWUxNjBmMjU4NTZiYmYxOTNm
OTBiZC4uOWU0NzAzYmI1NjFiOTA0ZWIxM2QyZTg3ZDk4NDc2ZDBjZWY0ZWYyOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKQEAgLTExOCwxOSArMTE4
LDIzIEBAIEpTT2JqZWN0KiBKU1ZhbHVlOjp0b09iamVjdFNsb3dDYXNlKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpIGNvbnN0CiAKIEpTVmFsdWUgSlNWYWx1ZTo6dG9UaGlzU2xvd0Nhc2Uo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRUNNQU1vZGUgZWNtYU1vZGUpIGNvbnN0CiB7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEFTU0VSVCghaXNDZWxsKCkpOwogCiAgICAgaWYg
KGVjbWFNb2RlLmlzU3RyaWN0KCkpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAogICAgIGlmIChp
c0ludDMyKCkgfHwgaXNEb3VibGUoKSkKLSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdE51bWJlcihn
bG9iYWxPYmplY3QsIGFzVmFsdWUoKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgY29uc3RydWN0TnVtYmVyKGdsb2JhbE9iamVjdCwgYXNWYWx1ZSgpKSk7CiAgICAgaWYgKGlz
VHJ1ZSgpIHx8IGlzRmFsc2UoKSkKLSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEJvb2xlYW5Gcm9t
SW1tZWRpYXRlQm9vbGVhbihnbG9iYWxPYmplY3QsIGFzVmFsdWUoKSk7CisgICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgY29uc3RydWN0Qm9vbGVhbkZyb21JbW1lZGlhdGVCb29sZWFu
KGdsb2JhbE9iamVjdCwgYXNWYWx1ZSgpKSk7CiAjaWYgVVNFKEJJR0lOVDMyKQogICAgIGlmIChp
c0JpZ0ludDMyKCkpIHsKLSAgICAgICAgSlNDZWxsKiBoZWFwQmlnSW50ID0gc3RhdGljX2Nhc3Q8
SlNDZWxsKj4oSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LT52bSgpLCBiaWdJbnQz
MkFzSW50MzIoKSkpOwotICAgICAgICByZXR1cm4gaGVhcEJpZ0ludC0+dG9PYmplY3QoZ2xvYmFs
T2JqZWN0KTsKKyAgICAgICAgSlNDZWxsKiBoZWFwQmlnSW50ID0gc3RhdGljX2Nhc3Q8SlNDZWxs
Kj4oSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCBiaWdJbnQzMkFzSW50MzIoKSkp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIGhlYXBCaWdJbnQtPnRvT2JqZWN0KGdsb2JhbE9iamVjdCkp
OwogICAgIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXgg
ZmE5OGM1MTJmMTQxMzVkMTJhODE1MzNiNTMyZmMzOWQ3NjZiMWFjMS4uZDUxMGM0ZTRkOGQyYTI5
YmM2MGRmZGFkOTViMmVhNzgyNmZhNzQyYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcApAQCAtNDcyLDcgKzQ3MiwxMSBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUg
aGVhcFR5cGUpCiAgICAgICAgIHNlbnRpbmVsTWFwQnVja2V0KCk7CiAgICAgICAgIHNlbnRpbmVs
U2V0QnVja2V0KCk7CiAgICAgfQotICAgIGhlYXBCaWdJbnRDb25zdGFudE9uZS5zZXQoKnRoaXMs
IEpTQmlnSW50OjpjcmVhdGVGcm9tKCp0aGlzLCAxKSk7CisgICAgeworICAgICAgICBhdXRvKiBi
aWdJbnQgPSBKU0JpZ0ludDo6dHJ5Q3JlYXRlRnJvbSgqdGhpcywgMSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGJpZ0ludCk7CisgICAgICAgIGhlYXBCaWdJbnRDb25zdGFudE9uZS5zZXQoKnRo
aXMsIGJpZ0ludCk7CisgICAgfQogCiAgICAgVGhyZWFkOjpjdXJyZW50KCkuc2V0Q3VycmVudEF0
b21TdHJpbmdUYWJsZShleGlzdGluZ0VudHJ5QXRvbVN0cmluZ1RhYmxlKTsKICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
CmluZGV4IGI1MjMwMzhkMGFkNWFlN2Y0NTU0MDEyNjA4NjNkNzY5ODY0MTZlZGYuLmZkZDgyNWMy
MDgwMDVhYWRjZWEyM2Q5NThjZWVhNzRhMTFhMWQ5MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMzAwNyw3ICsz
MDA3LDExIEBAIGNsYXNzIENsb25lRGVzZXJpYWxpemVyIDogQ2xvbmVCYXNlIHsKICNpZiBVU0Uo
QklHSU5UMzIpCiAgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMigwKTsKICNlbHNlCi0gICAg
ICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gSlNCaWdJbnQ6OmNyZWF0ZVplcm8obV9sZXhpY2Fs
R2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgICAgIEpTQmlnSW50KiBiaWdJbnQgPSBKU0Jp
Z0ludDo6dHJ5Q3JlYXRlWmVybyhtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKCFiaWdJbnQpKSB7CisgICAgICAgICAgICAgICAgZmFpbCgpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBtX2djQnVmZmVyLmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3coYmlnSW50KTsKICAgICAg
ICAgICAgIHJldHVybiBiaWdJbnQ7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdl
TG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTVmZWM3N2U4OTBiOWJkMzI0ZjE4NzZkZmVl
NzdmMTUzNzllODI0Ni4uYjUzZjYzMjFmYjNhNDJjYjVmN2UyYTczZmNiMzMwMjQ1MjIwZDkwMSAx
MDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNyBAQAorMjAyMC0wNS0yOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUu
Y29tPgorCisgICAgICAgIFtKU0NdIEpTQmlnSW50IGFsbG9jYXRpb24gc2hvdWxkIGJlIGdyYWNl
ZnVsIGZvciBPT00KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxMjUxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogc3RyZXNzL2JpZ2ludC1jYW4tdGhyb3ctb29tLmpzOiBDb3BpZWQgZnJvbSBKU1Rlc3Rz
L3N0cmVzcy9nZXQtZnVuY3Rpb24tcmVhbG0tbm90LWRvaW5nLXJlY3Vyc2lvbi5qcy4KKyAgICAg
ICAgKGNhblRocm93KToKKyAgICAgICAgKGZvbyk6CisgICAgICAgIChnZXQgZm9vKToKKyAgICAg
ICAgKiBzdHJlc3MvZ2V0LWZ1bmN0aW9uLXJlYWxtLW5vdC1kb2luZy1yZWN1cnNpb24uanM6Cisg
ICAgICAgIChjYW5UaHJvdyk6CisKIDIwMjAtMDUtMjcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21p
bGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgZm9yLW9mIHNob3VsZCBjaGVjayB0aGUgaXRlcmFi
bGUgaXMgYSBKU0FycmF5IGZvciBGYXN0QXJyYXkgaW4gREZHIGl0ZXJhdG9yX29wZW4KZGlmZiAt
LWdpdCBhL0pTVGVzdHMvc3RyZXNzL2JpZ2ludC1jYW4tdGhyb3ctb29tLmpzIGIvSlNUZXN0cy9z
dHJlc3MvYmlnaW50LWNhbi10aHJvdy1vb20uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzAzMWI3YzhkZTE3MmU4
MjZmOTRhZTU1MTNiOGE1NGEwY2FiMjNhYgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3Ry
ZXNzL2JpZ2ludC1jYW4tdGhyb3ctb29tLmpzCkBAIC0wLDAgKzEsMzkgQEAKKy8vQCBza2lwIGlm
ICRtZW1vcnlMaW1pdGVkCisvL0AgcnVuRGVmYXVsdCgiLS11c2VDb25jdXJyZW50SklUPTAiKQor
CitmdW5jdGlvbiBjYW5UaHJvdyhmdW5jLCBlcnJvck1lc3NhZ2UpIHsKKyAgICB2YXIgZXJyb3JU
aHJvd24gPSBmYWxzZTsKKyAgICB2YXIgZXJyb3IgPSBudWxsOworICAgIHRyeSB7CisgICAgICAg
IGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVycm9yVGhyb3duID0gdHJ1ZTsK
KyAgICAgICAgZXJyb3IgPSBlOworICAgIH0KKyAgICBpZiAoZXJyb3JUaHJvd24gJiYgU3RyaW5n
KGVycm9yKSAhPT0gZXJyb3JNZXNzYWdlKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGJhZCBl
cnJvcjogJHtTdHJpbmcoZXJyb3IpfWApOworICAgIHJldHVybiBmYWxzZTsKK30KKworY29uc3Qg
YTAgPSBbXTsKK2EwLl9fcHJvdG9fXyA9IHt9OworYTAubGVuZ3RoID0gMioqMjMKK09iamVjdC5k
ZWZpbmVQcm9wZXJ0eShhMCwgMCwgeyBnZXQ6IGZvbyB9KTsKKworZnVuY3Rpb24gZm9vKCkgewor
ICAgIG5ldyBJbnQxNkFycmF5KGEwKTsKK30KKworbmV3IFByb21pc2UoZm9vKTsKKwordHJ5IHsK
KyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKyAgICAgICAgbmV3IFVpbnQ4
QXJyYXkoMTAwMDAwKTsKKyAgICB9Cit9IGNhdGNoIHt9CisKK2NhblRocm93KCgpID0+IHsKKyAg
ICBmb3IgKGxldCBpPTBuOyBpPDEwMDAwbjsgaSsrKSB7CisgICAgICAgIDJuKippOworICAgIH0K
K30sIGBSYW5nZUVycm9yOiBPdXQgb2YgbWVtb3J5YCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0
cmVzcy9nZXQtZnVuY3Rpb24tcmVhbG0tbm90LWRvaW5nLXJlY3Vyc2lvbi5qcyBiL0pTVGVzdHMv
c3RyZXNzL2dldC1mdW5jdGlvbi1yZWFsbS1ub3QtZG9pbmctcmVjdXJzaW9uLmpzCmluZGV4IGE3
OWVmMmNjNjBkYWU5ODNhNGIyOTRmNDRhMTdkNzIxZjM5N2Y2M2IuLmZmYTZlM2FhY2U5M2QzZDNi
ODdhMzk3NTI2NDk3OGJiOTZmMjg1MTUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2dldC1m
dW5jdGlvbi1yZWFsbS1ub3QtZG9pbmctcmVjdXJzaW9uLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNz
L2dldC1mdW5jdGlvbi1yZWFsbS1ub3QtZG9pbmctcmVjdXJzaW9uLmpzCkBAIC05LDcgKzksNiBA
QCBmdW5jdGlvbiBjYW5UaHJvdyhmdW5jLCBlcnJvck1lc3NhZ2UpIHsKICAgICB9IGNhdGNoIChl
KSB7CiAgICAgICAgIGVycm9yVGhyb3duID0gdHJ1ZTsKICAgICAgICAgZXJyb3IgPSBlOwotICAg
ICAgICBwcmludChlcnJvci5tZXNzYWdlKTsKICAgICB9CiAgICAgaWYgKGVycm9yVGhyb3duICYm
IFN0cmluZyhlcnJvcikgIT09IGVycm9yTWVzc2FnZSkKICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KGBiYWQgZXJyb3I6ICR7U3RyaW5nKGVycm9yKX1gKTsK
</data>
<flag name="review"
          id="415957"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400559</attachid>
            <date>2020-05-29 01:50:14 -0700</date>
            <delta_ts>2020-05-29 01:50:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212512-20200529015014.patch</filename>
            <type>text/plain</type>
            <size>93170</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMjc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MjI3NWIxOGQwNzg3ZGViOTNiMDA2ZjM3NWIxZjM1NzlhNGEyNDZkLi44ZDkyNzM2ZmE1M2EyYjY1
OTE4MmZmM2U2ZGE1YjZmZjkxYzFhYWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MCBAQAorMjAyMC0wNS0yOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEpTQmlnSW50IGFsbG9jYXRpb24gc2hvdWxkIGJlIGdyYWNlZnVs
IGZvciBPT00KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMjUxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggYWxsb3dzIEpTQmlnSW50J3Mgc3RvcmFnZSBhbGxvY2F0aW9uIHRvIGZhaWwg
Z3JhY2VmdWxseSBpZiBPT00gY29uZGl0aW9uIGhhcHBlbnMuCisgICAgICAgIFdlIHRocmVhZCBK
U0dsb2JhbE9iamVjdCogaW5zdGVhZCBvZiBWTSYgYW5kIHRocm93IE9PTSBlcnJvciBpZiBzdG9y
YWdlIGFsbG9jYXRpb24gZmFpbGVkLgorICAgICAgICBXZSBhbHNvIHJlbmFtZSBgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdGAgcGFyYW1ldGVyIHRvIGBKU0dsb2JhbE9iamVjdCogbnVsbE9y
R2xvYmFsT2JqZWN0Rm9yT09NYAorICAgICAgICBpZiBpdCBjYW4gYmUgbnVsbHB0ci4KKworICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAg
ICAoZnVuY3Rpb25DcmVhdGVIZWFwQmlnSW50KToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyQXJl
bmEuY3BwOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyQXJlbmE6Om1ha2VCaWdJbnREZWNpbWFs
SWRlbnRpZmllcik6CisgICAgICAgICogcnVudGltZS9CaWdJbnRDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OnRvQmlnSW50KToKKyAgICAgICAgKEpTQzo6Y2FsbEJpZ0ludENvbnN0cnVj
dG9yKToKKyAgICAgICAgKiBydW50aW1lL0JpZ0ludFByb3RvdHlwZS5jcHA6CisgICAgICAgIChK
U0M6OnRvVGhpc0JpZ0ludFZhbHVlKToKKyAgICAgICAgKEpTQzo6YmlnSW50UHJvdG9GdW5jVG9T
dHJpbmcpOgorICAgICAgICAoSlNDOjpiaWdJbnRQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6Cisg
ICAgICAgIChKU0M6OmJpZ0ludFByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAqIHJ1bnRpbWUv
Q2FjaGVkVHlwZXMuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZWRCaWdJbnQ6OmRlY29kZSBjb25z
dCk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdEZ1bmNGb3JtYXQpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3BwOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
Y3JlYXRlWmVybyk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0cnlDcmVhdGVaZXJvKToKKyAg
ICAgICAgKEpTQzo6SlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGgpOgorICAgICAgICAoSlNDOjpK
U0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojpj
cmVhdGVGcm9tKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnRyeUNyZWF0ZUZyb20pOgorICAg
ICAgICAoSlNDOjpKU0JpZ0ludDo6Y3JlYXRlRnJvbUltcGwpOgorICAgICAgICAoSlNDOjpKU0Jp
Z0ludDo6cGFyc2VJbnQpOgorICAgICAgICAoSlNDOjpIZWFwQmlnSW50SW1wbDo6dG9IZWFwQmln
SW50KToKKyAgICAgICAgKEpTQzo6SW50MzJCaWdJbnRJbXBsOjp0b0hlYXBCaWdJbnQpOgorICAg
ICAgICAoSlNDOjp6ZXJvSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpleHBvbmVudGlh
dGVJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6Om11bHRpcGx5SW1wbCk6CisgICAgICAg
IChKU0M6OkpTQmlnSW50OjpkaXZpZGVJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmNv
cHkpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwpOgorICAgICAgICAo
SlNDOjpKU0JpZ0ludDo6dW5hcnlNaW51cyk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpyZW1h
aW5kZXJJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmluY0ltcGwpOgorICAgICAgICAo
SlNDOjpKU0JpZ0ludDo6YWRkSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpzdWJJbXBs
KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmJpdHdpc2VBbmRJbXBsKToKKyAgICAgICAgKEpT
Qzo6SlNCaWdJbnQ6OmJpdHdpc2VPckltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0
d2lzZVhvckltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVBZGQpOgorICAg
ICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVTdWIpOgorICAgICAgICAoSlNDOjpKU0JpZ0lu
dDo6YWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29yKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6
OmFic29sdXRlRGl2V2l0aEJpZ0ludERpdmlzb3IpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
YWJzb2x1dGVMZWZ0U2hpZnRBbHdheXNDb3B5KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFi
c29sdXRlQml0d2lzZU9wKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlQW5kKToK
KyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlT3IpOgorICAgICAgICAoSlNDOjpKU0Jp
Z0ludDo6YWJzb2x1dGVBbmROb3QpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVY
b3IpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVBZGRPbmUpOgorICAgICAgICAo
SlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVTdWJPbmUpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
bGVmdFNoaWZ0QnlBYnNvbHV0ZSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpyaWdodFNoaWZ0
QnlBYnNvbHV0ZSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpyaWdodFNoaWZ0QnlNYXhpbXVt
KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnRvU3RyaW5nQmFzZVBvd2VyT2ZUd28pOgorICAg
ICAgICAoSlNDOjpKU0JpZ0ludDo6dG9TdHJpbmdHZW5lcmljKToKKyAgICAgICAgKEpTQzo6SlNC
aWdJbnQ6OnJpZ2h0VHJpbSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0cnlSaWdodFRyaW0p
OgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWxsb2NhdGVGb3IpOgorICAgICAgICAoSlNDOjpK
U0JpZ0ludDo6YXNJbnROSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojphc1VpbnROSW1w
bCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0cnVuY2F0ZVRvTkJpdHMpOgorICAgICAgICAo
SlNDOjpKU0JpZ0ludDo6dHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byk6CisgICAgICAgIChK
U0M6OkpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBydW50aW1lL0pTQmlnSW50Lmg6CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6dG9UaGlzU2xvd0Nhc2UgY29uc3QpOgorICAgICAg
ICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorCiAyMDIwLTA1LTI4
ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVj
dG9yOiBhZGQgbWlzc2luZyBjb25kaXRpb24gZ3VhcmRzIHdoZW4gZ2VuZXJhdGluZyBvYmpjIHBy
b3RvY29sIGZpbGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGM2NjY4YTZmM2EzYTNjY2YyYzM4OWE1N2U5MmRi
M2ZhMTcwODU1NS4uZmRmZmJiN2I4OGI3Y2E5ODliNjUzODk2NWE4ZjEwNmQ3ZWQ3YWJhZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA1LTI5ICBZdXN1a2UgU3V6dWtpICA8eXN1
enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW0pTQ10gSlNCaWdJbnQgYWxsb2NhdGlvbiBzaG91
bGQgYmUgZ3JhY2VmdWwgZm9yIE9PTQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjEyNTEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRCaWdJbnQpOgorCiAyMDIw
LTA1LTI4ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBbQXBwbGUg
UGF5XSBCdXR0b25zIHJlbmRlciB3aXRoIGEgY29ybmVyIHJhZGl1cyBvZiBQS0FwcGxlUGF5QnV0
dG9uRGVmYXVsdENvcm5lclJhZGl1cyBldmVuIHdoZW4gZXhwbGljaXRseSBzcGVjaWZ5aW5nICJi
b3JkZXItcmFkaXVzOiAwcHgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAppbmRleCAzYTQxZTc2MmVjOGQ4M2NjNDJhY2UxZDEzYjJkNDc5NjJiNDY3NTc1Li5k
MDBlYTI5NjM2MDBjNTExM2E4NzhiMmNlYWRjZjc1ODA5YWExYWFhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTI4NDIsMTAgKzI4NDIsMTAgQEAg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5lZ2F0ZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LAogCiAjaWYgVVNFKEJJR0lOVDMyKQogICAgIGlmIChwcmlt
VmFsdWUuaXNCaWdJbnQzMigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQmln
SW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpKTsKKyAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVu
YXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpKSk7CiAj
ZW5kaWYKICAgICBpZiAocHJpbVZhbHVlLmlzSGVhcEJpZ0ludCgpKQotICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFsdWUuYXNIZWFw
QmlnSW50KCkpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjpl
bmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFsdWUuYXNIZWFw
QmlnSW50KCkpKSk7CiAKICAgICBkb3VibGUgbnVtYmVyID0gcHJpbVZhbHVlLnRvTnVtYmVyKGds
b2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CkBAIC0yODcwLDEzICsyODcwLDE1IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAK
ICNpZiBVU0UoQklHSU5UMzIpCiAgICAgaWYgKHByaW1WYWx1ZS5pc0JpZ0ludDMyKCkpIHsKLSAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0JpZ0ludDo6dW5hcnlNaW51cyh2bSwgcHJpbVZhbHVl
LmJpZ0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0JpZ0ludDo6
dW5hcnlNaW51cyhnbG9iYWxPYmplY3QsIHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIGFyaXRoUHJv
ZmlsZS0+b2JzZXJ2ZVJlc3VsdChyZXN1bHQpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CiAgICAgfQogI2VuZGlmCiAgICAgaWYgKHByaW1WYWx1ZS5pc0hlYXBCaWdJ
bnQoKSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZt
LCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpT
QmlnSW50Ojp1bmFyeU1pbnVzKGdsb2JhbE9iamVjdCwgcHJpbVZhbHVlLmFzSGVhcEJpZ0ludCgp
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgYXJp
dGhQcm9maWxlLT5vYnNlcnZlUmVzdWx0KHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKICAgICB9CkBAIC0yOTEyLDEzICsyOTE0LDE1IEBAIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXpl
KEpTR2xvYmFsT2JqZWN0CiAKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgaWYgKHByaW1WYWx1ZS5p
c0JpZ0ludDMyKCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0JpZ0ludDo6dW5hcnlN
aW51cyh2bSwgcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBKU0JpZ0ludDo6dW5hcnlNaW51cyhnbG9iYWxPYmplY3QsIHByaW1WYWx1ZS5iaWdJ
bnQzMkFzSW50MzIoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAgICAgICAgIGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZVJlc3VsdChyZXN1bHQpOwogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQogI2VuZGlmCiAgICAgaWYgKHBy
aW1WYWx1ZS5pc0hlYXBCaWdJbnQoKSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmln
SW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpOworICAgICAgICBK
U1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKGdsb2JhbE9iamVjdCwgcHJpbVZh
bHVlLmFzSGVhcEJpZ0ludCgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlUmVzdWx0KHJlc3VsdCk7CiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CkBAIC0yOTU0LDEwICsy
OTU4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhOZWdh
dGVPcHRpbWl6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAjaWYgVVNFKEJJR0lOVDMyKQogICAg
IC8vIEZJWE1FOiB3aHkgZG9lcyB0aGlzIGZ1bmN0aW9uIHByb2ZpbGUgdGhlIGFyZ3VtZW50IGJ1
dCBub3QgdGhlIHJlc3VsdD8KICAgICBpZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6dW5hcnlNaW51cyh2bSwgcHJpbVZh
bHVlLmJpZ0ludDMyQXNJbnQzMigpKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50Ojp1bmFyeU1pbnVzKGdsb2JhbE9iamVjdCwgcHJp
bVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpKSkpOwogI2VuZGlmCiAgICAgaWYgKHByaW1WYWx1ZS5p
c0hlYXBCaWdJbnQoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6
dW5hcnlNaW51cyh2bSwgcHJpbVZhbHVlLmFzSGVhcEJpZ0ludCgpKSk7CisgICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50Ojp1bmFyeU1pbnVz
KGdsb2JhbE9iamVjdCwgcHJpbVZhbHVlLmFzSGVhcEJpZ0ludCgpKSkpOwogCiAgICAgZG91Ymxl
IG51bWJlciA9IHByaW1WYWx1ZS50b051bWJlcihnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApp
bmRleCBmNjNmZDcwMjcyYTdhZDA3NTdlYjBiY2JhNzk0MWVhMWI3Y2Y3MWFlLi5iOGM5MmYzMDlm
MTczZjViOWZhZWNkMmM1NjM0ZmFkODcyZmNkZDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAt
MjI1Miw3ICsyMjUyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNy
ZWF0ZUhlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamUKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShiaWdJbnQpOwogICAgIEFTU0VSVChiaWdJbnQuaXNCaWdJbnQzMigp
KTsKICAgICBpbnQzMl90IHZhbHVlID0gYmlnSW50LmJpZ0ludDMyQXNJbnQzMigpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIHZhbHVlKSk7Cisg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OmNy
ZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCB2YWx1ZSkpKTsKICNlbHNlCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShiaWdJbnQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyQXJlbmEuY3BwCmluZGV4IGFhYzA1NjY5MGU0MWVlZDBmYjY1OWVhYTQ0MmM5NTJm
NjU1MzczODAuLmM3MTk4ODYyNDFkMzU3YmYwZTM3YWE5YmE3MDg0Nzg0MGYxMjNmNDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuY3BwCkBAIC05Niw5ICs5
NiwxMCBAQCBjb25zdCBJZGVudGlmaWVyJiBJZGVudGlmaWVyQXJlbmE6Om1ha2VCaWdJbnREZWNp
bWFsSWRlbnRpZmllcihWTSYgdm0sIGNvbnN0IElkZQogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc2MjcKICAgICBKU0JpZ0ludCogaGVhcEJpZ0ludDsK
ICNpZiBVU0UoQklHSU5UMzIpCi0gICAgaWYgKGJpZ0ludC5pc0JpZ0ludDMyKCkpCi0gICAgICAg
IGhlYXBCaWdJbnQgPSBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgYmlnSW50LmJpZ0ludDMyQXNJ
bnQzMigpKTsKLSAgICBlbHNlCisgICAgaWYgKGJpZ0ludC5pc0JpZ0ludDMyKCkpIHsKKyAgICAg
ICAgaGVhcEJpZ0ludCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVGcm9tKHZtLCBiaWdJbnQuYmlnSW50
MzJBc0ludDMyKCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChoZWFwQmlnSW50KTsKKyAgICB9
IGVsc2UKICNlbmRpZgogICAgICAgICBoZWFwQmlnSW50ID0gYmlnSW50LmFzSGVhcEJpZ0ludCgp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRDb25z
dHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRDb25zdHJ1
Y3Rvci5jcHAKaW5kZXggNGZmYmZiYjk2ZGQxN2ZhZTE5NDdiNDZiYmM4MWQ5ODQyZGJjMGQwOS4u
N2UzZGU1ZWVhZGIxNmM5MTIxNjE2MjFmZDRjMmVmYmE5YWJmMzA5NyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50Q29uc3RydWN0b3IuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludENvbnN0cnVjdG9yLmNwcApAQCAtODcs
NyArODcsNyBAQCBKU1ZhbHVlIHRvQmlnSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgYXJndW1lbnQpCiAjaWYgVVNFKEJJR0lOVDMyKQogICAgICAgICByZXR1cm4ganNC
aWdJbnQzMihwcmltaXRpdmUuYXNCb29sZWFuKCkpOwogI2Vsc2UKLSAgICAgICAgcmV0dXJuIEpT
QmlnSW50OjpjcmVhdGVGcm9tKHZtLCBwcmltaXRpdmUuYXNCb29sZWFuKCkpOworICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTQmlnSW50OjpjcmVhdGVGcm9tKGdsb2JhbE9iamVj
dCwgcHJpbWl0aXZlLmFzQm9vbGVhbigpKSk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTExNiw3ICsx
MTYsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsQmlnSW50Q29u
c3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbAogI2lmIFVTRShCSUdJTlQzMikKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0JpZ0ludDMyKHByaW1pdGl2ZS5hc0ludDMyKCkp
KTsKICNlbHNlCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OmNyZWF0
ZUZyb20odm0sIHByaW1pdGl2ZS5hc0ludDMyKCkpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2Jq
ZWN0LCBwcmltaXRpdmUuYXNJbnQzMigpKSkpOwogI2VuZGlmCiAgICAgfQogCkBAIC0xMjQsNyAr
MTI0LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEJpZ0ludENv
bnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKICAgICAgICAgZG91YmxlIG51bWJlciA9
IHByaW1pdGl2ZS5hc0RvdWJsZSgpOwogICAgICAgICBpZiAoIWlzSW50ZWdlcihudW1iZXIpKQog
ICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVh
dGVSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgIk5vdCBhbiBpbnRlZ2VyIl9zKSk7Ci0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6Om1ha2VIZWFwQmlnSW50T3JCaWdJbnQz
Mih2bSwgcHJpbWl0aXZlLmFzRG91YmxlKCkpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6Om1ha2VIZWFwQmlnSW50T3JCaWdJbnQz
MihnbG9iYWxPYmplY3QsIHByaW1pdGl2ZS5hc0RvdWJsZSgpKSkpOwogICAgIH0KIAogICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKHRvQmlnSW50KGdsb2JhbE9i
amVjdCwgcHJpbWl0aXZlKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQmlnSW50UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0JpZ0ludFByb3RvdHlwZS5jcHAKaW5kZXggNGE0YjZlMmU5ODJlMDI4MzFkOWUxNmFjYjkxZGFl
ZGI0NjM3MzM3Yy4uMWQ4ZmMwMDI0YTE5NzgxZTNiYmY3ZGQzMmIyYjE0ZmMwMGIxMDljNiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50UHJvdG90eXBlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRQcm90b3R5cGUuY3Bw
CkBAIC03NCwxMiArNzQsMTUgQEAgdm9pZCBCaWdJbnRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqKQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgQUxX
QVlTX0lOTElORSBKU0JpZ0ludCogdG9UaGlzQmlnSW50VmFsdWUoVk0mIHZtLCBKU1ZhbHVlIHRo
aXNWYWx1ZSkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEpTQmlnSW50KiB0b1RoaXNCaWdJbnRWYWx1
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCiAjaWYgVVNFKEJJR0lOVDMyKQogICAgIC8vIEZJWE1FOiBoZWFw
LWFsbG9jYXRpbmcgYWxsIGJpZyBpbnRzIGlzIGlubmVmaWNpZW50LCBidXQgcmUtaW1wbGVtZW50
aW5nIHRvU3RyaW5nIGZvciBzbWFsbCBCaWdJbnRzIGlzIGVub3VnaCB3b3JrIHRoYXQgSSdtIGRl
ZmVycmluZyBpdCB0byBhIGxhdGVyIHBhdGNoLgogICAgIGlmICh0aGlzVmFsdWUuaXNCaWdJbnQz
MigpKQotICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIHRoaXNWYWx1ZS5i
aWdJbnQzMkFzSW50MzIoKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNC
aWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUuYmlnSW50MzJBc0ludDMy
KCkpKTsKICNlbmRpZgogCiAgICAgaWYgKHRoaXNWYWx1ZS5pc0NlbGwoKSkgewpAQCAtOTAsMTIg
KzkzLDEzIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTQmlnSW50KiB0b1RoaXNCaWdJbnRWYWx1
ZShWTSYgdm0sIEpTVmFsdWUgdGhpc1ZhbHVlKQogICAgICAgICAgICAgSlNWYWx1ZSBiaWdJbnQg
PSBiaWdJbnRPYmplY3QtPmludGVybmFsVmFsdWUoKTsKICNpZiBVU0UoQklHSU5UMzIpCiAgICAg
ICAgICAgICBpZiAoYmlnSW50LmlzQmlnSW50MzIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
SlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIGJpZ0ludC5iaWdJbnQzMkFzSW50MzIoKSk7CisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6Y3JlYXRlRnJv
bShnbG9iYWxPYmplY3QsIGJpZ0ludC5iaWdJbnQzMkFzSW50MzIoKSkpOwogI2VuZGlmCiAgICAg
ICAgICAgICByZXR1cm4gYmlnSW50LmFzSGVhcEJpZ0ludCgpOwogICAgICAgICB9CiAgICAgfQog
CisgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIid0aGlzJyB2YWx1ZSBt
dXN0IGJlIGEgQmlnSW50IG9yIEJpZ0ludE9iamVjdCJfcyk7CiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKQEAgLTEwNCw5ICsxMDgsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJp
Z0ludFByb3RvRnVuY1RvU3RyaW5nKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplYwogICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKLSAgICBKU0JpZ0ludCogdmFsdWUgPSB0b1RoaXNCaWdJbnRWYWx1ZSh2
bSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIid0aGlzJyB2YWx1ZSBt
dXN0IGJlIGEgQmlnSW50IG9yIEJpZ0ludE9iamVjdCJfcyk7CisgICAgSlNCaWdJbnQqIHZhbHVl
ID0gdG9UaGlzQmlnSW50VmFsdWUoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgQVNTRVJUKHZh
bHVlKTsKIApAQCAtMTI5LDkgKzEzMiw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YmlnSW50UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhCiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAotICAgIEpTQmlnSW50KiB2YWx1ZSA9IHRvVGhpc0JpZ0ludFZhbHVl
KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiJ3RoaXMnIHZhbHVl
IG11c3QgYmUgYSBCaWdJbnQgb3IgQmlnSW50T2JqZWN0Il9zKTsKKyAgICBKU0JpZ0ludCogdmFs
dWUgPSB0b1RoaXNCaWdJbnRWYWx1ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBhdXRvKiBu
dW1iZXJGb3JtYXQgPSBJbnRsTnVtYmVyRm9ybWF0OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+
bnVtYmVyRm9ybWF0U3RydWN0dXJlKCkpOwogICAgIG51bWJlckZvcm1hdC0+aW5pdGlhbGl6ZU51
bWJlckZvcm1hdChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIGNhbGxGcmFt
ZS0+YXJndW1lbnQoMSkpOwpAQCAtMTQ0LDkgKzE0Niw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYmlnSW50UHJvdG9GdW5jVmFsdWVPZihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEpTQmlnSW50KiB2YWx1ZSA9IHRvVGhpc0Jp
Z0ludFZhbHVlKHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIXZhbHVlKQot
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiJ3Ro
aXMnIHZhbHVlIG11c3QgYmUgYSBCaWdJbnQgb3IgQmlnSW50T2JqZWN0Il9zKTsKKyAgICBKU0Jp
Z0ludCogdmFsdWUgPSB0b1RoaXNCaWdJbnRWYWx1ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+
dGhpc1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAg
ICBJbnRlZ3JpdHk6OmF1ZGl0U3RydWN0dXJlSUQodm0sIHZhbHVlLT5zdHJ1Y3R1cmVJRCgpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAppbmRleCA2MDFkMDE5ZGY5M2Y4ZjJmOGNjNmMx
ZjU5MWE5NDE1NDhkYzA3ZmNiLi5mOWY2MjRiNDZlOTc1MGJmNDk3ODExZjM5MWFlNGE3NjI0NDdk
NTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBl
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3Bw
CkBAIC0xMjc5LDcgKzEyNzksOCBAQCBjbGFzcyBDYWNoZWRCaWdJbnQgOiBwdWJsaWMgVmFyaWFi
bGVMZW5ndGhPYmplY3Q8SlNCaWdJbnQ+IHsKIAogICAgIEpTQmlnSW50KiBkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikgY29uc3QKICAgICB7Ci0gICAgICAgIEpTQmlnSW50KiBiaWdJbnQgPSBKU0Jp
Z0ludDo6Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZChkZWNvZGVyLnZtKCksIG1fbGVuZ3RoKTsK
KyAgICAgICAgSlNCaWdJbnQqIGJpZ0ludCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVXaXRoTGVuZ3Ro
KGRlY29kZXIudm0oKSwgbV9sZW5ndGgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChiaWdJbnQp
OwogICAgICAgICBiaWdJbnQtPnNldFNpZ24obV9zaWduKTsKICAgICAgICAgaWYgKG1fbGVuZ3Ro
KQogICAgICAgICAgICAgbWVtY3B5KGJpZ0ludC0+ZGF0YVN0b3JhZ2UoKSwgdGhpcy0+YnVmZmVy
KCksIHNpemVvZihKU0JpZ0ludDo6RGlnaXQpICogbV9sZW5ndGgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKaW5kZXggYTM5YzEzNzU3
NTZmY2Q1OWYyNjQ1YjAwODE0YTYwYTg2OGZiMTlhYy4uMzAzNDRjMTIwZTJkYjM3M2MzZTA0ZDRi
NmY4NjhiNzU2ODAyMDhiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwCkBAIC01MzAsNyArNTMwLDggQEAgU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX25lZ2F0ZSkKIAogI2lmIFVTRShCSUdJTlQzMikKICAgICBpZiAocHJpbVZhbHVl
LmlzQmlnSW50MzIoKSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFy
eU1pbnVzKHZtLCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpOworICAgICAgICBKU1ZhbHVl
IHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKGdsb2JhbE9iamVjdCwgcHJpbVZhbHVlLmJp
Z0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgICAgIFJF
VFVSTl9XSVRIX1BST0ZJTElORyhyZXN1bHQsIHsKICAgICAgICAgICAgIHVwZGF0ZUFyaXRoUHJv
ZmlsZUZvclVuYXJ5QXJpdGhPcChtZXRhZGF0YSwgcmVzdWx0LCBvcGVyYW5kKTsKICAgICAgICAg
fSk7CkBAIC01MzgsNyArNTM5LDggQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25lZ2F0ZSkK
ICNlbmRpZgogCiAgICAgaWYgKHByaW1WYWx1ZS5pc0hlYXBCaWdJbnQoKSkgewotICAgICAgICBK
U1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFsdWUuYXNIZWFw
QmlnSW50KCkpOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVz
KGdsb2JhbE9iamVjdCwgcHJpbVZhbHVlLmFzSGVhcEJpZ0ludCgpKTsKKyAgICAgICAgQ0hFQ0tf
RVhDRVBUSU9OKCk7CiAgICAgICAgIFJFVFVSTl9XSVRIX1BST0ZJTElORyhyZXN1bHQsIHsKICAg
ICAgICAgICAgIHVwZGF0ZUFyaXRoUHJvZmlsZUZvclVuYXJ5QXJpdGhPcChtZXRhZGF0YSwgcmVz
dWx0LCBvcGVyYW5kKTsKICAgICAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuY3BwCmluZGV4IGFh
YmFlN2JlOWJmMTNjMzU2NjFiMjI5NDViMWIzYmQ0OTJlZDRlNmQuLjZkYWE4NmE5MGExOGMzNGFi
OTA0MzA1MTllZDJhYjJjODE2NDFiYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuY3BwCkBAIC05Niw4
ICs5Niw5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJG
b3JtYXRGdW5jRm9ybWF0KEpTR2xvYmFsT2JqZWN0KiBnCiAKICNpZiBVU0UoQklHSU5UMzIpCiAg
ICAgaWYgKGJpZ0ludE9yTnVtYmVyLmlzQmlnSW50MzIoKSkgewotICAgICAgICBKU0JpZ0ludCog
dmFsdWUgPSBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgYmlnSW50T3JOdW1iZXIuYmlnSW50MzJB
c0ludDMyKCkpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG51bWJlckZvcm1hdC0+
Zm9ybWF0KGdsb2JhbE9iamVjdCwgdmFsdWUpKTsKKyAgICAgICAgSlNCaWdJbnQqIHZhbHVlID0g
SlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCBiaWdJbnRPck51bWJlci5iaWdJbnQz
MkFzSW50MzIoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Cisg
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG51bWJlckZv
cm1hdC0+Zm9ybWF0KGdsb2JhbE9iamVjdCwgdmFsdWUpKSk7CiAgICAgfQogI2VuZGlmCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAppbmRleCA5MDQzMjlhNzIx
MGNmZWVlN2I1ZWFiNzZjMTRlYzAwN2RjYWYxMmI5Li4yYWJiNjE4NmQwYjNiMmE4OWY1ZjAyNmQ1
ZjdmZWEyZWI3MWVhYzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0JpZ0ludC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJ
bnQuY3BwCkBAIC04Miw0MiArODIsNjEgQEAgU3RydWN0dXJlKiBKU0JpZ0ludDo6Y3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWwKICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhIZWFwQmlnSW50VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU0Jp
Z0ludCogSlNCaWdJbnQ6OmNyZWF0ZVplcm8oVk0mIHZtKQoraW5saW5lIEpTQmlnSW50KiBKU0Jp
Z0ludDo6Y3JlYXRlWmVybyhKU0dsb2JhbE9iamVjdCogbnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09N
LCBWTSYgdm0pCiB7Ci0gICAgSlNCaWdJbnQqIHplcm9CaWdJbnQgPSBjcmVhdGVXaXRoTGVuZ3Ro
VW5jaGVja2VkKHZtLCAwKTsKLSAgICByZXR1cm4gemVyb0JpZ0ludDsKKyAgICByZXR1cm4gY3Jl
YXRlV2l0aExlbmd0aChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCAwKTsKIH0KIAotSlNC
aWdJbnQqIEpTQmlnSW50Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIHVuc2lnbmVkIGxlbmd0aCkKK0pTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlWmVy
byhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgcmV0dXJuIGNyZWF0ZVplcm8oZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPnZtKCkpOwor
fQorCitKU0JpZ0ludCogSlNCaWdJbnQ6OnRyeUNyZWF0ZVplcm8oVk0mIHZtKQoreworICAgIHJl
dHVybiBjcmVhdGVaZXJvKG51bGxwdHIsIHZtKTsKK30KIAoraW5saW5lIEpTQmlnSW50KiBKU0Jp
Z0ludDo6Y3JlYXRlV2l0aExlbmd0aChKU0dsb2JhbE9iamVjdCogbnVsbE9yR2xvYmFsT2JqZWN0
Rm9yT09NLCBWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKFVOTElLRUxZKGxlbmd0aCA+IG1heExlbmd0
aCkpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJCaWdJbnQgZ2VuZXJhdGVkIGZyb20gdGhpcyBvcGVyYXRpb24gaXMgdG9vIGJpZyJfcyk7Cisg
ICAgICAgIGlmIChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00pCisgICAgICAgICAgICB0aHJvd091
dE9mTWVtb3J5RXJyb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBzY29wZSwgIkJpZ0ludCBn
ZW5lcmF0ZWQgZnJvbSB0aGlzIG9wZXJhdGlvbiBpcyB0b28gYmlnIl9zKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgc2NvcGUucmVsZWFzZSgpOwotCi0gICAgcmV0dXJu
IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIGxlbmd0aCk7Ci19Ci0KLUpTQmlnSW50KiBK
U0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZChWTSYgdm0sIHVuc2lnbmVkIGxlbmd0
aCkKLXsKICAgICBBU1NFUlQobGVuZ3RoIDw9IG1heExlbmd0aCk7Ci0gICAgdm9pZCogZGF0YSA9
IEdpZ2FjYWdlOjptYWxsb2MoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbGVuZ3RoICogc2l6ZW9mKERp
Z2l0KSk7CisgICAgdm9pZCogZGF0YSA9IEdpZ2FjYWdlOjp0cnlNYWxsb2MoR2lnYWNhZ2U6OlBy
aW1pdGl2ZSwgbGVuZ3RoICogc2l6ZW9mKERpZ2l0KSk7CisgICAgaWYgKFVOTElLRUxZKCFkYXRh
KSkgeworICAgICAgICBpZiAobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NKQorICAgICAgICAgICAg
dGhyb3dPdXRPZk1lbW9yeUVycm9yKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgc2NvcGUpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CiAgICAgSlNCaWdJbnQqIGJpZ0ludCA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQmlnSW50Pih2bS5oZWFwKSkgSlNCaWdJbnQodm0s
IHZtLmJpZ0ludFN0cnVjdHVyZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxEaWdpdCo+KGRhdGEp
LCBsZW5ndGgpOwogICAgIGJpZ0ludC0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiBi
aWdJbnQ7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShWTSYgdm0sIGludDMy
X3QgdmFsdWUpCitKU0JpZ0ludCogSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgoVk0mIHZt
LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgcmV0dXJuIGNyZWF0ZVdpdGhMZW5ndGgobnVsbHB0
ciwgdm0sIGxlbmd0aCk7Cit9CisKK0pTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0
aChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAg
cmV0dXJuIGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPnZtKCks
IGxlbmd0aCk7Cit9CisKK2lubGluZSBKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oSlNH
bG9iYWxPYmplY3QqIG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgVk0mIHZtLCBpbnQzMl90IHZh
bHVlKQogewogICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBjcmVhdGVaZXJvKHZtKTsK
LSAgICAKLSAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2
bSwgMSk7CisgICAgICAgIHJldHVybiBjcmVhdGVaZXJvKG51bGxPckdsb2JhbE9iamVjdEZvck9P
TSwgdm0pOworCisgICAgSlNCaWdJbnQqIGJpZ0ludCA9IGNyZWF0ZVdpdGhMZW5ndGgobnVsbE9y
R2xvYmFsT2JqZWN0Rm9yT09NLCB2bSwgMSk7CisgICAgaWYgKFVOTElLRUxZKCFiaWdJbnQpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwogICAgIGlmICh2YWx1ZSA8IDApIHsKICAgICAgICAg
YmlnSW50LT5zZXREaWdpdCgwLCBzdGF0aWNfY2FzdDxEaWdpdD4oLTEgKiBzdGF0aWNfY2FzdDxp
bnQ2NF90Pih2YWx1ZSkpKTsKICAgICAgICAgYmlnSW50LT5zZXRTaWduKHRydWUpOwpAQCAtMTI3
LDMyICsxNDYsNTEgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKFZNJiB2bSwgaW50
MzJfdCB2YWx1ZSkKICAgICByZXR1cm4gYmlnSW50OwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6
OmNyZWF0ZUZyb20oVk0mIHZtLCB1aW50MzJfdCB2YWx1ZSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6
Y3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHZhbHVlKQog
eworICAgIHJldHVybiBjcmVhdGVGcm9tKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT52bSgp
LCB2YWx1ZSk7Cit9CisKK0pTQmlnSW50KiBKU0JpZ0ludDo6dHJ5Q3JlYXRlRnJvbShWTSYgdm0s
IGludDMyX3QgdmFsdWUpCit7CisgICAgcmV0dXJuIGNyZWF0ZUZyb20obnVsbHB0ciwgdm0sIHZh
bHVlKTsKK30KKworSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIHVpbnQzMl90IHZhbHVlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
ICAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gY3JlYXRlWmVybyh2bSk7CisgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY3JlYXRlWmVybyhnbG9iYWxPYmplY3QpKTsKICAg
ICAKLSAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwg
MSk7CisgICAgSlNCaWdJbnQqIGJpZ0ludCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0
LCAxKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBiaWdJ
bnQtPnNldERpZ2l0KDAsIHN0YXRpY19jYXN0PERpZ2l0Pih2YWx1ZSkpOwogICAgIHJldHVybiBi
aWdJbnQ7CiB9CiAKLWlubGluZSBKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb21JbXBsKFZN
JiB2bSwgdWludDY0X3QgdmFsdWUsIGJvb2wgc2lnbikKK2lubGluZSBKU0JpZ0ludCogSlNCaWdJ
bnQ6OmNyZWF0ZUZyb21JbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF90
IHZhbHVlLCBib29sIHNpZ24pCiB7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICghdmFs
dWUpCi0gICAgICAgIHJldHVybiBjcmVhdGVaZXJvKHZtKTsKKyAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBjcmVhdGVaZXJvKGdsb2JhbE9iamVjdCkpOwogCiAgICAgLy8gVGhpcyBw
YXRoIGlzIG5vdCBqdXN0IGFuIG9wdGltaXphdGlvbjogYmVjYXVzZSB3ZSBkbyBub3QgY2FsbCBy
aWdodFRyaW0gYXQgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLAogICAgIC8vIGl0IHdvdWxkIGJl
IGEgYnVnIHRvIGNyZWF0ZSBhIEJpZ0ludCB3aXRoIGxlbmd0aD0yIGluIHRoaXMgY2FzZS4KICAg
ICBpZiAoc2l6ZW9mKERpZ2l0KSA9PSA4IHx8IHZhbHVlIDw9IFVJTlQzMl9NQVgpIHsKLSAgICAg
ICAgSlNCaWdJbnQqIGJpZ0ludCA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIDEpOwor
ICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3Qs
IDEpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAg
ICAgYmlnSW50LT5zZXREaWdpdCgwLCBzdGF0aWNfY2FzdDxEaWdpdD4odmFsdWUpKTsKICAgICAg
ICAgYmlnSW50LT5zZXRTaWduKHNpZ24pOwogICAgICAgICByZXR1cm4gYmlnSW50OwogICAgIH0K
IAogICAgIEFTU0VSVChzaXplb2YoRGlnaXQpID09IDQpOwotICAgIEpTQmlnSW50KiBiaWdJbnQg
PSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCAyKTsKKyAgICBKU0JpZ0ludCogYmlnSW50
ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIDIpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIERpZ2l0IGxvd0JpdHMgID0gc3RhdGljX2Nhc3Q8
RGlnaXQ+KHZhbHVlICYgMHhmZmZmZmZmZik7CiAgICAgRGlnaXQgaGlnaEJpdHMgPSBzdGF0aWNf
Y2FzdDxEaWdpdD4oKHZhbHVlID4+IDMyKSAmIDB4ZmZmZmZmZmYpOwogCkBAIC0xNjUsMTIgKzIw
MywxMiBAQCBpbmxpbmUgSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tSW1wbChWTSYgdm0s
IHVpbnQ2NF90IHZhbHVlLCBib29sIHNpZ24pCiAgICAgcmV0dXJuIGJpZ0ludDsKIH0KIAotSlNC
aWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKFZNJiB2bSwgdWludDY0X3QgdmFsdWUpCitKU0Jp
Z0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
dWludDY0X3QgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUZyb21JbXBsKHZtLCB2YWx1ZSwg
ZmFsc2UpOworICAgIHJldHVybiBjcmVhdGVGcm9tSW1wbChnbG9iYWxPYmplY3QsIHZhbHVlLCBm
YWxzZSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShWTSYgdm0sIGludDY0
X3QgdmFsdWUpCitKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgaW50NjRfdCB2YWx1ZSkKIHsKICAgICB1aW50NjRfdCB1bnNpZ25lZFZh
bHVlOwogICAgIGJvb2wgc2lnbiA9IGZhbHNlOwpAQCAtMTc5LDI0ICsyMTcsMzEgQEAgSlNCaWdJ
bnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKFZNJiB2bSwgaW50NjRfdCB2YWx1ZSkKICAgICAgICAg
c2lnbiA9IHRydWU7CiAgICAgfSBlbHNlCiAgICAgICAgIHVuc2lnbmVkVmFsdWUgPSB2YWx1ZTsK
LSAgICByZXR1cm4gY3JlYXRlRnJvbUltcGwodm0sIHVuc2lnbmVkVmFsdWUsIHNpZ24pOworICAg
IHJldHVybiBjcmVhdGVGcm9tSW1wbChnbG9iYWxPYmplY3QsIHVuc2lnbmVkVmFsdWUsIHNpZ24p
OwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oVk0mIHZtLCBib29sIHZhbHVl
KQorSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGJvb2wgdmFsdWUpCiB7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICghdmFs
dWUpCi0gICAgICAgIHJldHVybiBjcmVhdGVaZXJvKHZtKTsKLSAgICAKLSAgICBKU0JpZ0ludCog
YmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgMSk7CisgICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgY3JlYXRlWmVybyhnbG9iYWxPYmplY3QpKTsKKworICAgIEpT
QmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgMSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgYmlnSW50LT5zZXREaWdp
dCgwLCBzdGF0aWNfY2FzdDxEaWdpdD4odmFsdWUpKTsKICAgICByZXR1cm4gYmlnSW50OwogfQog
Ci1KU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oVk0mIHZtLCBkb3VibGUgdmFsdWUpCitK
U0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgZG91YmxlIHZhbHVlKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBBU1NFUlQoaXNJ
bnRlZ2VyKHZhbHVlKSk7CiAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVpl
cm8odm0pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNyZWF0ZVplcm8oZ2xv
YmFsT2JqZWN0KSk7CiAKICAgICBib29sIHNpZ24gPSB2YWx1ZSA8IDA7IC8vIC0wIHdhcyBhbHJl
YWR5IGhhbmRsZWQgYWJvdmUuCiAgICAgdWludDY0X3QgZG91YmxlQml0cyA9IGJpdHdpc2VfY2Fz
dDx1aW50NjRfdD4odmFsdWUpOwpAQCAtMjA1LDcgKzI1MCw4IEBAIEpTQmlnSW50KiBKU0JpZ0lu
dDo6Y3JlYXRlRnJvbShWTSYgdm0sIGRvdWJsZSB2YWx1ZSkKICAgICBBU1NFUlQocmF3RXhwb25l
bnQgPj0gMHgzZmYpOyAvLyBTaW5jZSB2YWx1ZSBpcyBpbnRlZ2VyLCBleHBvbmVudCBzaG91bGQg
YmUgPj0gMCArIGJpYXMgKDB4M2ZmKS4KICAgICBpbnQzMl90IGV4cG9uZW50ID0gcmF3RXhwb25l
bnQgLSAweDNmZjsKICAgICBpbnQzMl90IGRpZ2l0cyA9IGV4cG9uZW50IC8gZGlnaXRCaXRzICsg
MTsKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwg
ZGlnaXRzKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxP
YmplY3QsIGRpZ2l0cyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7
CiAgICAgQVNTRVJUKHJlc3VsdCk7CiAgICAgcmVzdWx0LT5pbml0aWFsaXplKEluaXRpYWxpemF0
aW9uVHlwZTo6V2l0aFplcm8pOwogICAgIHJlc3VsdC0+c2V0U2lnbihzaWduKTsKQEAgLTI1OSw3
ICszMDUsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oVk0mIHZtLCBkb3VibGUg
dmFsdWUpCiAgICAgICAgICAgICBkaWdpdCA9IDA7CiAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQo
ZGlnaXRJbmRleCwgZGlnaXQpOwogICAgIH0KLSAgICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0o
dm0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0LT5yaWdodFRyaW0oZ2xv
YmFsT2JqZWN0KSk7CiB9CiAKIEpTVmFsdWUgSlNCaWdJbnQ6OnRvUHJpbWl0aXZlKEpTR2xvYmFs
T2JqZWN0KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3QKQEAgLTI3NCwxMSArMzIwLDEx
IEBAIEpTVmFsdWUgSlNCaWdJbnQ6OnBhcnNlSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cmluZ1ZpZXcgcywgRXJyb3JQYXJzCiAgICAgcmV0dXJuIHBhcnNlSW50KGdsb2JhbE9i
amVjdCwgcy5jaGFyYWN0ZXJzMTYoKSwgcy5sZW5ndGgoKSwgcGFyc2VyTW9kZSk7CiB9CiAKLUpT
VmFsdWUgSlNCaWdJbnQ6OnBhcnNlSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZN
JiB2bSwgU3RyaW5nVmlldyBzLCB1aW50OF90IHJhZGl4LCBFcnJvclBhcnNlTW9kZSBwYXJzZXJN
b2RlLCBQYXJzZUludFNpZ24gc2lnbikKK0pTVmFsdWUgSlNCaWdJbnQ6OnBhcnNlSW50KEpTR2xv
YmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIFZNJiB2bSwgU3RyaW5nVmlldyBz
LCB1aW50OF90IHJhZGl4LCBFcnJvclBhcnNlTW9kZSBwYXJzZXJNb2RlLCBQYXJzZUludFNpZ24g
c2lnbikKIHsKICAgICBpZiAocy5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIHBhcnNlSW50KGds
b2JhbE9iamVjdCwgdm0sIHMuY2hhcmFjdGVyczgoKSwgcy5sZW5ndGgoKSwgMCwgcmFkaXgsIHBh
cnNlck1vZGUsIHNpZ24sIFBhcnNlSW50TW9kZTo6RGlzYWxsb3dFbXB0eVN0cmluZyk7Ci0gICAg
cmV0dXJuIHBhcnNlSW50KGdsb2JhbE9iamVjdCwgdm0sIHMuY2hhcmFjdGVyczE2KCksIHMubGVu
Z3RoKCksIDAsIHJhZGl4LCBwYXJzZXJNb2RlLCBzaWduLCBQYXJzZUludE1vZGU6OkRpc2FsbG93
RW1wdHlTdHJpbmcpOworICAgICAgICByZXR1cm4gcGFyc2VJbnQobnVsbE9yR2xvYmFsT2JqZWN0
Rm9yT09NLCB2bSwgcy5jaGFyYWN0ZXJzOCgpLCBzLmxlbmd0aCgpLCAwLCByYWRpeCwgcGFyc2Vy
TW9kZSwgc2lnbiwgUGFyc2VJbnRNb2RlOjpEaXNhbGxvd0VtcHR5U3RyaW5nKTsKKyAgICByZXR1
cm4gcGFyc2VJbnQobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCB2bSwgcy5jaGFyYWN0ZXJzMTYo
KSwgcy5sZW5ndGgoKSwgMCwgcmFkaXgsIHBhcnNlck1vZGUsIHNpZ24sIFBhcnNlSW50TW9kZTo6
RGlzYWxsb3dFbXB0eVN0cmluZyk7CiB9CiAKIEpTVmFsdWUgSlNCaWdJbnQ6OnN0cmluZ1RvQmln
SW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cmluZ1ZpZXcgcykKQEAgLTMxOCw3
ICszNjQsOCBAQCBjbGFzcyBIZWFwQmlnSW50SW1wbCB7CiAgICAgQUxXQVlTX0lOTElORSBib29s
IHNpZ24oKSB7IHJldHVybiBtX2JpZ0ludC0+c2lnbigpOyB9CiAgICAgQUxXQVlTX0lOTElORSB1
bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2JpZ0ludC0+bGVuZ3RoKCk7IH0KICAgICBBTFdB
WVNfSU5MSU5FIEpTQmlnSW50OjpEaWdpdCBkaWdpdCh1bnNpZ25lZCBpKSB7IHJldHVybiBtX2Jp
Z0ludC0+ZGlnaXQoaSk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIEpTQmlnSW50KiB0b0hlYXBCaWdJ
bnQoVk0mKSB7IHJldHVybiBtX2JpZ0ludDsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQq
IHRvSGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCosIFZNJikgeyByZXR1cm4gbV9iaWdJbnQ7IH0K
KyAgICBBTFdBWVNfSU5MSU5FIEpTQmlnSW50KiB0b0hlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3Qq
KSB7IHJldHVybiBtX2JpZ0ludDsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBzdHJ1Y3QgSlNC
aWdJbnQ6OkltcGxSZXN1bHQ7CkBAIC0zNDMsNyArMzkwLDE1IEBAIGNsYXNzIEludDMyQmlnSW50
SW1wbCB7CiAgICAgICAgIHJldHVybiBtX3ZhbHVlOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJ
TkUgSlNCaWdJbnQqIHRvSGVhcEJpZ0ludChWTSYgdm0pIHsgcmV0dXJuIEpTQmlnSW50OjpjcmVh
dGVGcm9tKHZtLCBtX3ZhbHVlKTsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQqIHRvSGVh
cEJpZ0ludChKU0dsb2JhbE9iamVjdCogbnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBWTSYgdm0p
CisgICAgeworICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20obnVsbE9yR2xvYmFs
T2JqZWN0Rm9yT09NLCB2bSwgbV92YWx1ZSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBK
U0JpZ0ludCogdG9IZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAg
eworICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCBtX3Zh
bHVlKTsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIHN0cnVjdCBKU0JpZ0ludDo6SW1w
bFJlc3VsdDsKQEAgLTQwMiwxMyArNDU3LDEzIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUgdHJ5Q29udmVydFRvQmlnSW50MzIoSlNCaWdJbnQ6OkltcGxSZXN1bHQgaW1wbFJlc3VsCiAg
ICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGltcGxSZXN1bHQucGF5bG9hZC5hc0hlYXBC
aWdJbnQoKSk7CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTQmlnSW50OjpJbXBsUmVzdWx0
IHplcm9JbXBsKFZNJiB2bSkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEpTQmlnSW50OjpJbXBsUmVz
dWx0IHplcm9JbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAjaWYgVVNFKEJJ
R0lOVDMyKQotICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9i
amVjdCk7CiAgICAgcmV0dXJuIGpzQmlnSW50MzIoMCk7CiAjZWxzZQotICAgIHJldHVybiBKU0Jp
Z0ludDo6Y3JlYXRlWmVybyh2bSk7CisgICAgcmV0dXJuIEpTQmlnSW50OjpjcmVhdGVaZXJvKGds
b2JhbE9iamVjdCk7CiAjZW5kaWYKIH0KIApAQCAtNDMxLDcgKzQ4Niw3IEBAIEpTQmlnSW50OjpJ
bXBsUmVzdWx0IEpTQmlnSW50OjpleHBvbmVudGlhdGVJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEJpCiAKICAgICAvLyAyLiBJZiBiYXNlIGlzIDBuIGFuZCBleHBvbmVudCBpcyAw
biwgcmV0dXJuIDFuLgogICAgIGlmIChleHBvbmVudC5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJu
IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCAxKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIDEpKTsKICAgICAKICAg
ICAvLyAzLiBSZXR1cm4gYSBCaWdJbnQgcmVwcmVzZW50aW5nIHRoZSBtYXRoZW1hdGljYWwgdmFs
dWUgb2YgYmFzZSByYWlzZWQKICAgICAvLyAgICB0byB0aGUgcG93ZXIgZXhwb25lbnQuCkBAIC00
NDEsNyArNDk2LDcgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmV4cG9uZW50aWF0
ZUltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmkKICAgICBpZiAoYmFzZS5sZW5n
dGgoKSA9PSAxICYmIGJhc2UuZGlnaXQoMCkgPT0gMSkgewogICAgICAgICAvLyAoLTEpICoqIGV2
ZW5fbnVtYmVyID09IDEuCiAgICAgICAgIGlmIChiYXNlLnNpZ24oKSAmJiAhKGV4cG9uZW50LmRp
Z2l0KDApICYgMSkpCi0gICAgICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OnVuYXJ5TWludXNJbXBs
KHZtLCBiYXNlKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNCaWdJ
bnQ6OnVuYXJ5TWludXNJbXBsKGdsb2JhbE9iamVjdCwgYmFzZSkpOwogCiAgICAgICAgIC8vICgt
MSkgKiogb2RkX251bWJlciA9PSAtMTsgMSAqKiBhbnl0aGluZyA9PSAxLgogICAgICAgICByZXR1
cm4gYmFzZTsKQEAgLTQ2OCw3ICs1MjMsNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0lu
dDo6ZXhwb25lbnRpYXRlSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaQogICAg
IGlmIChiYXNlLmxlbmd0aCgpID09IDEgJiYgYmFzZS5kaWdpdCgwKSA9PSAyKSB7CiAgICAgICAg
IC8vIEZhc3QgcGF0aCBmb3IgMl5uLgogICAgICAgICBpbnQgbmVlZGVkRGlnaXRzID0gMSArIChu
IC8gZGlnaXRCaXRzKTsKLSAgICAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50Ojp0cnlD
cmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgbmVlZGVkRGlnaXRzKTsKKyAgICAgICAgSlNC
aWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwg
bmVlZGVkRGlnaXRzKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0
cik7CiAKICAgICAgICAgcmVzdWx0LT5pbml0aWFsaXplKEluaXRpYWxpemF0aW9uVHlwZTo6V2l0
aFplcm8pOwpAQCAtNDgzLDExICs1MzgsMTQgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJ
bnQ6OmV4cG9uZW50aWF0ZUltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmkKICAg
ICB9CiAKICAgICBKU0JpZ0ludCogcmVzdWx0ID0gbnVsbHB0cjsKLSAgICBKU0JpZ0ludCogcnVu
bmluZ1NxdWFyZSA9IGJhc2UudG9IZWFwQmlnSW50KHZtKTsKKyAgICBKU0JpZ0ludCogcnVubmlu
Z1NxdWFyZSA9IGJhc2UudG9IZWFwQmlnSW50KGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICAvLyBUaGlzIGltcGxpY2l0bHkgc2V0
cyB0aGUgcmVzdWx0J3Mgc2lnbiBjb3JyZWN0bHkuCi0gICAgaWYgKG4gJiAxKQotICAgICAgICBy
ZXN1bHQgPSBiYXNlLnRvSGVhcEJpZ0ludCh2bSk7CisgICAgaWYgKG4gJiAxKSB7CisgICAgICAg
IHJlc3VsdCA9IGJhc2UudG9IZWFwQmlnSW50KGdsb2JhbE9iamVjdCk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAgIH0KIAogICAgIG4gPj49IDE7CiAg
ICAgZm9yICg7IG47IG4gPj49IDEpIHsKQEAgLTU0OCw3ICs2MDYsNyBAQCBKU0JpZ0ludDo6SW1w
bFJlc3VsdCBKU0JpZ0ludDo6bXVsdGlwbHlJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEJpZ0ludAogICAgICAgICByZXR1cm4geTsKIAogICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0
aCA9IHgubGVuZ3RoKCkgKyB5Lmxlbmd0aCgpOwotICAgIEpTQmlnSW50KiByZXN1bHQgPSBKU0Jp
Z0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7Cisg
ICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9i
amVjdCwgcmVzdWx0TGVuZ3RoKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxs
cHRyKTsKICAgICByZXN1bHQtPmluaXRpYWxpemUoSW5pdGlhbGl6YXRpb25UeXBlOjpXaXRoWmVy
byk7CiAKQEAgLTU1Niw3ICs2MTQsNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6
bXVsdGlwbHlJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludAogICAgICAg
ICBtdWx0aXBseUFjY3VtdWxhdGUoeSwgeC5kaWdpdChpKSwgcmVzdWx0LCBpKTsKIAogICAgIHJl
c3VsdC0+c2V0U2lnbih4LnNpZ24oKSAhPSB5LnNpZ24oKSk7Ci0gICAgcmV0dXJuIHJlc3VsdC0+
cmlnaHRUcmltKHZtKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdC0+cmln
aHRUcmltKGdsb2JhbE9iamVjdCkpOwogfQogCiBKU1ZhbHVlIEpTQmlnSW50OjptdWx0aXBseShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCkBA
IC01OTAsMjQgKzY0OCwzMCBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6ZGl2aWRl
SW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbQogICAgIC8vIDMuIFJl
dHVybiBhIEJpZ0ludCByZXByZXNlbnRpbmcgcXVvdGllbnQgcm91bmRlZCB0b3dhcmRzIDAgdG8g
dGhlIG5leHQKICAgICAvLyAgICBpbnRlZ3JhbCB2YWx1ZS4KICAgICBpZiAoYWJzb2x1dGVDb21w
YXJlKHgsIHkpID09IENvbXBhcmlzb25SZXN1bHQ6Okxlc3NUaGFuKQotICAgICAgICByZXR1cm4g
emVyb0ltcGwodm0pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHplcm9JbXBs
KGdsb2JhbE9iamVjdCkpOwogCiAgICAgSlNCaWdJbnQqIHF1b3RpZW50ID0gbnVsbHB0cjsKICAg
ICBib29sIHJlc3VsdFNpZ24gPSB4LnNpZ24oKSAhPSB5LnNpZ24oKTsKICAgICBpZiAoeS5sZW5n
dGgoKSA9PSAxKSB7CiAgICAgICAgIERpZ2l0IGRpdmlzb3IgPSB5LmRpZ2l0KDApOwotICAgICAg
ICBpZiAoZGl2aXNvciA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFNpZ24gPT0geC5z
aWduKCkgPyBKU0JpZ0ludDo6SW1wbFJlc3VsdCB7IHggfSA6IEpTQmlnSW50Ojp1bmFyeU1pbnVz
SW1wbCh2bSwgeCk7CisgICAgICAgIGlmIChkaXZpc29yID09IDEpIHsKKyAgICAgICAgICAgIGlm
IChyZXN1bHRTaWduID09IHguc2lnbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBKU0JpZ0lu
dDo6SW1wbFJlc3VsdCB7IHggfTsKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgSlNCaWdJbnQ6OnVuYXJ5TWludXNJbXBsKGdsb2JhbE9iamVjdCwgeCkpOworICAgICAgICB9
CiAKICAgICAgICAgRGlnaXQgcmVtYWluZGVyOwotICAgICAgICBhYnNvbHV0ZURpdldpdGhEaWdp
dERpdmlzb3Iodm0sIHgsIGRpdmlzb3IsICZxdW90aWVudCwgcmVtYWluZGVyKTsKKyAgICAgICAg
YWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29yKGdsb2JhbE9iamVjdCwgdm0sIHgsIGRpdmlzb3Is
ICZxdW90aWVudCwgcmVtYWluZGVyKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgbnVsbHB0cik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYWJzb2x1dGVEaXZXaXRoQmlnSW50
RGl2aXNvcihnbG9iYWxPYmplY3QsIHgsIHkudG9IZWFwQmlnSW50KHZtKSwgJnF1b3RpZW50LCBu
dWxscHRyKTsKKyAgICAgICAgSlNCaWdJbnQqIHlCaWdJbnQgPSB5LnRvSGVhcEJpZ0ludChnbG9i
YWxPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsK
KyAgICAgICAgYWJzb2x1dGVEaXZXaXRoQmlnSW50RGl2aXNvcihnbG9iYWxPYmplY3QsIHgsIHlC
aWdJbnQsICZxdW90aWVudCwgbnVsbHB0cik7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIG51bGxwdHIpOwogICAgIH0KIAogICAgIHF1b3RpZW50LT5zZXRTaWduKHJlc3VsdFNp
Z24pOwotICAgIHJldHVybiBxdW90aWVudC0+cmlnaHRUcmltKHZtKTsKKyAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIHF1b3RpZW50LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAK
IEpTVmFsdWUgSlNCaWdJbnQ6OmRpdmlkZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCkBAIC02MjYsMTEgKzY5MCwxNiBAQCBKU1ZhbHVlIEpT
QmlnSW50OjpkaXZpZGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBK
U0JpZ0ludCogeSkKICNlbmRpZgogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KLUpT
QmlnSW50KiBKU0JpZ0ludDo6Y29weShWTSYgdm0sIEJpZ0ludEltcGwgeCkKK0pTQmlnSW50KiBK
U0JpZ0ludDo6Y29weShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsIHgp
CiB7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEFTU0VSVCgheC5pc1plcm8oKSk7CiAKLSAg
ICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQo
dm0sIHgubGVuZ3RoKCkpOworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3Ro
KGdsb2JhbE9iamVjdCwgeC5sZW5ndGgoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgbnVsbHB0cik7CisKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0LT5sZW5n
dGgoKTsgKytpKQogICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIHguZGlnaXQoaSkpOwogICAg
IHJlc3VsdC0+c2V0U2lnbih4LnNpZ24oKSk7CkBAIC02MzgsMTkgKzcwNywyNCBAQCBKU0JpZ0lu
dCogSlNCaWdJbnQ6OmNvcHkoVk0mIHZtLCBCaWdJbnRJbXBsIHgpCiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBCaWdJbnRJbXBsPgotSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnVuYXJ5
TWludXNJbXBsKFZNJiB2bSwgQmlnSW50SW1wbCB4KQorSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNC
aWdJbnQ6OnVuYXJ5TWludXNJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0lu
dEltcGwgeCkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKHguaXNaZXJvKCkpCi0g
ICAgICAgIHJldHVybiB6ZXJvSW1wbCh2bSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgemVyb0ltcGwoZ2xvYmFsT2JqZWN0KSk7CisKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0g
Y29weShnbG9iYWxPYmplY3QsIHgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51
bGxwdHIpOwogCi0gICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNvcHkodm0sIHgpOwogICAgIHJlc3Vs
dC0+c2V0U2lnbigheC5zaWduKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTVmFsdWUg
SlNCaWdJbnQ6OnVuYXJ5TWludXMoVk0mIHZtLCBKU0JpZ0ludCogeCkKK0pTVmFsdWUgSlNCaWdJ
bnQ6OnVuYXJ5TWludXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgp
CiB7Ci0gICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKHVuYXJ5TWludXNJbXBsKHZtLCBI
ZWFwQmlnSW50SW1wbCB7IHggfSkpOworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMih1
bmFyeU1pbnVzSW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9KSk7CiB9CiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CkBA
IC02NzQsMjIgKzc0OCwyNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6cmVtYWlu
ZGVySW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbgogICAgIGlmICh5Lmxl
bmd0aCgpID09IDEpIHsKICAgICAgICAgRGlnaXQgZGl2aXNvciA9IHkuZGlnaXQoMCk7CiAgICAg
ICAgIGlmIChkaXZpc29yID09IDEpCi0gICAgICAgICAgICByZXR1cm4gemVyb0ltcGwodm0pOwor
ICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB6ZXJvSW1wbChnbG9iYWxPYmpl
Y3QpKTsKIAogICAgICAgICBEaWdpdCByZW1haW5kZXJEaWdpdDsKLSAgICAgICAgYWJzb2x1dGVE
aXZXaXRoRGlnaXREaXZpc29yKHZtLCB4LCBkaXZpc29yLCBudWxscHRyLCByZW1haW5kZXJEaWdp
dCk7CisgICAgICAgIGFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcihnbG9iYWxPYmplY3QsIHZt
LCB4LCBkaXZpc29yLCBudWxscHRyLCByZW1haW5kZXJEaWdpdCk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCiAgICAgICAgIGlmICghcmVtYWluZGVyRGln
aXQpCi0gICAgICAgICAgICByZXR1cm4gemVyb0ltcGwodm0pOworICAgICAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCB6ZXJvSW1wbChnbG9iYWxPYmplY3QpKTsKIAotICAgICAgICBy
ZW1haW5kZXIgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCAxKTsKKyAgICAgICAgcmVt
YWluZGVyID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIDEpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgcmVtYWluZGVyLT5zZXRE
aWdpdCgwLCByZW1haW5kZXJEaWdpdCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYWJzb2x1dGVE
aXZXaXRoQmlnSW50RGl2aXNvcihnbG9iYWxPYmplY3QsIHgsIHkudG9IZWFwQmlnSW50KHZtKSwg
bnVsbHB0ciwgJnJlbWFpbmRlcik7CisgICAgICAgIEpTQmlnSW50KiB5QmlnSW50ID0geS50b0hl
YXBCaWdJbnQoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgbnVsbHB0cik7CisgICAgICAgIGFic29sdXRlRGl2V2l0aEJpZ0ludERpdmlzb3IoZ2xvYmFs
T2JqZWN0LCB4LCB5QmlnSW50LCBudWxscHRyLCAmcmVtYWluZGVyKTsKICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgfQogCiAgICAgcmVtYWluZGVyLT5z
ZXRTaWduKHguc2lnbigpKTsKLSAgICByZXR1cm4gcmVtYWluZGVyLT5yaWdodFRyaW0odm0pOwor
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVtYWluZGVyLT5yaWdodFRyaW0oZ2xvYmFs
T2JqZWN0KSk7CiB9CiBKU1ZhbHVlIEpTQmlnSW50OjpyZW1haW5kZXIoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQogewpAQCAtNzA5LDkgKzc4
OCwxMyBAQCBKU1ZhbHVlIEpTQmlnSW50OjpyZW1haW5kZXIoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgaW50MzJfdCB4LCBKU0JpZ0ludCogeQogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0lu
dEltcGw+CiBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6aW5jSW1wbChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsIHgpCiB7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KwogICAgIGlmICgheC5zaWduKCkpCi0gICAgICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShnbG9i
YWxPYmplY3QsIHgsIFNpZ25PcHRpb246OlVuc2lnbmVkKTsKKyAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBhYnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIHgsIFNpZ25PcHRpb246
OlVuc2lnbmVkKSk7CiAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGFic29sdXRlU3ViT25lKGdsb2Jh
bE9iamVjdCwgeCwgeC5sZW5ndGgoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
bnVsbHB0cik7CiAgICAgaWYgKHJlc3VsdC0+aXNaZXJvKCkpCiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgcmVzdWx0LT5zZXRTaWduKHRydWUpOwpAQCAtNzQ2LDcgKzgyOSw2IEBAIEpTVmFs
dWUgSlNCaWdJbnQ6OmRlYyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCog
eCkKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+
CiBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YWRkSW1wbChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewotICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBib29sIHhTaWduID0geC5zaWduKCk7CiAKICAg
ICAvLyB4ICsgeSA9PSB4ICsgeQpAQCAtNzU4LDkgKzg0MCw5IEBAIEpTQmlnSW50OjpJbXBsUmVz
dWx0IEpTQmlnSW50OjphZGRJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0lu
dEltcGwxCiAgICAgLy8gLXggKyB5ID09IHkgLSB4ID09IC0oeCAtIHkpCiAgICAgQ29tcGFyaXNv
blJlc3VsdCBjb21wYXJpc29uUmVzdWx0ID0gYWJzb2x1dGVDb21wYXJlKHgsIHkpOwogICAgIGlm
IChjb21wYXJpc29uUmVzdWx0ID09IENvbXBhcmlzb25SZXN1bHQ6OkdyZWF0ZXJUaGFuIHx8IGNv
bXBhcmlzb25SZXN1bHQgPT0gQ29tcGFyaXNvblJlc3VsdDo6RXF1YWwpCi0gICAgICAgIHJldHVy
biBhYnNvbHV0ZVN1Yih2bSwgeCwgeSwgeFNpZ24pOworICAgICAgICByZXR1cm4gYWJzb2x1dGVT
dWIoZ2xvYmFsT2JqZWN0LCB4LCB5LCB4U2lnbik7CiAKLSAgICByZXR1cm4gYWJzb2x1dGVTdWIo
dm0sIHksIHgsICF4U2lnbik7CisgICAgcmV0dXJuIGFic29sdXRlU3ViKGdsb2JhbE9iamVjdCwg
eSwgeCwgIXhTaWduKTsKIH0KIEpTVmFsdWUgSlNCaWdJbnQ6OmFkZChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCiB7CkBAIC03ODAsNyArODYy
LDYgQEAgSlNWYWx1ZSBKU0JpZ0ludDo6YWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGludDMyX3QgeCwgSlNCaWdJbnQqIHkpCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEs
IHR5cGVuYW1lIEJpZ0ludEltcGwyPgogSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnN1
YkltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50
SW1wbDIgeSkKIHsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYm9vbCB4
U2lnbiA9IHguc2lnbigpOwogICAgIGlmICh4U2lnbiAhPSB5LnNpZ24oKSkgewogICAgICAgICAv
LyB4IC0gKC15KSA9PSB4ICsgeQpAQCAtNzkxLDkgKzg3Miw5IEBAIEpTQmlnSW50OjpJbXBsUmVz
dWx0IEpTQmlnSW50OjpzdWJJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0lu
dEltcGwxCiAgICAgLy8gKC14KSAtICgteSkgPT0geSAtIHggPT0gLSh4IC0geSkKICAgICBDb21w
YXJpc29uUmVzdWx0IGNvbXBhcmlzb25SZXN1bHQgPSBhYnNvbHV0ZUNvbXBhcmUoeCwgeSk7CiAg
ICAgaWYgKGNvbXBhcmlzb25SZXN1bHQgPT0gQ29tcGFyaXNvblJlc3VsdDo6R3JlYXRlclRoYW4g
fHwgY29tcGFyaXNvblJlc3VsdCA9PSBDb21wYXJpc29uUmVzdWx0OjpFcXVhbCkKLSAgICAgICAg
cmV0dXJuIGFic29sdXRlU3ViKHZtLCB4LCB5LCB4U2lnbik7CisgICAgICAgIHJldHVybiBhYnNv
bHV0ZVN1YihnbG9iYWxPYmplY3QsIHgsIHksIHhTaWduKTsKIAotICAgIHJldHVybiBhYnNvbHV0
ZVN1Yih2bSwgeSwgeCwgIXhTaWduKTsKKyAgICByZXR1cm4gYWJzb2x1dGVTdWIoZ2xvYmFsT2Jq
ZWN0LCB5LCB4LCAheFNpZ24pOwogfQogCiBKU1ZhbHVlIEpTQmlnSW50OjpzdWIoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQpAQCAtODE3LDEw
ICs4OTgsOCBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6Yml0d2lzZUFuZEltcGwo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSQogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
LSAgICBpZiAoIXguc2lnbigpICYmICF5LnNpZ24oKSkgewotICAgICAgICBzY29wZS5yZWxlYXNl
KCk7Ci0gICAgICAgIHJldHVybiBhYnNvbHV0ZUFuZCh2bSwgeCwgeSk7Ci0gICAgfQorICAgIGlm
ICgheC5zaWduKCkgJiYgIXkuc2lnbigpKQorICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIGFic29sdXRlQW5kKGdsb2JhbE9iamVjdCwgeCwgeSkpOwogICAgIAogICAgIGlmICh4LnNp
Z24oKSAmJiB5LnNpZ24oKSkgewogICAgICAgICBpbnQgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgo
eC5sZW5ndGgoKSwgeS5sZW5ndGgoKSkgKyAxOwpAQCAtODMxLDkgKzkxMCw5IEBAIEpTQmlnSW50
OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpiaXR3aXNlQW5kSW1wbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBCaWdJCiAKICAgICAgICAgSlNCaWdJbnQqIHkxID0gYWJzb2x1dGVTdWJPbmUo
Z2xvYmFsT2JqZWN0LCB5LCB5Lmxlbmd0aCgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgbnVsbHB0cik7Ci0gICAgICAgIHJlc3VsdCA9IGFic29sdXRlT3Iodm0sIEhlYXBC
aWdJbnRJbXBsIHsgcmVzdWx0IH0sIEhlYXBCaWdJbnRJbXBsIHsgeTEgfSk7Ci0gICAgICAgIHNj
b3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVj
dCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKKyAgICAg
ICAgcmVzdWx0ID0gYWJzb2x1dGVPcihnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcmVz
dWx0IH0sIEhlYXBCaWdJbnRJbXBsIHsgeTEgfSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIG51bGxwdHIpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGFi
c29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgU2ln
bk9wdGlvbjo6U2lnbmVkKSk7CiAgICAgfQogCiAgICAgQVNTRVJUKHguc2lnbigpICE9IHkuc2ln
bigpKTsKQEAgLTg0Myw3ICs5MjIsNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6
Yml0d2lzZUFuZEltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSQogICAgICAg
ICBBU1NFUlQoeS5zaWduKCkpOyAKICAgICAgICAgSlNCaWdJbnQqIHkxID0gYWJzb2x1dGVTdWJP
bmUoZ2xvYmFsT2JqZWN0LCB5LCB5Lmxlbmd0aCgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgbnVsbHB0cik7Ci0gICAgICAgIHJldHVybiBhYnNvbHV0ZUFuZE5vdCh2bSwg
eCwgSGVhcEJpZ0ludEltcGwgeyB5MSB9KTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBhYnNvbHV0ZUFuZE5vdChnbG9iYWxPYmplY3QsIHgsIEhlYXBCaWdJbnRJbXBsIHsgeTEg
fSkpOwogICAgIH07CiAgICAgaWYgKHguc2lnbigpKQogICAgICAgICByZXR1cm4gY29tcHV0ZVJl
c3VsdCh5LCB4KTsKQEAgLTg3MywxMCArOTUyLDggQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNC
aWdJbnQ6OmJpdHdpc2VPckltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW4K
IAogICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IHN0ZDo6bWF4KHgubGVuZ3RoKCksIHkubGVu
Z3RoKCkpOwogCi0gICAgaWYgKCF4LnNpZ24oKSAmJiAheS5zaWduKCkpIHsKLSAgICAgICAgc2Nv
cGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gYWJzb2x1dGVPcih2bSwgeCwgeSk7Ci0gICAg
fQorICAgIGlmICgheC5zaWduKCkgJiYgIXkuc2lnbigpKQorICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIGFic29sdXRlT3IoZ2xvYmFsT2JqZWN0LCB4LCB5KSk7CiAgICAgCiAgICAg
aWYgKHguc2lnbigpICYmIHkuc2lnbigpKSB7CiAgICAgICAgIC8vICgteCkgfCAoLXkpID09IH4o
eC0xKSB8IH4oeS0xKSA9PSB+KCh4LTEpICYgKHktMSkpCkBAIC04ODUsMTEgKzk2Miw5IEBAIEpT
QmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpiaXR3aXNlT3JJbXBsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEJpZ0luCiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IG51bGxwdHIpOwogICAgICAgICBKU0JpZ0ludCogeTEgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxP
YmplY3QsIHksIHkubGVuZ3RoKCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKLSAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVBbmQodm0sIEhlYXBCaWdJbnRJ
bXBsIHsgcmVzdWx0IH0sIEhlYXBCaWdJbnRJbXBsIHsgeTEgfSk7CisgICAgICAgIHJlc3VsdCA9
IGFic29sdXRlQW5kKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgSGVh
cEJpZ0ludEltcGwgeyB5MSB9KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
bnVsbHB0cik7Ci0KLSAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gYWJz
b2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWdu
T3B0aW9uOjpTaWduZWQpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGFic29s
dXRlQWRkT25lKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgU2lnbk9w
dGlvbjo6U2lnbmVkKSk7CiAgICAgfQogICAgIAogICAgIEFTU0VSVCh4LnNpZ24oKSAhPSB5LnNp
Z24oKSk7CkBAIC05MDEsMTAgKzk3Niw5IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50
OjpiaXR3aXNlT3JJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0luCiAKICAg
ICAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeSwg
cmVzdWx0TGVuZ3RoKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0
cik7Ci0gICAgICAgIHJlc3VsdCA9IGFic29sdXRlQW5kTm90KHZtLCBIZWFwQmlnSW50SW1wbCB7
IHJlc3VsdCB9LCB4KTsKLQotICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVy
biBhYnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0s
IFNpZ25PcHRpb246OlNpZ25lZCk7CisgICAgICAgIHJlc3VsdCA9IGFic29sdXRlQW5kTm90KGds
b2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgeCk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyBy
ZXN1bHQgfSwgU2lnbk9wdGlvbjo6U2lnbmVkKSk7CiAgICAgfTsKIAogICAgIGlmICh4LnNpZ24o
KSkKQEAgLTkzMywxMCArMTAwNyw4IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojpi
aXR3aXNlWG9ySW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJCiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAotICAgIGlmICgheC5zaWduKCkgJiYgIXkuc2lnbigpKSB7Ci0gICAgICAg
IHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGFic29sdXRlWG9yKHZtLCB4LCB5KTsK
LSAgICB9CisgICAgaWYgKCF4LnNpZ24oKSAmJiAheS5zaWduKCkpCisgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVYb3IoZ2xvYmFsT2JqZWN0LCB4LCB5KSk7CiAgICAg
CiAgICAgaWYgKHguc2lnbigpICYmIHkuc2lnbigpKSB7CiAgICAgICAgIGludCByZXN1bHRMZW5n
dGggPSBzdGQ6Om1heCh4Lmxlbmd0aCgpLCB5Lmxlbmd0aCgpKTsKQEAgLTk0Niw5ICsxMDE4LDcg
QEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VYb3JJbXBsKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0kKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CiAgICAgICAgIEpTQmlnSW50KiB5MSA9IGFic29sdXRlU3ViT25lKGds
b2JhbE9iamVjdCwgeSwgeS5sZW5ndGgoKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIG51bGxwdHIpOwotCi0gICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0
dXJuIGFic29sdXRlWG9yKHZtLCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBIZWFwQmlnSW50
SW1wbCB7IHkxIH0pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGFic29sdXRl
WG9yKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgSGVhcEJpZ0ludElt
cGwgeyB5MSB9KSk7CiAgICAgfQogICAgIEFTU0VSVCh4LnNpZ24oKSAhPSB5LnNpZ24oKSk7CiAg
ICAgaW50IHJlc3VsdExlbmd0aCA9IHN0ZDo6bWF4KHgubGVuZ3RoKCksIHkubGVuZ3RoKCkpICsg
MTsKQEAgLTk2MCw5ICsxMDMwLDkgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmJp
dHdpc2VYb3JJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0kKICAgICAgICAg
SlNCaWdJbnQqIHJlc3VsdCA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeSwgcmVzdWx0
TGVuZ3RoKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAK
LSAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVYb3Iodm0sIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0
IH0sIHgpOwotICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBhYnNvbHV0
ZUFkZE9uZShnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIFNpZ25PcHRp
b246OlNpZ25lZCk7CisgICAgICAgIHJlc3VsdCA9IGFic29sdXRlWG9yKGdsb2JhbE9iamVjdCwg
SGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgeCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIG51bGxwdHIpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGFi
c29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgU2ln
bk9wdGlvbjo6U2lnbmVkKSk7CiAgICAgfTsKICAgICAKICAgICAvLyBBc3N1bWUgdGhhdCB4IGlz
IHRoZSBwb3NpdGl2ZSBCaWdJbnQuCkBAIC0xMzc0LDIxICsxNDQ0LDI1IEBAIHRlbXBsYXRlIDx0
eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CiBKU0JpZ0ludDo6SW1w
bFJlc3VsdCBKU0JpZ0ludDo6YWJzb2x1dGVBZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwgYm9vbCByZXN1bHRTaWduKQogewogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoeC5sZW5ndGgoKSA8IHkubGVuZ3RoKCkpCi0gICAg
ICAgIHJldHVybiBhYnNvbHV0ZUFkZChnbG9iYWxPYmplY3QsIHksIHgsIHJlc3VsdFNpZ24pOwor
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGFic29sdXRlQWRkKGdsb2JhbE9iamVj
dCwgeSwgeCwgcmVzdWx0U2lnbikpOwogCiAgICAgaWYgKHguaXNaZXJvKCkpIHsKICAgICAgICAg
QVNTRVJUKHkuaXNaZXJvKCkpOwogICAgICAgICByZXR1cm4geDsKICAgICB9CiAKLSAgICBpZiAo
eS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdFNpZ24gPT0geC5zaWduKCkgPyB4IDog
dW5hcnlNaW51c0ltcGwodm0sIHgpOworICAgIGlmICh5LmlzWmVybygpKSB7CisgICAgICAgIGlm
IChyZXN1bHRTaWduID09IHguc2lnbigpKQorICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdW5hcnlNaW51c0ltcGwoZ2xvYmFsT2JqZWN0LCB4
KSk7CisgICAgfQogCi0gICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVX
aXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgeC5sZW5ndGgoKSArIDEpOwotICAgIGlmICghcmVzdWx0
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRl
V2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHgubGVuZ3RoKCkgKyAxKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKyAgICBBU1NFUlQocmVzdWx0KTsKICAgICBEaWdp
dCBjYXJyeSA9IDA7CiAgICAgdW5zaWduZWQgaSA9IDA7CiAgICAgZm9yICg7IGkgPCB5Lmxlbmd0
aCgpOyBpKyspIHsKQEAgLTE0MDksMTIgKzE0ODMsMTUgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQg
SlNCaWdJbnQ6OmFic29sdXRlQWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0lu
dEkKICAgICByZXN1bHQtPnNldERpZ2l0KGksIGNhcnJ5KTsKICAgICByZXN1bHQtPnNldFNpZ24o
cmVzdWx0U2lnbik7CiAKLSAgICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0odm0pOworICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7
CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1w
bDI+Ci1KU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YWJzb2x1dGVTdWIoVk0mIHZtLCBC
aWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LCBib29sIHJlc3VsdFNpZ24pCitKU0JpZ0ludDo6
SW1wbFJlc3VsdCBKU0JpZ0ludDo6YWJzb2x1dGVTdWIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwgYm9vbCByZXN1bHRTaWduKQogewor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICBDb21wYXJpc29uUmVzdWx0IGNvbXBhcmlzb25SZXN1
bHQgPSBhYnNvbHV0ZUNvbXBhcmUoeCwgeSk7CiAgICAgQVNTRVJUKHgubGVuZ3RoKCkgPj0geS5s
ZW5ndGgoKSk7CiAgICAgQVNTRVJUKGNvbXBhcmlzb25SZXN1bHQgPT0gQ29tcGFyaXNvblJlc3Vs
dDo6R3JlYXRlclRoYW4gfHwgY29tcGFyaXNvblJlc3VsdCA9PSBDb21wYXJpc29uUmVzdWx0OjpF
cXVhbCk7CkBAIC0xNDI0LDEzICsxNTAxLDE3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmln
SW50OjphYnNvbHV0ZVN1YihWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHksCiAg
ICAgICAgIHJldHVybiB4OwogICAgIH0KIAotICAgIGlmICh5LmlzWmVybygpKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0U2lnbiA9PSB4LnNpZ24oKSA/IEltcGxSZXN1bHQgeyB4IH0gOiBKU0JpZ0lu
dDo6dW5hcnlNaW51c0ltcGwodm0sIHgpOworICAgIGlmICh5LmlzWmVybygpKSB7CisgICAgICAg
IGlmIChyZXN1bHRTaWduID09IHguc2lnbigpKQorICAgICAgICAgICAgcmV0dXJuIEltcGxSZXN1
bHQgeyB4IH07CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNCaWdJbnQ6OnVu
YXJ5TWludXNJbXBsKGdsb2JhbE9iamVjdCwgeCkpOworICAgIH0KIAogICAgIGlmIChjb21wYXJp
c29uUmVzdWx0ID09IENvbXBhcmlzb25SZXN1bHQ6OkVxdWFsKQotICAgICAgICByZXR1cm4gemVy
b0ltcGwodm0pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHplcm9JbXBsKGds
b2JhbE9iamVjdCkpOwogCi0gICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50OjpjcmVhdGVX
aXRoTGVuZ3RoVW5jaGVja2VkKHZtLCB4Lmxlbmd0aCgpKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0
ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHgubGVuZ3RoKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgRGlnaXQgYm9ycm93ID0gMDsK
ICAgICB1bnNpZ25lZCBpID0gMDsKQEAgLTE0NTEsNyArMTUzMiw3IEBAIEpTQmlnSW50OjpJbXBs
UmVzdWx0IEpTQmlnSW50OjphYnNvbHV0ZVN1YihWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0lu
dEltcGwyIHksCiAKICAgICBBU1NFUlQoIWJvcnJvdyk7CiAgICAgcmVzdWx0LT5zZXRTaWduKHJl
c3VsdFNpZ24pOwotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0K
IAogLy8gRGl2aWRlcyB7eH0gYnkge2Rpdmlzb3J9LCByZXR1cm5pbmcgdGhlIHJlc3VsdCBpbiB7
cXVvdGllbnR9IGFuZCB7cmVtYWluZGVyfS4KQEAgLTE0NjIsMjIgKzE1NDMsMzAgQEAgSlNCaWdJ
bnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFic29sdXRlU3ViKFZNJiB2bSwgQmlnSW50SW1wbDEg
eCwgQmlnSW50SW1wbDIgeSwKIC8vIHtxdW90aWVudH0gY2FuIGJlIHRoZSBzYW1lIGFzIHt4fSBm
b3IgYW4gaW4tcGxhY2UgZGl2aXNpb24uIHtxdW90aWVudH0gY2FuCiAvLyBhbHNvIGJlIG51bGxw
dHIgaWYgdGhlIGNhbGxlciBpcyBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIHJlbWFpbmRlci4KIHRl
bXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgotdm9pZCBKU0JpZ0ludDo6YWJzb2x1dGVEaXZX
aXRoRGlnaXREaXZpc29yKFZNJiB2bSwgQmlnSW50SW1wbCB4LCBEaWdpdCBkaXZpc29yLCBKU0Jp
Z0ludCoqIHF1b3RpZW50LCBEaWdpdCYgcmVtYWluZGVyKQorYm9vbCBKU0JpZ0ludDo6YWJzb2x1
dGVEaXZXaXRoRGlnaXREaXZpc29yKEpTR2xvYmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmplY3RG
b3JPT00sIFZNJiB2bSwgQmlnSW50SW1wbCB4LCBEaWdpdCBkaXZpc29yLCBKU0JpZ0ludCoqIHF1
b3RpZW50LCBEaWdpdCYgcmVtYWluZGVyKQogewogICAgIEFTU0VSVChkaXZpc29yKTsKIAogICAg
IEFTU0VSVCgheC5pc1plcm8oKSk7CiAgICAgcmVtYWluZGVyID0gMDsKICAgICBpZiAoZGl2aXNv
ciA9PSAxKSB7Ci0gICAgICAgIGlmIChxdW90aWVudCkKLSAgICAgICAgICAgICpxdW90aWVudCA9
IHgudG9IZWFwQmlnSW50KHZtKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAocXVvdGll
bnQpIHsKKyAgICAgICAgICAgIEpTQmlnSW50KiByZXN1bHQgPSB4LnRvSGVhcEJpZ0ludChudWxs
T3JHbG9iYWxPYmplY3RGb3JPT00sIHZtKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVz
dWx0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAqcXVvdGll
bnQgPSByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAg
ICAgdW5zaWduZWQgbGVuZ3RoID0geC5sZW5ndGgoKTsKICAgICBpZiAocXVvdGllbnQpIHsKLSAg
ICAgICAgaWYgKCpxdW90aWVudCA9PSBudWxscHRyKQotICAgICAgICAgICAgKnF1b3RpZW50ID0g
SlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIGxlbmd0aCk7CisgICAgICAg
IGlmICgqcXVvdGllbnQgPT0gbnVsbHB0cikgeworICAgICAgICAgICAgSlNCaWdJbnQqIHJlc3Vs
dCA9IGNyZWF0ZVdpdGhMZW5ndGgobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCB2bSwgbGVuZ3Ro
KTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAqcXVvdGllbnQgPSByZXN1bHQ7CisgICAgICAgIH0K
IAogICAgICAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAg
ICAgICAgIERpZ2l0IHEgPSBkaWdpdERpdihyZW1haW5kZXIsIHguZGlnaXQoaSksIGRpdmlzb3Is
IHJlbWFpbmRlcik7CkBAIC0xNDg3LDYgKzE1NzYsNyBAQCB2b2lkIEpTQmlnSW50OjphYnNvbHV0
ZURpdldpdGhEaWdpdERpdmlzb3IoVk0mIHZtLCBCaWdJbnRJbXBsIHgsIERpZ2l0IGRpdmlzb3Is
CiAgICAgICAgIGZvciAoaW50IGkgPSBsZW5ndGggLSAxOyBpID49IDA7IGktLSkKICAgICAgICAg
ICAgIGRpZ2l0RGl2KHJlbWFpbmRlciwgeC5kaWdpdChpKSwgZGl2aXNvciwgcmVtYWluZGVyKTsK
ICAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8vIERpdmlkZXMge2RpdmlkZW5kfSBieSB7
ZGl2aXNvcn0sIHJldHVybmluZyB0aGUgcmVzdWx0IGluIHtxdW90aWVudH0gYW5kCkBAIC0xNTEy
LDEyICsxNjAyLDE0IEBAIHZvaWQgSlNCaWdJbnQ6OmFic29sdXRlRGl2V2l0aEJpZ0ludERpdmlz
b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50CiAgICAgCiAgICAgLy8gVGhl
IHF1b3RpZW50IHRvIGJlIGNvbXB1dGVkLgogICAgIEpTQmlnSW50KiBxID0gbnVsbHB0cjsKLSAg
ICBpZiAocXVvdGllbnQgIT0gbnVsbHB0cikKLSAgICAgICAgcSA9IGNyZWF0ZVdpdGhMZW5ndGhV
bmNoZWNrZWQoZ2xvYmFsT2JqZWN0LT52bSgpLCBtICsgMSk7CisgICAgaWYgKHF1b3RpZW50ICE9
IG51bGxwdHIpIHsKKyAgICAgICAgcSA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCBt
ICsgMSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAg
fQogICAgIAogICAgIC8vIEluIGVhY2ggaXRlcmF0aW9uLCB7cWhhdHZ9IGhvbGRzIHtkaXZpc29y
fSAqIHtjdXJyZW50IHF1b3RpZW50IGRpZ2l0fS4KICAgICAvLyAidiIgaXMgdGhlIGJvb2sncyBu
YW1lIGZvciB7ZGl2aXNvcn0sICJxaGF0IiB0aGUgY3VycmVudCBxdW90aWVudCBkaWdpdC4KLSAg
ICBKU0JpZ0ludCogcWhhdHYgPSB0cnlDcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgbiAr
IDEpOworICAgIEpTQmlnSW50KiBxaGF0diA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0
LCBuICsgMSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAK
ICAgICAvLyBEMS4KQEAgLTE2NjcsMTQgKzE3NTksMTYgQEAgdm9pZCBKU0JpZ0ludDo6aW5wbGFj
ZVJpZ2h0U2hpZnQodW5zaWduZWQgc2hpZnQpCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1w
bD4KIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVMZWZ0U2hpZnRBbHdheXNDb3B5KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCwgdW5zaWduZWQgc2hpZnQsIExl
ZnRTaGlmdE1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgQVNTRVJUKHNo
aWZ0IDwgZGlnaXRCaXRzKTsKICAgICBBU1NFUlQoIXguaXNaZXJvKCkpOwogCiAgICAgdW5zaWdu
ZWQgbiA9IHgubGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0gbW9kZSA9PSBM
ZWZ0U2hpZnRNb2RlOjpBbHdheXNBZGRPbmVEaWdpdCA/IG4gKyAxIDogbjsKLSAgICBKU0JpZ0lu
dCogcmVzdWx0ID0gdHJ5Q3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3VsdExlbmd0
aCk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIEpTQmln
SW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3Ro
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgaWYgKCFzaGlm
dCkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbjsgaSsrKQpAQCAtMTcxNiw4
ICsxODEwLDExIEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVMZWZ0U2hpZnRBbHdheXND
b3B5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpCiAvLyAgICAgICAgICAgICAgICAg
ICB2ICAgICB2ICAgICB2ICAgICB2CiAvLyByZXN1bHQ6IFsgIDAgXVsgeDMgXVsgcjIgXVsgcjEg
XVsgcjAgXQogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJ
bXBsMiwgdHlwZW5hbWUgQml0d2lzZU9wPgotaW5saW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJz
b2x1dGVCaXR3aXNlT3AoVk0mIHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LCBFeHRy
YURpZ2l0c0hhbmRsaW5nIGV4dHJhRGlnaXRzLCBCaXR3aXNlT3AmJiBvcCkKK2lubGluZSBKU0Jp
Z0ludCogSlNCaWdJbnQ6OmFic29sdXRlQml0d2lzZU9wKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHksIEV4dHJhRGlnaXRzSGFuZGxpbmcg
ZXh0cmFEaWdpdHMsIEJpdHdpc2VPcCYmIG9wKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAg
ICB1bnNpZ25lZCB4TGVuZ3RoID0geC5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCB5TGVuZ3RoID0g
eS5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCBudW1QYWlycyA9IHlMZW5ndGg7CkBAIC0xNzMwLDcg
KzE4MjcsOCBAQCBpbmxpbmUgSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUJpdHdpc2VPcChW
TSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyCiAgICAgQVNTRVJUKG51bVBhaXJzID09
IHN0ZDo6bWluKHhMZW5ndGgsIHlMZW5ndGgpKTsKICAgICBBU1NFUlQobWF4TGVuZ3RoID09IHN0
ZDo6bWF4KHhMZW5ndGgsIHlMZW5ndGgpKTsKICAgICB1bnNpZ25lZCByZXN1bHRMZW5ndGggPSBl
eHRyYURpZ2l0cyA9PSBFeHRyYURpZ2l0c0hhbmRsaW5nOjpDb3B5ID8gbWF4TGVuZ3RoIDogbnVt
UGFpcnM7Ci0gICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQo
dm0sIHJlc3VsdExlbmd0aCk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5n
dGgoZ2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIG51bGxwdHIpOwogICAgIHVuc2lnbmVkIGkgPSAwOwogICAgIGZvciAoOyBpIDwgbnVt
UGFpcnM7IGkrKykKICAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCBvcCh4LmRpZ2l0KGkpLCB5
LmRpZ2l0KGkpKSk7CkBAIC0xNzQ4LDU4ICsxODQ2LDY1IEBAIGlubGluZSBKU0JpZ0ludCogSlNC
aWdJbnQ6OmFic29sdXRlQml0d2lzZU9wKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1w
bDIKICAgICBmb3IgKDsgaSA8IHJlc3VsdExlbmd0aDsgaSsrKQogICAgICAgICByZXN1bHQtPnNl
dERpZ2l0KGksIDApOwogCi0gICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKKyAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdCkp
OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludElt
cGwyPgotSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUFuZChWTSYgdm0sIEJpZ0ludEltcGwx
IHgsIEJpZ0ludEltcGwyIHkpCitKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQW5kKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7
CiAgICAgYXV0byBkaWdpdE9wZXJhdGlvbiA9IFtdKERpZ2l0IGEsIERpZ2l0IGIpIHsKICAgICAg
ICAgcmV0dXJuIGEgJiBiOwogICAgIH07Ci0gICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9wKHZt
LCB4LCB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nOjpTa2lwLCBkaWdpdE9wZXJhdGlvbik7CisgICAg
cmV0dXJuIGFic29sdXRlQml0d2lzZU9wKGdsb2JhbE9iamVjdCwgeCwgeSwgRXh0cmFEaWdpdHNI
YW5kbGluZzo6U2tpcCwgZGlnaXRPcGVyYXRpb24pOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
QmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgotSlNCaWdJbnQqIEpTQmlnSW50Ojph
YnNvbHV0ZU9yKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKK0pTQmlnSW50
KiBKU0JpZ0ludDo6YWJzb2x1dGVPcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJ
bnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewogICAgIGF1dG8gZGlnaXRPcGVyYXRpb24gPSBb
XShEaWdpdCBhLCBEaWdpdCBiKSB7CiAgICAgICAgIHJldHVybiBhIHwgYjsKICAgICB9OwotICAg
IHJldHVybiBhYnNvbHV0ZUJpdHdpc2VPcCh2bSwgeCwgeSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6
Q29weSwgZGlnaXRPcGVyYXRpb24pOworICAgIHJldHVybiBhYnNvbHV0ZUJpdHdpc2VPcChnbG9i
YWxPYmplY3QsIHgsIHksIEV4dHJhRGlnaXRzSGFuZGxpbmc6OkNvcHksIGRpZ2l0T3BlcmF0aW9u
KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJ
bXBsMj4KLUpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVBbmROb3QoVk0mIHZtLCBCaWdJbnRJ
bXBsMSB4LCBCaWdJbnRJbXBsMiB5KQorSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUFuZE5v
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBs
MiB5KQogewogICAgIC8vIHggJiB+eQogCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIHVuc2ln
bmVkIHhMZW5ndGggPSB4Lmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIHlMZW5ndGggPSB5Lmxlbmd0
aCgpOwogICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IHhMZW5ndGg7CiAKLSAgICBKU0JpZ0lu
dCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgcmVzdWx0TGVuZ3RoKTsK
KyAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHJl
c3VsdExlbmd0aCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAg
ICAgdW5zaWduZWQgaSA9IDA7CiAgICAgZm9yICg7IGkgPCBzdGQ6Om1pbih4TGVuZ3RoLCB5TGVu
Z3RoKTsgaSsrKQogICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIHguZGlnaXQoaSkgJiB+eS5k
aWdpdChpKSk7CiAgICAgZm9yICg7IGkgPCByZXN1bHRMZW5ndGg7ICsraSkKICAgICAgICAgcmVz
dWx0LT5zZXREaWdpdChpLCB4LmRpZ2l0KGkpKTsKIAotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0
VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJp
bShnbG9iYWxPYmplY3QpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0
eXBlbmFtZSBCaWdJbnRJbXBsMj4KLUpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVYb3IoVk0m
IHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQorSlNCaWdJbnQqIEpTQmlnSW50Ojph
YnNvbHV0ZVhvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBC
aWdJbnRJbXBsMiB5KQogewogICAgIGF1dG8gZGlnaXRPcGVyYXRpb24gPSBbXShEaWdpdCBhLCBE
aWdpdCBiKSB7CiAgICAgICAgIHJldHVybiBhIF4gYjsKICAgICB9OwotICAgIHJldHVybiBhYnNv
bHV0ZUJpdHdpc2VPcCh2bSwgeCwgeSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6Q29weSwgZGlnaXRP
cGVyYXRpb24pOworICAgIHJldHVybiBhYnNvbHV0ZUJpdHdpc2VPcChnbG9iYWxPYmplY3QsIHgs
IHksIEV4dHJhRGlnaXRzSGFuZGxpbmc6OkNvcHksIGRpZ2l0T3BlcmF0aW9uKTsKIH0KICAgICAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgogSlNCaWdJbnQqIEpTQmlnSW50OjphYnNv
bHV0ZUFkZE9uZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsIHgsIFNp
Z25PcHRpb24gc2lnbk9wdGlvbikKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgdW5zaWdu
ZWQgaW5wdXRMZW5ndGggPSB4Lmxlbmd0aCgpOwogICAgIC8vIFRoZSBhZGRpdGlvbiB3aWxsIG92
ZXJmbG93IGludG8gYSBuZXcgZGlnaXQgaWYgYWxsIGV4aXN0aW5nIGRpZ2l0cyBhcmUKICAgICAv
LyBhdCBtYXhpbXVtLgpAQCAtMTgxMiw5ICsxOTE3LDggQEAgSlNCaWdJbnQqIEpTQmlnSW50Ojph
YnNvbHV0ZUFkZE9uZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsIHgs
IFMKICAgICB9CiAKICAgICB1bnNpZ25lZCByZXN1bHRMZW5ndGggPSBpbnB1dExlbmd0aCArIHdp
bGxPdmVyZmxvdzsKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gdHJ5Q3JlYXRlV2l0aExlbmd0aChn
bG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGds
b2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKIAogICAgIERpZ2l0IGNhcnJ5ID0gMTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaW5wdXRMZW5ndGg7IGkrKykgewpAQCAtMTgyOCw3ICsxOTMyLDcgQEAgSlNCaWdJ
bnQqIEpTQmlnSW50OjphYnNvbHV0ZUFkZE9uZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBCaWdJbnRJbXBsIHgsIFMKICAgICAgICAgQVNTRVJUKCFjYXJyeSk7CiAKICAgICByZXN1bHQt
PnNldFNpZ24oc2lnbk9wdGlvbiA9PSBTaWduT3B0aW9uOjpTaWduZWQpOwotICAgIHJldHVybiBy
ZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QtPnZtKCkpOworICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgcmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIHRlbXBs
YXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgpAQCAtMTgzOSw3ICsxOTQzLDcgQEAgSlNCaWdJbnQq
IEpTQmlnSW50OjphYnNvbHV0ZVN1Yk9uZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBC
aWdJbnRJbXBsIHgsIHUKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNCaWdJbnQqIHJlc3Vs
dCA9IHRyeUNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgpOworICAg
IEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0
TGVuZ3RoKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHgubGVuZ3RoKCk7CkBAIC0xODUzLDcgKzE5NTcsNyBAQCBKU0Jp
Z0ludCogSlNCaWdJbnQ6OmFic29sdXRlU3ViT25lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEJpZ0ludEltcGwgeCwgdQogICAgIGZvciAodW5zaWduZWQgaSA9IGxlbmd0aDsgaSA8IHJl
c3VsdExlbmd0aDsgaSsrKQogICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIGJvcnJvdyk7CiAK
LSAgICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0odm0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgcmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CkBAIC0xODc5LDcg
KzE5ODMsNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6bGVmdFNoaWZ0QnlBYnNv
bHV0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gdHJ5Q3JlYXRlV2l0aExlbmd0aChn
bG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0
ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIGlmICghYml0c1NoaWZ0KSB7CiAgICAgICAg
IHVuc2lnbmVkIGkgPSAwOwpAQCAtMTkwNiwyNSArMjAxMCwyNyBAQCBKU0JpZ0ludDo6SW1wbFJl
c3VsdCBKU0JpZ0ludDo6bGVmdFNoaWZ0QnlBYnNvbHV0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LAogICAgIH0KIAogICAgIHJlc3VsdC0+c2V0U2lnbih4LnNpZ24oKSk7Ci0gICAgcmV0
dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgogSlNCaWdJbnQ6OkltcGxSZXN1
bHQgSlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHgubGVuZ3RoKCk7CiAgICAgYm9vbCBzaWduID0g
eC5zaWduKCk7CiAgICAgYXV0byBvcHRpb25hbFNoaWZ0ID0gdG9TaGlmdEFtb3VudCh5KTsKICAg
ICBpZiAoIW9wdGlvbmFsU2hpZnQpCi0gICAgICAgIHJldHVybiByaWdodFNoaWZ0QnlNYXhpbXVt
KHZtLCBzaWduKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByaWdodFNoaWZ0
QnlNYXhpbXVtKGdsb2JhbE9iamVjdCwgc2lnbikpOwogCiAgICAgRGlnaXQgc2hpZnQgPSAqb3B0
aW9uYWxTaGlmdDsKICAgICB1bnNpZ25lZCBkaWdpdGFsU2hpZnQgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc2hpZnQgLyBkaWdpdEJpdHMpOwogICAgIHVuc2lnbmVkIGJpdHNTaGlmdCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzaGlmdCAlIGRpZ2l0Qml0cyk7CiAgICAgaW50IHJlc3VsdExlbmd0
aCA9IGxlbmd0aCAtIGRpZ2l0YWxTaGlmdDsKICAgICBpZiAocmVzdWx0TGVuZ3RoIDw9IDApCi0g
ICAgICAgIHJldHVybiByaWdodFNoaWZ0QnlNYXhpbXVtKHZtLCBzaWduKTsKKyAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByaWdodFNoaWZ0QnlNYXhpbXVtKGdsb2JhbE9iamVjdCwg
c2lnbikpOwogCiAgICAgLy8gRm9yIG5lZ2F0aXZlIG51bWJlcnMsIHJvdW5kIGRvd24gaWYgYW55
IGJpdCB3YXMgc2hpZnRlZCBvdXQgKHNvIHRoYXQgZS5nLgogICAgIC8vIC01biA+PiAxbiA9PSAt
M24gYW5kIG5vdCAtMm4pLiBDaGVjayBub3cgd2hldGhlciB0aGlzIHdpbGwgaGFwcGVuIGFuZApA
QCAtMTk1NSw3ICsyMDYxLDkgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnJpZ2h0
U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QKICAgICB9CiAKICAg
ICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdExlbmd0aCkgPD0gbGVuZ3RoKTsK
LSAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdExlbmd0aCkpOworICAgIEpTQmlnSW50KiByZXN1bHQg
PSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJl
c3VsdExlbmd0aCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwor
CiAgICAgaWYgKCFiaXRzU2hpZnQpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGlnaXRh
bFNoaWZ0OyBpIDwgbGVuZ3RoOyBpKyspCiAgICAgICAgICAgICByZXN1bHQtPnNldERpZ2l0KGkg
LSBkaWdpdGFsU2hpZnQsIHguZGlnaXQoaSkpOwpAQCAtMTk3NSwyMCArMjA4MywyMSBAQCBKU0Jp
Z0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5QWJzb2x1dGUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdAogICAgICAgICBpZiAobXVzdFJvdW5kRG93bikgewogICAgICAg
ICAgICAgLy8gU2luY2UgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgcm91bmRpbmcgZG93biBtZWFu
cyBhZGRpbmcgb25lIHRvCiAgICAgICAgICAgICAvLyBpdHMgYWJzb2x1dGUgdmFsdWUuIFRoaXMg
Y2Fubm90IG92ZXJmbG93LgotICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5yaWdodFRyaW0o
dm0pOwotICAgICAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgSGVh
cEJpZ0ludEltcGwgeyByZXN1bHQgfSwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKKyAgICAgICAgICAg
IHJlc3VsdCA9IHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50
SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpKTsKICAgICAgICAgfQogICAgIH0K
IAotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0KIAotSlNCaWdJ
bnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeU1heGltdW0oVk0mIHZtLCBib29s
IHNpZ24pCitKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5TWF4aW11
bShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBib29sIHNpZ24pCiB7CiAgICAgaWYgKHNp
Z24pCi0gICAgICAgIHJldHVybiBjcmVhdGVGcm9tKHZtLCAtMSk7CisgICAgICAgIHJldHVybiBj
cmVhdGVGcm9tKGdsb2JhbE9iamVjdCwgLTEpOwogCi0gICAgcmV0dXJuIGNyZWF0ZVplcm8odm0p
OworICAgIHJldHVybiBjcmVhdGVaZXJvKGdsb2JhbE9iamVjdCk7CiB9CiAKIC8vIExvb2t1cCB0
YWJsZSBmb3IgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJpdHMgcmVxdWlyZWQgcGVyIGNoYXJhY3Rl
ciBvZiBhCkBAIC0yMDM0LDcgKzIxNDMsNyBAQCB1aW50NjRfdCBKU0JpZ0ludDo6Y2FsY3VsYXRl
TWF4aW11bUNoYXJhY3RlcnNSZXF1aXJlZCh1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkCiAgICAg
cmV0dXJuIG1heGltdW1DaGFyYWN0ZXJzUmVxdWlyZWQ7CiB9CiAKLVN0cmluZyBKU0JpZ0ludDo6
dG9TdHJpbmdCYXNlUG93ZXJPZlR3byhWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQmlnSW50KiB4LCB1bnNpZ25lZCByYWRpeCkKK1N0cmluZyBKU0JpZ0ludDo6dG9TdHJp
bmdCYXNlUG93ZXJPZlR3byhWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmpl
Y3RGb3JPT00sIEpTQmlnSW50KiB4LCB1bnNpZ25lZCByYWRpeCkKIHsKICAgICBBU1NFUlQoaGFz
T25lQml0U2V0KHJhZGl4KSk7CiAgICAgQVNTRVJUKHJhZGl4ID49IDIgJiYgcmFkaXggPD0gMzIp
OwpAQCAtMjA1NCw5ICsyMTYzLDkgQEAgU3RyaW5nIEpTQmlnSW50Ojp0b1N0cmluZ0Jhc2VQb3dl
ck9mVHdvKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlMKICAgICBjb25z
dCBzaXplX3QgY2hhcnNSZXF1aXJlZCA9IChiaXRMZW5ndGggKyBiaXRzUGVyQ2hhciAtIDEpIC8g
Yml0c1BlckNoYXIgKyBzaWduOwogCiAgICAgaWYgKGNoYXJzUmVxdWlyZWQgPiBKU1N0cmluZzo6
TWF4TGVuZ3RoKSB7Ci0gICAgICAgIGlmIChnbG9iYWxPYmplY3QpIHsKKyAgICAgICAgaWYgKG51
bGxPckdsb2JhbE9iamVjdEZvck9PTSkgewogICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUpOyAgICAgICAgICAgIAorICAgICAgICAgICAgdGhyb3dPdXRPZk1l
bW9yeUVycm9yKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgc2NvcGUpOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CkBAIC0yMDk2LDcgKzIyMDUsNyBAQCBTdHJp
bmcgSlNCaWdJbnQ6OnRvU3RyaW5nQmFzZVBvd2VyT2ZUd28oVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKUwogICAgIHJldHVybiBTdHJpbmdJbXBsOjphZG9wdChXVEZNb3Zl
KHJlc3VsdFN0cmluZykpOwogfQogCi1TdHJpbmcgSlNCaWdJbnQ6OnRvU3RyaW5nR2VuZXJpYyhW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCB1bnNpZ25l
ZCByYWRpeCkKK1N0cmluZyBKU0JpZ0ludDo6dG9TdHJpbmdHZW5lcmljKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgSlNCaWdJbnQqIHgsIHVuc2lnbmVk
IHJhZGl4KQogewogICAgIC8vIEZJWE1FOiBbSlNDXSBSZXZpc2l0IHVzYWdlIG9mIFZlY3RvciBp
bnRvIEpTQmlnSW50Ojp0b1N0cmluZwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODA2NzEKQEAgLTIxMTIsOSArMjIyMSw5IEBAIFN0cmluZyBKU0JpZ0lu
dDo6dG9TdHJpbmdHZW5lcmljKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNCaWdJbnQqCiAgICAgdWludDY0X3QgbWF4aW11bUNoYXJhY3RlcnNSZXF1aXJlZCA9IGNhbGN1
bGF0ZU1heGltdW1DaGFyYWN0ZXJzUmVxdWlyZWQobGVuZ3RoLCByYWRpeCwgeC0+ZGlnaXQobGVu
Z3RoIC0gMSksIHNpZ24pOwogCiAgICAgaWYgKG1heGltdW1DaGFyYWN0ZXJzUmVxdWlyZWQgPiBK
U1N0cmluZzo6TWF4TGVuZ3RoKSB7Ci0gICAgICAgIGlmIChnbG9iYWxPYmplY3QpIHsKKyAgICAg
ICAgaWYgKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSkgewogICAgICAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9y
eUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOyAgICAgICAgICAgIAorICAgICAgICAgICAgdGhy
b3dPdXRPZk1lbW9yeUVycm9yKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgc2NvcGUpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CkBAIC0yMTQwLDcgKzIyNDks
OSBAQCBTdHJpbmcgSlNCaWdJbnQ6OnRvU3RyaW5nR2VuZXJpYyhWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KgogICAgICAgICBKU0JpZ0ludCoqIGRpdmlkZW5k
ID0gJng7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIERpZ2l0IGNodW5rOwotICAgICAgICAg
ICAgYWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29yKHZtLCBIZWFwQmlnSW50SW1wbCB7ICpkaXZp
ZGVuZCB9LCBjaHVua0Rpdmlzb3IsICZyZXN0LCBjaHVuayk7CisgICAgICAgICAgICBib29sIHN1
Y2Nlc3MgPSBhYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9y
T09NLCB2bSwgSGVhcEJpZ0ludEltcGwgeyAqZGl2aWRlbmQgfSwgY2h1bmtEaXZpc29yLCAmcmVz
dCwgY2h1bmspOworICAgICAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKICAgICAgICAgICAgIGRpdmlkZW5kID0gJnJlc3Q7CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2h1bmtDaGFyczsgaSsrKSB7CiAgICAgICAgICAg
ICAgICAgcmVzdWx0U3RyaW5nLmFwcGVuZChyYWRpeERpZ2l0c1tjaHVuayAlIHJhZGl4XSk7CkBA
IC0yMTgxLDcgKzIyOTIsNyBAQCBTdHJpbmcgSlNCaWdJbnQ6OnRvU3RyaW5nR2VuZXJpYyhWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KgogICAgIHJldHVybiBT
dHJpbmdJbXBsOjphZG9wdChXVEZNb3ZlKHJlc3VsdFN0cmluZykpOwogfQogCi1KU0JpZ0ludCog
SlNCaWdJbnQ6OnJpZ2h0VHJpbShWTSYgdm0pCitKU0JpZ0ludCogSlNCaWdJbnQ6OnJpZ2h0VHJp
bShKU0dsb2JhbE9iamVjdCogbnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBWTSYgdm0pCiB7CiAg
ICAgaWYgKGlzWmVybygpKSB7CiAgICAgICAgIEFTU0VSVCghc2lnbigpKTsKQEAgLTIxOTMsMjIg
KzIzMDQsMzYgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpyaWdodFRyaW0oVk0mIHZtKQogICAgICAg
ICBub25aZXJvSW5kZXgtLTsKIAogICAgIGlmIChub25aZXJvSW5kZXggPCAwKQotICAgICAgICBy
ZXR1cm4gY3JlYXRlWmVybyh2bSk7CisgICAgICAgIHJldHVybiBjcmVhdGVaZXJvKG51bGxPckds
b2JhbE9iamVjdEZvck9PTSwgdm0pOwogCiAgICAgaWYgKG5vblplcm9JbmRleCA9PSBzdGF0aWNf
Y2FzdDxpbnQ+KG1fbGVuZ3RoIC0gMSkpCiAgICAgICAgIHJldHVybiB0aGlzOwogCiAgICAgdW5z
aWduZWQgbmV3TGVuZ3RoID0gbm9uWmVyb0luZGV4ICsgMTsKLSAgICBKU0JpZ0ludCogdHJpbW1l
ZEJpZ0ludCA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIG5ld0xlbmd0aCk7Ci0gICAg
c3RkOjpjb3B5KGRhdGFTdG9yYWdlKCksIGRhdGFTdG9yYWdlKCkgKyBuZXdMZW5ndGgsIHRyaW1t
ZWRCaWdJbnQtPmRhdGFTdG9yYWdlKCkpOyAKKyAgICBKU0JpZ0ludCogdHJpbW1lZEJpZ0ludCA9
IGNyZWF0ZVdpdGhMZW5ndGgobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCB2bSwgbmV3TGVuZ3Ro
KTsKKyAgICBpZiAoVU5MSUtFTFkoIXRyaW1tZWRCaWdJbnQpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBzdGQ6OmNvcHkoZGF0YVN0b3JhZ2UoKSwgZGF0YVN0b3JhZ2UoKSArIG5ld0xl
bmd0aCwgdHJpbW1lZEJpZ0ludC0+ZGF0YVN0b3JhZ2UoKSk7CiAKICAgICB0cmltbWVkQmlnSW50
LT5zZXRTaWduKHRoaXMtPnNpZ24oKSk7CiAKICAgICByZXR1cm4gdHJpbW1lZEJpZ0ludDsKIH0K
IAotSlNCaWdJbnQqIEpTQmlnSW50OjphbGxvY2F0ZUZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBWTSYgdm0sIHVuc2lnbmVkIHJhZGl4LCB1bnNpZ25lZCBjaGFyY291bnQpCitKU0Jp
Z0ludCogSlNCaWdJbnQ6OnJpZ2h0VHJpbShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQog
eworICAgIHJldHVybiByaWdodFRyaW0oZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPnZtKCkp
OworfQorCitKU0JpZ0ludCogSlNCaWdJbnQ6OnRyeVJpZ2h0VHJpbShWTSYgdm0pCit7CisgICAg
cmV0dXJuIHJpZ2h0VHJpbShudWxscHRyLCB2bSk7Cit9CisKK0pTQmlnSW50KiBKU0JpZ0ludDo6
YWxsb2NhdGVGb3IoSlNHbG9iYWxPYmplY3QqIG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgVk0m
IHZtLCB1bnNpZ25lZCByYWRpeCwgdW5zaWduZWQgY2hhcmNvdW50KQoreworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEFTU0VSVCgyIDw9IHJhZGl4ICYm
IHJhZGl4IDw9IDM2KTsKIAogICAgIHNpemVfdCBiaXRzUGVyQ2hhciA9IG1heEJpdHNQZXJDaGFy
VGFibGVbcmFkaXhdOwpAQCAtMjIyMiwxNyArMjM0NywxNCBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6
OmFsbG9jYXRlRm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgdW5zaWdu
ZWQgcgogICAgICAgICBpZiAoYml0c01pbiA8PSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1heEludCkp
IHsKICAgICAgICAgICAgIC8vIERpdmlkZSBieSBrRGlnaXRzQml0cywgcm91bmRpbmcgdXAuCiAg
ICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSAoYml0c01pbiArIGRpZ2l0Qml0cyAtIDEpIC8g
ZGlnaXRCaXRzOwotICAgICAgICAgICAgaWYgKGxlbmd0aCA8PSBtYXhMZW5ndGgpIHsKLSAgICAg
ICAgICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhV
bmNoZWNrZWQodm0sIGxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChsZW5ndGggPD0gbWF4TGVuZ3RoKQorICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY3JlYXRlV2l0aExlbmd0aChudWxs
T3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCBsZW5ndGgpKTsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGlmIChnbG9iYWxPYmplY3QpIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgIkJpZ0ludCBnZW5lcmF0ZWQgZnJvbSB0aGlzIG9wZXJhdGlvbiBpcyB0b28gYmln
Il9zKTsKLSAgICB9CisgICAgaWYgKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSkKKyAgICAgICAg
dGhyb3dPdXRPZk1lbW9yeUVycm9yKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgc2NvcGUsICJC
aWdJbnQgZ2VuZXJhdGVkIGZyb20gdGhpcyBvcGVyYXRpb24gaXMgdG9vIGJpZyJfcyk7CisKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtMjI5MCw3ICsyNDEyLDcgQEAgSlNWYWx1ZSBKU0Jp
Z0ludDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2hhclR5cGUqICBk
YXRhLCB1bnNpZ24KIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgotSlNWYWx1ZSBK
U0JpZ0ludDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBD
aGFyVHlwZSogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNp
Z25lZCByYWRpeCwgRXJyb3JQYXJzZU1vZGUgZXJyb3JQYXJzZU1vZGUsIFBhcnNlSW50U2lnbiBz
aWduLCBQYXJzZUludE1vZGUgcGFyc2VNb2RlKQorSlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJbnQo
SlNHbG9iYWxPYmplY3QqIG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgVk0mIHZtLCBDaGFyVHlw
ZSogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBzdGFydEluZGV4LCB1bnNpZ25lZCBy
YWRpeCwgRXJyb3JQYXJzZU1vZGUgZXJyb3JQYXJzZU1vZGUsIFBhcnNlSW50U2lnbiBzaWduLCBQ
YXJzZUludE1vZGUgcGFyc2VNb2RlKQogewogICAgIEFTU0VSVChsZW5ndGggPj0gMCk7CiAgICAg
dW5zaWduZWQgcCA9IHN0YXJ0SW5kZXg7CkBAIC0yMjk4LDkgKzI0MjAsOSBAQCBKU1ZhbHVlIEpT
QmlnSW50OjpwYXJzZUludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIENo
YXJUeXBlKiBkYXRhLAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIGlmIChwYXJzZU1vZGUgIT0gUGFyc2VJbnRNb2RlOjpBbGxvd0VtcHR5U3RyaW5nICYm
IHN0YXJ0SW5kZXggPT0gbGVuZ3RoKSB7Ci0gICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOwor
ICAgICAgICBBU1NFUlQobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NKTsKICAgICAgICAgaWYgKGVy
cm9yUGFyc2VNb2RlID09IEVycm9yUGFyc2VNb2RlOjpUaHJvd0V4Y2VwdGlvbnMpCi0gICAgICAg
ICAgICB0aHJvd1ZNRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlU3ludGF4RXJyb3Io
Z2xvYmFsT2JqZWN0LCAiRmFpbGVkIHRvIHBhcnNlIFN0cmluZyB0byBCaWdJbnQiKSk7CisgICAg
ICAgICAgICB0aHJvd1ZNRXJyb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBzY29wZSwgY3Jl
YXRlU3ludGF4RXJyb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCAiRmFpbGVkIHRvIHBhcnNl
IFN0cmluZyB0byBCaWdJbnQiKSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgfQog
CkBAIC0yMzE5LDcgKzI0NDEsNyBAQCBKU1ZhbHVlIEpTQmlnSW50OjpwYXJzZUludChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIENoYXJUeXBlKiBkYXRhLAogI2lmIFVTRShC
SUdJTlQzMikKICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoMCk7CiAjZWxzZQotICAgICAgICBy
ZXR1cm4gY3JlYXRlWmVybyh2bSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
Y3JlYXRlWmVybyhudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtKSk7CiAjZW5kaWYKICAgICB9
CiAKQEAgLTI0MTQsOCArMjUzNiw4IEBAIEpTVmFsdWUgSlNCaWdJbnQ6OnBhcnNlSW50KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgQ2hhclR5cGUqIGRhdGEsCiAgICAgICAg
ICAgICAgICAgZGlnaXQgKz0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGRhdGFbcF0gLSAnQScgKyAx
MCk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoZXJyb3JQYXJzZU1v
ZGUgPT0gRXJyb3JQYXJzZU1vZGU6OlRocm93RXhjZXB0aW9ucykgewotICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dWTUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVN5bnRheEVycm9yKGdsb2JhbE9iamVjdCwg
IkZhaWxlZCB0byBwYXJzZSBTdHJpbmcgdG8gQmlnSW50IikpOworICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NKTsKKyAgICAgICAgICAgICAgICAgICAg
dGhyb3dWTUVycm9yKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgc2NvcGUsIGNyZWF0ZVN5bnRh
eEVycm9yKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgIkZhaWxlZCB0byBwYXJzZSBTdHJpbmcg
dG8gQmlnSW50IikpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZSgpOwogICAgICAgICAgICAgfQpAQCAtMjQzMywxMiArMjU1NSwxMyBAQCBKU1ZhbHVl
IEpTQmlnSW50OjpwYXJzZUludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0s
IENoYXJUeXBlKiBkYXRhLAogI2lmIFVTRShCSUdJTlQzMikKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGpzQmlnSW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF5YmVSZXN1bHQpKTsKICNl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwg
c3RhdGljX2Nhc3Q8aW50MzJfdD4obWF5YmVSZXN1bHQpKTsKKyAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6Y3JlYXRlRnJvbShudWxsT3JHbG9i
YWxPYmplY3RGb3JPT00sIHN0YXRpY19jYXN0PGludDMyX3Q+KG1heWJlUmVzdWx0KSkpOwogI2Vu
ZGlmCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgaGVhcFJl
c3VsdCA9IGFsbG9jYXRlRm9yKGdsb2JhbE9iamVjdCwgdm0sIHJhZGl4LCBpbml0aWFsTGVuZ3Ro
KTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7Cisg
ICAgICAgICAgICBoZWFwUmVzdWx0ID0gYWxsb2NhdGVGb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9y
T09NLCB2bSwgcmFkaXgsIGluaXRpYWxMZW5ndGgpOworICAgICAgICAgICAgaWYgKG51bGxPckds
b2JhbE9iamVjdEZvck9PTSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBKU1ZhbHVlKCkpOwogICAgICAgICAgICAgLy8gcmVzdWx0IGNhbiBzdGlsbCBiZSBudWxs
IGlmIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIGdsb2JhbCBvYmplY3QsIGFzIGFsbG9jYXRlRm9y
IGNhbm5vdCB0aHJvdyBhbiBleGNlcHRpb24gaW4gdGhhdCBjYXNlLgogICAgICAgICAgICAgaWYg
KCFoZWFwUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CkBAIC0yNDUx
LDcgKzI1NzQsNyBAQCBKU1ZhbHVlIEpTQmlnSW50OjpwYXJzZUludChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBWTSYgdm0sIENoYXJUeXBlKiBkYXRhLAogICAgIH0KIAogICAgIGhlYXBS
ZXN1bHQtPnNldFNpZ24oc2lnbiA9PSBQYXJzZUludFNpZ246OlNpZ25lZCk7Ci0gICAgcmV0dXJu
IGhlYXBSZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBoZWFwUmVzdWx0LT5yaWdodFRyaW0obnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCB2bSkpOwog
fQogCiBKU09iamVjdCogSlNCaWdJbnQ6OnRvT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpIGNvbnN0CkBAIC0yNzM4LDExICsyODYxLDEyIEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBC
aWdJbnRJbXBsPgogSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFzSW50TkltcGwoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0X3QgbiwgQmlnSW50SW1wbCBiaWdJbnQp
CiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChiaWdJbnQuaXNaZXJvKCkpCiAgICAg
ICAgIHJldHVybiBiaWdJbnQ7CiAgICAgaWYgKG4gPT0gMCkKLSAgICAgICAgcmV0dXJuIHplcm9J
bXBsKHZtKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB6ZXJvSW1wbChnbG9i
YWxPYmplY3QpKTsKIAogICAgIHVpbnQ2NF90IG5lZWRlZExlbmd0aCA9IChuICsgZGlnaXRCaXRz
IC0gMSkgLyBkaWdpdEJpdHM7CiAgICAgdWludDY0X3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGJpZ0ludC5sZW5ndGgoKSk7CkBAIC0yNzY2LDIzICsyODkwLDIzIEBAIEpTQmlnSW50
OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojphc0ludE5JbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIHVpbnQ2NF90CiAgICAgQVNTRVJUKG4gPD0gSU5UMzJfTUFYKTsKICAgICBpbnQzMl90
IE4gPSBzdGF0aWNfY2FzdDxpbnQzMl90PihuKTsKICAgICBpZiAoIWhhc0JpdCkKLSAgICAgICAg
cmV0dXJuIHRydW5jYXRlVG9OQml0cyh2bSwgTiwgYmlnSW50KTsKKyAgICAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCB0cnVuY2F0ZVRvTkJpdHMoZ2xvYmFsT2JqZWN0LCBOLCBiaWdJbnQp
KTsKICAgICBpZiAoIWJpZ0ludC5zaWduKCkpCi0gICAgICAgIHJldHVybiB0cnVuY2F0ZUFuZFN1
YkZyb21Qb3dlck9mVHdvKHZtLCBOLCBiaWdJbnQsIHRydWUpOworICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIHRydW5jYXRlQW5kU3ViRnJvbVBvd2VyT2ZUd28oZ2xvYmFsT2JqZWN0
LCBOLCBiaWdJbnQsIHRydWUpKTsKIAogICAgIC8vIE5lZ2F0aXZlIG51bWJlcnMgbXVzdCBzdWJ0
cmFjdCBmcm9tIDJebiwgZXhjZXB0IGZvciB0aGUgc3BlY2lhbCBjYXNlCiAgICAgLy8gZGVzY3Jp
YmVkIGFib3ZlLgogICAgIGlmICgodG9wRGlnaXQgJiAoY29tcGFyZURpZ2l0IC0gMSkpID09IDAp
IHsKICAgICAgICAgZm9yIChpbnQzMl90IGkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihuZWVkZWRM
ZW5ndGgpIC0gMjsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgIGlmIChiaWdJbnQuZGlnaXQo
aSkgIT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJP
ZlR3byh2bSwgTiwgYmlnSW50LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCB0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKGdsb2JhbE9iamVjdCwg
TiwgYmlnSW50LCBmYWxzZSkpOwogICAgICAgICB9CiAgICAgICAgIC8vIFRydW5jYXRpb24gaXMg
bm8tb3AgaWYgYmlnSW50ID09IC0yXihuLTEpLgogICAgICAgICBpZiAobGVuZ3RoID09IG5lZWRl
ZExlbmd0aCAmJiB0b3BEaWdpdCA9PSBjb21wYXJlRGlnaXQpCiAgICAgICAgICAgICByZXR1cm4g
YmlnSW50OwotICAgICAgICByZXR1cm4gdHJ1bmNhdGVUb05CaXRzKHZtLCBOLCBiaWdJbnQpOwor
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHRydW5jYXRlVG9OQml0cyhnbG9iYWxP
YmplY3QsIE4sIGJpZ0ludCkpOwogICAgIH0KLSAgICByZXR1cm4gdHJ1bmNhdGVBbmRTdWJGcm9t
UG93ZXJPZlR3byh2bSwgTiwgYmlnSW50LCBmYWxzZSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCB0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKGdsb2JhbE9iamVjdCwgTiwgYmln
SW50LCBmYWxzZSkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KQEAgLTI3
OTQsNyArMjkxOCw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojphc1VpbnROSW1w
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfCiAgICAgaWYgKGJpZ0ludC5p
c1plcm8oKSkKICAgICAgICAgcmV0dXJuIGJpZ0ludDsKICAgICBpZiAobiA9PSAwKQotICAgICAg
ICByZXR1cm4gemVyb0ltcGwodm0pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IHplcm9JbXBsKGdsb2JhbE9iamVjdCkpOwogCiAgICAgLy8gSWYgYmlnSW50IGlzIG5lZ2F0aXZl
LCBzaW11bGF0ZSB0d28ncyBjb21wbGVtZW50IHJlcHJlc2VudGF0aW9uLgogICAgIGlmIChiaWdJ
bnQuc2lnbigpKSB7CkBAIC0yODAyLDcgKzI5MjYsNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBK
U0JpZ0ludDo6YXNVaW50TkltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0
XwogICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
ICJCaWdJbnQgZ2VuZXJhdGVkIGZyb20gdGhpcyBvcGVyYXRpb24gaXMgdG9vIGJpZyJfcyk7CiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1
bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byh2bSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obiksIGJp
Z0ludCwgZmFsc2UpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHRydW5jYXRl
QW5kU3ViRnJvbVBvd2VyT2ZUd28oZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxpbnQzMl90Pihu
KSwgYmlnSW50LCBmYWxzZSkpOwogICAgIH0KIAogICAgIC8vIElmIGJpZ0ludCBpcyBwb3NpdGl2
ZSBhbmQgaGFzIHVwIHRvIG4gYml0cywgcmV0dXJuIGl0IGRpcmVjdGx5LgpAQCAtMjgyNCwxOCAr
Mjk0OCwyMiBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YXNVaW50TkltcGwoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0XwogCiAgICAgLy8gT3RoZXJ3aXNlLCB0
cnVuY2F0ZS4KICAgICBBU1NFUlQobiA8PSBJTlQzMl9NQVgpOwotICAgIHJldHVybiB0cnVuY2F0
ZVRvTkJpdHModm0sIHN0YXRpY19jYXN0PGludDMyX3Q+KG4pLCBiaWdJbnQpOworICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgdHJ1bmNhdGVUb05CaXRzKGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8aW50MzJfdD4obiksIGJpZ0ludCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmln
SW50SW1wbD4KLUpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojp0cnVuY2F0ZVRvTkJpdHMo
Vk0mIHZtLCBpbnQzMl90IG4sIEJpZ0ludEltcGwgYmlnSW50KQorSlNCaWdJbnQ6OkltcGxSZXN1
bHQgSlNCaWdJbnQ6OnRydW5jYXRlVG9OQml0cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBpbnQzMl90IG4sIEJpZ0ludEltcGwgYmlnSW50KQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
ICAgICBBU1NFUlQobiAhPSAwKTsKICAgICBBU1NFUlQoYmlnSW50Lmxlbmd0aCgpID4gbiAvIGRp
Z2l0Qml0cyk7CiAKICAgICBpbnQzMl90IG5lZWRlZERpZ2l0cyA9IChuICsgKGRpZ2l0Qml0cyAt
IDEpKSAvIGRpZ2l0Qml0czsKICAgICBBU1NFUlQobmVlZGVkRGlnaXRzIDw9IHN0YXRpY19jYXN0
PGludDMyX3Q+KGJpZ0ludC5sZW5ndGgoKSkpOwotICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVh
dGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCBuZWVkZWREaWdpdHMpOworICAgIEpTQmlnSW50KiBy
ZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgbmVlZGVkRGlnaXRzKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBBU1NFUlQocmVzdWx0
KTsKIAogICAgIC8vIENvcHkgYWxsIGRpZ2l0cyBleGNlcHQgdGhlIE1TRC4KQEAgLTI4NTEsMTkg
KzI5NzksMjMgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnRydW5jYXRlVG9OQml0
cyhWTSYgdm0sIGludDMyX3QgbiwgQmlnSW50SW1wbCBiaWcKICAgICB9CiAgICAgcmVzdWx0LT5z
ZXREaWdpdChsYXN0LCBtc2QpOwogICAgIHJlc3VsdC0+c2V0U2lnbihiaWdJbnQuc2lnbigpKTsK
LSAgICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0odm0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgcmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIC8vIFN1YnRy
YWN0cyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgbiBiaXRzIG9mIGFicyhiaWdJbnQpIGZyb20gMl5u
LgogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci1KU0JpZ0ludDo6SW1wbFJlc3VsdCBK
U0JpZ0ludDo6dHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byhWTSYgdm0sIGludDMyX3Qgbiwg
QmlnSW50SW1wbCBiaWdJbnQsIGJvb2wgcmVzdWx0U2lnbikKK0pTQmlnSW50OjpJbXBsUmVzdWx0
IEpTQmlnSW50Ojp0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGludDMyX3QgbiwgQmlnSW50SW1wbCBiaWdJbnQsIGJvb2wgcmVzdWx0U2ln
bikKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgQVNTRVJUKG4gIT0gMCk7CiAgICAgQVNT
RVJUKG4gPD0gc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF4TGVuZ3RoQml0cykpOwogCiAgICAgaW50
MzJfdCBuZWVkZWREaWdpdHMgPSAobiArIChkaWdpdEJpdHMgLSAxKSkgLyBkaWdpdEJpdHM7CiAg
ICAgQVNTRVJUKG5lZWRlZERpZ2l0cyA8PSBzdGF0aWNfY2FzdDxpbnQzMl90PihtYXhMZW5ndGgp
KTsgLy8gRm9sbG93cyBmcm9tIG4gPD0gbWF4TGVuZ3RoQml0cy4KLSAgICBKU0JpZ0ludCogcmVz
dWx0ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgbmVlZGVkRGlnaXRzKTsKKyAgICBK
U0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIG5lZWRlZERp
Z2l0cyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgQVNT
RVJUKHJlc3VsdCk7CiAKICAgICAvLyBQcm9jZXNzIGFsbCBkaWdpdHMgZXhjZXB0IHRoZSBNU0Qu
CkBAIC0yOTEwLDcgKzMwNDIsNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6dHJ1
bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byhWTSYgdm0sIGludDMyX3QgbiwgQgogICAgIH0KICAg
ICByZXN1bHQtPnNldERpZ2l0KGxhc3QsIHJlc3VsdE1TRCk7CiAgICAgcmVzdWx0LT5zZXRTaWdu
KHJlc3VsdFNpZ24pOwotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsK
IH0KIAogSlNWYWx1ZSBKU0JpZ0ludDo6YXNJbnROKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIHVpbnQ2NF90IG4sIEpTQmlnSW50KiBiaWdJbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCaWdJbnQuaAppbmRleCA2YmY4YWIyYTU2NzE5ZjQ3ZTZiNzdhODA5ODAxN2Y0YWJl
ZmFkMzg3Li4wMTZjMTlmNzRhNWE0OGY1MTI2MzczOWY1OGQ3YjcxNDQyZThmOGY0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKQEAgLTY1LDE2ICs2NSwyMCBAQCBj
bGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHN0YXRpYyBzaXplX3Qg
ZXN0aW1hdGVkU2l6ZShKU0NlbGwqLCBWTSYpOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVaZXJvKFZNJik7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQmlnSW50KiB0cnlDcmVhdGVXaXRoTGVuZ3Ro
KEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgSlNCaWdJbnQq
IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQoVk0mLCB1bnNpZ25lZCBsZW5ndGgpOworICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlWmVybyhKU0dsb2JhbE9iamVj
dCopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0ludCogdHJ5Q3JlYXRlWmVy
byhWTSYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0ludCogdHJ5Q3JlYXRl
V2l0aExlbmd0aChWTSYsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIEpTQmlnSW50KiBjcmVhdGVXaXRoTGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiwgdW5zaWdu
ZWQgbGVuZ3RoKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0ludCogY3Jl
YXRlRnJvbShWTSYsIGludDMyX3QgdmFsdWUpOwotICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRl
RnJvbShWTSYsIHVpbnQzMl90IHZhbHVlKTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZy
b20oVk0mLCBpbnQ2NF90IHZhbHVlKTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20o
Vk0mLCB1aW50NjRfdCB2YWx1ZSk7Ci0gICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKFZN
JiwgYm9vbCB2YWx1ZSk7Ci0gICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKFZNJiwgZG91
YmxlIHZhbHVlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0
ZUZyb20oSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90IHZhbHVlKTsKKyAgICBzdGF0aWMgSlNCaWdJ
bnQqIHRyeUNyZWF0ZUZyb20oVk0mLCBpbnQzMl90IHZhbHVlKTsKKyAgICBzdGF0aWMgSlNCaWdJ
bnQqIGNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqLCB1aW50MzJfdCB2YWx1ZSk7CisgICAgc3Rh
dGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0KiwgaW50NjRfdCB2YWx1ZSk7
CisgICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0KiwgdWludDY0
X3QgdmFsdWUpOworICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShKU0dsb2JhbE9iamVj
dCosIGJvb2wgdmFsdWUpOworICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShKU0dsb2Jh
bE9iamVjdCosIGRvdWJsZSB2YWx1ZSk7CisKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZy
b20oSlNHbG9iYWxPYmplY3QqLCBWTSYsIGludDMyX3QgdmFsdWUpOwogCiAgICAgc3RhdGljIHNp
emVfdCBvZmZzZXRPZkxlbmd0aCgpCiAgICAgewpAQCAtOTAsMjEgKzk0LDIxIEBAIGNsYXNzIEpT
QmlnSW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQogCi0gICAgc3RhdGljIEpTVmFsdWUgbWFrZUhlYXBC
aWdJbnRPckJpZ0ludDMyKFZNJiB2bSwgaW50NjRfdCB2YWx1ZSkKKyAgICBzdGF0aWMgSlNWYWx1
ZSBtYWtlSGVhcEJpZ0ludE9yQmlnSW50MzIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
aW50NjRfdCB2YWx1ZSkKICAgICB7CiAjaWYgVVNFKEJJR0lOVDMyKQogICAgICAgICBpZiAodmFs
dWUgPD0gSU5UX01BWCAmJiB2YWx1ZSA+PSBJTlRfTUlOKQogICAgICAgICAgICAgcmV0dXJuIGpz
QmlnSW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKTsKICNlbmRpZgotICAgICAgICBy
ZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIEpT
QmlnSW50OjpjcmVhdGVGcm9tKGdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAgIH0KIAotICAgIHN0
YXRpYyBKU1ZhbHVlIG1ha2VIZWFwQmlnSW50T3JCaWdJbnQzMihWTSYgdm0sIGRvdWJsZSB2YWx1
ZSkKKyAgICBzdGF0aWMgSlNWYWx1ZSBtYWtlSGVhcEJpZ0ludE9yQmlnSW50MzIoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgZG91YmxlIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJU
KGlzSW50ZWdlcih2YWx1ZSkpOwogICAgICAgICBpZiAoc3RkOjphYnModmFsdWUpIDw9IG1heFNh
ZmVJbnRlZ2VyKCkpCi0gICAgICAgICAgICByZXR1cm4gbWFrZUhlYXBCaWdJbnRPckJpZ0ludDMy
KHZtLCBzdGF0aWNfY2FzdDxpbnQ2NF90Pih2YWx1ZSkpOwotICAgICAgICByZXR1cm4gSlNCaWdJ
bnQ6OmNyZWF0ZUZyb20odm0sIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlSGVhcEJp
Z0ludE9yQmlnSW50MzIoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxpbnQ2NF90Pih2YWx1ZSkp
OworICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCB2YWx1
ZSk7CiAgICAgfQogCiAgICAgZW51bSBjbGFzcyBFcnJvclBhcnNlTW9kZSB7CkBAIC0xNTgsMTcg
KzE2MiwxMyBAQCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAg
Q29tcGFyaXNvblJlc3VsdCBzdGF0aWMgY29tcGFyZVRvRG91YmxlKEpTQmlnSW50KiB4LCBkb3Vi
bGUgeSk7CiAKLSAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1ZhbHVlIGFzSW50MzJPckhlYXBD
ZWxsKFZNJiB2bSwgaW50NjRfdCB2YWx1ZSkKKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1Zh
bHVlIGFzSW50MzJPckhlYXBDZWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDY0
X3QgdmFsdWUpCiAgICAgewogI2lmIFVTRShCSUdJTlQzMikKICAgICAgICAgaWYgKHN0YXRpY19j
YXN0PGludDY0X3Q+KHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbHVlKSkgPT0gdmFsdWUpCiAgICAg
ICAgICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90Pih2YWx1ZSkpOwog
I2VuZGlmCi0gICAgICAgIHJldHVybiBjcmVhdGVGcm9tKHZtLCB2YWx1ZSk7Ci0gICAgfQotICAg
IEFMV0FZU19JTkxJTkUgc3RhdGljIEpTVmFsdWUgYXNJbnQzMk9ySGVhcENlbGwoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgaW50NjRfdCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhc0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmplY3QtPnZtKCksIHZhbHVlKTsKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgfQogCiBwcml2YXRl
OgpAQCAtMTg0LDYgKzE4NCw4IEBAIGNsYXNzIEpTQmlnSW50IGZpbmFsIDogcHVibGljIEpTQ2Vs
bCB7CiAgICAgICAgIEpTVmFsdWUgcGF5bG9hZDsKICAgICB9OwogcHJpdmF0ZToKKyAgICBzdGF0
aWMgSlNCaWdJbnQqIGNyZWF0ZVdpdGhMZW5ndGgoSlNHbG9iYWxPYmplY3QqLCBWTSYsIHVuc2ln
bmVkIGxlbmd0aCk7CisgICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVaZXJvKEpTR2xvYmFsT2Jq
ZWN0KiwgVk0mKTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5h
bWUgQmlnSW50SW1wbDI+CiAgICAgc3RhdGljIEltcGxSZXN1bHQgZXhwb25lbnRpYXRlSW1wbChK
U0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIGJhc2UsIEJpZ0ludEltcGwyIGV4cG9uZW50KTsK
QEAgLTIxMCw3ICsyMTIsNyBAQCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwg
ewogICAgIHN0YXRpYyBJbXBsUmVzdWx0IHJlbWFpbmRlckltcGwoSlNHbG9iYWxPYmplY3QqLCBC
aWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBC
aWdJbnRJbXBsPgotICAgIHN0YXRpYyBJbXBsUmVzdWx0IHVuYXJ5TWludXNJbXBsKFZNJiwgQmln
SW50SW1wbCB4KTsKKyAgICBzdGF0aWMgSW1wbFJlc3VsdCB1bmFyeU1pbnVzSW1wbChKU0dsb2Jh
bE9iamVjdCosIEJpZ0ludEltcGwgeCk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50
SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgogICAgIHN0YXRpYyBJbXBsUmVzdWx0IGJpdHdp
c2VBbmRJbXBsKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7
CkBAIC0yOTUsNyArMjk3LDcgQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxs
IHsKICAgICBzdGF0aWMgSlNWYWx1ZSBkaXZpZGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgaW50MzJfdCB4LCBpbnQzMl90IHkpCiAgICAgewogICAgICAgICBpZiAoIXkpIHsKLSAgICAg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0o
KSk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShnZXRWTShn
bG9iYWxPYmplY3QpKTsKICAgICAgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCAiMCBpcyBhbiBpbnZhbGlkIGRpdmlzb3IgdmFsdWUuIl9zKTsKICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KQEAgLTMxMCw3ICszMTIsNyBAQCBjbGFzcyBK
U0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHN0YXRpYyBKU1ZhbHVlIHJlbWFp
bmRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSkK
ICAgICB7CiAgICAgICAgIGlmICgheSkgewotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUoZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGdldFZNKGdsb2JhbE9iamVjdCkpOwogICAgICAgICAg
ICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICIwIGlzIGFuIGludmFsaWQg
ZGl2aXNvciB2YWx1ZS4iX3MpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAg
ICAgfQpAQCAtMzE4LDExICszMjAsMTEgQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMg
SlNDZWxsIHsKICAgICB9CiAjZW5kaWYKIAotICAgIHN0YXRpYyBKU1ZhbHVlIHVuYXJ5TWludXMo
Vk0mLCBKU0JpZ0ludCogeCk7CisgICAgc3RhdGljIEpTVmFsdWUgdW5hcnlNaW51cyhKU0dsb2Jh
bE9iamVjdCosIEpTQmlnSW50KiB4KTsKICNpZiBVU0UoQklHSU5UMzIpCi0gICAgc3RhdGljIEpT
VmFsdWUgdW5hcnlNaW51cyhWTSYgdm0sIGludDMyX3QgeCkKKyAgICBzdGF0aWMgSlNWYWx1ZSB1
bmFyeU1pbnVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBhc0ludDMyT3JIZWFwQ2VsbCh2bSwgLXN0YXRpY19jYXN0PGludDY0
X3Q+KHgpKTsKKyAgICAgICAgcmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGdsb2JhbE9iamVjdCwg
LXN0YXRpY19jYXN0PGludDY0X3Q+KHgpKTsKICAgICB9CiAjZW5kaWYKIApAQCAtNDIzLDEyICs0
MjUsMTUgQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAgIERp
Z2l0IGRpZ2l0KHVuc2lnbmVkKTsKICAgICB2b2lkIHNldERpZ2l0KHVuc2lnbmVkLCBEaWdpdCk7
IC8vIFVzZSBvbmx5IHdoZW4gaW5pdGlhbGl6aW5nLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIEpT
QmlnSW50KiByaWdodFRyaW0oVk0mKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU0JpZ0ludCog
cmlnaHRUcmltKEpTR2xvYmFsT2JqZWN0Kik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNCaWdJ
bnQqIHRyeVJpZ2h0VHJpbShWTSYpOwogCiBwcml2YXRlOgogICAgIEpTQmlnSW50KFZNJiwgU3Ry
dWN0dXJlKiwgRGlnaXQqLCB1bnNpZ25lZCBsZW5ndGgpOwogCi0gICAgc3RhdGljIEpTQmlnSW50
KiBjcmVhdGVGcm9tSW1wbChWTSYsIHVpbnQ2NF90IHZhbHVlLCBib29sIHNpZ24pOworICAgIEpT
QmlnSW50KiByaWdodFRyaW0oSlNHbG9iYWxPYmplY3QqLCBWTSYpOworCisgICAgc3RhdGljIEpT
QmlnSW50KiBjcmVhdGVGcm9tSW1wbChKU0dsb2JhbE9iamVjdCosIHVpbnQ2NF90IHZhbHVlLCBi
b29sIHNpZ24pOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRzUGVyQnl0ZSA9
IDg7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBkaWdpdEJpdHMgPSBzaXplb2YoRGln
aXQpICogYml0c1BlckJ5dGU7CkBAIC00NTQsNyArNDU5LDcgQEAgY2xhc3MgSlNCaWdJbnQgZmlu
YWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEs
IHR5cGVuYW1lIEJpZ0ludEltcGwyPgogICAgIHN0YXRpYyBDb21wYXJpc29uUmVzdWx0IGFic29s
dXRlQ29tcGFyZShCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQmlnSW50SW1wbD4KLSAgICBzdGF0aWMgdm9pZCBhYnNvbHV0ZURpdldpdGhEaWdp
dERpdmlzb3IoVk0mLCBCaWdJbnRJbXBsIHgsIERpZ2l0IGRpdmlzb3IsIEpTQmlnSW50KiogcXVv
dGllbnQsIERpZ2l0JiByZW1haW5kZXIpOworICAgIHN0YXRpYyBib29sIGFic29sdXRlRGl2V2l0
aERpZ2l0RGl2aXNvcihKU0dsb2JhbE9iamVjdCosIFZNJiwgQmlnSW50SW1wbCB4LCBEaWdpdCBk
aXZpc29yLCBKU0JpZ0ludCoqIHF1b3RpZW50LCBEaWdpdCYgcmVtYWluZGVyKTsKICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KICAgICBzdGF0aWMgdm9pZCBpbnRlcm5hbE11bHRp
cGx5QWRkKEJpZ0ludEltcGwgc291cmNlLCBEaWdpdCBmYWN0b3IsIERpZ2l0IHN1bW1hbmQsIHVu
c2lnbmVkLCBKU0JpZ0ludCogcmVzdWx0KTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50
SW1wbD4KQEAgLTQ4OSwxNiArNDk0LDE2IEBAIGNsYXNzIEpTQmlnSW50IGZpbmFsIDogcHVibGlj
IEpTQ2VsbCB7CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0
eXBlbmFtZSBCaWdJbnRJbXBsMiwgdHlwZW5hbWUgQml0d2lzZU9wPgotICAgIHN0YXRpYyBKU0Jp
Z0ludCogYWJzb2x1dGVCaXR3aXNlT3AoVk0mLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5
LCBFeHRyYURpZ2l0c0hhbmRsaW5nLCBCaXR3aXNlT3AmJik7CisgICAgc3RhdGljIEpTQmlnSW50
KiBhYnNvbHV0ZUJpdHdpc2VPcChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0lu
dEltcGwyIHksIEV4dHJhRGlnaXRzSGFuZGxpbmcsIEJpdHdpc2VPcCYmKTsKIAogICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+Ci0gICAgc3Rh
dGljIEpTQmlnSW50KiBhYnNvbHV0ZUFuZChWTSYsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwy
IHkpOworICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVBbmQoSlNHbG9iYWxPYmplY3QqLCBC
aWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmln
SW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgotICAgIHN0YXRpYyBKU0JpZ0ludCogYWJz
b2x1dGVPcihWTSYsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOworICAgIHN0YXRpYyBK
U0JpZ0ludCogYWJzb2x1dGVPcihKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0lu
dEltcGwyIHkpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUg
QmlnSW50SW1wbDI+Ci0gICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUFuZE5vdChWTSYsIEJp
Z0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOworICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1
dGVBbmROb3QoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwy
PgotICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVYb3IoVk0mLCBCaWdJbnRJbXBsMSB4LCBC
aWdJbnRJbXBsMiB5KTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlWG9yKEpTR2xvYmFs
T2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CiAKICAgICBlbnVtIGNsYXNz
IFNpZ25PcHRpb24gewogICAgICAgICBTaWduZWQsCkBAIC01MzUsMjAgKzU0MCwyMCBAQCBjbGFz
cyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHN0YXRpYyBKU0JpZ0ludCog
YWxsb2NhdGVGb3IoSlNHbG9iYWxPYmplY3QqLCBWTSYsIHVuc2lnbmVkIHJhZGl4LCB1bnNpZ25l
ZCBjaGFyY291bnQpOwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci0gICAg
c3RhdGljIEpTQmlnSW50KiBjb3B5KFZNJiwgQmlnSW50SW1wbCB4KTsKKyAgICBzdGF0aWMgSlNC
aWdJbnQqIGNvcHkoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsIHgpOwogCiAgICAgdm9pZCBp
bnBsYWNlTXVsdGlwbHlBZGQoRGlnaXQgbXVsdGlwbGllciwgRGlnaXQgcGFydCk7CiAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KICAgICBz
dGF0aWMgSW1wbFJlc3VsdCBhYnNvbHV0ZUFkZChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwx
IHgsIEJpZ0ludEltcGwyIHksIGJvb2wgcmVzdWx0U2lnbik7CiAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KLSAgICBzdGF0aWMgSW1wbFJl
c3VsdCBhYnNvbHV0ZVN1YihWTSYsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHksIGJvb2wg
cmVzdWx0U2lnbik7CisgICAgc3RhdGljIEltcGxSZXN1bHQgYWJzb2x1dGVTdWIoSlNHbG9iYWxP
YmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LCBib29sIHJlc3VsdFNpZ24pOwog
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBs
Mj4KICAgICBzdGF0aWMgSW1wbFJlc3VsdCBsZWZ0U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2Jq
ZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CiAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KICAgICBzdGF0aWMgSW1wbFJl
c3VsdCByaWdodFNoaWZ0QnlBYnNvbHV0ZShKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgs
IEJpZ0ludEltcGwyIHkpOwogCi0gICAgc3RhdGljIEltcGxSZXN1bHQgcmlnaHRTaGlmdEJ5TWF4
aW11bShWTSYsIGJvb2wgc2lnbik7CisgICAgc3RhdGljIEltcGxSZXN1bHQgcmlnaHRTaGlmdEJ5
TWF4aW11bShKU0dsb2JhbE9iamVjdCosIGJvb2wgc2lnbik7CiAKICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQmlnSW50SW1wbD4KICAgICBzdGF0aWMgT3B0aW9uYWw8RGlnaXQ+IHRvU2hpZnRBbW91
bnQoQmlnSW50SW1wbCB4KTsKQEAgLTU1OCw5ICs1NjMsOSBAQCBjbGFzcyBKU0JpZ0ludCBmaW5h
bCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgog
ICAgIHN0YXRpYyBJbXBsUmVzdWx0IGFzVWludE5JbXBsKEpTR2xvYmFsT2JqZWN0KiwgdWludDY0
X3QsIEJpZ0ludEltcGwpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgotICAg
IHN0YXRpYyBJbXBsUmVzdWx0IHRydW5jYXRlVG9OQml0cyhWTSYsIGludDMyX3QsIEJpZ0ludElt
cGwpOworICAgIHN0YXRpYyBJbXBsUmVzdWx0IHRydW5jYXRlVG9OQml0cyhKU0dsb2JhbE9iamVj
dCosIGludDMyX3QsIEJpZ0ludEltcGwpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJ
bXBsPgotICAgIHN0YXRpYyBJbXBsUmVzdWx0IHRydW5jYXRlQW5kU3ViRnJvbVBvd2VyT2ZUd28o
Vk0mLCBpbnQzMl90LCBCaWdJbnRJbXBsLCBib29sIHJlc3VsdFNpZ24pOworICAgIHN0YXRpYyBJ
bXBsUmVzdWx0IHRydW5jYXRlQW5kU3ViRnJvbVBvd2VyT2ZUd28oSlNHbG9iYWxPYmplY3QqLCBp
bnQzMl90LCBCaWdJbnRJbXBsLCBib29sIHJlc3VsdFNpZ24pOwogCiAgICAgaW5saW5lIHN0YXRp
YyBzaXplX3Qgb2Zmc2V0T2ZEYXRhKCkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ0pTVmFsdWUuY3BwCmluZGV4IGE0NTc3MmNmZWE0NjRhOTRlYWFlMTYwZjI1ODU2
YmJmMTkzZjkwYmQuLjllNDcwM2JiNTYxYjkwNGViMTNkMmU4N2Q5ODQ3NmQwY2VmNGVmMjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCkBAIC0xMTgs
MTkgKzExOCwyMyBAQCBKU09iamVjdCogSlNWYWx1ZTo6dG9PYmplY3RTbG93Q2FzZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KSBjb25zdAogCiBKU1ZhbHVlIEpTVmFsdWU6OnRvVGhpc1Ns
b3dDYXNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVDTUFNb2RlIGVjbWFNb2RlKSBj
b25zdAogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBBU1NFUlQoIWlzQ2VsbCgpKTsKIAog
ICAgIGlmIChlY21hTW9kZS5pc1N0cmljdCgpKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAg
ICBpZiAoaXNJbnQzMigpIHx8IGlzRG91YmxlKCkpCi0gICAgICAgIHJldHVybiBjb25zdHJ1Y3RO
dW1iZXIoZ2xvYmFsT2JqZWN0LCBhc1ZhbHVlKCkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIGNvbnN0cnVjdE51bWJlcihnbG9iYWxPYmplY3QsIGFzVmFsdWUoKSkpOwogICAg
IGlmIChpc1RydWUoKSB8fCBpc0ZhbHNlKCkpCi0gICAgICAgIHJldHVybiBjb25zdHJ1Y3RCb29s
ZWFuRnJvbUltbWVkaWF0ZUJvb2xlYW4oZ2xvYmFsT2JqZWN0LCBhc1ZhbHVlKCkpOworICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNvbnN0cnVjdEJvb2xlYW5Gcm9tSW1tZWRpYXRl
Qm9vbGVhbihnbG9iYWxPYmplY3QsIGFzVmFsdWUoKSkpOwogI2lmIFVTRShCSUdJTlQzMikKICAg
ICBpZiAoaXNCaWdJbnQzMigpKSB7Ci0gICAgICAgIEpTQ2VsbCogaGVhcEJpZ0ludCA9IHN0YXRp
Y19jYXN0PEpTQ2VsbCo+KEpTQmlnSW50OjpjcmVhdGVGcm9tKGdsb2JhbE9iamVjdC0+dm0oKSwg
YmlnSW50MzJBc0ludDMyKCkpKTsKLSAgICAgICAgcmV0dXJuIGhlYXBCaWdJbnQtPnRvT2JqZWN0
KGdsb2JhbE9iamVjdCk7CisgICAgICAgIEpTQ2VsbCogaGVhcEJpZ0ludCA9IHN0YXRpY19jYXN0
PEpTQ2VsbCo+KEpTQmlnSW50OjpjcmVhdGVGcm9tKGdsb2JhbE9iamVjdCwgYmlnSW50MzJBc0lu
dDMyKCkpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBoZWFwQmlnSW50LT50b09iamVjdChnbG9iYWxP
YmplY3QpKTsKICAgICB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CmluZGV4IGZhOThjNTEyZjE0MTM1ZDEyYTgxNTMzYjUzMmZjMzlkNzY2YjFhYzEuLmQ1MTBjNGU0
ZDhkMmEyOWJjNjBkZmRhZDk1YjJlYTc4MjZmYTc0MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAKQEAgLTQ3Miw3ICs0NzIsMTEgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhl
YXBUeXBlIGhlYXBUeXBlKQogICAgICAgICBzZW50aW5lbE1hcEJ1Y2tldCgpOwogICAgICAgICBz
ZW50aW5lbFNldEJ1Y2tldCgpOwogICAgIH0KLSAgICBoZWFwQmlnSW50Q29uc3RhbnRPbmUuc2V0
KCp0aGlzLCBKU0JpZ0ludDo6Y3JlYXRlRnJvbSgqdGhpcywgMSkpOworICAgIHsKKyAgICAgICAg
YXV0byogYmlnSW50ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZUZyb20oKnRoaXMsIDEpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChiaWdJbnQpOworICAgICAgICBoZWFwQmlnSW50Q29uc3RhbnRPbmUu
c2V0KCp0aGlzLCBiaWdJbnQpOworICAgIH0KIAogICAgIFRocmVhZDo6Y3VycmVudCgpLnNldEN1
cnJlbnRBdG9tU3RyaW5nVGFibGUoZXhpc3RpbmdFbnRyeUF0b21TdHJpbmdUYWJsZSk7CiAgICAg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAppbmRleCBiNTIzMDM4ZDBhZDVhZTdmNDU1NDAxMjYwODYzZDc2OTg2NDE2ZWRmLi4z
ZWI0YzVkMTA5NzcwZDFiZjU4NmNiODA5MzBjNDU0MDQ2YzBhMWZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTMw
MDcsNyArMzAwNywxMSBAQCBjbGFzcyBDbG9uZURlc2VyaWFsaXplciA6IENsb25lQmFzZSB7CiAj
aWYgVVNFKEJJR0lOVDMyKQogICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoMCk7CiAjZWxz
ZQotICAgICAgICAgICAgSlNCaWdJbnQqIGJpZ0ludCA9IEpTQmlnSW50OjpjcmVhdGVaZXJvKG1f
bGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgICAgICBKU0JpZ0ludCogYmlnSW50
ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVplcm8obV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghYmlnSW50KSkgeworICAgICAgICAgICAgICAgIGZh
aWwoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KGJpZ0ludCk7
CiAgICAgICAgICAgICByZXR1cm4gYmlnSW50OwogI2VuZGlmCkBAIC0zMDI4LDIxICszMDMyLDI1
IEBAIGNsYXNzIENsb25lRGVzZXJpYWxpemVyIDogQ2xvbmVCYXNlIHsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGpzQmlnSW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oZGlnaXQ2NCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgQVNTRVJUKGRpZ2l0NjQgIT0gMCk7Ci0gICAgICAg
ICAgICBKU0JpZ0ludCogYmlnSW50ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgobV9s
ZXhpY2FsR2xvYmFsT2JqZWN0LCAxKTsKKyAgICAgICAgICAgIEpTQmlnSW50KiBiaWdJbnQgPSBK
U0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aChtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCks
IDEpOwogICAgICAgICAgICAgaWYgKCFiaWdJbnQpIHsKICAgICAgICAgICAgICAgICBmYWlsKCk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGJpZ0ludC0+c2V0RGlnaXQoMCwgZGlnaXQ2NCk7CiAgICAgICAgICAgICBiaWdJbnQt
PnNldFNpZ24oc2lnbik7Ci0gICAgICAgICAgICBiaWdJbnQgPSBiaWdJbnQtPnJpZ2h0VHJpbSht
X2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICAgICAgYmlnSW50ID0gYmlnSW50
LT50cnlSaWdodFRyaW0obV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgICAg
IGlmICghYmlnSW50KSB7CisgICAgICAgICAgICAgICAgZmFpbCgpOworICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2djQnVmZmVy
LmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3coYmlnSW50KTsKICAgICAgICAgICAgIHJldHVybiBi
aWdJbnQ7CiAgICAgICAgIH0KICNlbmRpZgogICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gbnVs
bHB0cjsKICAgICAgICAgaWYgY29uc3RleHByIChzaXplb2YoSlNCaWdJbnQ6OkRpZ2l0KSA9PSBz
aXplb2YodWludDY0X3QpKSB7Ci0gICAgICAgICAgICBiaWdJbnQgPSBKU0JpZ0ludDo6dHJ5Q3Jl
YXRlV2l0aExlbmd0aChtX2xleGljYWxHbG9iYWxPYmplY3QsIGxlbmd0aEluVWludDY0KTsKKyAg
ICAgICAgICAgIGJpZ0ludCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKG1fbGV4aWNh
bEdsb2JhbE9iamVjdC0+dm0oKSwgbGVuZ3RoSW5VaW50NjQpOwogICAgICAgICAgICAgaWYgKCFi
aWdJbnQpIHsKICAgICAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWUoKTsKQEAgLTMwNTYsNyArMzA2NCw3IEBAIGNsYXNzIENsb25lRGVzZXJpYWxpemVy
IDogQ2xvbmVCYXNlIHsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIEFTU0VSVChzaXplb2YoSlNCaWdJbnQ6OkRpZ2l0KSA9PSBzaXplb2YodWludDMyX3QpKTsK
LSAgICAgICAgICAgIGJpZ0ludCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKG1fbGV4
aWNhbEdsb2JhbE9iamVjdCwgbGVuZ3RoSW5VaW50NjQgKiAyKTsKKyAgICAgICAgICAgIGJpZ0lu
dCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+
dm0oKSwgbGVuZ3RoSW5VaW50NjQgKiAyKTsKICAgICAgICAgICAgIGlmICghYmlnSW50KSB7CiAg
ICAgICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7
CkBAIC0zMDcxLDcgKzMwNzksMTEgQEAgY2xhc3MgQ2xvbmVEZXNlcmlhbGl6ZXIgOiBDbG9uZUJh
c2UgewogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJpZ0ludC0+c2V0U2lnbihz
aWduKTsKLSAgICAgICAgYmlnSW50ID0gYmlnSW50LT5yaWdodFRyaW0obV9sZXhpY2FsR2xvYmFs
T2JqZWN0LT52bSgpKTsKKyAgICAgICAgYmlnSW50ID0gYmlnSW50LT50cnlSaWdodFRyaW0obV9s
ZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgaWYgKCFiaWdJbnQpIHsKKyAgICAg
ICAgICAgIGZhaWwoKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgIH0K
ICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KGJpZ0ludCk7CiAg
ICAgICAgIHJldHVybiBiaWdJbnQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VM
b2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCAxNWZlYzc3ZTg5MGI5YmQzMjRmMTg3NmRmZWU3
N2YxNTM3OWU4MjQ2Li5iNTNmNjMyMWZiM2E0MmNiNWY3ZTJhNzNmY2IzMzAyNDUyMjBkOTAxIDEw
MDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE3IEBACisyMDIwLTA1LTI5ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5j
b20+CisKKyAgICAgICAgW0pTQ10gSlNCaWdJbnQgYWxsb2NhdGlvbiBzaG91bGQgYmUgZ3JhY2Vm
dWwgZm9yIE9PTQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjEyNTEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBzdHJlc3MvYmlnaW50LWNhbi10aHJvdy1vb20uanM6IENvcGllZCBmcm9tIEpTVGVzdHMv
c3RyZXNzL2dldC1mdW5jdGlvbi1yZWFsbS1ub3QtZG9pbmctcmVjdXJzaW9uLmpzLgorICAgICAg
ICAoY2FuVGhyb3cpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGdldCBmb28pOgorICAgICAg
ICAqIHN0cmVzcy9nZXQtZnVuY3Rpb24tcmVhbG0tbm90LWRvaW5nLXJlY3Vyc2lvbi5qczoKKyAg
ICAgICAgKGNhblRocm93KToKKwogMjAyMC0wNS0yNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWls
bGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBmb3Itb2Ygc2hvdWxkIGNoZWNrIHRoZSBpdGVyYWJs
ZSBpcyBhIEpTQXJyYXkgZm9yIEZhc3RBcnJheSBpbiBERkcgaXRlcmF0b3Jfb3BlbgpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy9zdHJlc3MvYmlnaW50LWNhbi10aHJvdy1vb20uanMgYi9KU1Rlc3RzL3N0
cmVzcy9iaWdpbnQtY2FuLXRocm93LW9vbS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MDMxYjdjOGRlMTcyZTgy
NmY5NGFlNTUxM2I4YTU0YTBjYWIyM2FiCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJl
c3MvYmlnaW50LWNhbi10aHJvdy1vb20uanMKQEAgLTAsMCArMSwzOSBAQAorLy9AIHNraXAgaWYg
JG1lbW9yeUxpbWl0ZWQKKy8vQCBydW5EZWZhdWx0KCItLXVzZUNvbmN1cnJlbnRKSVQ9MCIpCisK
K2Z1bmN0aW9uIGNhblRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIHZhciBlcnJvclRo
cm93biA9IGZhbHNlOworICAgIHZhciBlcnJvciA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAg
ZnVuYygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3JUaHJvd24gPSB0cnVlOwor
ICAgICAgICBlcnJvciA9IGU7CisgICAgfQorICAgIGlmIChlcnJvclRocm93biAmJiBTdHJpbmco
ZXJyb3IpICE9PSBlcnJvck1lc3NhZ2UpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgYmFkIGVy
cm9yOiAke1N0cmluZyhlcnJvcil9YCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitjb25zdCBh
MCA9IFtdOworYTAuX19wcm90b19fID0ge307CithMC5sZW5ndGggPSAyKioyMworT2JqZWN0LmRl
ZmluZVByb3BlcnR5KGEwLCAwLCB7IGdldDogZm9vIH0pOworCitmdW5jdGlvbiBmb28oKSB7Cisg
ICAgbmV3IEludDE2QXJyYXkoYTApOworfQorCituZXcgUHJvbWlzZShmb28pOworCit0cnkgewor
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgICAgICBuZXcgVWludDhB
cnJheSgxMDAwMDApOworICAgIH0KK30gY2F0Y2gge30KKworY2FuVGhyb3coKCkgPT4geworICAg
IGZvciAobGV0IGk9MG47IGk8MTAwMDBuOyBpKyspIHsKKyAgICAgICAgMm4qKmk7CisgICAgfQor
fSwgYFJhbmdlRXJyb3I6IE91dCBvZiBtZW1vcnlgKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3Ry
ZXNzL2dldC1mdW5jdGlvbi1yZWFsbS1ub3QtZG9pbmctcmVjdXJzaW9uLmpzIGIvSlNUZXN0cy9z
dHJlc3MvZ2V0LWZ1bmN0aW9uLXJlYWxtLW5vdC1kb2luZy1yZWN1cnNpb24uanMKaW5kZXggYTc5
ZWYyY2M2MGRhZTk4M2E0YjI5NGY0NGExN2Q3MjFmMzk3ZjYzYi4uZmZhNmUzYWFjZTkzZDNkM2I4
N2EzOTc1MjY0OTc4YmI5NmYyODUxNSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvZ2V0LWZ1
bmN0aW9uLXJlYWxtLW5vdC1kb2luZy1yZWN1cnNpb24uanMKKysrIGIvSlNUZXN0cy9zdHJlc3Mv
Z2V0LWZ1bmN0aW9uLXJlYWxtLW5vdC1kb2luZy1yZWN1cnNpb24uanMKQEAgLTksNyArOSw2IEBA
IGZ1bmN0aW9uIGNhblRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgewogICAgIH0gY2F0Y2ggKGUp
IHsKICAgICAgICAgZXJyb3JUaHJvd24gPSB0cnVlOwogICAgICAgICBlcnJvciA9IGU7Ci0gICAg
ICAgIHByaW50KGVycm9yLm1lc3NhZ2UpOwogICAgIH0KICAgICBpZiAoZXJyb3JUaHJvd24gJiYg
U3RyaW5nKGVycm9yKSAhPT0gZXJyb3JNZXNzYWdlKQogICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
YGJhZCBlcnJvcjogJHtTdHJpbmcoZXJyb3IpfWApOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400563</attachid>
            <date>2020-05-29 03:07:29 -0700</date>
            <delta_ts>2020-05-29 03:07:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212512-20200529030728.patch</filename>
            <type>text/plain</type>
            <size>93496</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMjc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MjI3NWIxOGQwNzg3ZGViOTNiMDA2ZjM3NWIxZjM1NzlhNGEyNDZkLi5iOWUwMDk0MDQ4ZTg0M2Mx
MGQ1MmRmMDNkYzcxOTNkZThkMGRjMzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MSBAQAorMjAyMC0wNS0yOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEpTQmlnSW50IGFsbG9jYXRpb24gc2hvdWxkIGJlIGdyYWNlZnVs
IGZvciBPT00KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMjUxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggYWxsb3dzIEpTQmlnSW50J3Mgc3RvcmFnZSBhbGxvY2F0aW9uIHRvIGZhaWwg
Z3JhY2VmdWxseSBpZiBPT00gY29uZGl0aW9uIGhhcHBlbnMuCisgICAgICAgIFdlIHRocmVhZCBK
U0dsb2JhbE9iamVjdCogaW5zdGVhZCBvZiBWTSYgYW5kIHRocm93IE9PTSBlcnJvciBpZiBzdG9y
YWdlIGFsbG9jYXRpb24gZmFpbGVkLgorICAgICAgICBXZSBhbHNvIHJlbmFtZSBgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdGAgcGFyYW1ldGVyIHRvIGBKU0dsb2JhbE9iamVjdCogbnVsbE9y
R2xvYmFsT2JqZWN0Rm9yT09NYAorICAgICAgICBpZiBpdCBjYW4gYmUgbnVsbHB0ci4KKworICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAg
ICAoZnVuY3Rpb25DcmVhdGVIZWFwQmlnSW50KToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyQXJl
bmEuY3BwOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyQXJlbmE6Om1ha2VCaWdJbnREZWNpbWFs
SWRlbnRpZmllcik6CisgICAgICAgICogcnVudGltZS9CaWdJbnRDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OnRvQmlnSW50KToKKyAgICAgICAgKEpTQzo6Y2FsbEJpZ0ludENvbnN0cnVj
dG9yKToKKyAgICAgICAgKiBydW50aW1lL0JpZ0ludFByb3RvdHlwZS5jcHA6CisgICAgICAgIChK
U0M6OnRvVGhpc0JpZ0ludFZhbHVlKToKKyAgICAgICAgKEpTQzo6YmlnSW50UHJvdG9GdW5jVG9T
dHJpbmcpOgorICAgICAgICAoSlNDOjpiaWdJbnRQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6Cisg
ICAgICAgIChKU0M6OmJpZ0ludFByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAqIHJ1bnRpbWUv
Q2FjaGVkVHlwZXMuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZWRCaWdJbnQ6OmRlY29kZSBjb25z
dCk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdEZ1bmNGb3JtYXQpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3BwOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
Y3JlYXRlWmVybyk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0cnlDcmVhdGVaZXJvKToKKyAg
ICAgICAgKEpTQzo6SlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGgpOgorICAgICAgICAoSlNDOjpK
U0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojpj
cmVhdGVGcm9tKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnRyeUNyZWF0ZUZyb20pOgorICAg
ICAgICAoSlNDOjpKU0JpZ0ludDo6Y3JlYXRlRnJvbUltcGwpOgorICAgICAgICAoSlNDOjpKU0Jp
Z0ludDo6cGFyc2VJbnQpOgorICAgICAgICAoSlNDOjpIZWFwQmlnSW50SW1wbDo6dG9IZWFwQmln
SW50KToKKyAgICAgICAgKEpTQzo6SW50MzJCaWdJbnRJbXBsOjp0b0hlYXBCaWdJbnQpOgorICAg
ICAgICAoSlNDOjp6ZXJvSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpleHBvbmVudGlh
dGVJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6Om11bHRpcGx5SW1wbCk6CisgICAgICAg
IChKU0M6OkpTQmlnSW50OjpkaXZpZGVJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmNv
cHkpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwpOgorICAgICAgICAo
SlNDOjpKU0JpZ0ludDo6dW5hcnlNaW51cyk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpyZW1h
aW5kZXJJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmluY0ltcGwpOgorICAgICAgICAo
SlNDOjpKU0JpZ0ludDo6ZGVjSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphZGRJbXBs
KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnN1YkltcGwpOgorICAgICAgICAoSlNDOjpKU0Jp
Z0ludDo6Yml0d2lzZUFuZEltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0d2lzZU9y
SW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpiaXR3aXNlWG9ySW1wbCk6CisgICAgICAg
IChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZUFkZCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojph
YnNvbHV0ZVN1Yik6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZURpdldpdGhEaWdp
dERpdmlzb3IpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVEaXZXaXRoQmlnSW50
RGl2aXNvcik6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZUxlZnRTaGlmdEFsd2F5
c0NvcHkpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVCaXR3aXNlT3ApOgorICAg
ICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVBbmQpOgorICAgICAgICAoSlNDOjpKU0JpZ0lu
dDo6YWJzb2x1dGVPcik6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZUFuZE5vdCk6
CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZVhvcik6CisgICAgICAgIChKU0M6OkpT
QmlnSW50OjphYnNvbHV0ZUFkZE9uZSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0
ZVN1Yk9uZSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpsZWZ0U2hpZnRCeUFic29sdXRlKToK
KyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeUFic29sdXRlKToKKyAgICAgICAg
KEpTQzo6SlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeU1heGltdW0pOgorICAgICAgICAoSlNDOjpKU0Jp
Z0ludDo6dG9TdHJpbmdCYXNlUG93ZXJPZlR3byk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0
b1N0cmluZ0dlbmVyaWMpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6cmlnaHRUcmltKToKKyAg
ICAgICAgKEpTQzo6SlNCaWdJbnQ6OnRyeVJpZ2h0VHJpbSk6CisgICAgICAgIChKU0M6OkpTQmln
SW50OjphbGxvY2F0ZUZvcik6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojphc0ludE5JbXBsKToK
KyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFzVWludE5JbXBsKToKKyAgICAgICAgKEpTQzo6SlNC
aWdJbnQ6OnRydW5jYXRlVG9OQml0cyk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0cnVuY2F0
ZUFuZFN1YkZyb21Qb3dlck9mVHdvKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmNyZWF0ZVdp
dGhMZW5ndGhVbmNoZWNrZWQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQu
aDoKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1Zh
bHVlOjp0b1RoaXNTbG93Q2FzZSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6Cisg
ICAgICAgIChKU0M6OlZNOjpWTSk6CisKIDIwMjAtMDUtMjggIERldmluIFJvdXNzbyAgPGRyb3Vz
c29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGFkZCBtaXNzaW5nIGNvbmRp
dGlvbiBndWFyZHMgd2hlbiBnZW5lcmF0aW5nIG9iamMgcHJvdG9jb2wgZmlsZXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCAwYzY2NjhhNmYzYTNhM2NjZjJjMzg5YTU3ZTkyZGIzZmExNzA4NTU1Li5mZGZmYmI3Yjg4
YjdjYTk4OWI2NTM4OTY1YThmMTA2ZDdlZDdhYmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMjAtMDUtMjkgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAg
ICAgICBbSlNDXSBKU0JpZ0ludCBhbGxvY2F0aW9uIHNob3VsZCBiZSBncmFjZWZ1bCBmb3IgT09N
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI1MTIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9u
ZURlc2VyaWFsaXplcjo6cmVhZEJpZ0ludCk6CisKIDIwMjAtMDUtMjggIEFuZHkgRXN0ZXMgIDxh
ZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtBcHBsZSBQYXldIEJ1dHRvbnMgcmVuZGVyIHdp
dGggYSBjb3JuZXIgcmFkaXVzIG9mIFBLQXBwbGVQYXlCdXR0b25EZWZhdWx0Q29ybmVyUmFkaXVz
IGV2ZW4gd2hlbiBleHBsaWNpdGx5IHNwZWNpZnlpbmcgImJvcmRlci1yYWRpdXM6IDBweCIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IDNhNDFlNzYy
ZWM4ZDgzY2M0MmFjZTFkMTNiMmQ0Nzk2MmI0Njc1NzUuLmQwMGVhMjk2MzYwMGM1MTEzYTg3OGIy
Y2VhZGNmNzU4MDlhYTFhYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcApAQCAtMjg0MiwxMCArMjg0MiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkFyaXRoTmVnYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
CiAKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgaWYgKHByaW1WYWx1ZS5pc0JpZ0ludDMyKCkpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHBy
aW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6dW5hcnlNaW51cyhnbG9iYWxPYmplY3Qs
IHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSkpKTsKICNlbmRpZgogICAgIGlmIChwcmltVmFs
dWUuaXNIZWFwQmlnSW50KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJ
bnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSkpOworICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6dW5hcnlN
aW51cyhnbG9iYWxPYmplY3QsIHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSkpKTsKIAogICAgIGRv
dWJsZSBudW1iZXIgPSBwcmltVmFsdWUudG9OdW1iZXIoZ2xvYmFsT2JqZWN0KTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKQEAgLTI4NzAsMTMgKzI4
NzAsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5lZ2F0
ZVByb2ZpbGVkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKIAogI2lmIFVTRShCSUdJTlQzMikKICAg
ICBpZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9
IEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpOwor
ICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKGdsb2JhbE9iamVj
dCwgcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlUmVzdWx0KHJl
c3VsdCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAj
ZW5kaWYKICAgICBpZiAocHJpbVZhbHVlLmlzSGVhcEJpZ0ludCgpKSB7Ci0gICAgICAgIEpTVmFs
dWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5hc0hlYXBCaWdJ
bnQoKSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xv
YmFsT2JqZWN0LCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVSZXN1
bHQocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAg
IH0KQEAgLTI5MTIsMTMgKzI5MTQsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUoSlNHbG9iYWxPYmplY3QKIAogI2lm
IFVTRShCSUdJTlQzMikKICAgICBpZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkgewotICAgICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFsdWUuYmln
SW50MzJBc0ludDMyKCkpOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFy
eU1pbnVzKGdsb2JhbE9iamVjdCwgcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgYXJpdGhQcm9maWxl
LT5vYnNlcnZlUmVzdWx0KHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKICAgICB9CiAjZW5kaWYKICAgICBpZiAocHJpbVZhbHVlLmlzSGVhcEJpZ0ludCgp
KSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHBy
aW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJ
bnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBhcml0aFBy
b2ZpbGUtPm9ic2VydmVSZXN1bHQocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOwogICAgIH0KQEAgLTI5NTQsMTAgKzI5NTgsMTAgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWwKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgLy8gRklYTUU6IHdoeSBkb2VzIHRo
aXMgZnVuY3Rpb24gcHJvZmlsZSB0aGUgYXJndW1lbnQgYnV0IG5vdCB0aGUgcmVzdWx0PwogICAg
IGlmIChwcmltVmFsdWUuaXNCaWdJbnQzMigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkp
KTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNC
aWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMy
KCkpKSk7CiAjZW5kaWYKICAgICBpZiAocHJpbVZhbHVlLmlzSGVhcEJpZ0ludCgpKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFs
dWUuYXNIZWFwQmlnSW50KCkpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBK
U1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFs
dWUuYXNIZWFwQmlnSW50KCkpKSk7CiAKICAgICBkb3VibGUgbnVtYmVyID0gcHJpbVZhbHVlLnRv
TnVtYmVyKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IGY2M2ZkNzAyNzJhN2FkMDc1
N2ViMGJjYmE3OTQxZWExYjdjZjcxYWUuLmI4YzkyZjMwOWYxNzNmNWI5ZmFlY2QyYzU2MzRmYWQ4
NzJmY2RkN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC0yMjUyLDcgKzIyNTIsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlSGVhcEJpZ0ludChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJpZ0lu
dCk7CiAgICAgQVNTRVJUKGJpZ0ludC5pc0JpZ0ludDMyKCkpOwogICAgIGludDMyX3QgdmFsdWUg
PSBiaWdJbnQuYmlnSW50MzJBc0ludDMyKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgdmFsdWUpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3Qs
IHZhbHVlKSkpOwogI2Vsc2UKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJpZ0ludCk7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJl
bmEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5jcHAKaW5k
ZXggYWFjMDU2NjkwZTQxZWVkMGZiNjU5ZWFhNDQyYzk1MmY2NTUzNzM4MC4uYzcxOTg4NjI0MWQz
NTdiZjBlMzdhYTliYTcwODQ3ODQwZjEyM2Y0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9QYXJzZXJBcmVuYS5jcHAKQEAgLTk2LDkgKzk2LDEwIEBAIGNvbnN0IElkZW50aWZp
ZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUJpZ0ludERlY2ltYWxJZGVudGlmaWVyKFZNJiB2bSwg
Y29uc3QgSWRlCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzYyNwogICAgIEpTQmlnSW50KiBoZWFwQmlnSW50OwogI2lmIFVTRShCSUdJTlQzMikKLSAg
ICBpZiAoYmlnSW50LmlzQmlnSW50MzIoKSkKLSAgICAgICAgaGVhcEJpZ0ludCA9IEpTQmlnSW50
OjpjcmVhdGVGcm9tKHZtLCBiaWdJbnQuYmlnSW50MzJBc0ludDMyKCkpOwotICAgIGVsc2UKKyAg
ICBpZiAoYmlnSW50LmlzQmlnSW50MzIoKSkgeworICAgICAgICBoZWFwQmlnSW50ID0gSlNCaWdJ
bnQ6OnRyeUNyZWF0ZUZyb20odm0sIGJpZ0ludC5iaWdJbnQzMkFzSW50MzIoKSk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGhlYXBCaWdJbnQpOworICAgIH0gZWxzZQogI2VuZGlmCiAgICAgICAg
IGhlYXBCaWdJbnQgPSBiaWdJbnQuYXNIZWFwQmlnSW50KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludENvbnN0cnVjdG9yLmNwcAppbmRleCA0ZmZiZmJi
OTZkZDE3ZmFlMTk0N2I0NmJiYzgxZDk4NDJkYmMwZDA5Li43ZTNkZTVlZWFkYjE2YzkxMjE2MTYy
MWZkNGMyZWZiYTlhYmYzMDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9CaWdJbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQmlnSW50Q29uc3RydWN0b3IuY3BwCkBAIC04Nyw3ICs4Nyw3IEBAIEpTVmFsdWUgdG9C
aWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBhcmd1bWVudCkKICNp
ZiBVU0UoQklHSU5UMzIpCiAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHByaW1pdGl2ZS5hc0Jv
b2xlYW4oKSk7CiAjZWxzZQotICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0s
IHByaW1pdGl2ZS5hc0Jvb2xlYW4oKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCBwcmltaXRpdmUuYXNCb29sZWFu
KCkpKTsKICNlbmRpZgogICAgIH0KIApAQCAtMTE2LDcgKzExNiw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxCaWdJbnRDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsCiAjaWYgVVNFKEJJR0lOVDMyKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQmlnSW50MzIocHJpbWl0aXZlLmFzSW50MzIoKSkpOwogI2Vsc2UKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgcHJpbWl0aXZlLmFz
SW50MzIoKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVu
Y29kZShKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIHByaW1pdGl2ZS5hc0ludDMy
KCkpKSk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsQmlnSW50Q29uc3RydWN0b3IoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbAogICAgICAgICBkb3VibGUgbnVtYmVyID0gcHJpbWl0aXZlLmFzRG91YmxlKCk7
CiAgICAgICAgIGlmICghaXNJbnRlZ2VyKG51bWJlcikpCiAgICAgICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCAiTm90IGFuIGludGVnZXIiX3MpKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU0JpZ0ludDo6bWFrZUhlYXBCaWdJbnRPckJpZ0ludDMyKHZtLCBwcmltaXRpdmUuYXNEb3Vi
bGUoKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29k
ZShKU0JpZ0ludDo6bWFrZUhlYXBCaWdJbnRPckJpZ0ludDMyKGdsb2JhbE9iamVjdCwgcHJpbWl0
aXZlLmFzRG91YmxlKCkpKSk7CiAgICAgfQogCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBKU1ZhbHVlOjplbmNvZGUodG9CaWdJbnQoZ2xvYmFsT2JqZWN0LCBwcmltaXRpdmUpKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRQcm90b3R5cGUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50UHJvdG90eXBlLmNwcApp
bmRleCA0YTRiNmUyZTk4MmUwMjgzMWQ5ZTE2YWNiOTFkYWVkYjQ2MzczMzdjLi4xZDhmYzAwMjRh
MTk3ODFlM2JiZjdkZDMyYjJiMTRmYzAwYjEwOWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9CaWdJbnRQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0JpZ0ludFByb3RvdHlwZS5jcHAKQEAgLTc0LDEyICs3NCwxNSBAQCB2
b2lkIEJpZ0ludFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCopCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTQmlnSW50KiB0
b1RoaXNCaWdJbnRWYWx1ZShWTSYgdm0sIEpTVmFsdWUgdGhpc1ZhbHVlKQorc3RhdGljIEFMV0FZ
U19JTkxJTkUgSlNCaWdJbnQqIHRvVGhpc0JpZ0ludFZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgdGhpc1ZhbHVlKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICNp
ZiBVU0UoQklHSU5UMzIpCiAgICAgLy8gRklYTUU6IGhlYXAtYWxsb2NhdGluZyBhbGwgYmlnIGlu
dHMgaXMgaW5uZWZpY2llbnQsIGJ1dCByZS1pbXBsZW1lbnRpbmcgdG9TdHJpbmcgZm9yIHNtYWxs
IEJpZ0ludHMgaXMgZW5vdWdoIHdvcmsgdGhhdCBJJ20gZGVmZXJyaW5nIGl0IHRvIGEgbGF0ZXIg
cGF0Y2guCiAgICAgaWYgKHRoaXNWYWx1ZS5pc0JpZ0ludDMyKCkpCi0gICAgICAgIHJldHVybiBK
U0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgdGhpc1ZhbHVlLmJpZ0ludDMyQXNJbnQzMigpKTsKKyAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSkpOwogI2VuZGlmCiAKICAgICBp
ZiAodGhpc1ZhbHVlLmlzQ2VsbCgpKSB7CkBAIC05MCwxMiArOTMsMTMgQEAgc3RhdGljIEFMV0FZ
U19JTkxJTkUgSlNCaWdJbnQqIHRvVGhpc0JpZ0ludFZhbHVlKFZNJiB2bSwgSlNWYWx1ZSB0aGlz
VmFsdWUpCiAgICAgICAgICAgICBKU1ZhbHVlIGJpZ0ludCA9IGJpZ0ludE9iamVjdC0+aW50ZXJu
YWxWYWx1ZSgpOwogI2lmIFVTRShCSUdJTlQzMikKICAgICAgICAgICAgIGlmIChiaWdJbnQuaXNC
aWdJbnQzMigpKQotICAgICAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2
bSwgYmlnSW50LmJpZ0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEpTQmlnSW50OjpjcmVhdGVGcm9tKGdsb2JhbE9iamVjdCwgYmlnSW50
LmJpZ0ludDMyQXNJbnQzMigpKSk7CiAjZW5kaWYKICAgICAgICAgICAgIHJldHVybiBiaWdJbnQu
YXNIZWFwQmlnSW50KCk7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB0aHJvd1R5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAiJ3RoaXMnIHZhbHVlIG11c3QgYmUgYSBCaWdJbnQgb3IgQmln
SW50T2JqZWN0Il9zKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtMTA0LDkgKzEwOCw4
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYmlnSW50UHJvdG9GdW5jVG9TdHJpbmco
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEpT
QmlnSW50KiB2YWx1ZSA9IHRvVGhpc0JpZ0ludFZhbHVlKHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1
ZSgpKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihn
bG9iYWxPYmplY3QsIHNjb3BlLCAiJ3RoaXMnIHZhbHVlIG11c3QgYmUgYSBCaWdJbnQgb3IgQmln
SW50T2JqZWN0Il9zKTsKKyAgICBKU0JpZ0ludCogdmFsdWUgPSB0b1RoaXNCaWdJbnRWYWx1ZShn
bG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBBU1NFUlQodmFsdWUpOwogCkBAIC0xMjksOSArMTMy
LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBiaWdJbnRQcm90b0Z1bmNUb0xvY2Fs
ZVN0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmEKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAg
SlNCaWdJbnQqIHZhbHVlID0gdG9UaGlzQmlnSW50VmFsdWUodm0sIGNhbGxGcmFtZS0+dGhpc1Zh
bHVlKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICIndGhpcycgdmFsdWUgbXVzdCBiZSBhIEJpZ0ludCBvciBC
aWdJbnRPYmplY3QiX3MpOworICAgIEpTQmlnSW50KiB2YWx1ZSA9IHRvVGhpc0JpZ0ludFZhbHVl
KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGF1dG8qIG51bWJlckZvcm1hdCA9IEludGxOdW1i
ZXJGb3JtYXQ6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5udW1iZXJGb3JtYXRTdHJ1Y3R1cmUo
KSk7CiAgICAgbnVtYmVyRm9ybWF0LT5pbml0aWFsaXplTnVtYmVyRm9ybWF0KGdsb2JhbE9iamVj
dCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSk7CkBAIC0x
NDQsOSArMTQ2LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBiaWdJbnRQcm90b0Z1
bmNWYWx1ZU9mKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCi0gICAgSlNCaWdJbnQqIHZhbHVlID0gdG9UaGlzQmlnSW50VmFsdWUodm0sIGNhbGxGcmFt
ZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICIndGhpcycgdmFsdWUgbXVzdCBiZSBhIEJp
Z0ludCBvciBCaWdJbnRPYmplY3QiX3MpOworICAgIEpTQmlnSW50KiB2YWx1ZSA9IHRvVGhpc0Jp
Z0ludFZhbHVlKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIEludGVncml0eTo6YXVkaXRTdHJ1
Y3R1cmVJRCh2bSwgdmFsdWUtPnN0cnVjdHVyZUlEKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUodmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVkVHlwZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlw
ZXMuY3BwCmluZGV4IDYwMWQwMTlkZjkzZjhmMmY4Y2M2YzFmNTkxYTk0MTU0OGRjMDdmY2IuLmY5
ZjYyNGI0NmU5NzUwYmY0OTc4MTFmMzkxYWU0YTc2MjQ0N2Q1MjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKQEAgLTEyNzksNyArMTI3OSw4IEBA
IGNsYXNzIENhY2hlZEJpZ0ludCA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxKU0JpZ0lu
dD4gewogCiAgICAgSlNCaWdJbnQqIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyKSBjb25zdAogICAg
IHsKLSAgICAgICAgSlNCaWdJbnQqIGJpZ0ludCA9IEpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3Ro
VW5jaGVja2VkKGRlY29kZXIudm0oKSwgbV9sZW5ndGgpOworICAgICAgICBKU0JpZ0ludCogYmln
SW50ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgoZGVjb2Rlci52bSgpLCBtX2xlbmd0
aCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJpZ0ludCk7CiAgICAgICAgIGJpZ0ludC0+c2V0
U2lnbihtX3NpZ24pOwogICAgICAgICBpZiAobV9sZW5ndGgpCiAgICAgICAgICAgICBtZW1jcHko
YmlnSW50LT5kYXRhU3RvcmFnZSgpLCB0aGlzLT5idWZmZXIoKSwgc2l6ZW9mKEpTQmlnSW50OjpE
aWdpdCkgKiBtX2xlbmd0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcAppbmRleCBhMzljMTM3NTc1NmZjZDU5ZjI2NDViMDA4MTRhNjBh
ODY4ZmIxOWFjLi4zMDM0NGMxMjBlMmRiMzczYzNlMDRkNGI2Zjg2OGI3NTY4MDIwOGI5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAK
QEAgLTUzMCw3ICs1MzAsOCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmVnYXRlKQogCiAj
aWYgVVNFKEJJR0lOVDMyKQogICAgIGlmIChwcmltVmFsdWUuaXNCaWdJbnQzMigpKSB7Ci0gICAg
ICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5i
aWdJbnQzMkFzSW50MzIoKSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVu
YXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpOworICAg
ICAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICAgICAgUkVUVVJOX1dJVEhfUFJPRklMSU5HKHJl
c3VsdCwgewogICAgICAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKG1l
dGFkYXRhLCByZXN1bHQsIG9wZXJhbmQpOwogICAgICAgICB9KTsKQEAgLTUzOCw3ICs1MzksOCBA
QCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmVnYXRlKQogI2VuZGlmCiAKICAgICBpZiAocHJp
bVZhbHVlLmlzSGVhcEJpZ0ludCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJ
bnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSk7CisgICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFs
dWUuYXNIZWFwQmlnSW50KCkpOworICAgICAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICAgICAg
UkVUVVJOX1dJVEhfUFJPRklMSU5HKHJlc3VsdCwgewogICAgICAgICAgICAgdXBkYXRlQXJpdGhQ
cm9maWxlRm9yVW5hcnlBcml0aE9wKG1ldGFkYXRhLCByZXN1bHQsIG9wZXJhbmQpOwogICAgICAg
ICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1i
ZXJGb3JtYXRQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHAKaW5kZXggYWFiYWU3YmU5YmYxM2MzNTY2MWIyMjk0
NWIxYjNiZDQ5MmVkNGU2ZC4uNmRhYTg2YTkwYTE4YzM0YWI5MDQzMDUxOWVkMmFiMmM4MTY0MWJj
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZv
cm1hdFByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHAKQEAgLTk2LDggKzk2LDkgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckZvcm1hdEZ1bmNGb3JtYXQoSlNHbG9i
YWxPYmplY3QqIGcKIAogI2lmIFVTRShCSUdJTlQzMikKICAgICBpZiAoYmlnSW50T3JOdW1iZXIu
aXNCaWdJbnQzMigpKSB7Ci0gICAgICAgIEpTQmlnSW50KiB2YWx1ZSA9IEpTQmlnSW50OjpjcmVh
dGVGcm9tKHZtLCBiaWdJbnRPck51bWJlci5iaWdJbnQzMkFzSW50MzIoKSk7Ci0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUobnVtYmVyRm9ybWF0LT5mb3JtYXQoZ2xvYmFsT2JqZWN0LCB2
YWx1ZSkpOworICAgICAgICBKU0JpZ0ludCogdmFsdWUgPSBKU0JpZ0ludDo6Y3JlYXRlRnJvbShn
bG9iYWxPYmplY3QsIGJpZ0ludE9yTnVtYmVyLmJpZ0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUobnVtYmVyRm9ybWF0LT5mb3JtYXQoZ2xvYmFsT2Jq
ZWN0LCB2YWx1ZSkpKTsKICAgICB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCaWdJbnQuY3BwCmluZGV4IDkwNDMyOWE3MjEwY2ZlZWU3YjVlYWI3NmMxNGVjMDA3
ZGNhZjEyYjkuLjA3NjY4ZDU2YmJjMTcyYTBmZDA3NTVmYTFhYzY1NzU1ODQ0NzkyZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAKQEAgLTgyLDQyICs4Miw2
MSBAQCBTdHJ1Y3R1cmUqIEpTQmlnSW50OjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbAogICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEhlYXBCaWdJbnRUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRl
WmVybyhWTSYgdm0pCitpbmxpbmUgSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVaZXJvKEpTR2xv
YmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIFZNJiB2bSkKIHsKLSAgICBKU0Jp
Z0ludCogemVyb0JpZ0ludCA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIDApOwotICAg
IHJldHVybiB6ZXJvQmlnSW50OworICAgIHJldHVybiBjcmVhdGVXaXRoTGVuZ3RoKG51bGxPckds
b2JhbE9iamVjdEZvck9PTSwgdm0sIDApOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OnRyeUNy
ZWF0ZVdpdGhMZW5ndGgoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgbGVu
Z3RoKQorSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVaZXJvKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCiB7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICByZXR1cm4gY3JlYXRlWmVybyhn
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+dm0oKSk7Cit9CisKK0pTQmlnSW50KiBKU0JpZ0lu
dDo6dHJ5Q3JlYXRlWmVybyhWTSYgdm0pCit7CisgICAgcmV0dXJuIGNyZWF0ZVplcm8obnVsbHB0
ciwgdm0pOworfQogCitpbmxpbmUgSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3Ro
KEpTR2xvYmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIFZNJiB2bSwgdW5zaWdu
ZWQgbGVuZ3RoKQoreworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBpZiAoVU5MSUtFTFkobGVuZ3RoID4gbWF4TGVuZ3RoKSkgewotICAgICAgICB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkJpZ0ludCBnZW5lcmF0ZWQgZnJv
bSB0aGlzIG9wZXJhdGlvbiBpcyB0b28gYmlnIl9zKTsKKyAgICAgICAgaWYgKG51bGxPckdsb2Jh
bE9iamVjdEZvck9PTSkKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihudWxsT3JH
bG9iYWxPYmplY3RGb3JPT00sIHNjb3BlLCAiQmlnSW50IGdlbmVyYXRlZCBmcm9tIHRoaXMgb3Bl
cmF0aW9uIGlzIHRvbyBiaWciX3MpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAK
LSAgICBzY29wZS5yZWxlYXNlKCk7Ci0KLSAgICByZXR1cm4gY3JlYXRlV2l0aExlbmd0aFVuY2hl
Y2tlZCh2bSwgbGVuZ3RoKTsKLX0KLQotSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVXaXRoTGVu
Z3RoVW5jaGVja2VkKFZNJiB2bSwgdW5zaWduZWQgbGVuZ3RoKQotewogICAgIEFTU0VSVChsZW5n
dGggPD0gbWF4TGVuZ3RoKTsKLSAgICB2b2lkKiBkYXRhID0gR2lnYWNhZ2U6Om1hbGxvYyhHaWdh
Y2FnZTo6UHJpbWl0aXZlLCBsZW5ndGggKiBzaXplb2YoRGlnaXQpKTsKKyAgICB2b2lkKiBkYXRh
ID0gR2lnYWNhZ2U6OnRyeU1hbGxvYyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBsZW5ndGggKiBzaXpl
b2YoRGlnaXQpKTsKKyAgICBpZiAoVU5MSUtFTFkoIWRhdGEpKSB7CisgICAgICAgIGlmIChudWxs
T3JHbG9iYWxPYmplY3RGb3JPT00pCisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3Io
bnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBzY29wZSk7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KICAgICBKU0JpZ0ludCogYmlnSW50ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8SlNCaWdJbnQ+KHZtLmhlYXApKSBKU0JpZ0ludCh2bSwgdm0uYmlnSW50U3RydWN0dXJlLmdl
dCgpLCByZWludGVycHJldF9jYXN0PERpZ2l0Kj4oZGF0YSksIGxlbmd0aCk7CiAgICAgYmlnSW50
LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIGJpZ0ludDsKIH0KIAotSlNCaWdJbnQq
IEpTQmlnSW50OjpjcmVhdGVGcm9tKFZNJiB2bSwgaW50MzJfdCB2YWx1ZSkKK0pTQmlnSW50KiBK
U0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aChWTSYgdm0sIHVuc2lnbmVkIGxlbmd0aCkKK3sK
KyAgICByZXR1cm4gY3JlYXRlV2l0aExlbmd0aChudWxscHRyLCB2bSwgbGVuZ3RoKTsKK30KKwor
SlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gY3JlYXRlV2l0aExlbmd0
aChnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+dm0oKSwgbGVuZ3RoKTsKK30KKworaW5saW5l
IEpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCogbnVsbE9yR2xv
YmFsT2JqZWN0Rm9yT09NLCBWTSYgdm0sIGludDMyX3QgdmFsdWUpCiB7CiAgICAgaWYgKCF2YWx1
ZSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8odm0pOwotICAgIAotICAgIEpTQmlnSW50KiBi
aWdJbnQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCAxKTsKKyAgICAgICAgcmV0dXJu
IGNyZWF0ZVplcm8obnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCB2bSk7CisKKyAgICBKU0JpZ0lu
dCogYmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZt
LCAxKTsKKyAgICBpZiAoVU5MSUtFTFkoIWJpZ0ludCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCiAgICAgaWYgKHZhbHVlIDwgMCkgewogICAgICAgICBiaWdJbnQtPnNldERpZ2l0KDAsIHN0
YXRpY19jYXN0PERpZ2l0PigtMSAqIHN0YXRpY19jYXN0PGludDY0X3Q+KHZhbHVlKSkpOwogICAg
ICAgICBiaWdJbnQtPnNldFNpZ24odHJ1ZSk7CkBAIC0xMjcsMzIgKzE0Niw1MSBAQCBKU0JpZ0lu
dCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oVk0mIHZtLCBpbnQzMl90IHZhbHVlKQogICAgIHJldHVy
biBiaWdJbnQ7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShWTSYgdm0sIHVp
bnQzMl90IHZhbHVlKQorSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgdmFsdWUpCiB7CisgICAgcmV0dXJuIGNyZWF0ZUZy
b20oZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPnZtKCksIHZhbHVlKTsKK30KKworSlNCaWdJ
bnQqIEpTQmlnSW50Ojp0cnlDcmVhdGVGcm9tKFZNJiB2bSwgaW50MzJfdCB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gY3JlYXRlRnJvbShudWxscHRyLCB2bSwgdmFsdWUpOworfQorCitKU0JpZ0ludCog
SlNCaWdJbnQ6OmNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDMy
X3QgdmFsdWUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICghdmFsdWUpCi0gICAg
ICAgIHJldHVybiBjcmVhdGVaZXJvKHZtKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBjcmVhdGVaZXJvKGdsb2JhbE9iamVjdCkpOwogICAgIAotICAgIEpTQmlnSW50KiBiaWdJ
bnQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCAxKTsKKyAgICBKU0JpZ0ludCogYmln
SW50ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIDEpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIGJpZ0ludC0+c2V0RGlnaXQoMCwgc3RhdGlj
X2Nhc3Q8RGlnaXQ+KHZhbHVlKSk7CiAgICAgcmV0dXJuIGJpZ0ludDsKIH0KIAotaW5saW5lIEpT
QmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbUltcGwoVk0mIHZtLCB1aW50NjRfdCB2YWx1ZSwg
Ym9vbCBzaWduKQoraW5saW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbUltcGwoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0X3QgdmFsdWUsIGJvb2wgc2lnbikKIHsK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGNy
ZWF0ZVplcm8odm0pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNyZWF0ZVpl
cm8oZ2xvYmFsT2JqZWN0KSk7CiAKICAgICAvLyBUaGlzIHBhdGggaXMgbm90IGp1c3QgYW4gb3B0
aW1pemF0aW9uOiBiZWNhdXNlIHdlIGRvIG5vdCBjYWxsIHJpZ2h0VHJpbSBhdCB0aGUgZW5kIG9m
IHRoaXMgZnVuY3Rpb24sCiAgICAgLy8gaXQgd291bGQgYmUgYSBidWcgdG8gY3JlYXRlIGEgQmln
SW50IHdpdGggbGVuZ3RoPTIgaW4gdGhpcyBjYXNlLgogICAgIGlmIChzaXplb2YoRGlnaXQpID09
IDggfHwgdmFsdWUgPD0gVUlOVDMyX01BWCkgewotICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0g
Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgMSk7CisgICAgICAgIEpTQmlnSW50KiBiaWdJ
bnQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgMSk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICBiaWdJbnQtPnNldERpZ2l0KDAs
IHN0YXRpY19jYXN0PERpZ2l0Pih2YWx1ZSkpOwogICAgICAgICBiaWdJbnQtPnNldFNpZ24oc2ln
bik7CiAgICAgICAgIHJldHVybiBiaWdJbnQ7CiAgICAgfQogCiAgICAgQVNTRVJUKHNpemVvZihE
aWdpdCkgPT0gNCk7Ci0gICAgSlNCaWdJbnQqIGJpZ0ludCA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNo
ZWNrZWQodm0sIDIpOworICAgIEpTQmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVuZ3RoKGds
b2JhbE9iamVjdCwgMik7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7
CiAgICAgRGlnaXQgbG93Qml0cyAgPSBzdGF0aWNfY2FzdDxEaWdpdD4odmFsdWUgJiAweGZmZmZm
ZmZmKTsKICAgICBEaWdpdCBoaWdoQml0cyA9IHN0YXRpY19jYXN0PERpZ2l0PigodmFsdWUgPj4g
MzIpICYgMHhmZmZmZmZmZik7CiAKQEAgLTE2NSwxMiArMjAzLDEyIEBAIGlubGluZSBKU0JpZ0lu
dCogSlNCaWdJbnQ6OmNyZWF0ZUZyb21JbXBsKFZNJiB2bSwgdWludDY0X3QgdmFsdWUsIGJvb2wg
c2lnbikKICAgICByZXR1cm4gYmlnSW50OwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0
ZUZyb20oVk0mIHZtLCB1aW50NjRfdCB2YWx1ZSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRl
RnJvbShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfdCB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gY3JlYXRlRnJvbUltcGwodm0sIHZhbHVlLCBmYWxzZSk7CisgICAgcmV0dXJuIGNy
ZWF0ZUZyb21JbXBsKGdsb2JhbE9iamVjdCwgdmFsdWUsIGZhbHNlKTsKIH0KIAotSlNCaWdJbnQq
IEpTQmlnSW50OjpjcmVhdGVGcm9tKFZNJiB2bSwgaW50NjRfdCB2YWx1ZSkKK0pTQmlnSW50KiBK
U0JpZ0ludDo6Y3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQ2NF90
IHZhbHVlKQogewogICAgIHVpbnQ2NF90IHVuc2lnbmVkVmFsdWU7CiAgICAgYm9vbCBzaWduID0g
ZmFsc2U7CkBAIC0xNzksMjQgKzIxNywzMSBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZy
b20oVk0mIHZtLCBpbnQ2NF90IHZhbHVlKQogICAgICAgICBzaWduID0gdHJ1ZTsKICAgICB9IGVs
c2UKICAgICAgICAgdW5zaWduZWRWYWx1ZSA9IHZhbHVlOwotICAgIHJldHVybiBjcmVhdGVGcm9t
SW1wbCh2bSwgdW5zaWduZWRWYWx1ZSwgc2lnbik7CisgICAgcmV0dXJuIGNyZWF0ZUZyb21JbXBs
KGdsb2JhbE9iamVjdCwgdW5zaWduZWRWYWx1ZSwgc2lnbik7CiB9CiAKLUpTQmlnSW50KiBKU0Jp
Z0ludDo6Y3JlYXRlRnJvbShWTSYgdm0sIGJvb2wgdmFsdWUpCitKU0JpZ0ludCogSlNCaWdJbnQ6
OmNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgYm9vbCB2YWx1ZSkKIHsK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGNy
ZWF0ZVplcm8odm0pOwotICAgIAotICAgIEpTQmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVu
Z3RoVW5jaGVja2VkKHZtLCAxKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBj
cmVhdGVaZXJvKGdsb2JhbE9iamVjdCkpOworCisgICAgSlNCaWdJbnQqIGJpZ0ludCA9IGNyZWF0
ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCAxKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKICAgICBiaWdJbnQtPnNldERpZ2l0KDAsIHN0YXRpY19jYXN0PERpZ2l0
Pih2YWx1ZSkpOwogICAgIHJldHVybiBiaWdJbnQ7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6
Y3JlYXRlRnJvbShWTSYgdm0sIGRvdWJsZSB2YWx1ZSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6Y3Jl
YXRlRnJvbShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBkb3VibGUgdmFsdWUpCiB7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEFTU0VSVChpc0ludGVnZXIodmFsdWUpKTsKICAgICBp
ZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gY3JlYXRlWmVybyh2bSk7CisgICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgY3JlYXRlWmVybyhnbG9iYWxPYmplY3QpKTsKIAogICAgIGJv
b2wgc2lnbiA9IHZhbHVlIDwgMDsgLy8gLTAgd2FzIGFscmVhZHkgaGFuZGxlZCBhYm92ZS4KICAg
ICB1aW50NjRfdCBkb3VibGVCaXRzID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih2YWx1ZSk7CkBA
IC0yMDUsNyArMjUwLDggQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKFZNJiB2bSwg
ZG91YmxlIHZhbHVlKQogICAgIEFTU0VSVChyYXdFeHBvbmVudCA+PSAweDNmZik7IC8vIFNpbmNl
IHZhbHVlIGlzIGludGVnZXIsIGV4cG9uZW50IHNob3VsZCBiZSA+PSAwICsgYmlhcyAoMHgzZmYp
LgogICAgIGludDMyX3QgZXhwb25lbnQgPSByYXdFeHBvbmVudCAtIDB4M2ZmOwogICAgIGludDMy
X3QgZGlnaXRzID0gZXhwb25lbnQgLyBkaWdpdEJpdHMgKyAxOwotICAgIEpTQmlnSW50KiByZXN1
bHQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCBkaWdpdHMpOworICAgIEpTQmlnSW50
KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgZGlnaXRzKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBBU1NFUlQocmVzdWx0KTsK
ICAgICByZXN1bHQtPmluaXRpYWxpemUoSW5pdGlhbGl6YXRpb25UeXBlOjpXaXRoWmVybyk7CiAg
ICAgcmVzdWx0LT5zZXRTaWduKHNpZ24pOwpAQCAtMjU5LDcgKzMwNSw3IEBAIEpTQmlnSW50KiBK
U0JpZ0ludDo6Y3JlYXRlRnJvbShWTSYgdm0sIGRvdWJsZSB2YWx1ZSkKICAgICAgICAgICAgIGRp
Z2l0ID0gMDsKICAgICAgICAgcmVzdWx0LT5zZXREaWdpdChkaWdpdEluZGV4LCBkaWdpdCk7CiAg
ICAgfQotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0KIAogSlNW
YWx1ZSBKU0JpZ0ludDo6dG9QcmltaXRpdmUoSlNHbG9iYWxPYmplY3QqLCBQcmVmZXJyZWRQcmlt
aXRpdmVUeXBlKSBjb25zdApAQCAtMjc0LDExICszMjAsMTEgQEAgSlNWYWx1ZSBKU0JpZ0ludDo6
cGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RyaW5nVmlldyBzLCBFcnJv
clBhcnMKICAgICByZXR1cm4gcGFyc2VJbnQoZ2xvYmFsT2JqZWN0LCBzLmNoYXJhY3RlcnMxNigp
LCBzLmxlbmd0aCgpLCBwYXJzZXJNb2RlKTsKIH0KIAotSlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJ
bnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBTdHJpbmdWaWV3IHMsIHVp
bnQ4X3QgcmFkaXgsIEVycm9yUGFyc2VNb2RlIHBhcnNlck1vZGUsIFBhcnNlSW50U2lnbiBzaWdu
KQorSlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqIG51bGxPckdsb2Jh
bE9iamVjdEZvck9PTSwgVk0mIHZtLCBTdHJpbmdWaWV3IHMsIHVpbnQ4X3QgcmFkaXgsIEVycm9y
UGFyc2VNb2RlIHBhcnNlck1vZGUsIFBhcnNlSW50U2lnbiBzaWduKQogewogICAgIGlmIChzLmlz
OEJpdCgpKQotICAgICAgICByZXR1cm4gcGFyc2VJbnQoZ2xvYmFsT2JqZWN0LCB2bSwgcy5jaGFy
YWN0ZXJzOCgpLCBzLmxlbmd0aCgpLCAwLCByYWRpeCwgcGFyc2VyTW9kZSwgc2lnbiwgUGFyc2VJ
bnRNb2RlOjpEaXNhbGxvd0VtcHR5U3RyaW5nKTsKLSAgICByZXR1cm4gcGFyc2VJbnQoZ2xvYmFs
T2JqZWN0LCB2bSwgcy5jaGFyYWN0ZXJzMTYoKSwgcy5sZW5ndGgoKSwgMCwgcmFkaXgsIHBhcnNl
ck1vZGUsIHNpZ24sIFBhcnNlSW50TW9kZTo6RGlzYWxsb3dFbXB0eVN0cmluZyk7CisgICAgICAg
IHJldHVybiBwYXJzZUludChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCBzLmNoYXJhY3Rl
cnM4KCksIHMubGVuZ3RoKCksIDAsIHJhZGl4LCBwYXJzZXJNb2RlLCBzaWduLCBQYXJzZUludE1v
ZGU6OkRpc2FsbG93RW1wdHlTdHJpbmcpOworICAgIHJldHVybiBwYXJzZUludChudWxsT3JHbG9i
YWxPYmplY3RGb3JPT00sIHZtLCBzLmNoYXJhY3RlcnMxNigpLCBzLmxlbmd0aCgpLCAwLCByYWRp
eCwgcGFyc2VyTW9kZSwgc2lnbiwgUGFyc2VJbnRNb2RlOjpEaXNhbGxvd0VtcHR5U3RyaW5nKTsK
IH0KIAogSlNWYWx1ZSBKU0JpZ0ludDo6c3RyaW5nVG9CaWdJbnQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgU3RyaW5nVmlldyBzKQpAQCAtMzE4LDcgKzM2NCw4IEBAIGNsYXNzIEhlYXBC
aWdJbnRJbXBsIHsKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgc2lnbigpIHsgcmV0dXJuIG1fYmln
SW50LT5zaWduKCk7IH0KICAgICBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0
dXJuIG1fYmlnSW50LT5sZW5ndGgoKTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQ6OkRp
Z2l0IGRpZ2l0KHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fYmlnSW50LT5kaWdpdChpKTsgfQotICAg
IEFMV0FZU19JTkxJTkUgSlNCaWdJbnQqIHRvSGVhcEJpZ0ludChWTSYpIHsgcmV0dXJuIG1fYmln
SW50OyB9CisgICAgQUxXQVlTX0lOTElORSBKU0JpZ0ludCogdG9IZWFwQmlnSW50KEpTR2xvYmFs
T2JqZWN0KiwgVk0mKSB7IHJldHVybiBtX2JpZ0ludDsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNC
aWdJbnQqIHRvSGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCopIHsgcmV0dXJuIG1fYmlnSW50OyB9
CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIHN0cnVjdCBKU0JpZ0ludDo6SW1wbFJlc3VsdDsKQEAg
LTM0Myw3ICszOTAsMTUgQEAgY2xhc3MgSW50MzJCaWdJbnRJbXBsIHsKICAgICAgICAgcmV0dXJu
IG1fdmFsdWU7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBKU0JpZ0ludCogdG9IZWFwQmln
SW50KFZNJiB2bSkgeyByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIG1fdmFsdWUpOyB9
CisgICAgQUxXQVlTX0lOTElORSBKU0JpZ0ludCogdG9IZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0
KiBudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0JpZ0ludDo6Y3JlYXRlRnJvbShudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCBtX3Zh
bHVlKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTQmlnSW50KiB0b0hlYXBCaWdJbnQo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0Jp
Z0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIG1fdmFsdWUpOworICAgIH0KIAogcHJpdmF0
ZToKICAgICBmcmllbmQgc3RydWN0IEpTQmlnSW50OjpJbXBsUmVzdWx0OwpAQCAtNDAyLDEzICs0
NTcsMTMgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSB0cnlDb252ZXJ0VG9CaWdJbnQz
MihKU0JpZ0ludDo6SW1wbFJlc3VsdCBpbXBsUmVzdWwKICAgICByZXR1cm4gdHJ5Q29udmVydFRv
QmlnSW50MzIoaW1wbFJlc3VsdC5wYXlsb2FkLmFzSGVhcEJpZ0ludCgpKTsKIH0KIAotc3RhdGlj
IEFMV0FZU19JTkxJTkUgSlNCaWdJbnQ6OkltcGxSZXN1bHQgemVyb0ltcGwoVk0mIHZtKQorc3Rh
dGljIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQ6OkltcGxSZXN1bHQgemVyb0ltcGwoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICNpZiBVU0UoQklHSU5UMzIpCi0gICAgVU5VU0VEX1BB
UkFNKHZtKTsKKyAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKICAgICByZXR1cm4ganNC
aWdJbnQzMigwKTsKICNlbHNlCi0gICAgcmV0dXJuIEpTQmlnSW50OjpjcmVhdGVaZXJvKHZtKTsK
KyAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZVplcm8oZ2xvYmFsT2JqZWN0KTsKICNlbmRpZgog
fQogCkBAIC00MzEsNyArNDg2LDcgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmV4
cG9uZW50aWF0ZUltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmkKIAogICAgIC8v
IDIuIElmIGJhc2UgaXMgMG4gYW5kIGV4cG9uZW50IGlzIDBuLCByZXR1cm4gMW4uCiAgICAgaWYg
KGV4cG9uZW50LmlzWmVybygpKQotICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20o
dm0sIDEpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTQmlnSW50OjpjcmVh
dGVGcm9tKGdsb2JhbE9iamVjdCwgMSkpOwogICAgIAogICAgIC8vIDMuIFJldHVybiBhIEJpZ0lu
dCByZXByZXNlbnRpbmcgdGhlIG1hdGhlbWF0aWNhbCB2YWx1ZSBvZiBiYXNlIHJhaXNlZAogICAg
IC8vICAgIHRvIHRoZSBwb3dlciBleHBvbmVudC4KQEAgLTQ0MSw3ICs0OTYsNyBAQCBKU0JpZ0lu
dDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6ZXhwb25lbnRpYXRlSW1wbChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBCaQogICAgIGlmIChiYXNlLmxlbmd0aCgpID09IDEgJiYgYmFzZS5kaWdp
dCgwKSA9PSAxKSB7CiAgICAgICAgIC8vICgtMSkgKiogZXZlbl9udW1iZXIgPT0gMS4KICAgICAg
ICAgaWYgKGJhc2Uuc2lnbigpICYmICEoZXhwb25lbnQuZGlnaXQoMCkgJiAxKSkKLSAgICAgICAg
ICAgIHJldHVybiBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwodm0sIGJhc2UpOworICAgICAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwoZ2xv
YmFsT2JqZWN0LCBiYXNlKSk7CiAKICAgICAgICAgLy8gKC0xKSAqKiBvZGRfbnVtYmVyID09IC0x
OyAxICoqIGFueXRoaW5nID09IDEuCiAgICAgICAgIHJldHVybiBiYXNlOwpAQCAtNDY4LDcgKzUy
Myw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpleHBvbmVudGlhdGVJbXBsKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpCiAgICAgaWYgKGJhc2UubGVuZ3RoKCkgPT0g
MSAmJiBiYXNlLmRpZ2l0KDApID09IDIpIHsKICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciAyXm4u
CiAgICAgICAgIGludCBuZWVkZWREaWdpdHMgPSAxICsgKG4gLyBkaWdpdEJpdHMpOwotICAgICAg
ICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFs
T2JqZWN0LCBuZWVkZWREaWdpdHMpOworICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJ
bnQ6OmNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCBuZWVkZWREaWdpdHMpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgICAgICByZXN1bHQt
PmluaXRpYWxpemUoSW5pdGlhbGl6YXRpb25UeXBlOjpXaXRoWmVybyk7CkBAIC00ODMsMTEgKzUz
OCwxNCBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6ZXhwb25lbnRpYXRlSW1wbChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaQogICAgIH0KIAogICAgIEpTQmlnSW50KiBy
ZXN1bHQgPSBudWxscHRyOwotICAgIEpTQmlnSW50KiBydW5uaW5nU3F1YXJlID0gYmFzZS50b0hl
YXBCaWdJbnQodm0pOworICAgIEpTQmlnSW50KiBydW5uaW5nU3F1YXJlID0gYmFzZS50b0hlYXBC
aWdJbnQoZ2xvYmFsT2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxs
cHRyKTsKIAogICAgIC8vIFRoaXMgaW1wbGljaXRseSBzZXRzIHRoZSByZXN1bHQncyBzaWduIGNv
cnJlY3RseS4KLSAgICBpZiAobiAmIDEpCi0gICAgICAgIHJlc3VsdCA9IGJhc2UudG9IZWFwQmln
SW50KHZtKTsKKyAgICBpZiAobiAmIDEpIHsKKyAgICAgICAgcmVzdWx0ID0gYmFzZS50b0hlYXBC
aWdJbnQoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
bnVsbHB0cik7CisgICAgfQogCiAgICAgbiA+Pj0gMTsKICAgICBmb3IgKDsgbjsgbiA+Pj0gMSkg
ewpAQCAtNTQ4LDcgKzYwNiw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjptdWx0
aXBseUltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50CiAgICAgICAgIHJl
dHVybiB5OwogCiAgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0geC5sZW5ndGgoKSArIHkubGVu
Z3RoKCk7Ci0gICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVXaXRoTGVu
Z3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0g
SlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIHJlc3VsdC0+aW5p
dGlhbGl6ZShJbml0aWFsaXphdGlvblR5cGU6OldpdGhaZXJvKTsKIApAQCAtNTU2LDcgKzYxNCw3
IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjptdWx0aXBseUltcGwoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50CiAgICAgICAgIG11bHRpcGx5QWNjdW11bGF0ZSh5
LCB4LmRpZ2l0KGkpLCByZXN1bHQsIGkpOwogCiAgICAgcmVzdWx0LT5zZXRTaWduKHguc2lnbigp
ICE9IHkuc2lnbigpKTsKLSAgICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0odm0pOworICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7
CiB9CiAKIEpTVmFsdWUgSlNCaWdJbnQ6Om11bHRpcGx5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKQEAgLTU5MCwyNCArNjQ4LDMwIEBAIEpT
QmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpkaXZpZGVJbXBsKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEJpZ0ludEltCiAgICAgLy8gMy4gUmV0dXJuIGEgQmlnSW50IHJlcHJlc2Vu
dGluZyBxdW90aWVudCByb3VuZGVkIHRvd2FyZHMgMCB0byB0aGUgbmV4dAogICAgIC8vICAgIGlu
dGVncmFsIHZhbHVlLgogICAgIGlmIChhYnNvbHV0ZUNvbXBhcmUoeCwgeSkgPT0gQ29tcGFyaXNv
blJlc3VsdDo6TGVzc1RoYW4pCi0gICAgICAgIHJldHVybiB6ZXJvSW1wbCh2bSk7CisgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgemVyb0ltcGwoZ2xvYmFsT2JqZWN0KSk7CiAKICAg
ICBKU0JpZ0ludCogcXVvdGllbnQgPSBudWxscHRyOwogICAgIGJvb2wgcmVzdWx0U2lnbiA9IHgu
c2lnbigpICE9IHkuc2lnbigpOwogICAgIGlmICh5Lmxlbmd0aCgpID09IDEpIHsKICAgICAgICAg
RGlnaXQgZGl2aXNvciA9IHkuZGlnaXQoMCk7Ci0gICAgICAgIGlmIChkaXZpc29yID09IDEpCi0g
ICAgICAgICAgICByZXR1cm4gcmVzdWx0U2lnbiA9PSB4LnNpZ24oKSA/IEpTQmlnSW50OjpJbXBs
UmVzdWx0IHsgeCB9IDogSlNCaWdJbnQ6OnVuYXJ5TWludXNJbXBsKHZtLCB4KTsKKyAgICAgICAg
aWYgKGRpdmlzb3IgPT0gMSkgeworICAgICAgICAgICAgaWYgKHJlc3VsdFNpZ24gPT0geC5zaWdu
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpJbXBsUmVzdWx0IHsgeCB9Owor
ICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6dW5hcnlNaW51
c0ltcGwoZ2xvYmFsT2JqZWN0LCB4KSk7CisgICAgICAgIH0KIAogICAgICAgICBEaWdpdCByZW1h
aW5kZXI7Ci0gICAgICAgIGFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcih2bSwgeCwgZGl2aXNv
ciwgJnF1b3RpZW50LCByZW1haW5kZXIpOworICAgICAgICBhYnNvbHV0ZURpdldpdGhEaWdpdERp
dmlzb3IoZ2xvYmFsT2JqZWN0LCB2bSwgeCwgZGl2aXNvciwgJnF1b3RpZW50LCByZW1haW5kZXIp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICB9IGVs
c2UgewotICAgICAgICBhYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKGdsb2JhbE9iamVjdCwg
eCwgeS50b0hlYXBCaWdJbnQodm0pLCAmcXVvdGllbnQsIG51bGxwdHIpOworICAgICAgICBKU0Jp
Z0ludCogeUJpZ0ludCA9IHkudG9IZWFwQmlnSW50KGdsb2JhbE9iamVjdCk7CisgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAgICAgICBhYnNvbHV0ZURpdldp
dGhCaWdJbnREaXZpc29yKGdsb2JhbE9iamVjdCwgeCwgeUJpZ0ludCwgJnF1b3RpZW50LCBudWxs
cHRyKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAg
fQogCiAgICAgcXVvdGllbnQtPnNldFNpZ24ocmVzdWx0U2lnbik7Ci0gICAgcmV0dXJuIHF1b3Rp
ZW50LT5yaWdodFRyaW0odm0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcXVvdGll
bnQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0KIAogSlNWYWx1ZSBKU0JpZ0ludDo6ZGl2
aWRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCog
eSkKQEAgLTYyNiwxMSArNjkwLDE2IEBAIEpTVmFsdWUgSlNCaWdJbnQ6OmRpdmlkZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KQogI2VuZGlmCiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgotSlNCaWdJbnQqIEpTQmlnSW50Ojpjb3B5
KFZNJiB2bSwgQmlnSW50SW1wbCB4KQorSlNCaWdJbnQqIEpTQmlnSW50Ojpjb3B5KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCkKIHsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgQVNTRVJUKCF4LmlzWmVybygpKTsKIAotICAgIEpTQmlnSW50KiByZXN1bHQgPSBK
U0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgeC5sZW5ndGgoKSk7CisgICAg
SlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCB4Lmxlbmd0
aCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHQtPmxlbmd0aCgpOyArK2kpCiAgICAgICAgIHJl
c3VsdC0+c2V0RGlnaXQoaSwgeC5kaWdpdChpKSk7CiAgICAgcmVzdWx0LT5zZXRTaWduKHguc2ln
bigpKTsKQEAgLTYzOCwxOSArNzA3LDI0IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6Y29weShWTSYg
dm0sIEJpZ0ludEltcGwgeCkKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci1K
U0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwoVk0mIHZtLCBCaWdJ
bnRJbXBsIHgpCitKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbCB4KQogeworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBpZiAoeC5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuIHplcm9JbXBs
KHZtKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB6ZXJvSW1wbChnbG9iYWxP
YmplY3QpKTsKKworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjb3B5KGdsb2JhbE9iamVjdCwgeCk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKLSAgICBKU0JpZ0lu
dCogcmVzdWx0ID0gY29weSh2bSwgeCk7CiAgICAgcmVzdWx0LT5zZXRTaWduKCF4LnNpZ24oKSk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1ZSBKU0JpZ0ludDo6dW5hcnlNaW51cyhW
TSYgdm0sIEpTQmlnSW50KiB4KQorSlNWYWx1ZSBKU0JpZ0ludDo6dW5hcnlNaW51cyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCkKIHsKLSAgICByZXR1cm4gdHJ5Q29u
dmVydFRvQmlnSW50MzIodW5hcnlNaW51c0ltcGwodm0sIEhlYXBCaWdJbnRJbXBsIHsgeCB9KSk7
CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKHVuYXJ5TWludXNJbXBsKGdsb2JhbE9i
amVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0pKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJp
Z0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KQEAgLTY3NCwyMiArNzQ4LDI3IEBAIEpT
QmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpyZW1haW5kZXJJbXBsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEJpZ0luCiAgICAgaWYgKHkubGVuZ3RoKCkgPT0gMSkgewogICAgICAg
ICBEaWdpdCBkaXZpc29yID0geS5kaWdpdCgwKTsKICAgICAgICAgaWYgKGRpdmlzb3IgPT0gMSkK
LSAgICAgICAgICAgIHJldHVybiB6ZXJvSW1wbCh2bSk7CisgICAgICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIHplcm9JbXBsKGdsb2JhbE9iamVjdCkpOwogCiAgICAgICAgIERpZ2l0
IHJlbWFpbmRlckRpZ2l0OwotICAgICAgICBhYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3Iodm0s
IHgsIGRpdmlzb3IsIG51bGxwdHIsIHJlbWFpbmRlckRpZ2l0KTsKKyAgICAgICAgYWJzb2x1dGVE
aXZXaXRoRGlnaXREaXZpc29yKGdsb2JhbE9iamVjdCwgdm0sIHgsIGRpdmlzb3IsIG51bGxwdHIs
IHJlbWFpbmRlckRpZ2l0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVs
bHB0cik7CisKICAgICAgICAgaWYgKCFyZW1haW5kZXJEaWdpdCkKLSAgICAgICAgICAgIHJldHVy
biB6ZXJvSW1wbCh2bSk7CisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHpl
cm9JbXBsKGdsb2JhbE9iamVjdCkpOwogCi0gICAgICAgIHJlbWFpbmRlciA9IGNyZWF0ZVdpdGhM
ZW5ndGhVbmNoZWNrZWQodm0sIDEpOworICAgICAgICByZW1haW5kZXIgPSBjcmVhdGVXaXRoTGVu
Z3RoKGdsb2JhbE9iamVjdCwgMSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IG51bGxwdHIpOwogICAgICAgICByZW1haW5kZXItPnNldERpZ2l0KDAsIHJlbWFpbmRlckRpZ2l0
KTsKICAgICB9IGVsc2UgewotICAgICAgICBhYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKGds
b2JhbE9iamVjdCwgeCwgeS50b0hlYXBCaWdJbnQodm0pLCBudWxscHRyLCAmcmVtYWluZGVyKTsK
KyAgICAgICAgSlNCaWdJbnQqIHlCaWdJbnQgPSB5LnRvSGVhcEJpZ0ludChnbG9iYWxPYmplY3Qp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKyAgICAgICAg
YWJzb2x1dGVEaXZXaXRoQmlnSW50RGl2aXNvcihnbG9iYWxPYmplY3QsIHgsIHlCaWdJbnQsIG51
bGxwdHIsICZyZW1haW5kZXIpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBu
dWxscHRyKTsKICAgICB9CiAKICAgICByZW1haW5kZXItPnNldFNpZ24oeC5zaWduKCkpOwotICAg
IHJldHVybiByZW1haW5kZXItPnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCByZW1haW5kZXItPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0KIEpTVmFsdWUg
SlNCaWdJbnQ6OnJlbWFpbmRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0lu
dCogeCwgSlNCaWdJbnQqIHkpCiB7CkBAIC03MDksOSArNzg4LDEzIEBAIEpTVmFsdWUgSlNCaWdJ
bnQ6OnJlbWFpbmRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIEpT
QmlnSW50KiB5CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KIEpTQmlnSW50OjpJbXBs
UmVzdWx0IEpTQmlnSW50OjppbmNJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJp
Z0ludEltcGwgeCkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKCF4LnNpZ24oKSkK
LSAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgeCwgU2lnbk9wdGlv
bjo6VW5zaWduZWQpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGFic29sdXRl
QWRkT25lKGdsb2JhbE9iamVjdCwgeCwgU2lnbk9wdGlvbjo6VW5zaWduZWQpKTsKICAgICBKU0Jp
Z0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB4LCB4Lmxlbmd0aCgp
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBpZiAocmVz
dWx0LT5pc1plcm8oKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICByZXN1bHQtPnNldFNp
Z24odHJ1ZSk7CkBAIC03MzAsNyArODEzLDcgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJ
bnQ6OmRlY0ltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbAogI2lm
IFVTRShCSUdJTlQzMikKICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoLTEpOwogI2Vsc2UKLSAg
ICAgICAgcmV0dXJuIGNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LT52bSgpLCAtMSk7CisgICAgICAg
IHJldHVybiBjcmVhdGVGcm9tKGdsb2JhbE9iamVjdCwgLTEpOwogI2VuZGlmCiAgICAgfQogICAg
IGlmICgheC5zaWduKCkpCkBAIC03NDYsNyArODI5LDYgQEAgSlNWYWx1ZSBKU0JpZ0ludDo6ZGVj
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4KQogdGVtcGxhdGUgPHR5
cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KIEpTQmlnSW50OjpJbXBs
UmVzdWx0IEpTQmlnSW50OjphZGRJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJp
Z0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIGJvb2wgeFNpZ24gPSB4LnNpZ24oKTsKIAogICAgIC8vIHggKyB5ID09IHgg
KyB5CkBAIC03NTgsOSArODQwLDkgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFk
ZEltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEKICAgICAvLyAt
eCArIHkgPT0geSAtIHggPT0gLSh4IC0geSkKICAgICBDb21wYXJpc29uUmVzdWx0IGNvbXBhcmlz
b25SZXN1bHQgPSBhYnNvbHV0ZUNvbXBhcmUoeCwgeSk7CiAgICAgaWYgKGNvbXBhcmlzb25SZXN1
bHQgPT0gQ29tcGFyaXNvblJlc3VsdDo6R3JlYXRlclRoYW4gfHwgY29tcGFyaXNvblJlc3VsdCA9
PSBDb21wYXJpc29uUmVzdWx0OjpFcXVhbCkKLSAgICAgICAgcmV0dXJuIGFic29sdXRlU3ViKHZt
LCB4LCB5LCB4U2lnbik7CisgICAgICAgIHJldHVybiBhYnNvbHV0ZVN1YihnbG9iYWxPYmplY3Qs
IHgsIHksIHhTaWduKTsKIAotICAgIHJldHVybiBhYnNvbHV0ZVN1Yih2bSwgeSwgeCwgIXhTaWdu
KTsKKyAgICByZXR1cm4gYWJzb2x1dGVTdWIoZ2xvYmFsT2JqZWN0LCB5LCB4LCAheFNpZ24pOwog
fQogSlNWYWx1ZSBKU0JpZ0ludDo6YWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
QmlnSW50KiB4LCBKU0JpZ0ludCogeSkKIHsKQEAgLTc4MCw3ICs4NjIsNiBAQCBKU1ZhbHVlIEpT
QmlnSW50OjphZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBKU0Jp
Z0ludCogeSkKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50
SW1wbDI+CiBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6c3ViSW1wbChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewotICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBib29sIHhTaWduID0geC5zaWduKCk7
CiAgICAgaWYgKHhTaWduICE9IHkuc2lnbigpKSB7CiAgICAgICAgIC8vIHggLSAoLXkpID09IHgg
KyB5CkBAIC03OTEsOSArODcyLDkgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnN1
YkltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEKICAgICAvLyAo
LXgpIC0gKC15KSA9PSB5IC0geCA9PSAtKHggLSB5KQogICAgIENvbXBhcmlzb25SZXN1bHQgY29t
cGFyaXNvblJlc3VsdCA9IGFic29sdXRlQ29tcGFyZSh4LCB5KTsKICAgICBpZiAoY29tcGFyaXNv
blJlc3VsdCA9PSBDb21wYXJpc29uUmVzdWx0OjpHcmVhdGVyVGhhbiB8fCBjb21wYXJpc29uUmVz
dWx0ID09IENvbXBhcmlzb25SZXN1bHQ6OkVxdWFsKQotICAgICAgICByZXR1cm4gYWJzb2x1dGVT
dWIodm0sIHgsIHksIHhTaWduKTsKKyAgICAgICAgcmV0dXJuIGFic29sdXRlU3ViKGdsb2JhbE9i
amVjdCwgeCwgeSwgeFNpZ24pOwogCi0gICAgcmV0dXJuIGFic29sdXRlU3ViKHZtLCB5LCB4LCAh
eFNpZ24pOworICAgIHJldHVybiBhYnNvbHV0ZVN1YihnbG9iYWxPYmplY3QsIHksIHgsICF4U2ln
bik7CiB9CiAKIEpTVmFsdWUgSlNCaWdJbnQ6OnN1YihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCkBAIC04MTcsMTAgKzg5OCw4IEBAIEpTQmln
SW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpiaXR3aXNlQW5kSW1wbChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBCaWdJCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmICgheC5zaWdu
KCkgJiYgIXkuc2lnbigpKSB7Ci0gICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0
dXJuIGFic29sdXRlQW5kKHZtLCB4LCB5KTsKLSAgICB9CisgICAgaWYgKCF4LnNpZ24oKSAmJiAh
eS5zaWduKCkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVBbmQo
Z2xvYmFsT2JqZWN0LCB4LCB5KSk7CiAgICAgCiAgICAgaWYgKHguc2lnbigpICYmIHkuc2lnbigp
KSB7CiAgICAgICAgIGludCByZXN1bHRMZW5ndGggPSBzdGQ6Om1heCh4Lmxlbmd0aCgpLCB5Lmxl
bmd0aCgpKSArIDE7CkBAIC04MzEsOSArOTEwLDkgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNC
aWdJbnQ6OmJpdHdpc2VBbmRJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0kK
IAogICAgICAgICBKU0JpZ0ludCogeTEgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHks
IHkubGVuZ3RoKCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRy
KTsKLSAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVPcih2bSwgSGVhcEJpZ0ludEltcGwgeyByZXN1
bHQgfSwgSGVhcEJpZ0ludEltcGwgeyB5MSB9KTsKLSAgICAgICAgc2NvcGUucmVsZWFzZSgpOwot
ICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1w
bCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpOworICAgICAgICByZXN1bHQgPSBhYnNv
bHV0ZU9yKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgSGVhcEJpZ0lu
dEltcGwgeyB5MSB9KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0
cik7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVBZGRPbmUoZ2xv
YmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQp
KTsKICAgICB9CiAKICAgICBBU1NFUlQoeC5zaWduKCkgIT0geS5zaWduKCkpOwpAQCAtODQzLDcg
KzkyMiw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpiaXR3aXNlQW5kSW1wbChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJCiAgICAgICAgIEFTU0VSVCh5LnNpZ24o
KSk7IAogICAgICAgICBKU0JpZ0ludCogeTEgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3Qs
IHksIHkubGVuZ3RoKCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxs
cHRyKTsKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQW5kTm90KHZtLCB4LCBIZWFwQmlnSW50SW1w
bCB7IHkxIH0pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGFic29sdXRlQW5k
Tm90KGdsb2JhbE9iamVjdCwgeCwgSGVhcEJpZ0ludEltcGwgeyB5MSB9KSk7CiAgICAgfTsKICAg
ICBpZiAoeC5zaWduKCkpCiAgICAgICAgIHJldHVybiBjb21wdXRlUmVzdWx0KHksIHgpOwpAQCAt
ODczLDEwICs5NTIsOCBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6Yml0d2lzZU9y
SW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbgogCiAgICAgdW5zaWduZWQg
cmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoeC5sZW5ndGgoKSwgeS5sZW5ndGgoKSk7CiAKLSAgICBp
ZiAoIXguc2lnbigpICYmICF5LnNpZ24oKSkgewotICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0g
ICAgICAgIHJldHVybiBhYnNvbHV0ZU9yKHZtLCB4LCB5KTsKLSAgICB9CisgICAgaWYgKCF4LnNp
Z24oKSAmJiAheS5zaWduKCkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJz
b2x1dGVPcihnbG9iYWxPYmplY3QsIHgsIHkpKTsKICAgICAKICAgICBpZiAoeC5zaWduKCkgJiYg
eS5zaWduKCkpIHsKICAgICAgICAgLy8gKC14KSB8ICgteSkgPT0gfih4LTEpIHwgfih5LTEpID09
IH4oKHgtMSkgJiAoeS0xKSkKQEAgLTg4NSwxMSArOTYyLDkgQEAgSlNCaWdJbnQ6OkltcGxSZXN1
bHQgSlNCaWdJbnQ6OmJpdHdpc2VPckltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
QmlnSW4KICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAg
ICAgIEpTQmlnSW50KiB5MSA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeSwgeS5sZW5n
dGgoKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotICAg
ICAgICByZXN1bHQgPSBhYnNvbHV0ZUFuZCh2bSwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwg
SGVhcEJpZ0ludEltcGwgeyB5MSB9KTsKKyAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVBbmQoZ2xv
YmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBIZWFwQmlnSW50SW1wbCB7IHkx
IH0pOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLQotICAg
ICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShnbG9i
YWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIFNpZ25PcHRpb246OlNpZ25lZCk7
CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVBZGRPbmUoZ2xvYmFs
T2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpKTsK
ICAgICB9CiAgICAgCiAgICAgQVNTRVJUKHguc2lnbigpICE9IHkuc2lnbigpKTsKQEAgLTkwMSwx
MCArOTc2LDkgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VPckltcGwo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW4KIAogICAgICAgICBKU0JpZ0ludCog
cmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCByZXN1bHRMZW5ndGgpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICAgICAgcmVz
dWx0ID0gYWJzb2x1dGVBbmROb3Qodm0sIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIHgpOwot
Ci0gICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkT25l
KGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgU2lnbk9wdGlvbjo6U2ln
bmVkKTsKKyAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVBbmROb3QoZ2xvYmFsT2JqZWN0LCBIZWFw
QmlnSW50SW1wbCB7IHJlc3VsdCB9LCB4KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1
dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0
aW9uOjpTaWduZWQpKTsKICAgICB9OwogCiAgICAgaWYgKHguc2lnbigpKQpAQCAtOTMzLDEwICsx
MDA3LDggQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VYb3JJbXBsKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0kKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0g
ICAgaWYgKCF4LnNpZ24oKSAmJiAheS5zaWduKCkpIHsKLSAgICAgICAgc2NvcGUucmVsZWFzZSgp
OwotICAgICAgICByZXR1cm4gYWJzb2x1dGVYb3Iodm0sIHgsIHkpOwotICAgIH0KKyAgICBpZiAo
IXguc2lnbigpICYmICF5LnNpZ24oKSkKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBhYnNvbHV0ZVhvcihnbG9iYWxPYmplY3QsIHgsIHkpKTsKICAgICAKICAgICBpZiAoeC5zaWdu
KCkgJiYgeS5zaWduKCkpIHsKICAgICAgICAgaW50IHJlc3VsdExlbmd0aCA9IHN0ZDo6bWF4KHgu
bGVuZ3RoKCksIHkubGVuZ3RoKCkpOwpAQCAtOTQ2LDkgKzEwMTgsNyBAQCBKU0JpZ0ludDo6SW1w
bFJlc3VsdCBKU0JpZ0ludDo6Yml0d2lzZVhvckltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQmlnSQogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsK
ICAgICAgICAgSlNCaWdJbnQqIHkxID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCB5
Lmxlbmd0aCgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7
Ci0KLSAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gYWJzb2x1dGVYb3Io
dm0sIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIEhlYXBCaWdJbnRJbXBsIHsgeTEgfSk7Cisg
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVYb3IoZ2xvYmFsT2JqZWN0
LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBIZWFwQmlnSW50SW1wbCB7IHkxIH0pKTsKICAg
ICB9CiAgICAgQVNTRVJUKHguc2lnbigpICE9IHkuc2lnbigpKTsKICAgICBpbnQgcmVzdWx0TGVu
Z3RoID0gc3RkOjptYXgoeC5sZW5ndGgoKSwgeS5sZW5ndGgoKSkgKyAxOwpAQCAtOTYwLDkgKzEw
MzAsOSBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6Yml0d2lzZVhvckltcGwoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSQogICAgICAgICBKU0JpZ0ludCogcmVzdWx0
ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCByZXN1bHRMZW5ndGgpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAotICAgICAgICByZXN1bHQg
PSBhYnNvbHV0ZVhvcih2bSwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgeCk7Ci0gICAgICAg
IHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9i
amVjdCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKKyAg
ICAgICAgcmVzdWx0ID0gYWJzb2x1dGVYb3IoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7
IHJlc3VsdCB9LCB4KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0
cik7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVBZGRPbmUoZ2xv
YmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQp
KTsKICAgICB9OwogICAgIAogICAgIC8vIEFzc3VtZSB0aGF0IHggaXMgdGhlIHBvc2l0aXZlIEJp
Z0ludC4KQEAgLTEzNzQsMjEgKzE0NDQsMjUgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludElt
cGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50
OjphYnNvbHV0ZUFkZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4
LCBCaWdJbnRJbXBsMiB5LCBib29sIHJlc3VsdFNpZ24pCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIGlmICh4Lmxlbmd0aCgpIDwgeS5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGFic29s
dXRlQWRkKGdsb2JhbE9iamVjdCwgeSwgeCwgcmVzdWx0U2lnbik7CisgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVBZGQoZ2xvYmFsT2JqZWN0LCB5LCB4LCByZXN1bHRT
aWduKSk7CiAKICAgICBpZiAoeC5pc1plcm8oKSkgewogICAgICAgICBBU1NFUlQoeS5pc1plcm8o
KSk7CiAgICAgICAgIHJldHVybiB4OwogICAgIH0KIAotICAgIGlmICh5LmlzWmVybygpKQotICAg
ICAgICByZXR1cm4gcmVzdWx0U2lnbiA9PSB4LnNpZ24oKSA/IHggOiB1bmFyeU1pbnVzSW1wbCh2
bSwgeCk7CisgICAgaWYgKHkuaXNaZXJvKCkpIHsKKyAgICAgICAgaWYgKHJlc3VsdFNpZ24gPT0g
eC5zaWduKCkpCisgICAgICAgICAgICByZXR1cm4geDsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCB1bmFyeU1pbnVzSW1wbChnbG9iYWxPYmplY3QsIHgpKTsKKyAgICB9CiAKLSAg
ICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFs
T2JqZWN0LCB4Lmxlbmd0aCgpICsgMSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2Jh
bE9iamVjdCwgeC5sZW5ndGgoKSArIDEpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IG51bGxwdHIpOworICAgIEFTU0VSVChyZXN1bHQpOwogICAgIERpZ2l0IGNhcnJ5ID0gMDsKICAg
ICB1bnNpZ25lZCBpID0gMDsKICAgICBmb3IgKDsgaSA8IHkubGVuZ3RoKCk7IGkrKykgewpAQCAt
MTQwOSwxMiArMTQ4MywxNSBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YWJzb2x1
dGVBZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SQogICAgIHJlc3VsdC0+
c2V0RGlnaXQoaSwgY2FycnkpOwogICAgIHJlc3VsdC0+c2V0U2lnbihyZXN1bHRTaWduKTsKIAot
ICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0KIAogdGVtcGxhdGUg
PHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KLUpTQmlnSW50OjpJ
bXBsUmVzdWx0IEpTQmlnSW50OjphYnNvbHV0ZVN1YihWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJp
Z0ludEltcGwyIHksIGJvb2wgcmVzdWx0U2lnbikKK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmln
SW50OjphYnNvbHV0ZVN1YihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBs
MSB4LCBCaWdJbnRJbXBsMiB5LCBib29sIHJlc3VsdFNpZ24pCiB7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKwogICAgIENvbXBhcmlzb25SZXN1bHQgY29tcGFyaXNvblJlc3VsdCA9IGFic29sdXRlQ29t
cGFyZSh4LCB5KTsKICAgICBBU1NFUlQoeC5sZW5ndGgoKSA+PSB5Lmxlbmd0aCgpKTsKICAgICBB
U1NFUlQoY29tcGFyaXNvblJlc3VsdCA9PSBDb21wYXJpc29uUmVzdWx0OjpHcmVhdGVyVGhhbiB8
fCBjb21wYXJpc29uUmVzdWx0ID09IENvbXBhcmlzb25SZXN1bHQ6OkVxdWFsKTsKQEAgLTE0MjQs
MTMgKzE1MDEsMTcgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFic29sdXRlU3Vi
KFZNJiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwKICAgICAgICAgcmV0dXJuIHg7
CiAgICAgfQogCi0gICAgaWYgKHkuaXNaZXJvKCkpCi0gICAgICAgIHJldHVybiByZXN1bHRTaWdu
ID09IHguc2lnbigpID8gSW1wbFJlc3VsdCB7IHggfSA6IEpTQmlnSW50Ojp1bmFyeU1pbnVzSW1w
bCh2bSwgeCk7CisgICAgaWYgKHkuaXNaZXJvKCkpIHsKKyAgICAgICAgaWYgKHJlc3VsdFNpZ24g
PT0geC5zaWduKCkpCisgICAgICAgICAgICByZXR1cm4gSW1wbFJlc3VsdCB7IHggfTsKKyAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwoZ2xv
YmFsT2JqZWN0LCB4KSk7CisgICAgfQogCiAgICAgaWYgKGNvbXBhcmlzb25SZXN1bHQgPT0gQ29t
cGFyaXNvblJlc3VsdDo6RXF1YWwpCi0gICAgICAgIHJldHVybiB6ZXJvSW1wbCh2bSk7CisgICAg
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgemVyb0ltcGwoZ2xvYmFsT2JqZWN0KSk7CiAK
LSAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNr
ZWQodm0sIHgubGVuZ3RoKCkpOworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVu
Z3RoKGdsb2JhbE9iamVjdCwgeC5sZW5ndGgoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CiAKICAgICBEaWdpdCBib3Jyb3cgPSAwOwogICAgIHVuc2lnbmVkIGkg
PSAwOwpAQCAtMTQ1MSw3ICsxNTMyLDcgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6
OmFic29sdXRlU3ViKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwKIAogICAg
IEFTU0VSVCghYm9ycm93KTsKICAgICByZXN1bHQtPnNldFNpZ24ocmVzdWx0U2lnbik7Ci0gICAg
cmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdCkpOwogfQogCiAvLyBEaXZpZGVzIHt4
fSBieSB7ZGl2aXNvcn0sIHJldHVybmluZyB0aGUgcmVzdWx0IGluIHtxdW90aWVudH0gYW5kIHty
ZW1haW5kZXJ9LgpAQCAtMTQ2MiwyMiArMTU0MywzMCBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBK
U0JpZ0ludDo6YWJzb2x1dGVTdWIoVk0mIHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5
LAogLy8ge3F1b3RpZW50fSBjYW4gYmUgdGhlIHNhbWUgYXMge3h9IGZvciBhbiBpbi1wbGFjZSBk
aXZpc2lvbi4ge3F1b3RpZW50fSBjYW4KIC8vIGFsc28gYmUgbnVsbHB0ciBpZiB0aGUgY2FsbGVy
IGlzIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgcmVtYWluZGVyLgogdGVtcGxhdGUgPHR5cGVuYW1l
IEJpZ0ludEltcGw+Ci12b2lkIEpTQmlnSW50OjphYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3Io
Vk0mIHZtLCBCaWdJbnRJbXBsIHgsIERpZ2l0IGRpdmlzb3IsIEpTQmlnSW50KiogcXVvdGllbnQs
IERpZ2l0JiByZW1haW5kZXIpCitib29sIEpTQmlnSW50OjphYnNvbHV0ZURpdldpdGhEaWdpdERp
dmlzb3IoSlNHbG9iYWxPYmplY3QqIG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgVk0mIHZtLCBC
aWdJbnRJbXBsIHgsIERpZ2l0IGRpdmlzb3IsIEpTQmlnSW50KiogcXVvdGllbnQsIERpZ2l0JiBy
ZW1haW5kZXIpCiB7CiAgICAgQVNTRVJUKGRpdmlzb3IpOwogCiAgICAgQVNTRVJUKCF4LmlzWmVy
bygpKTsKICAgICByZW1haW5kZXIgPSAwOwogICAgIGlmIChkaXZpc29yID09IDEpIHsKLSAgICAg
ICAgaWYgKHF1b3RpZW50KQotICAgICAgICAgICAgKnF1b3RpZW50ID0geC50b0hlYXBCaWdJbnQo
dm0pOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChxdW90aWVudCkgeworICAgICAgICAg
ICAgSlNCaWdJbnQqIHJlc3VsdCA9IHgudG9IZWFwQmlnSW50KG51bGxPckdsb2JhbE9iamVjdEZv
ck9PTSwgdm0pOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICpxdW90aWVudCA9IHJlc3VsdDsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBsZW5n
dGggPSB4Lmxlbmd0aCgpOwogICAgIGlmIChxdW90aWVudCkgewotICAgICAgICBpZiAoKnF1b3Rp
ZW50ID09IG51bGxwdHIpCi0gICAgICAgICAgICAqcXVvdGllbnQgPSBKU0JpZ0ludDo6Y3JlYXRl
V2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgbGVuZ3RoKTsKKyAgICAgICAgaWYgKCpxdW90aWVudCA9
PSBudWxscHRyKSB7CisgICAgICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExl
bmd0aChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCBsZW5ndGgpOworICAgICAgICAgICAg
aWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICpxdW90aWVudCA9IHJlc3VsdDsKKyAgICAgICAgfQogCiAgICAgICAgIGZvciAo
aW50IGkgPSBsZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgICAgICAgRGlnaXQgcSA9
IGRpZ2l0RGl2KHJlbWFpbmRlciwgeC5kaWdpdChpKSwgZGl2aXNvciwgcmVtYWluZGVyKTsKQEAg
LTE0ODcsNiArMTU3Niw3IEBAIHZvaWQgSlNCaWdJbnQ6OmFic29sdXRlRGl2V2l0aERpZ2l0RGl2
aXNvcihWTSYgdm0sIEJpZ0ludEltcGwgeCwgRGlnaXQgZGl2aXNvciwKICAgICAgICAgZm9yIChp
bnQgaSA9IGxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKQogICAgICAgICAgICAgZGlnaXREaXYocmVt
YWluZGVyLCB4LmRpZ2l0KGkpLCBkaXZpc29yLCByZW1haW5kZXIpOwogICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogLy8gRGl2aWRlcyB7ZGl2aWRlbmR9IGJ5IHtkaXZpc29yfSwgcmV0dXJu
aW5nIHRoZSByZXN1bHQgaW4ge3F1b3RpZW50fSBhbmQKQEAgLTE1MTIsMTIgKzE2MDIsMTQgQEAg
dm9pZCBKU0JpZ0ludDo6YWJzb2x1dGVEaXZXaXRoQmlnSW50RGl2aXNvcihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBCaWdJbnQKICAgICAKICAgICAvLyBUaGUgcXVvdGllbnQgdG8gYmUg
Y29tcHV0ZWQuCiAgICAgSlNCaWdJbnQqIHEgPSBudWxscHRyOwotICAgIGlmIChxdW90aWVudCAh
PSBudWxscHRyKQotICAgICAgICBxID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZChnbG9iYWxP
YmplY3QtPnZtKCksIG0gKyAxKTsKKyAgICBpZiAocXVvdGllbnQgIT0gbnVsbHB0cikgeworICAg
ICAgICBxID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIG0gKyAxKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKKyAgICB9CiAgICAgCiAgICAgLy8g
SW4gZWFjaCBpdGVyYXRpb24sIHtxaGF0dn0gaG9sZHMge2Rpdmlzb3J9ICoge2N1cnJlbnQgcXVv
dGllbnQgZGlnaXR9LgogICAgIC8vICJ2IiBpcyB0aGUgYm9vaydzIG5hbWUgZm9yIHtkaXZpc29y
fSwgInFoYXQiIHRoZSBjdXJyZW50IHF1b3RpZW50IGRpZ2l0LgotICAgIEpTQmlnSW50KiBxaGF0
diA9IHRyeUNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCBuICsgMSk7CisgICAgSlNCaWdJ
bnQqIHFoYXR2ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIG4gKyAxKTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIAogICAgIC8vIEQxLgpAQCAt
MTY2NywxNCArMTc1OSwxNiBAQCB2b2lkIEpTQmlnSW50OjppbnBsYWNlUmlnaHRTaGlmdCh1bnNp
Z25lZCBzaGlmdCkKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgogSlNCaWdJbnQqIEpT
QmlnSW50OjphYnNvbHV0ZUxlZnRTaGlmdEFsd2F5c0NvcHkoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQmlnSW50SW1wbCB4LCB1bnNpZ25lZCBzaGlmdCwgTGVmdFNoaWZ0TW9kZSBtb2Rl
KQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBBU1NFUlQoc2hpZnQgPCBkaWdpdEJpdHMp
OwogICAgIEFTU0VSVCgheC5pc1plcm8oKSk7CiAKICAgICB1bnNpZ25lZCBuID0geC5sZW5ndGgo
KTsKICAgICB1bnNpZ25lZCByZXN1bHRMZW5ndGggPSBtb2RlID09IExlZnRTaGlmdE1vZGU6OkFs
d2F5c0FkZE9uZURpZ2l0ID8gbiArIDEgOiBuOwotICAgIEpTQmlnSW50KiByZXN1bHQgPSB0cnlD
cmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKLSAgICBpZiAoIXJl
c3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNy
ZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBpZiAoIXNoaWZ0KSB7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBuOyBpKyspCkBAIC0xNzE2LDggKzE4MTAsMTEgQEAgSlNC
aWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUxlZnRTaGlmdEFsd2F5c0NvcHkoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQmkKIC8vICAgICAgICAgICAgICAgICAgIHYgICAgIHYgICAgIHYg
ICAgIHYKIC8vIHJlc3VsdDogWyAgMCBdWyB4MyBdWyByMiBdWyByMSBdWyByMCBdCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyLCB0eXBlbmFtZSBC
aXR3aXNlT3A+Ci1pbmxpbmUgSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUJpdHdpc2VPcChW
TSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHksIEV4dHJhRGlnaXRzSGFuZGxpbmcg
ZXh0cmFEaWdpdHMsIEJpdHdpc2VPcCYmIG9wKQoraW5saW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6
YWJzb2x1dGVCaXR3aXNlT3AoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1w
bDEgeCwgQmlnSW50SW1wbDIgeSwgRXh0cmFEaWdpdHNIYW5kbGluZyBleHRyYURpZ2l0cywgQml0
d2lzZU9wJiYgb3ApCiB7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIHVuc2lnbmVkIHhMZW5n
dGggPSB4Lmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIHlMZW5ndGggPSB5Lmxlbmd0aCgpOwogICAg
IHVuc2lnbmVkIG51bVBhaXJzID0geUxlbmd0aDsKQEAgLTE3MzAsNyArMTgyNyw4IEBAIGlubGlu
ZSBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQml0d2lzZU9wKFZNJiB2bSwgQmlnSW50SW1w
bDEgeCwgQmlnSW50SW1wbDIKICAgICBBU1NFUlQobnVtUGFpcnMgPT0gc3RkOjptaW4oeExlbmd0
aCwgeUxlbmd0aCkpOwogICAgIEFTU0VSVChtYXhMZW5ndGggPT0gc3RkOjptYXgoeExlbmd0aCwg
eUxlbmd0aCkpOwogICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IGV4dHJhRGlnaXRzID09IEV4
dHJhRGlnaXRzSGFuZGxpbmc6OkNvcHkgPyBtYXhMZW5ndGggOiBudW1QYWlyczsKLSAgICBKU0Jp
Z0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgcmVzdWx0TGVuZ3Ro
KTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3Qs
IHJlc3VsdExlbmd0aCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7
CiAgICAgdW5zaWduZWQgaSA9IDA7CiAgICAgZm9yICg7IGkgPCBudW1QYWlyczsgaSsrKQogICAg
ICAgICByZXN1bHQtPnNldERpZ2l0KGksIG9wKHguZGlnaXQoaSksIHkuZGlnaXQoaSkpKTsKQEAg
LTE3NDgsNTggKzE4NDYsNjUgQEAgaW5saW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVC
aXR3aXNlT3AoVk0mIHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMgogICAgIGZvciAoOyBp
IDwgcmVzdWx0TGVuZ3RoOyBpKyspCiAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgMCk7CiAK
LSAgICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0odm0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgcmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+Ci1KU0JpZ0ludCog
SlNCaWdJbnQ6OmFic29sdXRlQW5kKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIg
eSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVBbmQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsKICAgICBhdXRvIGRpZ2l0
T3BlcmF0aW9uID0gW10oRGlnaXQgYSwgRGlnaXQgYikgewogICAgICAgICByZXR1cm4gYSAmIGI7
CiAgICAgfTsKLSAgICByZXR1cm4gYWJzb2x1dGVCaXR3aXNlT3Aodm0sIHgsIHksIEV4dHJhRGln
aXRzSGFuZGxpbmc6OlNraXAsIGRpZ2l0T3BlcmF0aW9uKTsKKyAgICByZXR1cm4gYWJzb2x1dGVC
aXR3aXNlT3AoZ2xvYmFsT2JqZWN0LCB4LCB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nOjpTa2lwLCBk
aWdpdE9wZXJhdGlvbik7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlw
ZW5hbWUgQmlnSW50SW1wbDI+Ci1KU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlT3IoVk0mIHZt
LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQorSlNCaWdJbnQqIEpTQmlnSW50OjphYnNv
bHV0ZU9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0lu
dEltcGwyIHkpCiB7CiAgICAgYXV0byBkaWdpdE9wZXJhdGlvbiA9IFtdKERpZ2l0IGEsIERpZ2l0
IGIpIHsKICAgICAgICAgcmV0dXJuIGEgfCBiOwogICAgIH07Ci0gICAgcmV0dXJuIGFic29sdXRl
Qml0d2lzZU9wKHZtLCB4LCB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nOjpDb3B5LCBkaWdpdE9wZXJh
dGlvbik7CisgICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9wKGdsb2JhbE9iamVjdCwgeCwgeSwg
RXh0cmFEaWdpdHNIYW5kbGluZzo6Q29weSwgZGlnaXRPcGVyYXRpb24pOwogfQogCiB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgotSlNCaWdJbnQq
IEpTQmlnSW50OjphYnNvbHV0ZUFuZE5vdChWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0ludElt
cGwyIHkpCitKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQW5kTm90KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgLy8g
eCAmIH55CiAKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgdW5zaWduZWQgeExlbmd0aCA9IHgu
bGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgeUxlbmd0aCA9IHkubGVuZ3RoKCk7CiAgICAgdW5zaWdu
ZWQgcmVzdWx0TGVuZ3RoID0geExlbmd0aDsKIAotICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVh
dGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCByZXN1bHRMZW5ndGgpOworICAgIEpTQmlnSW50KiBy
ZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICB1bnNpZ25lZCBpID0g
MDsKICAgICBmb3IgKDsgaSA8IHN0ZDo6bWluKHhMZW5ndGgsIHlMZW5ndGgpOyBpKyspCiAgICAg
ICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgeC5kaWdpdChpKSAmIH55LmRpZ2l0KGkpKTsKICAgICBm
b3IgKDsgaSA8IHJlc3VsdExlbmd0aDsgKytpKQogICAgICAgICByZXN1bHQtPnNldERpZ2l0KGks
IHguZGlnaXQoaSkpOwogCi0gICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKKyAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdCkp
OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludElt
cGwyPgotSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZVhvcihWTSYgdm0sIEJpZ0ludEltcGwx
IHgsIEJpZ0ludEltcGwyIHkpCitKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlWG9yKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7
CiAgICAgYXV0byBkaWdpdE9wZXJhdGlvbiA9IFtdKERpZ2l0IGEsIERpZ2l0IGIpIHsKICAgICAg
ICAgcmV0dXJuIGEgXiBiOwogICAgIH07Ci0gICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9wKHZt
LCB4LCB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nOjpDb3B5LCBkaWdpdE9wZXJhdGlvbik7CisgICAg
cmV0dXJuIGFic29sdXRlQml0d2lzZU9wKGdsb2JhbE9iamVjdCwgeCwgeSwgRXh0cmFEaWdpdHNI
YW5kbGluZzo6Q29weSwgZGlnaXRPcGVyYXRpb24pOwogfQogICAgIAogdGVtcGxhdGUgPHR5cGVu
YW1lIEJpZ0ludEltcGw+CiBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQWRkT25lKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCwgU2lnbk9wdGlvbiBzaWduT3B0
aW9uKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICB1bnNpZ25lZCBpbnB1dExlbmd0aCA9
IHgubGVuZ3RoKCk7CiAgICAgLy8gVGhlIGFkZGl0aW9uIHdpbGwgb3ZlcmZsb3cgaW50byBhIG5l
dyBkaWdpdCBpZiBhbGwgZXhpc3RpbmcgZGlnaXRzIGFyZQogICAgIC8vIGF0IG1heGltdW0uCkBA
IC0xODEyLDkgKzE5MTcsOCBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQWRkT25lKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCwgUwogICAgIH0KIAogICAg
IHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IGlucHV0TGVuZ3RoICsgd2lsbE92ZXJmbG93OwotICAg
IEpTQmlnSW50KiByZXN1bHQgPSB0cnlDcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVz
dWx0TGVuZ3RoKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXN1
bHRMZW5ndGgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAg
ICAgRGlnaXQgY2FycnkgPSAxOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnB1dExl
bmd0aDsgaSsrKSB7CkBAIC0xODI4LDcgKzE5MzIsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFi
c29sdXRlQWRkT25lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCwg
UwogICAgICAgICBBU1NFUlQoIWNhcnJ5KTsKIAogICAgIHJlc3VsdC0+c2V0U2lnbihzaWduT3B0
aW9uID09IFNpZ25PcHRpb246OlNpZ25lZCk7Ci0gICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmlt
KGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1
bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJp
Z0ludEltcGw+CkBAIC0xODM5LDcgKzE5NDMsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29s
dXRlU3ViT25lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCwgdQog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gdHJ5Q3JlYXRlV2l0
aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7CisgICAgSlNCaWdJbnQqIHJlc3Vs
dCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0geC5sZW5ndGgoKTsKQEAgLTE4NTMsNyArMTk1Nyw3IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6
YWJzb2x1dGVTdWJPbmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbCB4
LCB1CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBpIDwgcmVzdWx0TGVuZ3RoOyBpKysp
CiAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgYm9ycm93KTsKIAotICAgIHJldHVybiByZXN1
bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQt
PnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0lu
dEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KQEAgLTE4NzksNyArMTk4Myw3IEBAIEpTQmln
SW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpsZWZ0U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAg
IEpTQmlnSW50KiByZXN1bHQgPSB0cnlDcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVz
dWx0TGVuZ3RoKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aChnbG9i
YWxPYmplY3QsIHJlc3VsdExlbmd0aCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
bnVsbHB0cik7CiAgICAgaWYgKCFiaXRzU2hpZnQpIHsKICAgICAgICAgdW5zaWduZWQgaSA9IDA7
CkBAIC0xOTA2LDI1ICsyMDEwLDI3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojps
ZWZ0U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgfQog
CiAgICAgcmVzdWx0LT5zZXRTaWduKHguc2lnbigpKTsKLSAgICByZXR1cm4gcmVzdWx0LT5yaWdo
dFRyaW0odm0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0LT5yaWdodFRy
aW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwg
dHlwZW5hbWUgQmlnSW50SW1wbDI+CiBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6cmln
aHRTaGlmdEJ5QWJzb2x1dGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1w
bDEgeCwgQmlnSW50SW1wbDIgeSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0geC5sZW5ndGgoKTsKICAgICBib29sIHNpZ24gPSB4LnNpZ24oKTsKICAgICBh
dXRvIG9wdGlvbmFsU2hpZnQgPSB0b1NoaWZ0QW1vdW50KHkpOwogICAgIGlmICghb3B0aW9uYWxT
aGlmdCkKLSAgICAgICAgcmV0dXJuIHJpZ2h0U2hpZnRCeU1heGltdW0odm0sIHNpZ24pOworICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJpZ2h0U2hpZnRCeU1heGltdW0oZ2xvYmFs
T2JqZWN0LCBzaWduKSk7CiAKICAgICBEaWdpdCBzaGlmdCA9ICpvcHRpb25hbFNoaWZ0OwogICAg
IHVuc2lnbmVkIGRpZ2l0YWxTaGlmdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaGlmdCAvIGRp
Z2l0Qml0cyk7CiAgICAgdW5zaWduZWQgYml0c1NoaWZ0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHNoaWZ0ICUgZGlnaXRCaXRzKTsKICAgICBpbnQgcmVzdWx0TGVuZ3RoID0gbGVuZ3RoIC0gZGln
aXRhbFNoaWZ0OwogICAgIGlmIChyZXN1bHRMZW5ndGggPD0gMCkKLSAgICAgICAgcmV0dXJuIHJp
Z2h0U2hpZnRCeU1heGltdW0odm0sIHNpZ24pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIHJpZ2h0U2hpZnRCeU1heGltdW0oZ2xvYmFsT2JqZWN0LCBzaWduKSk7CiAKICAgICAv
LyBGb3IgbmVnYXRpdmUgbnVtYmVycywgcm91bmQgZG93biBpZiBhbnkgYml0IHdhcyBzaGlmdGVk
IG91dCAoc28gdGhhdCBlLmcuCiAgICAgLy8gLTVuID4+IDFuID09IC0zbiBhbmQgbm90IC0ybiku
IENoZWNrIG5vdyB3aGV0aGVyIHRoaXMgd2lsbCBoYXBwZW4gYW5kCkBAIC0xOTU1LDcgKzIwNjEs
OSBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5QWJzb2x1dGUo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdAogICAgIH0KIAogICAgIEFTU0VSVChzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4ocmVzdWx0TGVuZ3RoKSA8PSBsZW5ndGgpOwotICAgIEpTQmlnSW50KiBy
ZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ocmVzdWx0TGVuZ3RoKSk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5n
dGgoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0TGVuZ3RoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisKICAgICBpZiAoIWJpdHNT
aGlmdCkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkaWdpdGFsU2hpZnQ7IGkgPCBsZW5n
dGg7IGkrKykKICAgICAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSAtIGRpZ2l0YWxTaGlmdCwg
eC5kaWdpdChpKSk7CkBAIC0xOTc1LDIwICsyMDgzLDIxIEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0
IEpTQmlnSW50OjpyaWdodFNoaWZ0QnlBYnNvbHV0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0CiAgICAgICAgIGlmIChtdXN0Um91bmREb3duKSB7CiAgICAgICAgICAgICAvLyBTaW5jZSB0
aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCByb3VuZGluZyBkb3duIG1lYW5zIGFkZGluZyBvbmUgdG8K
ICAgICAgICAgICAgIC8vIGl0cyBhYnNvbHV0ZSB2YWx1ZS4gVGhpcyBjYW5ub3Qgb3ZlcmZsb3cu
Ci0gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7Ci0gICAgICAgICAg
ICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJl
c3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpOworICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0
LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIG51bGxwdHIpOworICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBhYnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0s
IFNpZ25PcHRpb246OlNpZ25lZCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHJl
c3VsdC0+cmlnaHRUcmltKHZtKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3Vs
dC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdCkpOwogfQogCi1KU0JpZ0ludDo6SW1wbFJlc3VsdCBK
U0JpZ0ludDo6cmlnaHRTaGlmdEJ5TWF4aW11bShWTSYgdm0sIGJvb2wgc2lnbikKK0pTQmlnSW50
OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpyaWdodFNoaWZ0QnlNYXhpbXVtKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGJvb2wgc2lnbikKIHsKICAgICBpZiAoc2lnbikKLSAgICAgICAgcmV0
dXJuIGNyZWF0ZUZyb20odm0sIC0xKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb20oZ2xvYmFs
T2JqZWN0LCAtMSk7CiAKLSAgICByZXR1cm4gY3JlYXRlWmVybyh2bSk7CisgICAgcmV0dXJuIGNy
ZWF0ZVplcm8oZ2xvYmFsT2JqZWN0KTsKIH0KIAogLy8gTG9va3VwIHRhYmxlIGZvciB0aGUgbWF4
aW11bSBudW1iZXIgb2YgYml0cyByZXF1aXJlZCBwZXIgY2hhcmFjdGVyIG9mIGEKQEAgLTIwMzQs
NyArMjE0Myw3IEBAIHVpbnQ2NF90IEpTQmlnSW50OjpjYWxjdWxhdGVNYXhpbXVtQ2hhcmFjdGVy
c1JlcXVpcmVkKHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQKICAgICByZXR1cm4gbWF4aW11bUNo
YXJhY3RlcnNSZXF1aXJlZDsKIH0KIAotU3RyaW5nIEpTQmlnSW50Ojp0b1N0cmluZ0Jhc2VQb3dl
ck9mVHdvKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgs
IHVuc2lnbmVkIHJhZGl4KQorU3RyaW5nIEpTQmlnSW50Ojp0b1N0cmluZ0Jhc2VQb3dlck9mVHdv
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgSlNCaWdJ
bnQqIHgsIHVuc2lnbmVkIHJhZGl4KQogewogICAgIEFTU0VSVChoYXNPbmVCaXRTZXQocmFkaXgp
KTsKICAgICBBU1NFUlQocmFkaXggPj0gMiAmJiByYWRpeCA8PSAzMik7CkBAIC0yMDU0LDkgKzIx
NjMsOSBAQCBTdHJpbmcgSlNCaWdJbnQ6OnRvU3RyaW5nQmFzZVBvd2VyT2ZUd28oVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKUwogICAgIGNvbnN0IHNpemVfdCBjaGFyc1Jl
cXVpcmVkID0gKGJpdExlbmd0aCArIGJpdHNQZXJDaGFyIC0gMSkgLyBiaXRzUGVyQ2hhciArIHNp
Z247CiAKICAgICBpZiAoY2hhcnNSZXF1aXJlZCA+IEpTU3RyaW5nOjpNYXhMZW5ndGgpIHsKLSAg
ICAgICAgaWYgKGdsb2JhbE9iamVjdCkgeworICAgICAgICBpZiAobnVsbE9yR2xvYmFsT2JqZWN0
Rm9yT09NKSB7CiAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSk7ICAgICAgICAgICAgCisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IobnVsbE9y
R2xvYmFsT2JqZWN0Rm9yT09NLCBzY29wZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwogICAgIH0KQEAgLTIwOTYsNyArMjIwNSw3IEBAIFN0cmluZyBKU0JpZ0ludDo6dG9T
dHJpbmdCYXNlUG93ZXJPZlR3byhWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTCiAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmFkb3B0KFdURk1vdmUocmVzdWx0U3RyaW5nKSk7
CiB9CiAKLVN0cmluZyBKU0JpZ0ludDo6dG9TdHJpbmdHZW5lcmljKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIHVuc2lnbmVkIHJhZGl4KQorU3RyaW5n
IEpTQmlnSW50Ojp0b1N0cmluZ0dlbmVyaWMoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogbnVsbE9y
R2xvYmFsT2JqZWN0Rm9yT09NLCBKU0JpZ0ludCogeCwgdW5zaWduZWQgcmFkaXgpCiB7CiAgICAg
Ly8gRklYTUU6IFtKU0NdIFJldmlzaXQgdXNhZ2Ugb2YgVmVjdG9yIGludG8gSlNCaWdJbnQ6OnRv
U3RyaW5nCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4
MDY3MQpAQCAtMjExMiw5ICsyMjIxLDkgQEAgU3RyaW5nIEpTQmlnSW50Ojp0b1N0cmluZ0dlbmVy
aWMoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCoKICAgICB1
aW50NjRfdCBtYXhpbXVtQ2hhcmFjdGVyc1JlcXVpcmVkID0gY2FsY3VsYXRlTWF4aW11bUNoYXJh
Y3RlcnNSZXF1aXJlZChsZW5ndGgsIHJhZGl4LCB4LT5kaWdpdChsZW5ndGggLSAxKSwgc2lnbik7
CiAKICAgICBpZiAobWF4aW11bUNoYXJhY3RlcnNSZXF1aXJlZCA+IEpTU3RyaW5nOjpNYXhMZW5n
dGgpIHsKLSAgICAgICAgaWYgKGdsb2JhbE9iamVjdCkgeworICAgICAgICBpZiAobnVsbE9yR2xv
YmFsT2JqZWN0Rm9yT09NKSB7CiAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSk7ICAgICAgICAgICAgCisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJy
b3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBzY29wZSk7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogICAgIH0KQEAgLTIxNDAsNyArMjI0OSw5IEBAIFN0cmluZyBKU0Jp
Z0ludDo6dG9TdHJpbmdHZW5lcmljKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNCaWdJbnQqCiAgICAgICAgIEpTQmlnSW50KiogZGl2aWRlbmQgPSAmeDsKICAgICAgICAg
ZG8gewogICAgICAgICAgICAgRGlnaXQgY2h1bms7Ci0gICAgICAgICAgICBhYnNvbHV0ZURpdldp
dGhEaWdpdERpdmlzb3Iodm0sIEhlYXBCaWdJbnRJbXBsIHsgKmRpdmlkZW5kIH0sIGNodW5rRGl2
aXNvciwgJnJlc3QsIGNodW5rKTsKKyAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IGFic29sdXRl
RGl2V2l0aERpZ2l0RGl2aXNvcihudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCBIZWFwQmln
SW50SW1wbCB7ICpkaXZpZGVuZCB9LCBjaHVua0Rpdmlzb3IsICZyZXN0LCBjaHVuayk7CisgICAg
ICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwog
ICAgICAgICAgICAgZGl2aWRlbmQgPSAmcmVzdDsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjaHVua0NoYXJzOyBpKyspIHsKICAgICAgICAgICAgICAgICByZXN1bHRTdHJp
bmcuYXBwZW5kKHJhZGl4RGlnaXRzW2NodW5rICUgcmFkaXhdKTsKQEAgLTIxODEsNyArMjI5Miw3
IEBAIFN0cmluZyBKU0JpZ0ludDo6dG9TdHJpbmdHZW5lcmljKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqCiAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmFkb3B0
KFdURk1vdmUocmVzdWx0U3RyaW5nKSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6cmlnaHRU
cmltKFZNJiB2bSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6cmlnaHRUcmltKEpTR2xvYmFsT2JqZWN0
KiBudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIFZNJiB2bSkKIHsKICAgICBpZiAoaXNaZXJvKCkp
IHsKICAgICAgICAgQVNTRVJUKCFzaWduKCkpOwpAQCAtMjE5MywyMiArMjMwNCwzNiBAQCBKU0Jp
Z0ludCogSlNCaWdJbnQ6OnJpZ2h0VHJpbShWTSYgdm0pCiAgICAgICAgIG5vblplcm9JbmRleC0t
OwogCiAgICAgaWYgKG5vblplcm9JbmRleCA8IDApCi0gICAgICAgIHJldHVybiBjcmVhdGVaZXJv
KHZtKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8obnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09N
LCB2bSk7CiAKICAgICBpZiAobm9uWmVyb0luZGV4ID09IHN0YXRpY19jYXN0PGludD4obV9sZW5n
dGggLSAxKSkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAKICAgICB1bnNpZ25lZCBuZXdMZW5ndGgg
PSBub25aZXJvSW5kZXggKyAxOwotICAgIEpTQmlnSW50KiB0cmltbWVkQmlnSW50ID0gY3JlYXRl
V2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgbmV3TGVuZ3RoKTsKLSAgICBzdGQ6OmNvcHkoZGF0YVN0
b3JhZ2UoKSwgZGF0YVN0b3JhZ2UoKSArIG5ld0xlbmd0aCwgdHJpbW1lZEJpZ0ludC0+ZGF0YVN0
b3JhZ2UoKSk7IAorICAgIEpTQmlnSW50KiB0cmltbWVkQmlnSW50ID0gY3JlYXRlV2l0aExlbmd0
aChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCBuZXdMZW5ndGgpOworICAgIGlmIChVTkxJ
S0VMWSghdHJpbW1lZEJpZ0ludCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHN0ZDo6
Y29weShkYXRhU3RvcmFnZSgpLCBkYXRhU3RvcmFnZSgpICsgbmV3TGVuZ3RoLCB0cmltbWVkQmln
SW50LT5kYXRhU3RvcmFnZSgpKTsKIAogICAgIHRyaW1tZWRCaWdJbnQtPnNldFNpZ24odGhpcy0+
c2lnbigpKTsKIAogICAgIHJldHVybiB0cmltbWVkQmlnSW50OwogfQogCi1KU0JpZ0ludCogSlNC
aWdJbnQ6OmFsbG9jYXRlRm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwg
dW5zaWduZWQgcmFkaXgsIHVuc2lnbmVkIGNoYXJjb3VudCkKK0pTQmlnSW50KiBKU0JpZ0ludDo6
cmlnaHRUcmltKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CisgICAgcmV0dXJuIHJp
Z2h0VHJpbShnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+dm0oKSk7Cit9CisKK0pTQmlnSW50
KiBKU0JpZ0ludDo6dHJ5UmlnaHRUcmltKFZNJiB2bSkKK3sKKyAgICByZXR1cm4gcmlnaHRUcmlt
KG51bGxwdHIsIHZtKTsKK30KKworSlNCaWdJbnQqIEpTQmlnSW50OjphbGxvY2F0ZUZvcihKU0ds
b2JhbE9iamVjdCogbnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBWTSYgdm0sIHVuc2lnbmVkIHJh
ZGl4LCB1bnNpZ25lZCBjaGFyY291bnQpCit7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCiAgICAgQVNTRVJUKDIgPD0gcmFkaXggJiYgcmFkaXggPD0gMzYpOwog
CiAgICAgc2l6ZV90IGJpdHNQZXJDaGFyID0gbWF4Qml0c1BlckNoYXJUYWJsZVtyYWRpeF07CkBA
IC0yMjIyLDE3ICsyMzQ3LDE0IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6YWxsb2NhdGVGb3IoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCB1bnNpZ25lZCByCiAgICAgICAgIGlm
IChiaXRzTWluIDw9IHN0YXRpY19jYXN0PHNpemVfdD4obWF4SW50KSkgewogICAgICAgICAgICAg
Ly8gRGl2aWRlIGJ5IGtEaWdpdHNCaXRzLCByb3VuZGluZyB1cC4KICAgICAgICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IChiaXRzTWluICsgZGlnaXRCaXRzIC0gMSkgLyBkaWdpdEJpdHM7Ci0gICAg
ICAgICAgICBpZiAobGVuZ3RoIDw9IG1heExlbmd0aCkgewotICAgICAgICAgICAgICAgIEpTQmln
SW50KiByZXN1bHQgPSBKU0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgbGVu
Z3RoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGxlbmd0aCA8PSBtYXhMZW5ndGgpCisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBjcmVhdGVXaXRoTGVuZ3RoKG51bGxPckdsb2JhbE9iamVjdEZv
ck9PTSwgdm0sIGxlbmd0aCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGdsb2JhbE9i
amVjdCkgewotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQmlnSW50
IGdlbmVyYXRlZCBmcm9tIHRoaXMgb3BlcmF0aW9uIGlzIHRvbyBiaWciX3MpOwotICAgIH0KKyAg
ICBpZiAobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NKQorICAgICAgICB0aHJvd091dE9mTWVtb3J5
RXJyb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBzY29wZSwgIkJpZ0ludCBnZW5lcmF0ZWQg
ZnJvbSB0aGlzIG9wZXJhdGlvbiBpcyB0b28gYmlnIl9zKTsKKwogICAgIHJldHVybiBudWxscHRy
OwogfQogCkBAIC0yMjkwLDcgKzI0MTIsNyBAQCBKU1ZhbHVlIEpTQmlnSW50OjpwYXJzZUludChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDaGFyVHlwZSogIGRhdGEsIHVuc2lnbgogfQog
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+Ci1KU1ZhbHVlIEpTQmlnSW50OjpwYXJzZUlu
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIENoYXJUeXBlKiBkYXRhLCB1
bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIHJhZGl4LCBFcnJv
clBhcnNlTW9kZSBlcnJvclBhcnNlTW9kZSwgUGFyc2VJbnRTaWduIHNpZ24sIFBhcnNlSW50TW9k
ZSBwYXJzZU1vZGUpCitKU1ZhbHVlIEpTQmlnSW50OjpwYXJzZUludChKU0dsb2JhbE9iamVjdCog
bnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBWTSYgdm0sIENoYXJUeXBlKiBkYXRhLCB1bnNpZ25l
ZCBsZW5ndGgsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIHJhZGl4LCBFcnJvclBhcnNl
TW9kZSBlcnJvclBhcnNlTW9kZSwgUGFyc2VJbnRTaWduIHNpZ24sIFBhcnNlSW50TW9kZSBwYXJz
ZU1vZGUpCiB7CiAgICAgQVNTRVJUKGxlbmd0aCA+PSAwKTsKICAgICB1bnNpZ25lZCBwID0gc3Rh
cnRJbmRleDsKQEAgLTIyOTgsOSArMjQyMCw5IEBAIEpTVmFsdWUgSlNCaWdJbnQ6OnBhcnNlSW50
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgQ2hhclR5cGUqIGRhdGEsCiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKHBhcnNl
TW9kZSAhPSBQYXJzZUludE1vZGU6OkFsbG93RW1wdHlTdHJpbmcgJiYgc3RhcnRJbmRleCA9PSBs
ZW5ndGgpIHsKLSAgICAgICAgQVNTRVJUKGdsb2JhbE9iamVjdCk7CisgICAgICAgIEFTU0VSVChu
dWxsT3JHbG9iYWxPYmplY3RGb3JPT00pOwogICAgICAgICBpZiAoZXJyb3JQYXJzZU1vZGUgPT0g
RXJyb3JQYXJzZU1vZGU6OlRocm93RXhjZXB0aW9ucykKLSAgICAgICAgICAgIHRocm93Vk1FcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVTeW50YXhFcnJvcihnbG9iYWxPYmplY3QsICJG
YWlsZWQgdG8gcGFyc2UgU3RyaW5nIHRvIEJpZ0ludCIpKTsKKyAgICAgICAgICAgIHRocm93Vk1F
cnJvcihudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHNjb3BlLCBjcmVhdGVTeW50YXhFcnJvcihu
dWxsT3JHbG9iYWxPYmplY3RGb3JPT00sICJGYWlsZWQgdG8gcGFyc2UgU3RyaW5nIHRvIEJpZ0lu
dCIpKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICB9CiAKQEAgLTIzMTksNyArMjQ0
MSw3IEBAIEpTVmFsdWUgSlNCaWdJbnQ6OnBhcnNlSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFZNJiB2bSwgQ2hhclR5cGUqIGRhdGEsCiAjaWYgVVNFKEJJR0lOVDMyKQogICAgICAg
ICByZXR1cm4ganNCaWdJbnQzMigwKTsKICNlbHNlCi0gICAgICAgIHJldHVybiBjcmVhdGVaZXJv
KHZtKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjcmVhdGVaZXJvKG51bGxP
ckdsb2JhbE9iamVjdEZvck9PTSwgdm0pKTsKICNlbmRpZgogICAgIH0KIApAQCAtMjQxNCw4ICsy
NTM2LDggQEAgSlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgVk0mIHZtLCBDaGFyVHlwZSogZGF0YSwKICAgICAgICAgICAgICAgICBkaWdpdCAr
PSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZGF0YVtwXSAtICdBJyArIDEwKTsKICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChlcnJvclBhcnNlTW9kZSA9PSBFcnJvclBhcnNl
TW9kZTo6VGhyb3dFeGNlcHRpb25zKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChnbG9i
YWxPYmplY3QpOwotICAgICAgICAgICAgICAgICAgICB0aHJvd1ZNRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgY3JlYXRlU3ludGF4RXJyb3IoZ2xvYmFsT2JqZWN0LCAiRmFpbGVkIHRvIHBhcnNl
IFN0cmluZyB0byBCaWdJbnQiKSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChudWxsT3JH
bG9iYWxPYmplY3RGb3JPT00pOworICAgICAgICAgICAgICAgICAgICB0aHJvd1ZNRXJyb3IobnVs
bE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBzY29wZSwgY3JlYXRlU3ludGF4RXJyb3IobnVsbE9yR2xv
YmFsT2JqZWN0Rm9yT09NLCAiRmFpbGVkIHRvIHBhcnNlIFN0cmluZyB0byBCaWdJbnQiKSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAg
ICAgICAgICB9CkBAIC0yNDMzLDEyICsyNTU1LDEzIEBAIEpTVmFsdWUgSlNCaWdJbnQ6OnBhcnNl
SW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgQ2hhclR5cGUqIGRhdGEs
CiAjaWYgVVNFKEJJR0lOVDMyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQz
MihzdGF0aWNfY2FzdDxpbnQzMl90PihtYXliZVJlc3VsdCkpOwogI2Vsc2UKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCBzdGF0aWNfY2FzdDxpbnQz
Ml90PihtYXliZVJlc3VsdCkpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTQmlnSW50OjpjcmVhdGVGcm9tKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwg
c3RhdGljX2Nhc3Q8aW50MzJfdD4obWF5YmVSZXN1bHQpKSk7CiAjZW5kaWYKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBoZWFwUmVzdWx0ID0gYWxsb2NhdGVG
b3IoZ2xvYmFsT2JqZWN0LCB2bSwgcmFkaXgsIGluaXRpYWxMZW5ndGgpOwotICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgIGhlYXBS
ZXN1bHQgPSBhbGxvY2F0ZUZvcihudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCByYWRpeCwg
aW5pdGlhbExlbmd0aCk7CisgICAgICAgICAgICBpZiAobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09N
KQorICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7
CiAgICAgICAgICAgICAvLyByZXN1bHQgY2FuIHN0aWxsIGJlIG51bGwgaWYgd2UgZG9uJ3QgaGF2
ZSBhY2Nlc3MgdG8gZ2xvYmFsIG9iamVjdCwgYXMgYWxsb2NhdGVGb3IgY2Fubm90IHRocm93IGFu
IGV4Y2VwdGlvbiBpbiB0aGF0IGNhc2UuCiAgICAgICAgICAgICBpZiAoIWhlYXBSZXN1bHQpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKQEAgLTI0NTEsNyArMjU3NCw3IEBAIEpT
VmFsdWUgSlNCaWdJbnQ6OnBhcnNlSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZN
JiB2bSwgQ2hhclR5cGUqIGRhdGEsCiAgICAgfQogCiAgICAgaGVhcFJlc3VsdC0+c2V0U2lnbihz
aWduID09IFBhcnNlSW50U2lnbjo6U2lnbmVkKTsKLSAgICByZXR1cm4gaGVhcFJlc3VsdC0+cmln
aHRUcmltKHZtKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGhlYXBSZXN1bHQtPnJp
Z2h0VHJpbShudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtKSk7CiB9CiAKIEpTT2JqZWN0KiBK
U0JpZ0ludDo6dG9PYmplY3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkgY29uc3QKQEAg
LTI3MzgsMTEgKzI4NjEsMTIgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CiBKU0Jp
Z0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YXNJbnROSW1wbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCB1aW50NjRfdCBuLCBCaWdJbnRJbXBsIGJpZ0ludCkKIHsKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgaWYgKGJpZ0ludC5pc1plcm8oKSkKICAgICAgICAgcmV0dXJuIGJpZ0lu
dDsKICAgICBpZiAobiA9PSAwKQotICAgICAgICByZXR1cm4gemVyb0ltcGwodm0pOworICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHplcm9JbXBsKGdsb2JhbE9iamVjdCkpOwogCiAg
ICAgdWludDY0X3QgbmVlZGVkTGVuZ3RoID0gKG4gKyBkaWdpdEJpdHMgLSAxKSAvIGRpZ2l0Qml0
czsKICAgICB1aW50NjRfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oYmlnSW50Lmxl
bmd0aCgpKTsKQEAgLTI3NjYsMjMgKzI4OTAsMjMgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNC
aWdJbnQ6OmFzSW50TkltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0X3QK
ICAgICBBU1NFUlQobiA8PSBJTlQzMl9NQVgpOwogICAgIGludDMyX3QgTiA9IHN0YXRpY19jYXN0
PGludDMyX3Q+KG4pOwogICAgIGlmICghaGFzQml0KQotICAgICAgICByZXR1cm4gdHJ1bmNhdGVU
b05CaXRzKHZtLCBOLCBiaWdJbnQpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IHRydW5jYXRlVG9OQml0cyhnbG9iYWxPYmplY3QsIE4sIGJpZ0ludCkpOwogICAgIGlmICghYmln
SW50LnNpZ24oKSkKLSAgICAgICAgcmV0dXJuIHRydW5jYXRlQW5kU3ViRnJvbVBvd2VyT2ZUd28o
dm0sIE4sIGJpZ0ludCwgdHJ1ZSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
dHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byhnbG9iYWxPYmplY3QsIE4sIGJpZ0ludCwgdHJ1
ZSkpOwogCiAgICAgLy8gTmVnYXRpdmUgbnVtYmVycyBtdXN0IHN1YnRyYWN0IGZyb20gMl5uLCBl
eGNlcHQgZm9yIHRoZSBzcGVjaWFsIGNhc2UKICAgICAvLyBkZXNjcmliZWQgYWJvdmUuCiAgICAg
aWYgKCh0b3BEaWdpdCAmIChjb21wYXJlRGlnaXQgLSAxKSkgPT0gMCkgewogICAgICAgICBmb3Ig
KGludDMyX3QgaSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG5lZWRlZExlbmd0aCkgLSAyOyBpID49
IDA7IGktLSkgewogICAgICAgICAgICAgaWYgKGJpZ0ludC5kaWdpdChpKSAhPSAwKQotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKHZtLCBOLCBiaWdJ
bnQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHRy
dW5jYXRlQW5kU3ViRnJvbVBvd2VyT2ZUd28oZ2xvYmFsT2JqZWN0LCBOLCBiaWdJbnQsIGZhbHNl
KSk7CiAgICAgICAgIH0KICAgICAgICAgLy8gVHJ1bmNhdGlvbiBpcyBuby1vcCBpZiBiaWdJbnQg
PT0gLTJeKG4tMSkuCiAgICAgICAgIGlmIChsZW5ndGggPT0gbmVlZGVkTGVuZ3RoICYmIHRvcERp
Z2l0ID09IGNvbXBhcmVEaWdpdCkKICAgICAgICAgICAgIHJldHVybiBiaWdJbnQ7Ci0gICAgICAg
IHJldHVybiB0cnVuY2F0ZVRvTkJpdHModm0sIE4sIGJpZ0ludCk7CisgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgdHJ1bmNhdGVUb05CaXRzKGdsb2JhbE9iamVjdCwgTiwgYmlnSW50
KSk7CiAgICAgfQotICAgIHJldHVybiB0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKHZtLCBO
LCBiaWdJbnQsIGZhbHNlKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHRydW5jYXRl
QW5kU3ViRnJvbVBvd2VyT2ZUd28oZ2xvYmFsT2JqZWN0LCBOLCBiaWdJbnQsIGZhbHNlKSk7CiB9
CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgpAQCAtMjc5NCw3ICsyOTE4LDcgQEAg
SlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFzVWludE5JbXBsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF8KICAgICBpZiAoYmlnSW50LmlzWmVybygpKQogICAgICAg
ICByZXR1cm4gYmlnSW50OwogICAgIGlmIChuID09IDApCi0gICAgICAgIHJldHVybiB6ZXJvSW1w
bCh2bSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgemVyb0ltcGwoZ2xvYmFs
T2JqZWN0KSk7CiAKICAgICAvLyBJZiBiaWdJbnQgaXMgbmVnYXRpdmUsIHNpbXVsYXRlIHR3bydz
IGNvbXBsZW1lbnQgcmVwcmVzZW50YXRpb24uCiAgICAgaWYgKGJpZ0ludC5zaWduKCkpIHsKQEAg
LTI4MDIsNyArMjkyNiw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojphc1VpbnRO
SW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfCiAgICAgICAgICAgICB0
aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkJpZ0ludCBnZW5lcmF0
ZWQgZnJvbSB0aGlzIG9wZXJhdGlvbiBpcyB0b28gYmlnIl9zKTsKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVuY2F0ZUFuZFN1YkZyb21Q
b3dlck9mVHdvKHZtLCBzdGF0aWNfY2FzdDxpbnQzMl90PihuKSwgYmlnSW50LCBmYWxzZSk7Cisg
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJP
ZlR3byhnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PGludDMyX3Q+KG4pLCBiaWdJbnQsIGZhbHNl
KSk7CiAgICAgfQogCiAgICAgLy8gSWYgYmlnSW50IGlzIHBvc2l0aXZlIGFuZCBoYXMgdXAgdG8g
biBiaXRzLCByZXR1cm4gaXQgZGlyZWN0bHkuCkBAIC0yODI0LDE4ICsyOTQ4LDIyIEBAIEpTQmln
SW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojphc1VpbnROSW1wbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCB1aW50NjRfCiAKICAgICAvLyBPdGhlcndpc2UsIHRydW5jYXRlLgogICAgIEFT
U0VSVChuIDw9IElOVDMyX01BWCk7Ci0gICAgcmV0dXJuIHRydW5jYXRlVG9OQml0cyh2bSwgc3Rh
dGljX2Nhc3Q8aW50MzJfdD4obiksIGJpZ0ludCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCB0cnVuY2F0ZVRvTkJpdHMoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxpbnQzMl90Pihu
KSwgYmlnSW50KSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgotSlNCaWdJ
bnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnRydW5jYXRlVG9OQml0cyhWTSYgdm0sIGludDMyX3Qg
biwgQmlnSW50SW1wbCBiaWdJbnQpCitKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6dHJ1
bmNhdGVUb05CaXRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgbiwgQmln
SW50SW1wbCBiaWdJbnQpCiB7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEFTU0VSVChuICE9
IDApOwogICAgIEFTU0VSVChiaWdJbnQubGVuZ3RoKCkgPiBuIC8gZGlnaXRCaXRzKTsKIAogICAg
IGludDMyX3QgbmVlZGVkRGlnaXRzID0gKG4gKyAoZGlnaXRCaXRzIC0gMSkpIC8gZGlnaXRCaXRz
OwogICAgIEFTU0VSVChuZWVkZWREaWdpdHMgPD0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oYmlnSW50
Lmxlbmd0aCgpKSk7Ci0gICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNo
ZWNrZWQodm0sIG5lZWRlZERpZ2l0cyk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdp
dGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCBuZWVkZWREaWdpdHMpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIEFTU0VSVChyZXN1bHQpOwogCiAgICAgLy8gQ29w
eSBhbGwgZGlnaXRzIGV4Y2VwdCB0aGUgTVNELgpAQCAtMjg1MSwxOSArMjk3OSwyMyBAQCBKU0Jp
Z0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6dHJ1bmNhdGVUb05CaXRzKFZNJiB2bSwgaW50MzJf
dCBuLCBCaWdJbnRJbXBsIGJpZwogICAgIH0KICAgICByZXN1bHQtPnNldERpZ2l0KGxhc3QsIG1z
ZCk7CiAgICAgcmVzdWx0LT5zZXRTaWduKGJpZ0ludC5zaWduKCkpOwotICAgIHJldHVybiByZXN1
bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQt
PnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0KIAogLy8gU3VidHJhY3RzIHRoZSBsZWFzdCBz
aWduaWZpY2FudCBuIGJpdHMgb2YgYWJzKGJpZ0ludCkgZnJvbSAyXm4uCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQmlnSW50SW1wbD4KLUpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojp0cnVuY2F0
ZUFuZFN1YkZyb21Qb3dlck9mVHdvKFZNJiB2bSwgaW50MzJfdCBuLCBCaWdJbnRJbXBsIGJpZ0lu
dCwgYm9vbCByZXN1bHRTaWduKQorSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnRydW5j
YXRlQW5kU3ViRnJvbVBvd2VyT2ZUd28oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50
MzJfdCBuLCBCaWdJbnRJbXBsIGJpZ0ludCwgYm9vbCByZXN1bHRTaWduKQogeworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBBU1NFUlQobiAhPSAwKTsKICAgICBBU1NFUlQobiA8PSBzdGF0aWNf
Y2FzdDxpbnQzMl90PihtYXhMZW5ndGhCaXRzKSk7CiAKICAgICBpbnQzMl90IG5lZWRlZERpZ2l0
cyA9IChuICsgKGRpZ2l0Qml0cyAtIDEpKSAvIGRpZ2l0Qml0czsKICAgICBBU1NFUlQobmVlZGVk
RGlnaXRzIDw9IHN0YXRpY19jYXN0PGludDMyX3Q+KG1heExlbmd0aCkpOyAvLyBGb2xsb3dzIGZy
b20gbiA8PSBtYXhMZW5ndGhCaXRzLgotICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRo
TGVuZ3RoVW5jaGVja2VkKHZtLCBuZWVkZWREaWdpdHMpOworICAgIEpTQmlnSW50KiByZXN1bHQg
PSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgbmVlZGVkRGlnaXRzKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBBU1NFUlQocmVzdWx0KTsKIAog
ICAgIC8vIFByb2Nlc3MgYWxsIGRpZ2l0cyBleGNlcHQgdGhlIE1TRC4KQEAgLTI5MTAsNyArMzA0
Miw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojp0cnVuY2F0ZUFuZFN1YkZyb21Q
b3dlck9mVHdvKFZNJiB2bSwgaW50MzJfdCBuLCBCCiAgICAgfQogICAgIHJlc3VsdC0+c2V0RGln
aXQobGFzdCwgcmVzdWx0TVNEKTsKICAgICByZXN1bHQtPnNldFNpZ24ocmVzdWx0U2lnbik7Ci0g
ICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4o
c2NvcGUsIHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdCkpOwogfQogCiBKU1ZhbHVlIEpT
QmlnSW50Ojphc0ludE4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0X3Qgbiwg
SlNCaWdJbnQqIGJpZ0ludCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQmlnSW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5o
CmluZGV4IDZiZjhhYjJhNTY3MTlmNDdlNmI3N2E4MDk4MDE3ZjRhYmVmYWQzODcuLjAxNmMxOWY3
NGE1YTQ4ZjUxMjYzNzM5ZjU4ZDdiNzE0NDJlOGY4ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNCaWdJbnQuaApAQCAtNjUsMTYgKzY1LDIwIEBAIGNsYXNzIEpTQmlnSW50IGZp
bmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpT
Q2VsbCosIFZNJik7CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZVplcm8oVk0mKTsKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgSlNCaWdJbnQqIHRyeUNyZWF0ZVdpdGhMZW5ndGgoSlNHbG9iYWxPYmplY3Qq
LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlV2l0aExlbmd0
aFVuY2hlY2tlZChWTSYsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIEpTQmlnSW50KiBjcmVhdGVaZXJvKEpTR2xvYmFsT2JqZWN0Kik7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIEpTQmlnSW50KiB0cnlDcmVhdGVaZXJvKFZNJik7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQmlnSW50KiB0cnlDcmVhdGVXaXRoTGVuZ3RoKFZNJiwg
dW5zaWduZWQgbGVuZ3RoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNCaWdJbnQq
IGNyZWF0ZVdpdGhMZW5ndGgoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBsZW5ndGgpOwogCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKFZNJiwgaW50
MzJfdCB2YWx1ZSk7Ci0gICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKFZNJiwgdWludDMy
X3QgdmFsdWUpOwotICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShWTSYsIGludDY0X3Qg
dmFsdWUpOwotICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShWTSYsIHVpbnQ2NF90IHZh
bHVlKTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20oVk0mLCBib29sIHZhbHVlKTsK
LSAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20oVk0mLCBkb3VibGUgdmFsdWUpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShKU0dsb2JhbE9i
amVjdCosIGludDMyX3QgdmFsdWUpOworICAgIHN0YXRpYyBKU0JpZ0ludCogdHJ5Q3JlYXRlRnJv
bShWTSYsIGludDMyX3QgdmFsdWUpOworICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShK
U0dsb2JhbE9iamVjdCosIHVpbnQzMl90IHZhbHVlKTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGNy
ZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqLCBpbnQ2NF90IHZhbHVlKTsKKyAgICBzdGF0aWMgSlNC
aWdJbnQqIGNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqLCB1aW50NjRfdCB2YWx1ZSk7CisgICAg
c3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0KiwgYm9vbCB2YWx1ZSk7
CisgICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0KiwgZG91Ymxl
IHZhbHVlKTsKKworICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlRnJvbShKU0dsb2JhbE9iamVj
dCosIFZNJiwgaW50MzJfdCB2YWx1ZSk7CiAKICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mTGVu
Z3RoKCkKICAgICB7CkBAIC05MCwyMSArOTQsMjEgQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBw
dWJsaWMgSlNDZWxsIHsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGVuZ3RoOyB9CiAKLSAgICBzdGF0aWMgSlNWYWx1ZSBtYWtlSGVhcEJpZ0ludE9yQmlnSW50MzIo
Vk0mIHZtLCBpbnQ2NF90IHZhbHVlKQorICAgIHN0YXRpYyBKU1ZhbHVlIG1ha2VIZWFwQmlnSW50
T3JCaWdJbnQzMihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQ2NF90IHZhbHVlKQog
ICAgIHsKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgICAgIGlmICh2YWx1ZSA8PSBJTlRfTUFYICYm
IHZhbHVlID49IElOVF9NSU4pCiAgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNf
Y2FzdDxpbnQzMl90Pih2YWx1ZSkpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBKU0JpZ0ludDo6
Y3JlYXRlRnJvbSh2bSwgdmFsdWUpOworICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZy
b20oZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTVmFsdWUgbWFr
ZUhlYXBCaWdJbnRPckJpZ0ludDMyKFZNJiB2bSwgZG91YmxlIHZhbHVlKQorICAgIHN0YXRpYyBK
U1ZhbHVlIG1ha2VIZWFwQmlnSW50T3JCaWdJbnQzMihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBkb3VibGUgdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNJbnRlZ2VyKHZhbHVl
KSk7CiAgICAgICAgIGlmIChzdGQ6OmFicyh2YWx1ZSkgPD0gbWF4U2FmZUludGVnZXIoKSkKLSAg
ICAgICAgICAgIHJldHVybiBtYWtlSGVhcEJpZ0ludE9yQmlnSW50MzIodm0sIHN0YXRpY19jYXN0
PGludDY0X3Q+KHZhbHVlKSk7Ci0gICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2
bSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VIZWFwQmlnSW50T3JCaWdJbnQzMihn
bG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PGludDY0X3Q+KHZhbHVlKSk7CisgICAgICAgIHJldHVy
biBKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICB9CiAKICAg
ICBlbnVtIGNsYXNzIEVycm9yUGFyc2VNb2RlIHsKQEAgLTE1OCwxNyArMTYyLDEzIEBAIGNsYXNz
IEpTQmlnSW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAKICAgICBDb21wYXJpc29uUmVzdWx0
IHN0YXRpYyBjb21wYXJlVG9Eb3VibGUoSlNCaWdJbnQqIHgsIGRvdWJsZSB5KTsKIAotICAgIEFM
V0FZU19JTkxJTkUgc3RhdGljIEpTVmFsdWUgYXNJbnQzMk9ySGVhcENlbGwoVk0mIHZtLCBpbnQ2
NF90IHZhbHVlKQorICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTVmFsdWUgYXNJbnQzMk9ySGVh
cENlbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50NjRfdCB2YWx1ZSkKICAgICB7
CiAjaWYgVVNFKEJJR0lOVDMyKQogICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3Rh
dGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSA9PSB2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBq
c0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbHVlKSk7CiAjZW5kaWYKLSAgICAgICAg
cmV0dXJuIGNyZWF0ZUZyb20odm0sIHZhbHVlKTsKLSAgICB9Ci0gICAgQUxXQVlTX0lOTElORSBz
dGF0aWMgSlNWYWx1ZSBhc0ludDMyT3JIZWFwQ2VsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBpbnQ2NF90IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFzSW50MzJPckhlYXBD
ZWxsKGdsb2JhbE9iamVjdC0+dm0oKSwgdmFsdWUpOworICAgICAgICByZXR1cm4gY3JlYXRlRnJv
bShnbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xODQsNiArMTg0
LDggQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAgICAgSlNW
YWx1ZSBwYXlsb2FkOwogICAgIH07CiBwcml2YXRlOgorICAgIHN0YXRpYyBKU0JpZ0ludCogY3Jl
YXRlV2l0aExlbmd0aChKU0dsb2JhbE9iamVjdCosIFZNJiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZVplcm8oSlNHbG9iYWxPYmplY3QqLCBWTSYpOwogCiAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4K
ICAgICBzdGF0aWMgSW1wbFJlc3VsdCBleHBvbmVudGlhdGVJbXBsKEpTR2xvYmFsT2JqZWN0Kiwg
QmlnSW50SW1wbDEgYmFzZSwgQmlnSW50SW1wbDIgZXhwb25lbnQpOwpAQCAtMjEwLDcgKzIxMiw3
IEBAIGNsYXNzIEpTQmlnSW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgc3RhdGljIElt
cGxSZXN1bHQgcmVtYWluZGVySW1wbChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJp
Z0ludEltcGwyIHkpOwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci0gICAg
c3RhdGljIEltcGxSZXN1bHQgdW5hcnlNaW51c0ltcGwoVk0mLCBCaWdJbnRJbXBsIHgpOworICAg
IHN0YXRpYyBJbXBsUmVzdWx0IHVuYXJ5TWludXNJbXBsKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50
SW1wbCB4KTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUg
QmlnSW50SW1wbDI+CiAgICAgc3RhdGljIEltcGxSZXN1bHQgYml0d2lzZUFuZEltcGwoSlNHbG9i
YWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKQEAgLTI5NSw3ICsyOTcs
NyBAQCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHN0YXRpYyBK
U1ZhbHVlIGRpdmlkZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIGlu
dDMyX3QgeSkKICAgICB7CiAgICAgICAgIGlmICgheSkgewotICAgICAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGdldFZNKGdsb2JhbE9iamVjdCkpOwog
ICAgICAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICIwIGlzIGFu
IGludmFsaWQgZGl2aXNvciB2YWx1ZS4iX3MpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUo
KTsKICAgICAgICAgfQpAQCAtMzEwLDcgKzMxMiw3IEBAIGNsYXNzIEpTQmlnSW50IGZpbmFsIDog
cHVibGljIEpTQ2VsbCB7CiAgICAgc3RhdGljIEpTVmFsdWUgcmVtYWluZGVyKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgaW50MzJfdCB5KQogICAgIHsKICAgICAgICAg
aWYgKCF5KSB7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShn
bG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUoZ2V0Vk0oZ2xvYmFsT2JqZWN0KSk7CiAgICAgICAgICAgICB0aHJvd1JhbmdlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIjAgaXMgYW4gaW52YWxpZCBkaXZpc29yIHZhbHVlLiJf
cyk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CkBAIC0zMTgsMTEg
KzMyMCwxMSBAQCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIH0K
ICNlbmRpZgogCi0gICAgc3RhdGljIEpTVmFsdWUgdW5hcnlNaW51cyhWTSYsIEpTQmlnSW50KiB4
KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSB1bmFyeU1pbnVzKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJ
bnQqIHgpOwogI2lmIFVTRShCSUdJTlQzMikKLSAgICBzdGF0aWMgSlNWYWx1ZSB1bmFyeU1pbnVz
KFZNJiB2bSwgaW50MzJfdCB4KQorICAgIHN0YXRpYyBKU1ZhbHVlIHVuYXJ5TWludXMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4KQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFzSW50MzJPckhlYXBDZWxsKHZtLCAtc3RhdGljX2Nhc3Q8aW50NjRfdD4oeCkpOworICAgICAg
ICByZXR1cm4gYXNJbnQzMk9ySGVhcENlbGwoZ2xvYmFsT2JqZWN0LCAtc3RhdGljX2Nhc3Q8aW50
NjRfdD4oeCkpOwogICAgIH0KICNlbmRpZgogCkBAIC00MjMsMTIgKzQyNSwxNSBAQCBjbGFzcyBK
U0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAgRGlnaXQgZGlnaXQodW5zaWdu
ZWQpOwogICAgIHZvaWQgc2V0RGlnaXQodW5zaWduZWQsIERpZ2l0KTsgLy8gVXNlIG9ubHkgd2hl
biBpbml0aWFsaXppbmcuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNCaWdJbnQqIHJpZ2h0VHJp
bShWTSYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTQmlnSW50KiByaWdodFRyaW0oSlNHbG9i
YWxPYmplY3QqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBKU0JpZ0ludCogdHJ5UmlnaHRUcmlt
KFZNJik7CiAKIHByaXZhdGU6CiAgICAgSlNCaWdJbnQoVk0mLCBTdHJ1Y3R1cmUqLCBEaWdpdCos
IHVuc2lnbmVkIGxlbmd0aCk7CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb21JbXBs
KFZNJiwgdWludDY0X3QgdmFsdWUsIGJvb2wgc2lnbik7CisgICAgSlNCaWdJbnQqIHJpZ2h0VHJp
bShKU0dsb2JhbE9iamVjdCosIFZNJik7CisKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZy
b21JbXBsKEpTR2xvYmFsT2JqZWN0KiwgdWludDY0X3QgdmFsdWUsIGJvb2wgc2lnbik7CiAKICAg
ICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdHNQZXJCeXRlID0gODsKICAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIGRpZ2l0Qml0cyA9IHNpemVvZihEaWdpdCkgKiBiaXRzUGVyQnl0
ZTsKQEAgLTQ1NCw3ICs0NTksNyBAQCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0Nl
bGwgewogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50
SW1wbDI+CiAgICAgc3RhdGljIENvbXBhcmlzb25SZXN1bHQgYWJzb2x1dGVDb21wYXJlKEJpZ0lu
dEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJ
bXBsPgotICAgIHN0YXRpYyB2b2lkIGFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcihWTSYsIEJp
Z0ludEltcGwgeCwgRGlnaXQgZGl2aXNvciwgSlNCaWdJbnQqKiBxdW90aWVudCwgRGlnaXQmIHJl
bWFpbmRlcik7CisgICAgc3RhdGljIGJvb2wgYWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29yKEpT
R2xvYmFsT2JqZWN0KiwgVk0mLCBCaWdJbnRJbXBsIHgsIERpZ2l0IGRpdmlzb3IsIEpTQmlnSW50
KiogcXVvdGllbnQsIERpZ2l0JiByZW1haW5kZXIpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBC
aWdJbnRJbXBsPgogICAgIHN0YXRpYyB2b2lkIGludGVybmFsTXVsdGlwbHlBZGQoQmlnSW50SW1w
bCBzb3VyY2UsIERpZ2l0IGZhY3RvciwgRGlnaXQgc3VtbWFuZCwgdW5zaWduZWQsIEpTQmlnSW50
KiByZXN1bHQpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgpAQCAtNDg5LDE2
ICs0OTQsMTYgQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB9
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludElt
cGwyLCB0eXBlbmFtZSBCaXR3aXNlT3A+Ci0gICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUJp
dHdpc2VPcChWTSYsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHksIEV4dHJhRGlnaXRzSGFu
ZGxpbmcsIEJpdHdpc2VPcCYmKTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlQml0d2lz
ZU9wKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwgRXh0cmFE
aWdpdHNIYW5kbGluZywgQml0d2lzZU9wJiYpOwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJp
Z0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KLSAgICBzdGF0aWMgSlNCaWdJbnQqIGFi
c29sdXRlQW5kKFZNJiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CisgICAgc3RhdGlj
IEpTQmlnSW50KiBhYnNvbHV0ZUFuZChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJp
Z0ludEltcGwyIHkpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5h
bWUgQmlnSW50SW1wbDI+Ci0gICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZU9yKFZNJiwgQmln
SW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CisgICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0
ZU9yKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CiAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KLSAg
ICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlQW5kTm90KFZNJiwgQmlnSW50SW1wbDEgeCwgQmln
SW50SW1wbDIgeSk7CisgICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUFuZE5vdChKU0dsb2Jh
bE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOwogICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+Ci0gICAgc3RhdGljIEpT
QmlnSW50KiBhYnNvbHV0ZVhvcihWTSYsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOwor
ICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVYb3IoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJ
bXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKIAogICAgIGVudW0gY2xhc3MgU2lnbk9wdGlvbiB7CiAg
ICAgICAgIFNpZ25lZCwKQEAgLTUzNSwyMCArNTQwLDIwIEBAIGNsYXNzIEpTQmlnSW50IGZpbmFs
IDogcHVibGljIEpTQ2VsbCB7CiAgICAgc3RhdGljIEpTQmlnSW50KiBhbGxvY2F0ZUZvcihKU0ds
b2JhbE9iamVjdCosIFZNJiwgdW5zaWduZWQgcmFkaXgsIHVuc2lnbmVkIGNoYXJjb3VudCk7CiAK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KLSAgICBzdGF0aWMgSlNCaWdJbnQq
IGNvcHkoVk0mLCBCaWdJbnRJbXBsIHgpOworICAgIHN0YXRpYyBKU0JpZ0ludCogY29weShKU0ds
b2JhbE9iamVjdCosIEJpZ0ludEltcGwgeCk7CiAKICAgICB2b2lkIGlucGxhY2VNdWx0aXBseUFk
ZChEaWdpdCBtdWx0aXBsaWVyLCBEaWdpdCBwYXJ0KTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
QmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgogICAgIHN0YXRpYyBJbXBsUmVzdWx0
IGFic29sdXRlQWRkKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIg
eSwgYm9vbCByZXN1bHRTaWduKTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEs
IHR5cGVuYW1lIEJpZ0ludEltcGwyPgotICAgIHN0YXRpYyBJbXBsUmVzdWx0IGFic29sdXRlU3Vi
KFZNJiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwgYm9vbCByZXN1bHRTaWduKTsKKyAg
ICBzdGF0aWMgSW1wbFJlc3VsdCBhYnNvbHV0ZVN1YihKU0dsb2JhbE9iamVjdCosIEJpZ0ludElt
cGwxIHgsIEJpZ0ludEltcGwyIHksIGJvb2wgcmVzdWx0U2lnbik7CiAKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgogICAgIHN0YXRpYyBJ
bXBsUmVzdWx0IGxlZnRTaGlmdEJ5QWJzb2x1dGUoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBs
MSB4LCBCaWdJbnRJbXBsMiB5KTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEs
IHR5cGVuYW1lIEJpZ0ludEltcGwyPgogICAgIHN0YXRpYyBJbXBsUmVzdWx0IHJpZ2h0U2hpZnRC
eUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7
CiAKLSAgICBzdGF0aWMgSW1wbFJlc3VsdCByaWdodFNoaWZ0QnlNYXhpbXVtKFZNJiwgYm9vbCBz
aWduKTsKKyAgICBzdGF0aWMgSW1wbFJlc3VsdCByaWdodFNoaWZ0QnlNYXhpbXVtKEpTR2xvYmFs
T2JqZWN0KiwgYm9vbCBzaWduKTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBs
PgogICAgIHN0YXRpYyBPcHRpb25hbDxEaWdpdD4gdG9TaGlmdEFtb3VudChCaWdJbnRJbXBsIHgp
OwpAQCAtNTU4LDkgKzU2Myw5IEBAIGNsYXNzIEpTQmlnSW50IGZpbmFsIDogcHVibGljIEpTQ2Vs
bCB7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CiAgICAgc3RhdGljIEltcGxS
ZXN1bHQgYXNVaW50TkltcGwoSlNHbG9iYWxPYmplY3QqLCB1aW50NjRfdCwgQmlnSW50SW1wbCk7
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci0gICAgc3RhdGljIEltcGxSZXN1
bHQgdHJ1bmNhdGVUb05CaXRzKFZNJiwgaW50MzJfdCwgQmlnSW50SW1wbCk7CisgICAgc3RhdGlj
IEltcGxSZXN1bHQgdHJ1bmNhdGVUb05CaXRzKEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCwgQmln
SW50SW1wbCk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci0gICAgc3RhdGlj
IEltcGxSZXN1bHQgdHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byhWTSYsIGludDMyX3QsIEJp
Z0ludEltcGwsIGJvb2wgcmVzdWx0U2lnbik7CisgICAgc3RhdGljIEltcGxSZXN1bHQgdHJ1bmNh
dGVBbmRTdWJGcm9tUG93ZXJPZlR3byhKU0dsb2JhbE9iamVjdCosIGludDMyX3QsIEJpZ0ludElt
cGwsIGJvb2wgcmVzdWx0U2lnbik7CiAKICAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBvZmZzZXRP
ZkRhdGEoKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ0pTVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1
ZS5jcHAKaW5kZXggYTQ1NzcyY2ZlYTQ2NGE5NGVhYWUxNjBmMjU4NTZiYmYxOTNmOTBiZC4uOWU0
NzAzYmI1NjFiOTA0ZWIxM2QyZTg3ZDk4NDc2ZDBjZWY0ZWYyOSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKQEAgLTExOCwxOSArMTE4LDIzIEBAIEpT
T2JqZWN0KiBKU1ZhbHVlOjp0b09iamVjdFNsb3dDYXNlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpIGNvbnN0CiAKIEpTVmFsdWUgSlNWYWx1ZTo6dG9UaGlzU2xvd0Nhc2UoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgRUNNQU1vZGUgZWNtYU1vZGUpIGNvbnN0CiB7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKwogICAgIEFTU0VSVCghaXNDZWxsKCkpOwogCiAgICAgaWYgKGVjbWFNb2Rl
LmlzU3RyaWN0KCkpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAogICAgIGlmIChpc0ludDMyKCkg
fHwgaXNEb3VibGUoKSkKLSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdE51bWJlcihnbG9iYWxPYmpl
Y3QsIGFzVmFsdWUoKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY29uc3Ry
dWN0TnVtYmVyKGdsb2JhbE9iamVjdCwgYXNWYWx1ZSgpKSk7CiAgICAgaWYgKGlzVHJ1ZSgpIHx8
IGlzRmFsc2UoKSkKLSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEJvb2xlYW5Gcm9tSW1tZWRpYXRl
Qm9vbGVhbihnbG9iYWxPYmplY3QsIGFzVmFsdWUoKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgY29uc3RydWN0Qm9vbGVhbkZyb21JbW1lZGlhdGVCb29sZWFuKGdsb2JhbE9i
amVjdCwgYXNWYWx1ZSgpKSk7CiAjaWYgVVNFKEJJR0lOVDMyKQogICAgIGlmIChpc0JpZ0ludDMy
KCkpIHsKLSAgICAgICAgSlNDZWxsKiBoZWFwQmlnSW50ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4o
SlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LT52bSgpLCBiaWdJbnQzMkFzSW50MzIo
KSkpOwotICAgICAgICByZXR1cm4gaGVhcEJpZ0ludC0+dG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsK
KyAgICAgICAgSlNDZWxsKiBoZWFwQmlnSW50ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oSlNCaWdJ
bnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCBiaWdJbnQzMkFzSW50MzIoKSkpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIGhlYXBCaWdJbnQtPnRvT2JqZWN0KGdsb2JhbE9iamVjdCkpOwogICAgIH0K
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggZmE5OGM1MTJm
MTQxMzVkMTJhODE1MzNiNTMyZmMzOWQ3NjZiMWFjMS4uZDUxMGM0ZTRkOGQyYTI5YmM2MGRmZGFk
OTViMmVhNzgyNmZhNzQyYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAt
NDcyLDcgKzQ3MiwxMSBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUp
CiAgICAgICAgIHNlbnRpbmVsTWFwQnVja2V0KCk7CiAgICAgICAgIHNlbnRpbmVsU2V0QnVja2V0
KCk7CiAgICAgfQotICAgIGhlYXBCaWdJbnRDb25zdGFudE9uZS5zZXQoKnRoaXMsIEpTQmlnSW50
OjpjcmVhdGVGcm9tKCp0aGlzLCAxKSk7CisgICAgeworICAgICAgICBhdXRvKiBiaWdJbnQgPSBK
U0JpZ0ludDo6dHJ5Q3JlYXRlRnJvbSgqdGhpcywgMSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGJpZ0ludCk7CisgICAgICAgIGhlYXBCaWdJbnRDb25zdGFudE9uZS5zZXQoKnRoaXMsIGJpZ0lu
dCk7CisgICAgfQogCiAgICAgVGhyZWFkOjpjdXJyZW50KCkuc2V0Q3VycmVudEF0b21TdHJpbmdU
YWJsZShleGlzdGluZ0VudHJ5QXRvbVN0cmluZ1RhYmxlKTsKICAgICAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IGI1
MjMwMzhkMGFkNWFlN2Y0NTU0MDEyNjA4NjNkNzY5ODY0MTZlZGYuLjNlYjRjNWQxMDk3NzBkMWJm
NTg2Y2I4MDkzMGM0NTQwNDZjMGExZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMzAwNyw3ICszMDA3LDExIEBA
IGNsYXNzIENsb25lRGVzZXJpYWxpemVyIDogQ2xvbmVCYXNlIHsKICNpZiBVU0UoQklHSU5UMzIp
CiAgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMigwKTsKICNlbHNlCi0gICAgICAgICAgICBK
U0JpZ0ludCogYmlnSW50ID0gSlNCaWdJbnQ6OmNyZWF0ZVplcm8obV9sZXhpY2FsR2xvYmFsT2Jq
ZWN0LT52bSgpKTsKKyAgICAgICAgICAgIEpTQmlnSW50KiBiaWdJbnQgPSBKU0JpZ0ludDo6dHJ5
Q3JlYXRlWmVybyhtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICAgICAgaWYg
KFVOTElLRUxZKCFiaWdJbnQpKSB7CisgICAgICAgICAgICAgICAgZmFpbCgpOworICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2dj
QnVmZmVyLmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3coYmlnSW50KTsKICAgICAgICAgICAgIHJl
dHVybiBiaWdJbnQ7CiAjZW5kaWYKQEAgLTMwMjgsMjEgKzMwMzIsMjUgQEAgY2xhc3MgQ2xvbmVE
ZXNlcmlhbGl6ZXIgOiBDbG9uZUJhc2UgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNC
aWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihkaWdpdDY0KSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBBU1NFUlQoZGlnaXQ2NCAhPSAwKTsKLSAgICAgICAgICAgIEpTQmlnSW50KiBi
aWdJbnQgPSBKU0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aChtX2xleGljYWxHbG9iYWxPYmpl
Y3QsIDEpOworICAgICAgICAgICAgSlNCaWdJbnQqIGJpZ0ludCA9IEpTQmlnSW50Ojp0cnlDcmVh
dGVXaXRoTGVuZ3RoKG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSwgMSk7CiAgICAgICAgICAg
ICBpZiAoIWJpZ0ludCkgewogICAgICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYmlnSW50LT5z
ZXREaWdpdCgwLCBkaWdpdDY0KTsKICAgICAgICAgICAgIGJpZ0ludC0+c2V0U2lnbihzaWduKTsK
LSAgICAgICAgICAgIGJpZ0ludCA9IGJpZ0ludC0+cmlnaHRUcmltKG1fbGV4aWNhbEdsb2JhbE9i
amVjdC0+dm0oKSk7CisgICAgICAgICAgICBiaWdJbnQgPSBiaWdJbnQtPnRyeVJpZ2h0VHJpbSht
X2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICAgICAgaWYgKCFiaWdJbnQpIHsK
KyAgICAgICAgICAgICAgICBmYWlsKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUo
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kV2l0aENyYXNo
T25PdmVyZmxvdyhiaWdJbnQpOwogICAgICAgICAgICAgcmV0dXJuIGJpZ0ludDsKICAgICAgICAg
fQogI2VuZGlmCiAgICAgICAgIEpTQmlnSW50KiBiaWdJbnQgPSBudWxscHRyOwogICAgICAgICBp
ZiBjb25zdGV4cHIgKHNpemVvZihKU0JpZ0ludDo6RGlnaXQpID09IHNpemVvZih1aW50NjRfdCkp
IHsKLSAgICAgICAgICAgIGJpZ0ludCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKG1f
bGV4aWNhbEdsb2JhbE9iamVjdCwgbGVuZ3RoSW5VaW50NjQpOworICAgICAgICAgICAgYmlnSW50
ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgobV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52
bSgpLCBsZW5ndGhJblVpbnQ2NCk7CiAgICAgICAgICAgICBpZiAoIWJpZ0ludCkgewogICAgICAg
ICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwpAQCAt
MzA1Niw3ICszMDY0LDcgQEAgY2xhc3MgQ2xvbmVEZXNlcmlhbGl6ZXIgOiBDbG9uZUJhc2Ugewog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKHNpemVv
ZihKU0JpZ0ludDo6RGlnaXQpID09IHNpemVvZih1aW50MzJfdCkpOwotICAgICAgICAgICAgYmln
SW50ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgobV9sZXhpY2FsR2xvYmFsT2JqZWN0
LCBsZW5ndGhJblVpbnQ2NCAqIDIpOworICAgICAgICAgICAgYmlnSW50ID0gSlNCaWdJbnQ6OnRy
eUNyZWF0ZVdpdGhMZW5ndGgobV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpLCBsZW5ndGhJblVp
bnQ2NCAqIDIpOwogICAgICAgICAgICAgaWYgKCFiaWdJbnQpIHsKICAgICAgICAgICAgICAgICBm
YWlsKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKQEAgLTMwNzEsNyArMzA3
OSwxMSBAQCBjbGFzcyBDbG9uZURlc2VyaWFsaXplciA6IENsb25lQmFzZSB7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgYmlnSW50LT5zZXRTaWduKHNpZ24pOwotICAgICAgICBi
aWdJbnQgPSBiaWdJbnQtPnJpZ2h0VHJpbShtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwor
ICAgICAgICBiaWdJbnQgPSBiaWdJbnQtPnRyeVJpZ2h0VHJpbShtX2xleGljYWxHbG9iYWxPYmpl
Y3QtPnZtKCkpOworICAgICAgICBpZiAoIWJpZ0ludCkgeworICAgICAgICAgICAgZmFpbCgpOwor
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgfQogICAgICAgICBtX2djQnVm
ZmVyLmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3coYmlnSW50KTsKICAgICAgICAgcmV0dXJuIGJp
Z0ludDsKICAgICB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDE1ZmVjNzdlODkwYjliZDMyNGYxODc2ZGZlZTc3ZjE1Mzc5ZTgyNDYuLmI1
M2Y2MzIxZmIzYTQyY2I1ZjdlMmE3M2ZjYjMzMDI0NTIyMGQ5MDEgMTAwNjQ0Ci0tLSBhL0pTVGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIw
MjAtMDUtMjkgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBb
SlNDXSBKU0JpZ0ludCBhbGxvY2F0aW9uIHNob3VsZCBiZSBncmFjZWZ1bCBmb3IgT09NCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI1MTIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9iaWdp
bnQtY2FuLXRocm93LW9vbS5qczogQ29waWVkIGZyb20gSlNUZXN0cy9zdHJlc3MvZ2V0LWZ1bmN0
aW9uLXJlYWxtLW5vdC1kb2luZy1yZWN1cnNpb24uanMuCisgICAgICAgIChjYW5UaHJvdyk6Cisg
ICAgICAgIChmb28pOgorICAgICAgICAoZ2V0IGZvbyk6CisgICAgICAgICogc3RyZXNzL2dldC1m
dW5jdGlvbi1yZWFsbS1ub3QtZG9pbmctcmVjdXJzaW9uLmpzOgorICAgICAgICAoY2FuVGhyb3cp
OgorCiAyMDIwLTA1LTI3ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIGZvci1vZiBzaG91bGQgY2hlY2sgdGhlIGl0ZXJhYmxlIGlzIGEgSlNBcnJheSBm
b3IgRmFzdEFycmF5IGluIERGRyBpdGVyYXRvcl9vcGVuCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0
cmVzcy9iaWdpbnQtY2FuLXRocm93LW9vbS5qcyBiL0pTVGVzdHMvc3RyZXNzL2JpZ2ludC1jYW4t
dGhyb3ctb29tLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwMzFiN2M4ZGUxNzJlODI2Zjk0YWU1NTEzYjhhNTRh
MGNhYjIzYWIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9iaWdpbnQtY2FuLXRo
cm93LW9vbS5qcwpAQCAtMCwwICsxLDM5IEBACisvL0Agc2tpcCBpZiAkbWVtb3J5TGltaXRlZAor
Ly9AIHJ1bkRlZmF1bHQoIi0tdXNlQ29uY3VycmVudEpJVD0wIikKKworZnVuY3Rpb24gY2FuVGhy
b3coZnVuYywgZXJyb3JNZXNzYWdlKSB7CisgICAgdmFyIGVycm9yVGhyb3duID0gZmFsc2U7Cisg
ICAgdmFyIGVycm9yID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBmdW5jKCk7CisgICAgfSBj
YXRjaCAoZSkgeworICAgICAgICBlcnJvclRocm93biA9IHRydWU7CisgICAgICAgIGVycm9yID0g
ZTsKKyAgICB9CisgICAgaWYgKGVycm9yVGhyb3duICYmIFN0cmluZyhlcnJvcikgIT09IGVycm9y
TWVzc2FnZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiYWQgZXJyb3I6ICR7U3RyaW5nKGVy
cm9yKX1gKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2NvbnN0IGEwID0gW107CithMC5fX3By
b3RvX18gPSB7fTsKK2EwLmxlbmd0aCA9IDIqKjIzCitPYmplY3QuZGVmaW5lUHJvcGVydHkoYTAs
IDAsIHsgZ2V0OiBmb28gfSk7CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICBuZXcgSW50MTZBcnJh
eShhMCk7Cit9CisKK25ldyBQcm9taXNlKGZvbyk7CisKK3RyeSB7CisgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgICAgIG5ldyBVaW50OEFycmF5KDEwMDAwMCk7Cisg
ICAgfQorfSBjYXRjaCB7fQorCitjYW5UaHJvdygoKSA9PiB7CisgICAgZm9yIChsZXQgaT0wbjsg
aTwxMDAwMG47IGkrKykgeworICAgICAgICAybioqaTsKKyAgICB9Cit9LCBgUmFuZ2VFcnJvcjog
T3V0IG9mIG1lbW9yeWApOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZ2V0LWZ1bmN0aW9u
LXJlYWxtLW5vdC1kb2luZy1yZWN1cnNpb24uanMgYi9KU1Rlc3RzL3N0cmVzcy9nZXQtZnVuY3Rp
b24tcmVhbG0tbm90LWRvaW5nLXJlY3Vyc2lvbi5qcwppbmRleCBhNzllZjJjYzYwZGFlOTgzYTRi
Mjk0ZjQ0YTE3ZDcyMWYzOTdmNjNiLi5mZmE2ZTNhYWNlOTNkM2QzYjg3YTM5NzUyNjQ5NzhiYjk2
ZjI4NTE1IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9nZXQtZnVuY3Rpb24tcmVhbG0tbm90
LWRvaW5nLXJlY3Vyc2lvbi5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9nZXQtZnVuY3Rpb24tcmVh
bG0tbm90LWRvaW5nLXJlY3Vyc2lvbi5qcwpAQCAtOSw3ICs5LDYgQEAgZnVuY3Rpb24gY2FuVGhy
b3coZnVuYywgZXJyb3JNZXNzYWdlKSB7CiAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICBlcnJv
clRocm93biA9IHRydWU7CiAgICAgICAgIGVycm9yID0gZTsKLSAgICAgICAgcHJpbnQoZXJyb3Iu
bWVzc2FnZSk7CiAgICAgfQogICAgIGlmIChlcnJvclRocm93biAmJiBTdHJpbmcoZXJyb3IpICE9
PSBlcnJvck1lc3NhZ2UpCiAgICAgICAgIHRocm93IG5ldyBFcnJvcihgYmFkIGVycm9yOiAke1N0
cmluZyhlcnJvcil9YCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400639</attachid>
            <date>2020-05-29 17:27:38 -0700</date>
            <delta_ts>2020-05-29 17:27:38 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-212512-20200529172737.patch</filename>
            <type>text/plain</type>
            <size>93463</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyMzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZWM5Y2Y2ZWZmNzkyZjgyNzA0NjRjMzM5ZGI0NDcwMTI5YTc0ODJlLi5iYTk3MjFmMjU2Y2NlZWEz
NTdhNGE3MGRhODJhYWRjZjM1MjYyODJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MSBAQAorMjAyMC0wNS0yOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEpTQmlnSW50IGFsbG9jYXRpb24gc2hvdWxkIGJlIGdyYWNlZnVs
IGZvciBPT00KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMjUxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggYWxsb3dzIEpTQmlnSW50J3Mgc3RvcmFnZSBhbGxvY2F0aW9uIHRvIGZhaWwg
Z3JhY2VmdWxseSBpZiBPT00gY29uZGl0aW9uIGhhcHBlbnMuCisgICAgICAgIFdlIHRocmVhZCBK
U0dsb2JhbE9iamVjdCogaW5zdGVhZCBvZiBWTSYgYW5kIHRocm93IE9PTSBlcnJvciBpZiBzdG9y
YWdlIGFsbG9jYXRpb24gZmFpbGVkLgorICAgICAgICBXZSBhbHNvIHJlbmFtZSBgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdGAgcGFyYW1ldGVyIHRvIGBKU0dsb2JhbE9iamVjdCogbnVsbE9y
R2xvYmFsT2JqZWN0Rm9yT09NYAorICAgICAgICBpZiBpdCBjYW4gYmUgbnVsbHB0ci4KKworICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAg
ICAoZnVuY3Rpb25DcmVhdGVIZWFwQmlnSW50KToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyQXJl
bmEuY3BwOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyQXJlbmE6Om1ha2VCaWdJbnREZWNpbWFs
SWRlbnRpZmllcik6CisgICAgICAgICogcnVudGltZS9CaWdJbnRDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OnRvQmlnSW50KToKKyAgICAgICAgKEpTQzo6Y2FsbEJpZ0ludENvbnN0cnVj
dG9yKToKKyAgICAgICAgKiBydW50aW1lL0JpZ0ludFByb3RvdHlwZS5jcHA6CisgICAgICAgIChK
U0M6OnRvVGhpc0JpZ0ludFZhbHVlKToKKyAgICAgICAgKEpTQzo6YmlnSW50UHJvdG9GdW5jVG9T
dHJpbmcpOgorICAgICAgICAoSlNDOjpiaWdJbnRQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6Cisg
ICAgICAgIChKU0M6OmJpZ0ludFByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAqIHJ1bnRpbWUv
Q2FjaGVkVHlwZXMuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZWRCaWdJbnQ6OmRlY29kZSBjb25z
dCk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdEZ1bmNGb3JtYXQpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3BwOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
Y3JlYXRlWmVybyk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0cnlDcmVhdGVaZXJvKToKKyAg
ICAgICAgKEpTQzo6SlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGgpOgorICAgICAgICAoSlNDOjpK
U0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojpj
cmVhdGVGcm9tKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnRyeUNyZWF0ZUZyb20pOgorICAg
ICAgICAoSlNDOjpKU0JpZ0ludDo6Y3JlYXRlRnJvbUltcGwpOgorICAgICAgICAoSlNDOjpKU0Jp
Z0ludDo6cGFyc2VJbnQpOgorICAgICAgICAoSlNDOjpIZWFwQmlnSW50SW1wbDo6dG9IZWFwQmln
SW50KToKKyAgICAgICAgKEpTQzo6SW50MzJCaWdJbnRJbXBsOjp0b0hlYXBCaWdJbnQpOgorICAg
ICAgICAoSlNDOjp6ZXJvSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpleHBvbmVudGlh
dGVJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6Om11bHRpcGx5SW1wbCk6CisgICAgICAg
IChKU0M6OkpTQmlnSW50OjpkaXZpZGVJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmNv
cHkpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwpOgorICAgICAgICAo
SlNDOjpKU0JpZ0ludDo6dW5hcnlNaW51cyk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpyZW1h
aW5kZXJJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmluY0ltcGwpOgorICAgICAgICAo
SlNDOjpKU0JpZ0ludDo6ZGVjSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphZGRJbXBs
KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnN1YkltcGwpOgorICAgICAgICAoSlNDOjpKU0Jp
Z0ludDo6Yml0d2lzZUFuZEltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0d2lzZU9y
SW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpiaXR3aXNlWG9ySW1wbCk6CisgICAgICAg
IChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZUFkZCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojph
YnNvbHV0ZVN1Yik6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZURpdldpdGhEaWdp
dERpdmlzb3IpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVEaXZXaXRoQmlnSW50
RGl2aXNvcik6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZUxlZnRTaGlmdEFsd2F5
c0NvcHkpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVCaXR3aXNlT3ApOgorICAg
ICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVBbmQpOgorICAgICAgICAoSlNDOjpKU0JpZ0lu
dDo6YWJzb2x1dGVPcik6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZUFuZE5vdCk6
CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZVhvcik6CisgICAgICAgIChKU0M6OkpT
QmlnSW50OjphYnNvbHV0ZUFkZE9uZSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0
ZVN1Yk9uZSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpsZWZ0U2hpZnRCeUFic29sdXRlKToK
KyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeUFic29sdXRlKToKKyAgICAgICAg
KEpTQzo6SlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeU1heGltdW0pOgorICAgICAgICAoSlNDOjpKU0Jp
Z0ludDo6dG9TdHJpbmdCYXNlUG93ZXJPZlR3byk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0
b1N0cmluZ0dlbmVyaWMpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6cmlnaHRUcmltKToKKyAg
ICAgICAgKEpTQzo6SlNCaWdJbnQ6OnRyeVJpZ2h0VHJpbSk6CisgICAgICAgIChKU0M6OkpTQmln
SW50OjphbGxvY2F0ZUZvcik6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojphc0ludE5JbXBsKToK
KyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFzVWludE5JbXBsKToKKyAgICAgICAgKEpTQzo6SlNC
aWdJbnQ6OnRydW5jYXRlVG9OQml0cyk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0cnVuY2F0
ZUFuZFN1YkZyb21Qb3dlck9mVHdvKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmNyZWF0ZVdp
dGhMZW5ndGhVbmNoZWNrZWQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQu
aDoKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1Zh
bHVlOjp0b1RoaXNTbG93Q2FzZSBjb25zdCk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6Cisg
ICAgICAgIChKU0M6OlZNOjpWTSk6CisKIDIwMjAtMDUtMjkgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB0aGluZ3MgZnJvbSBGZWF0dXJlRGVmaW5lcy54
Y2NvbmZpZyB0aGF0IGFyZSBjb3ZlcmVkIGJ5IFBsYXRmb3JtRW5hYmxlQ29jb2EuaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IGJlMTVhNzVmYWJlMTk2N2NmN2U0NWYwMDBmYzY1MTc3YThkZmExZTIuLjY5YjVmZjc2
YjAwNTZkMzYyNjljNmMyYjUyOGQyOTk0YjIwZTA1OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MyBAQAorMjAyMC0wNS0yOSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisg
ICAgICAgIFtKU0NdIEpTQmlnSW50IGFsbG9jYXRpb24gc2hvdWxkIGJlIGdyYWNlZnVsIGZvciBP
T00KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjUx
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNs
b25lRGVzZXJpYWxpemVyOjpyZWFkQmlnSW50KToKKwogMjAyMC0wNS0yOSAgSmVyIE5vYmxlICA8
amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBbRU1FXSBuYXZpZ2F0b3IucmVxdWVzdE1l
ZGlhS2V5U3lzdGVtQWNjZXNzKCkgc2hvdWxkIHJlamVjdCBQVVIgc2Vzc2lvblR5cGVzIGluIHBy
aXZhdGUgYnJvd3NpbmcgbW9kZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCmluZGV4IDNhNDFlNzYyZWM4ZDgzY2M0MmFjZTFkMTNiMmQ0Nzk2MmI0Njc1NzUu
LmQwMGVhMjk2MzYwMGM1MTEzYTg3OGIyY2VhZGNmNzU4MDlhYTFhYWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtMjg0MiwxMCArMjg0MiwxMCBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoTmVnYXRlKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgaWYgKHBy
aW1WYWx1ZS5pc0JpZ0ludDMyKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNC
aWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSkpOworICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6
dW5hcnlNaW51cyhnbG9iYWxPYmplY3QsIHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSkpKTsK
ICNlbmRpZgogICAgIGlmIChwcmltVmFsdWUuaXNIZWFwQmlnSW50KCkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5hc0hl
YXBCaWdJbnQoKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6
OmVuY29kZShKU0JpZ0ludDo6dW5hcnlNaW51cyhnbG9iYWxPYmplY3QsIHByaW1WYWx1ZS5hc0hl
YXBCaWdJbnQoKSkpKTsKIAogICAgIGRvdWJsZSBudW1iZXIgPSBwcmltVmFsdWUudG9OdW1iZXIo
Z2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKQEAgLTI4NzAsMTMgKzI4NzAsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwK
IAogI2lmIFVTRShCSUdJTlQzMikKICAgICBpZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkgewot
ICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFs
dWUuYmlnSW50MzJBc0ludDMyKCkpOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50
Ojp1bmFyeU1pbnVzKGdsb2JhbE9iamVjdCwgcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpKTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgYXJpdGhQ
cm9maWxlLT5vYnNlcnZlUmVzdWx0KHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKICAgICB9CiAjZW5kaWYKICAgICBpZiAocHJpbVZhbHVlLmlzSGVhcEJp
Z0ludCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXMo
dm0sIHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0g
SlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFsdWUuYXNIZWFwQmlnSW50
KCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBh
cml0aFByb2ZpbGUtPm9ic2VydmVSZXN1bHQocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KQEAgLTI5MTIsMTMgKzI5MTQsMTUgQEAgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1p
emUoSlNHbG9iYWxPYmplY3QKIAogI2lmIFVTRShCSUdJTlQzMikKICAgICBpZiAocHJpbVZhbHVl
LmlzQmlnSW50MzIoKSkgewotICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFy
eU1pbnVzKHZtLCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpOworICAgICAgICBKU1ZhbHVl
IHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKGdsb2JhbE9iamVjdCwgcHJpbVZhbHVlLmJp
Z0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlUmVzdWx0KHJlc3VsdCk7CiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAjZW5kaWYKICAgICBpZiAo
cHJpbVZhbHVlLmlzSGVhcEJpZ0ludCgpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNC
aWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSk7CisgICAgICAg
IEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmlt
VmFsdWUuYXNIZWFwQmlnSW50KCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwogICAgICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVSZXN1bHQocmVzdWx0KTsKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KQEAgLTI5NTQsMTAg
KzI5NTgsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE5l
Z2F0ZU9wdGltaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwKICNpZiBVU0UoQklHSU5UMzIpCiAg
ICAgLy8gRklYTUU6IHdoeSBkb2VzIHRoaXMgZnVuY3Rpb24gcHJvZmlsZSB0aGUgYXJndW1lbnQg
YnV0IG5vdCB0aGUgcmVzdWx0PwogICAgIGlmIChwcmltVmFsdWUuaXNCaWdJbnQzMigpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmlt
VmFsdWUuYmlnSW50MzJBc0ludDMyKCkpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBw
cmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpKSk7CiAjZW5kaWYKICAgICBpZiAocHJpbVZhbHVl
LmlzSGVhcEJpZ0ludCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50
Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpKTsKKyAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWlu
dXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpKSk7CiAKICAgICBkb3Vi
bGUgbnVtYmVyID0gcHJpbVZhbHVlLnRvTnVtYmVyKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CmluZGV4IDUwZjE0ODBjYzk4MTI3MjQ2ZjI1OGViYmNmMzI5OWY2MTE2NDRjMWUuLjgzY2EyMzE3
MTlkOWViODJkNTVjZWQ1ZmEwMTI3YjY3NDRhOGIyOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBA
IC0yMjUyLDcgKzIyNTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
Q3JlYXRlSGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGJpZ0ludCk7CiAgICAgQVNTRVJUKGJpZ0ludC5pc0JpZ0ludDMy
KCkpOwogICAgIGludDMyX3QgdmFsdWUgPSBiaWdJbnQuYmlnSW50MzJBc0ludDMyKCk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgdmFsdWUpKTsK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6
Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIHZhbHVlKSkpOwogI2Vsc2UKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGJpZ0ludCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXJBcmVuYS5jcHAKaW5kZXggYWFjMDU2NjkwZTQxZWVkMGZiNjU5ZWFhNDQyYzk1
MmY2NTUzNzM4MC4uYzcxOTg4NjI0MWQzNTdiZjBlMzdhYTliYTcwODQ3ODQwZjEyM2Y0MyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5jcHAKQEAgLTk2LDkg
Kzk2LDEwIEBAIGNvbnN0IElkZW50aWZpZXImIElkZW50aWZpZXJBcmVuYTo6bWFrZUJpZ0ludERl
Y2ltYWxJZGVudGlmaWVyKFZNJiB2bSwgY29uc3QgSWRlCiAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzYyNwogICAgIEpTQmlnSW50KiBoZWFwQmlnSW50
OwogI2lmIFVTRShCSUdJTlQzMikKLSAgICBpZiAoYmlnSW50LmlzQmlnSW50MzIoKSkKLSAgICAg
ICAgaGVhcEJpZ0ludCA9IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCBiaWdJbnQuYmlnSW50MzJB
c0ludDMyKCkpOwotICAgIGVsc2UKKyAgICBpZiAoYmlnSW50LmlzQmlnSW50MzIoKSkgeworICAg
ICAgICBoZWFwQmlnSW50ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZUZyb20odm0sIGJpZ0ludC5iaWdJ
bnQzMkFzSW50MzIoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGhlYXBCaWdJbnQpOworICAg
IH0gZWxzZQogI2VuZGlmCiAgICAgICAgIGhlYXBCaWdJbnQgPSBiaWdJbnQuYXNIZWFwQmlnSW50
KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludENv
bnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludENvbnN0
cnVjdG9yLmNwcAppbmRleCA0ZmZiZmJiOTZkZDE3ZmFlMTk0N2I0NmJiYzgxZDk4NDJkYmMwZDA5
Li43ZTNkZTVlZWFkYjE2YzkxMjE2MTYyMWZkNGMyZWZiYTlhYmYzMDk3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50Q29uc3RydWN0b3IuY3BwCkBAIC04
Nyw3ICs4Nyw3IEBAIEpTVmFsdWUgdG9CaWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBhcmd1bWVudCkKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgICAgIHJldHVybiBq
c0JpZ0ludDMyKHByaW1pdGl2ZS5hc0Jvb2xlYW4oKSk7CiAjZWxzZQotICAgICAgICByZXR1cm4g
SlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIHByaW1pdGl2ZS5hc0Jvb2xlYW4oKSk7CisgICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2Jq
ZWN0LCBwcmltaXRpdmUuYXNCb29sZWFuKCkpKTsKICNlbmRpZgogICAgIH0KIApAQCAtMTE2LDcg
KzExNiw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxCaWdJbnRD
b25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsCiAjaWYgVVNFKEJJR0lOVDMyKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQmlnSW50MzIocHJpbWl0aXZlLmFzSW50MzIo
KSkpOwogI2Vsc2UKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6Y3Jl
YXRlRnJvbSh2bSwgcHJpbWl0aXZlLmFzSW50MzIoKSkpOworICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxP
YmplY3QsIHByaW1pdGl2ZS5hc0ludDMyKCkpKSk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTEyNCw3
ICsxMjQsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsQmlnSW50
Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbAogICAgICAgICBkb3VibGUgbnVtYmVy
ID0gcHJpbWl0aXZlLmFzRG91YmxlKCk7CiAgICAgICAgIGlmICghaXNJbnRlZ2VyKG51bWJlcikp
CiAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNy
ZWF0ZVJhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiTm90IGFuIGludGVnZXIiX3MpKTsKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6bWFrZUhlYXBCaWdJbnRPckJpZ0lu
dDMyKHZtLCBwcmltaXRpdmUuYXNEb3VibGUoKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6bWFrZUhlYXBCaWdJbnRPckJpZ0lu
dDMyKGdsb2JhbE9iamVjdCwgcHJpbWl0aXZlLmFzRG91YmxlKCkpKSk7CiAgICAgfQogCiAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUodG9CaWdJbnQoZ2xvYmFs
T2JqZWN0LCBwcmltaXRpdmUpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9CaWdJbnRQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQmlnSW50UHJvdG90eXBlLmNwcAppbmRleCA0YTRiNmUyZTk4MmUwMjgzMWQ5ZTE2YWNiOTFk
YWVkYjQ2MzczMzdjLi4xZDhmYzAwMjRhMTk3ODFlM2JiZjdkZDMyYjJiMTRmYzAwYjEwOWM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRQcm90b3R5cGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0JpZ0ludFByb3RvdHlwZS5j
cHAKQEAgLTc0LDEyICs3NCwxNSBAQCB2b2lkIEJpZ0ludFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCopCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyBB
TFdBWVNfSU5MSU5FIEpTQmlnSW50KiB0b1RoaXNCaWdJbnRWYWx1ZShWTSYgdm0sIEpTVmFsdWUg
dGhpc1ZhbHVlKQorc3RhdGljIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQqIHRvVGhpc0JpZ0ludFZh
bHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgLy8gRklYTUU6IGhl
YXAtYWxsb2NhdGluZyBhbGwgYmlnIGludHMgaXMgaW5uZWZpY2llbnQsIGJ1dCByZS1pbXBsZW1l
bnRpbmcgdG9TdHJpbmcgZm9yIHNtYWxsIEJpZ0ludHMgaXMgZW5vdWdoIHdvcmsgdGhhdCBJJ20g
ZGVmZXJyaW5nIGl0IHRvIGEgbGF0ZXIgcGF0Y2guCiAgICAgaWYgKHRoaXNWYWx1ZS5pc0JpZ0lu
dDMyKCkpCi0gICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgdGhpc1ZhbHVl
LmJpZ0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBK
U0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIHRoaXNWYWx1ZS5iaWdJbnQzMkFzSW50
MzIoKSkpOwogI2VuZGlmCiAKICAgICBpZiAodGhpc1ZhbHVlLmlzQ2VsbCgpKSB7CkBAIC05MCwx
MiArOTMsMTMgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQqIHRvVGhpc0JpZ0ludFZh
bHVlKFZNJiB2bSwgSlNWYWx1ZSB0aGlzVmFsdWUpCiAgICAgICAgICAgICBKU1ZhbHVlIGJpZ0lu
dCA9IGJpZ0ludE9iamVjdC0+aW50ZXJuYWxWYWx1ZSgpOwogI2lmIFVTRShCSUdJTlQzMikKICAg
ICAgICAgICAgIGlmIChiaWdJbnQuaXNCaWdJbnQzMigpKQotICAgICAgICAgICAgICAgIHJldHVy
biBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgYmlnSW50LmJpZ0ludDMyQXNJbnQzMigpKTsKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTQmlnSW50OjpjcmVhdGVG
cm9tKGdsb2JhbE9iamVjdCwgYmlnSW50LmJpZ0ludDMyQXNJbnQzMigpKSk7CiAjZW5kaWYKICAg
ICAgICAgICAgIHJldHVybiBiaWdJbnQuYXNIZWFwQmlnSW50KCk7CiAgICAgICAgIH0KICAgICB9
CiAKKyAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiJ3RoaXMnIHZhbHVl
IG11c3QgYmUgYSBCaWdJbnQgb3IgQmlnSW50T2JqZWN0Il9zKTsKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIApAQCAtMTA0LDkgKzEwOCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YmlnSW50UHJvdG9GdW5jVG9TdHJpbmcoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAotICAgIEpTQmlnSW50KiB2YWx1ZSA9IHRvVGhpc0JpZ0ludFZhbHVl
KHZtLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiJ3RoaXMnIHZhbHVl
IG11c3QgYmUgYSBCaWdJbnQgb3IgQmlnSW50T2JqZWN0Il9zKTsKKyAgICBKU0JpZ0ludCogdmFs
dWUgPSB0b1RoaXNCaWdJbnRWYWx1ZShnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+dGhpc1ZhbHVl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBBU1NFUlQo
dmFsdWUpOwogCkBAIC0xMjksOSArMTMyLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBiaWdJbnRQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhKU0dsb2JhbE9iamVjdCogZ2xvYmEKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNCaWdJbnQqIHZhbHVlID0gdG9UaGlzQmlnSW50VmFs
dWUodm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICIndGhpcycgdmFs
dWUgbXVzdCBiZSBhIEJpZ0ludCBvciBCaWdJbnRPYmplY3QiX3MpOworICAgIEpTQmlnSW50KiB2
YWx1ZSA9IHRvVGhpc0JpZ0ludFZhbHVlKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT50aGlzVmFs
dWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIGF1dG8q
IG51bWJlckZvcm1hdCA9IEludGxOdW1iZXJGb3JtYXQ6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LT5udW1iZXJGb3JtYXRTdHJ1Y3R1cmUoKSk7CiAgICAgbnVtYmVyRm9ybWF0LT5pbml0aWFsaXpl
TnVtYmVyRm9ybWF0KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgY2FsbEZy
YW1lLT5hcmd1bWVudCgxKSk7CkBAIC0xNDQsOSArMTQ2LDggQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBiaWdJbnRQcm90b0Z1bmNWYWx1ZU9mKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNCaWdJbnQqIHZhbHVlID0gdG9UaGlz
QmlnSW50VmFsdWUodm0sIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghdmFsdWUp
Ci0gICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICIn
dGhpcycgdmFsdWUgbXVzdCBiZSBhIEJpZ0ludCBvciBCaWdJbnRPYmplY3QiX3MpOworICAgIEpT
QmlnSW50KiB2YWx1ZSA9IHRvVGhpc0JpZ0ludFZhbHVlKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1l
LT50aGlzVmFsdWUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAog
ICAgIEludGVncml0eTo6YXVkaXRTdHJ1Y3R1cmVJRCh2bSwgdmFsdWUtPnN0cnVjdHVyZUlEKCkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCmluZGV4IDYwMWQwMTlkZjkzZjhmMmY4Y2M2
YzFmNTkxYTk0MTU0OGRjMDdmY2IuLmY5ZjYyNGI0NmU5NzUwYmY0OTc4MTFmMzkxYWU0YTc2MjQ0
N2Q1MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5
cGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5j
cHAKQEAgLTEyNzksNyArMTI3OSw4IEBAIGNsYXNzIENhY2hlZEJpZ0ludCA6IHB1YmxpYyBWYXJp
YWJsZUxlbmd0aE9iamVjdDxKU0JpZ0ludD4gewogCiAgICAgSlNCaWdJbnQqIGRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgSlNCaWdJbnQqIGJpZ0ludCA9IEpT
QmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKGRlY29kZXIudm0oKSwgbV9sZW5ndGgp
OworICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5n
dGgoZGVjb2Rlci52bSgpLCBtX2xlbmd0aCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJpZ0lu
dCk7CiAgICAgICAgIGJpZ0ludC0+c2V0U2lnbihtX3NpZ24pOwogICAgICAgICBpZiAobV9sZW5n
dGgpCiAgICAgICAgICAgICBtZW1jcHkoYmlnSW50LT5kYXRhU3RvcmFnZSgpLCB0aGlzLT5idWZm
ZXIoKSwgc2l6ZW9mKEpTQmlnSW50OjpEaWdpdCkgKiBtX2xlbmd0aCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAppbmRleCBhMzljMTM3
NTc1NmZjZDU5ZjI2NDViMDA4MTRhNjBhODY4ZmIxOWFjLi4zMDM0NGMxMjBlMmRiMzczYzNlMDRk
NGI2Zjg2OGI3NTY4MDIwOGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKQEAgLTUzMCw3ICs1MzAsOCBAQCBTTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfbmVnYXRlKQogCiAjaWYgVVNFKEJJR0lOVDMyKQogICAgIGlmIChwcmltVmFs
dWUuaXNCaWdJbnQzMigpKSB7Ci0gICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVu
YXJ5TWludXModm0sIHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSk7CisgICAgICAgIEpTVmFs
dWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFsdWUu
YmlnSW50MzJBc0ludDMyKCkpOworICAgICAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICAgICAg
UkVUVVJOX1dJVEhfUFJPRklMSU5HKHJlc3VsdCwgewogICAgICAgICAgICAgdXBkYXRlQXJpdGhQ
cm9maWxlRm9yVW5hcnlBcml0aE9wKG1ldGFkYXRhLCByZXN1bHQsIG9wZXJhbmQpOwogICAgICAg
ICB9KTsKQEAgLTUzOCw3ICs1MzksOCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmVnYXRl
KQogI2VuZGlmCiAKICAgICBpZiAocHJpbVZhbHVlLmlzSGVhcEJpZ0ludCgpKSB7Ci0gICAgICAg
IEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5hc0hl
YXBCaWdJbnQoKSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWlu
dXMoZ2xvYmFsT2JqZWN0LCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpOworICAgICAgICBDSEVD
S19FWENFUFRJT04oKTsKICAgICAgICAgUkVUVVJOX1dJVEhfUFJPRklMSU5HKHJlc3VsdCwgewog
ICAgICAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKG1ldGFkYXRhLCBy
ZXN1bHQsIG9wZXJhbmQpOwogICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHAKaW5kZXgg
YWFiYWU3YmU5YmYxM2MzNTY2MWIyMjk0NWIxYjNiZDQ5MmVkNGU2ZC4uNmRhYTg2YTkwYTE4YzM0
YWI5MDQzMDUxOWVkMmFiMmM4MTY0MWJjMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHAKQEAgLTk2
LDggKzk2LDkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51bWJl
ckZvcm1hdEZ1bmNGb3JtYXQoSlNHbG9iYWxPYmplY3QqIGcKIAogI2lmIFVTRShCSUdJTlQzMikK
ICAgICBpZiAoYmlnSW50T3JOdW1iZXIuaXNCaWdJbnQzMigpKSB7Ci0gICAgICAgIEpTQmlnSW50
KiB2YWx1ZSA9IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCBiaWdJbnRPck51bWJlci5iaWdJbnQz
MkFzSW50MzIoKSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobnVtYmVyRm9ybWF0
LT5mb3JtYXQoZ2xvYmFsT2JqZWN0LCB2YWx1ZSkpOworICAgICAgICBKU0JpZ0ludCogdmFsdWUg
PSBKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIGJpZ0ludE9yTnVtYmVyLmJpZ0lu
dDMyQXNJbnQzMigpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUobnVtYmVy
Rm9ybWF0LT5mb3JtYXQoZ2xvYmFsT2JqZWN0LCB2YWx1ZSkpKTsKICAgICB9CiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCmluZGV4IDkwNDMyOWE3
MjEwY2ZlZWU3YjVlYWI3NmMxNGVjMDA3ZGNhZjEyYjkuLmY3NzJhZmYxYTgyYjdhYWE4MGE0NzRh
NDhlZjQzM2I5YjY2ZjJhYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQmlnSW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jp
Z0ludC5jcHAKQEAgLTgyLDQyICs4Miw2MSBAQCBTdHJ1Y3R1cmUqIEpTQmlnSW50OjpjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbAogICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKEhlYXBCaWdJbnRUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLUpT
QmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlWmVybyhWTSYgdm0pCitpbmxpbmUgSlNCaWdJbnQqIEpT
QmlnSW50OjpjcmVhdGVaZXJvKEpTR2xvYmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmplY3RGb3JP
T00sIFZNJiB2bSkKIHsKLSAgICBKU0JpZ0ludCogemVyb0JpZ0ludCA9IGNyZWF0ZVdpdGhMZW5n
dGhVbmNoZWNrZWQodm0sIDApOwotICAgIHJldHVybiB6ZXJvQmlnSW50OworICAgIHJldHVybiBj
cmVhdGVXaXRoTGVuZ3RoKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgdm0sIDApOwogfQogCi1K
U0JpZ0ludCogSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgdW5zaWduZWQgbGVuZ3RoKQorSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVa
ZXJvKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICByZXR1cm4gY3JlYXRlWmVybyhnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+dm0oKSk7
Cit9CisKK0pTQmlnSW50KiBKU0JpZ0ludDo6dHJ5Q3JlYXRlWmVybyhWTSYgdm0pCit7CisgICAg
cmV0dXJuIGNyZWF0ZVplcm8obnVsbHB0ciwgdm0pOworfQogCitpbmxpbmUgSlNCaWdJbnQqIEpT
QmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmpl
Y3RGb3JPT00sIFZNJiB2bSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoVU5MSUtFTFkobGVuZ3RoID4gbWF4TGVu
Z3RoKSkgewotICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgIkJpZ0ludCBnZW5lcmF0ZWQgZnJvbSB0aGlzIG9wZXJhdGlvbiBpcyB0b28gYmlnIl9zKTsK
KyAgICAgICAgaWYgKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSkKKyAgICAgICAgICAgIHRocm93
T3V0T2ZNZW1vcnlFcnJvcihudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHNjb3BlLCAiQmlnSW50
IGdlbmVyYXRlZCBmcm9tIHRoaXMgb3BlcmF0aW9uIGlzIHRvbyBiaWciX3MpOwogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBzY29wZS5yZWxlYXNlKCk7Ci0KLSAgICByZXR1
cm4gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgbGVuZ3RoKTsKLX0KLQotSlNCaWdJbnQq
IEpTQmlnSW50OjpjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKFZNJiB2bSwgdW5zaWduZWQgbGVu
Z3RoKQotewogICAgIEFTU0VSVChsZW5ndGggPD0gbWF4TGVuZ3RoKTsKLSAgICB2b2lkKiBkYXRh
ID0gR2lnYWNhZ2U6Om1hbGxvYyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBsZW5ndGggKiBzaXplb2Yo
RGlnaXQpKTsKKyAgICB2b2lkKiBkYXRhID0gR2lnYWNhZ2U6OnRyeU1hbGxvYyhHaWdhY2FnZTo6
UHJpbWl0aXZlLCBsZW5ndGggKiBzaXplb2YoRGlnaXQpKTsKKyAgICBpZiAoVU5MSUtFTFkoIWRh
dGEpKSB7CisgICAgICAgIGlmIChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00pCisgICAgICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBzY29wZSk7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KICAgICBKU0JpZ0ludCogYmlnSW50ID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNCaWdJbnQ+KHZtLmhlYXApKSBKU0JpZ0ludCh2
bSwgdm0uYmlnSW50U3RydWN0dXJlLmdldCgpLCByZWludGVycHJldF9jYXN0PERpZ2l0Kj4oZGF0
YSksIGxlbmd0aCk7CiAgICAgYmlnSW50LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJu
IGJpZ0ludDsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKFZNJiB2bSwgaW50
MzJfdCB2YWx1ZSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aChWTSYg
dm0sIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gY3JlYXRlV2l0aExlbmd0aChudWxs
cHRyLCB2bSwgbGVuZ3RoKTsKK30KKworSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVXaXRoTGVu
Z3RoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAg
ICByZXR1cm4gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+dm0o
KSwgbGVuZ3RoKTsKK30KKworaW5saW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShK
U0dsb2JhbE9iamVjdCogbnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBWTSYgdm0sIGludDMyX3Qg
dmFsdWUpCiB7CiAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8odm0p
OwotICAgIAotICAgIEpTQmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2Vk
KHZtLCAxKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8obnVsbE9yR2xvYmFsT2JqZWN0Rm9y
T09NLCB2bSk7CisKKyAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aChudWxs
T3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCAxKTsKKyAgICBpZiAoVU5MSUtFTFkoIWJpZ0ludCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCiAgICAgaWYgKHZhbHVlIDwgMCkgewogICAgICAg
ICBiaWdJbnQtPnNldERpZ2l0KDAsIHN0YXRpY19jYXN0PERpZ2l0PigtMSAqIHN0YXRpY19jYXN0
PGludDY0X3Q+KHZhbHVlKSkpOwogICAgICAgICBiaWdJbnQtPnNldFNpZ24odHJ1ZSk7CkBAIC0x
MjcsMzIgKzE0Niw1MSBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oVk0mIHZtLCBp
bnQzMl90IHZhbHVlKQogICAgIHJldHVybiBiaWdJbnQ7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0lu
dDo6Y3JlYXRlRnJvbShWTSYgdm0sIHVpbnQzMl90IHZhbHVlKQorSlNCaWdJbnQqIEpTQmlnSW50
OjpjcmVhdGVGcm9tKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgdmFsdWUp
Cit7CisgICAgcmV0dXJuIGNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPnZt
KCksIHZhbHVlKTsKK30KKworSlNCaWdJbnQqIEpTQmlnSW50Ojp0cnlDcmVhdGVGcm9tKFZNJiB2
bSwgaW50MzJfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlRnJvbShudWxscHRyLCB2bSwg
dmFsdWUpOworfQorCitKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgdWludDMyX3QgdmFsdWUpCiB7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KwogICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBjcmVhdGVaZXJvKHZtKTsKKyAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjcmVhdGVaZXJvKGdsb2JhbE9iamVjdCkpOwog
ICAgIAotICAgIEpTQmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZt
LCAxKTsKKyAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmpl
Y3QsIDEpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIGJp
Z0ludC0+c2V0RGlnaXQoMCwgc3RhdGljX2Nhc3Q8RGlnaXQ+KHZhbHVlKSk7CiAgICAgcmV0dXJu
IGJpZ0ludDsKIH0KIAotaW5saW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbUltcGwo
Vk0mIHZtLCB1aW50NjRfdCB2YWx1ZSwgYm9vbCBzaWduKQoraW5saW5lIEpTQmlnSW50KiBKU0Jp
Z0ludDo6Y3JlYXRlRnJvbUltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0
X3QgdmFsdWUsIGJvb2wgc2lnbikKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKCF2
YWx1ZSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8odm0pOworICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIGNyZWF0ZVplcm8oZ2xvYmFsT2JqZWN0KSk7CiAKICAgICAvLyBUaGlz
IHBhdGggaXMgbm90IGp1c3QgYW4gb3B0aW1pemF0aW9uOiBiZWNhdXNlIHdlIGRvIG5vdCBjYWxs
IHJpZ2h0VHJpbSBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24sCiAgICAgLy8gaXQgd291bGQg
YmUgYSBidWcgdG8gY3JlYXRlIGEgQmlnSW50IHdpdGggbGVuZ3RoPTIgaW4gdGhpcyBjYXNlLgog
ICAgIGlmIChzaXplb2YoRGlnaXQpID09IDggfHwgdmFsdWUgPD0gVUlOVDMyX01BWCkgewotICAg
ICAgICBKU0JpZ0ludCogYmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgMSk7
CisgICAgICAgIEpTQmlnSW50KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVj
dCwgMSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAg
ICAgICBiaWdJbnQtPnNldERpZ2l0KDAsIHN0YXRpY19jYXN0PERpZ2l0Pih2YWx1ZSkpOwogICAg
ICAgICBiaWdJbnQtPnNldFNpZ24oc2lnbik7CiAgICAgICAgIHJldHVybiBiaWdJbnQ7CiAgICAg
fQogCiAgICAgQVNTRVJUKHNpemVvZihEaWdpdCkgPT0gNCk7Ci0gICAgSlNCaWdJbnQqIGJpZ0lu
dCA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIDIpOworICAgIEpTQmlnSW50KiBiaWdJ
bnQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgMik7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgRGlnaXQgbG93Qml0cyAgPSBzdGF0aWNfY2Fz
dDxEaWdpdD4odmFsdWUgJiAweGZmZmZmZmZmKTsKICAgICBEaWdpdCBoaWdoQml0cyA9IHN0YXRp
Y19jYXN0PERpZ2l0PigodmFsdWUgPj4gMzIpICYgMHhmZmZmZmZmZik7CiAKQEAgLTE2NSwxMiAr
MjAzLDEyIEBAIGlubGluZSBKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb21JbXBsKFZNJiB2
bSwgdWludDY0X3QgdmFsdWUsIGJvb2wgc2lnbikKICAgICByZXR1cm4gYmlnSW50OwogfQogCi1K
U0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oVk0mIHZtLCB1aW50NjRfdCB2YWx1ZSkKK0pT
QmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCB1aW50NjRfdCB2YWx1ZSkKIHsKLSAgICByZXR1cm4gY3JlYXRlRnJvbUltcGwodm0sIHZhbHVl
LCBmYWxzZSk7CisgICAgcmV0dXJuIGNyZWF0ZUZyb21JbXBsKGdsb2JhbE9iamVjdCwgdmFsdWUs
IGZhbHNlKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpjcmVhdGVGcm9tKFZNJiB2bSwgaW50
NjRfdCB2YWx1ZSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBpbnQ2NF90IHZhbHVlKQogewogICAgIHVpbnQ2NF90IHVuc2lnbmVk
VmFsdWU7CiAgICAgYm9vbCBzaWduID0gZmFsc2U7CkBAIC0xNzksMjQgKzIxNywzMSBAQCBKU0Jp
Z0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oVk0mIHZtLCBpbnQ2NF90IHZhbHVlKQogICAgICAg
ICBzaWduID0gdHJ1ZTsKICAgICB9IGVsc2UKICAgICAgICAgdW5zaWduZWRWYWx1ZSA9IHZhbHVl
OwotICAgIHJldHVybiBjcmVhdGVGcm9tSW1wbCh2bSwgdW5zaWduZWRWYWx1ZSwgc2lnbik7Cisg
ICAgcmV0dXJuIGNyZWF0ZUZyb21JbXBsKGdsb2JhbE9iamVjdCwgdW5zaWduZWRWYWx1ZSwgc2ln
bik7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShWTSYgdm0sIGJvb2wgdmFs
dWUpCitKU0JpZ0ludCogSlNCaWdJbnQ6OmNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgYm9vbCB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKCF2
YWx1ZSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8odm0pOwotICAgIAotICAgIEpTQmlnSW50
KiBiaWdJbnQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCAxKTsKKyAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjcmVhdGVaZXJvKGdsb2JhbE9iamVjdCkpOworCisgICAg
SlNCaWdJbnQqIGJpZ0ludCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCAxKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICBiaWdJbnQtPnNldERp
Z2l0KDAsIHN0YXRpY19jYXN0PERpZ2l0Pih2YWx1ZSkpOwogICAgIHJldHVybiBiaWdJbnQ7CiB9
CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShWTSYgdm0sIGRvdWJsZSB2YWx1ZSkK
K0pTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBkb3VibGUgdmFsdWUpCiB7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEFTU0VSVChp
c0ludGVnZXIodmFsdWUpKTsKICAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gY3JlYXRl
WmVybyh2bSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY3JlYXRlWmVybyhn
bG9iYWxPYmplY3QpKTsKIAogICAgIGJvb2wgc2lnbiA9IHZhbHVlIDwgMDsgLy8gLTAgd2FzIGFs
cmVhZHkgaGFuZGxlZCBhYm92ZS4KICAgICB1aW50NjRfdCBkb3VibGVCaXRzID0gYml0d2lzZV9j
YXN0PHVpbnQ2NF90Pih2YWx1ZSk7CkBAIC0yMDUsNyArMjUwLDggQEAgSlNCaWdJbnQqIEpTQmln
SW50OjpjcmVhdGVGcm9tKFZNJiB2bSwgZG91YmxlIHZhbHVlKQogICAgIEFTU0VSVChyYXdFeHBv
bmVudCA+PSAweDNmZik7IC8vIFNpbmNlIHZhbHVlIGlzIGludGVnZXIsIGV4cG9uZW50IHNob3Vs
ZCBiZSA+PSAwICsgYmlhcyAoMHgzZmYpLgogICAgIGludDMyX3QgZXhwb25lbnQgPSByYXdFeHBv
bmVudCAtIDB4M2ZmOwogICAgIGludDMyX3QgZGlnaXRzID0gZXhwb25lbnQgLyBkaWdpdEJpdHMg
KyAxOwotICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZt
LCBkaWdpdHMpOworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2Jh
bE9iamVjdCwgZGlnaXRzKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRy
KTsKICAgICBBU1NFUlQocmVzdWx0KTsKICAgICByZXN1bHQtPmluaXRpYWxpemUoSW5pdGlhbGl6
YXRpb25UeXBlOjpXaXRoWmVybyk7CiAgICAgcmVzdWx0LT5zZXRTaWduKHNpZ24pOwpAQCAtMjU5
LDcgKzMwNSw3IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShWTSYgdm0sIGRvdWJs
ZSB2YWx1ZSkKICAgICAgICAgICAgIGRpZ2l0ID0gMDsKICAgICAgICAgcmVzdWx0LT5zZXREaWdp
dChkaWdpdEluZGV4LCBkaWdpdCk7CiAgICAgfQotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJp
bSh2bSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShn
bG9iYWxPYmplY3QpKTsKIH0KIAogSlNWYWx1ZSBKU0JpZ0ludDo6dG9QcmltaXRpdmUoSlNHbG9i
YWxPYmplY3QqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdApAQCAtMjc0LDExICszMjAs
MTEgQEAgSlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU3RyaW5nVmlldyBzLCBFcnJvclBhcnMKICAgICByZXR1cm4gcGFyc2VJbnQoZ2xvYmFs
T2JqZWN0LCBzLmNoYXJhY3RlcnMxNigpLCBzLmxlbmd0aCgpLCBwYXJzZXJNb2RlKTsKIH0KIAot
SlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Vk0mIHZtLCBTdHJpbmdWaWV3IHMsIHVpbnQ4X3QgcmFkaXgsIEVycm9yUGFyc2VNb2RlIHBhcnNl
ck1vZGUsIFBhcnNlSW50U2lnbiBzaWduKQorSlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJbnQoSlNH
bG9iYWxPYmplY3QqIG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgVk0mIHZtLCBTdHJpbmdWaWV3
IHMsIHVpbnQ4X3QgcmFkaXgsIEVycm9yUGFyc2VNb2RlIHBhcnNlck1vZGUsIFBhcnNlSW50U2ln
biBzaWduKQogewogICAgIGlmIChzLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gcGFyc2VJbnQo
Z2xvYmFsT2JqZWN0LCB2bSwgcy5jaGFyYWN0ZXJzOCgpLCBzLmxlbmd0aCgpLCAwLCByYWRpeCwg
cGFyc2VyTW9kZSwgc2lnbiwgUGFyc2VJbnRNb2RlOjpEaXNhbGxvd0VtcHR5U3RyaW5nKTsKLSAg
ICByZXR1cm4gcGFyc2VJbnQoZ2xvYmFsT2JqZWN0LCB2bSwgcy5jaGFyYWN0ZXJzMTYoKSwgcy5s
ZW5ndGgoKSwgMCwgcmFkaXgsIHBhcnNlck1vZGUsIHNpZ24sIFBhcnNlSW50TW9kZTo6RGlzYWxs
b3dFbXB0eVN0cmluZyk7CisgICAgICAgIHJldHVybiBwYXJzZUludChudWxsT3JHbG9iYWxPYmpl
Y3RGb3JPT00sIHZtLCBzLmNoYXJhY3RlcnM4KCksIHMubGVuZ3RoKCksIDAsIHJhZGl4LCBwYXJz
ZXJNb2RlLCBzaWduLCBQYXJzZUludE1vZGU6OkRpc2FsbG93RW1wdHlTdHJpbmcpOworICAgIHJl
dHVybiBwYXJzZUludChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCBzLmNoYXJhY3RlcnMx
NigpLCBzLmxlbmd0aCgpLCAwLCByYWRpeCwgcGFyc2VyTW9kZSwgc2lnbiwgUGFyc2VJbnRNb2Rl
OjpEaXNhbGxvd0VtcHR5U3RyaW5nKTsKIH0KIAogSlNWYWx1ZSBKU0JpZ0ludDo6c3RyaW5nVG9C
aWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RyaW5nVmlldyBzKQpAQCAtMzE4
LDcgKzM2NCw4IEBAIGNsYXNzIEhlYXBCaWdJbnRJbXBsIHsKICAgICBBTFdBWVNfSU5MSU5FIGJv
b2wgc2lnbigpIHsgcmV0dXJuIG1fYmlnSW50LT5zaWduKCk7IH0KICAgICBBTFdBWVNfSU5MSU5F
IHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fYmlnSW50LT5sZW5ndGgoKTsgfQogICAgIEFM
V0FZU19JTkxJTkUgSlNCaWdJbnQ6OkRpZ2l0IGRpZ2l0KHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1f
YmlnSW50LT5kaWdpdChpKTsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQqIHRvSGVhcEJp
Z0ludChWTSYpIHsgcmV0dXJuIG1fYmlnSW50OyB9CisgICAgQUxXQVlTX0lOTElORSBKU0JpZ0lu
dCogdG9IZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiwgVk0mKSB7IHJldHVybiBtX2JpZ0ludDsg
fQorICAgIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQqIHRvSGVhcEJpZ0ludChKU0dsb2JhbE9iamVj
dCopIHsgcmV0dXJuIG1fYmlnSW50OyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIHN0cnVjdCBK
U0JpZ0ludDo6SW1wbFJlc3VsdDsKQEAgLTM0Myw3ICszOTAsMTUgQEAgY2xhc3MgSW50MzJCaWdJ
bnRJbXBsIHsKICAgICAgICAgcmV0dXJuIG1fdmFsdWU7CiAgICAgfQogCi0gICAgQUxXQVlTX0lO
TElORSBKU0JpZ0ludCogdG9IZWFwQmlnSW50KFZNJiB2bSkgeyByZXR1cm4gSlNCaWdJbnQ6OmNy
ZWF0ZUZyb20odm0sIG1fdmFsdWUpOyB9CisgICAgQUxXQVlTX0lOTElORSBKU0JpZ0ludCogdG9I
ZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIFZNJiB2
bSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShudWxsT3JHbG9i
YWxPYmplY3RGb3JPT00sIHZtLCBtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5F
IEpTQmlnSW50KiB0b0hlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIG1f
dmFsdWUpOworICAgIH0KIAogcHJpdmF0ZToKICAgICBmcmllbmQgc3RydWN0IEpTQmlnSW50OjpJ
bXBsUmVzdWx0OwpAQCAtNDAyLDEzICs0NTcsMTMgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSB0cnlDb252ZXJ0VG9CaWdJbnQzMihKU0JpZ0ludDo6SW1wbFJlc3VsdCBpbXBsUmVzdWwK
ICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoaW1wbFJlc3VsdC5wYXlsb2FkLmFzSGVh
cEJpZ0ludCgpKTsKIH0KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQ6OkltcGxSZXN1
bHQgemVyb0ltcGwoVk0mIHZtKQorc3RhdGljIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQ6OkltcGxS
ZXN1bHQgemVyb0ltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICNpZiBVU0Uo
QklHSU5UMzIpCi0gICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBVTlVTRURfUEFSQU0oZ2xvYmFs
T2JqZWN0KTsKICAgICByZXR1cm4ganNCaWdJbnQzMigwKTsKICNlbHNlCi0gICAgcmV0dXJuIEpT
QmlnSW50OjpjcmVhdGVaZXJvKHZtKTsKKyAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZVplcm8o
Z2xvYmFsT2JqZWN0KTsKICNlbmRpZgogfQogCkBAIC00MzEsNyArNDg2LDcgQEAgSlNCaWdJbnQ6
OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmV4cG9uZW50aWF0ZUltcGwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQmkKIAogICAgIC8vIDIuIElmIGJhc2UgaXMgMG4gYW5kIGV4cG9uZW50IGlz
IDBuLCByZXR1cm4gMW4uCiAgICAgaWYgKGV4cG9uZW50LmlzWmVybygpKQotICAgICAgICByZXR1
cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIDEpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTQmlnSW50OjpjcmVhdGVGcm9tKGdsb2JhbE9iamVjdCwgMSkpOwogICAgIAog
ICAgIC8vIDMuIFJldHVybiBhIEJpZ0ludCByZXByZXNlbnRpbmcgdGhlIG1hdGhlbWF0aWNhbCB2
YWx1ZSBvZiBiYXNlIHJhaXNlZAogICAgIC8vICAgIHRvIHRoZSBwb3dlciBleHBvbmVudC4KQEAg
LTQ0MSw3ICs0OTYsNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6ZXhwb25lbnRp
YXRlSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaQogICAgIGlmIChiYXNlLmxl
bmd0aCgpID09IDEgJiYgYmFzZS5kaWdpdCgwKSA9PSAxKSB7CiAgICAgICAgIC8vICgtMSkgKiog
ZXZlbl9udW1iZXIgPT0gMS4KICAgICAgICAgaWYgKGJhc2Uuc2lnbigpICYmICEoZXhwb25lbnQu
ZGlnaXQoMCkgJiAxKSkKLSAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6dW5hcnlNaW51c0lt
cGwodm0sIGJhc2UpOworICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0Jp
Z0ludDo6dW5hcnlNaW51c0ltcGwoZ2xvYmFsT2JqZWN0LCBiYXNlKSk7CiAKICAgICAgICAgLy8g
KC0xKSAqKiBvZGRfbnVtYmVyID09IC0xOyAxICoqIGFueXRoaW5nID09IDEuCiAgICAgICAgIHJl
dHVybiBiYXNlOwpAQCAtNDY4LDcgKzUyMyw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmln
SW50OjpleHBvbmVudGlhdGVJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpCiAg
ICAgaWYgKGJhc2UubGVuZ3RoKCkgPT0gMSAmJiBiYXNlLmRpZ2l0KDApID09IDIpIHsKICAgICAg
ICAgLy8gRmFzdCBwYXRoIGZvciAyXm4uCiAgICAgICAgIGludCBuZWVkZWREaWdpdHMgPSAxICsg
KG4gLyBkaWdpdEJpdHMpOwotICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnRy
eUNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCBuZWVkZWREaWdpdHMpOworICAgICAgICBK
U0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0
LCBuZWVkZWREaWdpdHMpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxs
cHRyKTsKIAogICAgICAgICByZXN1bHQtPmluaXRpYWxpemUoSW5pdGlhbGl6YXRpb25UeXBlOjpX
aXRoWmVybyk7CkBAIC00ODMsMTEgKzUzOCwxNCBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0Jp
Z0ludDo6ZXhwb25lbnRpYXRlSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaQog
ICAgIH0KIAogICAgIEpTQmlnSW50KiByZXN1bHQgPSBudWxscHRyOwotICAgIEpTQmlnSW50KiBy
dW5uaW5nU3F1YXJlID0gYmFzZS50b0hlYXBCaWdJbnQodm0pOworICAgIEpTQmlnSW50KiBydW5u
aW5nU3F1YXJlID0gYmFzZS50b0hlYXBCaWdJbnQoZ2xvYmFsT2JqZWN0KTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAogICAgIC8vIFRoaXMgaW1wbGljaXRseSBz
ZXRzIHRoZSByZXN1bHQncyBzaWduIGNvcnJlY3RseS4KLSAgICBpZiAobiAmIDEpCi0gICAgICAg
IHJlc3VsdCA9IGJhc2UudG9IZWFwQmlnSW50KHZtKTsKKyAgICBpZiAobiAmIDEpIHsKKyAgICAg
ICAgcmVzdWx0ID0gYmFzZS50b0hlYXBCaWdJbnQoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgfQogCiAgICAgbiA+Pj0gMTsK
ICAgICBmb3IgKDsgbjsgbiA+Pj0gMSkgewpAQCAtNTQ4LDcgKzYwNiw3IEBAIEpTQmlnSW50OjpJ
bXBsUmVzdWx0IEpTQmlnSW50OjptdWx0aXBseUltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQmlnSW50CiAgICAgICAgIHJldHVybiB5OwogCiAgICAgdW5zaWduZWQgcmVzdWx0TGVu
Z3RoID0geC5sZW5ndGgoKSArIHkubGVuZ3RoKCk7Ci0gICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpT
QmlnSW50Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsK
KyAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFs
T2JqZWN0LCByZXN1bHRMZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51
bGxwdHIpOwogICAgIHJlc3VsdC0+aW5pdGlhbGl6ZShJbml0aWFsaXphdGlvblR5cGU6OldpdGha
ZXJvKTsKIApAQCAtNTU2LDcgKzYxNCw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50
OjptdWx0aXBseUltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50CiAgICAg
ICAgIG11bHRpcGx5QWNjdW11bGF0ZSh5LCB4LmRpZ2l0KGkpLCByZXN1bHQsIGkpOwogCiAgICAg
cmVzdWx0LT5zZXRTaWduKHguc2lnbigpICE9IHkuc2lnbigpKTsKLSAgICByZXR1cm4gcmVzdWx0
LT5yaWdodFRyaW0odm0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0LT5y
aWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIEpTVmFsdWUgSlNCaWdJbnQ6Om11bHRpcGx5
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkK
QEAgLTU5MCwyNCArNjQ4LDMwIEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpkaXZp
ZGVJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltCiAgICAgLy8gMy4g
UmV0dXJuIGEgQmlnSW50IHJlcHJlc2VudGluZyBxdW90aWVudCByb3VuZGVkIHRvd2FyZHMgMCB0
byB0aGUgbmV4dAogICAgIC8vICAgIGludGVncmFsIHZhbHVlLgogICAgIGlmIChhYnNvbHV0ZUNv
bXBhcmUoeCwgeSkgPT0gQ29tcGFyaXNvblJlc3VsdDo6TGVzc1RoYW4pCi0gICAgICAgIHJldHVy
biB6ZXJvSW1wbCh2bSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgemVyb0lt
cGwoZ2xvYmFsT2JqZWN0KSk7CiAKICAgICBKU0JpZ0ludCogcXVvdGllbnQgPSBudWxscHRyOwog
ICAgIGJvb2wgcmVzdWx0U2lnbiA9IHguc2lnbigpICE9IHkuc2lnbigpOwogICAgIGlmICh5Lmxl
bmd0aCgpID09IDEpIHsKICAgICAgICAgRGlnaXQgZGl2aXNvciA9IHkuZGlnaXQoMCk7Ci0gICAg
ICAgIGlmIChkaXZpc29yID09IDEpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0U2lnbiA9PSB4
LnNpZ24oKSA/IEpTQmlnSW50OjpJbXBsUmVzdWx0IHsgeCB9IDogSlNCaWdJbnQ6OnVuYXJ5TWlu
dXNJbXBsKHZtLCB4KTsKKyAgICAgICAgaWYgKGRpdmlzb3IgPT0gMSkgeworICAgICAgICAgICAg
aWYgKHJlc3VsdFNpZ24gPT0geC5zaWduKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTQmln
SW50OjpJbXBsUmVzdWx0IHsgeCB9OworICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwoZ2xvYmFsT2JqZWN0LCB4KSk7CisgICAgICAg
IH0KIAogICAgICAgICBEaWdpdCByZW1haW5kZXI7Ci0gICAgICAgIGFic29sdXRlRGl2V2l0aERp
Z2l0RGl2aXNvcih2bSwgeCwgZGl2aXNvciwgJnF1b3RpZW50LCByZW1haW5kZXIpOworICAgICAg
ICBhYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3IoZ2xvYmFsT2JqZWN0LCB2bSwgeCwgZGl2aXNv
ciwgJnF1b3RpZW50LCByZW1haW5kZXIpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKICAgICB9IGVsc2UgewotICAgICAgICBhYnNvbHV0ZURpdldpdGhCaWdJ
bnREaXZpc29yKGdsb2JhbE9iamVjdCwgeCwgeS50b0hlYXBCaWdJbnQodm0pLCAmcXVvdGllbnQs
IG51bGxwdHIpOworICAgICAgICBKU0JpZ0ludCogeUJpZ0ludCA9IHkudG9IZWFwQmlnSW50KGds
b2JhbE9iamVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIp
OworICAgICAgICBhYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKGdsb2JhbE9iamVjdCwgeCwg
eUJpZ0ludCwgJnF1b3RpZW50LCBudWxscHRyKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgbnVsbHB0cik7CiAgICAgfQogCiAgICAgcXVvdGllbnQtPnNldFNpZ24ocmVzdWx0
U2lnbik7Ci0gICAgcmV0dXJuIHF1b3RpZW50LT5yaWdodFRyaW0odm0pOworICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgcXVvdGllbnQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0K
IAogSlNWYWx1ZSBKU0JpZ0ludDo6ZGl2aWRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKQEAgLTYyNiwxMSArNjkwLDE2IEBAIEpTVmFsdWUg
SlNCaWdJbnQ6OmRpdmlkZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgs
IEpTQmlnSW50KiB5KQogI2VuZGlmCiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgot
SlNCaWdJbnQqIEpTQmlnSW50Ojpjb3B5KFZNJiB2bSwgQmlnSW50SW1wbCB4KQorSlNCaWdJbnQq
IEpTQmlnSW50Ojpjb3B5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwg
eCkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgQVNTRVJUKCF4LmlzWmVybygpKTsKIAot
ICAgIEpTQmlnSW50KiByZXN1bHQgPSBKU0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tl
ZCh2bSwgeC5sZW5ndGgoKSk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5n
dGgoZ2xvYmFsT2JqZWN0LCB4Lmxlbmd0aCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKKwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHQtPmxl
bmd0aCgpOyArK2kpCiAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgeC5kaWdpdChpKSk7CiAg
ICAgcmVzdWx0LT5zZXRTaWduKHguc2lnbigpKTsKQEAgLTYzOCwxOSArNzA3LDI0IEBAIEpTQmln
SW50KiBKU0JpZ0ludDo6Y29weShWTSYgdm0sIEJpZ0ludEltcGwgeCkKIH0KIAogdGVtcGxhdGUg
PHR5cGVuYW1lIEJpZ0ludEltcGw+Ci1KU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6dW5h
cnlNaW51c0ltcGwoVk0mIHZtLCBCaWdJbnRJbXBsIHgpCitKU0JpZ0ludDo6SW1wbFJlc3VsdCBK
U0JpZ0ludDo6dW5hcnlNaW51c0ltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmln
SW50SW1wbCB4KQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoeC5pc1plcm8oKSkK
LSAgICAgICAgcmV0dXJuIHplcm9JbXBsKHZtKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCB6ZXJvSW1wbChnbG9iYWxPYmplY3QpKTsKKworICAgIEpTQmlnSW50KiByZXN1bHQg
PSBjb3B5KGdsb2JhbE9iamVjdCwgeCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
bnVsbHB0cik7CiAKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gY29weSh2bSwgeCk7CiAgICAgcmVz
dWx0LT5zZXRTaWduKCF4LnNpZ24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNWYWx1
ZSBKU0JpZ0ludDo6dW5hcnlNaW51cyhWTSYgdm0sIEpTQmlnSW50KiB4KQorSlNWYWx1ZSBKU0Jp
Z0ludDo6dW5hcnlNaW51cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCog
eCkKIHsKLSAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIodW5hcnlNaW51c0ltcGwodm0s
IEhlYXBCaWdJbnRJbXBsIHsgeCB9KSk7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMy
KHVuYXJ5TWludXNJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0pKTsKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4K
QEAgLTY3NCwyMiArNzQ4LDI3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpyZW1h
aW5kZXJJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0luCiAgICAgaWYgKHku
bGVuZ3RoKCkgPT0gMSkgewogICAgICAgICBEaWdpdCBkaXZpc29yID0geS5kaWdpdCgwKTsKICAg
ICAgICAgaWYgKGRpdmlzb3IgPT0gMSkKLSAgICAgICAgICAgIHJldHVybiB6ZXJvSW1wbCh2bSk7
CisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHplcm9JbXBsKGdsb2JhbE9i
amVjdCkpOwogCiAgICAgICAgIERpZ2l0IHJlbWFpbmRlckRpZ2l0OwotICAgICAgICBhYnNvbHV0
ZURpdldpdGhEaWdpdERpdmlzb3Iodm0sIHgsIGRpdmlzb3IsIG51bGxwdHIsIHJlbWFpbmRlckRp
Z2l0KTsKKyAgICAgICAgYWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29yKGdsb2JhbE9iamVjdCwg
dm0sIHgsIGRpdmlzb3IsIG51bGxwdHIsIHJlbWFpbmRlckRpZ2l0KTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisKICAgICAgICAgaWYgKCFyZW1haW5kZXJE
aWdpdCkKLSAgICAgICAgICAgIHJldHVybiB6ZXJvSW1wbCh2bSk7CisgICAgICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIHplcm9JbXBsKGdsb2JhbE9iamVjdCkpOwogCi0gICAgICAg
IHJlbWFpbmRlciA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIDEpOworICAgICAgICBy
ZW1haW5kZXIgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgMSk7CisgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICByZW1haW5kZXItPnNl
dERpZ2l0KDAsIHJlbWFpbmRlckRpZ2l0KTsKICAgICB9IGVsc2UgewotICAgICAgICBhYnNvbHV0
ZURpdldpdGhCaWdJbnREaXZpc29yKGdsb2JhbE9iamVjdCwgeCwgeS50b0hlYXBCaWdJbnQodm0p
LCBudWxscHRyLCAmcmVtYWluZGVyKTsKKyAgICAgICAgSlNCaWdJbnQqIHlCaWdJbnQgPSB5LnRv
SGVhcEJpZ0ludChnbG9iYWxPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKKyAgICAgICAgYWJzb2x1dGVEaXZXaXRoQmlnSW50RGl2aXNvcihnbG9i
YWxPYmplY3QsIHgsIHlCaWdJbnQsIG51bGxwdHIsICZyZW1haW5kZXIpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICB9CiAKICAgICByZW1haW5kZXIt
PnNldFNpZ24oeC5zaWduKCkpOwotICAgIHJldHVybiByZW1haW5kZXItPnJpZ2h0VHJpbSh2bSk7
CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZW1haW5kZXItPnJpZ2h0VHJpbShnbG9i
YWxPYmplY3QpKTsKIH0KIEpTVmFsdWUgSlNCaWdJbnQ6OnJlbWFpbmRlcihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCiB7CkBAIC03MDksOSAr
Nzg4LDEzIEBAIEpTVmFsdWUgSlNCaWdJbnQ6OnJlbWFpbmRlcihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmln
SW50SW1wbD4KIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjppbmNJbXBsKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCkKIHsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgaWYgKCF4LnNpZ24oKSkKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGds
b2JhbE9iamVjdCwgeCwgU2lnbk9wdGlvbjo6VW5zaWduZWQpOworICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgeCwgU2lnbk9wdGlv
bjo6VW5zaWduZWQpKTsKICAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xv
YmFsT2JqZWN0LCB4LCB4Lmxlbmd0aCgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKICAgICBpZiAocmVzdWx0LT5pc1plcm8oKSkKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICByZXN1bHQtPnNldFNpZ24odHJ1ZSk7CkBAIC03MzAsNyArODEzLDcgQEAgSlNC
aWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmRlY0ltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQmlnSW50SW1wbAogI2lmIFVTRShCSUdJTlQzMikKICAgICAgICAgcmV0dXJuIGpz
QmlnSW50MzIoLTEpOwogI2Vsc2UKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb20oZ2xvYmFsT2Jq
ZWN0LT52bSgpLCAtMSk7CisgICAgICAgIHJldHVybiBjcmVhdGVGcm9tKGdsb2JhbE9iamVjdCwg
LTEpOwogI2VuZGlmCiAgICAgfQogICAgIGlmICgheC5zaWduKCkpCkBAIC03NDYsNyArODI5LDYg
QEAgSlNWYWx1ZSBKU0JpZ0ludDo6ZGVjKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
QmlnSW50KiB4KQogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJ
bnRJbXBsMj4KIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjphZGRJbXBsKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7Ci0g
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGJvb2wgeFNpZ24gPSB4LnNpZ24o
KTsKIAogICAgIC8vIHggKyB5ID09IHggKyB5CkBAIC03NTgsOSArODQwLDkgQEAgSlNCaWdJbnQ6
OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFkZEltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQmlnSW50SW1wbDEKICAgICAvLyAteCArIHkgPT0geSAtIHggPT0gLSh4IC0geSkKICAgICBD
b21wYXJpc29uUmVzdWx0IGNvbXBhcmlzb25SZXN1bHQgPSBhYnNvbHV0ZUNvbXBhcmUoeCwgeSk7
CiAgICAgaWYgKGNvbXBhcmlzb25SZXN1bHQgPT0gQ29tcGFyaXNvblJlc3VsdDo6R3JlYXRlclRo
YW4gfHwgY29tcGFyaXNvblJlc3VsdCA9PSBDb21wYXJpc29uUmVzdWx0OjpFcXVhbCkKLSAgICAg
ICAgcmV0dXJuIGFic29sdXRlU3ViKHZtLCB4LCB5LCB4U2lnbik7CisgICAgICAgIHJldHVybiBh
YnNvbHV0ZVN1YihnbG9iYWxPYmplY3QsIHgsIHksIHhTaWduKTsKIAotICAgIHJldHVybiBhYnNv
bHV0ZVN1Yih2bSwgeSwgeCwgIXhTaWduKTsKKyAgICByZXR1cm4gYWJzb2x1dGVTdWIoZ2xvYmFs
T2JqZWN0LCB5LCB4LCAheFNpZ24pOwogfQogSlNWYWx1ZSBKU0JpZ0ludDo6YWRkKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKIHsKQEAgLTc4
MCw3ICs4NjIsNiBAQCBKU1ZhbHVlIEpTQmlnSW50OjphZGQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSkKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJ
bnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CiBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0Jp
Z0ludDo6c3ViSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4
LCBCaWdJbnRJbXBsMiB5KQogewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAg
ICBib29sIHhTaWduID0geC5zaWduKCk7CiAgICAgaWYgKHhTaWduICE9IHkuc2lnbigpKSB7CiAg
ICAgICAgIC8vIHggLSAoLXkpID09IHggKyB5CkBAIC03OTEsOSArODcyLDkgQEAgSlNCaWdJbnQ6
OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnN1YkltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQmlnSW50SW1wbDEKICAgICAvLyAoLXgpIC0gKC15KSA9PSB5IC0geCA9PSAtKHggLSB5KQog
ICAgIENvbXBhcmlzb25SZXN1bHQgY29tcGFyaXNvblJlc3VsdCA9IGFic29sdXRlQ29tcGFyZSh4
LCB5KTsKICAgICBpZiAoY29tcGFyaXNvblJlc3VsdCA9PSBDb21wYXJpc29uUmVzdWx0OjpHcmVh
dGVyVGhhbiB8fCBjb21wYXJpc29uUmVzdWx0ID09IENvbXBhcmlzb25SZXN1bHQ6OkVxdWFsKQot
ICAgICAgICByZXR1cm4gYWJzb2x1dGVTdWIodm0sIHgsIHksIHhTaWduKTsKKyAgICAgICAgcmV0
dXJuIGFic29sdXRlU3ViKGdsb2JhbE9iamVjdCwgeCwgeSwgeFNpZ24pOwogCi0gICAgcmV0dXJu
IGFic29sdXRlU3ViKHZtLCB5LCB4LCAheFNpZ24pOworICAgIHJldHVybiBhYnNvbHV0ZVN1Yihn
bG9iYWxPYmplY3QsIHksIHgsICF4U2lnbik7CiB9CiAKIEpTVmFsdWUgSlNCaWdJbnQ6OnN1YihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCkBA
IC04MTcsMTAgKzg5OCw4IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpiaXR3aXNl
QW5kSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJCiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAotICAgIGlmICgheC5zaWduKCkgJiYgIXkuc2lnbigpKSB7Ci0gICAgICAgIHNjb3Bl
LnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQW5kKHZtLCB4LCB5KTsKLSAgICB9
CisgICAgaWYgKCF4LnNpZ24oKSAmJiAheS5zaWduKCkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgYWJzb2x1dGVBbmQoZ2xvYmFsT2JqZWN0LCB4LCB5KSk7CiAgICAgCiAgICAg
aWYgKHguc2lnbigpICYmIHkuc2lnbigpKSB7CiAgICAgICAgIGludCByZXN1bHRMZW5ndGggPSBz
dGQ6Om1heCh4Lmxlbmd0aCgpLCB5Lmxlbmd0aCgpKSArIDE7CkBAIC04MzEsOSArOTEwLDkgQEAg
SlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VBbmRJbXBsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0kKIAogICAgICAgICBKU0JpZ0ludCogeTEgPSBhYnNvbHV0
ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHksIHkubGVuZ3RoKCkpOwogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVPcih2
bSwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgSGVhcEJpZ0ludEltcGwgeyB5MSB9KTsKLSAg
ICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xv
YmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQp
OworICAgICAgICByZXN1bHQgPSBhYnNvbHV0ZU9yKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludElt
cGwgeyByZXN1bHQgfSwgSGVhcEJpZ0ludEltcGwgeyB5MSB9KTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3Vs
dCB9LCBTaWduT3B0aW9uOjpTaWduZWQpKTsKICAgICB9CiAKICAgICBBU1NFUlQoeC5zaWduKCkg
IT0geS5zaWduKCkpOwpAQCAtODQzLDcgKzkyMiw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpT
QmlnSW50OjpiaXR3aXNlQW5kSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJ
CiAgICAgICAgIEFTU0VSVCh5LnNpZ24oKSk7IAogICAgICAgICBKU0JpZ0ludCogeTEgPSBhYnNv
bHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHksIHkubGVuZ3RoKCkpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQW5k
Tm90KHZtLCB4LCBIZWFwQmlnSW50SW1wbCB7IHkxIH0pOworICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIGFic29sdXRlQW5kTm90KGdsb2JhbE9iamVjdCwgeCwgSGVhcEJpZ0ludElt
cGwgeyB5MSB9KSk7CiAgICAgfTsKICAgICBpZiAoeC5zaWduKCkpCiAgICAgICAgIHJldHVybiBj
b21wdXRlUmVzdWx0KHksIHgpOwpAQCAtODczLDEwICs5NTIsOCBAQCBKU0JpZ0ludDo6SW1wbFJl
c3VsdCBKU0JpZ0ludDo6Yml0d2lzZU9ySW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBCaWdJbgogCiAgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoeC5sZW5ndGgo
KSwgeS5sZW5ndGgoKSk7CiAKLSAgICBpZiAoIXguc2lnbigpICYmICF5LnNpZ24oKSkgewotICAg
ICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBhYnNvbHV0ZU9yKHZtLCB4LCB5
KTsKLSAgICB9CisgICAgaWYgKCF4LnNpZ24oKSAmJiAheS5zaWduKCkpCisgICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVPcihnbG9iYWxPYmplY3QsIHgsIHkpKTsKICAg
ICAKICAgICBpZiAoeC5zaWduKCkgJiYgeS5zaWduKCkpIHsKICAgICAgICAgLy8gKC14KSB8ICgt
eSkgPT0gfih4LTEpIHwgfih5LTEpID09IH4oKHgtMSkgJiAoeS0xKSkKQEAgLTg4NSwxMSArOTYy
LDkgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VPckltcGwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW4KICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgIEpTQmlnSW50KiB5MSA9IGFic29sdXRlU3ViT25l
KGdsb2JhbE9iamVjdCwgeSwgeS5sZW5ndGgoKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIG51bGxwdHIpOwotICAgICAgICByZXN1bHQgPSBhYnNvbHV0ZUFuZCh2bSwgSGVh
cEJpZ0ludEltcGwgeyByZXN1bHQgfSwgSGVhcEJpZ0ludEltcGwgeyB5MSB9KTsKKyAgICAgICAg
cmVzdWx0ID0gYWJzb2x1dGVBbmQoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3Vs
dCB9LCBIZWFwQmlnSW50SW1wbCB7IHkxIH0pOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBudWxscHRyKTsKLQotICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJl
dHVybiBhYnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0
IH0sIFNpZ25PcHRpb246OlNpZ25lZCk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29w
ZSwgYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9
LCBTaWduT3B0aW9uOjpTaWduZWQpKTsKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKHguc2lnbigp
ICE9IHkuc2lnbigpKTsKQEAgLTkwMSwxMCArOTc2LDkgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQg
SlNCaWdJbnQ6OmJpdHdpc2VPckltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmln
SW4KIAogICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2Jq
ZWN0LCB5LCByZXN1bHRMZW5ndGgpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKLSAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVBbmROb3Qodm0sIEhlYXBCaWdJ
bnRJbXBsIHsgcmVzdWx0IH0sIHgpOwotCi0gICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAg
ICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyBy
ZXN1bHQgfSwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKKyAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVB
bmROb3QoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCB4KTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50
SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpKTsKICAgICB9OwogCiAgICAgaWYg
KHguc2lnbigpKQpAQCAtOTMzLDEwICsxMDA3LDggQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNC
aWdJbnQ6OmJpdHdpc2VYb3JJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0kK
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCF4LnNpZ24oKSAmJiAheS5zaWduKCkpIHsK
LSAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gYWJzb2x1dGVYb3Iodm0s
IHgsIHkpOwotICAgIH0KKyAgICBpZiAoIXguc2lnbigpICYmICF5LnNpZ24oKSkKKyAgICAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBhYnNvbHV0ZVhvcihnbG9iYWxPYmplY3QsIHgsIHkp
KTsKICAgICAKICAgICBpZiAoeC5zaWduKCkgJiYgeS5zaWduKCkpIHsKICAgICAgICAgaW50IHJl
c3VsdExlbmd0aCA9IHN0ZDo6bWF4KHgubGVuZ3RoKCksIHkubGVuZ3RoKCkpOwpAQCAtOTQ2LDkg
KzEwMTgsNyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6Yml0d2lzZVhvckltcGwo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSQogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgSlNCaWdJbnQqIHkxID0gYWJzb2x1dGVT
dWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCB5Lmxlbmd0aCgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0KLSAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAg
ICAgICByZXR1cm4gYWJzb2x1dGVYb3Iodm0sIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIEhl
YXBCaWdJbnRJbXBsIHsgeTEgfSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
YWJzb2x1dGVYb3IoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBIZWFw
QmlnSW50SW1wbCB7IHkxIH0pKTsKICAgICB9CiAgICAgQVNTRVJUKHguc2lnbigpICE9IHkuc2ln
bigpKTsKICAgICBpbnQgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoeC5sZW5ndGgoKSwgeS5sZW5n
dGgoKSkgKyAxOwpAQCAtOTYwLDkgKzEwMzAsOSBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0Jp
Z0ludDo6Yml0d2lzZVhvckltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSQog
ICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5
LCByZXN1bHRMZW5ndGgpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxs
cHRyKTsKIAotICAgICAgICByZXN1bHQgPSBhYnNvbHV0ZVhvcih2bSwgSGVhcEJpZ0ludEltcGwg
eyByZXN1bHQgfSwgeCk7Ci0gICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJu
IGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwg
U2lnbk9wdGlvbjo6U2lnbmVkKTsKKyAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVYb3IoZ2xvYmFs
T2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCB4KTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3Vs
dCB9LCBTaWduT3B0aW9uOjpTaWduZWQpKTsKICAgICB9OwogICAgIAogICAgIC8vIEFzc3VtZSB0
aGF0IHggaXMgdGhlIHBvc2l0aXZlIEJpZ0ludC4KQEAgLTEzNzQsMjEgKzE0NDQsMjUgQEAgdGVt
cGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KIEpTQmln
SW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjphYnNvbHV0ZUFkZChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LCBib29sIHJlc3VsdFNpZ24p
CiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICh4Lmxlbmd0aCgpIDwgeS5sZW5ndGgo
KSkKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkKGdsb2JhbE9iamVjdCwgeSwgeCwgcmVzdWx0
U2lnbik7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYWJzb2x1dGVBZGQoZ2xv
YmFsT2JqZWN0LCB5LCB4LCByZXN1bHRTaWduKSk7CiAKICAgICBpZiAoeC5pc1plcm8oKSkgewog
ICAgICAgICBBU1NFUlQoeS5pc1plcm8oKSk7CiAgICAgICAgIHJldHVybiB4OwogICAgIH0KIAot
ICAgIGlmICh5LmlzWmVybygpKQotICAgICAgICByZXR1cm4gcmVzdWx0U2lnbiA9PSB4LnNpZ24o
KSA/IHggOiB1bmFyeU1pbnVzSW1wbCh2bSwgeCk7CisgICAgaWYgKHkuaXNaZXJvKCkpIHsKKyAg
ICAgICAgaWYgKHJlc3VsdFNpZ24gPT0geC5zaWduKCkpCisgICAgICAgICAgICByZXR1cm4geDsK
KyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB1bmFyeU1pbnVzSW1wbChnbG9iYWxP
YmplY3QsIHgpKTsKKyAgICB9CiAKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnRy
eUNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCB4Lmxlbmd0aCgpICsgMSk7Ci0gICAgaWYg
KCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIEpTQmlnSW50KiByZXN1bHQg
PSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgeC5sZW5ndGgoKSArIDEpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAgIEFTU0VSVChyZXN1bHQpOwog
ICAgIERpZ2l0IGNhcnJ5ID0gMDsKICAgICB1bnNpZ25lZCBpID0gMDsKICAgICBmb3IgKDsgaSA8
IHkubGVuZ3RoKCk7IGkrKykgewpAQCAtMTQwOSwxMiArMTQ4MywxNSBAQCBKU0JpZ0ludDo6SW1w
bFJlc3VsdCBKU0JpZ0ludDo6YWJzb2x1dGVBZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQmlnSW50SQogICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgY2FycnkpOwogICAgIHJlc3VsdC0+
c2V0U2lnbihyZXN1bHRTaWduKTsKIAotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7
CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxP
YmplY3QpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBC
aWdJbnRJbXBsMj4KLUpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjphYnNvbHV0ZVN1YihW
TSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHksIGJvb2wgcmVzdWx0U2lnbikKK0pT
QmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjphYnNvbHV0ZVN1YihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LCBib29sIHJlc3VsdFNp
Z24pCiB7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIENvbXBhcmlzb25SZXN1bHQgY29tcGFy
aXNvblJlc3VsdCA9IGFic29sdXRlQ29tcGFyZSh4LCB5KTsKICAgICBBU1NFUlQoeC5sZW5ndGgo
KSA+PSB5Lmxlbmd0aCgpKTsKICAgICBBU1NFUlQoY29tcGFyaXNvblJlc3VsdCA9PSBDb21wYXJp
c29uUmVzdWx0OjpHcmVhdGVyVGhhbiB8fCBjb21wYXJpc29uUmVzdWx0ID09IENvbXBhcmlzb25S
ZXN1bHQ6OkVxdWFsKTsKQEAgLTE0MjQsMTMgKzE1MDEsMTcgQEAgSlNCaWdJbnQ6OkltcGxSZXN1
bHQgSlNCaWdJbnQ6OmFic29sdXRlU3ViKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1w
bDIgeSwKICAgICAgICAgcmV0dXJuIHg7CiAgICAgfQogCi0gICAgaWYgKHkuaXNaZXJvKCkpCi0g
ICAgICAgIHJldHVybiByZXN1bHRTaWduID09IHguc2lnbigpID8gSW1wbFJlc3VsdCB7IHggfSA6
IEpTQmlnSW50Ojp1bmFyeU1pbnVzSW1wbCh2bSwgeCk7CisgICAgaWYgKHkuaXNaZXJvKCkpIHsK
KyAgICAgICAgaWYgKHJlc3VsdFNpZ24gPT0geC5zaWduKCkpCisgICAgICAgICAgICByZXR1cm4g
SW1wbFJlc3VsdCB7IHggfTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0Jp
Z0ludDo6dW5hcnlNaW51c0ltcGwoZ2xvYmFsT2JqZWN0LCB4KSk7CisgICAgfQogCiAgICAgaWYg
KGNvbXBhcmlzb25SZXN1bHQgPT0gQ29tcGFyaXNvblJlc3VsdDo6RXF1YWwpCi0gICAgICAgIHJl
dHVybiB6ZXJvSW1wbCh2bSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgemVy
b0ltcGwoZ2xvYmFsT2JqZWN0KSk7CiAKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6
OmNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIHgubGVuZ3RoKCkpOworICAgIEpTQmlnSW50
KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgeC5sZW5ndGgoKSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICBEaWdpdCBib3Jy
b3cgPSAwOwogICAgIHVuc2lnbmVkIGkgPSAwOwpAQCAtMTQ1MSw3ICsxNTMyLDcgQEAgSlNCaWdJ
bnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFic29sdXRlU3ViKFZNJiB2bSwgQmlnSW50SW1wbDEg
eCwgQmlnSW50SW1wbDIgeSwKIAogICAgIEFTU0VSVCghYm9ycm93KTsKICAgICByZXN1bHQtPnNl
dFNpZ24ocmVzdWx0U2lnbik7Ci0gICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKKyAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVj
dCkpOwogfQogCiAvLyBEaXZpZGVzIHt4fSBieSB7ZGl2aXNvcn0sIHJldHVybmluZyB0aGUgcmVz
dWx0IGluIHtxdW90aWVudH0gYW5kIHtyZW1haW5kZXJ9LgpAQCAtMTQ2MiwyMiArMTU0MywzMCBA
QCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YWJzb2x1dGVTdWIoVk0mIHZtLCBCaWdJ
bnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LAogLy8ge3F1b3RpZW50fSBjYW4gYmUgdGhlIHNhbWUg
YXMge3h9IGZvciBhbiBpbi1wbGFjZSBkaXZpc2lvbi4ge3F1b3RpZW50fSBjYW4KIC8vIGFsc28g
YmUgbnVsbHB0ciBpZiB0aGUgY2FsbGVyIGlzIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgcmVtYWlu
ZGVyLgogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Ci12b2lkIEpTQmlnSW50OjphYnNv
bHV0ZURpdldpdGhEaWdpdERpdmlzb3IoVk0mIHZtLCBCaWdJbnRJbXBsIHgsIERpZ2l0IGRpdmlz
b3IsIEpTQmlnSW50KiogcXVvdGllbnQsIERpZ2l0JiByZW1haW5kZXIpCitib29sIEpTQmlnSW50
OjphYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3IoSlNHbG9iYWxPYmplY3QqIG51bGxPckdsb2Jh
bE9iamVjdEZvck9PTSwgVk0mIHZtLCBCaWdJbnRJbXBsIHgsIERpZ2l0IGRpdmlzb3IsIEpTQmln
SW50KiogcXVvdGllbnQsIERpZ2l0JiByZW1haW5kZXIpCiB7CiAgICAgQVNTRVJUKGRpdmlzb3Ip
OwogCiAgICAgQVNTRVJUKCF4LmlzWmVybygpKTsKICAgICByZW1haW5kZXIgPSAwOwogICAgIGlm
IChkaXZpc29yID09IDEpIHsKLSAgICAgICAgaWYgKHF1b3RpZW50KQotICAgICAgICAgICAgKnF1
b3RpZW50ID0geC50b0hlYXBCaWdJbnQodm0pOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlm
IChxdW90aWVudCkgeworICAgICAgICAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IHgudG9IZWFwQmln
SW50KG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgdm0pOworICAgICAgICAgICAgaWYgKFVOTElL
RUxZKCFyZXN1bHQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICpxdW90aWVudCA9IHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSB4Lmxlbmd0aCgpOwogICAgIGlmIChxdW90aWVu
dCkgewotICAgICAgICBpZiAoKnF1b3RpZW50ID09IG51bGxwdHIpCi0gICAgICAgICAgICAqcXVv
dGllbnQgPSBKU0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgbGVuZ3RoKTsK
KyAgICAgICAgaWYgKCpxdW90aWVudCA9PSBudWxscHRyKSB7CisgICAgICAgICAgICBKU0JpZ0lu
dCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZt
LCBsZW5ndGgpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICpxdW90aWVudCA9IHJlc3VsdDsKKyAg
ICAgICAgfQogCiAgICAgICAgIGZvciAoaW50IGkgPSBsZW5ndGggLSAxOyBpID49IDA7IGktLSkg
ewogICAgICAgICAgICAgRGlnaXQgcSA9IGRpZ2l0RGl2KHJlbWFpbmRlciwgeC5kaWdpdChpKSwg
ZGl2aXNvciwgcmVtYWluZGVyKTsKQEAgLTE0ODcsNiArMTU3Niw3IEBAIHZvaWQgSlNCaWdJbnQ6
OmFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcihWTSYgdm0sIEJpZ0ludEltcGwgeCwgRGlnaXQg
ZGl2aXNvciwKICAgICAgICAgZm9yIChpbnQgaSA9IGxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKQog
ICAgICAgICAgICAgZGlnaXREaXYocmVtYWluZGVyLCB4LmRpZ2l0KGkpLCBkaXZpc29yLCByZW1h
aW5kZXIpOwogICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gRGl2aWRlcyB7ZGl2aWRl
bmR9IGJ5IHtkaXZpc29yfSwgcmV0dXJuaW5nIHRoZSByZXN1bHQgaW4ge3F1b3RpZW50fSBhbmQK
QEAgLTE1MTIsMTIgKzE2MDIsMTQgQEAgdm9pZCBKU0JpZ0ludDo6YWJzb2x1dGVEaXZXaXRoQmln
SW50RGl2aXNvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnQKICAgICAKICAg
ICAvLyBUaGUgcXVvdGllbnQgdG8gYmUgY29tcHV0ZWQuCiAgICAgSlNCaWdJbnQqIHEgPSBudWxs
cHRyOwotICAgIGlmIChxdW90aWVudCAhPSBudWxscHRyKQotICAgICAgICBxID0gY3JlYXRlV2l0
aExlbmd0aFVuY2hlY2tlZChnbG9iYWxPYmplY3QtPnZtKCksIG0gKyAxKTsKKyAgICBpZiAocXVv
dGllbnQgIT0gbnVsbHB0cikgeworICAgICAgICBxID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxP
YmplY3QsIG0gKyAxKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgp
KTsKKyAgICB9CiAgICAgCiAgICAgLy8gSW4gZWFjaCBpdGVyYXRpb24sIHtxaGF0dn0gaG9sZHMg
e2Rpdmlzb3J9ICoge2N1cnJlbnQgcXVvdGllbnQgZGlnaXR9LgogICAgIC8vICJ2IiBpcyB0aGUg
Ym9vaydzIG5hbWUgZm9yIHtkaXZpc29yfSwgInFoYXQiIHRoZSBjdXJyZW50IHF1b3RpZW50IGRp
Z2l0LgotICAgIEpTQmlnSW50KiBxaGF0diA9IHRyeUNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2Jq
ZWN0LCBuICsgMSk7CisgICAgSlNCaWdJbnQqIHFoYXR2ID0gY3JlYXRlV2l0aExlbmd0aChnbG9i
YWxPYmplY3QsIG4gKyAxKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OwogICAgIAogICAgIC8vIEQxLgpAQCAtMTY2NywxNCArMTc1OSwxNiBAQCB2b2lkIEpTQmlnSW50
OjppbnBsYWNlUmlnaHRTaGlmdCh1bnNpZ25lZCBzaGlmdCkKIHRlbXBsYXRlIDx0eXBlbmFtZSBC
aWdJbnRJbXBsPgogSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUxlZnRTaGlmdEFsd2F5c0Nv
cHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbCB4LCB1bnNpZ25lZCBz
aGlmdCwgTGVmdFNoaWZ0TW9kZSBtb2RlKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBB
U1NFUlQoc2hpZnQgPCBkaWdpdEJpdHMpOwogICAgIEFTU0VSVCgheC5pc1plcm8oKSk7CiAKICAg
ICB1bnNpZ25lZCBuID0geC5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCByZXN1bHRMZW5ndGggPSBt
b2RlID09IExlZnRTaGlmdE1vZGU6OkFsd2F5c0FkZE9uZURpZ2l0ID8gbiArIDEgOiBuOwotICAg
IEpTQmlnSW50KiByZXN1bHQgPSB0cnlDcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVz
dWx0TGVuZ3RoKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXN1
bHRMZW5ndGgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICBp
ZiAoIXNoaWZ0KSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuOyBpKyspCkBA
IC0xNzE2LDggKzE4MTAsMTEgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUxlZnRTaGlm
dEFsd2F5c0NvcHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmkKIC8vICAgICAgICAg
ICAgICAgICAgIHYgICAgIHYgICAgIHYgICAgIHYKIC8vIHJlc3VsdDogWyAgMCBdWyB4MyBdWyBy
MiBdWyByMSBdWyByMCBdCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1l
IEJpZ0ludEltcGwyLCB0eXBlbmFtZSBCaXR3aXNlT3A+Ci1pbmxpbmUgSlNCaWdJbnQqIEpTQmln
SW50OjphYnNvbHV0ZUJpdHdpc2VPcChWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwy
IHksIEV4dHJhRGlnaXRzSGFuZGxpbmcgZXh0cmFEaWdpdHMsIEJpdHdpc2VPcCYmIG9wKQoraW5s
aW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVCaXR3aXNlT3AoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwgRXh0cmFEaWdpdHNI
YW5kbGluZyBleHRyYURpZ2l0cywgQml0d2lzZU9wJiYgb3ApCiB7CisgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKwogICAgIHVuc2lnbmVkIHhMZW5ndGggPSB4Lmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIHlM
ZW5ndGggPSB5Lmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIG51bVBhaXJzID0geUxlbmd0aDsKQEAg
LTE3MzAsNyArMTgyNyw4IEBAIGlubGluZSBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQml0
d2lzZU9wKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIKICAgICBBU1NFUlQobnVt
UGFpcnMgPT0gc3RkOjptaW4oeExlbmd0aCwgeUxlbmd0aCkpOwogICAgIEFTU0VSVChtYXhMZW5n
dGggPT0gc3RkOjptYXgoeExlbmd0aCwgeUxlbmd0aCkpOwogICAgIHVuc2lnbmVkIHJlc3VsdExl
bmd0aCA9IGV4dHJhRGlnaXRzID09IEV4dHJhRGlnaXRzSGFuZGxpbmc6OkNvcHkgPyBtYXhMZW5n
dGggOiBudW1QYWlyczsKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aFVu
Y2hlY2tlZCh2bSwgcmVzdWx0TGVuZ3RoKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRl
V2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgdW5zaWduZWQgaSA9IDA7CiAgICAgZm9yICg7
IGkgPCBudW1QYWlyczsgaSsrKQogICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIG9wKHguZGln
aXQoaSksIHkuZGlnaXQoaSkpKTsKQEAgLTE3NDgsNTggKzE4NDYsNjUgQEAgaW5saW5lIEpTQmln
SW50KiBKU0JpZ0ludDo6YWJzb2x1dGVCaXR3aXNlT3AoVk0mIHZtLCBCaWdJbnRJbXBsMSB4LCBC
aWdJbnRJbXBsMgogICAgIGZvciAoOyBpIDwgcmVzdWx0TGVuZ3RoOyBpKyspCiAgICAgICAgIHJl
c3VsdC0+c2V0RGlnaXQoaSwgMCk7CiAKLSAgICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0odm0p
OworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgcmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFs
T2JqZWN0KSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUg
QmlnSW50SW1wbDI+Ci1KU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQW5kKFZNJiB2bSwgQmln
SW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVB
bmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1w
bDIgeSkKIHsKICAgICBhdXRvIGRpZ2l0T3BlcmF0aW9uID0gW10oRGlnaXQgYSwgRGlnaXQgYikg
ewogICAgICAgICByZXR1cm4gYSAmIGI7CiAgICAgfTsKLSAgICByZXR1cm4gYWJzb2x1dGVCaXR3
aXNlT3Aodm0sIHgsIHksIEV4dHJhRGlnaXRzSGFuZGxpbmc6OlNraXAsIGRpZ2l0T3BlcmF0aW9u
KTsKKyAgICByZXR1cm4gYWJzb2x1dGVCaXR3aXNlT3AoZ2xvYmFsT2JqZWN0LCB4LCB5LCBFeHRy
YURpZ2l0c0hhbmRsaW5nOjpTa2lwLCBkaWdpdE9wZXJhdGlvbik7CiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+Ci1KU0JpZ0ludCogSlNC
aWdJbnQ6OmFic29sdXRlT3IoVk0mIHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQor
SlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZU9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgYXV0byBkaWdpdE9wZXJh
dGlvbiA9IFtdKERpZ2l0IGEsIERpZ2l0IGIpIHsKICAgICAgICAgcmV0dXJuIGEgfCBiOwogICAg
IH07Ci0gICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9wKHZtLCB4LCB5LCBFeHRyYURpZ2l0c0hh
bmRsaW5nOjpDb3B5LCBkaWdpdE9wZXJhdGlvbik7CisgICAgcmV0dXJuIGFic29sdXRlQml0d2lz
ZU9wKGdsb2JhbE9iamVjdCwgeCwgeSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6Q29weSwgZGlnaXRP
cGVyYXRpb24pOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1l
IEJpZ0ludEltcGwyPgotSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUFuZE5vdChWTSYgdm0s
IEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCitKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29s
dXRlQW5kTm90KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJp
Z0ludEltcGwyIHkpCiB7CiAgICAgLy8geCAmIH55CiAKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAg
ICAgdW5zaWduZWQgeExlbmd0aCA9IHgubGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgeUxlbmd0aCA9
IHkubGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0geExlbmd0aDsKIAotICAg
IEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCByZXN1bHRM
ZW5ndGgpOworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9i
amVjdCwgcmVzdWx0TGVuZ3RoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxs
cHRyKTsKICAgICB1bnNpZ25lZCBpID0gMDsKICAgICBmb3IgKDsgaSA8IHN0ZDo6bWluKHhMZW5n
dGgsIHlMZW5ndGgpOyBpKyspCiAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgeC5kaWdpdChp
KSAmIH55LmRpZ2l0KGkpKTsKICAgICBmb3IgKDsgaSA8IHJlc3VsdExlbmd0aDsgKytpKQogICAg
ICAgICByZXN1bHQtPnNldERpZ2l0KGksIHguZGlnaXQoaSkpOwogCi0gICAgcmV0dXJuIHJlc3Vs
dC0+cmlnaHRUcmltKHZtKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdC0+
cmlnaHRUcmltKGdsb2JhbE9iamVjdCkpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50
SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgotSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0
ZVhvcihWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCitKU0JpZ0ludCogSlNC
aWdJbnQ6OmFic29sdXRlWG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludElt
cGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgYXV0byBkaWdpdE9wZXJhdGlvbiA9IFtdKERp
Z2l0IGEsIERpZ2l0IGIpIHsKICAgICAgICAgcmV0dXJuIGEgXiBiOwogICAgIH07Ci0gICAgcmV0
dXJuIGFic29sdXRlQml0d2lzZU9wKHZtLCB4LCB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nOjpDb3B5
LCBkaWdpdE9wZXJhdGlvbik7CisgICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9wKGdsb2JhbE9i
amVjdCwgeCwgeSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6Q29weSwgZGlnaXRPcGVyYXRpb24pOwog
fQogICAgIAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CiBKU0JpZ0ludCogSlNCaWdJ
bnQ6OmFic29sdXRlQWRkT25lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludElt
cGwgeCwgU2lnbk9wdGlvbiBzaWduT3B0aW9uKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAg
ICB1bnNpZ25lZCBpbnB1dExlbmd0aCA9IHgubGVuZ3RoKCk7CiAgICAgLy8gVGhlIGFkZGl0aW9u
IHdpbGwgb3ZlcmZsb3cgaW50byBhIG5ldyBkaWdpdCBpZiBhbGwgZXhpc3RpbmcgZGlnaXRzIGFy
ZQogICAgIC8vIGF0IG1heGltdW0uCkBAIC0xODEyLDkgKzE5MTcsOCBAQCBKU0JpZ0ludCogSlNC
aWdJbnQ6OmFic29sdXRlQWRkT25lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0lu
dEltcGwgeCwgUwogICAgIH0KIAogICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IGlucHV0TGVu
Z3RoICsgd2lsbE92ZXJmbG93OwotICAgIEpTQmlnSW50KiByZXN1bHQgPSB0cnlDcmVhdGVXaXRo
TGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhM
ZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgRGlnaXQgY2FycnkgPSAxOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgaSsrKSB7CkBAIC0xODI4LDcgKzE5MzIsNyBA
QCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQWRkT25lKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEJpZ0ludEltcGwgeCwgUwogICAgICAgICBBU1NFUlQoIWNhcnJ5KTsKIAogICAg
IHJlc3VsdC0+c2V0U2lnbihzaWduT3B0aW9uID09IFNpZ25PcHRpb246OlNpZ25lZCk7Ci0gICAg
cmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CkBAIC0xODM5LDcgKzE5NDMsNyBAQCBK
U0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlU3ViT25lKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEJpZ0ludEltcGwgeCwgdQogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU0JpZ0lu
dCogcmVzdWx0ID0gdHJ5Q3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3VsdExlbmd0
aCk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0
LCByZXN1bHRMZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIp
OwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0geC5sZW5ndGgoKTsKQEAgLTE4NTMsNyArMTk1Nyw3
IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVTdWJPbmUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQmlnSW50SW1wbCB4LCB1CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3Ro
OyBpIDwgcmVzdWx0TGVuZ3RoOyBpKyspCiAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgYm9y
cm93KTsKIAotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0KIAog
dGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KQEAg
LTE4NzksNyArMTk4Myw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpsZWZ0U2hp
ZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIAotICAgIEpTQmlnSW50KiByZXN1bHQgPSB0cnlDcmVhdGVXaXRo
TGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0
ID0gY3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgaWYgKCFiaXRzU2hpZnQpIHsK
ICAgICAgICAgdW5zaWduZWQgaSA9IDA7CkBAIC0xOTA2LDI1ICsyMDEwLDI3IEBAIEpTQmlnSW50
OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpsZWZ0U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsCiAgICAgfQogCiAgICAgcmVzdWx0LT5zZXRTaWduKHguc2lnbigpKTsK
LSAgICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0odm0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgcmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KSk7CiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CiBKU0JpZ0ludDo6
SW1wbFJlc3VsdCBKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5QWJzb2x1dGUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCiAgICAgdW5zaWduZWQgbGVuZ3RoID0geC5sZW5ndGgoKTsKICAgICBib29s
IHNpZ24gPSB4LnNpZ24oKTsKICAgICBhdXRvIG9wdGlvbmFsU2hpZnQgPSB0b1NoaWZ0QW1vdW50
KHkpOwogICAgIGlmICghb3B0aW9uYWxTaGlmdCkKLSAgICAgICAgcmV0dXJuIHJpZ2h0U2hpZnRC
eU1heGltdW0odm0sIHNpZ24pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJp
Z2h0U2hpZnRCeU1heGltdW0oZ2xvYmFsT2JqZWN0LCBzaWduKSk7CiAKICAgICBEaWdpdCBzaGlm
dCA9ICpvcHRpb25hbFNoaWZ0OwogICAgIHVuc2lnbmVkIGRpZ2l0YWxTaGlmdCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzaGlmdCAvIGRpZ2l0Qml0cyk7CiAgICAgdW5zaWduZWQgYml0c1NoaWZ0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNoaWZ0ICUgZGlnaXRCaXRzKTsKICAgICBpbnQgcmVz
dWx0TGVuZ3RoID0gbGVuZ3RoIC0gZGlnaXRhbFNoaWZ0OwogICAgIGlmIChyZXN1bHRMZW5ndGgg
PD0gMCkKLSAgICAgICAgcmV0dXJuIHJpZ2h0U2hpZnRCeU1heGltdW0odm0sIHNpZ24pOworICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJpZ2h0U2hpZnRCeU1heGltdW0oZ2xvYmFs
T2JqZWN0LCBzaWduKSk7CiAKICAgICAvLyBGb3IgbmVnYXRpdmUgbnVtYmVycywgcm91bmQgZG93
biBpZiBhbnkgYml0IHdhcyBzaGlmdGVkIG91dCAoc28gdGhhdCBlLmcuCiAgICAgLy8gLTVuID4+
IDFuID09IC0zbiBhbmQgbm90IC0ybikuIENoZWNrIG5vdyB3aGV0aGVyIHRoaXMgd2lsbCBoYXBw
ZW4gYW5kCkBAIC0xOTU1LDcgKzIwNjEsOSBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0lu
dDo6cmlnaHRTaGlmdEJ5QWJzb2x1dGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdAogICAg
IH0KIAogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0TGVuZ3RoKSA8PSBs
ZW5ndGgpOwotICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2Vk
KHZtLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0TGVuZ3RoKSk7CisgICAgSlNCaWdJbnQq
IHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4ocmVzdWx0TGVuZ3RoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVs
bHB0cik7CisKICAgICBpZiAoIWJpdHNTaGlmdCkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBkaWdpdGFsU2hpZnQ7IGkgPCBsZW5ndGg7IGkrKykKICAgICAgICAgICAgIHJlc3VsdC0+c2V0
RGlnaXQoaSAtIGRpZ2l0YWxTaGlmdCwgeC5kaWdpdChpKSk7CkBAIC0xOTc1LDIwICsyMDgzLDIx
IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpyaWdodFNoaWZ0QnlBYnNvbHV0ZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0CiAgICAgICAgIGlmIChtdXN0Um91bmREb3duKSB7
CiAgICAgICAgICAgICAvLyBTaW5jZSB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCByb3VuZGluZyBk
b3duIG1lYW5zIGFkZGluZyBvbmUgdG8KICAgICAgICAgICAgIC8vIGl0cyBhYnNvbHV0ZSB2YWx1
ZS4gVGhpcyBjYW5ub3Qgb3ZlcmZsb3cuCi0gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQtPnJp
Z2h0VHJpbSh2bSk7Ci0gICAgICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2Jq
ZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpOworICAg
ICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5yaWdodFRyaW0oZ2xvYmFsT2JqZWN0KTsKKyAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAgICAgICAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBhYnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIEhl
YXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIFNpZ25PcHRpb246OlNpZ25lZCkpOwogICAgICAgICB9
CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKKyAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdCkpOwogfQog
Ci1KU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5TWF4aW11bShWTSYg
dm0sIGJvb2wgc2lnbikKK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpyaWdodFNoaWZ0
QnlNYXhpbXVtKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGJvb2wgc2lnbikKIHsKICAg
ICBpZiAoc2lnbikKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb20odm0sIC0xKTsKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCAtMSk7CiAKLSAgICByZXR1cm4gY3JlYXRl
WmVybyh2bSk7CisgICAgcmV0dXJuIGNyZWF0ZVplcm8oZ2xvYmFsT2JqZWN0KTsKIH0KIAogLy8g
TG9va3VwIHRhYmxlIGZvciB0aGUgbWF4aW11bSBudW1iZXIgb2YgYml0cyByZXF1aXJlZCBwZXIg
Y2hhcmFjdGVyIG9mIGEKQEAgLTIwMzQsNyArMjE0Myw3IEBAIHVpbnQ2NF90IEpTQmlnSW50Ojpj
YWxjdWxhdGVNYXhpbXVtQ2hhcmFjdGVyc1JlcXVpcmVkKHVuc2lnbmVkIGxlbmd0aCwgdW5zaWdu
ZWQKICAgICByZXR1cm4gbWF4aW11bUNoYXJhY3RlcnNSZXF1aXJlZDsKIH0KIAotU3RyaW5nIEpT
QmlnSW50Ojp0b1N0cmluZ0Jhc2VQb3dlck9mVHdvKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIHVuc2lnbmVkIHJhZGl4KQorU3RyaW5nIEpTQmlnSW50
Ojp0b1N0cmluZ0Jhc2VQb3dlck9mVHdvKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIG51bGxPckds
b2JhbE9iamVjdEZvck9PTSwgSlNCaWdJbnQqIHgsIHVuc2lnbmVkIHJhZGl4KQogewogICAgIEFT
U0VSVChoYXNPbmVCaXRTZXQocmFkaXgpKTsKICAgICBBU1NFUlQocmFkaXggPj0gMiAmJiByYWRp
eCA8PSAzMik7CkBAIC0yMDU0LDkgKzIxNjMsOSBAQCBTdHJpbmcgSlNCaWdJbnQ6OnRvU3RyaW5n
QmFzZVBvd2VyT2ZUd28oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKUwog
ICAgIGNvbnN0IHNpemVfdCBjaGFyc1JlcXVpcmVkID0gKGJpdExlbmd0aCArIGJpdHNQZXJDaGFy
IC0gMSkgLyBiaXRzUGVyQ2hhciArIHNpZ247CiAKICAgICBpZiAoY2hhcnNSZXF1aXJlZCA+IEpT
U3RyaW5nOjpNYXhMZW5ndGgpIHsKLSAgICAgICAgaWYgKGdsb2JhbE9iamVjdCkgeworICAgICAg
ICBpZiAobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NKSB7CiAgICAgICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7ICAgICAgICAgICAgCisgICAgICAgICAgICB0aHJv
d091dE9mTWVtb3J5RXJyb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBzY29wZSk7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KQEAgLTIwOTYsNyArMjIwNSw3
IEBAIFN0cmluZyBKU0JpZ0ludDo6dG9TdHJpbmdCYXNlUG93ZXJPZlR3byhWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTCiAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmFkb3B0
KFdURk1vdmUocmVzdWx0U3RyaW5nKSk7CiB9CiAKLVN0cmluZyBKU0JpZ0ludDo6dG9TdHJpbmdH
ZW5lcmljKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgs
IHVuc2lnbmVkIHJhZGl4KQorU3RyaW5nIEpTQmlnSW50Ojp0b1N0cmluZ0dlbmVyaWMoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogbnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBKU0JpZ0ludCogeCwg
dW5zaWduZWQgcmFkaXgpCiB7CiAgICAgLy8gRklYTUU6IFtKU0NdIFJldmlzaXQgdXNhZ2Ugb2Yg
VmVjdG9yIGludG8gSlNCaWdJbnQ6OnRvU3RyaW5nCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDY3MQpAQCAtMjExMiw5ICsyMjIxLDkgQEAgU3RyaW5n
IEpTQmlnSW50Ojp0b1N0cmluZ0dlbmVyaWMoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0JpZ0ludCoKICAgICB1aW50NjRfdCBtYXhpbXVtQ2hhcmFjdGVyc1JlcXVpcmVk
ID0gY2FsY3VsYXRlTWF4aW11bUNoYXJhY3RlcnNSZXF1aXJlZChsZW5ndGgsIHJhZGl4LCB4LT5k
aWdpdChsZW5ndGggLSAxKSwgc2lnbik7CiAKICAgICBpZiAobWF4aW11bUNoYXJhY3RlcnNSZXF1
aXJlZCA+IEpTU3RyaW5nOjpNYXhMZW5ndGgpIHsKLSAgICAgICAgaWYgKGdsb2JhbE9iamVjdCkg
eworICAgICAgICBpZiAobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NKSB7CiAgICAgICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgICAgICB0aHJvd091
dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7ICAgICAgICAgICAgCisgICAgICAg
ICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBzY29w
ZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KQEAgLTIxNDAs
NyArMjI0OSw5IEBAIFN0cmluZyBKU0JpZ0ludDo6dG9TdHJpbmdHZW5lcmljKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqCiAgICAgICAgIEpTQmlnSW50Kiog
ZGl2aWRlbmQgPSAmeDsKICAgICAgICAgZG8gewogICAgICAgICAgICAgRGlnaXQgY2h1bms7Ci0g
ICAgICAgICAgICBhYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3Iodm0sIEhlYXBCaWdJbnRJbXBs
IHsgKmRpdmlkZW5kIH0sIGNodW5rRGl2aXNvciwgJnJlc3QsIGNodW5rKTsKKyAgICAgICAgICAg
IGJvb2wgc3VjY2VzcyA9IGFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcihudWxsT3JHbG9iYWxP
YmplY3RGb3JPT00sIHZtLCBIZWFwQmlnSW50SW1wbCB7ICpkaXZpZGVuZCB9LCBjaHVua0Rpdmlz
b3IsICZyZXN0LCBjaHVuayk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgICAgICAgICAgZGl2aWRlbmQgPSAmcmVzdDsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaHVua0NoYXJzOyBpKyspIHsKICAg
ICAgICAgICAgICAgICByZXN1bHRTdHJpbmcuYXBwZW5kKHJhZGl4RGlnaXRzW2NodW5rICUgcmFk
aXhdKTsKQEAgLTIxODEsNyArMjI5Miw3IEBAIFN0cmluZyBKU0JpZ0ludDo6dG9TdHJpbmdHZW5l
cmljKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqCiAgICAg
cmV0dXJuIFN0cmluZ0ltcGw6OmFkb3B0KFdURk1vdmUocmVzdWx0U3RyaW5nKSk7CiB9CiAKLUpT
QmlnSW50KiBKU0JpZ0ludDo6cmlnaHRUcmltKFZNJiB2bSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6
cmlnaHRUcmltKEpTR2xvYmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIFZNJiB2
bSkKIHsKICAgICBpZiAoaXNaZXJvKCkpIHsKICAgICAgICAgQVNTRVJUKCFzaWduKCkpOwpAQCAt
MjE5MywyMiArMjMwNCwzNiBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OnJpZ2h0VHJpbShWTSYgdm0p
CiAgICAgICAgIG5vblplcm9JbmRleC0tOwogCiAgICAgaWYgKG5vblplcm9JbmRleCA8IDApCi0g
ICAgICAgIHJldHVybiBjcmVhdGVaZXJvKHZtKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8o
bnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCB2bSk7CiAKICAgICBpZiAobm9uWmVyb0luZGV4ID09
IHN0YXRpY19jYXN0PGludD4obV9sZW5ndGggLSAxKSkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAK
ICAgICB1bnNpZ25lZCBuZXdMZW5ndGggPSBub25aZXJvSW5kZXggKyAxOwotICAgIEpTQmlnSW50
KiB0cmltbWVkQmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgbmV3TGVuZ3Ro
KTsKLSAgICBzdGQ6OmNvcHkoZGF0YVN0b3JhZ2UoKSwgZGF0YVN0b3JhZ2UoKSArIG5ld0xlbmd0
aCwgdHJpbW1lZEJpZ0ludC0+ZGF0YVN0b3JhZ2UoKSk7IAorICAgIEpTQmlnSW50KiB0cmltbWVk
QmlnSW50ID0gY3JlYXRlV2l0aExlbmd0aChudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZtLCBu
ZXdMZW5ndGgpOworICAgIGlmIChVTkxJS0VMWSghdHJpbW1lZEJpZ0ludCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIHN0ZDo6Y29weShkYXRhU3RvcmFnZSgpLCBkYXRhU3RvcmFnZSgp
ICsgbmV3TGVuZ3RoLCB0cmltbWVkQmlnSW50LT5kYXRhU3RvcmFnZSgpKTsKIAogICAgIHRyaW1t
ZWRCaWdJbnQtPnNldFNpZ24odGhpcy0+c2lnbigpKTsKIAogICAgIHJldHVybiB0cmltbWVkQmln
SW50OwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmFsbG9jYXRlRm9yKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgdW5zaWduZWQgcmFkaXgsIHVuc2lnbmVkIGNoYXJjb3Vu
dCkKK0pTQmlnSW50KiBKU0JpZ0ludDo6cmlnaHRUcmltKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCit7CisgICAgcmV0dXJuIHJpZ2h0VHJpbShnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dC0+dm0oKSk7Cit9CisKK0pTQmlnSW50KiBKU0JpZ0ludDo6dHJ5UmlnaHRUcmltKFZNJiB2bSkK
K3sKKyAgICByZXR1cm4gcmlnaHRUcmltKG51bGxwdHIsIHZtKTsKK30KKworSlNCaWdJbnQqIEpT
QmlnSW50OjphbGxvY2F0ZUZvcihKU0dsb2JhbE9iamVjdCogbnVsbE9yR2xvYmFsT2JqZWN0Rm9y
T09NLCBWTSYgdm0sIHVuc2lnbmVkIHJhZGl4LCB1bnNpZ25lZCBjaGFyY291bnQpCiB7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgQVNTRVJUKDIgPD0g
cmFkaXggJiYgcmFkaXggPD0gMzYpOwogCiAgICAgc2l6ZV90IGJpdHNQZXJDaGFyID0gbWF4Qml0
c1BlckNoYXJUYWJsZVtyYWRpeF07CkBAIC0yMjIyLDE3ICsyMzQ3LDE0IEBAIEpTQmlnSW50KiBK
U0JpZ0ludDo6YWxsb2NhdGVGb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZt
LCB1bnNpZ25lZCByCiAgICAgICAgIGlmIChiaXRzTWluIDw9IHN0YXRpY19jYXN0PHNpemVfdD4o
bWF4SW50KSkgewogICAgICAgICAgICAgLy8gRGl2aWRlIGJ5IGtEaWdpdHNCaXRzLCByb3VuZGlu
ZyB1cC4KICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IChiaXRzTWluICsgZGlnaXRCaXRz
IC0gMSkgLyBkaWdpdEJpdHM7Ci0gICAgICAgICAgICBpZiAobGVuZ3RoIDw9IG1heExlbmd0aCkg
ewotICAgICAgICAgICAgICAgIEpTQmlnSW50KiByZXN1bHQgPSBKU0JpZ0ludDo6Y3JlYXRlV2l0
aExlbmd0aFVuY2hlY2tlZCh2bSwgbGVuZ3RoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxlbmd0aCA8PSBtYXhMZW5ndGgp
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjcmVhdGVXaXRoTGVu
Z3RoKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSwgdm0sIGxlbmd0aCkpOwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgaWYgKGdsb2JhbE9iamVjdCkgewotICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9i
YWxPYmplY3QsIHNjb3BlLCAiQmlnSW50IGdlbmVyYXRlZCBmcm9tIHRoaXMgb3BlcmF0aW9uIGlz
IHRvbyBiaWciX3MpOwotICAgIH0KKyAgICBpZiAobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NKQor
ICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCBz
Y29wZSwgIkJpZ0ludCBnZW5lcmF0ZWQgZnJvbSB0aGlzIG9wZXJhdGlvbiBpcyB0b28gYmlnIl9z
KTsKKwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC0yMjkwLDE3ICsyNDEyLDE3IEBAIEpT
VmFsdWUgSlNCaWdJbnQ6OnBhcnNlSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENo
YXJUeXBlKiAgZGF0YSwgdW5zaWduCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4K
LUpTVmFsdWUgSlNCaWdJbnQ6OnBhcnNlSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFZNJiB2bSwgQ2hhclR5cGUqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnRJ
bmRleCwgdW5zaWduZWQgcmFkaXgsIEVycm9yUGFyc2VNb2RlIGVycm9yUGFyc2VNb2RlLCBQYXJz
ZUludFNpZ24gc2lnbiwgUGFyc2VJbnRNb2RlIHBhcnNlTW9kZSkKK0pTVmFsdWUgSlNCaWdJbnQ6
OnBhcnNlSW50KEpTR2xvYmFsT2JqZWN0KiBudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIFZNJiB2
bSwgQ2hhclR5cGUqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3RhcnRJbmRleCwg
dW5zaWduZWQgcmFkaXgsIEVycm9yUGFyc2VNb2RlIGVycm9yUGFyc2VNb2RlLCBQYXJzZUludFNp
Z24gc2lnbiwgUGFyc2VJbnRNb2RlIHBhcnNlTW9kZSkKIHsKICAgICBBU1NFUlQobGVuZ3RoID49
IDApOwogICAgIHVuc2lnbmVkIHAgPSBzdGFydEluZGV4OwogCi0gICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotCiAgICAgaWYgKHBhcnNlTW9kZSAhPSBQYXJzZUludE1v
ZGU6OkFsbG93RW1wdHlTdHJpbmcgJiYgc3RhcnRJbmRleCA9PSBsZW5ndGgpIHsKLSAgICAgICAg
QVNTRVJUKGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIGlmIChlcnJvclBhcnNlTW9kZSA9PSBFcnJv
clBhcnNlTW9kZTo6VGhyb3dFeGNlcHRpb25zKQotICAgICAgICAgICAgdGhyb3dWTUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVN5bnRheEVycm9yKGdsb2JhbE9iamVjdCwgIkZhaWxl
ZCB0byBwYXJzZSBTdHJpbmcgdG8gQmlnSW50IikpOworICAgICAgICBBU1NFUlQobnVsbE9yR2xv
YmFsT2JqZWN0Rm9yT09NKTsKKyAgICAgICAgaWYgKGVycm9yUGFyc2VNb2RlID09IEVycm9yUGFy
c2VNb2RlOjpUaHJvd0V4Y2VwdGlvbnMpIHsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgICAgIHRocm93Vk1FcnJvcihudWxsT3JHbG9i
YWxPYmplY3RGb3JPT00sIHNjb3BlLCBjcmVhdGVTeW50YXhFcnJvcihudWxsT3JHbG9iYWxPYmpl
Y3RGb3JPT00sICJGYWlsZWQgdG8gcGFyc2UgU3RyaW5nIHRvIEJpZ0ludCIpKTsKKyAgICAgICAg
fQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIH0KIApAQCAtMjMxOSw3ICsyNDQxLDcg
QEAgSlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgVk0mIHZtLCBDaGFyVHlwZSogZGF0YSwKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgICAgIHJl
dHVybiBqc0JpZ0ludDMyKDApOwogI2Vsc2UKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8odm0p
OworICAgICAgICByZXR1cm4gY3JlYXRlWmVybyhudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sIHZt
KTsKICNlbmRpZgogICAgIH0KIApAQCAtMjQxNCw4ICsyNTM2LDkgQEAgSlNWYWx1ZSBKU0JpZ0lu
dDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBDaGFyVHlw
ZSogZGF0YSwKICAgICAgICAgICAgICAgICBkaWdpdCArPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
ZGF0YVtwXSAtICdBJyArIDEwKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAg
IGlmIChlcnJvclBhcnNlTW9kZSA9PSBFcnJvclBhcnNlTW9kZTo6VGhyb3dFeGNlcHRpb25zKSB7
Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOwotICAgICAgICAgICAg
ICAgICAgICB0aHJvd1ZNRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgY3JlYXRlU3ludGF4RXJy
b3IoZ2xvYmFsT2JqZWN0LCAiRmFpbGVkIHRvIHBhcnNlIFN0cmluZyB0byBCaWdJbnQiKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG51bGxPckdsb2JhbE9iamVjdEZvck9PTSk7Cisg
ICAgICAgICAgICAgICAgICAgIHRocm93Vk1FcnJvcihudWxsT3JHbG9iYWxPYmplY3RGb3JPT00s
IHNjb3BlLCBjcmVhdGVTeW50YXhFcnJvcihudWxsT3JHbG9iYWxPYmplY3RGb3JPT00sICJGYWls
ZWQgdG8gcGFyc2UgU3RyaW5nIHRvIEJpZ0ludCIpKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgICAgIH0KQEAgLTI0MzMsMTMg
KzI1NTYsMTEgQEAgSlNWYWx1ZSBKU0JpZ0ludDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgVk0mIHZtLCBDaGFyVHlwZSogZGF0YSwKICNpZiBVU0UoQklHSU5UMzIpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+
KG1heWJlUmVzdWx0KSk7CiAjZWxzZQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNCaWdJ
bnQ6OmNyZWF0ZUZyb20odm0sIHN0YXRpY19jYXN0PGludDMyX3Q+KG1heWJlUmVzdWx0KSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShudWxsT3JHbG9i
YWxPYmplY3RGb3JPT00sIHZtLCBzdGF0aWNfY2FzdDxpbnQzMl90PihtYXliZVJlc3VsdCkpOwog
I2VuZGlmCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgaGVh
cFJlc3VsdCA9IGFsbG9jYXRlRm9yKGdsb2JhbE9iamVjdCwgdm0sIHJhZGl4LCBpbml0aWFsTGVu
Z3RoKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTVmFsdWUoKSk7
Ci0gICAgICAgICAgICAvLyByZXN1bHQgY2FuIHN0aWxsIGJlIG51bGwgaWYgd2UgZG9uJ3QgaGF2
ZSBhY2Nlc3MgdG8gZ2xvYmFsIG9iamVjdCwgYXMgYWxsb2NhdGVGb3IgY2Fubm90IHRocm93IGFu
IGV4Y2VwdGlvbiBpbiB0aGF0IGNhc2UuCisgICAgICAgICAgICBoZWFwUmVzdWx0ID0gYWxsb2Nh
dGVGb3IobnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09NLCB2bSwgcmFkaXgsIGluaXRpYWxMZW5ndGgp
OwogICAgICAgICAgICAgaWYgKCFoZWFwUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlKCk7CiAgICAgICAgICAgICBoZWFwUmVzdWx0LT5pbml0aWFsaXplKEluaXRpYWxpemF0
aW9uVHlwZTo6V2l0aFplcm8pOwpAQCAtMjQ1MSw3ICsyNTcyLDcgQEAgSlNWYWx1ZSBKU0JpZ0lu
dDo6cGFyc2VJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBDaGFyVHlw
ZSogZGF0YSwKICAgICB9CiAKICAgICBoZWFwUmVzdWx0LT5zZXRTaWduKHNpZ24gPT0gUGFyc2VJ
bnRTaWduOjpTaWduZWQpOwotICAgIHJldHVybiBoZWFwUmVzdWx0LT5yaWdodFRyaW0odm0pOwor
ICAgIHJldHVybiBoZWFwUmVzdWx0LT5yaWdodFRyaW0obnVsbE9yR2xvYmFsT2JqZWN0Rm9yT09N
LCB2bSk7CiB9CiAKIEpTT2JqZWN0KiBKU0JpZ0ludDo6dG9PYmplY3QoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkgY29uc3QKQEAgLTI3MzgsMTEgKzI4NTksMTIgQEAgdGVtcGxhdGUgPHR5
cGVuYW1lIEJpZ0ludEltcGw+CiBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YXNJbnRO
SW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfdCBuLCBCaWdJbnRJbXBs
IGJpZ0ludCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKGJpZ0ludC5pc1plcm8o
KSkKICAgICAgICAgcmV0dXJuIGJpZ0ludDsKICAgICBpZiAobiA9PSAwKQotICAgICAgICByZXR1
cm4gemVyb0ltcGwodm0pOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHplcm9J
bXBsKGdsb2JhbE9iamVjdCkpOwogCiAgICAgdWludDY0X3QgbmVlZGVkTGVuZ3RoID0gKG4gKyBk
aWdpdEJpdHMgLSAxKSAvIGRpZ2l0Qml0czsKICAgICB1aW50NjRfdCBsZW5ndGggPSBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oYmlnSW50Lmxlbmd0aCgpKTsKQEAgLTI3NjYsMjMgKzI4ODgsMjMgQEAg
SlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFzSW50TkltcGwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgdWludDY0X3QKICAgICBBU1NFUlQobiA8PSBJTlQzMl9NQVgpOwogICAg
IGludDMyX3QgTiA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG4pOwogICAgIGlmICghaGFzQml0KQot
ICAgICAgICByZXR1cm4gdHJ1bmNhdGVUb05CaXRzKHZtLCBOLCBiaWdJbnQpOworICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHRydW5jYXRlVG9OQml0cyhnbG9iYWxPYmplY3QsIE4s
IGJpZ0ludCkpOwogICAgIGlmICghYmlnSW50LnNpZ24oKSkKLSAgICAgICAgcmV0dXJuIHRydW5j
YXRlQW5kU3ViRnJvbVBvd2VyT2ZUd28odm0sIE4sIGJpZ0ludCwgdHJ1ZSk7CisgICAgICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byhnbG9i
YWxPYmplY3QsIE4sIGJpZ0ludCwgdHJ1ZSkpOwogCiAgICAgLy8gTmVnYXRpdmUgbnVtYmVycyBt
dXN0IHN1YnRyYWN0IGZyb20gMl5uLCBleGNlcHQgZm9yIHRoZSBzcGVjaWFsIGNhc2UKICAgICAv
LyBkZXNjcmliZWQgYWJvdmUuCiAgICAgaWYgKCh0b3BEaWdpdCAmIChjb21wYXJlRGlnaXQgLSAx
KSkgPT0gMCkgewogICAgICAgICBmb3IgKGludDMyX3QgaSA9IHN0YXRpY19jYXN0PGludDMyX3Q+
KG5lZWRlZExlbmd0aCkgLSAyOyBpID49IDA7IGktLSkgewogICAgICAgICAgICAgaWYgKGJpZ0lu
dC5kaWdpdChpKSAhPSAwKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVuY2F0ZUFuZFN1YkZy
b21Qb3dlck9mVHdvKHZtLCBOLCBiaWdJbnQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIHRydW5jYXRlQW5kU3ViRnJvbVBvd2VyT2ZUd28oZ2xvYmFs
T2JqZWN0LCBOLCBiaWdJbnQsIGZhbHNlKSk7CiAgICAgICAgIH0KICAgICAgICAgLy8gVHJ1bmNh
dGlvbiBpcyBuby1vcCBpZiBiaWdJbnQgPT0gLTJeKG4tMSkuCiAgICAgICAgIGlmIChsZW5ndGgg
PT0gbmVlZGVkTGVuZ3RoICYmIHRvcERpZ2l0ID09IGNvbXBhcmVEaWdpdCkKICAgICAgICAgICAg
IHJldHVybiBiaWdJbnQ7Ci0gICAgICAgIHJldHVybiB0cnVuY2F0ZVRvTkJpdHModm0sIE4sIGJp
Z0ludCk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgdHJ1bmNhdGVUb05CaXRz
KGdsb2JhbE9iamVjdCwgTiwgYmlnSW50KSk7CiAgICAgfQotICAgIHJldHVybiB0cnVuY2F0ZUFu
ZFN1YkZyb21Qb3dlck9mVHdvKHZtLCBOLCBiaWdJbnQsIGZhbHNlKTsKKyAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIHRydW5jYXRlQW5kU3ViRnJvbVBvd2VyT2ZUd28oZ2xvYmFsT2JqZWN0
LCBOLCBiaWdJbnQsIGZhbHNlKSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBs
PgpAQCAtMjc5NCw3ICsyOTE2LDcgQEAgSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFz
VWludE5JbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF8KICAgICBpZiAo
YmlnSW50LmlzWmVybygpKQogICAgICAgICByZXR1cm4gYmlnSW50OwogICAgIGlmIChuID09IDAp
Ci0gICAgICAgIHJldHVybiB6ZXJvSW1wbCh2bSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgemVyb0ltcGwoZ2xvYmFsT2JqZWN0KSk7CiAKICAgICAvLyBJZiBiaWdJbnQgaXMg
bmVnYXRpdmUsIHNpbXVsYXRlIHR3bydzIGNvbXBsZW1lbnQgcmVwcmVzZW50YXRpb24uCiAgICAg
aWYgKGJpZ0ludC5zaWduKCkpIHsKQEAgLTI4MDIsNyArMjkyNCw3IEBAIEpTQmlnSW50OjpJbXBs
UmVzdWx0IEpTQmlnSW50Ojphc1VpbnROSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCB1aW50NjRfCiAgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgIkJpZ0ludCBnZW5lcmF0ZWQgZnJvbSB0aGlzIG9wZXJhdGlvbiBpcyB0b28gYmln
Il9zKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKHZtLCBzdGF0aWNfY2FzdDxpbnQzMl90
PihuKSwgYmlnSW50LCBmYWxzZSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
dHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byhnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KG4pLCBiaWdJbnQsIGZhbHNlKSk7CiAgICAgfQogCiAgICAgLy8gSWYgYmlnSW50IGlz
IHBvc2l0aXZlIGFuZCBoYXMgdXAgdG8gbiBiaXRzLCByZXR1cm4gaXQgZGlyZWN0bHkuCkBAIC0y
ODI0LDE4ICsyOTQ2LDIyIEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojphc1VpbnRO
SW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfCiAKICAgICAvLyBPdGhl
cndpc2UsIHRydW5jYXRlLgogICAgIEFTU0VSVChuIDw9IElOVDMyX01BWCk7Ci0gICAgcmV0dXJu
IHRydW5jYXRlVG9OQml0cyh2bSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obiksIGJpZ0ludCk7Cisg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCB0cnVuY2F0ZVRvTkJpdHMoZ2xvYmFsT2JqZWN0
LCBzdGF0aWNfY2FzdDxpbnQzMl90PihuKSwgYmlnSW50KSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBCaWdJbnRJbXBsPgotSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnRydW5jYXRl
VG9OQml0cyhWTSYgdm0sIGludDMyX3QgbiwgQmlnSW50SW1wbCBiaWdJbnQpCitKU0JpZ0ludDo6
SW1wbFJlc3VsdCBKU0JpZ0ludDo6dHJ1bmNhdGVUb05CaXRzKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGludDMyX3QgbiwgQmlnSW50SW1wbCBiaWdJbnQpCiB7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKwogICAgIEFTU0VSVChuICE9IDApOwogICAgIEFTU0VSVChiaWdJbnQubGVuZ3RoKCkg
PiBuIC8gZGlnaXRCaXRzKTsKIAogICAgIGludDMyX3QgbmVlZGVkRGlnaXRzID0gKG4gKyAoZGln
aXRCaXRzIC0gMSkpIC8gZGlnaXRCaXRzOwogICAgIEFTU0VSVChuZWVkZWREaWdpdHMgPD0gc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oYmlnSW50Lmxlbmd0aCgpKSk7Ci0gICAgSlNCaWdJbnQqIHJlc3Vs
dCA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIG5lZWRlZERpZ2l0cyk7CisgICAgSlNC
aWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCBuZWVkZWREaWdp
dHMpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIEFTU0VS
VChyZXN1bHQpOwogCiAgICAgLy8gQ29weSBhbGwgZGlnaXRzIGV4Y2VwdCB0aGUgTVNELgpAQCAt
Mjg1MSwxOSArMjk3NywyMyBAQCBKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6dHJ1bmNh
dGVUb05CaXRzKFZNJiB2bSwgaW50MzJfdCBuLCBCaWdJbnRJbXBsIGJpZwogICAgIH0KICAgICBy
ZXN1bHQtPnNldERpZ2l0KGxhc3QsIG1zZCk7CiAgICAgcmVzdWx0LT5zZXRTaWduKGJpZ0ludC5z
aWduKCkpOwotICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CisgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QpKTsKIH0KIAog
Ly8gU3VidHJhY3RzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBuIGJpdHMgb2YgYWJzKGJpZ0ludCkg
ZnJvbSAyXm4uCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KLUpTQmlnSW50OjpJbXBs
UmVzdWx0IEpTQmlnSW50Ojp0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKFZNJiB2bSwgaW50
MzJfdCBuLCBCaWdJbnRJbXBsIGJpZ0ludCwgYm9vbCByZXN1bHRTaWduKQorSlNCaWdJbnQ6Oklt
cGxSZXN1bHQgSlNCaWdJbnQ6OnRydW5jYXRlQW5kU3ViRnJvbVBvd2VyT2ZUd28oSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBuLCBCaWdJbnRJbXBsIGJpZ0ludCwgYm9vbCBy
ZXN1bHRTaWduKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBBU1NFUlQobiAhPSAwKTsK
ICAgICBBU1NFUlQobiA8PSBzdGF0aWNfY2FzdDxpbnQzMl90PihtYXhMZW5ndGhCaXRzKSk7CiAK
ICAgICBpbnQzMl90IG5lZWRlZERpZ2l0cyA9IChuICsgKGRpZ2l0Qml0cyAtIDEpKSAvIGRpZ2l0
Qml0czsKICAgICBBU1NFUlQobmVlZGVkRGlnaXRzIDw9IHN0YXRpY19jYXN0PGludDMyX3Q+KG1h
eExlbmd0aCkpOyAvLyBGb2xsb3dzIGZyb20gbiA8PSBtYXhMZW5ndGhCaXRzLgotICAgIEpTQmln
SW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCBuZWVkZWREaWdpdHMp
OworICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwg
bmVlZGVkRGlnaXRzKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsK
ICAgICBBU1NFUlQocmVzdWx0KTsKIAogICAgIC8vIFByb2Nlc3MgYWxsIGRpZ2l0cyBleGNlcHQg
dGhlIE1TRC4KQEAgLTI5MTAsNyArMzA0MCw3IEBAIEpTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmln
SW50Ojp0cnVuY2F0ZUFuZFN1YkZyb21Qb3dlck9mVHdvKFZNJiB2bSwgaW50MzJfdCBuLCBCCiAg
ICAgfQogICAgIHJlc3VsdC0+c2V0RGlnaXQobGFzdCwgcmVzdWx0TVNEKTsKICAgICByZXN1bHQt
PnNldFNpZ24ocmVzdWx0U2lnbik7Ci0gICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9i
amVjdCkpOwogfQogCiBKU1ZhbHVlIEpTQmlnSW50Ojphc0ludE4oSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgdWludDY0X3QgbiwgSlNCaWdJbnQqIGJpZ0ludCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0JpZ0ludC5oCmluZGV4IDZiZjhhYjJhNTY3MTlmNDdlNmI3N2E4MDk4
MDE3ZjRhYmVmYWQzODcuLjAxNmMxOWY3NGE1YTQ4ZjUxMjYzNzM5ZjU4ZDdiNzE0NDJlOGY4ZjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaApAQCAtNjUsMTYgKzY1
LDIwIEBAIGNsYXNzIEpTQmlnSW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgc3RhdGlj
IHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCosIFZNJik7CiAKICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90
eXBlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZVplcm8o
Vk0mKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNCaWdJbnQqIHRyeUNyZWF0ZVdp
dGhMZW5ndGgoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBsZW5ndGgpOwotICAgIHN0YXRpYyBK
U0JpZ0ludCogY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZChWTSYsIHVuc2lnbmVkIGxlbmd0aCk7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVaZXJvKEpTR2xv
YmFsT2JqZWN0Kik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQmlnSW50KiB0cnlD
cmVhdGVaZXJvKFZNJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQmlnSW50KiB0
cnlDcmVhdGVXaXRoTGVuZ3RoKFZNJiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZVdpdGhMZW5ndGgoSlNHbG9iYWxPYmplY3Qq
LCB1bnNpZ25lZCBsZW5ndGgpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTQmln
SW50KiBjcmVhdGVGcm9tKFZNJiwgaW50MzJfdCB2YWx1ZSk7Ci0gICAgc3RhdGljIEpTQmlnSW50
KiBjcmVhdGVGcm9tKFZNJiwgdWludDMyX3QgdmFsdWUpOwotICAgIHN0YXRpYyBKU0JpZ0ludCog
Y3JlYXRlRnJvbShWTSYsIGludDY0X3QgdmFsdWUpOwotICAgIHN0YXRpYyBKU0JpZ0ludCogY3Jl
YXRlRnJvbShWTSYsIHVpbnQ2NF90IHZhbHVlKTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0
ZUZyb20oVk0mLCBib29sIHZhbHVlKTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20o
Vk0mLCBkb3VibGUgdmFsdWUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0JpZ0lu
dCogY3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCosIGludDMyX3QgdmFsdWUpOworICAgIHN0YXRp
YyBKU0JpZ0ludCogdHJ5Q3JlYXRlRnJvbShWTSYsIGludDMyX3QgdmFsdWUpOworICAgIHN0YXRp
YyBKU0JpZ0ludCogY3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCosIHVpbnQzMl90IHZhbHVlKTsK
KyAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3QqLCBpbnQ2NF90
IHZhbHVlKTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb20oSlNHbG9iYWxPYmplY3Qq
LCB1aW50NjRfdCB2YWx1ZSk7CisgICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9tKEpTR2xv
YmFsT2JqZWN0KiwgYm9vbCB2YWx1ZSk7CisgICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVGcm9t
KEpTR2xvYmFsT2JqZWN0KiwgZG91YmxlIHZhbHVlKTsKKworICAgIHN0YXRpYyBKU0JpZ0ludCog
Y3JlYXRlRnJvbShKU0dsb2JhbE9iamVjdCosIFZNJiwgaW50MzJfdCB2YWx1ZSk7CiAKICAgICBz
dGF0aWMgc2l6ZV90IG9mZnNldE9mTGVuZ3RoKCkKICAgICB7CkBAIC05MCwyMSArOTQsMjEgQEAg
Y2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAgIHVuc2lnbmVkIGxl
bmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAKLSAgICBzdGF0aWMgSlNWYWx1ZSBt
YWtlSGVhcEJpZ0ludE9yQmlnSW50MzIoVk0mIHZtLCBpbnQ2NF90IHZhbHVlKQorICAgIHN0YXRp
YyBKU1ZhbHVlIG1ha2VIZWFwQmlnSW50T3JCaWdJbnQzMihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBpbnQ2NF90IHZhbHVlKQogICAgIHsKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgICAg
IGlmICh2YWx1ZSA8PSBJTlRfTUFYICYmIHZhbHVlID49IElOVF9NSU4pCiAgICAgICAgICAgICBy
ZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90Pih2YWx1ZSkpOwogI2VuZGlmCi0g
ICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgdmFsdWUpOworICAgICAgICBy
ZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIEpTVmFsdWUgbWFrZUhlYXBCaWdJbnRPckJpZ0ludDMyKFZNJiB2bSwgZG91
YmxlIHZhbHVlKQorICAgIHN0YXRpYyBKU1ZhbHVlIG1ha2VIZWFwQmlnSW50T3JCaWdJbnQzMihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBkb3VibGUgdmFsdWUpCiAgICAgewogICAgICAg
ICBBU1NFUlQoaXNJbnRlZ2VyKHZhbHVlKSk7CiAgICAgICAgIGlmIChzdGQ6OmFicyh2YWx1ZSkg
PD0gbWF4U2FmZUludGVnZXIoKSkKLSAgICAgICAgICAgIHJldHVybiBtYWtlSGVhcEJpZ0ludE9y
QmlnSW50MzIodm0sIHN0YXRpY19jYXN0PGludDY0X3Q+KHZhbHVlKSk7Ci0gICAgICAgIHJldHVy
biBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIG1h
a2VIZWFwQmlnSW50T3JCaWdJbnQzMihnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PGludDY0X3Q+
KHZhbHVlKSk7CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbShnbG9iYWxPYmpl
Y3QsIHZhbHVlKTsKICAgICB9CiAKICAgICBlbnVtIGNsYXNzIEVycm9yUGFyc2VNb2RlIHsKQEAg
LTE1OCwxNyArMTYyLDEzIEBAIGNsYXNzIEpTQmlnSW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7
CiAKICAgICBDb21wYXJpc29uUmVzdWx0IHN0YXRpYyBjb21wYXJlVG9Eb3VibGUoSlNCaWdJbnQq
IHgsIGRvdWJsZSB5KTsKIAotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTVmFsdWUgYXNJbnQz
Mk9ySGVhcENlbGwoVk0mIHZtLCBpbnQ2NF90IHZhbHVlKQorICAgIEFMV0FZU19JTkxJTkUgc3Rh
dGljIEpTVmFsdWUgYXNJbnQzMk9ySGVhcENlbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgaW50NjRfdCB2YWx1ZSkKICAgICB7CiAjaWYgVVNFKEJJR0lOVDMyKQogICAgICAgICBpZiAo
c3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSA9PSB2YWx1
ZSkKICAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KHZh
bHVlKSk7CiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb20odm0sIHZhbHVlKTsKLSAg
ICB9Ci0gICAgQUxXQVlTX0lOTElORSBzdGF0aWMgSlNWYWx1ZSBhc0ludDMyT3JIZWFwQ2VsbChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQ2NF90IHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGdsb2JhbE9iamVjdC0+dm0oKSwgdmFsdWUpOwor
ICAgICAgICByZXR1cm4gY3JlYXRlRnJvbShnbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICB9CiAK
IHByaXZhdGU6CkBAIC0xODQsNiArMTg0LDggQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwgOiBwdWJs
aWMgSlNDZWxsIHsKICAgICAgICAgSlNWYWx1ZSBwYXlsb2FkOwogICAgIH07CiBwcml2YXRlOgor
ICAgIHN0YXRpYyBKU0JpZ0ludCogY3JlYXRlV2l0aExlbmd0aChKU0dsb2JhbE9iamVjdCosIFZN
JiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZVplcm8oSlNH
bG9iYWxPYmplY3QqLCBWTSYpOwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwx
LCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KICAgICBzdGF0aWMgSW1wbFJlc3VsdCBleHBvbmVudGlh
dGVJbXBsKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgYmFzZSwgQmlnSW50SW1wbDIgZXhw
b25lbnQpOwpAQCAtMjEwLDcgKzIxMiw3IEBAIGNsYXNzIEpTQmlnSW50IGZpbmFsIDogcHVibGlj
IEpTQ2VsbCB7CiAgICAgc3RhdGljIEltcGxSZXN1bHQgcmVtYWluZGVySW1wbChKU0dsb2JhbE9i
amVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOwogCiAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEJpZ0ludEltcGw+Ci0gICAgc3RhdGljIEltcGxSZXN1bHQgdW5hcnlNaW51c0ltcGwo
Vk0mLCBCaWdJbnRJbXBsIHgpOworICAgIHN0YXRpYyBJbXBsUmVzdWx0IHVuYXJ5TWludXNJbXBs
KEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbCB4KTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CiAgICAgc3RhdGljIEltcGxSZXN1
bHQgYml0d2lzZUFuZEltcGwoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJ
bXBsMiB5KTsKQEAgLTI5NSw3ICsyOTcsNyBAQCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1Ymxp
YyBKU0NlbGwgewogICAgIHN0YXRpYyBKU1ZhbHVlIGRpdmlkZShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSkKICAgICB7CiAgICAgICAgIGlmICgheSkg
ewotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZ2xvYmFsT2Jq
ZWN0LT52bSgpKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KGdldFZNKGdsb2JhbE9iamVjdCkpOwogICAgICAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICIwIGlzIGFuIGludmFsaWQgZGl2aXNvciB2YWx1ZS4iX3MpOwogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgfQpAQCAtMzEwLDcgKzMxMiw3IEBA
IGNsYXNzIEpTQmlnSW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgc3RhdGljIEpTVmFs
dWUgcmVtYWluZGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgaW50
MzJfdCB5KQogICAgIHsKICAgICAgICAgaWYgKCF5KSB7Ci0gICAgICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRShnbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZ2V0Vk0oZ2xvYmFsT2JqZWN0KSk7CiAg
ICAgICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIjAgaXMgYW4g
aW52YWxpZCBkaXZpc29yIHZhbHVlLiJfcyk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OwogICAgICAgICB9CkBAIC0zMTgsMTEgKzMyMCwxMSBAQCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6
IHB1YmxpYyBKU0NlbGwgewogICAgIH0KICNlbmRpZgogCi0gICAgc3RhdGljIEpTVmFsdWUgdW5h
cnlNaW51cyhWTSYsIEpTQmlnSW50KiB4KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSB1bmFyeU1pbnVz
KEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgpOwogI2lmIFVTRShCSUdJTlQzMikKLSAgICBz
dGF0aWMgSlNWYWx1ZSB1bmFyeU1pbnVzKFZNJiB2bSwgaW50MzJfdCB4KQorICAgIHN0YXRpYyBK
U1ZhbHVlIHVuYXJ5TWludXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKHZtLCAtc3RhdGljX2Nh
c3Q8aW50NjRfdD4oeCkpOworICAgICAgICByZXR1cm4gYXNJbnQzMk9ySGVhcENlbGwoZ2xvYmFs
T2JqZWN0LCAtc3RhdGljX2Nhc3Q8aW50NjRfdD4oeCkpOwogICAgIH0KICNlbmRpZgogCkBAIC00
MjMsMTIgKzQyNSwxNSBAQCBjbGFzcyBKU0JpZ0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewog
CiAgICAgRGlnaXQgZGlnaXQodW5zaWduZWQpOwogICAgIHZvaWQgc2V0RGlnaXQodW5zaWduZWQs
IERpZ2l0KTsgLy8gVXNlIG9ubHkgd2hlbiBpbml0aWFsaXppbmcuCi0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgSlNCaWdJbnQqIHJpZ2h0VHJpbShWTSYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEpT
QmlnSW50KiByaWdodFRyaW0oSlNHbG9iYWxPYmplY3QqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBKU0JpZ0ludCogdHJ5UmlnaHRUcmltKFZNJik7CiAKIHByaXZhdGU6CiAgICAgSlNCaWdJbnQo
Vk0mLCBTdHJ1Y3R1cmUqLCBEaWdpdCosIHVuc2lnbmVkIGxlbmd0aCk7CiAKLSAgICBzdGF0aWMg
SlNCaWdJbnQqIGNyZWF0ZUZyb21JbXBsKFZNJiwgdWludDY0X3QgdmFsdWUsIGJvb2wgc2lnbik7
CisgICAgSlNCaWdJbnQqIHJpZ2h0VHJpbShKU0dsb2JhbE9iamVjdCosIFZNJik7CisKKyAgICBz
dGF0aWMgSlNCaWdJbnQqIGNyZWF0ZUZyb21JbXBsKEpTR2xvYmFsT2JqZWN0KiwgdWludDY0X3Qg
dmFsdWUsIGJvb2wgc2lnbik7CiAKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdHNQ
ZXJCeXRlID0gODsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGRpZ2l0Qml0cyA9IHNp
emVvZihEaWdpdCkgKiBiaXRzUGVyQnl0ZTsKQEAgLTQ1NCw3ICs0NTksNyBAQCBjbGFzcyBKU0Jp
Z0ludCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJ
bnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CiAgICAgc3RhdGljIENvbXBhcmlzb25SZXN1
bHQgYWJzb2x1dGVDb21wYXJlKEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOwogICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgotICAgIHN0YXRpYyB2b2lkIGFic29sdXRlRGl2
V2l0aERpZ2l0RGl2aXNvcihWTSYsIEJpZ0ludEltcGwgeCwgRGlnaXQgZGl2aXNvciwgSlNCaWdJ
bnQqKiBxdW90aWVudCwgRGlnaXQmIHJlbWFpbmRlcik7CisgICAgc3RhdGljIGJvb2wgYWJzb2x1
dGVEaXZXaXRoRGlnaXREaXZpc29yKEpTR2xvYmFsT2JqZWN0KiwgVk0mLCBCaWdJbnRJbXBsIHgs
IERpZ2l0IGRpdmlzb3IsIEpTQmlnSW50KiogcXVvdGllbnQsIERpZ2l0JiByZW1haW5kZXIpOwog
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgogICAgIHN0YXRpYyB2b2lkIGludGVy
bmFsTXVsdGlwbHlBZGQoQmlnSW50SW1wbCBzb3VyY2UsIERpZ2l0IGZhY3RvciwgRGlnaXQgc3Vt
bWFuZCwgdW5zaWduZWQsIEpTQmlnSW50KiByZXN1bHQpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBCaWdJbnRJbXBsPgpAQCAtNDg5LDE2ICs0OTQsMTYgQEAgY2xhc3MgSlNCaWdJbnQgZmluYWwg
OiBwdWJsaWMgSlNDZWxsIHsKICAgICB9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmlnSW50
SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyLCB0eXBlbmFtZSBCaXR3aXNlT3A+Ci0gICAgc3Rh
dGljIEpTQmlnSW50KiBhYnNvbHV0ZUJpdHdpc2VPcChWTSYsIEJpZ0ludEltcGwxIHgsIEJpZ0lu
dEltcGwyIHksIEV4dHJhRGlnaXRzSGFuZGxpbmcsIEJpdHdpc2VPcCYmKTsKKyAgICBzdGF0aWMg
SlNCaWdJbnQqIGFic29sdXRlQml0d2lzZU9wKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEg
eCwgQmlnSW50SW1wbDIgeSwgRXh0cmFEaWdpdHNIYW5kbGluZywgQml0d2lzZU9wJiYpOwogCiAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4K
LSAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlQW5kKFZNJiwgQmlnSW50SW1wbDEgeCwgQmln
SW50SW1wbDIgeSk7CisgICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUFuZChKU0dsb2JhbE9i
amVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOwogICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+Ci0gICAgc3RhdGljIEpTQmln
SW50KiBhYnNvbHV0ZU9yKFZNJiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CisgICAg
c3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZU9yKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEg
eCwgQmlnSW50SW1wbDIgeSk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0
eXBlbmFtZSBCaWdJbnRJbXBsMj4KLSAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlQW5kTm90
KFZNJiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CisgICAgc3RhdGljIEpTQmlnSW50
KiBhYnNvbHV0ZUFuZE5vdChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludElt
cGwyIHkpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmln
SW50SW1wbDI+Ci0gICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZVhvcihWTSYsIEJpZ0ludElt
cGwxIHgsIEJpZ0ludEltcGwyIHkpOworICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVYb3Io
SlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKIAogICAgIGVu
dW0gY2xhc3MgU2lnbk9wdGlvbiB7CiAgICAgICAgIFNpZ25lZCwKQEAgLTUzNSwyMCArNTQwLDIw
IEBAIGNsYXNzIEpTQmlnSW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgc3RhdGljIEpT
QmlnSW50KiBhbGxvY2F0ZUZvcihKU0dsb2JhbE9iamVjdCosIFZNJiwgdW5zaWduZWQgcmFkaXgs
IHVuc2lnbmVkIGNoYXJjb3VudCk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1w
bD4KLSAgICBzdGF0aWMgSlNCaWdJbnQqIGNvcHkoVk0mLCBCaWdJbnRJbXBsIHgpOworICAgIHN0
YXRpYyBKU0JpZ0ludCogY29weShKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwgeCk7CiAKICAg
ICB2b2lkIGlucGxhY2VNdWx0aXBseUFkZChEaWdpdCBtdWx0aXBsaWVyLCBEaWdpdCBwYXJ0KTsK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwy
PgogICAgIHN0YXRpYyBJbXBsUmVzdWx0IGFic29sdXRlQWRkKEpTR2xvYmFsT2JqZWN0KiwgQmln
SW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwgYm9vbCByZXN1bHRTaWduKTsKICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgotICAgIHN0YXRp
YyBJbXBsUmVzdWx0IGFic29sdXRlU3ViKFZNJiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIg
eSwgYm9vbCByZXN1bHRTaWduKTsKKyAgICBzdGF0aWMgSW1wbFJlc3VsdCBhYnNvbHV0ZVN1YihK
U0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHksIGJvb2wgcmVzdWx0
U2lnbik7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJp
Z0ludEltcGwyPgogICAgIHN0YXRpYyBJbXBsUmVzdWx0IGxlZnRTaGlmdEJ5QWJzb2x1dGUoSlNH
bG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgogICAgIHN0YXRp
YyBJbXBsUmVzdWx0IHJpZ2h0U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50
SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CiAKLSAgICBzdGF0aWMgSW1wbFJlc3VsdCByaWdodFNo
aWZ0QnlNYXhpbXVtKFZNJiwgYm9vbCBzaWduKTsKKyAgICBzdGF0aWMgSW1wbFJlc3VsdCByaWdo
dFNoaWZ0QnlNYXhpbXVtKEpTR2xvYmFsT2JqZWN0KiwgYm9vbCBzaWduKTsKIAogICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgogICAgIHN0YXRpYyBPcHRpb25hbDxEaWdpdD4gdG9T
aGlmdEFtb3VudChCaWdJbnRJbXBsIHgpOwpAQCAtNTU4LDkgKzU2Myw5IEBAIGNsYXNzIEpTQmln
SW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0lu
dEltcGw+CiAgICAgc3RhdGljIEltcGxSZXN1bHQgYXNVaW50TkltcGwoSlNHbG9iYWxPYmplY3Qq
LCB1aW50NjRfdCwgQmlnSW50SW1wbCk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludElt
cGw+Ci0gICAgc3RhdGljIEltcGxSZXN1bHQgdHJ1bmNhdGVUb05CaXRzKFZNJiwgaW50MzJfdCwg
QmlnSW50SW1wbCk7CisgICAgc3RhdGljIEltcGxSZXN1bHQgdHJ1bmNhdGVUb05CaXRzKEpTR2xv
YmFsT2JqZWN0KiwgaW50MzJfdCwgQmlnSW50SW1wbCk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEJpZ0ludEltcGw+Ci0gICAgc3RhdGljIEltcGxSZXN1bHQgdHJ1bmNhdGVBbmRTdWJGcm9tUG93
ZXJPZlR3byhWTSYsIGludDMyX3QsIEJpZ0ludEltcGwsIGJvb2wgcmVzdWx0U2lnbik7CisgICAg
c3RhdGljIEltcGxSZXN1bHQgdHJ1bmNhdGVBbmRTdWJGcm9tUG93ZXJPZlR3byhKU0dsb2JhbE9i
amVjdCosIGludDMyX3QsIEJpZ0ludEltcGwsIGJvb2wgcmVzdWx0U2lnbik7CiAKICAgICBpbmxp
bmUgc3RhdGljIHNpemVfdCBvZmZzZXRPZkRhdGEoKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKaW5kZXggYTQ1NzcyY2ZlYTQ2NGE5NGVhYWUx
NjBmMjU4NTZiYmYxOTNmOTBiZC4uOWU0NzAzYmI1NjFiOTA0ZWIxM2QyZTg3ZDk4NDc2ZDBjZWY0
ZWYyOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAK
QEAgLTExOCwxOSArMTE4LDIzIEBAIEpTT2JqZWN0KiBKU1ZhbHVlOjp0b09iamVjdFNsb3dDYXNl
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpIGNvbnN0CiAKIEpTVmFsdWUgSlNWYWx1ZTo6
dG9UaGlzU2xvd0Nhc2UoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRUNNQU1vZGUgZWNt
YU1vZGUpIGNvbnN0CiB7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEFTU0VSVCghaXNDZWxs
KCkpOwogCiAgICAgaWYgKGVjbWFNb2RlLmlzU3RyaWN0KCkpCiAgICAgICAgIHJldHVybiAqdGhp
czsKIAogICAgIGlmIChpc0ludDMyKCkgfHwgaXNEb3VibGUoKSkKLSAgICAgICAgcmV0dXJuIGNv
bnN0cnVjdE51bWJlcihnbG9iYWxPYmplY3QsIGFzVmFsdWUoKSk7CisgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgY29uc3RydWN0TnVtYmVyKGdsb2JhbE9iamVjdCwgYXNWYWx1ZSgp
KSk7CiAgICAgaWYgKGlzVHJ1ZSgpIHx8IGlzRmFsc2UoKSkKLSAgICAgICAgcmV0dXJuIGNvbnN0
cnVjdEJvb2xlYW5Gcm9tSW1tZWRpYXRlQm9vbGVhbihnbG9iYWxPYmplY3QsIGFzVmFsdWUoKSk7
CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY29uc3RydWN0Qm9vbGVhbkZyb21J
bW1lZGlhdGVCb29sZWFuKGdsb2JhbE9iamVjdCwgYXNWYWx1ZSgpKSk7CiAjaWYgVVNFKEJJR0lO
VDMyKQogICAgIGlmIChpc0JpZ0ludDMyKCkpIHsKLSAgICAgICAgSlNDZWxsKiBoZWFwQmlnSW50
ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0
LT52bSgpLCBiaWdJbnQzMkFzSW50MzIoKSkpOwotICAgICAgICByZXR1cm4gaGVhcEJpZ0ludC0+
dG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgSlNDZWxsKiBoZWFwQmlnSW50ID0gc3Rh
dGljX2Nhc3Q8SlNDZWxsKj4oSlNCaWdJbnQ6OmNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LCBiaWdJ
bnQzMkFzSW50MzIoKSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGhlYXBCaWdJbnQtPnRvT2JqZWN0
KGdsb2JhbE9iamVjdCkpOwogICAgIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAKaW5kZXggZmE5OGM1MTJmMTQxMzVkMTJhODE1MzNiNTMyZmMzOWQ3NjZiMWFjMS4u
ZDUxMGM0ZTRkOGQyYTI5YmM2MGRmZGFkOTViMmVhNzgyNmZhNzQyYiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtNDcyLDcgKzQ3MiwxMSBAQCBWTTo6Vk0oVk1UeXBlIHZt
VHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgICAgIHNlbnRpbmVsTWFwQnVja2V0KCk7CiAg
ICAgICAgIHNlbnRpbmVsU2V0QnVja2V0KCk7CiAgICAgfQotICAgIGhlYXBCaWdJbnRDb25zdGFu
dE9uZS5zZXQoKnRoaXMsIEpTQmlnSW50OjpjcmVhdGVGcm9tKCp0aGlzLCAxKSk7CisgICAgewor
ICAgICAgICBhdXRvKiBiaWdJbnQgPSBKU0JpZ0ludDo6dHJ5Q3JlYXRlRnJvbSgqdGhpcywgMSk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJpZ0ludCk7CisgICAgICAgIGhlYXBCaWdJbnRDb25z
dGFudE9uZS5zZXQoKnRoaXMsIGJpZ0ludCk7CisgICAgfQogCiAgICAgVGhyZWFkOjpjdXJyZW50
KCkuc2V0Q3VycmVudEF0b21TdHJpbmdUYWJsZShleGlzdGluZ0VudHJ5QXRvbVN0cmluZ1RhYmxl
KTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwCmluZGV4IGI1MjMwMzhkMGFkNWFlN2Y0NTU0MDEyNjA4NjNkNzY5ODY0
MTZlZGYuLjNlYjRjNWQxMDk3NzBkMWJmNTg2Y2I4MDkzMGM0NTQwNDZjMGExZmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNw
cApAQCAtMzAwNyw3ICszMDA3LDExIEBAIGNsYXNzIENsb25lRGVzZXJpYWxpemVyIDogQ2xvbmVC
YXNlIHsKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMigw
KTsKICNlbHNlCi0gICAgICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gSlNCaWdJbnQ6OmNyZWF0
ZVplcm8obV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgICAgIEpTQmlnSW50
KiBiaWdJbnQgPSBKU0JpZ0ludDo6dHJ5Q3JlYXRlWmVybyhtX2xleGljYWxHbG9iYWxPYmplY3Qt
PnZtKCkpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFiaWdJbnQpKSB7CisgICAgICAgICAg
ICAgICAgZmFpbCgpOworICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3co
YmlnSW50KTsKICAgICAgICAgICAgIHJldHVybiBiaWdJbnQ7CiAjZW5kaWYKQEAgLTMwMjgsMjEg
KzMwMzIsMjUgQEAgY2xhc3MgQ2xvbmVEZXNlcmlhbGl6ZXIgOiBDbG9uZUJhc2UgewogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihkaWdp
dDY0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQoZGlnaXQ2NCAhPSAwKTsK
LSAgICAgICAgICAgIEpTQmlnSW50KiBiaWdJbnQgPSBKU0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExl
bmd0aChtX2xleGljYWxHbG9iYWxPYmplY3QsIDEpOworICAgICAgICAgICAgSlNCaWdJbnQqIGJp
Z0ludCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKG1fbGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKSwgMSk7CiAgICAgICAgICAgICBpZiAoIWJpZ0ludCkgewogICAgICAgICAgICAgICAg
IGZhaWwoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgYmlnSW50LT5zZXREaWdpdCgwLCBkaWdpdDY0KTsKICAgICAgICAgICAg
IGJpZ0ludC0+c2V0U2lnbihzaWduKTsKLSAgICAgICAgICAgIGJpZ0ludCA9IGJpZ0ludC0+cmln
aHRUcmltKG1fbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgICAgICBiaWdJbnQg
PSBiaWdJbnQtPnRyeVJpZ2h0VHJpbShtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOworICAg
ICAgICAgICAgaWYgKCFiaWdJbnQpIHsKKyAgICAgICAgICAgICAgICBmYWlsKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1f
Z2NCdWZmZXIuYXBwZW5kV2l0aENyYXNoT25PdmVyZmxvdyhiaWdJbnQpOwogICAgICAgICAgICAg
cmV0dXJuIGJpZ0ludDsKICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIEpTQmlnSW50KiBiaWdJ
bnQgPSBudWxscHRyOwogICAgICAgICBpZiBjb25zdGV4cHIgKHNpemVvZihKU0JpZ0ludDo6RGln
aXQpID09IHNpemVvZih1aW50NjRfdCkpIHsKLSAgICAgICAgICAgIGJpZ0ludCA9IEpTQmlnSW50
Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgbGVuZ3RoSW5VaW50
NjQpOworICAgICAgICAgICAgYmlnSW50ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgo
bV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpLCBsZW5ndGhJblVpbnQ2NCk7CiAgICAgICAgICAg
ICBpZiAoIWJpZ0ludCkgewogICAgICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOwpAQCAtMzA1Niw3ICszMDY0LDcgQEAgY2xhc3MgQ2xvbmVEZXNl
cmlhbGl6ZXIgOiBDbG9uZUJhc2UgewogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgQVNTRVJUKHNpemVvZihKU0JpZ0ludDo6RGlnaXQpID09IHNpemVvZih1aW50
MzJfdCkpOwotICAgICAgICAgICAgYmlnSW50ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5n
dGgobV9sZXhpY2FsR2xvYmFsT2JqZWN0LCBsZW5ndGhJblVpbnQ2NCAqIDIpOworICAgICAgICAg
ICAgYmlnSW50ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgobV9sZXhpY2FsR2xvYmFs
T2JqZWN0LT52bSgpLCBsZW5ndGhJblVpbnQ2NCAqIDIpOwogICAgICAgICAgICAgaWYgKCFiaWdJ
bnQpIHsKICAgICAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKQEAgLTMwNzEsNyArMzA3OSwxMSBAQCBjbGFzcyBDbG9uZURlc2VyaWFsaXplciA6
IENsb25lQmFzZSB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYmlnSW50LT5z
ZXRTaWduKHNpZ24pOwotICAgICAgICBiaWdJbnQgPSBiaWdJbnQtPnJpZ2h0VHJpbShtX2xleGlj
YWxHbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICBiaWdJbnQgPSBiaWdJbnQtPnRyeVJpZ2h0
VHJpbShtX2xleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICBpZiAoIWJpZ0ludCkg
eworICAgICAgICAgICAgZmFpbCgpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAg
ICAgICAgfQogICAgICAgICBtX2djQnVmZmVyLmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3coYmln
SW50KTsKICAgICAgICAgcmV0dXJuIGJpZ0ludDsKICAgICB9CmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDE1ZmVjNzdlODkwYjliZDMyNGYx
ODc2ZGZlZTc3ZjE1Mzc5ZTgyNDYuLmI1M2Y2MzIxZmIzYTQyY2I1ZjdlMmE3M2ZjYjMzMDI0NTIy
MGQ5MDEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjAtMDUtMjkgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtp
QGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBKU0JpZ0ludCBhbGxvY2F0aW9uIHNob3VsZCBi
ZSBncmFjZWZ1bCBmb3IgT09NCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTI1MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHN0cmVzcy9iaWdpbnQtY2FuLXRocm93LW9vbS5qczogQ29waWVkIGZyb20g
SlNUZXN0cy9zdHJlc3MvZ2V0LWZ1bmN0aW9uLXJlYWxtLW5vdC1kb2luZy1yZWN1cnNpb24uanMu
CisgICAgICAgIChjYW5UaHJvdyk6CisgICAgICAgIChmb28pOgorICAgICAgICAoZ2V0IGZvbyk6
CisgICAgICAgICogc3RyZXNzL2dldC1mdW5jdGlvbi1yZWFsbS1ub3QtZG9pbmctcmVjdXJzaW9u
LmpzOgorICAgICAgICAoY2FuVGhyb3cpOgorCiAyMDIwLTA1LTI3ICBLZWl0aCBNaWxsZXIgIDxr
ZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIGZvci1vZiBzaG91bGQgY2hlY2sgdGhl
IGl0ZXJhYmxlIGlzIGEgSlNBcnJheSBmb3IgRmFzdEFycmF5IGluIERGRyBpdGVyYXRvcl9vcGVu
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9iaWdpbnQtY2FuLXRocm93LW9vbS5qcyBiL0pT
VGVzdHMvc3RyZXNzL2JpZ2ludC1jYW4tdGhyb3ctb29tLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwMzFiN2M4
ZGUxNzJlODI2Zjk0YWU1NTEzYjhhNTRhMGNhYjIzYWIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rl
c3RzL3N0cmVzcy9iaWdpbnQtY2FuLXRocm93LW9vbS5qcwpAQCAtMCwwICsxLDM5IEBACisvL0Ag
c2tpcCBpZiAkbWVtb3J5TGltaXRlZAorLy9AIHJ1bkRlZmF1bHQoIi0tdXNlQ29uY3VycmVudEpJ
VD0wIikKKworZnVuY3Rpb24gY2FuVGhyb3coZnVuYywgZXJyb3JNZXNzYWdlKSB7CisgICAgdmFy
IGVycm9yVGhyb3duID0gZmFsc2U7CisgICAgdmFyIGVycm9yID0gbnVsbDsKKyAgICB0cnkgewor
ICAgICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBlcnJvclRocm93biA9
IHRydWU7CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisgICAgaWYgKGVycm9yVGhyb3duICYm
IFN0cmluZyhlcnJvcikgIT09IGVycm9yTWVzc2FnZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KGBiYWQgZXJyb3I6ICR7U3RyaW5nKGVycm9yKX1gKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2NvbnN0IGEwID0gW107CithMC5fX3Byb3RvX18gPSB7fTsKK2EwLmxlbmd0aCA9IDIqKjIzCitP
YmplY3QuZGVmaW5lUHJvcGVydHkoYTAsIDAsIHsgZ2V0OiBmb28gfSk7CisKK2Z1bmN0aW9uIGZv
bygpIHsKKyAgICBuZXcgSW50MTZBcnJheShhMCk7Cit9CisKK25ldyBQcm9taXNlKGZvbyk7CisK
K3RyeSB7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgICAgIG5l
dyBVaW50OEFycmF5KDEwMDAwMCk7CisgICAgfQorfSBjYXRjaCB7fQorCitjYW5UaHJvdygoKSA9
PiB7CisgICAgZm9yIChsZXQgaT0wbjsgaTwxMDAwMG47IGkrKykgeworICAgICAgICAybioqaTsK
KyAgICB9Cit9LCBgUmFuZ2VFcnJvcjogT3V0IG9mIG1lbW9yeWApOwpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy9zdHJlc3MvZ2V0LWZ1bmN0aW9uLXJlYWxtLW5vdC1kb2luZy1yZWN1cnNpb24uanMgYi9K
U1Rlc3RzL3N0cmVzcy9nZXQtZnVuY3Rpb24tcmVhbG0tbm90LWRvaW5nLXJlY3Vyc2lvbi5qcwpp
bmRleCBhNzllZjJjYzYwZGFlOTgzYTRiMjk0ZjQ0YTE3ZDcyMWYzOTdmNjNiLi5mZmE2ZTNhYWNl
OTNkM2QzYjg3YTM5NzUyNjQ5NzhiYjk2ZjI4NTE1IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVz
cy9nZXQtZnVuY3Rpb24tcmVhbG0tbm90LWRvaW5nLXJlY3Vyc2lvbi5qcworKysgYi9KU1Rlc3Rz
L3N0cmVzcy9nZXQtZnVuY3Rpb24tcmVhbG0tbm90LWRvaW5nLXJlY3Vyc2lvbi5qcwpAQCAtOSw3
ICs5LDYgQEAgZnVuY3Rpb24gY2FuVGhyb3coZnVuYywgZXJyb3JNZXNzYWdlKSB7CiAgICAgfSBj
YXRjaCAoZSkgewogICAgICAgICBlcnJvclRocm93biA9IHRydWU7CiAgICAgICAgIGVycm9yID0g
ZTsKLSAgICAgICAgcHJpbnQoZXJyb3IubWVzc2FnZSk7CiAgICAgfQogICAgIGlmIChlcnJvclRo
cm93biAmJiBTdHJpbmcoZXJyb3IpICE9PSBlcnJvck1lc3NhZ2UpCiAgICAgICAgIHRocm93IG5l
dyBFcnJvcihgYmFkIGVycm9yOiAke1N0cmluZyhlcnJvcil9YCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>